@fin.cx/skr 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/skr.invoice.adapter.d.ts +15 -1
- package/dist_ts/skr.invoice.adapter.js +253 -41
- package/package.json +19 -23
- package/readme.md +25 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/skr.invoice.adapter.ts +291 -45
- /package/{license.md → license} +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@fin.cx/skr',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.3.1',
|
|
7
7
|
description: 'SKR03 and SKR04 German accounting standards for double-entry bookkeeping'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxhQUFhO0lBQ25CLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
|
@@ -18,6 +18,18 @@ export declare class InvoiceAdapter {
|
|
|
18
18
|
* Validate an invoice using multi-level validation
|
|
19
19
|
*/
|
|
20
20
|
private validateInvoice;
|
|
21
|
+
private validateInvoiceLevel;
|
|
22
|
+
private formatValidationMessages;
|
|
23
|
+
private getDetectedFormat;
|
|
24
|
+
private mapEInvoiceToBusinessTerms;
|
|
25
|
+
private mapEInvoiceLinesToBusinessTerms;
|
|
26
|
+
private buildVatBreakdown;
|
|
27
|
+
private mapEInvoiceContactToBusinessTerms;
|
|
28
|
+
private mapPaymentOptionsToBusinessTerms;
|
|
29
|
+
private getDueDate;
|
|
30
|
+
private getVatCategoryCode;
|
|
31
|
+
private normalizeCountryCode;
|
|
32
|
+
private formatStreet;
|
|
21
33
|
/**
|
|
22
34
|
* Map EN16931 Business Terms to internal invoice model
|
|
23
35
|
*/
|
|
@@ -96,5 +108,7 @@ export declare class InvoiceAdapter {
|
|
|
96
108
|
/**
|
|
97
109
|
* Map internal invoice to EN16931 Business Terms
|
|
98
110
|
*/
|
|
99
|
-
private
|
|
111
|
+
private mapToEInvoiceData;
|
|
112
|
+
private mapInvoicePartyToEInvoiceContact;
|
|
113
|
+
private calculateDueInDays;
|
|
100
114
|
}
|
|
@@ -41,11 +41,11 @@ export class InvoiceAdapter {
|
|
|
41
41
|
einvoice = await EInvoice.fromXml(xmlString);
|
|
42
42
|
}
|
|
43
43
|
// Get detected format
|
|
44
|
-
const format = this.mapEInvoiceFormat(einvoice
|
|
44
|
+
const format = this.mapEInvoiceFormat(this.getDetectedFormat(einvoice));
|
|
45
45
|
// Validate the invoice (takes ~2.2ms)
|
|
46
46
|
const validationResult = await this.validateInvoice(einvoice);
|
|
47
47
|
// Extract invoice data
|
|
48
|
-
const invoiceData =
|
|
48
|
+
const invoiceData = this.mapEInvoiceToBusinessTerms(einvoice);
|
|
49
49
|
// Map to internal invoice model
|
|
50
50
|
const invoice = await this.mapToInternalModel(invoiceData, format, direction, validationResult);
|
|
51
51
|
// Store original XML content
|
|
@@ -66,29 +66,9 @@ export class InvoiceAdapter {
|
|
|
66
66
|
* Validate an invoice using multi-level validation
|
|
67
67
|
*/
|
|
68
68
|
async validateInvoice(einvoice) {
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
const syntaxResult = {
|
|
73
|
-
isValid: validationResult.syntax?.valid !== false,
|
|
74
|
-
errors: validationResult.syntax?.errors || [],
|
|
75
|
-
warnings: validationResult.syntax?.warnings || []
|
|
76
|
-
};
|
|
77
|
-
const semanticResult = {
|
|
78
|
-
isValid: validationResult.semantic?.valid !== false,
|
|
79
|
-
errors: validationResult.semantic?.errors || [],
|
|
80
|
-
warnings: validationResult.semantic?.warnings || []
|
|
81
|
-
};
|
|
82
|
-
const businessResult = {
|
|
83
|
-
isValid: validationResult.business?.valid !== false,
|
|
84
|
-
errors: validationResult.business?.errors || [],
|
|
85
|
-
warnings: validationResult.business?.warnings || []
|
|
86
|
-
};
|
|
87
|
-
const countryResult = {
|
|
88
|
-
isValid: validationResult.country?.valid !== false,
|
|
89
|
-
errors: validationResult.country?.errors || [],
|
|
90
|
-
warnings: validationResult.country?.warnings || []
|
|
91
|
-
};
|
|
69
|
+
const syntaxResult = await this.validateInvoiceLevel(einvoice, 'syntax');
|
|
70
|
+
const semanticResult = await this.validateInvoiceLevel(einvoice, 'semantic');
|
|
71
|
+
const businessResult = await this.validateInvoiceLevel(einvoice, 'business');
|
|
92
72
|
return {
|
|
93
73
|
isValid: syntaxResult.isValid && semanticResult.isValid && businessResult.isValid,
|
|
94
74
|
syntax: {
|
|
@@ -107,14 +87,184 @@ export class InvoiceAdapter {
|
|
|
107
87
|
warnings: businessResult.warnings || []
|
|
108
88
|
},
|
|
109
89
|
countrySpecific: {
|
|
110
|
-
valid:
|
|
111
|
-
errors:
|
|
112
|
-
warnings:
|
|
90
|
+
valid: true,
|
|
91
|
+
errors: [],
|
|
92
|
+
warnings: []
|
|
113
93
|
},
|
|
114
94
|
validatedAt: new Date(),
|
|
115
|
-
validatorVersion: '
|
|
95
|
+
validatorVersion: '6.0.0'
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async validateInvoiceLevel(einvoice, level) {
|
|
99
|
+
const validationResult = await einvoice.validate(level);
|
|
100
|
+
return {
|
|
101
|
+
isValid: validationResult.valid !== false,
|
|
102
|
+
errors: this.formatValidationMessages(validationResult.errors),
|
|
103
|
+
warnings: this.formatValidationMessages(validationResult.warnings),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
formatValidationMessages(messages = []) {
|
|
107
|
+
return messages.map((message) => {
|
|
108
|
+
if (typeof message === 'string') {
|
|
109
|
+
return message;
|
|
110
|
+
}
|
|
111
|
+
return [message.code, message.message, message.location]
|
|
112
|
+
.filter(Boolean)
|
|
113
|
+
.join(': ');
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
getDetectedFormat(einvoice) {
|
|
117
|
+
if (typeof einvoice.getFormat === 'function') {
|
|
118
|
+
return einvoice.getFormat();
|
|
119
|
+
}
|
|
120
|
+
return einvoice.format || 'xrechnung';
|
|
121
|
+
}
|
|
122
|
+
mapEInvoiceToBusinessTerms(einvoice) {
|
|
123
|
+
const issueDate = new Date(einvoice.date || Date.now());
|
|
124
|
+
const invoiceLines = this.mapEInvoiceLinesToBusinessTerms(einvoice.items || [], Boolean(einvoice.reverseCharge));
|
|
125
|
+
const vatBreakdown = this.buildVatBreakdown(invoiceLines);
|
|
126
|
+
const lineNetAmount = invoiceLines.reduce((sum, line) => sum + line.BT131_LineNetAmount, 0);
|
|
127
|
+
const totalVATAmount = vatBreakdown.reduce((sum, vat) => sum + vat.BT117_TaxAmount, 0);
|
|
128
|
+
const taxInclusiveAmount = lineNetAmount + totalVATAmount;
|
|
129
|
+
return {
|
|
130
|
+
BT1_InvoiceNumber: einvoice.accountingDocId || einvoice.id || einvoice.invoiceId || '',
|
|
131
|
+
BT2_IssueDate: issueDate.toISOString(),
|
|
132
|
+
BT3_InvoiceTypeCode: einvoice.accountingDocType === 'creditnote' ? '381' : '380',
|
|
133
|
+
BT5_CurrencyCode: einvoice.currency || 'EUR',
|
|
134
|
+
BT7_TaxPointDate: einvoice.deliveryDate ? new Date(einvoice.deliveryDate).toISOString() : undefined,
|
|
135
|
+
BT9_PaymentDueDate: this.getDueDate(issueDate, einvoice.dueInDays)?.toISOString(),
|
|
136
|
+
BT10_BuyerReference: einvoice.buyerReference,
|
|
137
|
+
BT22_InvoiceNote: Array.isArray(einvoice.notes) ? einvoice.notes.join('\n') : undefined,
|
|
138
|
+
BG4_Seller: this.mapEInvoiceContactToBusinessTerms(einvoice.from, 'seller', einvoice.paymentOptions),
|
|
139
|
+
BG7_Buyer: this.mapEInvoiceContactToBusinessTerms(einvoice.to, 'buyer'),
|
|
140
|
+
BG25_InvoiceLines: invoiceLines,
|
|
141
|
+
BG20_DocumentAllowances: [],
|
|
142
|
+
BG21_DocumentCharges: [],
|
|
143
|
+
BT106_SumOfLineNetAmounts: lineNetAmount,
|
|
144
|
+
BT107_AllowanceTotalAmount: 0,
|
|
145
|
+
BT108_ChargeTotalAmount: 0,
|
|
146
|
+
BT109_TaxExclusiveAmount: lineNetAmount,
|
|
147
|
+
BT110_TotalVATAmount: totalVATAmount,
|
|
148
|
+
BT112_TaxInclusiveAmount: taxInclusiveAmount,
|
|
149
|
+
BT113_PrepaidAmount: 0,
|
|
150
|
+
BT115_PayableAmount: taxInclusiveAmount,
|
|
151
|
+
BG23_VATBreakdown: vatBreakdown,
|
|
152
|
+
BG16_PaymentInstructions: this.mapPaymentOptionsToBusinessTerms(einvoice.paymentOptions),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
mapEInvoiceLinesToBusinessTerms(items, reverseCharge) {
|
|
156
|
+
return items.map((item, index) => {
|
|
157
|
+
const quantity = Number(item.unitQuantity || 0);
|
|
158
|
+
const unitPrice = Number(item.unitNetPrice || 0);
|
|
159
|
+
const vatRate = Number(item.vatPercentage || 0);
|
|
160
|
+
const netAmount = quantity * unitPrice;
|
|
161
|
+
const vatAmount = reverseCharge ? 0 : netAmount * vatRate / 100;
|
|
162
|
+
return {
|
|
163
|
+
BT154_ItemDescription: item.name || '',
|
|
164
|
+
BT129_Quantity: quantity,
|
|
165
|
+
BT146_NetPrice: unitPrice,
|
|
166
|
+
BT131_LineNetAmount: netAmount,
|
|
167
|
+
BT151_ItemVATCategory: this.getVatCategoryCode(vatRate, reverseCharge),
|
|
168
|
+
BT152_ItemVATRate: vatRate,
|
|
169
|
+
BT155_ItemSellerID: item.articleNumber,
|
|
170
|
+
lineVATAmount: vatAmount,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
buildVatBreakdown(invoiceLines) {
|
|
175
|
+
const vatBreakdownMap = new Map();
|
|
176
|
+
for (const line of invoiceLines) {
|
|
177
|
+
const categoryCode = line.BT151_ItemVATCategory || 'S';
|
|
178
|
+
const rate = Number(line.BT152_ItemVATRate || 0);
|
|
179
|
+
const key = `${categoryCode}:${rate}`;
|
|
180
|
+
const existingBreakdown = vatBreakdownMap.get(key) || {
|
|
181
|
+
categoryCode,
|
|
182
|
+
rate,
|
|
183
|
+
taxableAmount: 0,
|
|
184
|
+
taxAmount: 0,
|
|
185
|
+
};
|
|
186
|
+
existingBreakdown.taxableAmount += Number(line.BT131_LineNetAmount || 0);
|
|
187
|
+
existingBreakdown.taxAmount += Number(line.lineVATAmount || 0);
|
|
188
|
+
vatBreakdownMap.set(key, existingBreakdown);
|
|
189
|
+
}
|
|
190
|
+
return Array.from(vatBreakdownMap.values()).map((vatBreakdown) => ({
|
|
191
|
+
BT118_VATCategory: vatBreakdown.categoryCode,
|
|
192
|
+
BT119_VATRate: vatBreakdown.rate,
|
|
193
|
+
BT116_TaxableAmount: vatBreakdown.taxableAmount,
|
|
194
|
+
BT117_TaxAmount: vatBreakdown.taxAmount,
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
mapEInvoiceContactToBusinessTerms(contact, role, paymentOptions) {
|
|
198
|
+
const address = contact?.address || {};
|
|
199
|
+
const registrationDetails = contact?.registrationDetails || {};
|
|
200
|
+
const countryCode = this.normalizeCountryCode(address.countryCode || address.country);
|
|
201
|
+
if (role === 'seller') {
|
|
202
|
+
return {
|
|
203
|
+
BT27_SellerName: contact?.name || '',
|
|
204
|
+
BT29_SellerID: registrationDetails.registrationId,
|
|
205
|
+
BT31_SellerVATID: registrationDetails.vatId,
|
|
206
|
+
BT32_SellerTaxID: registrationDetails.registrationId,
|
|
207
|
+
BT33_SellerPhone: contact?.phone,
|
|
208
|
+
BT34_SellerEmail: contact?.email,
|
|
209
|
+
BT35_SellerStreet: this.formatStreet(address),
|
|
210
|
+
BT37_SellerCity: address.city,
|
|
211
|
+
BT38_SellerPostalCode: address.postalCode,
|
|
212
|
+
BT40_SellerCountryCode: countryCode,
|
|
213
|
+
BT84_PaymentAccountID: paymentOptions?.sepaConnection?.iban,
|
|
214
|
+
BT85_PaymentAccountName: contact?.name,
|
|
215
|
+
BT86_PaymentServiceProviderID: paymentOptions?.sepaConnection?.bic,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
BT44_BuyerName: contact?.name || '',
|
|
220
|
+
BT46_BuyerID: registrationDetails.registrationId,
|
|
221
|
+
BT47_BuyerTaxID: registrationDetails.registrationId,
|
|
222
|
+
BT48_BuyerVATID: registrationDetails.vatId,
|
|
223
|
+
BT49_BuyerEmail: contact?.email,
|
|
224
|
+
BT50_BuyerStreet: this.formatStreet(address),
|
|
225
|
+
BT52_BuyerCity: address.city,
|
|
226
|
+
BT53_BuyerPostalCode: address.postalCode,
|
|
227
|
+
BT55_BuyerCountryCode: countryCode,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
mapPaymentOptionsToBusinessTerms(paymentOptions) {
|
|
231
|
+
if (!paymentOptions?.sepaConnection?.iban) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
BT81_PaymentMeansCode: '30',
|
|
236
|
+
BT84_PaymentAccountID: paymentOptions.sepaConnection.iban,
|
|
237
|
+
BT85_PaymentAccountName: paymentOptions.description,
|
|
238
|
+
BT86_PaymentServiceProviderID: paymentOptions.sepaConnection.bic,
|
|
116
239
|
};
|
|
117
240
|
}
|
|
241
|
+
getDueDate(issueDate, dueInDays) {
|
|
242
|
+
if (typeof dueInDays !== 'number') {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
return new Date(issueDate.getTime() + dueInDays * 24 * 60 * 60 * 1000);
|
|
246
|
+
}
|
|
247
|
+
getVatCategoryCode(vatRate, reverseCharge) {
|
|
248
|
+
if (reverseCharge) {
|
|
249
|
+
return 'AE';
|
|
250
|
+
}
|
|
251
|
+
return vatRate === 0 ? 'Z' : 'S';
|
|
252
|
+
}
|
|
253
|
+
normalizeCountryCode(country) {
|
|
254
|
+
if (!country) {
|
|
255
|
+
return 'DE';
|
|
256
|
+
}
|
|
257
|
+
const countryMap = {
|
|
258
|
+
Germany: 'DE',
|
|
259
|
+
Deutschland: 'DE',
|
|
260
|
+
};
|
|
261
|
+
return countryMap[country] || country;
|
|
262
|
+
}
|
|
263
|
+
formatStreet(address) {
|
|
264
|
+
return [address.streetName, address.houseNumber]
|
|
265
|
+
.filter(Boolean)
|
|
266
|
+
.join(' ');
|
|
267
|
+
}
|
|
118
268
|
/**
|
|
119
269
|
* Map EN16931 Business Terms to internal invoice model
|
|
120
270
|
*/
|
|
@@ -449,8 +599,8 @@ export class InvoiceAdapter {
|
|
|
449
599
|
const EInvoice = await this.getEInvoiceClass();
|
|
450
600
|
const einvoice = new EInvoice();
|
|
451
601
|
// Set invoice data
|
|
452
|
-
const
|
|
453
|
-
Object.assign(einvoice,
|
|
602
|
+
const einvoiceData = this.mapToEInvoiceData(invoiceData);
|
|
603
|
+
Object.assign(einvoice, einvoiceData);
|
|
454
604
|
// Generate XML in requested format
|
|
455
605
|
const xml = await einvoice.exportXml(format);
|
|
456
606
|
// Generate PDF if ZUGFeRD or Factur-X
|
|
@@ -472,17 +622,79 @@ export class InvoiceAdapter {
|
|
|
472
622
|
/**
|
|
473
623
|
* Map internal invoice to EN16931 Business Terms
|
|
474
624
|
*/
|
|
475
|
-
|
|
625
|
+
mapToEInvoiceData(invoice) {
|
|
626
|
+
const issueDate = invoice.issueDate || new Date();
|
|
627
|
+
return {
|
|
628
|
+
id: invoice.invoiceNumber || '',
|
|
629
|
+
accountingDocId: invoice.invoiceNumber || '',
|
|
630
|
+
accountingDocType: invoice.invoiceTypeCode === '381' ? 'creditnote' : 'invoice',
|
|
631
|
+
date: issueDate.getTime(),
|
|
632
|
+
currency: invoice.currencyCode || 'EUR',
|
|
633
|
+
buyerReference: invoice.buyerReference,
|
|
634
|
+
deliveryDate: invoice.taxPointDate?.getTime(),
|
|
635
|
+
dueInDays: this.calculateDueInDays(issueDate, invoice.paymentDueDate),
|
|
636
|
+
notes: invoice.invoiceNote ? [invoice.invoiceNote] : [],
|
|
637
|
+
from: this.mapInvoicePartyToEInvoiceContact(invoice.supplier),
|
|
638
|
+
to: this.mapInvoicePartyToEInvoiceContact(invoice.customer),
|
|
639
|
+
items: (invoice.lines || []).map((line) => ({
|
|
640
|
+
position: line.lineNumber,
|
|
641
|
+
name: line.description,
|
|
642
|
+
articleNumber: line.productCode,
|
|
643
|
+
unitType: 'EA',
|
|
644
|
+
unitQuantity: line.quantity,
|
|
645
|
+
unitNetPrice: line.unitPrice,
|
|
646
|
+
vatPercentage: line.vatCategory.rate,
|
|
647
|
+
})),
|
|
648
|
+
paymentOptions: invoice.paymentMeans?.account ? {
|
|
649
|
+
description: invoice.paymentMeans.account.accountHolder,
|
|
650
|
+
sepaConnection: {
|
|
651
|
+
iban: invoice.paymentMeans.account.iban,
|
|
652
|
+
bic: invoice.paymentMeans.account.bic || '',
|
|
653
|
+
},
|
|
654
|
+
payPal: {
|
|
655
|
+
email: '',
|
|
656
|
+
},
|
|
657
|
+
} : undefined,
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
mapInvoicePartyToEInvoiceContact(party) {
|
|
661
|
+
const countryCode = this.normalizeCountryCode(party?.address?.countryCode);
|
|
476
662
|
return {
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
663
|
+
type: 'company',
|
|
664
|
+
name: party?.name || '',
|
|
665
|
+
description: '',
|
|
666
|
+
address: {
|
|
667
|
+
streetName: party?.address?.street || '',
|
|
668
|
+
houseNumber: '',
|
|
669
|
+
city: party?.address?.city || '',
|
|
670
|
+
postalCode: party?.address?.postalCode || '',
|
|
671
|
+
country: countryCode,
|
|
672
|
+
countryCode,
|
|
673
|
+
},
|
|
674
|
+
registrationDetails: {
|
|
675
|
+
vatId: party?.vatId || '',
|
|
676
|
+
registrationId: party?.id || party?.taxId || '',
|
|
677
|
+
registrationName: party?.name || '',
|
|
678
|
+
},
|
|
679
|
+
status: 'active',
|
|
680
|
+
foundedDate: {
|
|
681
|
+
year: new Date().getFullYear(),
|
|
682
|
+
month: new Date().getMonth() + 1,
|
|
683
|
+
day: new Date().getDate(),
|
|
684
|
+
},
|
|
685
|
+
email: party?.email,
|
|
686
|
+
phone: party?.phone,
|
|
687
|
+
sepaConnection: party?.bankAccount ? {
|
|
688
|
+
iban: party.bankAccount.iban,
|
|
689
|
+
bic: party.bankAccount.bic || '',
|
|
690
|
+
} : undefined,
|
|
485
691
|
};
|
|
486
692
|
}
|
|
693
|
+
calculateDueInDays(issueDate, paymentDueDate) {
|
|
694
|
+
if (!paymentDueDate) {
|
|
695
|
+
return 30;
|
|
696
|
+
}
|
|
697
|
+
return Math.max(0, Math.round((paymentDueDate.getTime() - issueDate.getTime()) / (24 * 60 * 60 * 1000)));
|
|
698
|
+
}
|
|
487
699
|
}
|
|
488
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmludm9pY2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5pbnZvaWNlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFjeEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDakIsTUFBTSxDQUE4QjtJQUMzQixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUV6RDtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBSTVCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUsxRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVnQixZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXO0lBQzVDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7SUFFN0Q7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWSxDQUN2QixJQUFxQixFQUNyQixTQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxzQkFBc0I7WUFDdEIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxNQUFNLGVBQWUsSUFBSSxDQUFDLFlBQVksU0FBUyxDQUFDLENBQUM7Z0JBQ25HLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFB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
|
|
700
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tyLmludm9pY2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Nrci5pbnZvaWNlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFjeEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDakIsTUFBTSxDQUE4QjtJQUMzQixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUV6RDtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBSTVCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUsxRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVnQixZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXO0lBQzVDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7SUFFN0Q7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWSxDQUN2QixJQUFxQixFQUNyQixTQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxzQkFBc0I7WUFDdEIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxNQUFNLGVBQWUsSUFBSSxDQUFDLFlBQVksU0FBUyxDQUFDLENBQUM7Z0JBQ25HLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2RSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsTUFBTSxvQkFBb0IsSUFBSSxDQUFDLFlBQVksY0FBYyxDQUFDLENBQUM7WUFDNUcsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9DLElBQUksUUFBYSxDQUFDO1lBQ2xCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGlDQUFpQztnQkFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekMsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsc0JBQXNCO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUV4RSxzQ0FBc0M7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFOUQsdUJBQXVCO1lBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5RCxnQ0FBZ0M7WUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQzNDLFdBQVcsRUFDWCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixDQUNqQixDQUFDO1lBRUYsNkJBQTZCO1lBQzdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXZDLHlCQUF5QjtZQUN6QixPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxVQUFXLENBQUMsQ0FBQztZQUUzRSx3QkFBd0I7WUFDeEIsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBYTtRQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU3RSxPQUFPO1lBQ0wsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTztZQUNqRixNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPO2dCQUMzQixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFO2dCQUNqQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFO2FBQ3RDO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxjQUFjLENBQUMsT0FBTztnQkFDN0IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRLElBQUksRUFBRTthQUN4QztZQUNELGFBQWEsRUFBRTtnQkFDYixLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU87Z0JBQzdCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxJQUFJLEVBQUU7Z0JBQ25DLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUSxJQUFJLEVBQUU7YUFDeEM7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLEVBQUU7YUFDYjtZQUNELFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRTtZQUN2QixnQkFBZ0IsRUFBRSxPQUFPO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxRQUFhLEVBQ2IsS0FBeUM7UUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsT0FBTztZQUNMLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssS0FBSztZQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUM5RCxRQUFRLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVPLHdCQUF3QixDQUFDLFdBQWtCLEVBQUU7UUFDbkQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDckQsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBYTtRQUNyQyxJQUFJLE9BQU8sUUFBUSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QyxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRU8sMEJBQTBCLENBQUMsUUFBYTtRQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDakgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLGtCQUFrQixHQUFHLGFBQWEsR0FBRyxjQUFjLENBQUM7UUFFMUQsT0FBTztZQUNMLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDdEYsYUFBYSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ2hGLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxRQUFRLElBQUksS0FBSztZQUM1QyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsRUFBRTtZQUNqRixtQkFBbUIsRUFBRSxRQUFRLENBQUMsY0FBYztZQUM1QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDdkYsVUFBVSxFQUFFLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQ3BHLFNBQVMsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFDdkUsaUJBQWlCLEVBQUUsWUFBWTtZQUMvQix1QkFBdUIsRUFBRSxFQUFFO1lBQzNCLG9CQUFvQixFQUFFLEVBQUU7WUFDeEIseUJBQXlCLEVBQUUsYUFBYTtZQUN4QywwQkFBMEIsRUFBRSxDQUFDO1lBQzdCLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsd0JBQXdCLEVBQUUsYUFBYTtZQUN2QyxvQkFBb0IsRUFBRSxjQUFjO1lBQ3BDLHdCQUF3QixFQUFFLGtCQUFrQjtZQUM1QyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLG1CQUFtQixFQUFFLGtCQUFrQjtZQUN2QyxpQkFBaUIsRUFBRSxZQUFZO1lBQy9CLHdCQUF3QixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1NBQ3pGLENBQUM7SUFDSixDQUFDO0lBRU8sK0JBQStCLENBQUMsS0FBWSxFQUFFLGFBQXNCO1FBQzFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUVoRSxPQUFPO2dCQUNMLHFCQUFxQixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDdEMsY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixtQkFBbUIsRUFBRSxTQUFTO2dCQUM5QixxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQztnQkFDdEUsaUJBQWlCLEVBQUUsT0FBTztnQkFDMUIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3RDLGFBQWEsRUFBRSxTQUFTO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxZQUFtQjtRQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBNEYsQ0FBQztRQUU1SCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxHQUFHLENBQUM7WUFDdkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUk7Z0JBQ3BELFlBQVk7Z0JBQ1osSUFBSTtnQkFDSixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsU0FBUyxFQUFFLENBQUM7YUFDYixDQUFDO1lBRUYsaUJBQWlCLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsaUJBQWlCLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9ELGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLFlBQVk7WUFDNUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQ2hDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxhQUFhO1lBQy9DLGVBQWUsRUFBRSxZQUFZLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxpQ0FBaUMsQ0FDdkMsT0FBWSxFQUNaLElBQXdCLEVBQ3hCLGNBQW9CO1FBRXBCLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEYsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTztnQkFDTCxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNwQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDakQsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsS0FBSztnQkFDM0MsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDcEQsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEtBQUs7Z0JBQ2hDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLO2dCQUNoQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDN0MsZUFBZSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUM3QixxQkFBcUIsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDekMsc0JBQXNCLEVBQUUsV0FBVztnQkFDbkMscUJBQXFCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJO2dCQUMzRCx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsSUFBSTtnQkFDdEMsNkJBQTZCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxHQUFHO2FBQ25FLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDbkMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLGNBQWM7WUFDaEQsZUFBZSxFQUFFLG1CQUFtQixDQUFDLGNBQWM7WUFDbkQsZUFBZSxFQUFFLG1CQUFtQixDQUFDLEtBQUs7WUFDMUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLO1lBQy9CLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQzVDLGNBQWMsRUFBRSxPQUFPLENBQUMsSUFBSTtZQUM1QixvQkFBb0IsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUN4QyxxQkFBcUIsRUFBRSxXQUFXO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsY0FBbUI7UUFDMUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU87WUFDTCxxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLHFCQUFxQixFQUFFLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSTtZQUN6RCx1QkFBdUIsRUFBRSxjQUFjLENBQUMsV0FBVztZQUNuRCw2QkFBNkIsRUFBRSxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUc7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFTyxVQUFVLENBQUMsU0FBZSxFQUFFLFNBQWtCO1FBQ3BELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBZSxFQUFFLGFBQXNCO1FBQ2hFLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNuQyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBZ0I7UUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQTJCO1lBQ3pDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztRQUVGLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQVk7UUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUM5QixhQUFrQixFQUNsQixNQUFzQixFQUN0QixTQUE0QixFQUM1QixnQkFBbUM7UUFFbkMsTUFBTSxPQUFPLEdBQWE7WUFDeEIsV0FBVztZQUNYLEVBQUUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUNqQyxTQUFTO1lBQ1QsTUFBTTtZQUVOLHlCQUF5QjtZQUN6QixhQUFhLEVBQUUsYUFBYSxDQUFDLGlCQUFpQjtZQUM5QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxlQUFlLEVBQUUsYUFBYSxDQUFDLG1CQUFtQixJQUFJLEtBQUs7WUFDM0QsWUFBWSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLO1lBQ3JELGVBQWUsRUFBRSxhQUFhLENBQUMsbUJBQW1CO1lBQ2xELFlBQVksRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ25HLGNBQWMsRUFBRSxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3pHLGNBQWMsRUFBRSxhQUFhLENBQUMsbUJBQW1CO1lBQ2pELGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxxQkFBcUI7WUFDckQsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLHNCQUFzQjtZQUN2RCxjQUFjLEVBQUUsYUFBYSxDQUFDLG1CQUFtQjtZQUNqRCxvQkFBb0IsRUFBRSxhQUFhLENBQUMseUJBQXlCO1lBRTdELFVBQVU7WUFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQ2pELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDaEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBRXJGLGFBQWE7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBRWxFLHlCQUF5QjtZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO1lBQ3hGLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUM7WUFFbkYsVUFBVTtZQUNWLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLHlCQUF5QixJQUFJLENBQUMsQ0FBQztZQUN2RSxvQkFBb0IsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLDBCQUEwQixJQUFJLENBQUMsQ0FBQztZQUMvRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztZQUN6RSxrQkFBa0IsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztZQUMzRSxrQkFBa0IsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztZQUMzRSxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7WUFDakUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDO1lBRWpFLGdCQUFnQjtZQUNoQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ3pFLGNBQWMsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQztZQUVuRSxVQUFVO1lBQ1YsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1lBQ2pELFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztZQUUxRSxRQUFRO1lBQ1IsV0FBVyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7WUFFM0Msc0JBQXNCO1lBQ3RCLE1BQU0sRUFBRSxXQUFXO1lBRW5CLCtCQUErQjtZQUMvQixXQUFXLEVBQUUsRUFBRTtZQUVmLGFBQWE7WUFDYixnQkFBZ0I7WUFFaEIsY0FBYztZQUNkLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNyQixTQUFTLEVBQUUsUUFBUTtZQUVuQixXQUFXO1lBQ1gsUUFBUSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDdEIsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLGNBQWMsRUFBRSxNQUFNO2FBQ3ZCO1NBQ0YsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNLLFFBQVEsQ0FBQyxTQUFjO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTthQUMvQixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxFQUFFLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxjQUFjLElBQUksRUFBRTtZQUNqRSxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsZ0JBQWdCO2dCQUNqRSxJQUFJLEVBQUUsU0FBUyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsY0FBYztnQkFDM0QsVUFBVSxFQUFFLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxTQUFTLENBQUMsb0JBQW9CO2dCQUM3RSxXQUFXLEVBQUUsU0FBUyxDQUFDLHNCQUFzQixJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJO2FBQ3pGO1lBQ0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsZUFBZTtZQUM5RCxLQUFLLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxlQUFlO1lBQzlELEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDLGVBQWU7WUFDOUQsS0FBSyxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7WUFDakMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsU0FBYztRQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLENBQUM7WUFDdEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLHFCQUFxQjtZQUNyQyxHQUFHLEVBQUUsU0FBUyxDQUFDLDZCQUE2QjtZQUM1QyxhQUFhLEVBQUUsU0FBUyxDQUFDLHVCQUF1QjtTQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLFNBQWdCO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMscUJBQXFCLElBQUksRUFBRTtZQUM3QyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1lBQzlDLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDL0MsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDO1lBQ3BELFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDcEYsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztZQUM5QyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7WUFDNUYsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztZQUMvRSxPQUFPLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDO1NBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLFlBQW9CLEVBQUUsSUFBcUI7UUFDaEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVuRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLFlBQVksSUFBSSxHQUFHO1lBQ3pCLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztZQUNsQixlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztTQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsWUFBb0I7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBdUM7WUFDM0QsR0FBRyxFQUFFLFlBQVk7WUFDakIsR0FBRyxFQUFFLFlBQVk7WUFDakIsSUFBSSxFQUFFLDRCQUE0QjtZQUNsQyxHQUFHLEVBQUUsaUJBQWlCO1lBQ3RCLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsR0FBRyxFQUFFLHNCQUFzQjtZQUMzQixHQUFHLEVBQUUsU0FBUyxDQUFDLDhCQUE4QjtTQUM5QyxDQUFDO1FBRUYsT0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsWUFBbUI7UUFDekMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUMxRSxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7WUFDdkQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztTQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQixDQUFDLElBQVcsRUFBRSxXQUFvQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUU7WUFDbEUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztZQUM1RSxVQUFVLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxzQkFBc0I7WUFDeEUsV0FBVyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCO2dCQUN6RSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FDakIsSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFDOUQsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkQ7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztTQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QixDQUFDLElBQVcsRUFBRSxXQUFvQjtRQUNoRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLEVBQUU7WUFDM0UsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsQ0FBQztZQUN0RixVQUFVLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixJQUFJLElBQUksQ0FBQywwQkFBMEI7U0FDbEYsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsYUFBa0I7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFFLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBa0I7WUFDbEMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLGtCQUFrQjtZQUN2RSxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsaUJBQWlCO1NBQ2xELENBQUM7UUFFRixrREFBa0Q7UUFDbEQsSUFBSSxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsZ0JBQXdCO1FBQy9DLE1BQU0sV0FBVyxHQUE0QixFQUFFLENBQUM7UUFFaEQsaUNBQWlDO1FBQ2pDLGlEQUFpRDtRQUNqRCw4Q0FBOEM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUM7UUFFVixPQUFPLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQy9ELFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQzthQUMxRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLG1CQUF3QjtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTztZQUNMLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLEVBQUUscUJBQXFCO1lBQzlFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxxQkFBcUI7Z0JBQ2hELENBQUMsQ0FBQztvQkFDRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMscUJBQXFCO29CQUMvQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsNkJBQTZCO29CQUN0RCxhQUFhLEVBQUUsbUJBQW1CLENBQUMsdUJBQXVCO2lCQUMzRDtnQkFDSCxDQUFDLENBQUMsU0FBUztTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFpQjtRQUMzQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRSxpQkFBaUI7UUFDakIsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE9BQU8sZ0JBQWdCLENBQUM7UUFDMUIsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEcsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLGVBQWUsS0FBSyxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbEgsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLGlCQUFpQixDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLHNCQUFzQixDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLElBQUksZUFBZSxLQUFLLElBQUksSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEUsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLFdBQW1CO1FBQ3JDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDMUQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUMxRCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1NBQ3pDLENBQUM7UUFDRixPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsTUFBYztRQUN0QyxNQUFNLFNBQVMsR0FBbUM7WUFDaEQsV0FBVyxFQUFFLFdBQVc7WUFDeEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLFNBQVM7WUFDckIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFrQjtRQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixPQUFpQixFQUNqQixZQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCx5QkFBeUI7WUFDekIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVcsQ0FBQyxDQUFDO1lBRWxFLDBDQUEwQztZQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBbUIsQ0FBQyxDQUFDO1lBRW5FLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHFDQUFxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUMxQixXQUE4QixFQUM5QixNQUFzQjtRQUV0QixJQUFJLENBQUM7WUFDSCxnQ0FBZ0M7WUFDaEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBRXJDLG1CQUFtQjtZQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFdEMsbUNBQW1DO1lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFhLENBQUMsQ0FBQztZQUVwRCxzQ0FBc0M7WUFDdEMsSUFBSSxHQUF1QixDQUFDO1lBQzVCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2pELHVDQUF1QztnQkFDdkMsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3hDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSwrQkFBK0IsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRSxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsT0FBMEI7UUFDbEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxELE9BQU87WUFDTCxFQUFFLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQy9CLGVBQWUsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDNUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMvRSxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUN6QixRQUFRLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3ZDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUU7WUFDN0MsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNyRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzdELEVBQUUsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3RCLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDL0IsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQzVCLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7YUFDckMsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQ3ZELGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSTtvQkFDdkMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFO2lCQUM1QztnQkFDRCxNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7YUFDRixDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxLQUFxQjtRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUzRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO2dCQUN4QyxXQUFXLEVBQUUsRUFBRTtnQkFDZixJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDaEMsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7Z0JBQzVDLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixXQUFXO2FBQ1o7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDekIsY0FBYyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUMvQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUU7YUFDcEM7WUFDRCxNQUFNLEVBQUUsUUFBUTtZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUM5QixLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO2dCQUNoQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUU7YUFDMUI7WUFDRCxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1lBQ25CLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDNUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUU7YUFDakMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQUMsU0FBZSxFQUFFLGNBQXFCO1FBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fin.cx/skr",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "SKR03 and SKR04 German accounting standards for double-entry bookkeeping",
|
|
5
5
|
"main": "dist_ts/index.js",
|
|
6
6
|
"typings": "dist_ts/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"test": "tstest test/ --verbose --logfile --timeout=60 && pnpm run test:published-types",
|
|
10
|
-
"test:published-types": "pnpm build && pnpm exec tsc --pretty false -p test/fixtures/strict-consumer/tsconfig.json",
|
|
11
|
-
"build": "tsbuild --web --node",
|
|
12
|
-
"buildDocs": "tsdoc"
|
|
13
|
-
},
|
|
14
8
|
"keywords": [
|
|
15
9
|
"skr03",
|
|
16
10
|
"skr04",
|
|
@@ -24,28 +18,27 @@
|
|
|
24
18
|
],
|
|
25
19
|
"author": "Fin.cx",
|
|
26
20
|
"license": "MIT",
|
|
27
|
-
"packageManager": "pnpm@10.11.0",
|
|
28
21
|
"dependencies": {
|
|
29
|
-
"@e-invoice-eu/core": "^3.1.
|
|
30
|
-
"@fin.cx/einvoice": "
|
|
22
|
+
"@e-invoice-eu/core": "^3.1.1",
|
|
23
|
+
"@fin.cx/einvoice": "6.0.0",
|
|
31
24
|
"@push.rocks/smartdata": "^7.1.7",
|
|
32
|
-
"@push.rocks/smartfile": "^13.1.
|
|
33
|
-
"@push.rocks/smartfs": "^1.5.
|
|
34
|
-
"@push.rocks/smarthash": "^3.2.
|
|
25
|
+
"@push.rocks/smartfile": "^13.1.3",
|
|
26
|
+
"@push.rocks/smartfs": "^1.5.1",
|
|
27
|
+
"@push.rocks/smarthash": "^3.2.7",
|
|
35
28
|
"@push.rocks/smartlog": "^3.2.2",
|
|
36
29
|
"@push.rocks/smartpath": "^6.0.0",
|
|
37
|
-
"@push.rocks/smartpdf": "^4.2.
|
|
30
|
+
"@push.rocks/smartpdf": "^4.2.2",
|
|
38
31
|
"@push.rocks/smarttime": "^4.2.3",
|
|
39
32
|
"@push.rocks/smartunique": "^3.0.9",
|
|
40
33
|
"merkletreejs": "^0.6.0",
|
|
41
34
|
"node-forge": "^1.4.0"
|
|
42
35
|
},
|
|
43
36
|
"devDependencies": {
|
|
44
|
-
"@git.zone/tsbuild": "^4.4.
|
|
45
|
-
"@git.zone/tsrun": "^2.0.
|
|
46
|
-
"@git.zone/tstest": "^3.6.
|
|
47
|
-
"@push.rocks/qenv": "^6.1.
|
|
48
|
-
"@types/node": "^25.
|
|
37
|
+
"@git.zone/tsbuild": "^4.4.2",
|
|
38
|
+
"@git.zone/tsrun": "^2.0.4",
|
|
39
|
+
"@git.zone/tstest": "^3.6.6",
|
|
40
|
+
"@push.rocks/qenv": "^6.1.4",
|
|
41
|
+
"@types/node": "^25.9.1",
|
|
49
42
|
"@types/node-forge": "^1.3.14"
|
|
50
43
|
},
|
|
51
44
|
"repository": {
|
|
@@ -67,9 +60,12 @@
|
|
|
67
60
|
"cli.js",
|
|
68
61
|
".smartconfig.json",
|
|
69
62
|
"readme.md",
|
|
70
|
-
"license
|
|
63
|
+
"license"
|
|
71
64
|
],
|
|
72
|
-
"
|
|
73
|
-
"
|
|
65
|
+
"scripts": {
|
|
66
|
+
"test": "tstest test/ --verbose --logfile --timeout=60 && pnpm run test:published-types",
|
|
67
|
+
"test:published-types": "pnpm build && pnpm exec tsc --pretty false -p test/fixtures/strict-consumer/tsconfig.json",
|
|
68
|
+
"build": "tsbuild --web --node",
|
|
69
|
+
"buildDocs": "tsdoc"
|
|
74
70
|
}
|
|
75
|
-
}
|
|
71
|
+
}
|
package/readme.md
CHANGED
|
@@ -34,6 +34,8 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|
|
34
34
|
|
|
35
35
|
The test setup reads MongoDB connection details from `.nogit/` via `@push.rocks/qenv`, but the runtime API only needs a `mongoDbUrl` and an optional `dbName`.
|
|
36
36
|
|
|
37
|
+
If you use the invoice helpers, pass `invoiceExportPath` to control where content-addressed invoice XML, PDF files, metadata, validation output, and the registry are stored. Without it, invoices are stored under `./exports/invoices` from the current working directory.
|
|
38
|
+
|
|
37
39
|
## Installation
|
|
38
40
|
|
|
39
41
|
```bash
|
|
@@ -48,6 +50,7 @@ import { SkrApi } from '@fin.cx/skr';
|
|
|
48
50
|
const api = new SkrApi({
|
|
49
51
|
mongoDbUrl: 'mongodb://localhost:27017',
|
|
50
52
|
dbName: 'accounting_demo',
|
|
53
|
+
invoiceExportPath: './exports/invoices',
|
|
51
54
|
});
|
|
52
55
|
|
|
53
56
|
await api.initialize('SKR03');
|
|
@@ -176,6 +179,25 @@ const ok = api.validateDoubleEntry(100, 100);
|
|
|
176
179
|
const reversed = await api.reverseTransaction(transactionId);
|
|
177
180
|
```
|
|
178
181
|
|
|
182
|
+
Period, balance, and audit helpers:
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
await api.closePeriod('2024-12', '9400');
|
|
186
|
+
|
|
187
|
+
const bankBalance = await api.getAccountBalance('1200', new Date('2024-12-31'));
|
|
188
|
+
|
|
189
|
+
await api.recalculateBalances();
|
|
190
|
+
|
|
191
|
+
const auditFindings = await api.getUnbalancedTransactions();
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Account CSV import and export:
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
const imported = await api.importAccountsFromCSV(csvContent);
|
|
198
|
+
const accountCsv = await api.exportAccountsToCSV();
|
|
199
|
+
```
|
|
200
|
+
|
|
179
201
|
## Reports And Exports
|
|
180
202
|
|
|
181
203
|
Available reporting methods on `SkrApi`:
|
|
@@ -256,6 +278,8 @@ The API also exposes:
|
|
|
256
278
|
- `createInvoiceComplianceReport()`
|
|
257
279
|
- `generateInvoice()`
|
|
258
280
|
|
|
281
|
+
Invoice imports are stored by content hash, deduplicated, indexed in an NDJSON registry, and searchable by direction, date range, party, amount range, invoice number, and status metadata.
|
|
282
|
+
|
|
259
283
|
## Public Exports
|
|
260
284
|
|
|
261
285
|
Top-level exports include:
|
|
@@ -274,6 +298,7 @@ Top-level exports include:
|
|
|
274
298
|
- `PdfReportGenerator`
|
|
275
299
|
- `SecurityManager`
|
|
276
300
|
- `SKR03_ACCOUNTS`, `SKR04_ACCOUNTS`
|
|
301
|
+
- `SKR03_ACCOUNT_CLASSES`, `SKR04_ACCOUNT_CLASSES`
|
|
277
302
|
|
|
278
303
|
This makes the package usable as both an application-facing API and a toolkit for custom accounting workflows.
|
|
279
304
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -69,13 +69,13 @@ export class InvoiceAdapter {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// Get detected format
|
|
72
|
-
const format = this.mapEInvoiceFormat(einvoice
|
|
72
|
+
const format = this.mapEInvoiceFormat(this.getDetectedFormat(einvoice));
|
|
73
73
|
|
|
74
74
|
// Validate the invoice (takes ~2.2ms)
|
|
75
75
|
const validationResult = await this.validateInvoice(einvoice);
|
|
76
76
|
|
|
77
77
|
// Extract invoice data
|
|
78
|
-
const invoiceData =
|
|
78
|
+
const invoiceData = this.mapEInvoiceToBusinessTerms(einvoice);
|
|
79
79
|
|
|
80
80
|
// Map to internal invoice model
|
|
81
81
|
const invoice = await this.mapToInternalModel(
|
|
@@ -106,33 +106,9 @@ export class InvoiceAdapter {
|
|
|
106
106
|
* Validate an invoice using multi-level validation
|
|
107
107
|
*/
|
|
108
108
|
private async validateInvoice(einvoice: any): Promise<IValidationResult> {
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
// Parse validation results into our structure
|
|
113
|
-
const syntaxResult = {
|
|
114
|
-
isValid: validationResult.syntax?.valid !== false,
|
|
115
|
-
errors: validationResult.syntax?.errors || [],
|
|
116
|
-
warnings: validationResult.syntax?.warnings || []
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const semanticResult = {
|
|
120
|
-
isValid: validationResult.semantic?.valid !== false,
|
|
121
|
-
errors: validationResult.semantic?.errors || [],
|
|
122
|
-
warnings: validationResult.semantic?.warnings || []
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
const businessResult = {
|
|
126
|
-
isValid: validationResult.business?.valid !== false,
|
|
127
|
-
errors: validationResult.business?.errors || [],
|
|
128
|
-
warnings: validationResult.business?.warnings || []
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const countryResult = {
|
|
132
|
-
isValid: validationResult.country?.valid !== false,
|
|
133
|
-
errors: validationResult.country?.errors || [],
|
|
134
|
-
warnings: validationResult.country?.warnings || []
|
|
135
|
-
};
|
|
109
|
+
const syntaxResult = await this.validateInvoiceLevel(einvoice, 'syntax');
|
|
110
|
+
const semanticResult = await this.validateInvoiceLevel(einvoice, 'semantic');
|
|
111
|
+
const businessResult = await this.validateInvoiceLevel(einvoice, 'business');
|
|
136
112
|
|
|
137
113
|
return {
|
|
138
114
|
isValid: syntaxResult.isValid && semanticResult.isValid && businessResult.isValid,
|
|
@@ -152,15 +128,219 @@ export class InvoiceAdapter {
|
|
|
152
128
|
warnings: businessResult.warnings || []
|
|
153
129
|
},
|
|
154
130
|
countrySpecific: {
|
|
155
|
-
valid:
|
|
156
|
-
errors:
|
|
157
|
-
warnings:
|
|
131
|
+
valid: true,
|
|
132
|
+
errors: [],
|
|
133
|
+
warnings: []
|
|
158
134
|
},
|
|
159
135
|
validatedAt: new Date(),
|
|
160
|
-
validatorVersion: '
|
|
136
|
+
validatorVersion: '6.0.0'
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private async validateInvoiceLevel(
|
|
141
|
+
einvoice: any,
|
|
142
|
+
level: 'syntax' | 'semantic' | 'business'
|
|
143
|
+
): Promise<{ isValid: boolean; errors: string[]; warnings: string[] }> {
|
|
144
|
+
const validationResult = await einvoice.validate(level);
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
isValid: validationResult.valid !== false,
|
|
148
|
+
errors: this.formatValidationMessages(validationResult.errors),
|
|
149
|
+
warnings: this.formatValidationMessages(validationResult.warnings),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private formatValidationMessages(messages: any[] = []): string[] {
|
|
154
|
+
return messages.map((message) => {
|
|
155
|
+
if (typeof message === 'string') {
|
|
156
|
+
return message;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return [message.code, message.message, message.location]
|
|
160
|
+
.filter(Boolean)
|
|
161
|
+
.join(': ');
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private getDetectedFormat(einvoice: any): string {
|
|
166
|
+
if (typeof einvoice.getFormat === 'function') {
|
|
167
|
+
return einvoice.getFormat();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return einvoice.format || 'xrechnung';
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private mapEInvoiceToBusinessTerms(einvoice: any): any {
|
|
174
|
+
const issueDate = new Date(einvoice.date || Date.now());
|
|
175
|
+
const invoiceLines = this.mapEInvoiceLinesToBusinessTerms(einvoice.items || [], Boolean(einvoice.reverseCharge));
|
|
176
|
+
const vatBreakdown = this.buildVatBreakdown(invoiceLines);
|
|
177
|
+
const lineNetAmount = invoiceLines.reduce((sum, line) => sum + line.BT131_LineNetAmount, 0);
|
|
178
|
+
const totalVATAmount = vatBreakdown.reduce((sum, vat) => sum + vat.BT117_TaxAmount, 0);
|
|
179
|
+
const taxInclusiveAmount = lineNetAmount + totalVATAmount;
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
BT1_InvoiceNumber: einvoice.accountingDocId || einvoice.id || einvoice.invoiceId || '',
|
|
183
|
+
BT2_IssueDate: issueDate.toISOString(),
|
|
184
|
+
BT3_InvoiceTypeCode: einvoice.accountingDocType === 'creditnote' ? '381' : '380',
|
|
185
|
+
BT5_CurrencyCode: einvoice.currency || 'EUR',
|
|
186
|
+
BT7_TaxPointDate: einvoice.deliveryDate ? new Date(einvoice.deliveryDate).toISOString() : undefined,
|
|
187
|
+
BT9_PaymentDueDate: this.getDueDate(issueDate, einvoice.dueInDays)?.toISOString(),
|
|
188
|
+
BT10_BuyerReference: einvoice.buyerReference,
|
|
189
|
+
BT22_InvoiceNote: Array.isArray(einvoice.notes) ? einvoice.notes.join('\n') : undefined,
|
|
190
|
+
BG4_Seller: this.mapEInvoiceContactToBusinessTerms(einvoice.from, 'seller', einvoice.paymentOptions),
|
|
191
|
+
BG7_Buyer: this.mapEInvoiceContactToBusinessTerms(einvoice.to, 'buyer'),
|
|
192
|
+
BG25_InvoiceLines: invoiceLines,
|
|
193
|
+
BG20_DocumentAllowances: [],
|
|
194
|
+
BG21_DocumentCharges: [],
|
|
195
|
+
BT106_SumOfLineNetAmounts: lineNetAmount,
|
|
196
|
+
BT107_AllowanceTotalAmount: 0,
|
|
197
|
+
BT108_ChargeTotalAmount: 0,
|
|
198
|
+
BT109_TaxExclusiveAmount: lineNetAmount,
|
|
199
|
+
BT110_TotalVATAmount: totalVATAmount,
|
|
200
|
+
BT112_TaxInclusiveAmount: taxInclusiveAmount,
|
|
201
|
+
BT113_PrepaidAmount: 0,
|
|
202
|
+
BT115_PayableAmount: taxInclusiveAmount,
|
|
203
|
+
BG23_VATBreakdown: vatBreakdown,
|
|
204
|
+
BG16_PaymentInstructions: this.mapPaymentOptionsToBusinessTerms(einvoice.paymentOptions),
|
|
161
205
|
};
|
|
162
206
|
}
|
|
163
207
|
|
|
208
|
+
private mapEInvoiceLinesToBusinessTerms(items: any[], reverseCharge: boolean): any[] {
|
|
209
|
+
return items.map((item, index) => {
|
|
210
|
+
const quantity = Number(item.unitQuantity || 0);
|
|
211
|
+
const unitPrice = Number(item.unitNetPrice || 0);
|
|
212
|
+
const vatRate = Number(item.vatPercentage || 0);
|
|
213
|
+
const netAmount = quantity * unitPrice;
|
|
214
|
+
const vatAmount = reverseCharge ? 0 : netAmount * vatRate / 100;
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
BT154_ItemDescription: item.name || '',
|
|
218
|
+
BT129_Quantity: quantity,
|
|
219
|
+
BT146_NetPrice: unitPrice,
|
|
220
|
+
BT131_LineNetAmount: netAmount,
|
|
221
|
+
BT151_ItemVATCategory: this.getVatCategoryCode(vatRate, reverseCharge),
|
|
222
|
+
BT152_ItemVATRate: vatRate,
|
|
223
|
+
BT155_ItemSellerID: item.articleNumber,
|
|
224
|
+
lineVATAmount: vatAmount,
|
|
225
|
+
};
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
private buildVatBreakdown(invoiceLines: any[]): any[] {
|
|
230
|
+
const vatBreakdownMap = new Map<string, { categoryCode: string; rate: number; taxableAmount: number; taxAmount: number }>();
|
|
231
|
+
|
|
232
|
+
for (const line of invoiceLines) {
|
|
233
|
+
const categoryCode = line.BT151_ItemVATCategory || 'S';
|
|
234
|
+
const rate = Number(line.BT152_ItemVATRate || 0);
|
|
235
|
+
const key = `${categoryCode}:${rate}`;
|
|
236
|
+
const existingBreakdown = vatBreakdownMap.get(key) || {
|
|
237
|
+
categoryCode,
|
|
238
|
+
rate,
|
|
239
|
+
taxableAmount: 0,
|
|
240
|
+
taxAmount: 0,
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
existingBreakdown.taxableAmount += Number(line.BT131_LineNetAmount || 0);
|
|
244
|
+
existingBreakdown.taxAmount += Number(line.lineVATAmount || 0);
|
|
245
|
+
vatBreakdownMap.set(key, existingBreakdown);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return Array.from(vatBreakdownMap.values()).map((vatBreakdown) => ({
|
|
249
|
+
BT118_VATCategory: vatBreakdown.categoryCode,
|
|
250
|
+
BT119_VATRate: vatBreakdown.rate,
|
|
251
|
+
BT116_TaxableAmount: vatBreakdown.taxableAmount,
|
|
252
|
+
BT117_TaxAmount: vatBreakdown.taxAmount,
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private mapEInvoiceContactToBusinessTerms(
|
|
257
|
+
contact: any,
|
|
258
|
+
role: 'seller' | 'buyer',
|
|
259
|
+
paymentOptions?: any,
|
|
260
|
+
): any {
|
|
261
|
+
const address = contact?.address || {};
|
|
262
|
+
const registrationDetails = contact?.registrationDetails || {};
|
|
263
|
+
const countryCode = this.normalizeCountryCode(address.countryCode || address.country);
|
|
264
|
+
|
|
265
|
+
if (role === 'seller') {
|
|
266
|
+
return {
|
|
267
|
+
BT27_SellerName: contact?.name || '',
|
|
268
|
+
BT29_SellerID: registrationDetails.registrationId,
|
|
269
|
+
BT31_SellerVATID: registrationDetails.vatId,
|
|
270
|
+
BT32_SellerTaxID: registrationDetails.registrationId,
|
|
271
|
+
BT33_SellerPhone: contact?.phone,
|
|
272
|
+
BT34_SellerEmail: contact?.email,
|
|
273
|
+
BT35_SellerStreet: this.formatStreet(address),
|
|
274
|
+
BT37_SellerCity: address.city,
|
|
275
|
+
BT38_SellerPostalCode: address.postalCode,
|
|
276
|
+
BT40_SellerCountryCode: countryCode,
|
|
277
|
+
BT84_PaymentAccountID: paymentOptions?.sepaConnection?.iban,
|
|
278
|
+
BT85_PaymentAccountName: contact?.name,
|
|
279
|
+
BT86_PaymentServiceProviderID: paymentOptions?.sepaConnection?.bic,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return {
|
|
284
|
+
BT44_BuyerName: contact?.name || '',
|
|
285
|
+
BT46_BuyerID: registrationDetails.registrationId,
|
|
286
|
+
BT47_BuyerTaxID: registrationDetails.registrationId,
|
|
287
|
+
BT48_BuyerVATID: registrationDetails.vatId,
|
|
288
|
+
BT49_BuyerEmail: contact?.email,
|
|
289
|
+
BT50_BuyerStreet: this.formatStreet(address),
|
|
290
|
+
BT52_BuyerCity: address.city,
|
|
291
|
+
BT53_BuyerPostalCode: address.postalCode,
|
|
292
|
+
BT55_BuyerCountryCode: countryCode,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
private mapPaymentOptionsToBusinessTerms(paymentOptions: any): any | undefined {
|
|
297
|
+
if (!paymentOptions?.sepaConnection?.iban) {
|
|
298
|
+
return undefined;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
BT81_PaymentMeansCode: '30',
|
|
303
|
+
BT84_PaymentAccountID: paymentOptions.sepaConnection.iban,
|
|
304
|
+
BT85_PaymentAccountName: paymentOptions.description,
|
|
305
|
+
BT86_PaymentServiceProviderID: paymentOptions.sepaConnection.bic,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
private getDueDate(issueDate: Date, dueInDays?: number): Date | undefined {
|
|
310
|
+
if (typeof dueInDays !== 'number') {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return new Date(issueDate.getTime() + dueInDays * 24 * 60 * 60 * 1000);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private getVatCategoryCode(vatRate: number, reverseCharge: boolean): string {
|
|
318
|
+
if (reverseCharge) {
|
|
319
|
+
return 'AE';
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return vatRate === 0 ? 'Z' : 'S';
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
private normalizeCountryCode(country?: string): string {
|
|
326
|
+
if (!country) {
|
|
327
|
+
return 'DE';
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const countryMap: Record<string, string> = {
|
|
331
|
+
Germany: 'DE',
|
|
332
|
+
Deutschland: 'DE',
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
return countryMap[country] || country;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
private formatStreet(address: any): string {
|
|
339
|
+
return [address.streetName, address.houseNumber]
|
|
340
|
+
.filter(Boolean)
|
|
341
|
+
.join(' ');
|
|
342
|
+
}
|
|
343
|
+
|
|
164
344
|
/**
|
|
165
345
|
* Map EN16931 Business Terms to internal invoice model
|
|
166
346
|
*/
|
|
@@ -559,8 +739,8 @@ export class InvoiceAdapter {
|
|
|
559
739
|
const einvoice: any = new EInvoice();
|
|
560
740
|
|
|
561
741
|
// Set invoice data
|
|
562
|
-
const
|
|
563
|
-
Object.assign(einvoice,
|
|
742
|
+
const einvoiceData = this.mapToEInvoiceData(invoiceData);
|
|
743
|
+
Object.assign(einvoice, einvoiceData);
|
|
564
744
|
|
|
565
745
|
// Generate XML in requested format
|
|
566
746
|
const xml = await einvoice.exportXml(format as any);
|
|
@@ -585,17 +765,83 @@ export class InvoiceAdapter {
|
|
|
585
765
|
/**
|
|
586
766
|
* Map internal invoice to EN16931 Business Terms
|
|
587
767
|
*/
|
|
588
|
-
private
|
|
768
|
+
private mapToEInvoiceData(invoice: Partial<IInvoice>): any {
|
|
769
|
+
const issueDate = invoice.issueDate || new Date();
|
|
770
|
+
|
|
589
771
|
return {
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
772
|
+
id: invoice.invoiceNumber || '',
|
|
773
|
+
accountingDocId: invoice.invoiceNumber || '',
|
|
774
|
+
accountingDocType: invoice.invoiceTypeCode === '381' ? 'creditnote' : 'invoice',
|
|
775
|
+
date: issueDate.getTime(),
|
|
776
|
+
currency: invoice.currencyCode || 'EUR',
|
|
777
|
+
buyerReference: invoice.buyerReference,
|
|
778
|
+
deliveryDate: invoice.taxPointDate?.getTime(),
|
|
779
|
+
dueInDays: this.calculateDueInDays(issueDate, invoice.paymentDueDate),
|
|
780
|
+
notes: invoice.invoiceNote ? [invoice.invoiceNote] : [],
|
|
781
|
+
from: this.mapInvoicePartyToEInvoiceContact(invoice.supplier),
|
|
782
|
+
to: this.mapInvoicePartyToEInvoiceContact(invoice.customer),
|
|
783
|
+
items: (invoice.lines || []).map((line) => ({
|
|
784
|
+
position: line.lineNumber,
|
|
785
|
+
name: line.description,
|
|
786
|
+
articleNumber: line.productCode,
|
|
787
|
+
unitType: 'EA',
|
|
788
|
+
unitQuantity: line.quantity,
|
|
789
|
+
unitNetPrice: line.unitPrice,
|
|
790
|
+
vatPercentage: line.vatCategory.rate,
|
|
791
|
+
})),
|
|
792
|
+
paymentOptions: invoice.paymentMeans?.account ? {
|
|
793
|
+
description: invoice.paymentMeans.account.accountHolder,
|
|
794
|
+
sepaConnection: {
|
|
795
|
+
iban: invoice.paymentMeans.account.iban,
|
|
796
|
+
bic: invoice.paymentMeans.account.bic || '',
|
|
797
|
+
},
|
|
798
|
+
payPal: {
|
|
799
|
+
email: '',
|
|
800
|
+
},
|
|
801
|
+
} : undefined,
|
|
599
802
|
};
|
|
600
803
|
}
|
|
804
|
+
|
|
805
|
+
private mapInvoicePartyToEInvoiceContact(party?: IInvoiceParty): any {
|
|
806
|
+
const countryCode = this.normalizeCountryCode(party?.address?.countryCode);
|
|
807
|
+
|
|
808
|
+
return {
|
|
809
|
+
type: 'company',
|
|
810
|
+
name: party?.name || '',
|
|
811
|
+
description: '',
|
|
812
|
+
address: {
|
|
813
|
+
streetName: party?.address?.street || '',
|
|
814
|
+
houseNumber: '',
|
|
815
|
+
city: party?.address?.city || '',
|
|
816
|
+
postalCode: party?.address?.postalCode || '',
|
|
817
|
+
country: countryCode,
|
|
818
|
+
countryCode,
|
|
819
|
+
},
|
|
820
|
+
registrationDetails: {
|
|
821
|
+
vatId: party?.vatId || '',
|
|
822
|
+
registrationId: party?.id || party?.taxId || '',
|
|
823
|
+
registrationName: party?.name || '',
|
|
824
|
+
},
|
|
825
|
+
status: 'active',
|
|
826
|
+
foundedDate: {
|
|
827
|
+
year: new Date().getFullYear(),
|
|
828
|
+
month: new Date().getMonth() + 1,
|
|
829
|
+
day: new Date().getDate(),
|
|
830
|
+
},
|
|
831
|
+
email: party?.email,
|
|
832
|
+
phone: party?.phone,
|
|
833
|
+
sepaConnection: party?.bankAccount ? {
|
|
834
|
+
iban: party.bankAccount.iban,
|
|
835
|
+
bic: party.bankAccount.bic || '',
|
|
836
|
+
} : undefined,
|
|
837
|
+
};
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
private calculateDueInDays(issueDate: Date, paymentDueDate?: Date): number {
|
|
841
|
+
if (!paymentDueDate) {
|
|
842
|
+
return 30;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
return Math.max(0, Math.round((paymentDueDate.getTime() - issueDate.getTime()) / (24 * 60 * 60 * 1000)));
|
|
846
|
+
}
|
|
601
847
|
}
|
/package/{license.md → license}
RENAMED
|
File without changes
|