@senior-agronegocio/angular-components 0.0.9867 → 0.0.9870
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/bundles/senior-agronegocio-angular-components.umd.js +5644 -4540
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +2 -2
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/common/agro-array-utils.class.d.ts +13 -0
- package/common/agro-logics.class.d.ts +5 -0
- package/common/agro-number-utils.class.d.ts +6 -0
- package/common/agro-object-stringifier.class.d.ts +1 -1
- package/common/agro-object-utils.class.d.ts +3 -1
- package/common/agro-string-utils.class.d.ts +0 -5
- package/common/agro-unit-converter.class.d.ts +23 -0
- package/common/index.d.ts +1 -0
- package/components/event-control-board/common/event-operation.d.ts +1 -0
- package/components/event-control-board/common/event-origin.d.ts +1 -0
- package/components/event-control-board/event-control-board.component.d.ts +7 -3
- package/components/event-control-board/index.d.ts +1 -3
- package/components/event-control-board/service/e012fam/e012fam.d.ts +14 -0
- package/components/event-control-board/service/e075der/e075der.d.ts +18 -0
- package/components/event-control-board/service/e113saf/e113saf.d.ts +14 -0
- package/components/event-control-board/service/e205dep/e205dep-dto.d.ts +15 -0
- package/components/event-control-board/service/e205dep/e205dep.d.ts +16 -0
- package/components/event-control-board/service/entity-service.d.ts +3 -3
- package/components/event-control-board/service/external-invoice/external-invoice.d.ts +13 -0
- package/components/event-control-board/service/invoice/invoice.d.ts +21 -0
- package/components/event-control-board/service/origination/operationType.d.ts +5 -0
- package/components/event-control-board/service/origination/origination-dto.d.ts +1 -1
- package/components/event-control-board/service/origination/origination.d.ts +51 -0
- package/components/event-control-board/service/rural-estate/rural-estate.d.ts +34 -0
- package/components/event-control-board/service/ticket/ticket.d.ts +18 -0
- package/components/index.d.ts +1 -0
- package/components/modal-invoice-pj/for-fixation/modal-fixation-options.interface.d.ts +5 -0
- package/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.component.d.ts +35 -0
- package/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.module.d.ts +2 -0
- package/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.component.d.ts +26 -0
- package/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.module.d.ts +2 -0
- package/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.component.d.ts +26 -0
- package/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.module.d.ts +2 -0
- package/components/modal-invoice-pj/index.d.ts +9 -0
- package/components/modal-invoice-pj/modal-invoice-pj-base.class.d.ts +53 -0
- package/components/modal-invoice-pj/modal-invoice-pj-options.interface.d.ts +10 -0
- package/components/modal-invoice-pj/modal-shared-imports.d.ts +8 -0
- package/components/modal-invoice-pj/services/agro-invoice/agro-invoice.module.d.ts +2 -0
- package/components/modal-invoice-pj/services/agro-invoice/agro-invoice.service.d.ts +16 -0
- package/components/modal-invoice-pj/services/agro-invoice/index.d.ts +2 -0
- package/components/modal-invoice-pj/services/agro-invoice/interfaces.d.ts +75 -0
- package/enums/index.d.ts +1 -0
- package/enums/invoice-status.enum.d.ts +12 -0
- package/enums/unit-measurement.enum.d.ts +49 -0
- package/esm2015/common/agro-array-utils.class.js +19 -1
- package/esm2015/common/agro-logics.class.js +11 -6
- package/esm2015/common/agro-number-utils.class.js +18 -1
- package/esm2015/common/agro-object-stringifier.class.js +4 -1
- package/esm2015/common/agro-object-utils.class.js +28 -2
- package/esm2015/common/agro-string-utils.class.js +2 -64
- package/esm2015/common/agro-unit-converter.class.js +256 -0
- package/esm2015/common/index.js +2 -1
- package/esm2015/components/cancel-event-dialog/cancel-event-dialog-config.js +1 -1
- package/esm2015/components/event-control-board/common/event-control-constants.js +6 -1
- package/esm2015/components/event-control-board/common/event-operation.js +2 -1
- package/esm2015/components/event-control-board/common/event-origin.js +2 -1
- package/esm2015/components/event-control-board/event-control-board.component.js +14 -8
- package/esm2015/components/event-control-board/event-control-board.module.js +2 -5
- package/esm2015/components/event-control-board/index.js +2 -4
- package/esm2015/components/event-control-board/service/e012fam/e012fam.js +20 -0
- package/esm2015/components/event-control-board/service/e075der/e075der.js +31 -0
- package/esm2015/components/event-control-board/service/e113saf/e113saf.js +20 -0
- package/esm2015/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e205dep/e205dep.js +20 -0
- package/esm2015/components/event-control-board/service/entity-service.js +25 -27
- package/esm2015/components/event-control-board/service/external-invoice/external-invoice.js +20 -0
- package/esm2015/components/event-control-board/service/invoice/invoice.js +43 -0
- package/esm2015/components/event-control-board/service/origination/operationType.js +7 -0
- package/esm2015/components/event-control-board/service/origination/origination-dto.js +1 -1
- package/esm2015/components/event-control-board/service/origination/origination.js +59 -0
- package/esm2015/components/event-control-board/service/rural-estate/rural-estate.js +78 -0
- package/esm2015/components/event-control-board/service/ticket/ticket.js +39 -0
- package/esm2015/components/financial-title-table/financial-title-table.module.js +7 -5
- package/esm2015/components/index.js +2 -1
- package/esm2015/components/modal-invoice-pj/for-fixation/modal-fixation-options.interface.js +1 -0
- package/esm2015/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.component.js +189 -0
- package/esm2015/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.module.js +16 -0
- package/esm2015/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.component.js +60 -0
- package/esm2015/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.module.js +16 -0
- package/esm2015/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.component.js +60 -0
- package/esm2015/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.module.js +16 -0
- package/esm2015/components/modal-invoice-pj/index.js +8 -0
- package/esm2015/components/modal-invoice-pj/modal-invoice-pj-base.class.js +193 -0
- package/esm2015/components/modal-invoice-pj/modal-invoice-pj-options.interface.js +1 -0
- package/esm2015/components/modal-invoice-pj/modal-shared-imports.js +32 -0
- package/esm2015/components/modal-invoice-pj/services/agro-invoice/agro-invoice.module.js +28 -0
- package/esm2015/components/modal-invoice-pj/services/agro-invoice/agro-invoice.service.js +49 -0
- package/esm2015/components/modal-invoice-pj/services/agro-invoice/index.js +3 -0
- package/esm2015/components/modal-invoice-pj/services/agro-invoice/interfaces.js +13 -0
- package/esm2015/enums/index.js +2 -1
- package/esm2015/enums/invoice-status.enum.js +14 -0
- package/esm2015/enums/unit-measurement.enum.js +60 -0
- package/esm2015/lib-translation.module.js +3 -1
- package/esm2015/pipe/index.js +2 -1
- package/esm2015/pipe/kilogram/index.js +3 -0
- package/esm2015/pipe/kilogram/kilogram.module.js +17 -0
- package/esm2015/pipe/kilogram/kilogram.pipe.js +38 -0
- package/esm2015/public-api.js +5 -5
- package/esm2015/services/entity-service.js +14 -12
- package/esm2015/services/i18n/en-US.js +10 -1
- package/esm2015/services/i18n/es-CO.js +12 -3
- package/esm2015/services/i18n/pt-BR.js +272 -261
- package/esm2015/services/index.js +1 -1
- package/esm2015/services/lib-translation.service.js +2 -2
- package/esm2015/services/producer-invoice/index.js +3 -0
- package/esm2015/services/producer-invoice/producer-invoice-dto.js +1 -0
- package/esm2015/services/producer-invoice/producer-invoice.js +32 -0
- package/esm2015/services/producer-invoice/producer-invoice.service.js +64 -0
- package/esm5/common/agro-array-utils.class.js +19 -1
- package/esm5/common/agro-logics.class.js +10 -4
- package/esm5/common/agro-number-utils.class.js +19 -1
- package/esm5/common/agro-object-stringifier.class.js +4 -1
- package/esm5/common/agro-object-utils.class.js +28 -2
- package/esm5/common/agro-string-utils.class.js +8 -81
- package/esm5/common/agro-unit-converter.class.js +259 -0
- package/esm5/common/index.js +2 -1
- package/esm5/components/cancel-event-dialog/cancel-event-dialog-config.js +1 -1
- package/esm5/components/event-control-board/common/event-control-constants.js +6 -1
- package/esm5/components/event-control-board/common/event-operation.js +2 -1
- package/esm5/components/event-control-board/common/event-origin.js +2 -1
- package/esm5/components/event-control-board/event-control-board.component.js +14 -8
- package/esm5/components/event-control-board/event-control-board.module.js +2 -5
- package/esm5/components/event-control-board/index.js +2 -4
- package/esm5/components/event-control-board/service/e012fam/e012fam.js +25 -0
- package/esm5/components/event-control-board/service/e075der/e075der.js +36 -0
- package/esm5/components/event-control-board/service/e113saf/e113saf.js +25 -0
- package/esm5/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
- package/esm5/components/event-control-board/service/e205dep/e205dep.js +25 -0
- package/esm5/components/event-control-board/service/entity-service.js +24 -26
- package/esm5/components/event-control-board/service/external-invoice/external-invoice.js +25 -0
- package/esm5/components/event-control-board/service/invoice/invoice.js +48 -0
- package/esm5/components/event-control-board/service/origination/operationType.js +7 -0
- package/esm5/components/event-control-board/service/origination/origination-dto.js +1 -1
- package/esm5/components/event-control-board/service/origination/origination.js +62 -0
- package/esm5/components/event-control-board/service/rural-estate/rural-estate.js +83 -0
- package/esm5/components/event-control-board/service/ticket/ticket.js +44 -0
- package/esm5/components/financial-title-table/financial-title-table.module.js +7 -5
- package/esm5/components/index.js +2 -1
- package/esm5/components/modal-invoice-pj/for-fixation/modal-fixation-options.interface.js +1 -0
- package/esm5/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.component.js +221 -0
- package/esm5/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.module.js +19 -0
- package/esm5/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.component.js +63 -0
- package/esm5/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.module.js +19 -0
- package/esm5/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.component.js +63 -0
- package/esm5/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.module.js +19 -0
- package/esm5/components/modal-invoice-pj/index.js +8 -0
- package/esm5/components/modal-invoice-pj/modal-invoice-pj-base.class.js +210 -0
- package/esm5/components/modal-invoice-pj/modal-invoice-pj-options.interface.js +1 -0
- package/esm5/components/modal-invoice-pj/modal-shared-imports.js +32 -0
- package/esm5/components/modal-invoice-pj/services/agro-invoice/agro-invoice.module.js +31 -0
- package/esm5/components/modal-invoice-pj/services/agro-invoice/agro-invoice.service.js +56 -0
- package/esm5/components/modal-invoice-pj/services/agro-invoice/index.js +3 -0
- package/esm5/components/modal-invoice-pj/services/agro-invoice/interfaces.js +13 -0
- package/esm5/enums/index.js +2 -1
- package/esm5/enums/invoice-status.enum.js +14 -0
- package/esm5/enums/unit-measurement.enum.js +60 -0
- package/esm5/lib-translation.module.js +3 -1
- package/esm5/pipe/index.js +2 -1
- package/esm5/pipe/kilogram/index.js +3 -0
- package/esm5/pipe/kilogram/kilogram.module.js +20 -0
- package/esm5/pipe/kilogram/kilogram.pipe.js +41 -0
- package/esm5/public-api.js +5 -5
- package/esm5/services/entity-service.js +13 -11
- package/esm5/services/i18n/en-US.js +10 -1
- package/esm5/services/i18n/es-CO.js +12 -3
- package/esm5/services/i18n/pt-BR.js +272 -261
- package/esm5/services/index.js +1 -1
- package/esm5/services/lib-translation.service.js +2 -2
- package/esm5/services/producer-invoice/index.js +3 -0
- package/esm5/services/producer-invoice/producer-invoice-dto.js +1 -0
- package/esm5/services/producer-invoice/producer-invoice.js +37 -0
- package/esm5/services/producer-invoice/producer-invoice.service.js +72 -0
- package/fesm2015/senior-agronegocio-angular-components.js +5095 -4077
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +5642 -4548
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/pipe/index.d.ts +1 -0
- package/pipe/kilogram/index.d.ts +2 -0
- package/pipe/kilogram/kilogram.module.d.ts +2 -0
- package/pipe/kilogram/kilogram.pipe.d.ts +8 -0
- package/public-api.d.ts +4 -4
- package/senior-agronegocio-angular-components.metadata.json +1 -1
- package/services/entity-service.d.ts +2 -1
- package/services/i18n/en-US.d.ts +9 -0
- package/services/i18n/es-CO.d.ts +10 -1
- package/services/i18n/pt-BR.d.ts +270 -259
- package/services/producer-invoice/index.d.ts +3 -0
- package/{components/event-control-board/service → services}/producer-invoice/producer-invoice-dto.d.ts +4 -4
- package/services/producer-invoice/producer-invoice.d.ts +27 -0
- package/services/producer-invoice/producer-invoice.service.d.ts +18 -0
- package/components/event-control-board/service/event-control-board.service.d.ts +0 -13
- package/components/event-control-board/service/producer-invoice/producer-invoice.module.d.ts +0 -2
- package/components/event-control-board/service/producer-invoice/producer-invoice.service.d.ts +0 -11
- package/esm2015/components/event-control-board/service/event-control-board.service.js +0 -37
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +0 -1
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.module.js +0 -26
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.service.js +0 -24
- package/esm5/components/event-control-board/service/event-control-board.service.js +0 -38
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +0 -1
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.module.js +0 -29
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.service.js +0 -27
|
@@ -262,75 +262,13 @@ export class AgroStringUtils {
|
|
|
262
262
|
const matches = str.match(regex);
|
|
263
263
|
return matches ? matches.length : AGRO_NUMBERS.ZERO;
|
|
264
264
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Remove uma máscara simples da string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
267
|
-
* pode ser uma string personalizada onde '9' representa um dígito a ser mantido da string.
|
|
268
|
-
*/
|
|
269
|
-
static removeMask(value, mask) {
|
|
270
|
-
if (!value || !mask) {
|
|
271
|
-
return value;
|
|
272
|
-
}
|
|
273
|
-
const valueChars = value.toString().split("");
|
|
274
|
-
const maskChars = mask.split("");
|
|
275
|
-
let unmaskedValue = "";
|
|
276
|
-
let j = 0;
|
|
277
|
-
const isDigit = (c) => /\d/.test(c);
|
|
278
|
-
const isAlpha = (c) => /[A-Za-z]/.test(c);
|
|
279
|
-
const isAlnum = (c) => /[A-Za-z0-9]/.test(c);
|
|
280
|
-
const extractNext = (testFn) => {
|
|
281
|
-
let k = j;
|
|
282
|
-
while (k < valueChars.length && !testFn(valueChars[k])) {
|
|
283
|
-
k++;
|
|
284
|
-
}
|
|
285
|
-
if (k < valueChars.length) {
|
|
286
|
-
const found = valueChars[k];
|
|
287
|
-
j = k + 1;
|
|
288
|
-
return found;
|
|
289
|
-
}
|
|
290
|
-
const fallback = valueChars[j];
|
|
291
|
-
j++;
|
|
292
|
-
return fallback;
|
|
293
|
-
};
|
|
294
|
-
const processMaskChar = (maskChar) => {
|
|
295
|
-
var _a, _b;
|
|
296
|
-
if (j >= valueChars.length) {
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const current = valueChars[j];
|
|
300
|
-
switch (maskChar) {
|
|
301
|
-
case "9":
|
|
302
|
-
unmaskedValue += (_a = extractNext(isDigit)) !== null && _a !== void 0 ? _a : "";
|
|
303
|
-
break;
|
|
304
|
-
case "A":
|
|
305
|
-
unmaskedValue += (_b = extractNext(isAlpha)) !== null && _b !== void 0 ? _b : "";
|
|
306
|
-
break;
|
|
307
|
-
default:
|
|
308
|
-
handleSeparator(maskChar, current);
|
|
309
|
-
break;
|
|
310
|
-
}
|
|
311
|
-
};
|
|
312
|
-
const handleSeparator = (maskChar, current) => {
|
|
313
|
-
if (current === maskChar) {
|
|
314
|
-
j++; // separador presente no valor
|
|
315
|
-
}
|
|
316
|
-
if (isAlnum(current)) {
|
|
317
|
-
unmaskedValue += current;
|
|
318
|
-
j++;
|
|
319
|
-
}
|
|
320
|
-
// se for pontuação diferente, apenas ignora (não consome j)
|
|
321
|
-
};
|
|
322
|
-
for (const maskChar of maskChars) {
|
|
323
|
-
processMaskChar(maskChar);
|
|
324
|
-
}
|
|
325
|
-
return unmaskedValue;
|
|
326
|
-
}
|
|
327
265
|
/**
|
|
328
266
|
* Aplica uma máscara simples à string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
329
267
|
* pode ser uma string personalizada onde '9' representa um dígito a ser substituído pelo caractere correspondente
|
|
330
268
|
* da string.
|
|
331
269
|
*/
|
|
332
270
|
static applyMask(value, mask) {
|
|
333
|
-
const valueChars =
|
|
271
|
+
const valueChars = value.replace(/[^A-Za-z0-9]/g, "");
|
|
334
272
|
const maskChars = mask.split("");
|
|
335
273
|
let maskedValue = "";
|
|
336
274
|
let j = AGRO_NUMBERS.ZERO;
|
|
@@ -423,4 +361,4 @@ AgroStringUtils.CNPJ_ALFANUMERICO_PESOS_2 = [
|
|
|
423
361
|
AGRO_NUMBERS.THREE,
|
|
424
362
|
AGRO_NUMBERS.TWO,
|
|
425
363
|
];
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLFVBQVUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUkxQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBNER4QixvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBbUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFP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WSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7SUFDaEIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7Q0FDbkIsQ0FBQztBQUNGLHFGQUFxRjtBQUM3RCx5Q0FBeUIsR0FBYTtJQUMxRCxZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztDQUNuQixDQUFDO0FBQ3NCLHlDQUF5QixHQUFhO0lBQzFELFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0NBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBR1JPX05VTUJFUlMsIEFncm9TdHJpbmdNYXNrcyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgb3BlcmHDp8O1ZXMgZGUgc3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFncm9TdHJpbmdVdGlscyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzI6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TSVgsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZJVkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZPVVIsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRIUkVFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5UV08sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLk5JTkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkVJR0hULFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TRVZFTixcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgXTtcclxuICAgIC8vIFBlc29zIHV0aWxpemFkb3MgcGFyYSBjw6FsY3VsbyBkZSBkw61naXRvcyB2ZXJpZmljYWRvcmVzIGRvIENOUEogYWxmYW51bcOpcmljbyAoMjAyNilcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENOUEpfQUxGQU5VTUVSSUNPX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX0FMRkFOVU1FUklDT19QRVNPU18yOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICAvKiogUmV0b3JuYSB0cnVlIHNlIGEgc3RyaW5nIGNvbnTDqW0gYXBlbmFzIGxldHJhcyAqL1xyXG4gICAgc3RhdGljIGlzT25seUxldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9eW0EtWmEtel0rJC8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBwZWxvIG1lbm9zIHVtYSBsZXRyYSAqL1xyXG4gICAgc3RhdGljIGhhc0xldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9bQS1aYS16XS8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBhcGVuYXMgbsO6bWVyb3MgKi9cclxuICAgIHN0YXRpYyBpc09ubHlOdW1iZXJzKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAvXlxcZCskLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyBjb250w6ltIHBlbG8gbWVub3MgdW0gbsO6bWVybyAqL1xyXG4gICAgc3RhdGljIGhhc051bWJlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9cXGQvLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIGVzdMOhIHZhemlhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHN0ciAmJiBBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoc3RyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyPy50cmltKCk/Lmxlbmd0aCA9PT0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzdHIgJiYgQWdyb1N0cmluZ1V0aWxzLmlzU3RyaW5nKHN0cikpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNFbXB0eShzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgQUdST19SRUdFWC5vbmx5QmxhbmtTcGFjZXMudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWZXJpZmljYSBzZSBhIHN0cmluZyBuw6NvIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNOb3RCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNCbGFuayhzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVzcGHDp29zIGVtIGJyYW5jbyBkbyBpbsOtY2lvIGUgZG8gZmltIGRhIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRyaW1Ub051bGwoc3RyOiBOdWxsYWJsZVN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmltbWVkID0gc3RyLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gdHJpbW1lZCA9PT0gXCJcIiA/IG51bGwgOiB0cmltbWVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgaWdub3JhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHNJZ25vcmVDYXNlKHN0cjE6IE51bGxhYmxlU3RyaW5nLCBzdHIyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxPy50b0xvd2VyQ2FzZSgpID09PSBzdHIyPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgY29uc2lkZXJhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHMoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEgPT09IHN0cjI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgw6kgdW1hIHN0cmluZyB2w6FsaWRhIChuw6NvIG51bGwsIG7Do28gdW5kZWZpbmVkLCBuw6NvIHZhemlhKSAqL1xyXG4gICAgc3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZURlY2ltYWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZURlY2ltYWwudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1ppcENvZGUoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC56aXBDb2RlLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNOdW1iZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gW0FHUk9fUkVHRVguaXNOdW1iZXIudGVzdChzdHIpLCBBR1JPX1JFR0VYLmlzRGVjaW1hbC50ZXN0KHN0cildLmluY2x1ZGVzKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSBBR1JPX05VTUJFUlMuRUxFVkVOIHx8IC9eKFxcZClcXDErJC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGNWZXJpZmllciA9IChjcGY6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3VtID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldLCBBR1JPX05VTUJFUlMuVEVOKSAqIChsZW5ndGggKyBBR1JPX05VTUJFUlMuT05FIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY1ZlcmlmaWVyKGNwZiwgQUdST19OVU1CRVJTLk5JTkUpO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0MiA9IGNhbGNWZXJpZmllcihjcGYsIEFHUk9fTlVNQkVSUy5URU4pO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkaWdpdDEgPT09IHBhcnNlSW50KGNwZltBR1JPX05VTUJFUlMuTklORV0sIEFHUk9fTlVNQkVSUy5URU4pICYmIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmW0FHUk9fTlVNQkVSUy5URU5dLCBBR1JPX05VTUJFUlMuVEVOKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3RhIGF1dG9tYXRpY2FtZW50ZSBzZSDDqSBDTlBKIGFudGlnbyBvdSBub3ZvIGZvcm1hdG8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFjbnBqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY25waiA9IGNucGoudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyBTZSBjb250w6ltIGxldHJhcyDihpIgdmFsaWRhIGZvcm1hdG8gYWxmYW51bcOpcmljb1xyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ05QSkFsZmFudW1lcmljbyhjbnBqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhc28gY29udHLDoXJpbywgdmFsaWRhIGNvbW8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIHJldHVybiBBZ3JvU3RyaW5nVXRpbHMudmFsaWRhdGVDTlBKQW50aWdvKGNucGopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIG8gQ05QSiB0cmFkaWNpb25hbCAoc29tZW50ZSBuw7ptZXJvcylcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDTlBKQW50aWdvKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNPbmx5TnVtYmVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gQUdST19OVU1CRVJTLkZPVVJURUVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5UV0VMVkU7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpLCBBR1JPX05VTUJFUlMuVEVOKSAqIEFncm9TdHJpbmdVdGlscy5DTlBKX1RSQURJQ0lPTkFMX1BFU09TXzFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0bzEgPSByZXN0byA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN0bztcclxuXHJcbiAgICAgICAgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5USElSVEVFTjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSksIEFHUk9fTlVNQkVSUy5URU4pICogQWdyb1N0cmluZ1V0aWxzLkNOUEpfVFJBRElDSU9OQUxfUEVTT1NfMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBjb25zdCBkaWdpdG8yID0gcmVzdG8gPCBBR1JPX05VTUJFUlMuVFdPID8gQUdST19OVU1CRVJTLlpFUk8gOiBBR1JPX05VTUJFUlMuRUxFVkVOIC0gcmVzdG87XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHBhcnNlSW50KGNucGouY2hhckF0KEFHUk9fTlVNQkVSUy5UV0VMVkUpLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMSAmJlxyXG4gICAgICAgICAgICBwYXJzZUludChjbnBqLmNoYXJBdChBR1JPX05VTUJFUlMuVEhJUlRFRU4pLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgbyBDTlBKIGVtIGZvcm1hdG8gYWxmYW51bcOpcmljbyAocGFkcsOjbyAyMDI2KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUNOUEpBbGZhbnVtZXJpY28oY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoY25waikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGNhcmFjdGVyZXMgZXNwZWNpYWlzIChwb250b3MsIGJhcnJhLCB0cmHDp28sIGVzcGHDp29zKVxyXG4gICAgICAgIGNvbnN0IGNsZWFuID0gY25wai5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgXCJcIikudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgLy8gTyBDTlBKIGRldmUgdGVyIGV4YXRhbWVudGUgMTQgcG9zacOnw7Vlc1xyXG4gICAgICAgIGlmIChjbGVhbi5sZW5ndGggIT09IEFHUk9fTlVNQkVSUy5GT1VSVEVFTikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBow6EgcGVsbyBtZW5vcyB1bWEgbGV0cmEgZSB1bSBuw7ptZXJvXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbGVhbikgfHwgIUFncm9TdHJpbmdVdGlscy5oYXNOdW1iZXJzKGNsZWFuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhIG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGNvbnN0IHBlc29zMSA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18xO1xyXG4gICAgICAgIGNvbnN0IHBlc29zMiA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18yO1xyXG5cclxuICAgICAgICAvLyBQZWdhIG9zIDEyIHByaW1laXJvcyBjYXJhY3RlcmVzXHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGNsZWFuLnN1YnN0cmluZyhBR1JPX05VTUJFUlMuWkVSTywgQUdST19OVU1CRVJTLlRXRUxWRSk7XHJcbiAgICAgICAgY29uc3QgZHZJbmZvcm1hZG8gPSBjbGVhbi5zdWJzdHJpbmcoQUdST19OVU1CRVJTLlRXRUxWRSwgQUdST19OVU1CRVJTLkZPVVJURUVOKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsY3VsYURWID0gKHN0cjogc3RyaW5nLCBwZXNvczogbnVtYmVyW10pOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBwZXNvcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQXQoaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc2NpaVZhbHVlID0gY2hhci5jaGFyQ29kZUF0KDApIC0gQUdST19OVU1CRVJTLkZPUlRZX0VJR0hUOyAvLyBjb25mb3JtZSBkb2N1bWVudG8gKDQ4ID0gJzAnKVxyXG4gICAgICAgICAgICAgICAgc29tYSArPSBhc2NpaVZhbHVlICogcGVzb3NbaV07IC8vIGFzY2lpVmFsdWUgasOhIGNhbGN1bGFkbyBhIHBhcnRpciBkbyBlbnVtIEZPUlRZX0VJR0hUXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgY29uc3QgZGlnaXRvID0gQUdST19OVU1CRVJTLkVMRVZFTiAtIHJlc3RvO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlnaXRvID4gQUdST19OVU1CRVJTLk5JTkUgPyBBR1JPX05VTUJFUlMuWkVSTyA6IGRpZ2l0bzsgLy8gc2VndWUgbWVzbWEgcmVncmEgZG8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGR2MSA9IGNhbGN1bGFEVihiYXNlLCBwZXNvczEpO1xyXG4gICAgICAgIGNvbnN0IGR2MiA9IGNhbGN1bGFEVihiYXNlICsgZHYxLnRvU3RyaW5nKCksIHBlc29zMik7XHJcblxyXG4gICAgICAgIGNvbnN0IGR2Q2FsY3VsYWRvID0gYCR7ZHYxfSR7ZHYyfWA7XHJcblxyXG4gICAgICAgIHJldHVybiBkdkNhbGN1bGFkbyA9PT0gZHZJbmZvcm1hZG87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENhbGN1bGEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncyBlbSB0ZXJtb3MgZGUgbsO6bWVybyBkZSBjYXJhY3RlcmVzIGRpZmVyZW50ZXMgKi9cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsZW4xID0gc3RyMS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgbGVuMiA9IHN0cjIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBkaWZmID0gTWF0aC5hYnMobGVuMSAtIGxlbjIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IE1hdGgubWluKGxlbjEsIGxlbjIpOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGRpZmYrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlmZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSB0ZXJtaW5hIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGgoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5lbmRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnN0YXJ0c1dpdGgoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgY29udMOpbSBzdHIyICovXHJcbiAgICBzdGF0aWMgY29udGFpbnMoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5pbmNsdWRlcyhzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcyAqL1xyXG4gICAgc3RhdGljIHN0YXJ0c1dpdGhJZ25vcmVDYXNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgdGVybWluYSBjb20gc3RyMiwgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEludmVydGUgbyBjYXNvIGRlIGNhZGEgbGV0cmEgbmEgc3RyaW5nICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyID09PSBjaGFyLnRvVXBwZXJDYXNlKCkgPyBjaGFyLnRvTG93ZXJDYXNlKCkgOiBjaGFyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzd2FwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWFpw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWluw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIHVuY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoQUdST19OVU1CRVJTLlpFUk8pLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhIG8gbsO6bWVybyBkZSBvY29ycsOqbmNpYXMgZGUgdW1hIHN1YnN0cmluZyBkZW50cm8gZGUgdW1hIHN0cmluZyAqL1xyXG4gICAgc3RhdGljIGNvdW50TWF0Y2hlcyhzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdHJpbmcsIFwiZ1wiKTtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKHJlZ2V4KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdW1hIG3DoXNjYXJhIHNpbXBsZXMgZGEgc3RyaW5nIGZvcm5lY2lkYS5PIHBhZHLDo28gZGUgbcOhc2NhcmFzIMOpIGRlZmluaWRvIHBlbG8gZW51bSBBZ3JvU3RyaW5nTWFza3Mgb3VcclxuICAgICAqIHBvZGUgc2VyIHVtYSBzdHJpbmcgcGVyc29uYWxpemFkYSBvbmRlICc5JyByZXByZXNlbnRhIHVtIGTDrWdpdG8gYSBzZXIgbWFudGlkbyBkYSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IEFncm9TdHJpbmdNYXNrcyB8IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhbWFzaykge3JldHVybiB2YWx1ZTt9XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhcnMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hc2tDaGFycyA9IG1hc2suc3BsaXQoXCJcIik7XHJcbiAgICAgICAgbGV0IHVubWFza2VkVmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IChjOiBzdHJpbmcpID0+IC9cXGQvLnRlc3QoYyk7XHJcbiAgICAgICAgY29uc3QgaXNBbHBoYSA9IChjOiBzdHJpbmcpID0+IC9bQS1aYS16XS8udGVzdChjKTtcclxuICAgICAgICBjb25zdCBpc0FsbnVtID0gKGM6IHN0cmluZykgPT4gL1tBLVphLXowLTldLy50ZXN0KGMpO1xyXG5cclxuICAgICAgICBjb25zdCBleHRyYWN0TmV4dCA9ICh0ZXN0Rm46IChjOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgbGV0IGsgPSBqO1xyXG4gICAgICAgICAgICB3aGlsZSAoayA8IHZhbHVlQ2hhcnMubGVuZ3RoICYmICF0ZXN0Rm4odmFsdWVDaGFyc1trXSkpIHtrKys7fVxyXG4gICAgICAgICAgICBpZiAoayA8IHZhbHVlQ2hhcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHZhbHVlQ2hhcnNba107XHJcbiAgICAgICAgICAgICAgICBqID0gayArIDE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2sgPSB2YWx1ZUNoYXJzW2pdO1xyXG4gICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzTWFza0NoYXIgPSAobWFza0NoYXI6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge3JldHVybjt9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgc3dpdGNoIChtYXNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjlcIjpcclxuICAgICAgICAgICAgICAgICAgICB1bm1hc2tlZFZhbHVlICs9IGV4dHJhY3ROZXh0KGlzRGlnaXQpID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiQVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHVubWFza2VkVmFsdWUgKz0gZXh0cmFjdE5leHQoaXNBbHBoYSkgPz8gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VwYXJhdG9yKG1hc2tDaGFyLCBjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlcGFyYXRvciA9IChtYXNrQ2hhcjogc3RyaW5nLCBjdXJyZW50OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG1hc2tDaGFyKSB7XHJcbiAgICAgICAgICAgICAgICBqKys7IC8vIHNlcGFyYWRvciBwcmVzZW50ZSBubyB2YWxvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0FsbnVtKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1hc2tlZFZhbHVlICs9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2UgZm9yIHBvbnR1YcOnw6NvIGRpZmVyZW50ZSwgYXBlbmFzIGlnbm9yYSAobsOjbyBjb25zb21lIGopXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBtYXNrQ2hhciBvZiBtYXNrQ2hhcnMpIHtcclxuICAgICAgICAgICAgcHJvY2Vzc01hc2tDaGFyKG1hc2tDaGFyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBsaWNhIHVtYSBtw6FzY2FyYSBzaW1wbGVzIMOgIHN0cmluZyBmb3JuZWNpZGEuTyBwYWRyw6NvIGRlIG3DoXNjYXJhcyDDqSBkZWZpbmlkbyBwZWxvIGVudW0gQWdyb1N0cmluZ01hc2tzIG91XHJcbiAgICAgKiBwb2RlIHNlciB1bWEgc3RyaW5nIHBlcnNvbmFsaXphZGEgb25kZSAnOScgcmVwcmVzZW50YSB1bSBkw61naXRvIGEgc2VyIHN1YnN0aXR1w61kbyBwZWxvIGNhcmFjdGVyZSBjb3JyZXNwb25kZW50ZVxyXG4gICAgICogZGEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwbHlNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IEFncm9TdHJpbmdNYXNrcyB8IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVDaGFycyA9IEFncm9TdHJpbmdVdGlscy5yZW1vdmVNYXNrKHZhbHVlLCBtYXNrKS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGogPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgICAgIGogKz0gQUdST19OVU1CRVJTLk9ORTsgLy8gaW5jcmVtZW50IGV4dHJhY3RlZCBwZXIgU29uYXIgcmVjb21tZW5kYXRpb25cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdHIgIT09IFwidW5kZWZpbmVkXCIgJiYgc3RyICE9PSBudWxsICYmIHRoaXMuaXNOb3RFbXB0eShzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNJU09EYXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGUudGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzSVNPVGltZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNJU09UaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0lTT0RhdGV0aW1lKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGVUaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLFVBQVUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUkxQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBNER4QixvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBbUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFP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WUFBWSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7SUFDaEIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7Q0FDbkIsQ0FBQztBQUNGLHFGQUFxRjtBQUM3RCx5Q0FBeUIsR0FBYTtJQUMxRCxZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztDQUNuQixDQUFDO0FBQ3NCLHlDQUF5QixHQUFhO0lBQzFELFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0NBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBR1JPX05VTUJFUlMsIEFncm9TdHJpbmdNYXNrcyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgb3BlcmHDp8O1ZXMgZGUgc3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFncm9TdHJpbmdVdGlscyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzI6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TSVgsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZJVkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZPVVIsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRIUkVFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5UV08sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLk5JTkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkVJR0hULFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TRVZFTixcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgXTtcclxuICAgIC8vIFBlc29zIHV0aWxpemFkb3MgcGFyYSBjw6FsY3VsbyBkZSBkw61naXRvcyB2ZXJpZmljYWRvcmVzIGRvIENOUEogYWxmYW51bcOpcmljbyAoMjAyNilcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENOUEpfQUxGQU5VTUVSSUNPX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX0FMRkFOVU1FUklDT19QRVNPU18yOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICAvKiogUmV0b3JuYSB0cnVlIHNlIGEgc3RyaW5nIGNvbnTDqW0gYXBlbmFzIGxldHJhcyAqL1xyXG4gICAgc3RhdGljIGlzT25seUxldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9eW0EtWmEtel0rJC8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBwZWxvIG1lbm9zIHVtYSBsZXRyYSAqL1xyXG4gICAgc3RhdGljIGhhc0xldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9bQS1aYS16XS8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBhcGVuYXMgbsO6bWVyb3MgKi9cclxuICAgIHN0YXRpYyBpc09ubHlOdW1iZXJzKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAvXlxcZCskLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyBjb250w6ltIHBlbG8gbWVub3MgdW0gbsO6bWVybyAqL1xyXG4gICAgc3RhdGljIGhhc051bWJlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9cXGQvLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIGVzdMOhIHZhemlhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHN0ciAmJiBBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoc3RyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyPy50cmltKCk/Lmxlbmd0aCA9PT0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzdHIgJiYgQWdyb1N0cmluZ1V0aWxzLmlzU3RyaW5nKHN0cikpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNFbXB0eShzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgQUdST19SRUdFWC5vbmx5QmxhbmtTcGFjZXMudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWZXJpZmljYSBzZSBhIHN0cmluZyBuw6NvIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNOb3RCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNCbGFuayhzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVzcGHDp29zIGVtIGJyYW5jbyBkbyBpbsOtY2lvIGUgZG8gZmltIGRhIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRyaW1Ub051bGwoc3RyOiBOdWxsYWJsZVN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmltbWVkID0gc3RyLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gdHJpbW1lZCA9PT0gXCJcIiA/IG51bGwgOiB0cmltbWVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgaWdub3JhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHNJZ25vcmVDYXNlKHN0cjE6IE51bGxhYmxlU3RyaW5nLCBzdHIyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxPy50b0xvd2VyQ2FzZSgpID09PSBzdHIyPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgY29uc2lkZXJhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHMoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEgPT09IHN0cjI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgw6kgdW1hIHN0cmluZyB2w6FsaWRhIChuw6NvIG51bGwsIG7Do28gdW5kZWZpbmVkLCBuw6NvIHZhemlhKSAqL1xyXG4gICAgc3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZURlY2ltYWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZURlY2ltYWwudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1ppcENvZGUoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC56aXBDb2RlLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNOdW1iZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gW0FHUk9fUkVHRVguaXNOdW1iZXIudGVzdChzdHIpLCBBR1JPX1JFR0VYLmlzRGVjaW1hbC50ZXN0KHN0cildLmluY2x1ZGVzKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSBBR1JPX05VTUJFUlMuRUxFVkVOIHx8IC9eKFxcZClcXDErJC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGNWZXJpZmllciA9IChjcGY6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3VtID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldLCBBR1JPX05VTUJFUlMuVEVOKSAqIChsZW5ndGggKyBBR1JPX05VTUJFUlMuT05FIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY1ZlcmlmaWVyKGNwZiwgQUdST19OVU1CRVJTLk5JTkUpO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0MiA9IGNhbGNWZXJpZmllcihjcGYsIEFHUk9fTlVNQkVSUy5URU4pO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkaWdpdDEgPT09IHBhcnNlSW50KGNwZltBR1JPX05VTUJFUlMuTklORV0sIEFHUk9fTlVNQkVSUy5URU4pICYmIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmW0FHUk9fTlVNQkVSUy5URU5dLCBBR1JPX05VTUJFUlMuVEVOKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3RhIGF1dG9tYXRpY2FtZW50ZSBzZSDDqSBDTlBKIGFudGlnbyBvdSBub3ZvIGZvcm1hdG8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFjbnBqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY25waiA9IGNucGoudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyBTZSBjb250w6ltIGxldHJhcyDihpIgdmFsaWRhIGZvcm1hdG8gYWxmYW51bcOpcmljb1xyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ05QSkFsZmFudW1lcmljbyhjbnBqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhc28gY29udHLDoXJpbywgdmFsaWRhIGNvbW8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIHJldHVybiBBZ3JvU3RyaW5nVXRpbHMudmFsaWRhdGVDTlBKQW50aWdvKGNucGopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIG8gQ05QSiB0cmFkaWNpb25hbCAoc29tZW50ZSBuw7ptZXJvcylcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDTlBKQW50aWdvKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNPbmx5TnVtYmVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gQUdST19OVU1CRVJTLkZPVVJURUVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5UV0VMVkU7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpLCBBR1JPX05VTUJFUlMuVEVOKSAqIEFncm9TdHJpbmdVdGlscy5DTlBKX1RSQURJQ0lPTkFMX1BFU09TXzFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0bzEgPSByZXN0byA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN0bztcclxuXHJcbiAgICAgICAgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5USElSVEVFTjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSksIEFHUk9fTlVNQkVSUy5URU4pICogQWdyb1N0cmluZ1V0aWxzLkNOUEpfVFJBRElDSU9OQUxfUEVTT1NfMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBjb25zdCBkaWdpdG8yID0gcmVzdG8gPCBBR1JPX05VTUJFUlMuVFdPID8gQUdST19OVU1CRVJTLlpFUk8gOiBBR1JPX05VTUJFUlMuRUxFVkVOIC0gcmVzdG87XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHBhcnNlSW50KGNucGouY2hhckF0KEFHUk9fTlVNQkVSUy5UV0VMVkUpLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMSAmJlxyXG4gICAgICAgICAgICBwYXJzZUludChjbnBqLmNoYXJBdChBR1JPX05VTUJFUlMuVEhJUlRFRU4pLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgbyBDTlBKIGVtIGZvcm1hdG8gYWxmYW51bcOpcmljbyAocGFkcsOjbyAyMDI2KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUNOUEpBbGZhbnVtZXJpY28oY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoY25waikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGNhcmFjdGVyZXMgZXNwZWNpYWlzIChwb250b3MsIGJhcnJhLCB0cmHDp28sIGVzcGHDp29zKVxyXG4gICAgICAgIGNvbnN0IGNsZWFuID0gY25wai5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgXCJcIikudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgLy8gTyBDTlBKIGRldmUgdGVyIGV4YXRhbWVudGUgMTQgcG9zacOnw7Vlc1xyXG4gICAgICAgIGlmIChjbGVhbi5sZW5ndGggIT09IEFHUk9fTlVNQkVSUy5GT1VSVEVFTikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBow6EgcGVsbyBtZW5vcyB1bWEgbGV0cmEgZSB1bSBuw7ptZXJvXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbGVhbikgfHwgIUFncm9TdHJpbmdVdGlscy5oYXNOdW1iZXJzKGNsZWFuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhIG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGNvbnN0IHBlc29zMSA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18xO1xyXG4gICAgICAgIGNvbnN0IHBlc29zMiA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18yO1xyXG5cclxuICAgICAgICAvLyBQZWdhIG9zIDEyIHByaW1laXJvcyBjYXJhY3RlcmVzXHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGNsZWFuLnN1YnN0cmluZyhBR1JPX05VTUJFUlMuWkVSTywgQUdST19OVU1CRVJTLlRXRUxWRSk7XHJcbiAgICAgICAgY29uc3QgZHZJbmZvcm1hZG8gPSBjbGVhbi5zdWJzdHJpbmcoQUdST19OVU1CRVJTLlRXRUxWRSwgQUdST19OVU1CRVJTLkZPVVJURUVOKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsY3VsYURWID0gKHN0cjogc3RyaW5nLCBwZXNvczogbnVtYmVyW10pOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBwZXNvcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQXQoaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc2NpaVZhbHVlID0gY2hhci5jaGFyQ29kZUF0KDApIC0gQUdST19OVU1CRVJTLkZPUlRZX0VJR0hUOyAvLyBjb25mb3JtZSBkb2N1bWVudG8gKDQ4ID0gJzAnKVxyXG4gICAgICAgICAgICAgICAgc29tYSArPSBhc2NpaVZhbHVlICogcGVzb3NbaV07IC8vIGFzY2lpVmFsdWUgasOhIGNhbGN1bGFkbyBhIHBhcnRpciBkbyBlbnVtIEZPUlRZX0VJR0hUXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgY29uc3QgZGlnaXRvID0gQUdST19OVU1CRVJTLkVMRVZFTiAtIHJlc3RvO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlnaXRvID4gQUdST19OVU1CRVJTLk5JTkUgPyBBR1JPX05VTUJFUlMuWkVSTyA6IGRpZ2l0bzsgLy8gc2VndWUgbWVzbWEgcmVncmEgZG8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGR2MSA9IGNhbGN1bGFEVihiYXNlLCBwZXNvczEpO1xyXG4gICAgICAgIGNvbnN0IGR2MiA9IGNhbGN1bGFEVihiYXNlICsgZHYxLnRvU3RyaW5nKCksIHBlc29zMik7XHJcblxyXG4gICAgICAgIGNvbnN0IGR2Q2FsY3VsYWRvID0gYCR7ZHYxfSR7ZHYyfWA7XHJcblxyXG4gICAgICAgIHJldHVybiBkdkNhbGN1bGFkbyA9PT0gZHZJbmZvcm1hZG87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENhbGN1bGEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncyBlbSB0ZXJtb3MgZGUgbsO6bWVybyBkZSBjYXJhY3RlcmVzIGRpZmVyZW50ZXMgKi9cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsZW4xID0gc3RyMS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgbGVuMiA9IHN0cjIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBkaWZmID0gTWF0aC5hYnMobGVuMSAtIGxlbjIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IE1hdGgubWluKGxlbjEsIGxlbjIpOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGRpZmYrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlmZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSB0ZXJtaW5hIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGgoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5lbmRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnN0YXJ0c1dpdGgoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgY29udMOpbSBzdHIyICovXHJcbiAgICBzdGF0aWMgY29udGFpbnMoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5pbmNsdWRlcyhzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcyAqL1xyXG4gICAgc3RhdGljIHN0YXJ0c1dpdGhJZ25vcmVDYXNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgdGVybWluYSBjb20gc3RyMiwgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEludmVydGUgbyBjYXNvIGRlIGNhZGEgbGV0cmEgbmEgc3RyaW5nICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyID09PSBjaGFyLnRvVXBwZXJDYXNlKCkgPyBjaGFyLnRvTG93ZXJDYXNlKCkgOiBjaGFyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzd2FwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWFpw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWluw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIHVuY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoQUdST19OVU1CRVJTLlpFUk8pLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhIG8gbsO6bWVybyBkZSBvY29ycsOqbmNpYXMgZGUgdW1hIHN1YnN0cmluZyBkZW50cm8gZGUgdW1hIHN0cmluZyAqL1xyXG4gICAgc3RhdGljIGNvdW50TWF0Y2hlcyhzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdHJpbmcsIFwiZ1wiKTtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKHJlZ2V4KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcGxpY2EgdW1hIG3DoXNjYXJhIHNpbXBsZXMgw6Agc3RyaW5nIGZvcm5lY2lkYS5PIHBhZHLDo28gZGUgbcOhc2NhcmFzIMOpIGRlZmluaWRvIHBlbG8gZW51bSBBZ3JvU3RyaW5nTWFza3Mgb3VcclxuICAgICAqIHBvZGUgc2VyIHVtYSBzdHJpbmcgcGVyc29uYWxpemFkYSBvbmRlICc5JyByZXByZXNlbnRhIHVtIGTDrWdpdG8gYSBzZXIgc3Vic3RpdHXDrWRvIHBlbG8gY2FyYWN0ZXJlIGNvcnJlc3BvbmRlbnRlXHJcbiAgICAgKiBkYSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBseU1hc2sodmFsdWU6IHN0cmluZywgbWFzazogQWdyb1N0cmluZ01hc2tzIHwgc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYXJzID0gdmFsdWUucmVwbGFjZSgvW15BLVphLXowLTldL2csIFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGogPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgICAgIGogKz0gQUdST19OVU1CRVJTLk9ORTsgLy8gaW5jcmVtZW50IGV4dHJhY3RlZCBwZXIgU29uYXIgcmVjb21tZW5kYXRpb25cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdHIgIT09IFwidW5kZWZpbmVkXCIgJiYgc3RyICE9PSBudWxsICYmIHRoaXMuaXNOb3RFbXB0eShzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNJU09EYXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGUudGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzSVNPVGltZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNJU09UaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0lTT0RhdGV0aW1lKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGVUaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { UnitOfMeasurement } from "../enums/unit-measurement.enum";
|
|
2
|
+
import { AGRO_NUMBERS } from "../enums";
|
|
3
|
+
const TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE = 273.15;
|
|
4
|
+
export class AgroUnitConverter {
|
|
5
|
+
constructor() {
|
|
6
|
+
// 🔹 Comprimento
|
|
7
|
+
this.LENGTH_UNITS = [
|
|
8
|
+
UnitOfMeasurement.METRO,
|
|
9
|
+
UnitOfMeasurement.CENTIMETRO,
|
|
10
|
+
UnitOfMeasurement.MILIMETRO,
|
|
11
|
+
UnitOfMeasurement.QUILOMETRO,
|
|
12
|
+
UnitOfMeasurement.POLEGADA,
|
|
13
|
+
UnitOfMeasurement.PE,
|
|
14
|
+
];
|
|
15
|
+
// 🔹 Massa
|
|
16
|
+
this.MASS_UNITS = [
|
|
17
|
+
UnitOfMeasurement.GRAMA,
|
|
18
|
+
UnitOfMeasurement.QUILOGRAMA,
|
|
19
|
+
UnitOfMeasurement.TONELADA,
|
|
20
|
+
UnitOfMeasurement.LIBRA,
|
|
21
|
+
UnitOfMeasurement.SACA,
|
|
22
|
+
];
|
|
23
|
+
// 🔹 Área
|
|
24
|
+
this.AREA_UNITS = [
|
|
25
|
+
UnitOfMeasurement.METRO_QUADRADO,
|
|
26
|
+
UnitOfMeasurement.CENTIMETRO_QUADRADO,
|
|
27
|
+
UnitOfMeasurement.HECTARE,
|
|
28
|
+
UnitOfMeasurement.ALQUEIRE_50x50,
|
|
29
|
+
UnitOfMeasurement.ALQUEIRE_50x75,
|
|
30
|
+
UnitOfMeasurement.ALQUEIRE_DO_NORTE,
|
|
31
|
+
UnitOfMeasurement.ALQUEIRE_75x80,
|
|
32
|
+
UnitOfMeasurement.ALQUEIRE_79x79,
|
|
33
|
+
UnitOfMeasurement.ALQUEIRE_80x80,
|
|
34
|
+
UnitOfMeasurement.ALQUEIRE_75x100,
|
|
35
|
+
UnitOfMeasurement.ALQUEIRE_100x150,
|
|
36
|
+
UnitOfMeasurement.ALQUEIRE_BAIANO,
|
|
37
|
+
UnitOfMeasurement.ALQUEIRAO,
|
|
38
|
+
UnitOfMeasurement.ALQUEIRE_PAULISTA,
|
|
39
|
+
UnitOfMeasurement.ALQUEIRE_MINEIRO,
|
|
40
|
+
];
|
|
41
|
+
// 🔹 Volume
|
|
42
|
+
this.VOLUME_UNITS = [UnitOfMeasurement.LITRO, UnitOfMeasurement.MILILITRO, UnitOfMeasurement.METRO_CUBICO];
|
|
43
|
+
// 🔹 Tempo
|
|
44
|
+
this.TIME_UNITS = [
|
|
45
|
+
UnitOfMeasurement.SEGUNDO,
|
|
46
|
+
UnitOfMeasurement.MINUTO,
|
|
47
|
+
UnitOfMeasurement.HORA,
|
|
48
|
+
UnitOfMeasurement.DIA,
|
|
49
|
+
];
|
|
50
|
+
// 🔹 Temperatura
|
|
51
|
+
this.TEMPERATURE_UNITS = [UnitOfMeasurement.CELSIUS, UnitOfMeasurement.FAHRENHEIT, UnitOfMeasurement.KELVIN];
|
|
52
|
+
// 🔹 Energia
|
|
53
|
+
this.ENERGY_UNITS = [UnitOfMeasurement.JOULE, UnitOfMeasurement.CALORIA, UnitOfMeasurement.QUILOWATT_HORA];
|
|
54
|
+
// 🔹 Eletricidade
|
|
55
|
+
this.ELECTRICITY_UNITS = [UnitOfMeasurement.VOLT, UnitOfMeasurement.AMPERE, UnitOfMeasurement.WATT];
|
|
56
|
+
// 🔹 Dados digitais
|
|
57
|
+
this.DATA_UNITS = [
|
|
58
|
+
UnitOfMeasurement.BYTE,
|
|
59
|
+
UnitOfMeasurement.KILOBYTE,
|
|
60
|
+
UnitOfMeasurement.MEGABYTE,
|
|
61
|
+
UnitOfMeasurement.GIGABYTE,
|
|
62
|
+
UnitOfMeasurement.TERABYTE,
|
|
63
|
+
];
|
|
64
|
+
this.conversionUnits = [
|
|
65
|
+
{
|
|
66
|
+
units: this.LENGTH_UNITS,
|
|
67
|
+
factorTable: {
|
|
68
|
+
[UnitOfMeasurement.METRO]: AGRO_NUMBERS.ONE,
|
|
69
|
+
[UnitOfMeasurement.CENTIMETRO]: 0.01,
|
|
70
|
+
[UnitOfMeasurement.MILIMETRO]: 0.001,
|
|
71
|
+
[UnitOfMeasurement.QUILOMETRO]: AGRO_NUMBERS.ONETHOUSAND,
|
|
72
|
+
[UnitOfMeasurement.POLEGADA]: 0.0254,
|
|
73
|
+
[UnitOfMeasurement.PE]: 0.3048,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
units: this.MASS_UNITS,
|
|
78
|
+
factorTable: {
|
|
79
|
+
[UnitOfMeasurement.GRAMA]: 0.001,
|
|
80
|
+
[UnitOfMeasurement.QUILOGRAMA]: AGRO_NUMBERS.ONE,
|
|
81
|
+
[UnitOfMeasurement.TONELADA]: AGRO_NUMBERS.ONETHOUSAND,
|
|
82
|
+
[UnitOfMeasurement.LIBRA]: 0.453592,
|
|
83
|
+
[UnitOfMeasurement.SACA]: 60,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
units: this.AREA_UNITS,
|
|
88
|
+
factorTable: {
|
|
89
|
+
[UnitOfMeasurement.METRO_QUADRADO]: AGRO_NUMBERS.ONE,
|
|
90
|
+
[UnitOfMeasurement.CENTIMETRO_QUADRADO]: 0.0001,
|
|
91
|
+
[UnitOfMeasurement.HECTARE]: 10000,
|
|
92
|
+
[UnitOfMeasurement.ALQUEIRE_50x50]: 12100,
|
|
93
|
+
[UnitOfMeasurement.ALQUEIRE_50x75]: 18200,
|
|
94
|
+
[UnitOfMeasurement.ALQUEIRE_DO_NORTE]: 27200,
|
|
95
|
+
[UnitOfMeasurement.ALQUEIRE_75x80]: 29000,
|
|
96
|
+
[UnitOfMeasurement.ALQUEIRE_79x79]: 30200,
|
|
97
|
+
[UnitOfMeasurement.ALQUEIRE_80x80]: 31900,
|
|
98
|
+
[UnitOfMeasurement.ALQUEIRE_75x100]: 36300,
|
|
99
|
+
[UnitOfMeasurement.ALQUEIRE_100x150]: 72600,
|
|
100
|
+
[UnitOfMeasurement.ALQUEIRE_BAIANO]: 96800,
|
|
101
|
+
[UnitOfMeasurement.ALQUEIRAO]: 193600,
|
|
102
|
+
[UnitOfMeasurement.ALQUEIRE_PAULISTA]: 24200,
|
|
103
|
+
[UnitOfMeasurement.ALQUEIRE_MINEIRO]: 48400,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
units: this.VOLUME_UNITS,
|
|
108
|
+
factorTable: {
|
|
109
|
+
[UnitOfMeasurement.LITRO]: AGRO_NUMBERS.ONE,
|
|
110
|
+
[UnitOfMeasurement.MILILITRO]: 0.001,
|
|
111
|
+
[UnitOfMeasurement.METRO_CUBICO]: AGRO_NUMBERS.ONETHOUSAND,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
units: this.TIME_UNITS,
|
|
116
|
+
factorTable: {
|
|
117
|
+
[UnitOfMeasurement.SEGUNDO]: AGRO_NUMBERS.ONE,
|
|
118
|
+
[UnitOfMeasurement.MINUTO]: AGRO_NUMBERS.SIXTY_,
|
|
119
|
+
[UnitOfMeasurement.HORA]: 3600,
|
|
120
|
+
[UnitOfMeasurement.DIA]: 86400,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
units: this.ENERGY_UNITS,
|
|
125
|
+
factorTable: {
|
|
126
|
+
[UnitOfMeasurement.JOULE]: AGRO_NUMBERS.ONE,
|
|
127
|
+
[UnitOfMeasurement.CALORIA]: 4.184,
|
|
128
|
+
[UnitOfMeasurement.QUILOWATT_HORA]: 3600000,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
units: this.DATA_UNITS,
|
|
133
|
+
factorTable: {
|
|
134
|
+
[UnitOfMeasurement.BYTE]: AGRO_NUMBERS.ONE,
|
|
135
|
+
[UnitOfMeasurement.KILOBYTE]: 1024,
|
|
136
|
+
[UnitOfMeasurement.MEGABYTE]: Math.pow(1024, AGRO_NUMBERS.TWO),
|
|
137
|
+
[UnitOfMeasurement.GIGABYTE]: Math.pow(1024, AGRO_NUMBERS.THREE),
|
|
138
|
+
[UnitOfMeasurement.TERABYTE]: Math.pow(1024, AGRO_NUMBERS.FOUR),
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
// 🔹 Métodos de conversão
|
|
144
|
+
convertTemperatureUnit(valor, de, para) {
|
|
145
|
+
if (de === para) {
|
|
146
|
+
return valor;
|
|
147
|
+
}
|
|
148
|
+
let celsius;
|
|
149
|
+
switch (de) {
|
|
150
|
+
case UnitOfMeasurement.CELSIUS:
|
|
151
|
+
celsius = valor;
|
|
152
|
+
break;
|
|
153
|
+
case UnitOfMeasurement.FAHRENHEIT:
|
|
154
|
+
celsius = ((valor - AGRO_NUMBERS.THIRTY_TWO) * AGRO_NUMBERS.FIVE) / AGRO_NUMBERS.NINE;
|
|
155
|
+
break;
|
|
156
|
+
case UnitOfMeasurement.KELVIN:
|
|
157
|
+
celsius = valor - TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE;
|
|
158
|
+
break;
|
|
159
|
+
default:
|
|
160
|
+
throw new Error("Unidade inválida");
|
|
161
|
+
}
|
|
162
|
+
switch (para) {
|
|
163
|
+
case UnitOfMeasurement.CELSIUS:
|
|
164
|
+
return celsius;
|
|
165
|
+
case UnitOfMeasurement.FAHRENHEIT:
|
|
166
|
+
return (celsius * AGRO_NUMBERS.NINE) / AGRO_NUMBERS.FIVE + AGRO_NUMBERS.THIRTY_TWO;
|
|
167
|
+
case UnitOfMeasurement.KELVIN:
|
|
168
|
+
return celsius + TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE;
|
|
169
|
+
default:
|
|
170
|
+
throw new Error("Unidade inválida");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
isTemperatureUnit(unit) {
|
|
174
|
+
console.log(this.TEMPERATURE_UNITS.includes(unit));
|
|
175
|
+
return this.TEMPERATURE_UNITS.includes(unit);
|
|
176
|
+
}
|
|
177
|
+
convertScalableUnits(valor, from, to) {
|
|
178
|
+
var _a;
|
|
179
|
+
if (from === to) {
|
|
180
|
+
return valor;
|
|
181
|
+
}
|
|
182
|
+
if (this.isTemperatureUnit(from) || this.isTemperatureUnit(to)) {
|
|
183
|
+
return this.convertTemperatureUnit(valor, from, to);
|
|
184
|
+
}
|
|
185
|
+
const unitCategory = this.conversionUnits.find((u) => u.units.includes(from));
|
|
186
|
+
if (!((_a = unitCategory === null || unitCategory === void 0 ? void 0 : unitCategory.units) === null || _a === void 0 ? void 0 : _a.includes(to))) {
|
|
187
|
+
throw new Error(`Não é possível converter de ${from} para ${to}: categorias diferentes ou unidade não escalável.`);
|
|
188
|
+
}
|
|
189
|
+
const fatorDe = unitCategory.factorTable[from];
|
|
190
|
+
const fatorPara = unitCategory.factorTable[to];
|
|
191
|
+
const emBase = valor * fatorDe;
|
|
192
|
+
return emBase / fatorPara;
|
|
193
|
+
}
|
|
194
|
+
convertLitersPerArea(valor, from, to) {
|
|
195
|
+
var _a;
|
|
196
|
+
const areaCategory = this.conversionUnits.find((u) => u.units.includes(from));
|
|
197
|
+
if (!((_a = areaCategory === null || areaCategory === void 0 ? void 0 : areaCategory.units) === null || _a === void 0 ? void 0 : _a.includes(to))) {
|
|
198
|
+
throw new Error(`Unidade de área inválida: ${from} ou ${to}`);
|
|
199
|
+
}
|
|
200
|
+
const fatorFrom = areaCategory.factorTable[from];
|
|
201
|
+
const fatorTo = areaCategory.factorTable[to];
|
|
202
|
+
return (valor / fatorFrom) * fatorTo;
|
|
203
|
+
}
|
|
204
|
+
convertKgPerArea(valor, from, to) {
|
|
205
|
+
return this.convertLitersPerArea(valor, from, to);
|
|
206
|
+
}
|
|
207
|
+
convertBushelToKg(bushel, factor) {
|
|
208
|
+
if (factor <= 0) {
|
|
209
|
+
throw new Error("Fator de conversão inválido");
|
|
210
|
+
}
|
|
211
|
+
return bushel * factor;
|
|
212
|
+
}
|
|
213
|
+
convertKgToBushel(kg, factor) {
|
|
214
|
+
if (factor <= 0) {
|
|
215
|
+
throw new Error("Fator de conversão inválido");
|
|
216
|
+
}
|
|
217
|
+
return kg / factor;
|
|
218
|
+
}
|
|
219
|
+
calculateAreaFromVolume(totalVolume, rate, rateUnit, areaUnit) {
|
|
220
|
+
if (rate <= 0) {
|
|
221
|
+
throw new Error("Taxa de aplicação inválida");
|
|
222
|
+
}
|
|
223
|
+
const rateInDesiredUnit = this.convertLitersPerArea(rate, rateUnit, areaUnit);
|
|
224
|
+
return totalVolume / rateInDesiredUnit;
|
|
225
|
+
}
|
|
226
|
+
convertElectricityUnit(valor, voltage, from, to) {
|
|
227
|
+
if (from === to) {
|
|
228
|
+
return valor;
|
|
229
|
+
}
|
|
230
|
+
const toWatt = (v, unit) => {
|
|
231
|
+
switch (unit) {
|
|
232
|
+
case UnitOfMeasurement.VOLT:
|
|
233
|
+
case UnitOfMeasurement.AMPERE:
|
|
234
|
+
return voltage * v; // P = V * I
|
|
235
|
+
case UnitOfMeasurement.WATT:
|
|
236
|
+
return v;
|
|
237
|
+
default:
|
|
238
|
+
throw new Error(`A unidade ${unit} não é escalável diretamente.`);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const fromWatt = (w, unit) => {
|
|
242
|
+
switch (unit) {
|
|
243
|
+
case UnitOfMeasurement.VOLT:
|
|
244
|
+
case UnitOfMeasurement.AMPERE:
|
|
245
|
+
return w / voltage;
|
|
246
|
+
case UnitOfMeasurement.WATT:
|
|
247
|
+
return w;
|
|
248
|
+
default:
|
|
249
|
+
throw new Error(`A unidade ${unit} não é escalável diretamente.`);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
const wattValue = toWatt(valor, from);
|
|
253
|
+
return fromWatt(wattValue, to);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby11bml0LWNvbnZlcnRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tdW5pdC1jb252ZXJ0ZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQU94QyxNQUFNLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQztBQUV4RCxNQUFNLE9BQU8saUJBQWlCO0lBc0UxQjtRQXJFQSxpQkFBaUI7UUFDUixpQkFBWSxHQUF3QjtZQUN6QyxpQkFBaUIsQ0FBQyxLQUFLO1lBQ3ZCLGlCQUFpQixDQUFDLFVBQVU7WUFDNUIsaUJBQWlCLENBQUMsU0FBUztZQUMzQixpQkFBaUIsQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixDQUFDLFFBQVE7WUFDMUIsaUJBQWlCLENBQUMsRUFBRTtTQUN2QixDQUFDO1FBRUYsV0FBVztRQUNGLGVBQVUsR0FBd0I7WUFDdkMsaUJBQWlCLENBQUMsS0FBSztZQUN2QixpQkFBaUIsQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixDQUFDLFFBQVE7WUFDMUIsaUJBQWlCLENBQUMsS0FBSztZQUN2QixpQkFBaUIsQ0FBQyxJQUFJO1NBQ3pCLENBQUM7UUFFRixVQUFVO1FBQ0QsZUFBVSxHQUF3QjtZQUN2QyxpQkFBaUIsQ0FBQyxjQUFjO1lBQ2hDLGlCQUFpQixDQUFDLG1CQUFtQjtZQUNyQyxpQkFBaUIsQ0FBQyxPQUFPO1lBQ3pCLGlCQUFpQixDQUFDLGNBQWM7WUFDaEMsaUJBQWlCLENBQUMsY0FBYztZQUNoQyxpQkFBaUIsQ0FBQyxpQkFBaUI7WUFDbkMsaUJBQWlCLENBQUMsY0FBYztZQUNoQyxpQkFBaUIsQ0FBQyxjQUFjO1lBQ2hDLGlCQUFpQixDQUFDLGNBQWM7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QUUsSUFBdUIsRUFBRSxFQUFxQjtRQUNqRyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDYixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQXVCLEVBQVUsRUFBRTtZQUMxRCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDNUIsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO29CQUN6QixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUNwQyxLQUFLLGlCQUFpQixDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO2dCQUNiO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLCtCQUErQixDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUF1QixFQUFVLEVBQUU7WUFDNUQsUUFBUSxJQUFJLEVBQUU7Z0JBQ1YsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLEtBQUssaUJBQWlCLENBQUMsTUFBTTtvQkFDekIsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixLQUFLLGlCQUFpQixDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO2dCQUNiO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLCtCQUErQixDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVbml0T2ZNZWFzdXJlbWVudCB9IGZyb20gXCIuLi9lbnVtcy91bml0LW1lYXN1cmVtZW50LmVudW1cIjtcclxuaW1wb3J0IHsgQUdST19OVU1CRVJTIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG50eXBlIENvbnZlcnNpb25Vbml0ID0ge1xyXG4gICAgdW5pdHM6IFVuaXRPZk1lYXN1cmVtZW50W107XHJcbiAgICBmYWN0b3JUYWJsZTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcclxufTtcclxuXHJcbmNvbnN0IFRXT19IVU5EUkVEX1NFVkVOVFlfVEhSRUVfUE9JTlRfT05FX0ZJVkUgPSAyNzMuMTU7XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb1VuaXRDb252ZXJ0ZXIge1xyXG4gICAgLy8g8J+UuSBDb21wcmltZW50b1xyXG4gICAgcmVhZG9ubHkgTEVOR1RIX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FVFJPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuTUlMSU1FVFJPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlFVSUxPTUVUUk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUE9MRUdBREEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUEUsXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIPCflLkgTWFzc2FcclxuICAgIHJlYWRvbmx5IE1BU1NfVU5JVFM6IFVuaXRPZk1lYXN1cmVtZW50W10gPSBbXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuR1JBTUEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUVVJTE9HUkFNQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5UT05FTEFEQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5MSUJSQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5TQUNBLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyDwn5S5IMOBcmVhXHJcbiAgICByZWFkb25seSBBUkVBX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FVFJPX1FVQURSQURPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk9fUVVBRFJBRE8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuSEVDVEFSRSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV81MHg1MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV81MHg3NSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV9ET19OT1JURSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83NXg4MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83OXg3OSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV84MHg4MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83NXgxMDAsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfMTAweDE1MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV9CQUlBTk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkFPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFX1BBVUxJU1RBLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFX01JTkVJUk8sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIPCflLkgVm9sdW1lXHJcbiAgICByZWFkb25seSBWT0xVTUVfVU5JVFM6IFVuaXRPZk1lYXN1cmVtZW50W10gPSBbVW5pdE9mTWVhc3VyZW1lbnQuTElUUk8sIFVuaXRPZk1lYXN1cmVtZW50Lk1JTElMSVRSTywgVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9fQ1VCSUNPXTtcclxuXHJcbiAgICAvLyDwn5S5IFRlbXBvXHJcbiAgICByZWFkb25seSBUSU1FX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlNFR1VORE8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuTUlOVVRPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkhPUkEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuRElBLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyDwn5S5IFRlbXBlcmF0dXJhXHJcbiAgICByZWFkb25seSBURU1QRVJBVFVSRV9VTklUUzogVW5pdE9mTWVhc3VyZW1lbnRbXSA9IFtVbml0T2ZNZWFzdXJlbWVudC5DRUxTSVVTLCBVbml0T2ZNZWFzdXJlbWVudC5GQUhSRU5IRUlULCBVbml0T2ZNZWFzdXJlbWVudC5LRUxWSU5dO1xyXG5cclxuICAgIC8vIPCflLkgRW5lcmdpYVxyXG4gICAgcmVhZG9ubHkgRU5FUkdZX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1VuaXRPZk1lYXN1cmVtZW50LkpPVUxFLCBVbml0T2ZNZWFzdXJlbWVudC5DQUxPUklBLCBVbml0T2ZNZWFzdXJlbWVudC5RVUlMT1dBVFRfSE9SQV07XHJcblxyXG4gICAgLy8g8J+UuSBFbGV0cmljaWRhZGVcclxuICAgIHJlYWRvbmx5IEVMRUNUUklDSVRZX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1VuaXRPZk1lYXN1cmVtZW50LlZPTFQsIFVuaXRPZk1lYXN1cmVtZW50LkFNUEVSRSwgVW5pdE9mTWVhc3VyZW1lbnQuV0FUVF07XHJcblxyXG4gICAgLy8g8J+UuSBEYWRvcyBkaWdpdGFpc1xyXG4gICAgcmVhZG9ubHkgREFUQV9VTklUUzogVW5pdE9mTWVhc3VyZW1lbnRbXSA9IFtcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5CWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LktJTE9CWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FR0FCWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkdJR0FCWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlRFUkFCWVRFLFxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnNpb25Vbml0czogQ29udmVyc2lvblVuaXRbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbnZlcnNpb25Vbml0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuTEVOR1RIX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5DRU5USU1FVFJPXTogMC4wMSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUlMSU1FVFJPXTogMC4wMDEsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlFVSUxPTUVUUk9dOiBBR1JPX05VTUJFUlMuT05FVEhPVVNBTkQsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlBPTEVHQURBXTogMC4wMjU0LFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5QRV06IDAuMzA0OCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXRzOiB0aGlzLk1BU1NfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5HUkFNQV06IDAuMDAxLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5RVUlMT0dSQU1BXTogQUdST19OVU1CRVJTLk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuVE9ORUxBREFdOiBBR1JPX05VTUJFUlMuT05FVEhPVVNBTkQsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkxJQlJBXTogMC40NTM1OTIsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlNBQ0FdOiA2MCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXRzOiB0aGlzLkFSRUFfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NRVRST19RVUFEUkFET106IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk9fUVVBRFJBRE9dOiAwLjAwMDEsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkhFQ1RBUkVdOiAxMDAwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNTB4NTBdOiAxMjEwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNTB4NzVdOiAxODIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfRE9fTk9SVEVdOiAyNzIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzV4ODBdOiAyOTAwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzl4NzldOiAzMDIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfODB4ODBdOiAzMTkwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzV4MTAwXTogMzYzMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFXzEwMHgxNTBdOiA3MjYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfQkFJQU5PXTogOTY4MDAsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJBT106IDE5MzYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfUEFVTElTVEFdOiAyNDIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfTUlORUlST106IDQ4NDAwLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuVk9MVU1FX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTElUUk9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NSUxJTElUUk9dOiAwLjAwMSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9fQ1VCSUNPXTogQUdST19OVU1CRVJTLk9ORVRIT1VTQU5ELFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuVElNRV9VTklUUyxcclxuICAgICAgICAgICAgICAgIGZhY3RvclRhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlNFR1VORE9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NSU5VVE9dOiBBR1JPX05VTUJFUlMuU0lYVFlfLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5IT1JBXTogMzYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuRElBXTogODY0MDAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0czogdGhpcy5FTkVSR1lfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5KT1VMRV06IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkNBTE9SSUFdOiA0LjE4NCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuUVVJTE9XQVRUX0hPUkFdOiAzXzYwMF8wMDAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0czogdGhpcy5EQVRBX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQllURV06IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LktJTE9CWVRFXTogMTAyNCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVHQUJZVEVdOiAxMDI0ICoqIEFHUk9fTlVNQkVSUy5UV08sXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkdJR0FCWVRFXTogMTAyNCAqKiBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlRFUkFCWVRFXTogMTAyNCAqKiBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDwn5S5IE3DqXRvZG9zIGRlIGNvbnZlcnPDo29cclxuICAgIGNvbnZlcnRUZW1wZXJhdHVyZVVuaXQodmFsb3I6IG51bWJlciwgZGU6IFVuaXRPZk1lYXN1cmVtZW50LCBwYXJhOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGRlID09PSBwYXJhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjZWxzaXVzOiBudW1iZXI7XHJcbiAgICAgICAgc3dpdGNoIChkZSkge1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkNFTFNJVVM6XHJcbiAgICAgICAgICAgICAgICBjZWxzaXVzID0gdmFsb3I7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVbml0T2ZNZWFzdXJlbWVudC5GQUhSRU5IRUlUOlxyXG4gICAgICAgICAgICAgICAgY2Vsc2l1cyA9ICgodmFsb3IgLSBBR1JPX05VTUJFUlMuVEhJUlRZX1RXTykgKiBBR1JPX05VTUJFUlMuRklWRSkgLyBBR1JPX05VTUJFUlMuTklORTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LktFTFZJTjpcclxuICAgICAgICAgICAgICAgIGNlbHNpdXMgPSB2YWxvciAtIFRXT19IVU5EUkVEX1NFVkVOVFlfVEhSRUVfUE9JTlRfT05FX0ZJVkU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaWRhZGUgaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChwYXJhKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuQ0VMU0lVUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjZWxzaXVzO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkZBSFJFTkhFSVQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNlbHNpdXMgKiBBR1JPX05VTUJFUlMuTklORSkgLyBBR1JPX05VTUJFUlMuRklWRSArIEFHUk9fTlVNQkVSUy5USElSVFlfVFdPO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LktFTFZJTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjZWxzaXVzICsgVFdPX0hVTkRSRURfU0VWRU5UWV9USFJFRV9QT0lOVF9PTkVfRklWRTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaWRhZGUgaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVGVtcGVyYXR1cmVVbml0KHVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5URU1QRVJBVFVSRV9VTklUUy5pbmNsdWRlcyh1bml0KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVEVNUEVSQVRVUkVfVU5JVFMuaW5jbHVkZXModW5pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFNjYWxhYmxlVW5pdHModmFsb3I6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGVyYXR1cmVVbml0KGZyb20pIHx8IHRoaXMuaXNUZW1wZXJhdHVyZVVuaXQodG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUZW1wZXJhdHVyZVVuaXQodmFsb3IsIGZyb20sIHRvKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBjb25zdCB1bml0Q2F0ZWdvcnkgPSB0aGlzLmNvbnZlcnNpb25Vbml0cy5maW5kKCh1KSA9PiB1LnVuaXRzLmluY2x1ZGVzKGZyb20pKTtcclxuICAgICAgICBpZiAoIXVuaXRDYXRlZ29yeT8udW5pdHM/LmluY2x1ZGVzKHRvKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE7Do28gw6kgcG9zc8OtdmVsIGNvbnZlcnRlciBkZSAke2Zyb219IHBhcmEgJHt0b306IGNhdGVnb3JpYXMgZGlmZXJlbnRlcyBvdSB1bmlkYWRlIG7Do28gZXNjYWzDoXZlbC5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZhdG9yRGUgPSB1bml0Q2F0ZWdvcnkuZmFjdG9yVGFibGVbZnJvbV07XHJcbiAgICAgICAgY29uc3QgZmF0b3JQYXJhID0gdW5pdENhdGVnb3J5LmZhY3RvclRhYmxlW3RvXTtcclxuXHJcbiAgICAgICAgY29uc3QgZW1CYXNlID0gdmFsb3IgKiBmYXRvckRlO1xyXG4gICAgICAgIHJldHVybiBlbUJhc2UgLyBmYXRvclBhcmE7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydExpdGVyc1BlckFyZWEodmFsb3I6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgYXJlYUNhdGVnb3J5ID0gdGhpcy5jb252ZXJzaW9uVW5pdHMuZmluZCgodSkgPT4gdS51bml0cy5pbmNsdWRlcyhmcm9tKSk7XHJcbiAgICAgICAgaWYgKCFhcmVhQ2F0ZWdvcnk/LnVuaXRzPy5pbmNsdWRlcyh0bykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmlkYWRlIGRlIMOhcmVhIGludsOhbGlkYTogJHtmcm9tfSBvdSAke3RvfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmF0b3JGcm9tID0gYXJlYUNhdGVnb3J5LmZhY3RvclRhYmxlW2Zyb21dO1xyXG4gICAgICAgIGNvbnN0IGZhdG9yVG8gPSBhcmVhQ2F0ZWdvcnkuZmFjdG9yVGFibGVbdG9dO1xyXG5cclxuICAgICAgICByZXR1cm4gKHZhbG9yIC8gZmF0b3JGcm9tKSAqIGZhdG9yVG87XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydEtnUGVyQXJlYSh2YWxvcjogbnVtYmVyLCBmcm9tOiBVbml0T2ZNZWFzdXJlbWVudCwgdG86IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TGl0ZXJzUGVyQXJlYSh2YWxvciwgZnJvbSwgdG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRCdXNoZWxUb0tnKGJ1c2hlbDogbnVtYmVyLCBmYWN0b3I6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZhY3RvciA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhdG9yIGRlIGNvbnZlcnPDo28gaW52w6FsaWRvXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVzaGVsICogZmFjdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRLZ1RvQnVzaGVsKGtnOiBudW1iZXIsIGZhY3RvcjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoZmFjdG9yIDw9IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmF0b3IgZGUgY29udmVyc8OjbyBpbnbDoWxpZG9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBrZyAvIGZhY3RvcjtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVBcmVhRnJvbVZvbHVtZSh0b3RhbFZvbHVtZTogbnVtYmVyLCByYXRlOiBudW1iZXIsIHJhdGVVbml0OiBVbml0T2ZNZWFzdXJlbWVudCwgYXJlYVVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBpZiAocmF0ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRheGEgZGUgYXBsaWNhw6fDo28gaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByYXRlSW5EZXNpcmVkVW5pdCA9IHRoaXMuY29udmVydExpdGVyc1BlckFyZWEocmF0ZSwgcmF0ZVVuaXQsIGFyZWFVbml0KTtcclxuICAgICAgICByZXR1cm4gdG90YWxWb2x1bWUgLyByYXRlSW5EZXNpcmVkVW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0RWxlY3RyaWNpdHlVbml0KHZhbG9yOiBudW1iZXIsIHZvbHRhZ2U6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvV2F0dCA9ICh2OiBudW1iZXIsIHVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoICh1bml0KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LlZPTFQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkFNUEVSRTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9sdGFnZSAqIHY7IC8vIFAgPSBWICogSVxyXG4gICAgICAgICAgICAgICAgY2FzZSBVbml0T2ZNZWFzdXJlbWVudC5XQVRUOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgdW5pZGFkZSAke3VuaXR9IG7Do28gw6kgZXNjYWzDoXZlbCBkaXJldGFtZW50ZS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZyb21XYXR0ID0gKHc6IG51bWJlciwgdW5pdDogVW5pdE9mTWVhc3VyZW1lbnQpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuVk9MVDpcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuQU1QRVJFOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3IC8gdm9sdGFnZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuV0FUVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHVuaWRhZGUgJHt1bml0fSBuw6NvIMOpIGVzY2Fsw6F2ZWwgZGlyZXRhbWVudGUuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB3YXR0VmFsdWUgPSB0b1dhdHQodmFsb3IsIGZyb20pO1xyXG4gICAgICAgIHJldHVybiBmcm9tV2F0dCh3YXR0VmFsdWUsIHRvKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
package/esm2015/common/index.js
CHANGED
|
@@ -8,5 +8,6 @@ export { Colors } from './colors.class';
|
|
|
8
8
|
export { AgroNameUtils } from './agro-name-utils.class';
|
|
9
9
|
export { AgroArrayUtils } from './agro-array-utils.class';
|
|
10
10
|
export { AgroLogics } from "./agro-logics.class";
|
|
11
|
+
export { AgroUnitConverter } from './agro-unit-converter.class';
|
|
11
12
|
export { AGRO_REGEX } from './agro-regex.constant';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFncm9Db29raWVVdGlscyB9IGZyb20gJy4vYWdyby1jb29raWUtdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tICcuL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0RhdGVVdGlscyB9IGZyb20gJy4vYWdyby1kYXRlLXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb1BsYXRmb3JtVXRpbHMgfSBmcm9tICcuL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvU3RyaW5nVXRpbHMsIE51bGxhYmxlU3RyaW5nIH0gZnJvbSAnLi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OdW1iZXJVdGlscyB9IGZyb20gJy4vYWdyby1udW1iZXItdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBDb2xvcnMgfSBmcm9tICcuL2NvbG9ycy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OYW1lVXRpbHMgfSBmcm9tICcuL2Fncm8tbmFtZS11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9BcnJheVV0aWxzIH0gZnJvbSAnLi9hZ3JvLWFycmF5LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0xvZ2ljcywgRGlzdHJpYnV0aW9uUmVzdWx0IH0gZnJvbSBcIi4vYWdyby1sb2dpY3MuY2xhc3NcIjtcclxuZXhwb3J0IHsgQWdyb1VuaXRDb252ZXJ0ZXIgfSBmcm9tICcuL2Fncm8tdW5pdC1jb252ZXJ0ZXIuY2xhc3MnO1xyXG5leHBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi9hZ3JvLXJlZ2V4LmNvbnN0YW50JztcclxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLWV2ZW50LWRpYWxvZy1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZyB7XHJcbiAgICBoZWFkZXI6IHN0cmluZztcclxuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgICB3aXRoUmVhc29uPzogYm9vbGVhbjtcclxuICAgIHJlYXNvbk1pbkxlbmd0aD86IG51bWJlcjtcclxuICAgIGNhbmNlbEZ1bmN0aW9uOiAocmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgYmVmb3JlT3Blbj86ICgpID0+IFByb21pc2U8dm9pZD47XHJcbn1cclxuIl19
|