diff --git a/reports/sepa/sepa-2.0.1.imixs-report b/reports/sepa/sepa-2.0.1.imixs-report index 9c122bd..26aae66 100644 --- a/reports/sepa/sepa-2.0.1.imixs-report +++ b/reports/sepa/sepa-2.0.1.imixs-report @@ -1 +1 @@ -$uniqueid$workflowgroup$taskid$workflowsummaryinvoice.numberinvoice.dateinvoice.totalinvoice.currencycdtr.namecdtr.ibancdtr.bicdbtr.namedbtr.ibandbtr.bicUTF-8SEPA export executed by the SepaScheduler. See the XSL definition for details. sepatype:"sepa" AND $taskid:210 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> <xsl:strip-space elements="*" /> <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> <xsl:template match="/"> <xsl:variable name="now" select="current-dateTime()" /> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03 pain.001.003.03.xsd"> <CstmrCdtTrfInitn> <!-- generate header info --> <!-- compute count of invoices --> <xsl:variable name="count" select="count(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']/item[@name='$uniqueid']/value)" /> <!-- compute total amount --> <xsl:variable name="totalsum" select="xs:decimal(sum(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']/item[@name='invoice.total']/value))" /> <!-- round to 2 digits --> <xsl:variable name="total" select="xs:decimal(round-half-to-even($totalsum, 2))" /> <!-- shortcut for the sepa export document --> <xsl:variable name="exportWorkitem" select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" /> <GrpHdr> <MsgId> <xsl:value-of select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> </MsgId> <CreDtTm><xsl:value-of select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /></CreDtTm> <NbOfTxs> <xsl:value-of select="$count" /> </NbOfTxs> <CtrlSum> <!-- round to 2 digits --> <xsl:value-of select="$total" /> </CtrlSum> <InitgPty> <Nm> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.name']/value" /> </Nm> </InitgPty> </GrpHdr> <PmtInf> <PmtInfId> <xsl:value-of select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /><xsl:text>-1</xsl:text> </PmtInfId> <PmtMtd>TRF</PmtMtd> <NbOfTxs> <xsl:value-of select="$count" /> </NbOfTxs> <CtrlSum> <!-- round to 2 digits --> <xsl:value-of select="$total" /> </CtrlSum> <PmtTpInf> <SvcLvl> <Cd>SEPA</Cd> </SvcLvl> </PmtTpInf> <ReqdExctnDt><xsl:value-of select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /></ReqdExctnDt> <Dbtr> <Nm> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.name']/value" /> </Nm> </Dbtr> <DbtrAcct> <Id> <IBAN> <xsl:value-of select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> </IBAN> </Id> </DbtrAcct> <DbtrAgt> <FinInstnId> <BIC> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.bic']/value" /> </BIC> </FinInstnId> </DbtrAgt> <ChrgBr>SLEV</ChrgBr> <!-- generate CdtTrfTxInf for each invoice --> <xsl:apply-templates select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']" /> </PmtInf> </CstmrCdtTrfInitn> </Document> </xsl:template> <!-- This template builds sepa header info --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']"> <!-- not in use --> </xsl:template> <!-- This template builds sepa payment info for each invoice --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']"> <CdtTrfTxInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> <PmtId> <EndToEndId>NOTPROVIDED</EndToEndId> </PmtId> <Amt> <InstdAmt> <xsl:attribute name="Ccy"><xsl:value-of select="item[@name='invoice.currency']/value" /></xsl:attribute> <xsl:value-of select="item[@name='invoice.total']/value" /> </InstdAmt> </Amt> <CdtrAgt> <FinInstnId> <BIC> <xsl:value-of select="item[@name='cdtr.bic']/value" /> </BIC> </FinInstnId> </CdtrAgt> <Cdtr> <Nm> <xsl:value-of select="item[@name='cdtr.name']/value" /> </Nm> </Cdtr> <CdtrAcct> <Id> <IBAN> <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> </IBAN> </Id> </CdtrAcct> <RmtInf> <Ustrd> <xsl:value-of select="item[@name='$workflowsummary']/value" /> </Ustrd> </RmtInf> </CdtTrfTxInf> </xsl:template></xsl:stylesheet>/imixs-adapters-sepa/src/reports/sepa-2.0.1.xsl \ No newline at end of file +$uniqueid$workflowgroup$taskid$workflowsummaryinvoice.numberinvoice.dateinvoice.totalinvoice.currencycdtr.namecdtr.ibancdtr.bicdbtr.namedbtr.ibandbtr.bicUTF-8SEPA export executed by the SepaScheduler. See the XSL definition for details. sepatype:"workitem" AND $taskid:5500<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> <xsl:strip-space elements="*" /> <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> <xsl:template match="/"> <xsl:variable name="now" select="current-dateTime()" /> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03 pain.001.003.03.xsd"> <CstmrCdtTrfInitn> <!-- generate header info --> <!-- compute count of invoices --> <xsl:variable name="count" select="count(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']/item[@name='$uniqueid']/value)" /> <!-- compute total amount --> <xsl:variable name="totalsum" select="xs:decimal(sum(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']/item[@name='invoice.total']/value))" /> <!-- round to 2 digits --> <xsl:variable name="total" select="xs:decimal(round-half-to-even($totalsum, 2))" /> <!-- shortcut for the sepa export document --> <xsl:variable name="exportWorkitem" select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" /> <GrpHdr> <MsgId> <xsl:value-of select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> </MsgId> <CreDtTm><xsl:value-of select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /></CreDtTm> <NbOfTxs> <xsl:value-of select="$count" /> </NbOfTxs> <CtrlSum> <!-- round to 2 digits --> <xsl:value-of select="$total" /> </CtrlSum> <InitgPty> <Nm> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.name']/value" /> </Nm> </InitgPty> </GrpHdr> <PmtInf> <PmtInfId> <xsl:value-of select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /><xsl:text>-1</xsl:text> </PmtInfId> <PmtMtd>TRF</PmtMtd> <NbOfTxs> <xsl:value-of select="$count" /> </NbOfTxs> <CtrlSum> <!-- round to 2 digits --> <xsl:value-of select="$total" /> </CtrlSum> <PmtTpInf> <SvcLvl> <Cd>SEPA</Cd> </SvcLvl> </PmtTpInf> <ReqdExctnDt><xsl:value-of select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /></ReqdExctnDt> <Dbtr> <Nm> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.name']/value" /> </Nm> </Dbtr> <DbtrAcct> <Id> <IBAN> <xsl:value-of select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> </IBAN> </Id> </DbtrAcct> <DbtrAgt> <FinInstnId> <BIC> <xsl:value-of select="$exportWorkitem/item[@name='dbtr.bic']/value" /> </BIC> </FinInstnId> </DbtrAgt> <ChrgBr>SLEV</ChrgBr> <!-- generate CdtTrfTxInf for each invoice --> <xsl:apply-templates select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']" /> </PmtInf> </CstmrCdtTrfInitn> </Document> </xsl:template> <!-- This template builds sepa header info --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']"> <!-- not in use --> </xsl:template> <!-- This template builds sepa payment info for each invoice --> <xsl:template match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Request']"> <CdtTrfTxInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> <PmtId> <EndToEndId>NOTPROVIDED</EndToEndId> </PmtId> <Amt> <InstdAmt> <xsl:attribute name="Ccy"><xsl:value-of select="item[@name='invoice.currency']/value" /></xsl:attribute> <xsl:value-of select="item[@name='invoice.total']/value" /> </InstdAmt> </Amt> <CdtrAgt> <FinInstnId> <BIC> <xsl:value-of select="item[@name='cdtr.bic']/value" /> </BIC> </FinInstnId> </CdtrAgt> <Cdtr> <Nm> <xsl:value-of select="item[@name='cdtr.name']/value" /> </Nm> </Cdtr> <CdtrAcct> <Id> <IBAN> <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> </IBAN> </Id> </CdtrAcct> <RmtInf> <Ustrd> <xsl:value-of select="item[@name='$workflowsummary']/value" /> </Ustrd> </RmtInf> </CdtTrfTxInf> </xsl:template></xsl:stylesheet>/office-alexander-logistics/reports/sepa/sepa-2.0.1.xsl \ No newline at end of file diff --git a/workflow/rechnungseingang-de-1.0.1.bpmn b/workflow/rechnungseingang-de-1.0.1.bpmn index 5533774..1c19cee 100644 --- a/workflow/rechnungseingang-de-1.0.1.bpmn +++ b/workflow/rechnungseingang-de-1.0.1.bpmn @@ -1306,13 +1306,7 @@ result.isValid=true; - - sepa-export-de-3.0 - 200 - 100 - (?!txtworkflowhistory)(^[a-zA-Z]|^_) - -]]> + diff --git a/workflow/rechnungseingang-de-sepa-test-1.0.1.bpmn b/workflow/rechnungseingang-de-sepa-test-1.0.1.bpmn deleted file mode 100644 index 691ade8..0000000 --- a/workflow/rechnungseingang-de-sepa-test-1.0.1.bpmn +++ /dev/null @@ -1,2611 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExclusiveGateway_4 - Task_2 - ExclusiveGateway_1 - StartEvent_1 - IntermediateCatchEvent_3 - IntermediateCatchEvent_13 - IntermediateCatchEvent_5 - IntermediateThrowEvent_3 - IntermediateCatchEvent_5000-20 - IntermediateCatchEvent_6 - - - ExclusiveGateway_3 - ExclusiveGateway_5 - IntermediateCatchEvent_2 - ExclusiveGateway_6 - IntermediateCatchEvent_5005-20 - EventBasedGateway_2 - Task_5005 - IntermediateCatchEvent_5005-10 - IntermediateCatchEvent_5005-30 - - - Task_5000 - EventBasedGateway_4 - IntermediateCatchEvent_16 - IntermediateCatchEvent_15 - IntermediateThrowEvent_1 - IntermediateCatchEvent_5000-10 - - - Task_3 - IntermediateThrowEvent_4 - IntermediateCatchEvent_7 - IntermediateCatchEvent_8 - IntermediateCatchEvent_17 - ExclusiveGateway_2 - Task_6 - IntermediateCatchEvent_14 - Task_5 - EndEvent_2 - IntermediateCatchEvent_12 - Task_4 - EndEvent_1 - IntermediateCatchEvent_4 - - - IntermediateCatchEvent_9 - Task_1 - IntermediateCatchEvent_11 - IntermediateThrowEvent_5 - IntermediateCatchEvent_10 - IntermediateCatchEvent_1 - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_31 - SequenceFlow_1 - SequenceFlow_32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - false - - - - SequenceFlow_31 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - space.name]]> - - - false - - - - - - - SequenceFlow_2 - SequenceFlow_24 - - - SequenceFlow_0 - SequenceFlow_15 - SequenceFlow_21 - SequenceFlow_33 - - - - SequenceFlow_0 - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_38 - SequenceFlow_34 - SequenceFlow_37 - - - - - - - - - - - - _subject]]> - - - - - - - - - _amount (Brutto € _amount_brutto) -_description]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home -space.name]]> - - - - - - - - - - - - false - - - - SequenceFlow_8 - SequenceFlow_51 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - false - - - - SequenceFlow_38 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home -space.name]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_10 - SequenceFlow_41 - - - SequenceFlow_37 - SequenceFlow_8 - SequenceFlow_10 - - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_33 - SequenceFlow_20 - SequenceFlow_2 - SequenceFlow_3 - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_20 - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_4 - SequenceFlow_27 - SequenceFlow_55 - SequenceFlow_22 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_29 - SequenceFlow_52 - - - SequenceFlow_32 - SequenceFlow_29 - SequenceFlow_30 - - - - - - - - - - - _subject]]> - - - - - - - - - _amount (Brutto € _amount_brutto) -_description]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - - - - false - - - - SequenceFlow_30 - SequenceFlow_7 - - - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_25 - SequenceFlow_42 - SequenceFlow_47 - - - SequenceFlow_47 - - - - - - - - - - - - - - _subject]]> - - - - - - - - - _amount (Brutto € _amount_brutto) -_description]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - namcurrenteditor.]]> - - - false - - - - SequenceFlow_55 - SequenceFlow_12 - - - - - - SequenceFlow_24 - SequenceFlow_13 - SequenceFlow_16 - - - workitem['space.team'] && workitem['space.team'][0]!="" - - - !workitem['space.team'] || workitem['space.team'][0]=="" - - - SequenceFlow_18 - SequenceFlow_1 - SequenceFlow_5 - - - workitem['process.manager'] && workitem['process.manager'][0]!="" - - - SequenceFlow_7 - SequenceFlow_5 - SequenceFlow_4 - - - - !workitem['process.manager'] || workitem['process.manager'][0]=="" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - SequenceFlow_6 - SequenceFlow_18 - - - SequenceFlow_51 - SequenceFlow_16 - SequenceFlow_6 - - - - SequenceFlow_15 - - - - - SequenceFlow_52 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_3 - SequenceFlow_9 - - - - SequenceFlow_9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_22 - SequenceFlow_17 - - - SequenceFlow_17 - - - - - - SequenceFlow_12 - SequenceFlow_19 - SequenceFlow_25 - - - - - - - - - - - SequenceFlow_19 - SequenceFlow_23 - - - - workitem['payment.type'] && workitem['payment.type'][0]=="sepa_transfer" - - - - !workitem['payment.type'] || workitem['payment.type'][0]!="sepa_transfer" - - - - - - - - - - - _subject]]> - - - - - - - - - _amount (Brutto € _amount_brutto) -_description]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - namcurrenteditor.]]> - - - false - - - SequenceFlow_27 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rechnungscontrolling]]> - - - - - - - - - - - - false - - - - SequenceFlow_21 - - - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_13 - SequenceFlow_26 - SequenceFlow_41 - SequenceFlow_11 - SequenceFlow_28 - SequenceFlow_36 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - false - - - - SequenceFlow_26 - - - - - - - - - - - - _subject]]> - - - - - - - - - _amount (Brutto € _amount_brutto) -_description]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home -space.name]]> - - - - - - - - - - - - false - - - - SequenceFlow_28 - SequenceFlow_34 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home -space.name]]> - - - - - - - - - - - - false - - - - - - - SequenceFlow_36 - SequenceFlow_35 - - - SequenceFlow_35 - - - - - - SequenceFlow_39 - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_39 - SequenceFlow_40 - - - SequenceFlow_40 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - home]]> - - - - - - - - - space.name]]> - - - false - - - - SequenceFlow_11 - - - - - - - - - txtlastcomment]]> - - - - - - - - - cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> - - - true - - - - - - - - - - - - - - - $workflowgroup - $workflowstatus]]> - SequenceFlow_23 - SequenceFlow_14 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1]]> - - - - - - - - - - - - - - - false - - - SequenceFlow_14 - SequenceFlow_42 - - - - - - - Wurde ein Prozess Manager festgelegt, erfolgt eine Genehmigung. - - - - Die Rechnung wurde sachlich geprüft und genehmigt und kann nun in den Zahlungslauf übergeben werden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file