@senior-gestao-empresarial/erpx-components 4.9.0 → 4.9.1-develop-720b37a0
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-gestao-empresarial-erpx-components.umd.js +10 -9
- package/bundles/senior-gestao-empresarial-erpx-components.umd.js.map +1 -1
- package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js +1 -1
- package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js.map +1 -1
- package/esm2015/components/rateio-editor/erp-rateio-editor.component.js +4 -2
- package/esm2015/components/tributos/erp-tributos.component.js +9 -9
- package/esm5/components/rateio-editor/erp-rateio-editor.component.js +4 -2
- package/esm5/components/tributos/erp-tributos.component.js +8 -9
- package/fesm2015/senior-gestao-empresarial-erpx-components.js +11 -9
- package/fesm2015/senior-gestao-empresarial-erpx-components.js.map +1 -1
- package/fesm5/senior-gestao-empresarial-erpx-components.js +10 -9
- package/fesm5/senior-gestao-empresarial-erpx-components.js.map +1 -1
- package/package.json +1 -1
- package/senior-gestao-empresarial-erpx-components.metadata.json +1 -1
|
@@ -426,6 +426,7 @@ let ErpRateioEditorComponent = class ErpRateioEditorComponent {
|
|
|
426
426
|
formGroup: 'contaFinanceira',
|
|
427
427
|
defaultFilter: [
|
|
428
428
|
{ field: 'excluido', operator: EnumLogicalOperator.Eq, values: ['false'] },
|
|
429
|
+
{ field: 'sitFin', operator: EnumLogicalOperator.Eq, values: ['VA'] },
|
|
429
430
|
{ field: 'e070emp', operator: EnumLogicalOperator.Eq, values: [this.empresaId] }
|
|
430
431
|
]
|
|
431
432
|
})), { size: { sm: 12, md: 12, lg: 12, xl: 12 }, required: () => true })),
|
|
@@ -459,6 +460,7 @@ let ErpRateioEditorComponent = class ErpRateioEditorComponent {
|
|
|
459
460
|
formGroup: 'centroCusto',
|
|
460
461
|
defaultFilter: [
|
|
461
462
|
{ field: 'excluido', operator: EnumLogicalOperator.Eq, values: ['false'] },
|
|
463
|
+
{ field: 'sitCcu', operator: EnumLogicalOperator.Eq, values: ['VA'] },
|
|
462
464
|
{ field: 'e070emp', operator: EnumLogicalOperator.Eq, values: [this.empresaId] }
|
|
463
465
|
]
|
|
464
466
|
})), { size: { sm: 12, md: 12, lg: 12, xl: 12 }, required: () => true })),
|
|
@@ -596,8 +598,8 @@ __decorate([
|
|
|
596
598
|
ErpRateioEditorComponent = __decorate([
|
|
597
599
|
Component({
|
|
598
600
|
selector: 'erp-rateio-editor',
|
|
599
|
-
template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n<p-panel styleClass=\"form-group\" [toggleable]=\"false\">\n\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestante + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"valorRestante === 0 ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestante | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getMenuOptionsPerRow(rowData, rowIndex)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <p-table [value]=\"rowData.rateiosCCusto\" [responsive]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getCCMenuOptions(getContaIndex(rowData), ccIndex)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 4\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <div *ngIf=\"!effectiveReadOnly && contasDataSource?.length === 0\" style=\"margin-bottom: 8px\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n </div>\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n\n</p-panel>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n"
|
|
601
|
+
template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestante + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"valorRestante === 0 ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestante | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getMenuOptionsPerRow(rowData, rowIndex)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <p-table [value]=\"rowData.rateiosCCusto\" [responsive]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n [label]=\"'erpx.rateio_editor.acoes' | translate\"\n [menuOptions]=\"getCCMenuOptions(getContaIndex(rowData), ccIndex)\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 4\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <div *ngIf=\"!effectiveReadOnly && contasDataSource?.length === 0\" style=\"margin-bottom: 8px\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n </div>\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n"
|
|
600
602
|
})
|
|
601
603
|
], ErpRateioEditorComponent);
|
|
602
604
|
export { ErpRateioEditorComponent };
|
|
603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVaLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBZ0JyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBTXpDLElBQWEsd0JBQXdCLEdBQXJDLE1BQWEsd0JBQXdCO0lBZ0pqQyxZQUNxQixFQUFlLEVBQ2YsT0FBK0IsRUFDL0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsY0FBOEI7UUFMOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQy9C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RUFBRTsyREFBbUI7QUFNbEI7SUFBUixLQUFLLEVBQUU7MERBQWtCO0FBTWpCO0lBQVIsS0FBSyxFQUFFO3dEQUErQjtBQU05QjtJQUFSLEtBQUssRUFBRTs4REFBc0I7QUFHcEI7SUFBVCxNQUFNLEVBQUU7c0RBQTRDO0FBQzNDO0lBQVQsTUFBTSxFQUFFO3dEQUFtQztBQUNsQztJQUFULE1BQU0sRUFBRTt3REFBZ0Q7QUFDL0M7SUFBVCxNQUFNLEVBQUU7dURBQThDO0FBRzdCO0lBQXpCLFNBQVMsQ0FBQyxhQUFhLENBQUM7dURBQXVCO0FBL0R2Qyx3QkFBd0I7SUFKcEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLG1CQUFtQjtRQUM3Qiw0aGJBQWlEO0tBQ3BELENBQUM7R0FDVyx3QkFBd0IsQ0ErbkJwQztTQS9uQlksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEUwNDRDY3VMb29rdXAsIEUwOTFQbGZMb29rdXAsIEVudW1Mb2dpY2FsT3BlcmF0b3IgfSBmcm9tICdAc2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgICBCdXR0b25Qcmlvcml0eSxcbiAgICBCdXR0b25TaXplLFxuICAgIEZpZWxkVHlwZSxcbiAgICBGb3JtRmllbGQsXG4gICAgVGllcmVkTWVudUl0ZW1EYXRhXG59IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnBSYXRlaW9FZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9lcnAtcmF0ZWlvLWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgR3JhdmFyUmF0ZWlvTWFudWFsSW5wdXQsXG4gICAgSW50ZWdyYWNhb0NvbnRyb2xhZG9yaWEsXG4gICAgUmF0ZWlvQ2hhbmdlRXZlbnQsXG4gICAgUmF0ZWlvQ29udGEsXG4gICAgUmF0ZWlvQ0N1c3RvLFxuICAgIFJhdGVpb0VkaXRvckNvbmZpZyxcbiAgICBSYXRlaW9FcnJvckV2ZW50LFxuICAgIFJhdGVpb1NhdmVFdmVudCxcbiAgICBSZXRvcm5hclJhdGVpb091dHB1dCxcbiAgICBTdWdlcmlyUmF0ZWlvSW5wdXQsXG4gICAgU3VnZXJpclJhdGVpb1BhcmFtZXRybyxcbiAgICBUaXBvTW92aW1lbnRvLFxuICAgIENyaXRlcmlvUmF0ZWlvXG59IGZyb20gJy4vZXJwLXJhdGVpby1lZGl0b3IudHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcnAtcmF0ZWlvLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBFcnBSYXRlaW9FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgICAvLyA9PT0gSU5QVVRTID09PVxuICAgIEBJbnB1dCgpIGlkTW92aW1lbnRvOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGlwb01vdmltZW50bzogVGlwb01vdmltZW50bztcbiAgICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dTdWdlc3Rhb0J1dHRvbiA9IHRydWU7XG4gICAgQElucHV0KCkgY29uZmlnOiBSYXRlaW9FZGl0b3JDb25maWc7XG5cbiAgICAvKipcbiAgICAgKiBDb250ZXh0byBpbmljaWFsIHVzYWRvIHF1YW5kbyBvIGNvbXBvbmVudGUgw6kgYWxpbWVudGFkbyBwb3IgaW5wdXRzIGVtIHZleiBkYSBBUEkuXG4gICAgICogQXBsaWNhLXNlIGFvIG1vZG8gc3RhbmRhbG9uZSAoc2VtIGlkTW92aW1lbnRvKSBlIGFvIG1vZG8gY29uZWN0YWRvIGNvbVxuICAgICAqIGxvYWRGcm9tQXBpID0gZmFsc2UuIEZvcm5lY2UgdmFsb3JCYXNlLCBmaWxpYWwsIGNyaXTDqXJpbywgYWdydXBhZG9ySWQsIGRhdGFzLCBldGMuXG4gICAgICogRW0gbW9kbyBjb25lY3RhZG8gc2VtIGNhcmdhIHZpYSBBUEksIMOpIGRlc3RlIGNvbnRleHRvIHF1ZSBhIGdyYXZhw6fDo29cbiAgICAgKiAoZ3JhdmFyUmF0ZWlvTWFudWFsKSBvYnTDqW0gZTA3MGZpbCwgY3JpUmF0LCBkYXRhQmFzZSwgZGF0YU1vdmltZW50byBlIGFncnVwYWRvcklkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGluaXRpYWxDb250ZXh0PzogUGFydGlhbDxSZXRvcm5hclJhdGVpb091dHB1dD47XG5cbiAgICAvKiogUmF0ZWlvcyBpbmljaWFpcyBwYXJhIHBvcHVsYXIgYSBncmlkIHF1YW5kbyBhbGltZW50YWRvIHBvciBpbnB1dHMuICovXG4gICAgQElucHV0KCkgaW5pdGlhbFJhdGVpb3M/OiBSYXRlaW9Db250YVtdO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGEgc2UgbyByYXRlaW8gZGV2ZSBzZXIgY2FycmVnYWRvIGF1dG9tYXRpY2FtZW50ZSB2aWEgQVBJIHF1YW5kb1xuICAgICAqIGlkTW92aW1lbnRvIGVzdMOhIHByZXNlbnRlIChtb2RvIGNvbmVjdGFkbykuIERlZmF1bHQ6IHRydWUuXG4gICAgICpcbiAgICAgKiBEZWZpbmEgY29tbyBmYWxzZSBwYXJhIHJlc3RhdXJhciB1bSByYXRlaW8gcXVlIG8gdXN1w6FyaW8gasOhIGRpc3RyaWJ1aXUgZSBxdWVcbiAgICAgKiBhaW5kYSBuw6NvIGZvaSBwZXJzaXN0aWRvIG5vIGJhY2tlbmQgZGUgcmF0ZWlvOiBvIGNvbXBvbmVudGUgcG9wdWxhIGEgZ3JpZCBhXG4gICAgICogcGFydGlyIGRlIGluaXRpYWxDb250ZXh0L2luaXRpYWxSYXRlaW9zIGUgbWFudMOpbSBvIGJvdMOjbyBTYWx2YXIgZSBhIGdyYXZhw6fDo29cbiAgICAgKiB2aW5jdWxhZGEgYW8gbW92aW1lbnRvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRGcm9tQXBpID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGVtcHJlc2EgdXNhZG8gcGFyYSBmaWx0cmFyIG9zIGxvb2t1cHMgZGUgY29udGEgZmluYW5jZWlyYSBlIGNlbnRybyBkZSBjdXN0by5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCBzb2JyZXNjcmV2ZSBvIElEIGRlcml2YWRvIGRvIGNvbnRleHRvIGNhcnJlZ2Fkby9pbmljaWFsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHJlc2FJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSUQgZGEgZmlsaWFsIHVzYWRvIHBlbGEgQVBJIGRlIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgdGVtIHByaW9yaWRhZGUgc29icmUgbyBJRCBkZXJpdmFkbyBkbyBjb250ZXh0by5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWxpYWxJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3JpdMOpcmlvIGRlIHJhdGVpbyBwYWRyw6NvIHVzYWRvIHBlbGEgQVBJIGRlIHN1Z2VzdMOjby5cbiAgICAgKiBEZWZhdWx0OiAnVjMnIChEZXNwZXNhcyDigJQgQ29udGEgWCBDLiBDdXN0b3MpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNyaVJhdDogQ3JpdGVyaW9SYXRlaW8gPSAnVjMnO1xuXG4gICAgLyoqXG4gICAgICogQ8OzZGlnbyBJU08gZGEgbW9lZGEgcGFyYSBmb3JtYXRhw6fDo28gZGUgdmFsb3JlcyBuYSBncmlkIChleDogJ0JSTCcsICdVU0QnKS5cbiAgICAgKiBTZSBuw6NvIGluZm9ybWFkbywgdXNhIGVzdGlsbyBkZWNpbWFsIHNlbSBzw61tYm9sby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXJyZW5jeUNvZGU6IHN0cmluZztcblxuICAgIC8vID09PSBPVVRQVVRTID09PVxuICAgIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9TYXZlRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9DaGFuZ2VFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGVpb0Vycm9yRXZlbnQ+KCk7XG5cbiAgICAvLyA9PT0gUkVGRVLDik5DSUFTIERPIFRFTVBMQVRFID09PVxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlUmF0ZWlvJykgcmVhZG9ubHkgdGFibGU6IFRhYmxlO1xuXG4gICAgLy8gPT09IENPTlNUQU5URVMgRVhQT1NUQVMgQU8gVEVNUExBVEUgPT09XG4gICAgcmVhZG9ubHkgQnV0dG9uUHJpb3JpdHkgPSBCdXR0b25Qcmlvcml0eTtcbiAgICByZWFkb25seSBCdXR0b25TaXplID0gQnV0dG9uU2l6ZTtcblxuICAgIC8vID09PSBFU1RBRE8gPT09XG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGxvYWRlZENvbnRleHQ6IFJldG9ybmFyUmF0ZWlvT3V0cHV0O1xuICAgIHB1YmxpYyBzZWxlY3Rpb246IGFueVtdID0gW107XG4gICAgcHVibGljIGdyaWRDb2x1bW5zOiBhbnlbXTtcbiAgICBwdWJsaWMgY29udGFzRGF0YVNvdXJjZTogUmF0ZWlvQ29udGFbXSA9IFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nUm93QmFja3VwOiBSYXRlaW9Db250YSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NCYWNrdXA6IFJhdGVpb0NDdXN0byB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gPT09IE1PREFMIENPTlRBIEZJTkFOQ0VJUkEgPT09XG4gICAgcHVibGljIGRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb250YURpYWxvZ0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBjb250YURpYWxvZ0ZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGVkaXRpbmdDb250YUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vID09PSBNT0RBTCBDRU5UUk8gREUgQ1VTVE8gPT09XG4gICAgcHVibGljIGRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjY0RpYWxvZ0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBjY0RpYWxvZ0ZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGVkaXRpbmdDQ0NvbnRhSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIGdldCBlZmZlY3RpdmVSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaWM6IEludGVncmFjYW9Db250cm9sYWRvcmlhIHwgdW5kZWZpbmVkID0gdGhpcy5sb2FkZWRDb250ZXh0Py5pbnRlZ3JhY2FvQ29udHJvbGFkb3JpYTtcbiAgICAgICAgY29uc3QgaGFzSW50ZWdyYWNhbyA9ICEhaWMgJiYgKFxuICAgICAgICAgICAgaWMuY29udGFiaWxpZGFkZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgaWMudHJpYnV0b3MgPT09IHRydWUgfHxcbiAgICAgICAgICAgIGljLnBhdHJpbW9uaW8gPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgaGFzSW50ZWdyYWNhbztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbnRhc0Zvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdjb250YXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxvckJhc2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkQ29udGV4dD8udmFsb3JCYXNlID8/IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwZXJjZW50dWFsUmVzdGFudGUoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc29tYSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb250YSkgPT4gYWNjICsgKGNvbnRhLnBlcmNlbnR1YWwgfHwgMCksIDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICsoMTAwIC0gc29tYSkudG9GaXhlZCh0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxvclJlc3RhbnRlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNvbWEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29udGEpID0+IGFjYyArIChjb250YS52YWxvclJhdGVhZG9Db250YSB8fCAwKSwgMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKyh0aGlzLnZhbG9yQmFzZSAtIHNvbWEpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlckZvcm1hdE9wdGlvbnMoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2U6IEVycFJhdGVpb0VkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGUwOTFQbGZMb29rdXA6IEUwOTFQbGZMb29rdXAsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZTA0NENjdUxvb2t1cDogRTA0NENjdUxvb2t1cCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRhczogdGhpcy5mYi5hcnJheShbXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW92aW1lbnRvQ2hhbmdlZCA9IGNoYW5nZXMuaWRNb3ZpbWVudG8gfHwgY2hhbmdlcy50aXBvTW92aW1lbnRvO1xuXG4gICAgICAgIGlmIChtb3ZpbWVudG9DaGFuZ2VkICYmIHRoaXMuaWRNb3ZpbWVudG8gJiYgdGhpcy50aXBvTW92aW1lbnRvICYmIHRoaXMubG9hZEZyb21BcGkpIHtcbiAgICAgICAgICAgIC8vIE1vZG8gY29uZWN0YWRvIGNvbSBjYXJnYSB2aWEgQVBJXG4gICAgICAgICAgICB0aGlzLmNhcnJlZ2FyUmF0ZWlvKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lucHV0RHJpdmVuICYmIChjaGFuZ2VzLmluaXRpYWxDb250ZXh0IHx8IGNoYW5nZXMuaW5pdGlhbFJhdGVpb3MgfHwgY2hhbmdlcy5sb2FkRnJvbUFwaSB8fCBtb3ZpbWVudG9DaGFuZ2VkKSkge1xuICAgICAgICAgICAgLy8gQWxpbWVudGFkbyBwb3IgaW5wdXRzOiBtb2RvIHN0YW5kYWxvbmUgT1UgY29uZWN0YWRvIHNlbSBjYXJnYSB2aWEgQVBJXG4gICAgICAgICAgICB0aGlzLmluaWNpYWxpemFyUG9ySW5wdXRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0b3JuYSBvIGNvbnRlw7pkbyBhdHVhbCBkYSBncmlkICh1c28gc3RhbmRhbG9uZSDigJQgcXVlbSBjb25zb21lIGzDqiBvcyByYXRlaW9zIGRhcXVpKS4gKi9cbiAgICBwdWJsaWMgZ2V0IHJhdGVpb3MoKTogUmF0ZWlvQ29udGFbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgZXN0w6Egb3BlcmFuZG8gc2VtIGlkTW92aW1lbnRvIChtb2RvIHN0YW5kYWxvbmUpLiAqL1xuICAgIHB1YmxpYyBnZXQgaXNTdGFuZGFsb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaWRNb3ZpbWVudG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNlIG8gY29tcG9uZW50ZSDDqSBhbGltZW50YWRvIHBvciBpbnB1dHMgZW0gdmV6IGRhIEFQSTpcbiAgICAgKiBtb2RvIHN0YW5kYWxvbmUgKHNlbSBpZE1vdmltZW50bykgT1UgbW9kbyBjb25lY3RhZG8gY29tIGxvYWRGcm9tQXBpID0gZmFsc2UuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0lucHV0RHJpdmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N0YW5kYWxvbmUgfHwgIXRoaXMubG9hZEZyb21BcGk7XG4gICAgfVxuXG4gICAgLyoqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgZXN0w6EgcHJvbnRvIHBhcmEgZXhpYmlyIFVJIChjYXJyZWdvdSB2aWEgQVBJIE9VIGZvaSBpbmljaWFsaXphZG8gcG9yIGlucHV0cykuICovXG4gICAgcHVibGljIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvYWRlZENvbnRleHQgfHwgdGhpcy5pc0lucHV0RHJpdmVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLy8gPT09IEHDh8OVRVMgUMOaQkxJQ0FTID09PVxuXG4gICAgcHVibGljIG9uU2FsdmFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lZmZlY3RpdmVSZWFkT25seSkgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmxvYWRlZENvbnRleHQ7XG4gICAgICAgIGlmICghY3R4Py5lMDcwZmlsPy5pZCB8fCAhY3R4Py5jcmlSYXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19jb250ZXh0b19pbmNvbXBsZXRvJyk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgZGV0YWlsOiBtZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnc2F2ZScsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dDogR3JhdmFyUmF0ZWlvTWFudWFsSW5wdXQgPSB7XG4gICAgICAgICAgICBpZE1vdmltZW50bzogdGhpcy5pZE1vdmltZW50byxcbiAgICAgICAgICAgIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50byxcbiAgICAgICAgICAgIGFncnVwYWRvcklkOiBjdHguYWdydXBhZG9ySWQsXG4gICAgICAgICAgICBlMDcwZmlsX2lkOiBjdHguZTA3MGZpbC5pZCxcbiAgICAgICAgICAgIGNyaXRlcmlvUmF0ZWlvOiBjdHguY3JpUmF0LFxuICAgICAgICAgICAgZGF0YUJhc2U6IGN0eC5kYXRhQmFzZSxcbiAgICAgICAgICAgIGRhdGFNb3ZpbWVudG86IGN0eC5kYXRhTW92aW1lbnRvLFxuICAgICAgICAgICAgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyYXZhclJhdGVpb01hbnVhbChpbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnNhbHZvX2NvbV9zdWNlc3NvX3RpdHVsbycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3Iuc2Fsdm9fY29tX3N1Y2Vzc29fZGV0YWxoZScpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmUuZW1pdCh7IGlkTW92aW1lbnRvOiB0aGlzLmlkTW92aW1lbnRvLCB0aXBvTW92aW1lbnRvOiB0aGlzLnRpcG9Nb3ZpbWVudG8sIHJhdGVpb3M6IHRoaXMuY29udGFzRGF0YVNvdXJjZSB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fc2FsdmFyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnc2F2ZScsIG1lc3NhZ2U6IGRldGFpbCwgb3JpZ2luYWxFcnJvcjogZXJyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VnZXJpcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWZmZWN0aXZlUmVhZE9ubHkgfHwgIXRoaXMuc2hvd1N1Z2VzdGFvQnV0dG9uKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMubG9hZGVkQ29udGV4dDtcbiAgICAgICAgY29uc3QgZTA3MGZpbF9pZCA9IHRoaXMuZmlsaWFsSWQgfHwgY3R4Py5lMDcwZmlsPy5pZDtcbiAgICAgICAgY29uc3QgY3JpdGVyaW8gPSB0aGlzLmNyaVJhdCB8fCBjdHg/LmNyaVJhdDtcbiAgICAgICAgY29uc3QgdmFsb3JCYXNlID0gY3R4Py52YWxvckJhc2UgPz8gMDtcblxuICAgICAgICBpZiAoIWUwNzBmaWxfaWQgfHwgIWNyaXRlcmlvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbWV0cm86IFN1Z2VyaXJSYXRlaW9QYXJhbWV0cm8gPSB7XG4gICAgICAgICAgICBlMDcwZmlsX2lkLFxuICAgICAgICAgICAgdmFsb3JCYXNlLFxuICAgICAgICAgICAgY3JpUmF0OiBjcml0ZXJpbyxcbiAgICAgICAgICAgIGRhdGFCYXNlOiBjdHg/LmRhdGFCYXNlLFxuICAgICAgICAgICAgZGF0YU1vdmltZW50bzogY3R4Py5kYXRhTW92aW1lbnRvXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuaWRNb3ZpbWVudG8pIHtcbiAgICAgICAgICAgIHBhcmFtZXRyby5pZE1vdmltZW50byA9IHRoaXMuaWRNb3ZpbWVudG87XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dDogU3VnZXJpclJhdGVpb0lucHV0ID0ge1xuICAgICAgICAgICAgdGlwbzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgcGFyYW1ldHJvczogW3BhcmFtZXRyb11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc3VnZXJpclJhdGVpbyhpbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VnZXN0YW8gPSAocmVzcC5zdWdlc3RhbyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHMgPT4gIXRoaXMuaWRNb3ZpbWVudG8gfHwgcy5pZE1vdmltZW50byA9PT0gdGhpcy5pZE1vdmltZW50bylcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZXNwLnN1Z2VzdGFvIHx8IFtdKVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0ZWlvID0gc3VnZXN0YW8/LnJhdGVpbztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWdlc3RhbyB8fCAhcmF0ZWlvIHx8IHJhdGVpby5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKHJhdGVpbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4gdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzdWdnZXN0JywgbWVzc2FnZTogZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fc3VnZXJpcicpLCBvcmlnaW5hbEVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENPTlRBIEZJTkFOQ0VJUkEgPT09XG5cbiAgICBwdWJsaWMgb3BlbkNvbnRhRGlhbG9nKGVkaXRJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDb250YUluZGV4ID0gZWRpdEluZGV4ICE9IG51bGwgPyBlZGl0SW5kZXggOiBudWxsO1xuICAgICAgICBjb25zdCByZW1haW5pbmdQY3QgPSB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGxcbiAgICAgICAgICAgID8gdGhpcy5wZXJjZW50dWFsUmVzdGFudGUgKyB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF0ucGVyY2VudHVhbFxuICAgICAgICAgICAgOiB0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZTtcblxuICAgICAgICBsZXQgY29udGFWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBwZXJjZW50dWFsVmFsdWU6IG51bWJlciB8IG51bGwgPSByZW1haW5pbmdQY3QgPiAwID8gcmVtYWluaW5nUGN0IDogbnVsbDtcbiAgICAgICAgbGV0IHZhbG9yVmFsdWU6IG51bWJlciB8IG51bGwgPSBwZXJjZW50dWFsVmFsdWUgIT0gbnVsbFxuICAgICAgICAgICAgPyArKChwZXJjZW50dWFsVmFsdWUgLyAxMDApICogdGhpcy52YWxvckJhc2UpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW3RoaXMuZWRpdGluZ0NvbnRhSW5kZXhdO1xuICAgICAgICAgICAgY29udGFWYWx1ZSA9IHsgaWQ6IGNvbnRhLmlkQ29udGFGaW5hbmNlaXJhLCBsYWJlbDogY29udGEuY29udGFGaW5hbmNlaXJhIH07XG4gICAgICAgICAgICBwZXJjZW50dWFsVmFsdWUgPSBjb250YS5wZXJjZW50dWFsO1xuICAgICAgICAgICAgdmFsb3JWYWx1ZSA9IGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgY29udGFGaW5hbmNlaXJhOiBbeyB2YWx1ZTogY29udGFWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBlcmNlbnR1YWw6IFt7IHZhbHVlOiBwZXJjZW50dWFsVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHZhbG9yOiBbeyB2YWx1ZTogdmFsb3JWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB0aGlzLnZhbG9yQmFzZSk7XG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENvbnRhRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgY29uc3QgY29udGFGaW5hbmNlaXJhID0gZGF0YS5jb250YUZpbmFuY2VpcmE7XG4gICAgICAgIGNvbnN0IHBlcmNlbnR1YWwgPSBOdW1iZXIoZGF0YS5wZXJjZW50dWFsKSB8fCAwO1xuICAgICAgICBjb25zdCB2YWxvciA9ICsoTnVtYmVyKGRhdGEudmFsb3IpIHx8IDApLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nQ29udGFJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDb250YUluZGV4XTtcbiAgICAgICAgICAgIGNvbnRhLnBlcmNlbnR1YWwgPSBwZXJjZW50dWFsO1xuICAgICAgICAgICAgY29udGEudmFsb3JSYXRlYWRvQ29udGEgPSB2YWxvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi50aGlzLmNvbnRhc0RhdGFTb3VyY2VdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWRDb250YUZpbmFuY2VpcmEgPSBjb250YUZpbmFuY2VpcmE/LmlkIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDb250YSA9IGNvbnRhRmluYW5jZWlyYT8ubGFiZWwgfHwgJyc7XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYcOnw6NvIGV4dHJhOiBibG9xdWVpYSBkdXBsaWNpZGFkZVxuICAgICAgICAgICAgY29uc3QgamFFeGlzdGUgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2Uuc29tZShjID0+IGMuaWRDb250YUZpbmFuY2VpcmEgPT09IGlkQ29udGFGaW5hbmNlaXJhKTtcbiAgICAgICAgICAgIGlmIChqYUV4aXN0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAuZ2V0KCdjb250YUZpbmFuY2VpcmEnKS5zZXRFcnJvcnMoeyBkdXBsaWNhdGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBub3ZhQ29udGE6IFJhdGVpb0NvbnRhID0ge1xuICAgICAgICAgICAgICAgIGlkQ29udGFGaW5hbmNlaXJhLFxuICAgICAgICAgICAgICAgIGNvbnRhRmluYW5jZWlyYTogbGFiZWxDb250YSxcbiAgICAgICAgICAgICAgICBwZXJjZW50dWFsLFxuICAgICAgICAgICAgICAgIHZhbG9yUmF0ZWFkb0NvbnRhOiB2YWxvcixcbiAgICAgICAgICAgICAgICByYXRlaW9zQ0N1c3RvOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi50aGlzLmNvbnRhc0RhdGFTb3VyY2UsIG5vdmFDb250YV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25IaWRlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENFTlRSTyBERSBDVVNUTyA9PT1cblxuICAgIHB1YmxpYyBvcGVuQ0NEaWFsb2coY29udGFJbmRleDogbnVtYmVyLCBlZGl0Q0NJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXggPSBjb250YUluZGV4O1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0luZGV4ID0gZWRpdENDSW5kZXggIT0gbnVsbCA/IGVkaXRDQ0luZGV4IDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtjb250YUluZGV4XTtcbiAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgY29uc3Qgc29tYUNDID0gY2NMaXN0LnJlZHVjZSgoYWNjLCBjYywgaSkgPT4gYWNjICsgKGkgPT09IHRoaXMuZWRpdGluZ0NDSW5kZXggPyAwIDogKGNjLnBlcmNlbnR1YWwgfHwgMCkpLCAwKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nUGN0ID0gKygxMDAgLSBzb21hQ0MpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgICAgICBjb25zdCB2YWxvckJhc2VDQyA9IGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhIHx8IDA7XG5cbiAgICAgICAgbGV0IGNjVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgcGVyY2VudHVhbFZhbHVlOiBudW1iZXIgfCBudWxsID0gcmVtYWluaW5nUGN0ID4gMCA/IHJlbWFpbmluZ1BjdCA6IG51bGw7XG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGxcbiAgICAgICAgICAgID8gKygocGVyY2VudHVhbFZhbHVlIC8gMTAwKSAqIHZhbG9yQmFzZUNDKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMilcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nQ0NJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IGNjTGlzdFt0aGlzLmVkaXRpbmdDQ0luZGV4XTtcbiAgICAgICAgICAgIGNjVmFsdWUgPSB7IGlkOiBjYy5pZENlbnRyb0N1c3RvLCBsYWJlbDogY2MuZGVzY0NDdXN0byB8fCBjYy5pZENlbnRyb0N1c3RvIH07XG4gICAgICAgICAgICBwZXJjZW50dWFsVmFsdWUgPSBjYy5wZXJjZW50dWFsO1xuICAgICAgICAgICAgdmFsb3JWYWx1ZSA9IGNjLnZhbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgY2VudHJvQ3VzdG86IFt7IHZhbHVlOiBjY1ZhbHVlLCBkaXNhYmxlZDogdGhpcy5lZGl0aW5nQ0NJbmRleCAhPSBudWxsIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGVyY2VudHVhbDogW3sgdmFsdWU6IHBlcmNlbnR1YWxWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgdmFsb3I6IFt7IHZhbHVlOiB2YWxvclZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0dXBQZXJjZW50dWFsVmFsb3JTeW5jKHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAsICgpID0+IHZhbG9yQmFzZUNDKTtcbiAgICAgICAgdGhpcy5jY0RpYWxvZ0ZpZWxkcyA9IHRoaXMuZ2V0Q0NEaWFsb2dGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q0NEaWFsb2cgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhdmVDQ0RpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAuaW52YWxpZCkgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjZW50cm9DdXN0byA9IGRhdGEuY2VudHJvQ3VzdG87XG4gICAgICAgIGNvbnN0IHBlcmNlbnR1YWwgPSBOdW1iZXIoZGF0YS5wZXJjZW50dWFsKSB8fCAwO1xuICAgICAgICBjb25zdCB2YWxvciA9ICsoTnVtYmVyKGRhdGEudmFsb3IpIHx8IDApLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ0NDb250YUluZGV4XTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nQ0NJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IGNvbnRhLnJhdGVpb3NDQ3VzdG9bdGhpcy5lZGl0aW5nQ0NJbmRleF07XG4gICAgICAgICAgICBjYy5wZXJjZW50dWFsID0gcGVyY2VudHVhbDtcbiAgICAgICAgICAgIGNjLnZhbG9yID0gdmFsb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpZENlbnRyb0N1c3RvID0gY2VudHJvQ3VzdG8/LmlkIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDQ3VzdG8gPSBjZW50cm9DdXN0bz8ubGFiZWwgfHwgJyc7XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYcOnw6NvIGV4dHJhOiBibG9xdWVpYSBkdXBsaWNpZGFkZSBkZW50cm8gZGEgbWVzbWEgY29udGFcbiAgICAgICAgICAgIGNvbnN0IGNjTGlzdCA9IGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW107XG4gICAgICAgICAgICBjb25zdCBqYUV4aXN0ZSA9IGNjTGlzdC5zb21lKGNjID0+IGNjLmlkQ2VudHJvQ3VzdG8gPT09IGlkQ2VudHJvQ3VzdG8pO1xuICAgICAgICAgICAgaWYgKGphRXhpc3RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NlbnRyb0N1c3RvJykuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGEucmF0ZWlvc0NDdXN0byA9IFsuLi5jY0xpc3QsIHsgaWRDZW50cm9DdXN0bywgZGVzY0NDdXN0bzogbGFiZWxDQ3VzdG8sIHBlcmNlbnR1YWwsIHZhbG9yIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZV07XG4gICAgICAgIHRoaXMuZGlzcGxheUNDRGlhbG9nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkhpZGVDQ0RpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA9PT0gQcOHw5VFUyBEQSBUQUJFTEEgPT09XG5cbiAgICBwdWJsaWMgb25EZWxldGVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnN0IGlkc1RvUmVtb3ZlID0gbmV3IFNldCh0aGlzLnNlbGVjdGlvbi5tYXAocyA9PiBzLmlkQ29udGFGaW5hbmNlaXJhKSk7XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5maWx0ZXIoYyA9PiAhaWRzVG9SZW1vdmUuaGFzKGMuaWRDb250YUZpbmFuY2VpcmEpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJDb250YShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJDZW50cm9DdXN0byhjb250YUluZGV4OiBudW1iZXIsIGNjSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtjb250YUluZGV4XTtcbiAgICAgICAgY29udGEucmF0ZWlvc0NDdXN0byA9IGNvbnRhLnJhdGVpb3NDQ3VzdG8uZmlsdGVyKChfLCBpKSA9PiBpICE9PSBjY0luZGV4KTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZV07XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNZW51T3B0aW9uc1BlclJvdyhyb3dEYXRhOiBSYXRlaW9Db250YSwgcm93SW5kZXg6IG51bWJlcik6IFRpZXJlZE1lbnVJdGVtRGF0YVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lZGl0YXInKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuQ29udGFEaWFsb2cocm93SW5kZXgpIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuYWRpY2lvbmFyX2NlbnRyb19jdXN0bycpLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5DQ0RpYWxvZyhyb3dJbmRleCkgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5leGNsdWlyJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMucmVtb3ZlckNvbnRhKHJvd0luZGV4KSB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENDTWVudU9wdGlvbnMoY29udGFJbmRleDogbnVtYmVyLCBjY0luZGV4OiBudW1iZXIpOiBUaWVyZWRNZW51SXRlbURhdGFbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZWRpdGFyJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkNDRGlhbG9nKGNvbnRhSW5kZXgsIGNjSW5kZXgpIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXhjbHVpcicpLCBjb21tYW5kOiAoKSA9PiB0aGlzLnJlbW92ZXJDZW50cm9DdXN0byhjb250YUluZGV4LCBjY0luZGV4KSB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRhSW5kZXgocm93RGF0YTogUmF0ZWlvQ29udGEpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YXNEYXRhU291cmNlLmluZGV4T2Yocm93RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09IFBSSVZBRE9TID09PVxuXG4gICAgLyoqIEluaWNpYWxpemEgbyBjb21wb25lbnRlIGEgcGFydGlyIGRvcyBpbnB1dHMgKHNlbSBjaGFtYWRhIMOgIEFQSSBkZSBjYXJnYSkuICovXG4gICAgcHJpdmF0ZSBpbmljaWFsaXphclBvcklucHV0cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkZWRDb250ZXh0ID0gKHRoaXMuaW5pdGlhbENvbnRleHQgfHwge30pIGFzIFJldG9ybmFyUmF0ZWlvT3V0cHV0O1xuICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKHRoaXMuaW5pdGlhbFJhdGVpb3MgfHwgW10pO1xuICAgICAgICBpZiAoIXRoaXMuZW1wcmVzYUlkKSB7XG4gICAgICAgICAgICB0aGlzLmVtcHJlc2FJZCA9IHRoaXMuaW5pdGlhbENvbnRleHQ/LmUwNzBmaWw/LmUwNzBlbXA/LmlkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXJyZWdhclJhdGVpbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAucmV0b3JuYXJSYXRlaW8oeyBpZE1vdmltZW50bzogdGhpcy5pZE1vdmltZW50bywgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRDb250ZXh0ID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKG91dHB1dC5yYXRlaW8gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW1wcmVzYUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHJlc2FJZCA9IG91dHB1dC5lMDcwZmlsLmUwNzBlbXAuaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkQ29sdW1ucyA9IHRoaXMuZ2V0R3JpZENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnbG9hZCcsIG1lc3NhZ2U6IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX2NhcnJlZ2FyJyksIG9yaWdpbmFsRXJyb3I6IGVyciB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXJDb21SYXRlaW9zKHJhdGVpb3M6IFJhdGVpb0NvbnRhW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnJhdGVpb3NdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFEaWFsb2dGaWVsZHMoKTogRm9ybUZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5lMDkxUGxmTG9va3VwLm1vdW50T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiAnY29udGFGaW5hbmNlaXJhJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2V4Y2x1aWRvJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydmYWxzZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGVtcCcsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFt0aGlzLmVtcHJlc2FJZF0gfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyY2VudHVhbCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRG91YmxlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogNyxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQsXG4gICAgICAgICAgICAgICAgcmlnaHRBZGRvbjogeyBsYWJlbDogJyUnIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbG9yJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgY3VycmVubmN5OiAoKSA9PiB0aGlzLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE4LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDQ0RpYWxvZ0ZpZWxkcygpOiBGb3JtRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmUwNDRDY3VMb29rdXAubW91bnRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6ICdjZW50cm9DdXN0bycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdleGNsdWlkbycsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnZmFsc2UnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbdGhpcy5lbXByZXNhSWRdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlcmNlbnR1YWwnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkRvdWJsZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0LFxuICAgICAgICAgICAgICAgIHJpZ2h0QWRkb246IHsgbGFiZWw6ICclJyB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWxvcicsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgIGN1cnJlbm5jeTogKCkgPT4gdGhpcy5jdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxOCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbmNyb25pemEgb3MgY2FtcG9zIHBlcmNlbnR1YWwgZSB2YWxvciBkZSB1bSBGb3JtR3JvdXAgZGUgbW9kYWwuXG4gICAgICogUXVhbmRvIG8gdXN1w6FyaW8gYWx0ZXJhIHBlcmNlbnR1YWwsIHJlY2FsY3VsYSB2YWxvciAocGVyY2VudHVhbC8xMDAgKiBiYXNlKS5cbiAgICAgKiBRdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmEgdmFsb3IsIHJlY2FsY3VsYSBwZXJjZW50dWFsICh2YWxvci9iYXNlICogMTAwKS5cbiAgICAgKiBPIGFyZ3VtZW50byBnZXRCYXNlIHJldG9ybmEgYSBiYXNlIHVzYWRhIG5vIGPDoWxjdWxvICh2YWxvckJhc2UgZ2xvYmFsIG91IHZhbG9yUmF0ZWFkb0NvbnRhIGRhIGNvbnRhIHBhaSkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXR1cFBlcmNlbnR1YWxWYWxvclN5bmMoZm9ybTogRm9ybUdyb3VwLCBnZXRCYXNlOiAoKSA9PiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbFNjYWxlID0gdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5U2NhbGUgPSB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDI7XG5cbiAgICAgICAgZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShwY3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBjdCA9PSBudWxsIHx8IGJhc2UgPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjb25zdCBub3ZvVmFsb3IgPSArKChOdW1iZXIocGN0KSAvIDEwMCkgKiBiYXNlKS50b0ZpeGVkKGN1cnJlbmN5U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoZm9ybS5nZXQoJ3ZhbG9yJykudmFsdWUpICE9PSBub3ZvVmFsb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3ZhbG9yJykuc2V0VmFsdWUobm92b1ZhbG9yLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZm9ybS5nZXQoJ3ZhbG9yJykudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gZ2V0QmFzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCAhYmFzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjb25zdCBub3ZvUGN0ID0gKygoTnVtYmVyKHZhbCkgLyBiYXNlKSAqIDEwMCkudG9GaXhlZChwZXJjZW50dWFsU2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS52YWx1ZSkgIT09IG5vdm9QY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS5zZXRWYWx1ZShub3ZvUGN0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcmlkQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGZpZWxkOiAnY29udGFGaW5hbmNlaXJhJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuY29udGFfZmluYW5jZWlyYScpIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiAncGVyY2VudHVhbCcsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnBlcmNlbnR1YWwnKSB9LFxuICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbG9yUmF0ZWFkb0NvbnRhJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IudmFsb3InKSB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGlzRGlydHk6IHRydWUsXG4gICAgICAgICAgICBpc1ZhbGlkOiB0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZSA9PT0gMCAmJiB0aGlzLnZhbG9yUmVzdGFudGUgPT09IDAsXG4gICAgICAgICAgICByYXRlaW9zOiB0aGlzLmNvbnRhc0RhdGFTb3VyY2VcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
605
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVaLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBZ0JyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBTXpDLElBQWEsd0JBQXdCLEdBQXJDLE1BQWEsd0JBQXdCO0lBZ0pqQyxZQUNxQixFQUFlLEVBQ2YsT0FBK0IsRUFDL0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsY0FBOEI7UUFMOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQy9C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QThCO0FBQzdCO0lBQVIsS0FBSyxFQUFFOzBEQUFrQjtBQUNqQjtJQUFSLEtBQUssRUFBRTtvRUFBMkI7QUFDMUI7SUFBUixLQUFLLEVBQUU7d0RBQTRCO0FBUzNCO0lBQVIsS0FBSyxFQUFFO2dFQUFnRDtBQUcvQztJQUFSLEtBQUssRUFBRTtnRUFBZ0M7QUFXL0I7SUFBUixLQUFLLEVBQUU7NkRBQW9CO0FBTW5CO0lBQVIsS0FBSyxFQUFFOzJEQUFtQjtBQU1sQjtJQUFSLEtBQUssRUFBRTswREFBa0I7QUFNakI7SUFBUixLQUFLLEVBQUU7d0RBQStCO0FBTTlCO0lBQVIsS0FBSyxFQUFFOzhEQUFzQjtBQUdwQjtJQUFULE1BQU0sRUFBRTtzREFBNEM7QUFDM0M7SUFBVCxNQUFNLEVBQUU7d0RBQW1DO0FBQ2xDO0lBQVQsTUFBTSxFQUFFO3dEQUFnRDtBQUMvQztJQUFULE1BQU0sRUFBRTt1REFBOEM7QUFHN0I7SUFBekIsU0FBUyxDQUFDLGFBQWEsQ0FBQzt1REFBdUI7QUEvRHZDLHdCQUF3QjtJQUpwQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLDQvYUFBaUQ7S0FDcEQsQ0FBQztHQUNXLHdCQUF3QixDQWlvQnBDO1NBam9CWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRTA0NENjdUxvb2t1cCwgRTA5MVBsZkxvb2t1cCwgRW51bUxvZ2ljYWxPcGVyYXRvciB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICAgIEJ1dHRvblByaW9yaXR5LFxuICAgIEJ1dHRvblNpemUsXG4gICAgRmllbGRUeXBlLFxuICAgIEZvcm1GaWVsZCxcbiAgICBUaWVyZWRNZW51SXRlbURhdGFcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycFJhdGVpb0VkaXRvclNlcnZpY2UgfSBmcm9tICcuL2VycC1yYXRlaW8tZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBHcmF2YXJSYXRlaW9NYW51YWxJbnB1dCxcbiAgICBJbnRlZ3JhY2FvQ29udHJvbGFkb3JpYSxcbiAgICBSYXRlaW9DaGFuZ2VFdmVudCxcbiAgICBSYXRlaW9Db250YSxcbiAgICBSYXRlaW9DQ3VzdG8sXG4gICAgUmF0ZWlvRWRpdG9yQ29uZmlnLFxuICAgIFJhdGVpb0Vycm9yRXZlbnQsXG4gICAgUmF0ZWlvU2F2ZUV2ZW50LFxuICAgIFJldG9ybmFyUmF0ZWlvT3V0cHV0LFxuICAgIFN1Z2VyaXJSYXRlaW9JbnB1dCxcbiAgICBTdWdlcmlyUmF0ZWlvUGFyYW1ldHJvLFxuICAgIFRpcG9Nb3ZpbWVudG8sXG4gICAgQ3JpdGVyaW9SYXRlaW9cbn0gZnJvbSAnLi9lcnAtcmF0ZWlvLWVkaXRvci50eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VycC1yYXRlaW8tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEVycFJhdGVpb0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAgIC8vID09PSBJTlBVVFMgPT09XG4gICAgQElucHV0KCkgaWRNb3ZpbWVudG86IHN0cmluZztcbiAgICBASW5wdXQoKSB0aXBvTW92aW1lbnRvOiBUaXBvTW92aW1lbnRvO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd1N1Z2VzdGFvQnV0dG9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb25maWc6IFJhdGVpb0VkaXRvckNvbmZpZztcblxuICAgIC8qKlxuICAgICAqIENvbnRleHRvIGluaWNpYWwgdXNhZG8gcXVhbmRvIG8gY29tcG9uZW50ZSDDqSBhbGltZW50YWRvIHBvciBpbnB1dHMgZW0gdmV6IGRhIEFQSS5cbiAgICAgKiBBcGxpY2Etc2UgYW8gbW9kbyBzdGFuZGFsb25lIChzZW0gaWRNb3ZpbWVudG8pIGUgYW8gbW9kbyBjb25lY3RhZG8gY29tXG4gICAgICogbG9hZEZyb21BcGkgPSBmYWxzZS4gRm9ybmVjZSB2YWxvckJhc2UsIGZpbGlhbCwgY3JpdMOpcmlvLCBhZ3J1cGFkb3JJZCwgZGF0YXMsIGV0Yy5cbiAgICAgKiBFbSBtb2RvIGNvbmVjdGFkbyBzZW0gY2FyZ2EgdmlhIEFQSSwgw6kgZGVzdGUgY29udGV4dG8gcXVlIGEgZ3JhdmHDp8Ojb1xuICAgICAqIChncmF2YXJSYXRlaW9NYW51YWwpIG9idMOpbSBlMDcwZmlsLCBjcmlSYXQsIGRhdGFCYXNlLCBkYXRhTW92aW1lbnRvIGUgYWdydXBhZG9ySWQuXG4gICAgICovXG4gICAgQElucHV0KCkgaW5pdGlhbENvbnRleHQ/OiBQYXJ0aWFsPFJldG9ybmFyUmF0ZWlvT3V0cHV0PjtcblxuICAgIC8qKiBSYXRlaW9zIGluaWNpYWlzIHBhcmEgcG9wdWxhciBhIGdyaWQgcXVhbmRvIGFsaW1lbnRhZG8gcG9yIGlucHV0cy4gKi9cbiAgICBASW5wdXQoKSBpbml0aWFsUmF0ZWlvcz86IFJhdGVpb0NvbnRhW107XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sYSBzZSBvIHJhdGVpbyBkZXZlIHNlciBjYXJyZWdhZG8gYXV0b21hdGljYW1lbnRlIHZpYSBBUEkgcXVhbmRvXG4gICAgICogaWRNb3ZpbWVudG8gZXN0w6EgcHJlc2VudGUgKG1vZG8gY29uZWN0YWRvKS4gRGVmYXVsdDogdHJ1ZS5cbiAgICAgKlxuICAgICAqIERlZmluYSBjb21vIGZhbHNlIHBhcmEgcmVzdGF1cmFyIHVtIHJhdGVpbyBxdWUgbyB1c3XDoXJpbyBqw6EgZGlzdHJpYnVpdSBlIHF1ZVxuICAgICAqIGFpbmRhIG7Do28gZm9pIHBlcnNpc3RpZG8gbm8gYmFja2VuZCBkZSByYXRlaW86IG8gY29tcG9uZW50ZSBwb3B1bGEgYSBncmlkIGFcbiAgICAgKiBwYXJ0aXIgZGUgaW5pdGlhbENvbnRleHQvaW5pdGlhbFJhdGVpb3MgZSBtYW50w6ltIG8gYm90w6NvIFNhbHZhciBlIGEgZ3JhdmHDp8Ojb1xuICAgICAqIHZpbmN1bGFkYSBhbyBtb3ZpbWVudG8uXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZEZyb21BcGkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogSUQgZGEgZW1wcmVzYSB1c2FkbyBwYXJhIGZpbHRyYXIgb3MgbG9va3VwcyBkZSBjb250YSBmaW5hbmNlaXJhIGUgY2VudHJvIGRlIGN1c3RvLlxuICAgICAqIFF1YW5kbyBpbmZvcm1hZG8sIHNvYnJlc2NyZXZlIG8gSUQgZGVyaXZhZG8gZG8gY29udGV4dG8gY2FycmVnYWRvL2luaWNpYWwuXG4gICAgICovXG4gICAgQElucHV0KCkgZW1wcmVzYUlkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSBmaWxpYWwgdXNhZG8gcGVsYSBBUEkgZGUgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCB0ZW0gcHJpb3JpZGFkZSBzb2JyZSBvIElEIGRlcml2YWRvIGRvIGNvbnRleHRvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbGlhbElkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDcml0w6lyaW8gZGUgcmF0ZWlvIHBhZHLDo28gdXNhZG8gcGVsYSBBUEkgZGUgc3VnZXN0w6NvLlxuICAgICAqIERlZmF1bHQ6ICdWMycgKERlc3Blc2FzIOKAlCBDb250YSBYIEMuIEN1c3RvcykuXG4gICAgICovXG4gICAgQElucHV0KCkgY3JpUmF0OiBDcml0ZXJpb1JhdGVpbyA9ICdWMyc7XG5cbiAgICAvKipcbiAgICAgKiBDw7NkaWdvIElTTyBkYSBtb2VkYSBwYXJhIGZvcm1hdGHDp8OjbyBkZSB2YWxvcmVzIG5hIGdyaWQgKGV4OiAnQlJMJywgJ1VTRCcpLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1c2EgZXN0aWxvIGRlY2ltYWwgc2VtIHPDrW1ib2xvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuXG4gICAgLy8gPT09IE9VVFBVVFMgPT09XG4gICAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGVpb1NhdmVFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGVpb0NoYW5nZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8UmF0ZWlvRXJyb3JFdmVudD4oKTtcblxuICAgIC8vID09PSBSRUZFUsOKTkNJQVMgRE8gVEVNUExBVEUgPT09XG4gICAgQFZpZXdDaGlsZCgndGFibGVSYXRlaW8nKSByZWFkb25seSB0YWJsZTogVGFibGU7XG5cbiAgICAvLyA9PT0gQ09OU1RBTlRFUyBFWFBPU1RBUyBBTyBURU1QTEFURSA9PT1cbiAgICByZWFkb25seSBCdXR0b25Qcmlvcml0eSA9IEJ1dHRvblByaW9yaXR5O1xuICAgIHJlYWRvbmx5IEJ1dHRvblNpemUgPSBCdXR0b25TaXplO1xuXG4gICAgLy8gPT09IEVTVEFETyA9PT1cbiAgICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgbG9hZGVkQ29udGV4dDogUmV0b3JuYXJSYXRlaW9PdXRwdXQ7XG4gICAgcHVibGljIHNlbGVjdGlvbjogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnM6IGFueVtdO1xuICAgIHB1YmxpYyBjb250YXNEYXRhU291cmNlOiBSYXRlaW9Db250YVtdID0gW107XG4gICAgcHVibGljIGVkaXRpbmdSb3dCYWNrdXA6IFJhdGVpb0NvbnRhIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGVkaXRpbmdDQ0JhY2t1cDogUmF0ZWlvQ0N1c3RvIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyA9PT0gTU9EQUwgQ09OVEEgRklOQU5DRUlSQSA9PT1cbiAgICBwdWJsaWMgZGlzcGxheUNvbnRhRGlhbG9nID0gZmFsc2U7XG4gICAgcHVibGljIGNvbnRhRGlhbG9nRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGNvbnRhRGlhbG9nRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZWRpdGluZ0NvbnRhSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gPT09IE1PREFMIENFTlRSTyBERSBDVVNUTyA9PT1cbiAgICBwdWJsaWMgZGlzcGxheUNDRGlhbG9nID0gZmFsc2U7XG4gICAgcHVibGljIGNjRGlhbG9nRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGNjRGlhbG9nRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZWRpdGluZ0NDQ29udGFJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGVkaXRpbmdDQ0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwdWJsaWMgZ2V0IGVmZmVjdGl2ZVJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpYzogSW50ZWdyYWNhb0NvbnRyb2xhZG9yaWEgfCB1bmRlZmluZWQgPSB0aGlzLmxvYWRlZENvbnRleHQ/LmludGVncmFjYW9Db250cm9sYWRvcmlhO1xuICAgICAgICBjb25zdCBoYXNJbnRlZ3JhY2FvID0gISFpYyAmJiAoXG4gICAgICAgICAgICBpYy5jb250YWJpbGlkYWRlID09PSB0cnVlIHx8XG4gICAgICAgICAgICBpYy50cmlidXRvcyA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgaWMucGF0cmltb25pbyA9PT0gdHJ1ZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCBoYXNJbnRlZ3JhY2FvO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29udGFzRm9ybUFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ2NvbnRhcycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbG9yQmFzZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRDb250ZXh0Py52YWxvckJhc2UgPz8gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBlcmNlbnR1YWxSZXN0YW50ZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzb21hID0gdGhpcy5jb250YXNEYXRhU291cmNlLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbnRhKSA9PiBhY2MgKyAoY29udGEucGVyY2VudHVhbCB8fCAwKSwgMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKygxMDAgLSBzb21hKS50b0ZpeGVkKHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbG9yUmVzdGFudGUoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc29tYSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb250YSkgPT4gYWNjICsgKGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhIHx8IDApLCAwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiArKHRoaXMudmFsb3JCYXNlIC0gc29tYSkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyRm9ybWF0T3B0aW9ucygpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogRXJwUmF0ZWlvRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZTA5MVBsZkxvb2t1cDogRTA5MVBsZkxvb2t1cCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlMDQ0Q2N1TG9va3VwOiBFMDQ0Q2N1TG9va3VwLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgY29udGFzOiB0aGlzLmZiLmFycmF5KFtdKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb3ZpbWVudG9DaGFuZ2VkID0gY2hhbmdlcy5pZE1vdmltZW50byB8fCBjaGFuZ2VzLnRpcG9Nb3ZpbWVudG87XG5cbiAgICAgICAgaWYgKG1vdmltZW50b0NoYW5nZWQgJiYgdGhpcy5pZE1vdmltZW50byAmJiB0aGlzLnRpcG9Nb3ZpbWVudG8gJiYgdGhpcy5sb2FkRnJvbUFwaSkge1xuICAgICAgICAgICAgLy8gTW9kbyBjb25lY3RhZG8gY29tIGNhcmdhIHZpYSBBUElcbiAgICAgICAgICAgIHRoaXMuY2FycmVnYXJSYXRlaW8oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5wdXREcml2ZW4gJiYgKGNoYW5nZXMuaW5pdGlhbENvbnRleHQgfHwgY2hhbmdlcy5pbml0aWFsUmF0ZWlvcyB8fCBjaGFuZ2VzLmxvYWRGcm9tQXBpIHx8IG1vdmltZW50b0NoYW5nZWQpKSB7XG4gICAgICAgICAgICAvLyBBbGltZW50YWRvIHBvciBpbnB1dHM6IG1vZG8gc3RhbmRhbG9uZSBPVSBjb25lY3RhZG8gc2VtIGNhcmdhIHZpYSBBUElcbiAgICAgICAgICAgIHRoaXMuaW5pY2lhbGl6YXJQb3JJbnB1dHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXRvcm5hIG8gY29udGXDumRvIGF0dWFsIGRhIGdyaWQgKHVzbyBzdGFuZGFsb25lIOKAlCBxdWVtIGNvbnNvbWUgbMOqIG9zIHJhdGVpb3MgZGFxdWkpLiAqL1xuICAgIHB1YmxpYyBnZXQgcmF0ZWlvcygpOiBSYXRlaW9Db250YVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFzRGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogSW5kaWNhIHNlIG8gY29tcG9uZW50ZSBlc3TDoSBvcGVyYW5kbyBzZW0gaWRNb3ZpbWVudG8gKG1vZG8gc3RhbmRhbG9uZSkuICovXG4gICAgcHVibGljIGdldCBpc1N0YW5kYWxvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pZE1vdmltZW50bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2UgbyBjb21wb25lbnRlIMOpIGFsaW1lbnRhZG8gcG9yIGlucHV0cyBlbSB2ZXogZGEgQVBJOlxuICAgICAqIG1vZG8gc3RhbmRhbG9uZSAoc2VtIGlkTW92aW1lbnRvKSBPVSBtb2RvIGNvbmVjdGFkbyBjb20gbG9hZEZyb21BcGkgPSBmYWxzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzSW5wdXREcml2ZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3RhbmRhbG9uZSB8fCAhdGhpcy5sb2FkRnJvbUFwaTtcbiAgICB9XG5cbiAgICAvKiogSW5kaWNhIHNlIG8gY29tcG9uZW50ZSBlc3TDoSBwcm9udG8gcGFyYSBleGliaXIgVUkgKGNhcnJlZ291IHZpYSBBUEkgT1UgZm9pIGluaWNpYWxpemFkbyBwb3IgaW5wdXRzKS4gKi9cbiAgICBwdWJsaWMgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkQ29udGV4dCB8fCB0aGlzLmlzSW5wdXREcml2ZW47XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvLyA9PT0gQcOHw5VFUyBQw5pCTElDQVMgPT09XG5cbiAgICBwdWJsaWMgb25TYWx2YXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVmZmVjdGl2ZVJlYWRPbmx5KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMubG9hZGVkQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHg/LmUwNzBmaWw/LmlkIHx8ICFjdHg/LmNyaVJhdCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX2NvbnRleHRvX2luY29tcGxldG8nKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0OiBHcmF2YXJSYXRlaW9NYW51YWxJbnB1dCA9IHtcbiAgICAgICAgICAgIGlkTW92aW1lbnRvOiB0aGlzLmlkTW92aW1lbnRvLFxuICAgICAgICAgICAgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgYWdydXBhZG9ySWQ6IGN0eC5hZ3J1cGFkb3JJZCxcbiAgICAgICAgICAgIGUwNzBmaWxfaWQ6IGN0eC5lMDcwZmlsLmlkLFxuICAgICAgICAgICAgY3JpdGVyaW9SYXRlaW86IGN0eC5jcmlSYXQsXG4gICAgICAgICAgICBkYXRhQmFzZTogY3R4LmRhdGFCYXNlLFxuICAgICAgICAgICAgZGF0YU1vdmltZW50bzogY3R4LmRhdGFNb3ZpbWVudG8sXG4gICAgICAgICAgICByYXRlaW9zOiB0aGlzLmNvbnRhc0RhdGFTb3VyY2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JhdmFyUmF0ZWlvTWFudWFsKGlucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3Iuc2Fsdm9fY29tX3N1Y2Vzc29fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5zYWx2b19jb21fc3VjZXNzb19kZXRhbGhlJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHsgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50bywgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWwgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19zYWx2YXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZTogZGV0YWlsLCBvcmlnaW5hbEVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWdlcmlyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lZmZlY3RpdmVSZWFkT25seSB8fCAhdGhpcy5zaG93U3VnZXN0YW9CdXR0b24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5sb2FkZWRDb250ZXh0O1xuICAgICAgICBjb25zdCBlMDcwZmlsX2lkID0gdGhpcy5maWxpYWxJZCB8fCBjdHg/LmUwNzBmaWw/LmlkO1xuICAgICAgICBjb25zdCBjcml0ZXJpbyA9IHRoaXMuY3JpUmF0IHx8IGN0eD8uY3JpUmF0O1xuICAgICAgICBjb25zdCB2YWxvckJhc2UgPSBjdHg/LnZhbG9yQmFzZSA/PyAwO1xuXG4gICAgICAgIGlmICghZTA3MGZpbF9pZCB8fCAhY3JpdGVyaW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRybzogU3VnZXJpclJhdGVpb1BhcmFtZXRybyA9IHtcbiAgICAgICAgICAgIGUwNzBmaWxfaWQsXG4gICAgICAgICAgICB2YWxvckJhc2UsXG4gICAgICAgICAgICBjcmlSYXQ6IGNyaXRlcmlvLFxuICAgICAgICAgICAgZGF0YUJhc2U6IGN0eD8uZGF0YUJhc2UsXG4gICAgICAgICAgICBkYXRhTW92aW1lbnRvOiBjdHg/LmRhdGFNb3ZpbWVudG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pZE1vdmltZW50bykge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkTW92aW1lbnRvID0gdGhpcy5pZE1vdmltZW50bztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0OiBTdWdlcmlyUmF0ZWlvSW5wdXQgPSB7XG4gICAgICAgICAgICB0aXBvOiB0aGlzLnRpcG9Nb3ZpbWVudG8sXG4gICAgICAgICAgICBwYXJhbWV0cm9zOiBbcGFyYW1ldHJvXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZS5zdWdlcmlyUmF0ZWlvKGlucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWdlc3RhbyA9IChyZXNwLnN1Z2VzdGFvIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQocyA9PiAhdGhpcy5pZE1vdmltZW50byB8fCBzLmlkTW92aW1lbnRvID09PSB0aGlzLmlkTW92aW1lbnRvKVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlc3Auc3VnZXN0YW8gfHwgW10pWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXRlaW8gPSBzdWdlc3Rhbz8ucmF0ZWlvO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Z2VzdGFvIHx8ICFyYXRlaW8gfHwgcmF0ZWlvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhckNvbVJhdGVpb3MocmF0ZWlvKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB0aGlzLmVycm9yLmVtaXQoeyBvcGVyYWNhbzogJ3N1Z2dlc3QnLCBtZXNzYWdlOiBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19zdWdlcmlyJyksIG9yaWdpbmFsRXJyb3I6IGVyciB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyA9PT0gTU9EQUwgQ09OVEEgRklOQU5DRUlSQSA9PT1cblxuICAgIHB1YmxpYyBvcGVuQ29udGFEaWFsb2coZWRpdEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggPSBlZGl0SW5kZXggIT0gbnVsbCA/IGVkaXRJbmRleCA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1BjdCA9IHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZSArIHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDb250YUluZGV4XS5wZXJjZW50dWFsXG4gICAgICAgICAgICA6IHRoaXMucGVyY2VudHVhbFJlc3RhbnRlO1xuXG4gICAgICAgIGxldCBjb250YVZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IHBlcmNlbnR1YWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHJlbWFpbmluZ1BjdCA+IDAgPyByZW1haW5pbmdQY3QgOiBudWxsO1xuICAgICAgICBsZXQgdmFsb3JWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHBlcmNlbnR1YWxWYWx1ZSAhPSBudWxsXG4gICAgICAgICAgICA/ICsoKHBlcmNlbnR1YWxWYWx1ZSAvIDEwMCkgKiB0aGlzLnZhbG9yQmFzZSkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YVZhbHVlID0geyBpZDogY29udGEuaWRDb250YUZpbmFuY2VpcmEsIGxhYmVsOiBjb250YS5jb250YUZpbmFuY2VpcmEgfTtcbiAgICAgICAgICAgIHBlcmNlbnR1YWxWYWx1ZSA9IGNvbnRhLnBlcmNlbnR1YWw7XG4gICAgICAgICAgICB2YWxvclZhbHVlID0gY29udGEudmFsb3JSYXRlYWRvQ29udGE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBjb250YUZpbmFuY2VpcmE6IFt7IHZhbHVlOiBjb250YVZhbHVlLCBkaXNhYmxlZDogdGhpcy5lZGl0aW5nQ29udGFJbmRleCAhPSBudWxsIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGVyY2VudHVhbDogW3sgdmFsdWU6IHBlcmNlbnR1YWxWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgdmFsb3I6IFt7IHZhbHVlOiB2YWxvclZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0dXBQZXJjZW50dWFsVmFsb3JTeW5jKHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAsICgpID0+IHRoaXMudmFsb3JCYXNlKTtcbiAgICAgICAgdGhpcy5jb250YURpYWxvZ0ZpZWxkcyA9IHRoaXMuZ2V0Q29udGFEaWFsb2dGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGFEaWFsb2cgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhdmVDb250YURpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAuaW52YWxpZCkgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjb250YUZpbmFuY2VpcmEgPSBkYXRhLmNvbnRhRmluYW5jZWlyYTtcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW3RoaXMuZWRpdGluZ0NvbnRhSW5kZXhdO1xuICAgICAgICAgICAgY29udGEucGVyY2VudHVhbCA9IHBlcmNlbnR1YWw7XG4gICAgICAgICAgICBjb250YS52YWxvclJhdGVhZG9Db250YSA9IHZhbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpZENvbnRhRmluYW5jZWlyYSA9IGNvbnRhRmluYW5jZWlyYT8uaWQgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBsYWJlbENvbnRhID0gY29udGFGaW5hbmNlaXJhPy5sYWJlbCB8fCAnJztcblxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZXh0cmE6IGJsb3F1ZWlhIGR1cGxpY2lkYWRlXG4gICAgICAgICAgICBjb25zdCBqYUV4aXN0ZSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5zb21lKGMgPT4gYy5pZENvbnRhRmluYW5jZWlyYSA9PT0gaWRDb250YUZpbmFuY2VpcmEpO1xuICAgICAgICAgICAgaWYgKGphRXhpc3RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NvbnRhRmluYW5jZWlyYScpLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdmFDb250YTogUmF0ZWlvQ29udGEgPSB7XG4gICAgICAgICAgICAgICAgaWRDb250YUZpbmFuY2VpcmEsXG4gICAgICAgICAgICAgICAgY29udGFGaW5hbmNlaXJhOiBsYWJlbENvbnRhLFxuICAgICAgICAgICAgICAgIHBlcmNlbnR1YWwsXG4gICAgICAgICAgICAgICAgdmFsb3JSYXRlYWRvQ29udGE6IHZhbG9yLFxuICAgICAgICAgICAgICAgIHJhdGVpb3NDQ3VzdG86IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZSwgbm92YUNvbnRhXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkhpZGVDb250YURpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGFEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA9PT0gTU9EQUwgQ0VOVFJPIERFIENVU1RPID09PVxuXG4gICAgcHVibGljIG9wZW5DQ0RpYWxvZyhjb250YUluZGV4OiBudW1iZXIsIGVkaXRDQ0luZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NDQ29udGFJbmRleCA9IGNvbnRhSW5kZXg7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NDSW5kZXggPSBlZGl0Q0NJbmRleCAhPSBudWxsID8gZWRpdENDSW5kZXggOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW2NvbnRhSW5kZXhdO1xuICAgICAgICBjb25zdCBjY0xpc3QgPSBjb250YS5yYXRlaW9zQ0N1c3RvIHx8IFtdO1xuICAgICAgICBjb25zdCBzb21hQ0MgPSBjY0xpc3QucmVkdWNlKChhY2MsIGNjLCBpKSA9PiBhY2MgKyAoaSA9PT0gdGhpcy5lZGl0aW5nQ0NJbmRleCA/IDAgOiAoY2MucGVyY2VudHVhbCB8fCAwKSksIDApO1xuICAgICAgICBjb25zdCByZW1haW5pbmdQY3QgPSArKDEwMCAtIHNvbWFDQykudG9GaXhlZCh0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCk7XG4gICAgICAgIGNvbnN0IHZhbG9yQmFzZUNDID0gY29udGEudmFsb3JSYXRlYWRvQ29udGEgfHwgMDtcblxuICAgICAgICBsZXQgY2NWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBwZXJjZW50dWFsVmFsdWU6IG51bWJlciB8IG51bGwgPSByZW1haW5pbmdQY3QgPiAwID8gcmVtYWluaW5nUGN0IDogbnVsbDtcbiAgICAgICAgbGV0IHZhbG9yVmFsdWU6IG51bWJlciB8IG51bGwgPSBwZXJjZW50dWFsVmFsdWUgIT0gbnVsbFxuICAgICAgICAgICAgPyArKChwZXJjZW50dWFsVmFsdWUgLyAxMDApICogdmFsb3JCYXNlQ0MpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmdDQ0luZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gY2NMaXN0W3RoaXMuZWRpdGluZ0NDSW5kZXhdO1xuICAgICAgICAgICAgY2NWYWx1ZSA9IHsgaWQ6IGNjLmlkQ2VudHJvQ3VzdG8sIGxhYmVsOiBjYy5kZXNjQ0N1c3RvIHx8IGNjLmlkQ2VudHJvQ3VzdG8gfTtcbiAgICAgICAgICAgIHBlcmNlbnR1YWxWYWx1ZSA9IGNjLnBlcmNlbnR1YWw7XG4gICAgICAgICAgICB2YWxvclZhbHVlID0gY2MudmFsb3I7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBjZW50cm9DdXN0bzogW3sgdmFsdWU6IGNjVmFsdWUsIGRpc2FibGVkOiB0aGlzLmVkaXRpbmdDQ0luZGV4ICE9IG51bGwgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwZXJjZW50dWFsOiBbeyB2YWx1ZTogcGVyY2VudHVhbFZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICB2YWxvcjogW3sgdmFsdWU6IHZhbG9yVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXR1cFBlcmNlbnR1YWxWYWxvclN5bmModGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cCwgKCkgPT4gdmFsb3JCYXNlQ0MpO1xuICAgICAgICB0aGlzLmNjRGlhbG9nRmllbGRzID0gdGhpcy5nZXRDQ0RpYWxvZ0ZpZWxkcygpO1xuICAgICAgICB0aGlzLmRpc3BsYXlDQ0RpYWxvZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZUNDRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cC5pbnZhbGlkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGNlbnRyb0N1c3RvID0gZGF0YS5jZW50cm9DdXN0bztcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXhdO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmdDQ0luZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gY29udGEucmF0ZWlvc0NDdXN0b1t0aGlzLmVkaXRpbmdDQ0luZGV4XTtcbiAgICAgICAgICAgIGNjLnBlcmNlbnR1YWwgPSBwZXJjZW50dWFsO1xuICAgICAgICAgICAgY2MudmFsb3IgPSB2YWxvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlkQ2VudHJvQ3VzdG8gPSBjZW50cm9DdXN0bz8uaWQgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBsYWJlbENDdXN0byA9IGNlbnRyb0N1c3RvPy5sYWJlbCB8fCAnJztcblxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZXh0cmE6IGJsb3F1ZWlhIGR1cGxpY2lkYWRlIGRlbnRybyBkYSBtZXNtYSBjb250YVxuICAgICAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGphRXhpc3RlID0gY2NMaXN0LnNvbWUoY2MgPT4gY2MuaWRDZW50cm9DdXN0byA9PT0gaWRDZW50cm9DdXN0byk7XG4gICAgICAgICAgICBpZiAoamFFeGlzdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldCgnY2VudHJvQ3VzdG8nKS5zZXRFcnJvcnMoeyBkdXBsaWNhdGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gWy4uLmNjTGlzdCwgeyBpZENlbnRyb0N1c3RvLCBkZXNjQ0N1c3RvOiBsYWJlbENDdXN0bywgcGVyY2VudHVhbCwgdmFsb3IgfV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZUNDRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vID09PSBBw4fDlUVTIERBIFRBQkVMQSA9PT1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICAgICAgY29uc3QgaWRzVG9SZW1vdmUgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uLm1hcChzID0+IHMuaWRDb250YUZpbmFuY2VpcmEpKTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcihjID0+ICFpZHNUb1JlbW92ZS5oYXMoYy5pZENvbnRhRmluYW5jZWlyYSkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNvbnRhKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNlbnRyb0N1c3RvKGNvbnRhSW5kZXg6IG51bWJlciwgY2NJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW2NvbnRhSW5kZXhdO1xuICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gY29udGEucmF0ZWlvc0NDdXN0by5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGNjSW5kZXgpO1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1lbnVPcHRpb25zUGVyUm93KHJvd0RhdGE6IFJhdGVpb0NvbnRhLCByb3dJbmRleDogbnVtYmVyKTogVGllcmVkTWVudUl0ZW1EYXRhW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVkaXRhcicpLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5Db250YURpYWxvZyhyb3dJbmRleCkgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5hZGljaW9uYXJfY2VudHJvX2N1c3RvJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkNDRGlhbG9nKHJvd0luZGV4KSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmV4Y2x1aXInKSwgY29tbWFuZDogKCkgPT4gdGhpcy5yZW1vdmVyQ29udGEocm93SW5kZXgpIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q0NNZW51T3B0aW9ucyhjb250YUluZGV4OiBudW1iZXIsIGNjSW5kZXg6IG51bWJlcik6IFRpZXJlZE1lbnVJdGVtRGF0YVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lZGl0YXInKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuQ0NEaWFsb2coY29udGFJbmRleCwgY2NJbmRleCkgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5leGNsdWlyJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMucmVtb3ZlckNlbnRyb0N1c3RvKGNvbnRhSW5kZXgsIGNjSW5kZXgpIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGFJbmRleChyb3dEYXRhOiBSYXRlaW9Db250YSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuaW5kZXhPZihyb3dEYXRhKTtcbiAgICB9XG5cbiAgICAvLyA9PT0gUFJJVkFET1MgPT09XG5cbiAgICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgYSBwYXJ0aXIgZG9zIGlucHV0cyAoc2VtIGNoYW1hZGEgw6AgQVBJIGRlIGNhcmdhKS4gKi9cbiAgICBwcml2YXRlIGluaWNpYWxpemFyUG9ySW5wdXRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRlZENvbnRleHQgPSAodGhpcy5pbml0aWFsQ29udGV4dCB8fCB7fSkgYXMgUmV0b3JuYXJSYXRlaW9PdXRwdXQ7XG4gICAgICAgIHRoaXMucG9wdWxhckNvbVJhdGVpb3ModGhpcy5pbml0aWFsUmF0ZWlvcyB8fCBbXSk7XG4gICAgICAgIGlmICghdGhpcy5lbXByZXNhSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1wcmVzYUlkID0gdGhpcy5pbml0aWFsQ29udGV4dD8uZTA3MGZpbD8uZTA3MGVtcD8uaWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkQ29sdW1ucyA9IHRoaXMuZ2V0R3JpZENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhcnJlZ2FyUmF0ZWlvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC5yZXRvcm5hclJhdGVpbyh7IGlkTW92aW1lbnRvOiB0aGlzLmlkTW92aW1lbnRvLCB0aXBvTW92aW1lbnRvOiB0aGlzLnRpcG9Nb3ZpbWVudG8gfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENvbnRleHQgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhckNvbVJhdGVpb3Mob3V0cHV0LnJhdGVpbyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbXByZXNhSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wcmVzYUlkID0gb3V0cHV0LmUwNzBmaWwuZTA3MGVtcC5pZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4gdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdsb2FkJywgbWVzc2FnZTogZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fY2FycmVnYXInKSwgb3JpZ2luYWxFcnJvcjogZXJyIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wdWxhckNvbVJhdGVpb3MocmF0ZWlvczogUmF0ZWlvQ29udGFbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4ucmF0ZWlvc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250YURpYWxvZ0ZpZWxkcygpOiBGb3JtRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmUwOTFQbGZMb29rdXAubW91bnRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6ICdjb250YUZpbmFuY2VpcmEnLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZXhjbHVpZG8nLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbJ2ZhbHNlJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdzaXRGaW4nLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbJ1ZBJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZW1wJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogW3RoaXMuZW1wcmVzYUlkXSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwZXJjZW50dWFsJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnBlcmNlbnR1YWwnKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Eb3VibGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiA3LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCxcbiAgICAgICAgICAgICAgICByaWdodEFkZG9uOiB7IGxhYmVsOiAnJScgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsb3InLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IudmFsb3InKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICBjdXJyZW5uY3k6ICgpID0+IHRoaXMuY3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTgsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENDRGlhbG9nRmllbGRzKCk6IEZvcm1GaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZTA0NENjdUxvb2t1cC5tb3VudE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogJ2NlbnRyb0N1c3RvJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2V4Y2x1aWRvJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydmYWxzZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnc2l0Q2N1Jywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydWQSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGVtcCcsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFt0aGlzLmVtcHJlc2FJZF0gfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyY2VudHVhbCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRG91YmxlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogNyxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQsXG4gICAgICAgICAgICAgICAgcmlnaHRBZGRvbjogeyBsYWJlbDogJyUnIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbG9yJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgY3VycmVubmN5OiAoKSA9PiB0aGlzLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE4LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2luY3Jvbml6YSBvcyBjYW1wb3MgcGVyY2VudHVhbCBlIHZhbG9yIGRlIHVtIEZvcm1Hcm91cCBkZSBtb2RhbC5cbiAgICAgKiBRdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmEgcGVyY2VudHVhbCwgcmVjYWxjdWxhIHZhbG9yIChwZXJjZW50dWFsLzEwMCAqIGJhc2UpLlxuICAgICAqIFF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYSB2YWxvciwgcmVjYWxjdWxhIHBlcmNlbnR1YWwgKHZhbG9yL2Jhc2UgKiAxMDApLlxuICAgICAqIE8gYXJndW1lbnRvIGdldEJhc2UgcmV0b3JuYSBhIGJhc2UgdXNhZGEgbm8gY8OhbGN1bG8gKHZhbG9yQmFzZSBnbG9iYWwgb3UgdmFsb3JSYXRlYWRvQ29udGEgZGEgY29udGEgcGFpKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldHVwUGVyY2VudHVhbFZhbG9yU3luYyhmb3JtOiBGb3JtR3JvdXAsIGdldEJhc2U6ICgpID0+IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwZXJjZW50dWFsU2NhbGUgPSB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lTY2FsZSA9IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMjtcblxuICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBjdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IGdldEJhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAocGN0ID09IG51bGwgfHwgYmFzZSA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9WYWxvciA9ICsoKE51bWJlcihwY3QpIC8gMTAwKSAqIGJhc2UpLnRvRml4ZWQoY3VycmVuY3lTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgndmFsb3InKS52YWx1ZSkgIT09IG5vdm9WYWxvcikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgndmFsb3InKS5zZXRWYWx1ZShub3ZvVmFsb3IsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmb3JtLmdldCgndmFsb3InKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8ICFiYXNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9QY3QgPSArKChOdW1iZXIodmFsKSAvIGJhc2UpICogMTAwKS50b0ZpeGVkKHBlcmNlbnR1YWxTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlKSAhPT0gbm92b1BjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnNldFZhbHVlKG5vdm9QY3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgZmllbGQ6ICdjb250YUZpbmFuY2VpcmEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5jb250YV9maW5hbmNlaXJhJykgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6ICdwZXJjZW50dWFsJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiAndmFsb3JSYXRlYWRvQ29udGEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgaXNEaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVmFsaWQ6IHRoaXMucGVyY2VudHVhbFJlc3RhbnRlID09PSAwICYmIHRoaXMudmFsb3JSZXN0YW50ZSA9PT0gMCxcbiAgICAgICAgICAgIHJhdGVpb3M6IHRoaXMuY29udGFzRGF0YVNvdXJjZVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|