nfe-lib-node 1.0.0 → 1.3.0

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/Danfe.js ADDED
@@ -0,0 +1,371 @@
1
+ import { DOMParser } from '@xmldom/xmldom';
2
+ const CODE128_PATTERNS = [
3
+ '212222', '222122', '222221', '121223', '121322', '131222', '122213', '122312', '132212', '221213',
4
+ '221312', '231212', '112232', '122132', '122231', '113222', '123122', '123221', '223211', '221132',
5
+ '221231', '213212', '223112', '312131', '311222', '321122', '321221', '312212', '322112', '322211',
6
+ '212123', '212321', '232121', '111323', '131123', '131321', '112313', '132113', '132311', '211313',
7
+ '231113', '231311', '112133', '112331', '132131', '113123', '113321', '133121', '313121', '211331',
8
+ '231131', '213113', '213311', '213131', '311123', '311321', '331121', '312113', '312311', '332111',
9
+ '314111', '221411', '431111', '111224', '111422', '121124', '121421', '141122', '141221', '112214',
10
+ '112412', '122114', '122411', '142112', '142211', '241211', '221114', '413111', '241112', '134111',
11
+ '111242', '121142', '121241', '114212', '124112', '124211', '411212', '421112', '421211', '212141',
12
+ '214121', '412121', '111143', '111341', '131141', '114113', '114311', '411113', '411311', '113141',
13
+ '114131', '311141', '411131', '211412', '211214', '211232', '2331112',
14
+ ];
15
+ const COLUNAS_ITENS = [
16
+ { x: 20, w: 42, label: 'COD. PROD' },
17
+ { x: 62, w: 155, label: 'DESCRICAO DO PRODUTO / SERVICO' },
18
+ { x: 217, w: 36, label: 'NCM/SH' },
19
+ { x: 253, w: 28, label: 'O/CSOSN' },
20
+ { x: 281, w: 24, label: 'CFOP' },
21
+ { x: 305, w: 18, label: 'UN' },
22
+ { x: 323, w: 34, label: 'QUANT.' },
23
+ { x: 357, w: 36, label: 'V. UNIT.' },
24
+ { x: 393, w: 36, label: 'V. TOTAL' },
25
+ { x: 429, w: 34, label: 'B.C. ICMS' },
26
+ { x: 463, w: 32, label: 'V. ICMS' },
27
+ { x: 495, w: 28, label: 'V. IPI' },
28
+ { x: 523, w: 26, label: 'AL. ICMS' },
29
+ { x: 549, w: 26, label: 'AL. IPI' },
30
+ ];
31
+ export class Danfe {
32
+ static fromXml(xmlNFe, xmlRetornoSefaz) {
33
+ const doc = new DOMParser().parseFromString(xmlNFe, 'text/xml');
34
+ const docRetorno = xmlRetornoSefaz
35
+ ? new DOMParser().parseFromString(xmlRetornoSefaz, 'text/xml')
36
+ : doc;
37
+ const infNFe = doc.getElementsByTagName('infNFe')[0];
38
+ const ide = doc.getElementsByTagName('ide')[0];
39
+ const emit = doc.getElementsByTagName('emit')[0];
40
+ const enderEmit = emit?.getElementsByTagName('enderEmit')[0];
41
+ const dest = doc.getElementsByTagName('dest')[0];
42
+ const enderDest = dest?.getElementsByTagName('enderDest')[0];
43
+ const icmsTot = doc.getElementsByTagName('ICMSTot')[0];
44
+ const transp = doc.getElementsByTagName('transp')[0];
45
+ const transporta = transp?.getElementsByTagName('transporta')[0];
46
+ const vol = transp?.getElementsByTagName('vol')[0];
47
+ const detPag = doc.getElementsByTagName('detPag')[0];
48
+ const infAdic = doc.getElementsByTagName('infAdic')[0];
49
+ const infProt = docRetorno.getElementsByTagName('infProt')[0] ??
50
+ doc.getElementsByTagName('infProt')[0];
51
+ const rawId = infNFe?.getAttribute('Id') ?? '';
52
+ const chave = rawId.replace(/^NFe/, '').padStart(44, '0');
53
+ const chaveFormatada = chave.replace(/(\d{4})(?=\d)/g, '$1 ');
54
+ const tpAmb = this.getTag(ide, 'tpAmb', '2');
55
+ const natOp = this.getTag(ide, 'natOp', '');
56
+ const nNF = this.getTag(ide, 'nNF', '1');
57
+ const serie = this.getTag(ide, 'serie', '1');
58
+ const tpNF = this.getTag(ide, 'tpNF', '1');
59
+ const dhEmi = this.formatDateTime(this.getTag(ide, 'dhEmi', ''));
60
+ const dhSaiEnt = this.formatDateTime(this.getTag(ide, 'dhSaiEnt', this.getTag(ide, 'dhEmi', '')));
61
+ const emitNome = this.getTag(emit, 'xNome', '');
62
+ const emitCnpj = this.formatDoc(this.getTag(emit, 'CNPJ', this.getTag(emit, 'CPF', '')));
63
+ const emitIe = this.getTag(emit, 'IE', '');
64
+ const emitIeSt = this.getTag(emit, 'IEST', '');
65
+ const emitEnd = `${this.getTag(enderEmit, 'xLgr', '')}, ${this.getTag(enderEmit, 'nro', '')} - ${this.getTag(enderEmit, 'xBairro', '')}`;
66
+ const emitMunUfCep = `${this.getTag(enderEmit, 'xMun', '')}/${this.getTag(enderEmit, 'UF', '')} - CEP ${this.getTag(enderEmit, 'CEP', '')} - Fone ${this.getTag(enderEmit, 'fone', '')}`;
67
+ const destNome = this.getTag(dest, 'xNome', '');
68
+ const destDoc = this.formatDoc(this.getTag(dest, 'CNPJ', this.getTag(dest, 'CPF', '')));
69
+ const destEnd = `${this.getTag(enderDest, 'xLgr', '')}, ${this.getTag(enderDest, 'nro', '')}`;
70
+ const destBairro = this.getTag(enderDest, 'xBairro', '');
71
+ const destCep = this.getTag(enderDest, 'CEP', '');
72
+ const destMun = this.getTag(enderDest, 'xMun', '');
73
+ const destUf = this.getTag(enderDest, 'UF', '');
74
+ const destFone = this.getTag(enderDest, 'fone', '');
75
+ const destIe = this.getTag(dest, 'IE', '');
76
+ const cStat = this.getTag(infProt, 'cStat', this.getTag(docRetorno, 'cStat', ''));
77
+ const xMotivo = this.getTag(infProt, 'xMotivo', this.getTag(docRetorno, 'xMotivo', ''));
78
+ const nProt = this.getTag(infProt, 'nProt', '');
79
+ const dhRecbto = this.formatDateTime(this.getTag(infProt, 'dhRecbto', this.getTag(docRetorno, 'dhRecbto', '')));
80
+ const protocoloTexto = nProt
81
+ ? `${nProt} - ${dhRecbto}`
82
+ : `cStat ${cStat} - ${xMotivo.slice(0, 38)} (${dhRecbto})`;
83
+ const detNodes = doc.getElementsByTagName('det');
84
+ const itens = [];
85
+ for (let i = 0; i < detNodes.length; i++) {
86
+ const det = detNodes[i];
87
+ if (!det)
88
+ continue;
89
+ const prod = det.getElementsByTagName('prod')[0];
90
+ const icms = det.getElementsByTagName('ICMS')[0];
91
+ const ipi = det.getElementsByTagName('IPI')[0];
92
+ const orig = this.getTag(icms, 'orig', '0');
93
+ const csosnOrCst = this.getTag(icms, 'CSOSN', this.getTag(icms, 'CST', '00'));
94
+ itens.push({
95
+ cProd: this.getTag(prod, 'cProd', ''),
96
+ xProd: this.getTag(prod, 'xProd', ''),
97
+ ncm: this.getTag(prod, 'NCM', ''),
98
+ origCsosnCst: `${orig}/${csosnOrCst}`,
99
+ cfop: this.getTag(prod, 'CFOP', ''),
100
+ uCom: this.getTag(prod, 'uCom', ''),
101
+ qCom: this.formatDecimal(this.getTag(prod, 'qCom', '0.00')),
102
+ vUnCom: this.formatDecimal(this.getTag(prod, 'vUnCom', '0.00')),
103
+ vProd: this.formatDecimal(this.getTag(prod, 'vProd', '0.00')),
104
+ vBC: this.formatDecimal(this.getTag(icms, 'vBC', '0.00')),
105
+ vICMS: this.formatDecimal(this.getTag(icms, 'vICMS', '0.00')),
106
+ vIPI: this.formatDecimal(this.getTag(ipi, 'vIPI', '0.00')),
107
+ pICMS: this.formatDecimal(this.getTag(icms, 'pICMS', '0.00')),
108
+ pIPI: this.formatDecimal(this.getTag(ipi, 'pIPI', '0.00')),
109
+ });
110
+ }
111
+ const cmds = [];
112
+ cmds.push('0.5 w');
113
+ this.drawBox(cmds, 20, 782, 450, 38, 'RECEBEMOS DE ' + emitNome.slice(0, 65) + ' OS PRODUTOS CONSTANTES DA NOTA FISCAL INDICADA AO LADO');
114
+ this.drawBox(cmds, 20, 782, 110, 20, 'DATA DE RECEBIMENTO');
115
+ this.drawBox(cmds, 130, 782, 340, 20, 'IDENTIFICACAO E ASSINATURA DO RECEBEDOR');
116
+ this.drawBox(cmds, 470, 782, 105, 38, 'NF-e', `No. ${nNF.padStart(9, '0')} / Serie ${serie}`, 7.5, true);
117
+ cmds.push('[2 2] 0 d 0.4 w 20 776 m 575 776 l S [] 0 d 0.5 w');
118
+ this.drawBox(cmds, 20, 688, 220, 82, 'IDENTIFICACAO DO EMITENTE');
119
+ this.drawText(cmds, 24, 752, emitNome.slice(0, 38), 7.5, true);
120
+ this.drawText(cmds, 24, 739, emitEnd.slice(0, 45), 6.5, false);
121
+ this.drawText(cmds, 24, 728, emitMunUfCep.slice(0, 47), 6.5, false);
122
+ if (tpAmb === '2') {
123
+ this.drawText(cmds, 24, 695, 'AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL', 6.5, true);
124
+ }
125
+ this.drawBox(cmds, 240, 688, 95, 82, '');
126
+ this.drawText(cmds, 268, 756, 'DANFE', 11, true);
127
+ this.drawText(cmds, 246, 746, 'Documento Auxiliar da', 6, false);
128
+ this.drawText(cmds, 245, 738, 'Nota Fiscal Eletronica', 6, false);
129
+ this.drawText(cmds, 246, 725, '0 - ENTRADA', 6, false);
130
+ this.drawText(cmds, 246, 717, '1 - SAIDA', 6, false);
131
+ this.drawBox(cmds, 312, 716, 15, 15, '');
132
+ this.drawText(cmds, 317, 720, tpNF, 8.5, true);
133
+ this.drawText(cmds, 246, 703, `No. ${nNF.padStart(9, '0')}`, 7.5, true);
134
+ this.drawText(cmds, 246, 693, `SERIE: ${serie.padStart(3, '0')} FL 1/1`, 6.5, true);
135
+ this.drawBox(cmds, 335, 729, 240, 41, 'CONTROLE DO FISCO');
136
+ this.drawCode128C(cmds, chave, 348, 733, 214, 26);
137
+ this.drawBox(cmds, 335, 688, 240, 41, 'CHAVE DE ACESSO', chaveFormatada, 7, true);
138
+ this.drawBox(cmds, 20, 666, 315, 22, 'NATUREZA DA OPERACAO', natOp, 7.5, false);
139
+ this.drawBox(cmds, 335, 666, 240, 22, 'PROTOCOLO DE AUTORIZACAO DE USO', protocoloTexto, 6.5, true);
140
+ this.drawBox(cmds, 20, 644, 185, 22, 'INSCRICAO ESTADUAL', emitIe, 7.5, false);
141
+ this.drawBox(cmds, 205, 644, 185, 22, 'INSC. ESTADUAL DO SUBST. TRIBUTARIO', emitIeSt, 7.5, false);
142
+ this.drawBox(cmds, 390, 644, 185, 22, 'CNPJ / CPF', emitCnpj, 7.5, true);
143
+ this.drawSectionHeader(cmds, 20, 633, 'DESTINATARIO / REMETENTE');
144
+ this.drawBox(cmds, 20, 609, 340, 22, 'NOME / RAZAO SOCIAL', destNome.slice(0, 64), 7.5, false);
145
+ this.drawBox(cmds, 360, 609, 130, 22, 'CNPJ / CPF', destDoc, 7.5, true);
146
+ this.drawBox(cmds, 490, 609, 85, 22, 'DATA DA EMISSAO', dhEmi.slice(0, 10), 7.5, false);
147
+ this.drawBox(cmds, 20, 587, 270, 22, 'ENDERECO', destEnd.slice(0, 48), 7.5, false);
148
+ this.drawBox(cmds, 290, 587, 120, 22, 'BAIRRO / DISTRITO', destBairro.slice(0, 24), 7.5, false);
149
+ this.drawBox(cmds, 410, 587, 80, 22, 'CEP', destCep, 7.5, false);
150
+ this.drawBox(cmds, 490, 587, 85, 22, 'DATA SAIDA/ENTRADA', dhSaiEnt.slice(0, 10), 7.5, false);
151
+ this.drawBox(cmds, 20, 565, 220, 22, 'MUNICIPIO', destMun, 7.5, false);
152
+ this.drawBox(cmds, 240, 565, 95, 22, 'FONE / FAX', destFone, 7.5, false);
153
+ this.drawBox(cmds, 335, 565, 30, 22, 'UF', destUf, 7.5, false);
154
+ this.drawBox(cmds, 365, 565, 125, 22, 'INSCRICAO ESTADUAL', destIe, 7.5, false);
155
+ this.drawBox(cmds, 490, 565, 85, 22, 'HORA DA SAIDA', dhSaiEnt.slice(11, 19), 7.5, false);
156
+ this.drawSectionHeader(cmds, 20, 554, 'FATURA / PAGAMENTO');
157
+ const tPag = this.getTag(detPag, 'tPag', '01');
158
+ const vPag = this.formatDecimal(this.getTag(detPag, 'vPag', '0.00'));
159
+ this.drawBox(cmds, 20, 530, 185, 22, 'FORMA DE PAGAMENTO', this.getDescricaoPagamento(tPag), 7.5, false);
160
+ this.drawBox(cmds, 205, 530, 185, 22, 'VALOR DO PAGAMENTO (R$)', vPag, 7.5, true);
161
+ this.drawBox(cmds, 390, 530, 185, 22, 'TROCO (R$)', this.formatDecimal(this.getTag(doc.getElementsByTagName('pag')[0], 'vTroco', '0.00')), 7.5, false);
162
+ this.drawSectionHeader(cmds, 20, 519, 'CALCULO DO IMPOSTO');
163
+ this.drawBox(cmds, 20, 495, 70, 22, 'BASE CALC. ICMS', this.formatDecimal(this.getTag(icmsTot, 'vBC', '0.00')), 7.5, false);
164
+ this.drawBox(cmds, 90, 495, 68, 22, 'VALOR DO ICMS', this.formatDecimal(this.getTag(icmsTot, 'vICMS', '0.00')), 7.5, false);
165
+ this.drawBox(cmds, 158, 495, 68, 22, 'BASE CALC. ICMS ST', this.formatDecimal(this.getTag(icmsTot, 'vBCST', '0.00')), 7.5, false);
166
+ this.drawBox(cmds, 226, 495, 68, 22, 'VALOR ICMS SUBST.', this.formatDecimal(this.getTag(icmsTot, 'vST', '0.00')), 7.5, false);
167
+ this.drawBox(cmds, 294, 495, 65, 22, 'V. IMP. IMPORTACAO', this.formatDecimal(this.getTag(icmsTot, 'vII', '0.00')), 7.5, false);
168
+ this.drawBox(cmds, 359, 495, 65, 22, 'VALOR DO FCP', this.formatDecimal(this.getTag(icmsTot, 'vFCP', '0.00')), 7.5, false);
169
+ this.drawBox(cmds, 424, 495, 65, 22, 'VALOR DO PIS', this.formatDecimal(this.getTag(icmsTot, 'vPIS', '0.00')), 7.5, false);
170
+ this.drawBox(cmds, 489, 495, 86, 22, 'V. TOTAL PRODUTOS', this.formatDecimal(this.getTag(icmsTot, 'vProd', '0.00')), 7.5, true);
171
+ this.drawBox(cmds, 20, 473, 70, 22, 'VALOR DO FRETE', this.formatDecimal(this.getTag(icmsTot, 'vFrete', '0.00')), 7.5, false);
172
+ this.drawBox(cmds, 90, 473, 68, 22, 'VALOR DO SEGURO', this.formatDecimal(this.getTag(icmsTot, 'vSeg', '0.00')), 7.5, false);
173
+ this.drawBox(cmds, 158, 473, 68, 22, 'DESCONTO', this.formatDecimal(this.getTag(icmsTot, 'vDesc', '0.00')), 7.5, false);
174
+ this.drawBox(cmds, 226, 473, 68, 22, 'OUTRAS DESPESAS', this.formatDecimal(this.getTag(icmsTot, 'vOutro', '0.00')), 7.5, false);
175
+ this.drawBox(cmds, 294, 473, 65, 22, 'VALOR TOTAL IPI', this.formatDecimal(this.getTag(icmsTot, 'vIPI', '0.00')), 7.5, false);
176
+ this.drawBox(cmds, 359, 473, 65, 22, 'V. APROX. TRIBUTOS', this.formatDecimal(this.getTag(icmsTot, 'vTotTrib', '0.00')), 7.5, false);
177
+ this.drawBox(cmds, 424, 473, 65, 22, 'VALOR DA COFINS', this.formatDecimal(this.getTag(icmsTot, 'vCOFINS', '0.00')), 7.5, false);
178
+ this.drawBox(cmds, 489, 473, 86, 22, 'V. TOTAL DA NOTA', this.formatDecimal(this.getTag(icmsTot, 'vNF', '0.00')), 8.5, true);
179
+ this.drawSectionHeader(cmds, 20, 462, 'TRANSPORTADOR / VOLUMES TRANSPORTADOS');
180
+ const modFrete = this.getTag(transp, 'modFrete', '9');
181
+ this.drawBox(cmds, 20, 438, 210, 22, 'NOME / RAZAO SOCIAL', this.getTag(transporta, 'xNome', ''), 7.5, false);
182
+ this.drawBox(cmds, 230, 438, 95, 22, 'FRETE POR CONTA', this.getDescricaoFrete(modFrete), 7, false);
183
+ this.drawBox(cmds, 325, 438, 65, 22, 'CODIGO ANTT', '', 7.5, false);
184
+ this.drawBox(cmds, 390, 438, 65, 22, 'PLACA DO VEICULO', '', 7.5, false);
185
+ this.drawBox(cmds, 455, 438, 25, 22, 'UF', '', 7.5, false);
186
+ this.drawBox(cmds, 480, 438, 95, 22, 'CNPJ / CPF', this.formatDoc(this.getTag(transporta, 'CNPJ', '')), 7.5, false);
187
+ this.drawBox(cmds, 20, 416, 85, 22, 'QUANTIDADE', this.getTag(vol, 'qVol', ''), 7.5, false);
188
+ this.drawBox(cmds, 105, 416, 110, 22, 'ESPECIE', this.getTag(vol, 'esp', ''), 7.5, false);
189
+ this.drawBox(cmds, 215, 416, 100, 22, 'MARCA', this.getTag(vol, 'marca', ''), 7.5, false);
190
+ this.drawBox(cmds, 315, 416, 90, 22, 'NUMERACAO', this.getTag(vol, 'nVol', ''), 7.5, false);
191
+ this.drawBox(cmds, 405, 416, 85, 22, 'PESO BRUTO', this.getTag(vol, 'pesoB', ''), 7.5, false);
192
+ this.drawBox(cmds, 490, 416, 85, 22, 'PESO LIQUIDO', this.getTag(vol, 'pesoL', ''), 7.5, false);
193
+ this.drawSectionHeader(cmds, 20, 405, 'DADOS DOS PRODUTOS / SERVICOS');
194
+ const headerY = 388;
195
+ const headerH = 14;
196
+ const tableBottomY = 112;
197
+ const tableBodyH = headerY - tableBottomY;
198
+ for (const col of COLUNAS_ITENS) {
199
+ cmds.push(`${col.x} ${headerY} ${col.w} ${headerH} re S`);
200
+ this.drawText(cmds, col.x + 2, headerY + 4, col.label, 5, true);
201
+ cmds.push(`${col.x} ${tableBottomY} ${col.w} ${tableBodyH} re S`);
202
+ }
203
+ let rowY = headerY - 11;
204
+ for (const item of itens) {
205
+ if (rowY < tableBottomY + 8)
206
+ break;
207
+ this.drawText(cmds, 22, rowY, item.cProd.slice(0, 9), 6, false);
208
+ this.drawText(cmds, 64, rowY, item.xProd.slice(0, 36), 6, false);
209
+ this.drawText(cmds, 219, rowY, item.ncm, 6, false);
210
+ this.drawText(cmds, 255, rowY, item.origCsosnCst, 6, false);
211
+ this.drawText(cmds, 283, rowY, item.cfop, 6, false);
212
+ this.drawText(cmds, 307, rowY, item.uCom.slice(0, 4), 6, false);
213
+ this.drawText(cmds, 325, rowY, item.qCom, 6, false);
214
+ this.drawText(cmds, 359, rowY, item.vUnCom, 6, false);
215
+ this.drawText(cmds, 395, rowY, item.vProd, 6, false);
216
+ this.drawText(cmds, 431, rowY, item.vBC, 6, false);
217
+ this.drawText(cmds, 465, rowY, item.vICMS, 6, false);
218
+ this.drawText(cmds, 497, rowY, item.vIPI, 6, false);
219
+ this.drawText(cmds, 525, rowY, item.pICMS, 6, false);
220
+ this.drawText(cmds, 551, rowY, item.pIPI, 6, false);
221
+ cmds.push(`[1 2] 0 d 0.25 w 20 ${rowY - 4} m 575 ${rowY - 4} l S [] 0 d 0.5 w`);
222
+ rowY -= 13;
223
+ }
224
+ if (tpAmb === '2') {
225
+ cmds.push('0.78 g');
226
+ this.drawText(cmds, 115, 245, 'SEM VALOR FISCAL - HOMOLOGACAO', 18, true);
227
+ cmds.push('0 g');
228
+ }
229
+ this.drawSectionHeader(cmds, 20, 100, 'DADOS ADICIONAIS');
230
+ const infCpl = this.getTag(infAdic, 'infCpl', '');
231
+ const textoAdicional = infCpl
232
+ ? `${infCpl} | Status SEFAZ: ${cStat} - ${xMotivo}`
233
+ : `Ambiente: ${tpAmb === '2' ? '2 - Homologacao (Sem Valor Fiscal)' : '1 - Producao'} | Status SEFAZ: ${cStat} - ${xMotivo}`;
234
+ this.drawBox(cmds, 20, 40, 370, 57, 'INFORMACOES COMPLEMENTARES', textoAdicional.slice(0, 82), 6.5, false);
235
+ this.drawBox(cmds, 390, 40, 185, 57, 'RESERVADO AO FISCO', '', 6.5, false);
236
+ this.drawText(cmds, 543, 33, 'nfe-lib-node', 5.5, false);
237
+ return this.buildPdfBuffer(cmds.join('\n'));
238
+ }
239
+ static getDescricaoFrete(modFrete) {
240
+ const mapa = {
241
+ '0': '0-Remetente (CIF)',
242
+ '1': '1-Destinatario (FOB)',
243
+ '2': '2-Terceiros',
244
+ '3': '3-Proprio Remet.',
245
+ '4': '4-Proprio Dest.',
246
+ '9': '9-Sem Transporte',
247
+ };
248
+ return mapa[modFrete] ?? modFrete;
249
+ }
250
+ static getDescricaoPagamento(tPag) {
251
+ const mapa = {
252
+ '01': '01 - Dinheiro',
253
+ '02': '02 - Cheque',
254
+ '03': '03 - Cartao de Credito',
255
+ '04': '04 - Cartao de Debito',
256
+ '15': '15 - Boleto Bancario',
257
+ '17': '17 - PIX',
258
+ '90': '90 - Sem Pagamento',
259
+ '99': '99 - Outros',
260
+ };
261
+ return mapa[tPag] ?? `Codigo ${tPag}`;
262
+ }
263
+ static formatDecimal(val) {
264
+ const num = Number(val.replace(',', '.'));
265
+ if (Number.isNaN(num))
266
+ return val;
267
+ return num.toFixed(2).replace('.', ',');
268
+ }
269
+ static getTag(parent, tagName, fallback) {
270
+ if (!parent || typeof parent.getElementsByTagName !== 'function') {
271
+ return fallback;
272
+ }
273
+ const node = parent.getElementsByTagName(tagName)[0];
274
+ return node?.textContent?.trim() || fallback;
275
+ }
276
+ static formatDoc(doc) {
277
+ const digits = doc.replace(/\D/g, '');
278
+ if (digits.length === 14) {
279
+ return digits.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
280
+ }
281
+ if (digits.length === 11) {
282
+ return digits.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})$/, '$1.$2.$3-$4');
283
+ }
284
+ return doc;
285
+ }
286
+ static formatDateTime(iso) {
287
+ if (!iso || iso.length < 19)
288
+ return iso;
289
+ const datePart = `${iso.slice(8, 10)}/${iso.slice(5, 7)}/${iso.slice(0, 4)}`;
290
+ const timePart = iso.slice(11, 19);
291
+ return `${datePart} ${timePart}`;
292
+ }
293
+ static drawSectionHeader(cmds, x, y, title) {
294
+ this.drawText(cmds, x, y, title, 6, true);
295
+ }
296
+ static drawBox(cmds, x, y, w, h, label, value = '', valueSize = 7.5, boldValue = false) {
297
+ cmds.push(`${x} ${y} ${w} ${h} re S`);
298
+ if (label) {
299
+ this.drawText(cmds, x + 2.5, y + h - 6.5, label, 5, false);
300
+ }
301
+ if (value) {
302
+ this.drawText(cmds, x + 2.5, y + 4.5, value, valueSize, boldValue);
303
+ }
304
+ }
305
+ static drawText(cmds, x, y, text, size, bold) {
306
+ const font = bold ? '/F2' : '/F1';
307
+ const escaped = this.escapePdfText(text);
308
+ cmds.push(`BT ${font} ${size} Tf ${x} ${y} Td (${escaped}) Tj ET`);
309
+ }
310
+ static escapePdfText(text) {
311
+ return text
312
+ .normalize('NFD')
313
+ .replace(/[\u0300-\u036f]/g, '')
314
+ .replace(/\\/g, '\\\\')
315
+ .replace(/\(/g, '\\(')
316
+ .replace(/\)/g, '\\)');
317
+ }
318
+ static drawCode128C(cmds, digits, x, y, width, height) {
319
+ const clean = digits.replace(/\D/g, '').padStart(44, '0').slice(0, 44);
320
+ const codes = [105];
321
+ let checksum = 105;
322
+ for (let i = 0; i < clean.length; i += 2) {
323
+ const pairVal = parseInt(clean.slice(i, i + 2), 10);
324
+ codes.push(pairVal);
325
+ checksum += pairVal * (i / 2 + 1);
326
+ }
327
+ codes.push(checksum % 103);
328
+ codes.push(106);
329
+ const patterns = codes.map((c) => CODE128_PATTERNS[c] ?? '212222');
330
+ const totalModules = patterns.reduce((acc, p) => acc + p.split('').reduce((s, d) => s + Number(d), 0), 0);
331
+ const moduleWidth = width / totalModules;
332
+ let cursorX = x;
333
+ for (const pattern of patterns) {
334
+ for (let i = 0; i < pattern.length; i++) {
335
+ const modCount = Number(pattern[i] ?? '1');
336
+ const barW = modCount * moduleWidth;
337
+ if (i % 2 === 0) {
338
+ cmds.push(`${cursorX.toFixed(2)} ${y.toFixed(2)} ${barW.toFixed(2)} ${height.toFixed(2)} re f`);
339
+ }
340
+ cursorX += barW;
341
+ }
342
+ }
343
+ }
344
+ static buildPdfBuffer(contentStream) {
345
+ const streamBytes = Buffer.byteLength(contentStream, 'latin1');
346
+ const objects = [
347
+ '1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n',
348
+ '2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n',
349
+ '3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595.28 841.89] /Resources << /Font << /F1 4 0 R /F2 5 0 R >> >> /Contents 6 0 R >>\nendobj\n',
350
+ '4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>\nendobj\n',
351
+ '5 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >>\nendobj\n',
352
+ `6 0 obj\n<< /Length ${streamBytes} >>\nstream\n${contentStream}\nendstream\nendobj\n`,
353
+ ];
354
+ let pdf = '%PDF-1.4\n';
355
+ const offsets = [0];
356
+ for (const obj of objects) {
357
+ offsets.push(Buffer.byteLength(pdf, 'latin1'));
358
+ pdf += obj;
359
+ }
360
+ const xrefStart = Buffer.byteLength(pdf, 'latin1');
361
+ pdf += `xref\n0 ${objects.length + 1}\n`;
362
+ pdf += '0000000000 65535 f \n';
363
+ for (let i = 1; i <= objects.length; i++) {
364
+ const offset = offsets[i] ?? 0;
365
+ pdf += `${String(offset).padStart(10, '0')} 00000 n \n`;
366
+ }
367
+ pdf += `trailer\n<< /Size ${objects.length + 1} /Root 1 0 R >>\nstartxref\n${xrefStart}\n%%EOF\n`;
368
+ return Buffer.from(pdf, 'latin1');
369
+ }
370
+ }
371
+ //# sourceMappingURL=Danfe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Danfe.js","sourceRoot":"","sources":["../src/Danfe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,gBAAgB,GAAsB;IAC1C,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS;CACtE,CAAC;AAyBF,MAAM,aAAa,GAA4B;IAC7C,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACpC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,gCAAgC,EAAE;IAC1D,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;IAClC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IACnC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9B,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;IAClC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACpC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACpC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACrC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IACnC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;IAClC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;IACpC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;CACpC,CAAC;AAEF,MAAM,OAAO,KAAK;IACT,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,eAAwB;QAC5D,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,eAAe;YAChC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,eAAe,EAAE,UAAU,CAAC;YAC9D,CAAC,CAAC,GAAG,CAAC;QAER,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GACX,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7C,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;QACzI,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAEzL,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,cAAc,GAAG,KAAK;YAC1B,CAAC,CAAC,GAAG,KAAK,MAAM,QAAQ,EAAE;YAC1B,CAAC,CAAC,SAAS,KAAK,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,QAAQ,GAAG,CAAC;QAE7D,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;gBACrC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACjC,YAAY,EAAE,GAAG,IAAI,IAAI,UAAU,EAAE;gBACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC/D,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACzD,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC1D,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,yDAAyD,CAAC,CAAC;QAC1I,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,yCAAyC,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEzG,IAAI,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,4CAA4C,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAElF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,iCAAiC,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEpG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,qCAAqC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACnG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEzE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAExF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE9F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE1F,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACzG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAE,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAExJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAClI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEhI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACxH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACrI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE7H,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,uCAAuC,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9G,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEpH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEhG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC,CAAC,IAAI,UAAU,OAAO,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,GAAG,YAAY,GAAG,CAAC;gBAAE,MAAM;YACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAEpD,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAChF,IAAI,IAAI,EAAE,CAAC;QACb,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,gCAAgC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,MAAM;YAC3B,CAAC,CAAC,GAAG,MAAM,oBAAoB,KAAK,MAAM,OAAO,EAAE;YACnD,CAAC,CAAC,aAAa,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,cAAc,oBAAoB,KAAK,MAAM,OAAO,EAAE,CAAC;QAC/H,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,4BAA4B,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3G,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QAC/C,MAAM,IAAI,GAA2B;YACnC,GAAG,EAAE,mBAAmB;YACxB,GAAG,EAAE,sBAAsB;YAC3B,GAAG,EAAE,aAAa;YAClB,GAAG,EAAE,kBAAkB;YACvB,GAAG,EAAE,iBAAiB;YACtB,GAAG,EAAE,kBAAkB;SACxB,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACpC,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,IAAY;QAC/C,MAAM,IAAI,GAA2B;YACnC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,aAAa;SACpB,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,EAAE,CAAC;IACxC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,GAAW;QACtC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAEO,MAAM,CAAC,MAAM,CACnB,MAA2G,EAC3G,OAAe,EACf,QAAgB;QAEhB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;YACjE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC;IAC/C,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,GAAW;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,OAAO,CAAC,uCAAuC,EAAE,gBAAgB,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE,aAAa,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,GAAW;QACvC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,GAAG,CAAC;QACxC,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,IAAc,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,OAAO,CACpB,IAAc,EACd,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,KAAa,EACb,KAAK,GAAG,EAAE,EACV,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,KAAK;QAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,IAAc,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,IAAY,EAAE,IAAa;QACrG,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,OAAO,SAAS,CAAC,CAAC;IACrE,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,IAAY;QACvC,OAAO,IAAI;aACR,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;aAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,IAAc,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;QAC7G,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAChE,CAAC,CACF,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;QAEzC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC3C,MAAM,IAAI,GAAG,QAAQ,GAAG,WAAW,CAAC;gBACpC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAClG,CAAC;gBACD,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,aAAqB;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAa;YACxB,sDAAsD;YACtD,8DAA8D;YAC9D,mJAAmJ;YACnJ,sGAAsG;YACtG,2GAA2G;YAC3G,uBAAuB,WAAW,gBAAgB,aAAa,uBAAuB;SACvF,CAAC;QAEF,IAAI,GAAG,GAAG,YAAY,CAAC;QACvB,MAAM,OAAO,GAAa,CAAC,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC/C,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnD,GAAG,IAAI,WAAW,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;QACzC,GAAG,IAAI,uBAAuB,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC;QAC1D,CAAC;QACD,GAAG,IAAI,qBAAqB,OAAO,CAAC,MAAM,GAAG,CAAC,+BAA+B,SAAS,WAAW,CAAC;QAElG,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;CACF"}
package/dist/NFe.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import { Certificado } from './Certificado.js';
2
+ import type { DadosNFe, RetornoSefaz } from './types.js';
3
+ import { type AmbienteSefaz, type AutorizadorSefaz, type ServicoSefaz, type SiglaUF } from './webservices.js';
4
+ export type { AmbienteSefaz } from './webservices.js';
5
+ export interface ConfiguracaoNFe {
6
+ uf: SiglaUF | (string & {});
7
+ ambiente: AmbienteSefaz;
8
+ certificado: Certificado;
9
+ contingencia?: boolean | undefined;
10
+ }
11
+ export declare class NFe {
12
+ private config;
13
+ private assinador;
14
+ constructor(config: ConfiguracaoNFe);
15
+ getAutorizador(): AutorizadorSefaz;
16
+ getUrl(servico: ServicoSefaz): string;
17
+ getCodigoUF(): string;
18
+ consultarStatus(): Promise<RetornoSefaz>;
19
+ /**
20
+ * Recebe os dados da NFe em formato JS/JSON, converte para XML, assina e envia.
21
+ */
22
+ emitir(dadosNFe: DadosNFe): Promise<RetornoSefaz>;
23
+ private enviarSoap;
24
+ }
25
+ //# sourceMappingURL=NFe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NFe.d.ts","sourceRoot":"","sources":["../src/NFe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAY;IAE7B,YAAY,MAAM,EAAE,eAAe,EAGlC;IAEM,cAAc,IAAI,gBAAgB,CAExC;IAEM,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAO3C;IAEM,WAAW,IAAI,MAAM,CAE3B;IAEY,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAOpD;IAED;;OAEG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA8B7D;YAEa,UAAU;CAmCzB"}
package/dist/NFe.js ADDED
@@ -0,0 +1,90 @@
1
+ import axios from 'axios';
2
+ import { Assinador } from './Assinador.js';
3
+ import { create } from 'xmlbuilder2';
4
+ import { DOMParser } from '@xmldom/xmldom';
5
+ import { obterAutorizadorPorUF, obterCodigoUF, obterUrlSefaz, } from './webservices.js';
6
+ export class NFe {
7
+ config;
8
+ assinador;
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.assinador = new Assinador(config.certificado);
12
+ }
13
+ getAutorizador() {
14
+ return obterAutorizadorPorUF(this.config.uf, this.config.contingencia ?? false);
15
+ }
16
+ getUrl(servico) {
17
+ return obterUrlSefaz(this.config.uf, this.config.ambiente, servico, this.config.contingencia ?? false);
18
+ }
19
+ getCodigoUF() {
20
+ return obterCodigoUF(this.config.uf);
21
+ }
22
+ async consultarStatus() {
23
+ const url = this.getUrl('status');
24
+ const tpAmb = this.config.ambiente === 'producao' ? '1' : '2';
25
+ const xmlBody = `<?xml version="1.0" encoding="UTF-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4"><consStatServ versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>${tpAmb}</tpAmb><cUF>${this.getCodigoUF()}</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg></soap12:Body></soap12:Envelope>`;
26
+ return this.enviarSoap(url, xmlBody);
27
+ }
28
+ /**
29
+ * Recebe os dados da NFe em formato JS/JSON, converte para XML, assina e envia.
30
+ */
31
+ async emitir(dadosNFe) {
32
+ const idLote = Math.floor(Math.random() * 1000000).toString();
33
+ // 1. Gera o XML da nota a partir do objeto passado pelo usuário
34
+ const xmlNFeStr = create({ NFe: { '@xmlns': 'http://www.portalfiscal.inf.br/nfe', ...dadosNFe } }).end({ prettyPrint: false });
35
+ // 2. Assina o XML
36
+ console.log('Assinando o XML...');
37
+ const xmlAssinado = xmlCruFormatado(this.assinador.assinarXmlNFe(xmlCruFormatado(xmlNFeStr)));
38
+ // 3. Monta o Lote (SOAP)
39
+ // A SEFAZ rejeita espaços em branco, quebras de linha ou comentários dentro da tag enviNFe (Erro 588)
40
+ const xmlBody = `<?xml version="1.0" encoding="UTF-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4"><enviNFe versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"><idLote>${idLote}</idLote><indSinc>1</indSinc>${xmlAssinado}</enviNFe></nfeDadosMsg></soap12:Body></soap12:Envelope>`;
41
+ // 4. Envia
42
+ console.log('Enviando para a SEFAZ...');
43
+ const retorno = await this.enviarSoap(this.getUrl('autorizacao'), xmlBody);
44
+ const docRetorno = new DOMParser().parseFromString(retorno.xml, 'text/xml');
45
+ const protNFeNode = docRetorno.getElementsByTagName('protNFe')[0];
46
+ const xmlNfeProc = protNFeNode
47
+ ? `<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">${xmlAssinado}${protNFeNode.toString()}</nfeProc>`
48
+ : undefined;
49
+ return {
50
+ ...retorno,
51
+ xmlAssinado,
52
+ xmlNfeProc,
53
+ };
54
+ }
55
+ async enviarSoap(url, xmlBody) {
56
+ const agent = this.config.certificado.getHttpsAgent();
57
+ try {
58
+ const response = await axios.post(url, xmlBody, {
59
+ httpsAgent: agent,
60
+ headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' },
61
+ });
62
+ const xmlStr = response.data;
63
+ const doc = new DOMParser().parseFromString(xmlStr, 'text/xml');
64
+ // Tenta pegar o cStat do protocolo primeiro (resultado da nota individual)
65
+ let cStatNode = doc.getElementsByTagName('infProt')[0]?.getElementsByTagName('cStat')[0];
66
+ let xMotivoNode = doc.getElementsByTagName('infProt')[0]?.getElementsByTagName('xMotivo')[0];
67
+ // Se não tiver protocolo, pega o cStat geral do lote ou do status de serviço
68
+ if (!cStatNode) {
69
+ cStatNode = doc.getElementsByTagName('cStat')[0];
70
+ xMotivoNode = doc.getElementsByTagName('xMotivo')[0];
71
+ }
72
+ const status = cStatNode && cStatNode.textContent ? parseInt(cStatNode.textContent, 10) : 0;
73
+ const motivo = xMotivoNode && xMotivoNode.textContent ? xMotivoNode.textContent : 'Retorno não identificado';
74
+ // 100 = Autorizado, 104 = Lote Processado, 107 = Serviço em Operação
75
+ const sucesso = status === 100 || status === 104 || status === 107;
76
+ return { sucesso, status, motivo, xml: xmlStr };
77
+ }
78
+ catch (error) {
79
+ if (error.response) {
80
+ throw new Error(`Erro na SEFAZ: HTTP ${error.response.status} - ${error.response.data}`);
81
+ }
82
+ throw error;
83
+ }
84
+ }
85
+ }
86
+ function xmlCruFormatado(xml) {
87
+ // Evita declarações duplicadas do xmlbuilder2 se houver
88
+ return xml.replace(/^<\?xml[^?]*\?>\s*/i, '').trim();
89
+ }
90
+ //# sourceMappingURL=NFe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NFe.js","sourceRoot":"","sources":["../src/NFe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type SiglaUF } from './webservices.js';
2
+ export interface ParametrosChaveAcesso {
3
+ /** Sigla da UF (ex: 'SP', 'DF') ou código IBGE de 2 dígitos (ex: '35', '53') */
4
+ uf: SiglaUF | (string & {});
5
+ /** Data de emissão (Date, string ISO 'YYYY-MM-DD...' ou 'AAMM') */
6
+ dataEmissao: Date | string;
7
+ /** CNPJ (14 dígitos) ou CPF (11 dígitos) do emitente */
8
+ cnpjOuCpf: string;
9
+ /** Modelo do documento fiscal ('55' para NF-e, '65' para NFC-e). Padrão: '55' */
10
+ modelo?: '55' | '65' | number | string | undefined;
11
+ /** Série do documento fiscal (1 a 3 dígitos) */
12
+ serie: number | string;
13
+ /** Número da NF-e (1 a 9 dígitos) */
14
+ numero: number | string;
15
+ /** Tipo de emissão (1 = Normal, 6 = SVC-AN, 7 = SVC-RS, 9 = Offline, etc.) */
16
+ tpEmis: number | string;
17
+ /** Código numérico aleatório de 8 dígitos que compõe a chave (cNF) */
18
+ cNF: number | string;
19
+ }
20
+ export interface ResultadoChaveAcesso {
21
+ /** Chave de acesso completa com 44 dígitos numéricos */
22
+ chave: string;
23
+ /** Dígito verificador calculado em Módulo 11 (1 dígito) */
24
+ cDV: string;
25
+ /** Identificador para a tag `<infNFe Id="NFe...">` */
26
+ id: `NFe${string}`;
27
+ }
28
+ /**
29
+ * Calcula o dígito verificador (cDV) em Módulo 11 a partir dos 43 primeiros dígitos da chave.
30
+ */
31
+ export declare function calcularDigitoVerificador(chave43: string): string;
32
+ /**
33
+ * Gera a chave de acesso de 44 dígitos da NF-e/NFC-e e seu dígito verificador (cDV).
34
+ */
35
+ export declare function gerarChaveAcesso(params: ParametrosChaveAcesso): ResultadoChaveAcesso;
36
+ /**
37
+ * Valida se uma chave de acesso (com ou sem o prefixo 'NFe') possui 44 dígitos e cDV válido.
38
+ */
39
+ export declare function validarChaveAcesso(chaveOuId: string): boolean;
40
+ //# sourceMappingURL=chaveAcesso.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chaveAcesso.d.ts","sourceRoot":"","sources":["../src/chaveAcesso.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5B,mEAAmE;IACnE,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,gDAAgD;IAChD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,qCAAqC;IACrC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,sEAAsE;IACtE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,EAAE,EAAE,MAAM,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CA8BpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO7D"}