@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
|
@@ -474,6 +474,7 @@ var ErpRateioEditorComponent = /** @class */ (function () {
|
|
|
474
474
|
formGroup: 'contaFinanceira',
|
|
475
475
|
defaultFilter: [
|
|
476
476
|
{ field: 'excluido', operator: EnumLogicalOperator.Eq, values: ['false'] },
|
|
477
|
+
{ field: 'sitFin', operator: EnumLogicalOperator.Eq, values: ['VA'] },
|
|
477
478
|
{ field: 'e070emp', operator: EnumLogicalOperator.Eq, values: [this.empresaId] }
|
|
478
479
|
]
|
|
479
480
|
})), { size: { sm: 12, md: 12, lg: 12, xl: 12 }, required: function () { return true; } })),
|
|
@@ -508,6 +509,7 @@ var ErpRateioEditorComponent = /** @class */ (function () {
|
|
|
508
509
|
formGroup: 'centroCusto',
|
|
509
510
|
defaultFilter: [
|
|
510
511
|
{ field: 'excluido', operator: EnumLogicalOperator.Eq, values: ['false'] },
|
|
512
|
+
{ field: 'sitCcu', operator: EnumLogicalOperator.Eq, values: ['VA'] },
|
|
511
513
|
{ field: 'e070emp', operator: EnumLogicalOperator.Eq, values: [this.empresaId] }
|
|
512
514
|
]
|
|
513
515
|
})), { size: { sm: 12, md: 12, lg: 12, xl: 12 }, required: function () { return true; } })),
|
|
@@ -644,10 +646,10 @@ var ErpRateioEditorComponent = /** @class */ (function () {
|
|
|
644
646
|
ErpRateioEditorComponent = __decorate([
|
|
645
647
|
Component({
|
|
646
648
|
selector: 'erp-rateio-editor',
|
|
647
|
-
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"
|
|
649
|
+
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"
|
|
648
650
|
})
|
|
649
651
|
], ErpRateioEditorComponent);
|
|
650
652
|
return ErpRateioEditorComponent;
|
|
651
653
|
}());
|
|
652
654
|
export { ErpRateioEditorComponent };
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVaLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBZ0JyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBTXpDO0lBZ0pJLGtDQUNxQixFQUFlLEVBQ2YsT0FBK0IsRUFDL0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsY0FBOEI7UUFMOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtC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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRTA0NENjdUxvb2t1cCwgRTA5MVBsZkxvb2t1cCwgRW51bUxvZ2ljYWxPcGVyYXRvciB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICAgIEJ1dHRvblByaW9yaXR5LFxuICAgIEJ1dHRvblNpemUsXG4gICAgRmllbGRUeXBlLFxuICAgIEZvcm1GaWVsZCxcbiAgICBUaWVyZWRNZW51SXRlbURhdGFcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycFJhdGVpb0VkaXRvclNlcnZpY2UgfSBmcm9tICcuL2VycC1yYXRlaW8tZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBHcmF2YXJSYXRlaW9NYW51YWxJbnB1dCxcbiAgICBJbnRlZ3JhY2FvQ29udHJvbGFkb3JpYSxcbiAgICBSYXRlaW9DaGFuZ2VFdmVudCxcbiAgICBSYXRlaW9Db250YSxcbiAgICBSYXRlaW9DQ3VzdG8sXG4gICAgUmF0ZWlvRWRpdG9yQ29uZmlnLFxuICAgIFJhdGVpb0Vycm9yRXZlbnQsXG4gICAgUmF0ZWlvU2F2ZUV2ZW50LFxuICAgIFJldG9ybmFyUmF0ZWlvT3V0cHV0LFxuICAgIFN1Z2VyaXJSYXRlaW9JbnB1dCxcbiAgICBTdWdlcmlyUmF0ZWlvUGFyYW1ldHJvLFxuICAgIFRpcG9Nb3ZpbWVudG8sXG4gICAgQ3JpdGVyaW9SYXRlaW9cbn0gZnJvbSAnLi9lcnAtcmF0ZWlvLWVkaXRvci50eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VycC1yYXRlaW8tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEVycFJhdGVpb0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAgIC8vID09PSBJTlBVVFMgPT09XG4gICAgQElucHV0KCkgaWRNb3ZpbWVudG86IHN0cmluZztcbiAgICBASW5wdXQoKSB0aXBvTW92aW1lbnRvOiBUaXBvTW92aW1lbnRvO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd1N1Z2VzdGFvQnV0dG9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb25maWc6IFJhdGVpb0VkaXRvckNvbmZpZztcblxuICAgIC8qKlxuICAgICAqIENvbnRleHRvIGluaWNpYWwgdXNhZG8gcXVhbmRvIG8gY29tcG9uZW50ZSDDqSBhbGltZW50YWRvIHBvciBpbnB1dHMgZW0gdmV6IGRhIEFQSS5cbiAgICAgKiBBcGxpY2Etc2UgYW8gbW9kbyBzdGFuZGFsb25lIChzZW0gaWRNb3ZpbWVudG8pIGUgYW8gbW9kbyBjb25lY3RhZG8gY29tXG4gICAgICogbG9hZEZyb21BcGkgPSBmYWxzZS4gRm9ybmVjZSB2YWxvckJhc2UsIGZpbGlhbCwgY3JpdMOpcmlvLCBhZ3J1cGFkb3JJZCwgZGF0YXMsIGV0Yy5cbiAgICAgKiBFbSBtb2RvIGNvbmVjdGFkbyBzZW0gY2FyZ2EgdmlhIEFQSSwgw6kgZGVzdGUgY29udGV4dG8gcXVlIGEgZ3JhdmHDp8Ojb1xuICAgICAqIChncmF2YXJSYXRlaW9NYW51YWwpIG9idMOpbSBlMDcwZmlsLCBjcmlSYXQsIGRhdGFCYXNlLCBkYXRhTW92aW1lbnRvIGUgYWdydXBhZG9ySWQuXG4gICAgICovXG4gICAgQElucHV0KCkgaW5pdGlhbENvbnRleHQ/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/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fY2FycmVnYXInKSwgb3JpZ2luYWxFcnJvcjogZXJyIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wdWxhckNvbVJhdGVpb3MocmF0ZWlvczogUmF0ZWlvQ29udGFbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4ucmF0ZWlvc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250YURpYWxvZ0ZpZWxkcygpOiBGb3JtRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmUwOTFQbGZMb29rdXAubW91bnRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6ICdjb250YUZpbmFuY2VpcmEnLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZXhjbHVpZG8nLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbJ2ZhbHNlJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZW1wJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogW3RoaXMuZW1wcmVzYUlkXSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwZXJjZW50dWFsJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnBlcmNlbnR1YWwnKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Eb3VibGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiA3LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCxcbiAgICAgICAgICAgICAgICByaWdodEFkZG9uOiB7IGxhYmVsOiAnJScgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsb3InLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IudmFsb3InKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICBjdXJyZW5uY3k6ICgpID0+IHRoaXMuY3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTgsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENDRGlhbG9nRmllbGRzKCk6IEZvcm1GaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZTA0NENjdUxvb2t1cC5tb3VudE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogJ2NlbnRyb0N1c3RvJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2V4Y2x1aWRvJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydmYWxzZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGVtcCcsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFt0aGlzLmVtcHJlc2FJZF0gfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyY2VudHVhbCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRG91YmxlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogNyxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQsXG4gICAgICAgICAgICAgICAgcmlnaHRBZGRvbjogeyBsYWJlbDogJyUnIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbG9yJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgY3VycmVubmN5OiAoKSA9PiB0aGlzLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE4LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2luY3Jvbml6YSBvcyBjYW1wb3MgcGVyY2VudHVhbCBlIHZhbG9yIGRlIHVtIEZvcm1Hcm91cCBkZSBtb2RhbC5cbiAgICAgKiBRdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmEgcGVyY2VudHVhbCwgcmVjYWxjdWxhIHZhbG9yIChwZXJjZW50dWFsLzEwMCAqIGJhc2UpLlxuICAgICAqIFF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYSB2YWxvciwgcmVjYWxjdWxhIHBlcmNlbnR1YWwgKHZhbG9yL2Jhc2UgKiAxMDApLlxuICAgICAqIE8gYXJndW1lbnRvIGdldEJhc2UgcmV0b3JuYSBhIGJhc2UgdXNhZGEgbm8gY8OhbGN1bG8gKHZhbG9yQmFzZSBnbG9iYWwgb3UgdmFsb3JSYXRlYWRvQ29udGEgZGEgY29udGEgcGFpKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldHVwUGVyY2VudHVhbFZhbG9yU3luYyhmb3JtOiBGb3JtR3JvdXAsIGdldEJhc2U6ICgpID0+IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwZXJjZW50dWFsU2NhbGUgPSB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lTY2FsZSA9IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMjtcblxuICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBjdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IGdldEJhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAocGN0ID09IG51bGwgfHwgYmFzZSA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9WYWxvciA9ICsoKE51bWJlcihwY3QpIC8gMTAwKSAqIGJhc2UpLnRvRml4ZWQoY3VycmVuY3lTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgndmFsb3InKS52YWx1ZSkgIT09IG5vdm9WYWxvcikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgndmFsb3InKS5zZXRWYWx1ZShub3ZvVmFsb3IsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmb3JtLmdldCgndmFsb3InKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8ICFiYXNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9QY3QgPSArKChOdW1iZXIodmFsKSAvIGJhc2UpICogMTAwKS50b0ZpeGVkKHBlcmNlbnR1YWxTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlKSAhPT0gbm92b1BjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnNldFZhbHVlKG5vdm9QY3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgZmllbGQ6ICdjb250YUZpbmFuY2VpcmEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5jb250YV9maW5hbmNlaXJhJykgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6ICdwZXJjZW50dWFsJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiAndmFsb3JSYXRlYWRvQ29udGEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgaXNEaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVmFsaWQ6IHRoaXMucGVyY2VudHVhbFJlc3RhbnRlID09PSAwICYmIHRoaXMudmFsb3JSZXN0YW50ZSA9PT0gMCxcbiAgICAgICAgICAgIHJhdGVpb3M6IHRoaXMuY29udGFzRGF0YVNvdXJjZVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
655
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVaLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBZ0JyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBTXpDO0lBZ0pJLGtDQUNxQixFQUFlLEVBQ2YsT0FBK0IsRUFDL0IsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsY0FBOEI7UUFMOUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtC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QUF6QixTQUFTLENBQUMsYUFBYSxDQUFDOzJEQUF1QjtJQS9EdkMsd0JBQXdCO1FBSnBDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsNC9hQUFpRDtTQUNwRCxDQUFDO09BQ1csd0JBQXdCLENBaW9CcEM7SUFBRCwrQkFBQztDQUFBLEFBam9CRCxJQWlvQkM7U0Fqb0JZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFMDQ0Q2N1TG9va3VwLCBFMDkxUGxmTG9va3VwLCBFbnVtTG9naWNhbE9wZXJhdG9yIH0gZnJvbSAnQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gICAgQnV0dG9uUHJpb3JpdHksXG4gICAgQnV0dG9uU2l6ZSxcbiAgICBGaWVsZFR5cGUsXG4gICAgRm9ybUZpZWxkLFxuICAgIFRpZXJlZE1lbnVJdGVtRGF0YVxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXJwUmF0ZWlvRWRpdG9yU2VydmljZSB9IGZyb20gJy4vZXJwLXJhdGVpby1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEdyYXZhclJhdGVpb01hbnVhbElucHV0LFxuICAgIEludGVncmFjYW9Db250cm9sYWRvcmlhLFxuICAgIFJhdGVpb0NoYW5nZUV2ZW50LFxuICAgIFJhdGVpb0NvbnRhLFxuICAgIFJhdGVpb0NDdXN0byxcbiAgICBSYXRlaW9FZGl0b3JDb25maWcsXG4gICAgUmF0ZWlvRXJyb3JFdmVudCxcbiAgICBSYXRlaW9TYXZlRXZlbnQsXG4gICAgUmV0b3JuYXJSYXRlaW9PdXRwdXQsXG4gICAgU3VnZXJpclJhdGVpb0lucHV0LFxuICAgIFN1Z2VyaXJSYXRlaW9QYXJhbWV0cm8sXG4gICAgVGlwb01vdmltZW50byxcbiAgICBDcml0ZXJpb1JhdGVpb1xufSBmcm9tICcuL2VycC1yYXRlaW8tZWRpdG9yLnR5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXJwLXJhdGVpby1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lcnAtcmF0ZWlvLWVkaXRvci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gPT09IElOUFVUUyA9PT1cbiAgICBASW5wdXQoKSBpZE1vdmltZW50bzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpcG9Nb3ZpbWVudG86IFRpcG9Nb3ZpbWVudG87XG4gICAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93U3VnZXN0YW9CdXR0b24gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNvbmZpZzogUmF0ZWlvRWRpdG9yQ29uZmlnO1xuXG4gICAgLyoqXG4gICAgICogQ29udGV4dG8gaW5pY2lhbCB1c2FkbyBxdWFuZG8gbyBjb21wb25lbnRlIMOpIGFsaW1lbnRhZG8gcG9yIGlucHV0cyBlbSB2ZXogZGEgQVBJLlxuICAgICAqIEFwbGljYS1zZSBhbyBtb2RvIHN0YW5kYWxvbmUgKHNlbSBpZE1vdmltZW50bykgZSBhbyBtb2RvIGNvbmVjdGFkbyBjb21cbiAgICAgKiBsb2FkRnJvbUFwaSA9IGZhbHNlLiBGb3JuZWNlIHZhbG9yQmFzZSwgZmlsaWFsLCBjcml0w6lyaW8sIGFncnVwYWRvcklkLCBkYXRhcywgZXRjLlxuICAgICAqIEVtIG1vZG8gY29uZWN0YWRvIHNlbSBjYXJnYSB2aWEgQVBJLCDDqSBkZXN0ZSBjb250ZXh0byBxdWUgYSBncmF2YcOnw6NvXG4gICAgICogKGdyYXZhclJhdGVpb01hbnVhbCkgb2J0w6ltIGUwNzBmaWwsIGNyaVJhdCwgZGF0YUJhc2UsIGRhdGFNb3ZpbWVudG8gZSBhZ3J1cGFkb3JJZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbml0aWFsQ29udGV4dD86IFBhcnRpYWw8UmV0b3JuYXJSYXRlaW9PdXRwdXQ+O1xuXG4gICAgLyoqIFJhdGVpb3MgaW5pY2lhaXMgcGFyYSBwb3B1bGFyIGEgZ3JpZCBxdWFuZG8gYWxpbWVudGFkbyBwb3IgaW5wdXRzLiAqL1xuICAgIEBJbnB1dCgpIGluaXRpYWxSYXRlaW9zPzogUmF0ZWlvQ29udGFbXTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xhIHNlIG8gcmF0ZWlvIGRldmUgc2VyIGNhcnJlZ2FkbyBhdXRvbWF0aWNhbWVudGUgdmlhIEFQSSBxdWFuZG9cbiAgICAgKiBpZE1vdmltZW50byBlc3TDoSBwcmVzZW50ZSAobW9kbyBjb25lY3RhZG8pLiBEZWZhdWx0OiB0cnVlLlxuICAgICAqXG4gICAgICogRGVmaW5hIGNvbW8gZmFsc2UgcGFyYSByZXN0YXVyYXIgdW0gcmF0ZWlvIHF1ZSBvIHVzdcOhcmlvIGrDoSBkaXN0cmlidWl1IGUgcXVlXG4gICAgICogYWluZGEgbsOjbyBmb2kgcGVyc2lzdGlkbyBubyBiYWNrZW5kIGRlIHJhdGVpbzogbyBjb21wb25lbnRlIHBvcHVsYSBhIGdyaWQgYVxuICAgICAqIHBhcnRpciBkZSBpbml0aWFsQ29udGV4dC9pbml0aWFsUmF0ZWlvcyBlIG1hbnTDqW0gbyBib3TDo28gU2FsdmFyIGUgYSBncmF2YcOnw6NvXG4gICAgICogdmluY3VsYWRhIGFvIG1vdmltZW50by5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkRnJvbUFwaSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSBlbXByZXNhIHVzYWRvIHBhcmEgZmlsdHJhciBvcyBsb29rdXBzIGRlIGNvbnRhIGZpbmFuY2VpcmEgZSBjZW50cm8gZGUgY3VzdG8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgc29icmVzY3JldmUgbyBJRCBkZXJpdmFkbyBkbyBjb250ZXh0byBjYXJyZWdhZG8vaW5pY2lhbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXByZXNhSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGZpbGlhbCB1c2FkbyBwZWxhIEFQSSBkZSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqIFF1YW5kbyBpbmZvcm1hZG8sIHRlbSBwcmlvcmlkYWRlIHNvYnJlIG8gSUQgZGVyaXZhZG8gZG8gY29udGV4dG8uXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsaWFsSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENyaXTDqXJpbyBkZSByYXRlaW8gcGFkcsOjbyB1c2FkbyBwZWxhIEFQSSBkZSBzdWdlc3TDo28uXG4gICAgICogRGVmYXVsdDogJ1YzJyAoRGVzcGVzYXMg4oCUIENvbnRhIFggQy4gQ3VzdG9zKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjcmlSYXQ6IENyaXRlcmlvUmF0ZWlvID0gJ1YzJztcblxuICAgIC8qKlxuICAgICAqIEPDs2RpZ28gSVNPIGRhIG1vZWRhIHBhcmEgZm9ybWF0YcOnw6NvIGRlIHZhbG9yZXMgbmEgZ3JpZCAoZXg6ICdCUkwnLCAnVVNEJykuXG4gICAgICogU2UgbsOjbyBpbmZvcm1hZG8sIHVzYSBlc3RpbG8gZGVjaW1hbCBzZW0gc8OtbWJvbG8uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG5cbiAgICAvLyA9PT0gT1VUUFVUUyA9PT1cbiAgICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmF0ZWlvU2F2ZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmF0ZWlvQ2hhbmdlRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9FcnJvckV2ZW50PigpO1xuXG4gICAgLy8gPT09IFJFRkVSw4pOQ0lBUyBETyBURU1QTEFURSA9PT1cbiAgICBAVmlld0NoaWxkKCd0YWJsZVJhdGVpbycpIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuICAgIC8vID09PSBDT05TVEFOVEVTIEVYUE9TVEFTIEFPIFRFTVBMQVRFID09PVxuICAgIHJlYWRvbmx5IEJ1dHRvblByaW9yaXR5ID0gQnV0dG9uUHJpb3JpdHk7XG4gICAgcmVhZG9ubHkgQnV0dG9uU2l6ZSA9IEJ1dHRvblNpemU7XG5cbiAgICAvLyA9PT0gRVNUQURPID09PVxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2FkZWRDb250ZXh0OiBSZXRvcm5hclJhdGVpb091dHB1dDtcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBncmlkQ29sdW1uczogYW55W107XG4gICAgcHVibGljIGNvbnRhc0RhdGFTb3VyY2U6IFJhdGVpb0NvbnRhW10gPSBbXTtcbiAgICBwdWJsaWMgZWRpdGluZ1Jvd0JhY2t1cDogUmF0ZWlvQ29udGEgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgZWRpdGluZ0NDQmFja3VwOiBSYXRlaW9DQ3VzdG8gfCBudWxsID0gbnVsbDtcblxuICAgIC8vID09PSBNT0RBTCBDT05UQSBGSU5BTkNFSVJBID09PVxuICAgIHB1YmxpYyBkaXNwbGF5Q29udGFEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgY29udGFEaWFsb2dGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgY29udGFEaWFsb2dGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nQ29udGFJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyA9PT0gTU9EQUwgQ0VOVFJPIERFIENVU1RPID09PVxuICAgIHB1YmxpYyBkaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgY2NEaWFsb2dGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgY2NEaWFsb2dGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NDb250YUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgZWRpdGluZ0NDSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgZWZmZWN0aXZlUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGljOiBJbnRlZ3JhY2FvQ29udHJvbGFkb3JpYSB8IHVuZGVmaW5lZCA9IHRoaXMubG9hZGVkQ29udGV4dD8uaW50ZWdyYWNhb0NvbnRyb2xhZG9yaWE7XG4gICAgICAgIGNvbnN0IGhhc0ludGVncmFjYW8gPSAhIWljICYmIChcbiAgICAgICAgICAgIGljLmNvbnRhYmlsaWRhZGUgPT09IHRydWUgfHxcbiAgICAgICAgICAgIGljLnRyaWJ1dG9zID09PSB0cnVlIHx8XG4gICAgICAgICAgICBpYy5wYXRyaW1vbmlvID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGhhc0ludGVncmFjYW87XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb250YXNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnY29udGFzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsb3JCYXNlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRlZENvbnRleHQ/LnZhbG9yQmFzZSA/PyAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGVyY2VudHVhbFJlc3RhbnRlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNvbWEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29udGEpID0+IGFjYyArIChjb250YS5wZXJjZW50dWFsIHx8IDApLCAwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiArKDEwMCAtIHNvbWEpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsb3JSZXN0YW50ZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzb21hID0gdGhpcy5jb250YXNEYXRhU291cmNlLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbnRhKSA9PiBhY2MgKyAoY29udGEudmFsb3JSYXRlYWRvQ29udGEgfHwgMCksIDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICsodGhpcy52YWxvckJhc2UgLSBzb21hKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJGb3JtYXRPcHRpb25zKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5Q29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdkZWNpbWFsJyxcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMixcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBFcnBSYXRlaW9FZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlMDkxUGxmTG9va3VwOiBFMDkxUGxmTG9va3VwLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGUwNDRDY3VMb29rdXA6IEUwNDRDY3VMb29rdXAsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBjb250YXM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vdmltZW50b0NoYW5nZWQgPSBjaGFuZ2VzLmlkTW92aW1lbnRvIHx8IGNoYW5nZXMudGlwb01vdmltZW50bztcblxuICAgICAgICBpZiAobW92aW1lbnRvQ2hhbmdlZCAmJiB0aGlzLmlkTW92aW1lbnRvICYmIHRoaXMudGlwb01vdmltZW50byAmJiB0aGlzLmxvYWRGcm9tQXBpKSB7XG4gICAgICAgICAgICAvLyBNb2RvIGNvbmVjdGFkbyBjb20gY2FyZ2EgdmlhIEFQSVxuICAgICAgICAgICAgdGhpcy5jYXJyZWdhclJhdGVpbygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnB1dERyaXZlbiAmJiAoY2hhbmdlcy5pbml0aWFsQ29udGV4dCB8fCBjaGFuZ2VzLmluaXRpYWxSYXRlaW9zIHx8IGNoYW5nZXMubG9hZEZyb21BcGkgfHwgbW92aW1lbnRvQ2hhbmdlZCkpIHtcbiAgICAgICAgICAgIC8vIEFsaW1lbnRhZG8gcG9yIGlucHV0czogbW9kbyBzdGFuZGFsb25lIE9VIGNvbmVjdGFkbyBzZW0gY2FyZ2EgdmlhIEFQSVxuICAgICAgICAgICAgdGhpcy5pbmljaWFsaXphclBvcklucHV0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldG9ybmEgbyBjb250ZcO6ZG8gYXR1YWwgZGEgZ3JpZCAodXNvIHN0YW5kYWxvbmUg4oCUIHF1ZW0gY29uc29tZSBsw6ogb3MgcmF0ZWlvcyBkYXF1aSkuICovXG4gICAgcHVibGljIGdldCByYXRlaW9zKCk6IFJhdGVpb0NvbnRhW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YXNEYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGVzdMOhIG9wZXJhbmRvIHNlbSBpZE1vdmltZW50byAobW9kbyBzdGFuZGFsb25lKS4gKi9cbiAgICBwdWJsaWMgZ2V0IGlzU3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlkTW92aW1lbnRvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgw6kgYWxpbWVudGFkbyBwb3IgaW5wdXRzIGVtIHZleiBkYSBBUEk6XG4gICAgICogbW9kbyBzdGFuZGFsb25lIChzZW0gaWRNb3ZpbWVudG8pIE9VIG1vZG8gY29uZWN0YWRvIGNvbSBsb2FkRnJvbUFwaSA9IGZhbHNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNJbnB1dERyaXZlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFsb25lIHx8ICF0aGlzLmxvYWRGcm9tQXBpO1xuICAgIH1cblxuICAgIC8qKiBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGVzdMOhIHByb250byBwYXJhIGV4aWJpciBVSSAoY2FycmVnb3UgdmlhIEFQSSBPVSBmb2kgaW5pY2lhbGl6YWRvIHBvciBpbnB1dHMpLiAqL1xuICAgIHB1YmxpYyBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWRDb250ZXh0IHx8IHRoaXMuaXNJbnB1dERyaXZlbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8vID09PSBBw4fDlUVTIFDDmkJMSUNBUyA9PT1cblxuICAgIHB1YmxpYyBvblNhbHZhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWZmZWN0aXZlUmVhZE9ubHkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5sb2FkZWRDb250ZXh0O1xuICAgICAgICBpZiAoIWN0eD8uZTA3MGZpbD8uaWQgfHwgIWN0eD8uY3JpUmF0KSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fY29udGV4dG9faW5jb21wbGV0bycpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX3RpdHVsbycpLFxuICAgICAgICAgICAgICAgIGRldGFpbDogbWVzc2FnZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoeyBvcGVyYWNhbzogJ3NhdmUnLCBtZXNzYWdlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQ6IEdyYXZhclJhdGVpb01hbnVhbElucHV0ID0ge1xuICAgICAgICAgICAgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sXG4gICAgICAgICAgICB0aXBvTW92aW1lbnRvOiB0aGlzLnRpcG9Nb3ZpbWVudG8sXG4gICAgICAgICAgICBhZ3J1cGFkb3JJZDogY3R4LmFncnVwYWRvcklkLFxuICAgICAgICAgICAgZTA3MGZpbF9pZDogY3R4LmUwNzBmaWwuaWQsXG4gICAgICAgICAgICBjcml0ZXJpb1JhdGVpbzogY3R4LmNyaVJhdCxcbiAgICAgICAgICAgIGRhdGFCYXNlOiBjdHguZGF0YUJhc2UsXG4gICAgICAgICAgICBkYXRhTW92aW1lbnRvOiBjdHguZGF0YU1vdmltZW50byxcbiAgICAgICAgICAgIHJhdGVpb3M6IHRoaXMuY29udGFzRGF0YVNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZS5ncmF2YXJSYXRlaW9NYW51YWwoaW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5zYWx2b19jb21fc3VjZXNzb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnNhbHZvX2NvbV9zdWNlc3NvX2RldGFsaGUnKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlLmVtaXQoeyBpZE1vdmltZW50bzogdGhpcy5pZE1vdmltZW50bywgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvLCByYXRlaW9zOiB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX3NhbHZhcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX3RpdHVsbycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoeyBvcGVyYWNhbzogJ3NhdmUnLCBtZXNzYWdlOiBkZXRhaWwsIG9yaWdpbmFsRXJyb3I6IGVyciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Z2VyaXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVmZmVjdGl2ZVJlYWRPbmx5IHx8ICF0aGlzLnNob3dTdWdlc3Rhb0J1dHRvbikgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmxvYWRlZENvbnRleHQ7XG4gICAgICAgIGNvbnN0IGUwNzBmaWxfaWQgPSB0aGlzLmZpbGlhbElkIHx8IGN0eD8uZTA3MGZpbD8uaWQ7XG4gICAgICAgIGNvbnN0IGNyaXRlcmlvID0gdGhpcy5jcmlSYXQgfHwgY3R4Py5jcmlSYXQ7XG4gICAgICAgIGNvbnN0IHZhbG9yQmFzZSA9IGN0eD8udmFsb3JCYXNlID8/IDA7XG5cbiAgICAgICAgaWYgKCFlMDcwZmlsX2lkIHx8ICFjcml0ZXJpbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldHJvOiBTdWdlcmlyUmF0ZWlvUGFyYW1ldHJvID0ge1xuICAgICAgICAgICAgZTA3MGZpbF9pZCxcbiAgICAgICAgICAgIHZhbG9yQmFzZSxcbiAgICAgICAgICAgIGNyaVJhdDogY3JpdGVyaW8sXG4gICAgICAgICAgICBkYXRhQmFzZTogY3R4Py5kYXRhQmFzZSxcbiAgICAgICAgICAgIGRhdGFNb3ZpbWVudG86IGN0eD8uZGF0YU1vdmltZW50b1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmlkTW92aW1lbnRvKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uaWRNb3ZpbWVudG8gPSB0aGlzLmlkTW92aW1lbnRvO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQ6IFN1Z2VyaXJSYXRlaW9JbnB1dCA9IHtcbiAgICAgICAgICAgIHRpcG86IHRoaXMudGlwb01vdmltZW50byxcbiAgICAgICAgICAgIHBhcmFtZXRyb3M6IFtwYXJhbWV0cm9dXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnN1Z2VyaXJSYXRlaW8oaW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Z2VzdGFvID0gKHJlc3Auc3VnZXN0YW8gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZChzID0+ICF0aGlzLmlkTW92aW1lbnRvIHx8IHMuaWRNb3ZpbWVudG8gPT09IHRoaXMuaWRNb3ZpbWVudG8pXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzcC5zdWdlc3RhbyB8fCBbXSlbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhdGVpbyA9IHN1Z2VzdGFvPy5yYXRlaW87XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3VnZXN0YW8gfHwgIXJhdGVpbyB8fCByYXRlaW8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyhyYXRlaW8pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnc3VnZ2VzdCcsIG1lc3NhZ2U6IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX3N1Z2VyaXInKSwgb3JpZ2luYWxFcnJvcjogZXJyIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8vID09PSBNT0RBTCBDT05UQSBGSU5BTkNFSVJBID09PVxuXG4gICAgcHVibGljIG9wZW5Db250YURpYWxvZyhlZGl0SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ29udGFJbmRleCA9IGVkaXRJbmRleCAhPSBudWxsID8gZWRpdEluZGV4IDogbnVsbDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nUGN0ID0gdGhpcy5lZGl0aW5nQ29udGFJbmRleCAhPSBudWxsXG4gICAgICAgICAgICA/IHRoaXMucGVyY2VudHVhbFJlc3RhbnRlICsgdGhpcy5jb250YXNEYXRhU291cmNlW3RoaXMuZWRpdGluZ0NvbnRhSW5kZXhdLnBlcmNlbnR1YWxcbiAgICAgICAgICAgIDogdGhpcy5wZXJjZW50dWFsUmVzdGFudGU7XG5cbiAgICAgICAgbGV0IGNvbnRhVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgcGVyY2VudHVhbFZhbHVlOiBudW1iZXIgfCBudWxsID0gcmVtYWluaW5nUGN0ID4gMCA/IHJlbWFpbmluZ1BjdCA6IG51bGw7XG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGxcbiAgICAgICAgICAgID8gKygocGVyY2VudHVhbFZhbHVlIC8gMTAwKSAqIHRoaXMudmFsb3JCYXNlKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMilcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nQ29udGFJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDb250YUluZGV4XTtcbiAgICAgICAgICAgIGNvbnRhVmFsdWUgPSB7IGlkOiBjb250YS5pZENvbnRhRmluYW5jZWlyYSwgbGFiZWw6IGNvbnRhLmNvbnRhRmluYW5jZWlyYSB9O1xuICAgICAgICAgICAgcGVyY2VudHVhbFZhbHVlID0gY29udGEucGVyY2VudHVhbDtcbiAgICAgICAgICAgIHZhbG9yVmFsdWUgPSBjb250YS52YWxvclJhdGVhZG9Db250YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRhRmluYW5jZWlyYTogW3sgdmFsdWU6IGNvbnRhVmFsdWUsIGRpc2FibGVkOiB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGwgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwZXJjZW50dWFsOiBbeyB2YWx1ZTogcGVyY2VudHVhbFZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICB2YWxvcjogW3sgdmFsdWU6IHZhbG9yVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXR1cFBlcmNlbnR1YWxWYWxvclN5bmModGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cCwgKCkgPT4gdGhpcy52YWxvckJhc2UpO1xuICAgICAgICB0aGlzLmNvbnRhRGlhbG9nRmllbGRzID0gdGhpcy5nZXRDb250YURpYWxvZ0ZpZWxkcygpO1xuICAgICAgICB0aGlzLmRpc3BsYXlDb250YURpYWxvZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZUNvbnRhRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5pbnZhbGlkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGNvbnRhRmluYW5jZWlyYSA9IGRhdGEuY29udGFGaW5hbmNlaXJhO1xuICAgICAgICBjb25zdCBwZXJjZW50dWFsID0gTnVtYmVyKGRhdGEucGVyY2VudHVhbCkgfHwgMDtcbiAgICAgICAgY29uc3QgdmFsb3IgPSArKE51bWJlcihkYXRhLnZhbG9yKSB8fCAwKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMik7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YS5wZXJjZW50dWFsID0gcGVyY2VudHVhbDtcbiAgICAgICAgICAgIGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhID0gdmFsb3I7XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlkQ29udGFGaW5hbmNlaXJhID0gY29udGFGaW5hbmNlaXJhPy5pZCB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGEgPSBjb250YUZpbmFuY2VpcmE/LmxhYmVsIHx8ICcnO1xuXG4gICAgICAgICAgICAvLyBWYWxpZGHDp8OjbyBleHRyYTogYmxvcXVlaWEgZHVwbGljaWRhZGVcbiAgICAgICAgICAgIGNvbnN0IGphRXhpc3RlID0gdGhpcy5jb250YXNEYXRhU291cmNlLnNvbWUoYyA9PiBjLmlkQ29udGFGaW5hbmNlaXJhID09PSBpZENvbnRhRmluYW5jZWlyYSk7XG4gICAgICAgICAgICBpZiAoamFFeGlzdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLmdldCgnY29udGFGaW5hbmNlaXJhJykuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm92YUNvbnRhOiBSYXRlaW9Db250YSA9IHtcbiAgICAgICAgICAgICAgICBpZENvbnRhRmluYW5jZWlyYSxcbiAgICAgICAgICAgICAgICBjb250YUZpbmFuY2VpcmE6IGxhYmVsQ29udGEsXG4gICAgICAgICAgICAgICAgcGVyY2VudHVhbCxcbiAgICAgICAgICAgICAgICB2YWxvclJhdGVhZG9Db250YTogdmFsb3IsXG4gICAgICAgICAgICAgICAgcmF0ZWlvc0NDdXN0bzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlLCBub3ZhQ29udGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5Q29udGFEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZUNvbnRhRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vID09PSBNT0RBTCBDRU5UUk8gREUgQ1VTVE8gPT09XG5cbiAgICBwdWJsaWMgb3BlbkNDRGlhbG9nKGNvbnRhSW5kZXg6IG51bWJlciwgZWRpdENDSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ0NDb250YUluZGV4ID0gY29udGFJbmRleDtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ0NJbmRleCA9IGVkaXRDQ0luZGV4ICE9IG51bGwgPyBlZGl0Q0NJbmRleCA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbY29udGFJbmRleF07XG4gICAgICAgIGNvbnN0IGNjTGlzdCA9IGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW107XG4gICAgICAgIGNvbnN0IHNvbWFDQyA9IGNjTGlzdC5yZWR1Y2UoKGFjYywgY2MsIGkpID0+IGFjYyArIChpID09PSB0aGlzLmVkaXRpbmdDQ0luZGV4ID8gMCA6IChjYy5wZXJjZW50dWFsIHx8IDApKSwgMCk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1BjdCA9ICsoMTAwIC0gc29tYUNDKS50b0ZpeGVkKHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0KTtcbiAgICAgICAgY29uc3QgdmFsb3JCYXNlQ0MgPSBjb250YS52YWxvclJhdGVhZG9Db250YSB8fCAwO1xuXG4gICAgICAgIGxldCBjY1ZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IHBlcmNlbnR1YWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHJlbWFpbmluZ1BjdCA+IDAgPyByZW1haW5pbmdQY3QgOiBudWxsO1xuICAgICAgICBsZXQgdmFsb3JWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHBlcmNlbnR1YWxWYWx1ZSAhPSBudWxsXG4gICAgICAgICAgICA/ICsoKHBlcmNlbnR1YWxWYWx1ZSAvIDEwMCkgKiB2YWxvckJhc2VDQykudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjY0xpc3RbdGhpcy5lZGl0aW5nQ0NJbmRleF07XG4gICAgICAgICAgICBjY1ZhbHVlID0geyBpZDogY2MuaWRDZW50cm9DdXN0bywgbGFiZWw6IGNjLmRlc2NDQ3VzdG8gfHwgY2MuaWRDZW50cm9DdXN0byB9O1xuICAgICAgICAgICAgcGVyY2VudHVhbFZhbHVlID0gY2MucGVyY2VudHVhbDtcbiAgICAgICAgICAgIHZhbG9yVmFsdWUgPSBjYy52YWxvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNlbnRyb0N1c3RvOiBbeyB2YWx1ZTogY2NWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBlcmNlbnR1YWw6IFt7IHZhbHVlOiBwZXJjZW50dWFsVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHZhbG9yOiBbeyB2YWx1ZTogdmFsb3JWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB2YWxvckJhc2VDQyk7XG4gICAgICAgIHRoaXMuY2NEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENDRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNDRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ0NEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgY29uc3QgY2VudHJvQ3VzdG8gPSBkYXRhLmNlbnRyb0N1c3RvO1xuICAgICAgICBjb25zdCBwZXJjZW50dWFsID0gTnVtYmVyKGRhdGEucGVyY2VudHVhbCkgfHwgMDtcbiAgICAgICAgY29uc3QgdmFsb3IgPSArKE51bWJlcihkYXRhLnZhbG9yKSB8fCAwKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMik7XG4gICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW3RoaXMuZWRpdGluZ0NDQ29udGFJbmRleF07XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjb250YS5yYXRlaW9zQ0N1c3RvW3RoaXMuZWRpdGluZ0NDSW5kZXhdO1xuICAgICAgICAgICAgY2MucGVyY2VudHVhbCA9IHBlcmNlbnR1YWw7XG4gICAgICAgICAgICBjYy52YWxvciA9IHZhbG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWRDZW50cm9DdXN0byA9IGNlbnRyb0N1c3RvPy5pZCB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ0N1c3RvID0gY2VudHJvQ3VzdG8/LmxhYmVsIHx8ICcnO1xuXG4gICAgICAgICAgICAvLyBWYWxpZGHDp8OjbyBleHRyYTogYmxvcXVlaWEgZHVwbGljaWRhZGUgZGVudHJvIGRhIG1lc21hIGNvbnRhXG4gICAgICAgICAgICBjb25zdCBjY0xpc3QgPSBjb250YS5yYXRlaW9zQ0N1c3RvIHx8IFtdO1xuICAgICAgICAgICAgY29uc3QgamFFeGlzdGUgPSBjY0xpc3Quc29tZShjYyA9PiBjYy5pZENlbnRyb0N1c3RvID09PSBpZENlbnRyb0N1c3RvKTtcbiAgICAgICAgICAgIGlmIChqYUV4aXN0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAuZ2V0KCdjZW50cm9DdXN0bycpLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBbLi4uY2NMaXN0LCB7IGlkQ2VudHJvQ3VzdG8sIGRlc2NDQ3VzdG86IGxhYmVsQ0N1c3RvLCBwZXJjZW50dWFsLCB2YWxvciB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi50aGlzLmNvbnRhc0RhdGFTb3VyY2VdO1xuICAgICAgICB0aGlzLmRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25IaWRlQ0NEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNDRGlhbG9nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gPT09IEHDh8OVRVMgREEgVEFCRUxBID09PVxuXG4gICAgcHVibGljIG9uRGVsZXRlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24ubGVuZ3RoKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBpZHNUb1JlbW92ZSA9IG5ldyBTZXQodGhpcy5zZWxlY3Rpb24ubWFwKHMgPT4gcy5pZENvbnRhRmluYW5jZWlyYSkpO1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuZmlsdGVyKGMgPT4gIWlkc1RvUmVtb3ZlLmhhcyhjLmlkQ29udGFGaW5hbmNlaXJhKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyQ29udGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyQ2VudHJvQ3VzdG8oY29udGFJbmRleDogbnVtYmVyLCBjY0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbY29udGFJbmRleF07XG4gICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBjb250YS5yYXRlaW9zQ0N1c3RvLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gY2NJbmRleCk7XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi50aGlzLmNvbnRhc0RhdGFTb3VyY2VdO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWVudU9wdGlvbnNQZXJSb3cocm93RGF0YTogUmF0ZWlvQ29udGEsIHJvd0luZGV4OiBudW1iZXIpOiBUaWVyZWRNZW51SXRlbURhdGFbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZWRpdGFyJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkNvbnRhRGlhbG9nKHJvd0luZGV4KSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmFkaWNpb25hcl9jZW50cm9fY3VzdG8nKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuQ0NEaWFsb2cocm93SW5kZXgpIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXhjbHVpcicpLCBjb21tYW5kOiAoKSA9PiB0aGlzLnJlbW92ZXJDb250YShyb3dJbmRleCkgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDQ01lbnVPcHRpb25zKGNvbnRhSW5kZXg6IG51bWJlciwgY2NJbmRleDogbnVtYmVyKTogVGllcmVkTWVudUl0ZW1EYXRhW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVkaXRhcicpLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5DQ0RpYWxvZyhjb250YUluZGV4LCBjY0luZGV4KSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmV4Y2x1aXInKSwgY29tbWFuZDogKCkgPT4gdGhpcy5yZW1vdmVyQ2VudHJvQ3VzdG8oY29udGFJbmRleCwgY2NJbmRleCkgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250YUluZGV4KHJvd0RhdGE6IFJhdGVpb0NvbnRhKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFzRGF0YVNvdXJjZS5pbmRleE9mKHJvd0RhdGEpO1xuICAgIH1cblxuICAgIC8vID09PSBQUklWQURPUyA9PT1cblxuICAgIC8qKiBJbmljaWFsaXphIG8gY29tcG9uZW50ZSBhIHBhcnRpciBkb3MgaW5wdXRzIChzZW0gY2hhbWFkYSDDoCBBUEkgZGUgY2FyZ2EpLiAqL1xuICAgIHByaXZhdGUgaW5pY2lhbGl6YXJQb3JJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGVkQ29udGV4dCA9ICh0aGlzLmluaXRpYWxDb250ZXh0IHx8IHt9KSBhcyBSZXRvcm5hclJhdGVpb091dHB1dDtcbiAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyh0aGlzLmluaXRpYWxSYXRlaW9zIHx8IFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmVtcHJlc2FJZCkge1xuICAgICAgICAgICAgdGhpcy5lbXByZXNhSWQgPSB0aGlzLmluaXRpYWxDb250ZXh0Py5lMDcwZmlsPy5lMDcwZW1wPy5pZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FycmVnYXJSYXRlaW8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLnJldG9ybmFyUmF0ZWlvKHsgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50byB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAob3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkQ29udGV4dCA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyhvdXRwdXQucmF0ZWlvIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVtcHJlc2FJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXByZXNhSWQgPSBvdXRwdXQuZTA3MGZpbC5lMDcwZW1wLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB0aGlzLmVycm9yLmVtaXQoeyBvcGVyYWNhbzogJ2xvYWQnLCBtZXNzYWdlOiBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19jYXJyZWdhcicpLCBvcmlnaW5hbEVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3B1bGFyQ29tUmF0ZWlvcyhyYXRlaW9zOiBSYXRlaW9Db250YVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi5yYXRlaW9zXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRhRGlhbG9nRmllbGRzKCk6IEZvcm1GaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZTA5MVBsZkxvb2t1cC5tb3VudE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogJ2NvbnRhRmluYW5jZWlyYScsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdleGNsdWlkbycsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnZmFsc2UnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3NpdEZpbicsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnVkEnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbdGhpcy5lbXByZXNhSWRdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlcmNlbnR1YWwnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkRvdWJsZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0LFxuICAgICAgICAgICAgICAgIHJpZ2h0QWRkb246IHsgbGFiZWw6ICclJyB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWxvcicsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgIGN1cnJlbm5jeTogKCkgPT4gdGhpcy5jdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxOCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q0NEaWFsb2dGaWVsZHMoKTogRm9ybUZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5lMDQ0Q2N1TG9va3VwLm1vdW50T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiAnY2VudHJvQ3VzdG8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZXhjbHVpZG8nLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbJ2ZhbHNlJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdzaXRDY3UnLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbJ1ZBJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZW1wJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogW3RoaXMuZW1wcmVzYUlkXSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwZXJjZW50dWFsJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnBlcmNlbnR1YWwnKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Eb3VibGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiA3LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCxcbiAgICAgICAgICAgICAgICByaWdodEFkZG9uOiB7IGxhYmVsOiAnJScgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsb3InLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IudmFsb3InKSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDYsIGxnOiA2LCB4bDogNiB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICBjdXJyZW5uY3k6ICgpID0+IHRoaXMuY3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTgsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaW5jcm9uaXphIG9zIGNhbXBvcyBwZXJjZW50dWFsIGUgdmFsb3IgZGUgdW0gRm9ybUdyb3VwIGRlIG1vZGFsLlxuICAgICAqIFF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYSBwZXJjZW50dWFsLCByZWNhbGN1bGEgdmFsb3IgKHBlcmNlbnR1YWwvMTAwICogYmFzZSkuXG4gICAgICogUXVhbmRvIG8gdXN1w6FyaW8gYWx0ZXJhIHZhbG9yLCByZWNhbGN1bGEgcGVyY2VudHVhbCAodmFsb3IvYmFzZSAqIDEwMCkuXG4gICAgICogTyBhcmd1bWVudG8gZ2V0QmFzZSByZXRvcm5hIGEgYmFzZSB1c2FkYSBubyBjw6FsY3VsbyAodmFsb3JCYXNlIGdsb2JhbCBvdSB2YWxvclJhdGVhZG9Db250YSBkYSBjb250YSBwYWkpLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0dXBQZXJjZW50dWFsVmFsb3JTeW5jKGZvcm06IEZvcm1Hcm91cCwgZ2V0QmFzZTogKCkgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnR1YWxTY2FsZSA9IHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0O1xuICAgICAgICBjb25zdCBjdXJyZW5jeVNjYWxlID0gdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyO1xuXG4gICAgICAgIGZvcm0uZ2V0KCdwZXJjZW50dWFsJykudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocGN0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gZ2V0QmFzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChwY3QgPT0gbnVsbCB8fCBiYXNlID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgY29uc3Qgbm92b1ZhbG9yID0gKygoTnVtYmVyKHBjdCkgLyAxMDApICogYmFzZSkudG9GaXhlZChjdXJyZW5jeVNjYWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGZvcm0uZ2V0KCd2YWxvcicpLnZhbHVlKSAhPT0gbm92b1ZhbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCd2YWxvcicpLnNldFZhbHVlKG5vdm9WYWxvciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZvcm0uZ2V0KCd2YWxvcicpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IGdldEJhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsID09IG51bGwgfHwgIWJhc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgY29uc3Qgbm92b1BjdCA9ICsoKE51bWJlcih2YWwpIC8gYmFzZSkgKiAxMDApLnRvRml4ZWQocGVyY2VudHVhbFNjYWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGZvcm0uZ2V0KCdwZXJjZW50dWFsJykudmFsdWUpICE9PSBub3ZvUGN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCdwZXJjZW50dWFsJykuc2V0VmFsdWUobm92b1BjdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JpZENvbHVtbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBmaWVsZDogJ2NvbnRhRmluYW5jZWlyYScsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmNvbnRhX2ZpbmFuY2VpcmEnKSB9LFxuICAgICAgICAgICAgeyBmaWVsZDogJ3BlcmNlbnR1YWwnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJykgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6ICd2YWxvclJhdGVhZG9Db250YScsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJykgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBpc0RpcnR5OiB0cnVlLFxuICAgICAgICAgICAgaXNWYWxpZDogdGhpcy5wZXJjZW50dWFsUmVzdGFudGUgPT09IDAgJiYgdGhpcy52YWxvclJlc3RhbnRlID09PSAwLFxuICAgICAgICAgICAgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|