@valtimo/dossier 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/dossier-detail/dossier-detail.component.mjs +3 -3
- package/esm2020/lib/dossier-list/dossier-list.component.mjs +24 -17
- package/esm2020/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +3 -6
- package/esm2020/lib/dossier.service.mjs +1 -6
- package/esm2020/lib/services/dossier-column.service.mjs +64 -0
- package/esm2020/lib/services/index.mjs +3 -0
- package/esm2020/public_api.mjs +2 -1
- package/fesm2015/valtimo-dossier.mjs +143 -91
- package/fesm2015/valtimo-dossier.mjs.map +1 -1
- package/fesm2020/valtimo-dossier.mjs +153 -96
- package/fesm2020/valtimo-dossier.mjs.map +1 -1
- package/lib/dossier-list/dossier-list.component.d.ts +4 -2
- package/lib/dossier-list/dossier-list.component.d.ts.map +1 -1
- package/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +0 -1
- package/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
- package/lib/dossier.service.d.ts +0 -1
- package/lib/dossier.service.d.ts.map +1 -1
- package/lib/services/dossier-column.service.d.ts +16 -0
- package/lib/services/dossier-column.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +3 -0
- package/lib/services/index.d.ts.map +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/public_api.d.ts.map +1 -1
|
@@ -148,10 +148,10 @@ export class DossierDetailComponent {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
DossierDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierDetailComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.TranslateService }, { token: i2.DocumentService }, { token: i3.ProcessService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.Location }, { token: i6.TabService }, { token: i7.ConfigService }, { token: i8.KeycloakService }, { token: i9.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
DossierDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DossierDetailComponent, selector: "valtimo-dossier-detail", viewQueries: [{ propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <div class=\"card-header bg-light card-header-divider pb-2\">\n <div class=\"row\" *ngIf=\"{canHaveAssignee: canHaveAssignee$ | async} as obs\">\n <div class=\"col\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailHeader;\n context: {canHaveAssignee: obs.canHaveAssignee}\n \"\n ></ng-container>\n </div>\n <div class=\"btn-group mt-m3px mb-3 col-auto\">\n <valtimo-extension\n module=\"dossier\"\n page=\"dossier-detail\"\n section=\"card-header\"\n ></valtimo-extension>\n <ng-container\n *ngTemplateOutlet=\"claimButton; context: {canHaveAssignee: obs.canHaveAssignee}\"\n ></ng-container>\n <div class=\"dropdown\">\n <button\n class=\"btn btn-primary dropdown-toggle\"\n type=\"button\"\n id=\"startProcessDropdown\"\n placement=\"bottom\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <span>{{ 'dossier.startSubProcess' | translate }}</span>\n <i class=\"ml-1 mdi mdi-chevron-down\"></i>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-right\"\n aria-labelledby=\"startProcessDropdown\"\n >\n <button\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n class=\"dropdown-item p\"\n href=\"#\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{ processDocumentDefinition.processName }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\" *ngFor=\"let tab of tabLoader.tabs\">\n <a\n id=\"{{ tab.name }}-tab\"\n class=\"nav-link clickable\"\n [ngClass]=\"{active: tab.isActive()}\"\n data-toggle=\"tab\"\n (click)=\"tabLoader.load(tab)\"\n >\n {{ tabLoader.translateTabName(tab) }}\n </a>\n </li>\n </ul>\n <div class=\"card-body bg-white p-5 position-relative tab-container\">\n <ng-template #tabContainer>Loading...</ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </div>\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n </div>\n</div>\n\n<ng-template #caseDetailHeader let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row\" *ngIf=\"customDossierHeaderItems.length > 0; else defaultTitle\">\n <span\n class=\"mb-0 mt-0 pb-2 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n [ngClass]=\"{\n h1: item.textSize === 'xl',\n h2: item.textSize === 'lg',\n h3: item.textSize === 'md',\n h4: item.textSize === 'sm',\n h5: item.textSize === 'xs'\n }\"\n *ngFor=\"let item of customDossierHeaderItems\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.label && item.value\">: </span>\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"caseDetailAssignee; context: {canHaveAssignee: canHaveAssignee}\"\n ></ng-container>\n</ng-template>\n\n<ng-template #defaultTitle>\n <div class=\"row ml-0 mr-0\">{{ documentDefinitionNameTitle?.trim() }}</div>\n</ng-template>\n\n<ng-template #caseDetailAssignee let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row ml-0 mr-0 mt-1 mb-1\" *ngIf=\"canHaveAssignee && (document$ | async) as document\">\n <valtimo-dossier-assign-user\n [documentId]=\"document.id\"\n [assigneeId]=\"document.assigneeId\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"user-full-name\" *ngIf=\"canHaveAssignee\">\n <button\n class=\"btn btn-space btn-primary mr-1\"\n type=\"button\"\n id=\"\"\n placement=\"bottom\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"claimAssignee()\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </button>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i10.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i7.ExtensionComponent, selector: "valtimo-extension", inputs: ["module", "page", "section"] }, { kind: "component", type: i12.DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", outputs: ["formSubmit"] }, { kind: "component", type: i13.DossierAssignUserComponent, selector: "valtimo-dossier-assign-user", inputs: ["documentId", "assigneeId", "assigneeFullName"], outputs: ["assignmentOfDocumentChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
151
|
+
DossierDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DossierDetailComponent, selector: "valtimo-dossier-detail", viewQueries: [{ propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <div class=\"card-header bg-light card-header-divider pb-2\">\n <div class=\"row\" *ngIf=\"{canHaveAssignee: canHaveAssignee$ | async} as obs\">\n <div class=\"col\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailHeader;\n context: {canHaveAssignee: obs.canHaveAssignee}\n \"\n ></ng-container>\n </div>\n <div class=\"btn-group mt-m3px mb-3 col-auto\">\n <valtimo-extension\n module=\"dossier\"\n page=\"dossier-detail\"\n section=\"card-header\"\n ></valtimo-extension>\n <ng-container\n *ngTemplateOutlet=\"claimButton; context: {canHaveAssignee: obs.canHaveAssignee}\"\n ></ng-container>\n <div class=\"dropdown\">\n <button\n class=\"btn btn-primary dropdown-toggle\"\n type=\"button\"\n id=\"startProcessDropdown\"\n placement=\"bottom\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <span>{{ 'dossier.startSubProcess' | translate }}</span>\n <i class=\"ml-1 mdi mdi-chevron-down\"></i>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-right\"\n aria-labelledby=\"startProcessDropdown\"\n >\n <button\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n class=\"dropdown-item p\"\n href=\"#\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{ (processDocumentDefinition?.id?.processDefinitionKey | translate) !== processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\" *ngFor=\"let tab of tabLoader.tabs\">\n <a\n id=\"{{ tab.name }}-tab\"\n class=\"nav-link clickable\"\n [ngClass]=\"{active: tab.isActive()}\"\n data-toggle=\"tab\"\n (click)=\"tabLoader.load(tab)\"\n >\n {{ tabLoader.translateTabName(tab) }}\n </a>\n </li>\n </ul>\n <div class=\"card-body bg-white p-5 position-relative tab-container\">\n <ng-template #tabContainer>Loading...</ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </div>\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n </div>\n</div>\n\n<ng-template #caseDetailHeader let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row\" *ngIf=\"customDossierHeaderItems.length > 0; else defaultTitle\">\n <span\n class=\"mb-0 mt-0 pb-2 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n [ngClass]=\"{\n h1: item.textSize === 'xl',\n h2: item.textSize === 'lg',\n h3: item.textSize === 'md',\n h4: item.textSize === 'sm',\n h5: item.textSize === 'xs'\n }\"\n *ngFor=\"let item of customDossierHeaderItems\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.label && item.value\">: </span>\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"caseDetailAssignee; context: {canHaveAssignee: canHaveAssignee}\"\n ></ng-container>\n</ng-template>\n\n<ng-template #defaultTitle>\n <div class=\"row ml-0 mr-0\">{{ documentDefinitionNameTitle?.trim() }}</div>\n</ng-template>\n\n<ng-template #caseDetailAssignee let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row ml-0 mr-0 mt-1 mb-1\" *ngIf=\"canHaveAssignee && (document$ | async) as document\">\n <valtimo-dossier-assign-user\n [documentId]=\"document.id\"\n [assigneeId]=\"document.assigneeId\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"user-full-name\" *ngIf=\"canHaveAssignee\">\n <button\n class=\"btn btn-space btn-primary mr-1\"\n type=\"button\"\n id=\"\"\n placement=\"bottom\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"claimAssignee()\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </button>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i10.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i7.ExtensionComponent, selector: "valtimo-extension", inputs: ["module", "page", "section"] }, { kind: "component", type: i12.DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", outputs: ["formSubmit"] }, { kind: "component", type: i13.DossierAssignUserComponent, selector: "valtimo-dossier-assign-user", inputs: ["documentId", "assigneeId", "assigneeFullName"], outputs: ["assignmentOfDocumentChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
152
152
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierDetailComponent, decorators: [{
|
|
153
153
|
type: Component,
|
|
154
|
-
args: [{ selector: 'valtimo-dossier-detail', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <div class=\"card-header bg-light card-header-divider pb-2\">\n <div class=\"row\" *ngIf=\"{canHaveAssignee: canHaveAssignee$ | async} as obs\">\n <div class=\"col\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailHeader;\n context: {canHaveAssignee: obs.canHaveAssignee}\n \"\n ></ng-container>\n </div>\n <div class=\"btn-group mt-m3px mb-3 col-auto\">\n <valtimo-extension\n module=\"dossier\"\n page=\"dossier-detail\"\n section=\"card-header\"\n ></valtimo-extension>\n <ng-container\n *ngTemplateOutlet=\"claimButton; context: {canHaveAssignee: obs.canHaveAssignee}\"\n ></ng-container>\n <div class=\"dropdown\">\n <button\n class=\"btn btn-primary dropdown-toggle\"\n type=\"button\"\n id=\"startProcessDropdown\"\n placement=\"bottom\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <span>{{ 'dossier.startSubProcess' | translate }}</span>\n <i class=\"ml-1 mdi mdi-chevron-down\"></i>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-right\"\n aria-labelledby=\"startProcessDropdown\"\n >\n <button\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n class=\"dropdown-item p\"\n href=\"#\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{ processDocumentDefinition.processName }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\" *ngFor=\"let tab of tabLoader.tabs\">\n <a\n id=\"{{ tab.name }}-tab\"\n class=\"nav-link clickable\"\n [ngClass]=\"{active: tab.isActive()}\"\n data-toggle=\"tab\"\n (click)=\"tabLoader.load(tab)\"\n >\n {{ tabLoader.translateTabName(tab) }}\n </a>\n </li>\n </ul>\n <div class=\"card-body bg-white p-5 position-relative tab-container\">\n <ng-template #tabContainer>Loading...</ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </div>\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n </div>\n</div>\n\n<ng-template #caseDetailHeader let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row\" *ngIf=\"customDossierHeaderItems.length > 0; else defaultTitle\">\n <span\n class=\"mb-0 mt-0 pb-2 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n [ngClass]=\"{\n h1: item.textSize === 'xl',\n h2: item.textSize === 'lg',\n h3: item.textSize === 'md',\n h4: item.textSize === 'sm',\n h5: item.textSize === 'xs'\n }\"\n *ngFor=\"let item of customDossierHeaderItems\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.label && item.value\">: </span>\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"caseDetailAssignee; context: {canHaveAssignee: canHaveAssignee}\"\n ></ng-container>\n</ng-template>\n\n<ng-template #defaultTitle>\n <div class=\"row ml-0 mr-0\">{{ documentDefinitionNameTitle?.trim() }}</div>\n</ng-template>\n\n<ng-template #caseDetailAssignee let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row ml-0 mr-0 mt-1 mb-1\" *ngIf=\"canHaveAssignee && (document$ | async) as document\">\n <valtimo-dossier-assign-user\n [documentId]=\"document.id\"\n [assigneeId]=\"document.assigneeId\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"user-full-name\" *ngIf=\"canHaveAssignee\">\n <button\n class=\"btn btn-space btn-primary mr-1\"\n type=\"button\"\n id=\"\"\n placement=\"bottom\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"claimAssignee()\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </button>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}\n"] }]
|
|
154
|
+
args: [{ selector: 'valtimo-dossier-detail', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <div class=\"card-header bg-light card-header-divider pb-2\">\n <div class=\"row\" *ngIf=\"{canHaveAssignee: canHaveAssignee$ | async} as obs\">\n <div class=\"col\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailHeader;\n context: {canHaveAssignee: obs.canHaveAssignee}\n \"\n ></ng-container>\n </div>\n <div class=\"btn-group mt-m3px mb-3 col-auto\">\n <valtimo-extension\n module=\"dossier\"\n page=\"dossier-detail\"\n section=\"card-header\"\n ></valtimo-extension>\n <ng-container\n *ngTemplateOutlet=\"claimButton; context: {canHaveAssignee: obs.canHaveAssignee}\"\n ></ng-container>\n <div class=\"dropdown\">\n <button\n class=\"btn btn-primary dropdown-toggle\"\n type=\"button\"\n id=\"startProcessDropdown\"\n placement=\"bottom\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <span>{{ 'dossier.startSubProcess' | translate }}</span>\n <i class=\"ml-1 mdi mdi-chevron-down\"></i>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-right\"\n aria-labelledby=\"startProcessDropdown\"\n >\n <button\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n class=\"dropdown-item p\"\n href=\"#\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{ (processDocumentDefinition?.id?.processDefinitionKey | translate) !== processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\" *ngFor=\"let tab of tabLoader.tabs\">\n <a\n id=\"{{ tab.name }}-tab\"\n class=\"nav-link clickable\"\n [ngClass]=\"{active: tab.isActive()}\"\n data-toggle=\"tab\"\n (click)=\"tabLoader.load(tab)\"\n >\n {{ tabLoader.translateTabName(tab) }}\n </a>\n </li>\n </ul>\n <div class=\"card-body bg-white p-5 position-relative tab-container\">\n <ng-template #tabContainer>Loading...</ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </div>\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n </div>\n</div>\n\n<ng-template #caseDetailHeader let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row\" *ngIf=\"customDossierHeaderItems.length > 0; else defaultTitle\">\n <span\n class=\"mb-0 mt-0 pb-2 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n [ngClass]=\"{\n h1: item.textSize === 'xl',\n h2: item.textSize === 'lg',\n h3: item.textSize === 'md',\n h4: item.textSize === 'sm',\n h5: item.textSize === 'xs'\n }\"\n *ngFor=\"let item of customDossierHeaderItems\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.label && item.value\">: </span>\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"caseDetailAssignee; context: {canHaveAssignee: canHaveAssignee}\"\n ></ng-container>\n</ng-template>\n\n<ng-template #defaultTitle>\n <div class=\"row ml-0 mr-0\">{{ documentDefinitionNameTitle?.trim() }}</div>\n</ng-template>\n\n<ng-template #caseDetailAssignee let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"row ml-0 mr-0 mt-1 mb-1\" *ngIf=\"canHaveAssignee && (document$ | async) as document\">\n <valtimo-dossier-assign-user\n [documentId]=\"document.id\"\n [assigneeId]=\"document.assigneeId\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canHaveAssignee=\"canHaveAssignee\">\n <div class=\"user-full-name\" *ngIf=\"canHaveAssignee\">\n <button\n class=\"btn btn-space btn-primary mr-1\"\n type=\"button\"\n id=\"\"\n placement=\"bottom\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"claimAssignee()\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </button>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}\n"] }]
|
|
155
155
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.TranslateService }, { type: i2.DocumentService }, { type: i3.ProcessService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.Location }, { type: i6.TabService }, { type: i7.ConfigService }, { type: i8.KeycloakService }, { type: i9.NGXLogger }]; }, propDecorators: { viewContainerRef: [{
|
|
156
156
|
type: ViewChild,
|
|
157
157
|
args: ['tabContainer', { read: ViewContainerRef, static: true }]
|
|
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
159
159
|
type: ViewChild,
|
|
160
160
|
args: ['supportingProcessStartModal']
|
|
161
161
|
}] } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1kZXRhaWwvZG9zc2llci1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1kZXRhaWwvZG9zc2llci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFvQyxTQUFTLEVBQUUsZ0JBQWdCLEdBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQU94QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFTakgsTUFBTSxPQUFPLHNCQUFzQjtJQTBFakMsWUFDbUIsd0JBQWtELEVBQ2xELGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixLQUFxQixFQUNyQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsZUFBZ0MsRUFDaEMsTUFBaUI7UUFWakIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFD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SUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBZ0JqRSxzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtTWFwLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0RvY3VtZW50LCBEb2N1bWVudFNlcnZpY2UsIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb259IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7VGFiTG9hZGVySW1wbH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtUYWJTZXJ2aWNlfSBmcm9tICcuLi90YWIuc2VydmljZSc7XG5pbXBvcnQge1Byb2Nlc3NTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9wcm9jZXNzJztcbmltcG9ydCB7RG9zc2llclN1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwvZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgRG9zc2llckxpc3RUYWJ9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtLZXljbG9ha1NlcnZpY2V9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgndGFiQ29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZztcbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50ID0gbnVsbDtcbiAgcHVibGljIHRhYkxvYWRlcjogVGFiTG9hZGVySW1wbCA9IG51bGw7XG4gIHByaXZhdGUgc25hcHNob3Q6IFBhcmFtTWFwO1xuICBwdWJsaWMgcHJvY2Vzc0RlZmluaXRpb25MaXN0RmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uczogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdID0gW107XG4gIHByaXZhdGUgaW5pdGlhbFRhYk5hbWU6IHN0cmluZztcbiAgcHVibGljIGN1c3RvbURvc3NpZXJIZWFkZXJJdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBwdWJsaWMgZG9zc2llclN0YXR1c1RhYnM6IEFycmF5PERvc3NpZXJMaXN0VGFiPiB8IG51bGwgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ3N1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbCcpXG4gIHN1cHBvcnRpbmdQcm9jZXNzU3RhcnQ6IERvc3NpZXJTdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcmVhZG9ubHkgcmVmcmVzaERvY3VtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYXNzaWduZWVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50JDogT2JzZXJ2YWJsZTxEb2N1bWVudCB8IG51bGw+ID0gdGhpcy5yZWZyZXNoRG9jdW1lbnQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucm91dGUucGFyYW1zKSxcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT5cbiAgICAgIGRvY3VtZW50SWQgPyB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudCh0aGlzLmRvY3VtZW50SWQpIDogb2YobnVsbClcbiAgICApLFxuICAgIHRhcChkb2N1bWVudCA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQpIHtcbiAgICAgICAgdGhpcy5hc3NpZ25lZUlkJC5uZXh0KGRvY3VtZW50LmFzc2lnbmVlSWQpO1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuY3VzdG9tRG9zc2llckhlYWRlcj8uaGFzT3duUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICkgJiZcbiAgICAgICAgICB0aGlzLmN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5jdXN0b21Eb3NzaWVySGVhZGVyW1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBdPy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5nZXRDdXN0b21Eb3NzaWVySGVhZGVySXRlbShpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHVzZXJJZCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGZyb20odGhpcy5rZXlDbG9ha1NlcnZpY2UuaXNMb2dnZWRJbigpKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmtleUNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSksXG4gICAgbWFwKHByb2ZpbGUgPT4gcHJvZmlsZT8uaWQpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNBc3NpZ25pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaXNBc3NpZ25lZFRvQ3VycmVudFVzZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hc3NpZ25lZUlkJCxcbiAgICB0aGlzLnVzZXJJZCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbYXNzaWduZWVJZCwgdXNlcklkXSkgPT4gYXNzaWduZWVJZCAmJiB1c2VySWQgJiYgYXNzaWduZWVJZCA9PT0gdXNlcklkKSxcbiAgICBzdGFydFdpdGgodHJ1ZSlcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8ICcnKVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkhhdmVBc3NpZ25lZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldENhc2VTZXR0aW5ncyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICksXG4gICAgbWFwKGNhc2VTZXR0aW5ncyA9PiBjYXNlU2V0dGluZ3M/LmNhbkhhdmVBc3NpZ25lZSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJTZXJ2aWNlOiBUYWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleUNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXJcbiAgKSB7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXA7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lID0gdGhpcy5zbmFwc2hvdC5nZXQoJ2RvY3VtZW50RGVmaW5pdGlvbk5hbWUnKSB8fCAnJztcbiAgICB0aGlzLmRvY3VtZW50SWQgPSB0aGlzLnNuYXBzaG90LmdldCgnZG9jdW1lbnRJZCcpIHx8ICcnO1xuICAgIHRoaXMudGFiU2VydmljZS5nZXRDb25maWd1cmFibGVUYWJzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkxvYWRlciA9IG5ldyBUYWJMb2FkZXJJbXBsKFxuICAgICAgdGhpcy50YWJTZXJ2aWNlLmdldFRhYnMoKSxcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgdGhpcy5yb3V0ZXIsXG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgKTtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmdldERvY3VtZW50RGVmaW5pdGlvbih0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZSA9IGRlZmluaXRpb24uc2NoZW1hLnRpdGxlO1xuICAgICAgfSk7XG4gICAgdGhpcy5pbml0aWFsVGFiTmFtZSA9IHRoaXMuc25hcHNob3QuZ2V0KCd0YWInKTtcbiAgICB0aGlzLnRhYkxvYWRlci5pbml0aWFsKHRoaXMuaW5pdGlhbFRhYk5hbWUpO1xuICAgIHRoaXMuZ2V0QWxsQXNzb2NpYXRlZFByb2Nlc3NEZWZpbml0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldEFsbEFzc29jaWF0ZWRQcm9jZXNzRGVmaW5pdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnModGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgLnN1YnNjcmliZShwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9PiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnN0YXJ0YWJsZUJ5VXNlclxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTGlzdEZpZWxkcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdwcm9jZXNzTmFtZScsXG4gICAgICAgICAgICBsYWJlbDogJ1Byb2NlcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhcnRQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBvcnRpbmdQcm9jZXNzU3RhcnQub3Blbk1vZGFsKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sIHRoaXMuZG9jdW1lbnRJZCk7XG4gIH1cblxuICBjbGFpbUFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnVzZXJJZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAodXNlcklkID0+IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmFzc2lnbkhhbmRsZXJUb0RvY3VtZW50KHRoaXMuZG9jdW1lbnRJZCwgdXNlcklkKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmlzQXNzaWduaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCQubmV4dChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBhc3NpZ25pbmcgdXNlciB0byBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBhc3NpZ25tZW50T2ZEb2N1bWVudENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1c3RvbURvc3NpZXJIZWFkZXJJdGVtKGl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcy5wdXNoKHtcbiAgICAgIGxhYmVsOiBpdGVtWydsYWJlbFRyYW5zbGF0aW9uS2V5J10gfHwgJycsXG4gICAgICBjb2x1bW5TaXplOiBpdGVtWydjb2x1bW5TaXplJ10gfHwgMyxcbiAgICAgIHRleHRTaXplOiBpdGVtWyd0ZXh0U2l6ZSddIHx8ICdtZCcsXG4gICAgICBjdXN0b21DbGFzczogaXRlbVsnY3VzdG9tQ2xhc3MnXSB8fCAnJyxcbiAgICAgIG1vZGlmaWVyOiBpdGVtWydtb2RpZmllciddIHx8ICcnLFxuICAgICAgdmFsdWU6IGl0ZW1bJ3Byb3BlcnR5UGF0aHMnXT8ucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycikgPT4gcHJldiArIHRoaXMuZ2V0U3RyaW5nRnJvbURvY3VtZW50UGF0aChpdGVtLCBjdXJyKSxcbiAgICAgICAgJydcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0cmluZ0Zyb21Eb2N1bWVudFBhdGgoaXRlbSwgcGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlZml4ID0gaXRlbVsncHJvcGVydHlQYXRocyddLmluZGV4T2YocGF0aCkgPiAwID8gJyAnIDogJyc7XG4gICAgbGV0IHN0cmluZyA9XG4gICAgICBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvLCBpKSA9PiBvW2ldLCB0aGlzLmRvY3VtZW50LmNvbnRlbnQpIHx8IGl0ZW1bJ25vVmFsdWVUZXh0J10gfHwgJyc7XG4gICAgY29uc3QgZGF0ZUZvcm1hdHMgPSBbbW9tZW50LklTT184NjAxLCAnTU0tREQtWVlZWScsICdERC1NTS1ZWVlZJywgJ1lZWVktTU0tREQnXTtcbiAgICBzd2l0Y2ggKGl0ZW1bJ21vZGlmaWVyJ10pIHtcbiAgICAgIGNhc2UgJ2FnZSc6IHtcbiAgICAgICAgaWYgKG1vbWVudChzdHJpbmcsIGRhdGVGb3JtYXRzLCB0cnVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICBzdHJpbmcgPSBtb21lbnQoKS5kaWZmKHN0cmluZywgJ3llYXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChtb21lbnQoc3RyaW5nLCBkYXRlRm9ybWF0cywgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgc3RyaW5nID0gbW9tZW50KHN0cmluZykuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArIHN0cmluZztcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgPHZhbHRpbW8td2lkZ2V0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYmctbGlnaHQgY2FyZC1oZWFkZXItZGl2aWRlciBwYi0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwie2NhbkhhdmVBc3NpZ25lZTogY2FuSGF2ZUFzc2lnbmVlJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjYXNlRGV0YWlsSGVhZGVyO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge2NhbkhhdmVBc3NpZ25lZTogb2JzLmNhbkhhdmVBc3NpZ25lZX1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbXQtbTNweCBtYi0zIGNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgIDx2YWx0aW1vLWV4dGVuc2lvblxuICAgICAgICAgICAgICAgIG1vZHVsZT1cImRvc3NpZXJcIlxuICAgICAgICAgICAgICAgIHBhZ2U9XCJkb3NzaWVyLWRldGFpbFwiXG4gICAgICAgICAgICAgICAgc2VjdGlvbj1cImNhcmQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgPjwvdmFsdGltby1leHRlbnNpb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNsYWltQnV0dG9uOyBjb250ZXh0OiB7Y2FuSGF2ZUFzc2lnbmVlOiBvYnMuY2FuSGF2ZUFzc2lnbmVlfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID8gJ05vIGFjdGlvbicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdkb3NzaWVyLnN0YXJ0U3ViUHJvY2VzcycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1sLTEgbWRpIG1kaS1jaGV2cm9uLWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwic3RhcnRQcm9jZXNzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gb2YgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcFwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ucHJvY2Vzc05hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYkxvYWRlci50YWJzXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBpZD1cInt7IHRhYi5uYW1lIH19LXRhYlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2FjdGl2ZTogdGFiLmlzQWN0aXZlKCl9XCJcbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJ0YWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidGFiTG9hZGVyLmxvYWQodGFiKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRhYkxvYWRlci50cmFuc2xhdGVUYWJOYW1lKHRhYikgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGJnLXdoaXRlIHAtNSBwb3NpdGlvbi1yZWxhdGl2ZSB0YWItY29udGFpbmVyXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0YWJDb250YWluZXI+TG9hZGluZy4uLjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92YWx0aW1vLXdpZGdldD5cbiAgICA8L2Rpdj5cbiAgICA8dmFsdGltby1kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbFxuICAgICAgKGZvcm1TdWJtaXQpPVwidGFiTG9hZGVyLnJlZnJlc2hWaWV3KClcIlxuICAgICAgI3N1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbFxuICAgID48L3ZhbHRpbW8tZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWw+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2FzZURldGFpbEhlYWRlciBsZXQtY2FuSGF2ZUFzc2lnbmVlPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcy5sZW5ndGggPiAwOyBlbHNlIGRlZmF1bHRUaXRsZVwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cIm1iLTAgbXQtMCBwYi0yIGFsaWduLXNlbGYtZW5kIGNvbC14bC17eyBpdGVtLmNvbHVtblNpemUgfX0gY29sLWxnLXt7XG4gICAgICAgIGl0ZW0uY29sdW1uU2l6ZSAqIDJcbiAgICAgIH19IHt7IGl0ZW0uY3VzdG9tQ2xhc3MgfX1cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBoMTogaXRlbS50ZXh0U2l6ZSA9PT0gJ3hsJyxcbiAgICAgICAgaDI6IGl0ZW0udGV4dFNpemUgPT09ICdsZycsXG4gICAgICAgIGgzOiBpdGVtLnRleHRTaXplID09PSAnbWQnLFxuICAgICAgICBoNDogaXRlbS50ZXh0U2l6ZSA9PT0gJ3NtJyxcbiAgICAgICAgaDU6IGl0ZW0udGV4dFNpemUgPT09ICd4cydcbiAgICAgIH1cIlxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3VzdG9tRG9zc2llckhlYWRlckl0ZW1zXCJcbiAgICA+XG4gICAgICA8c3BhbiAqbmdJZj1cIml0ZW0ubGFiZWxcIj57eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmxhYmVsICYmIGl0ZW0udmFsdWVcIj46IDwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+e3sgaXRlbS52YWx1ZSB9fTwvc3Ryb25nPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNhc2VEZXRhaWxBc3NpZ25lZTsgY29udGV4dDoge2NhbkhhdmVBc3NpZ25lZTogY2FuSGF2ZUFzc2lnbmVlfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRpdGxlPlxuICA8ZGl2IGNsYXNzPVwicm93IG1sLTAgbXItMFwiPnt7IGRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZT8udHJpbSgpIH19PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Nhc2VEZXRhaWxBc3NpZ25lZSBsZXQtY2FuSGF2ZUFzc2lnbmVlPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3cgbWwtMCBtci0wIG10LTEgbWItMVwiICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlICYmIChkb2N1bWVudCQgfCBhc3luYykgYXMgZG9jdW1lbnRcIj5cbiAgICA8dmFsdGltby1kb3NzaWVyLWFzc2lnbi11c2VyXG4gICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudC5pZFwiXG4gICAgICBbYXNzaWduZWVJZF09XCJkb2N1bWVudC5hc3NpZ25lZUlkXCJcbiAgICAgIFthc3NpZ25lZUZ1bGxOYW1lXT1cImRvY3VtZW50Py5hc3NpZ25lZUZ1bGxOYW1lXCJcbiAgICAgIChhc3NpZ25tZW50T2ZEb2N1bWVudENoYW5nZWQpPVwiYXNzaWdubWVudE9mRG9jdW1lbnRDaGFuZ2VkKClcIlxuICAgID48L3ZhbHRpbW8tZG9zc2llci1hc3NpZ24tdXNlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NsYWltQnV0dG9uIGxldC1jYW5IYXZlQXNzaWduZWU9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgPGRpdiBjbGFzcz1cInVzZXItZnVsbC1uYW1lXCIgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXByaW1hcnkgbXItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGlkPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgKGNsaWNrKT1cImNsYWltQXNzaWduZWUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKGlzQXNzaWduaW5nJCB8IGFzeW5jKSB8fCAoaXNBc3NpZ25lZFRvQ3VycmVudFVzZXIkIHwgYXN5bmMpXCJcbiAgICA+XG4gICAgICA8c3Bhbj57eyAnZG9zc2llci5jbGFpbUFzc2lnbmVlQ2FzZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1kZXRhaWwvZG9zc2llci1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1kZXRhaWwvZG9zc2llci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFvQyxTQUFTLEVBQUUsZ0JBQWdCLEdBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEcsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQU94QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFTakgsTUFBTSxPQUFPLHNCQUFzQjtJQTBFakMsWUFDbUIsd0JBQWtELEVBQ2xELGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixLQUFxQixFQUNyQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsZUFBZ0MsRUFDaEMsTUFBaUI7UUFWakIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFD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SUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBZ0JqRSxzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtTWFwLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0RvY3VtZW50LCBEb2N1bWVudFNlcnZpY2UsIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb259IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7VGFiTG9hZGVySW1wbH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtUYWJTZXJ2aWNlfSBmcm9tICcuLi90YWIuc2VydmljZSc7XG5pbXBvcnQge1Byb2Nlc3NTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9wcm9jZXNzJztcbmltcG9ydCB7RG9zc2llclN1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwvZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgRG9zc2llckxpc3RUYWJ9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtLZXljbG9ha1NlcnZpY2V9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgndGFiQ29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZztcbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50ID0gbnVsbDtcbiAgcHVibGljIHRhYkxvYWRlcjogVGFiTG9hZGVySW1wbCA9IG51bGw7XG4gIHByaXZhdGUgc25hcHNob3Q6IFBhcmFtTWFwO1xuICBwdWJsaWMgcHJvY2Vzc0RlZmluaXRpb25MaXN0RmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uczogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdID0gW107XG4gIHByaXZhdGUgaW5pdGlhbFRhYk5hbWU6IHN0cmluZztcbiAgcHVibGljIGN1c3RvbURvc3NpZXJIZWFkZXJJdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBwdWJsaWMgZG9zc2llclN0YXR1c1RhYnM6IEFycmF5PERvc3NpZXJMaXN0VGFiPiB8IG51bGwgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ3N1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbCcpXG4gIHN1cHBvcnRpbmdQcm9jZXNzU3RhcnQ6IERvc3NpZXJTdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcmVhZG9ubHkgcmVmcmVzaERvY3VtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYXNzaWduZWVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50JDogT2JzZXJ2YWJsZTxEb2N1bWVudCB8IG51bGw+ID0gdGhpcy5yZWZyZXNoRG9jdW1lbnQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucm91dGUucGFyYW1zKSxcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT5cbiAgICAgIGRvY3VtZW50SWQgPyB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudCh0aGlzLmRvY3VtZW50SWQpIDogb2YobnVsbClcbiAgICApLFxuICAgIHRhcChkb2N1bWVudCA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQpIHtcbiAgICAgICAgdGhpcy5hc3NpZ25lZUlkJC5uZXh0KGRvY3VtZW50LmFzc2lnbmVlSWQpO1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuY3VzdG9tRG9zc2llckhlYWRlcj8uaGFzT3duUHJvcGVydHkoXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICkgJiZcbiAgICAgICAgICB0aGlzLmN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5jdXN0b21Eb3NzaWVySGVhZGVyW1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBdPy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5nZXRDdXN0b21Eb3NzaWVySGVhZGVySXRlbShpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHVzZXJJZCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGZyb20odGhpcy5rZXlDbG9ha1NlcnZpY2UuaXNMb2dnZWRJbigpKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmtleUNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSksXG4gICAgbWFwKHByb2ZpbGUgPT4gcHJvZmlsZT8uaWQpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNBc3NpZ25pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaXNBc3NpZ25lZFRvQ3VycmVudFVzZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hc3NpZ25lZUlkJCxcbiAgICB0aGlzLnVzZXJJZCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbYXNzaWduZWVJZCwgdXNlcklkXSkgPT4gYXNzaWduZWVJZCAmJiB1c2VySWQgJiYgYXNzaWduZWVJZCA9PT0gdXNlcklkKSxcbiAgICBzdGFydFdpdGgodHJ1ZSlcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8ICcnKVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkhhdmVBc3NpZ25lZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldENhc2VTZXR0aW5ncyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICksXG4gICAgbWFwKGNhc2VTZXR0aW5ncyA9PiBjYXNlU2V0dGluZ3M/LmNhbkhhdmVBc3NpZ25lZSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJTZXJ2aWNlOiBUYWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleUNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXJcbiAgKSB7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXA7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lID0gdGhpcy5zbmFwc2hvdC5nZXQoJ2RvY3VtZW50RGVmaW5pdGlvbk5hbWUnKSB8fCAnJztcbiAgICB0aGlzLmRvY3VtZW50SWQgPSB0aGlzLnNuYXBzaG90LmdldCgnZG9jdW1lbnRJZCcpIHx8ICcnO1xuICAgIHRoaXMudGFiU2VydmljZS5nZXRDb25maWd1cmFibGVUYWJzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkxvYWRlciA9IG5ldyBUYWJMb2FkZXJJbXBsKFxuICAgICAgdGhpcy50YWJTZXJ2aWNlLmdldFRhYnMoKSxcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgdGhpcy5yb3V0ZXIsXG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgKTtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmdldERvY3VtZW50RGVmaW5pdGlvbih0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZSA9IGRlZmluaXRpb24uc2NoZW1hLnRpdGxlO1xuICAgICAgfSk7XG4gICAgdGhpcy5pbml0aWFsVGFiTmFtZSA9IHRoaXMuc25hcHNob3QuZ2V0KCd0YWInKTtcbiAgICB0aGlzLnRhYkxvYWRlci5pbml0aWFsKHRoaXMuaW5pdGlhbFRhYk5hbWUpO1xuICAgIHRoaXMuZ2V0QWxsQXNzb2NpYXRlZFByb2Nlc3NEZWZpbml0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldEFsbEFzc29jaWF0ZWRQcm9jZXNzRGVmaW5pdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnModGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgLnN1YnNjcmliZShwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9PiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnN0YXJ0YWJsZUJ5VXNlclxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTGlzdEZpZWxkcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdwcm9jZXNzTmFtZScsXG4gICAgICAgICAgICBsYWJlbDogJ1Byb2NlcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhcnRQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBvcnRpbmdQcm9jZXNzU3RhcnQub3Blbk1vZGFsKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sIHRoaXMuZG9jdW1lbnRJZCk7XG4gIH1cblxuICBjbGFpbUFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnVzZXJJZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAodXNlcklkID0+IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmFzc2lnbkhhbmRsZXJUb0RvY3VtZW50KHRoaXMuZG9jdW1lbnRJZCwgdXNlcklkKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmlzQXNzaWduaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCQubmV4dChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBhc3NpZ25pbmcgdXNlciB0byBjYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBhc3NpZ25tZW50T2ZEb2N1bWVudENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1c3RvbURvc3NpZXJIZWFkZXJJdGVtKGl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcy5wdXNoKHtcbiAgICAgIGxhYmVsOiBpdGVtWydsYWJlbFRyYW5zbGF0aW9uS2V5J10gfHwgJycsXG4gICAgICBjb2x1bW5TaXplOiBpdGVtWydjb2x1bW5TaXplJ10gfHwgMyxcbiAgICAgIHRleHRTaXplOiBpdGVtWyd0ZXh0U2l6ZSddIHx8ICdtZCcsXG4gICAgICBjdXN0b21DbGFzczogaXRlbVsnY3VzdG9tQ2xhc3MnXSB8fCAnJyxcbiAgICAgIG1vZGlmaWVyOiBpdGVtWydtb2RpZmllciddIHx8ICcnLFxuICAgICAgdmFsdWU6IGl0ZW1bJ3Byb3BlcnR5UGF0aHMnXT8ucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycikgPT4gcHJldiArIHRoaXMuZ2V0U3RyaW5nRnJvbURvY3VtZW50UGF0aChpdGVtLCBjdXJyKSxcbiAgICAgICAgJydcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0cmluZ0Zyb21Eb2N1bWVudFBhdGgoaXRlbSwgcGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlZml4ID0gaXRlbVsncHJvcGVydHlQYXRocyddLmluZGV4T2YocGF0aCkgPiAwID8gJyAnIDogJyc7XG4gICAgbGV0IHN0cmluZyA9XG4gICAgICBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvLCBpKSA9PiBvW2ldLCB0aGlzLmRvY3VtZW50LmNvbnRlbnQpIHx8IGl0ZW1bJ25vVmFsdWVUZXh0J10gfHwgJyc7XG4gICAgY29uc3QgZGF0ZUZvcm1hdHMgPSBbbW9tZW50LklTT184NjAxLCAnTU0tREQtWVlZWScsICdERC1NTS1ZWVlZJywgJ1lZWVktTU0tREQnXTtcbiAgICBzd2l0Y2ggKGl0ZW1bJ21vZGlmaWVyJ10pIHtcbiAgICAgIGNhc2UgJ2FnZSc6IHtcbiAgICAgICAgaWYgKG1vbWVudChzdHJpbmcsIGRhdGVGb3JtYXRzLCB0cnVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICBzdHJpbmcgPSBtb21lbnQoKS5kaWZmKHN0cmluZywgJ3llYXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChtb21lbnQoc3RyaW5nLCBkYXRlRm9ybWF0cywgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgc3RyaW5nID0gbW9tZW50KHN0cmluZykuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArIHN0cmluZztcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgPHZhbHRpbW8td2lkZ2V0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYmctbGlnaHQgY2FyZC1oZWFkZXItZGl2aWRlciBwYi0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwie2NhbkhhdmVBc3NpZ25lZTogY2FuSGF2ZUFzc2lnbmVlJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjYXNlRGV0YWlsSGVhZGVyO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge2NhbkhhdmVBc3NpZ25lZTogb2JzLmNhbkhhdmVBc3NpZ25lZX1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbXQtbTNweCBtYi0zIGNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgIDx2YWx0aW1vLWV4dGVuc2lvblxuICAgICAgICAgICAgICAgIG1vZHVsZT1cImRvc3NpZXJcIlxuICAgICAgICAgICAgICAgIHBhZ2U9XCJkb3NzaWVyLWRldGFpbFwiXG4gICAgICAgICAgICAgICAgc2VjdGlvbj1cImNhcmQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgPjwvdmFsdGltby1leHRlbnNpb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNsYWltQnV0dG9uOyBjb250ZXh0OiB7Y2FuSGF2ZUFzc2lnbmVlOiBvYnMuY2FuSGF2ZUFzc2lnbmVlfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID8gJ05vIGFjdGlvbicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdkb3NzaWVyLnN0YXJ0U3ViUHJvY2VzcycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1sLTEgbWRpIG1kaS1jaGV2cm9uLWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwic3RhcnRQcm9jZXNzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gb2YgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcFwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPy5pZD8ucHJvY2Vzc0RlZmluaXRpb25LZXkgfCB0cmFuc2xhdGUpICE9PSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPy5pZD8ucHJvY2Vzc0RlZmluaXRpb25LZXlcbiAgICAgICAgICAgICAgICAgICAgPyAocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5wcm9jZXNzRGVmaW5pdGlvbktleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFic1wiPlxuICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJMb2FkZXIudGFic1wiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgaWQ9XCJ7eyB0YWIubmFtZSB9fS10YWJcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IHRhYi5pc0FjdGl2ZSgpfVwiXG4gICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYkxvYWRlci5sb2FkKHRhYilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0YWJMb2FkZXIudHJhbnNsYXRlVGFiTmFtZSh0YWIpIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBiZy13aGl0ZSBwLTUgcG9zaXRpb24tcmVsYXRpdmUgdGFiLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFiQ29udGFpbmVyPkxvYWRpbmcuLi48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdmFsdGltby13aWRnZXQ+XG4gICAgPC9kaXY+XG4gICAgPHZhbHRpbW8tZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWxcbiAgICAgIChmb3JtU3VibWl0KT1cInRhYkxvYWRlci5yZWZyZXNoVmlldygpXCJcbiAgICAgICNzdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWxcbiAgICA+PC92YWx0aW1vLWRvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Nhc2VEZXRhaWxIZWFkZXIgbGV0LWNhbkhhdmVBc3NpZ25lZT1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJjdXN0b21Eb3NzaWVySGVhZGVySXRlbXMubGVuZ3RoID4gMDsgZWxzZSBkZWZhdWx0VGl0bGVcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJtYi0wIG10LTAgcGItMiBhbGlnbi1zZWxmLWVuZCBjb2wteGwte3sgaXRlbS5jb2x1bW5TaXplIH19IGNvbC1sZy17e1xuICAgICAgICBpdGVtLmNvbHVtblNpemUgKiAyXG4gICAgICB9fSB7eyBpdGVtLmN1c3RvbUNsYXNzIH19XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgaDE6IGl0ZW0udGV4dFNpemUgPT09ICd4bCcsXG4gICAgICAgIGgyOiBpdGVtLnRleHRTaXplID09PSAnbGcnLFxuICAgICAgICBoMzogaXRlbS50ZXh0U2l6ZSA9PT0gJ21kJyxcbiAgICAgICAgaDQ6IGl0ZW0udGV4dFNpemUgPT09ICdzbScsXG4gICAgICAgIGg1OiBpdGVtLnRleHRTaXplID09PSAneHMnXG4gICAgICB9XCJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1c3RvbURvc3NpZXJIZWFkZXJJdGVtc1wiXG4gICAgPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmxhYmVsXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5sYWJlbCAmJiBpdGVtLnZhbHVlXCI+OiA8L3NwYW4+XG4gICAgICA8c3Ryb25nPnt7IGl0ZW0udmFsdWUgfX08L3N0cm9uZz5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXNlRGV0YWlsQXNzaWduZWU7IGNvbnRleHQ6IHtjYW5IYXZlQXNzaWduZWU6IGNhbkhhdmVBc3NpZ25lZX1cIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUaXRsZT5cbiAgPGRpdiBjbGFzcz1cInJvdyBtbC0wIG1yLTBcIj57eyBkb2N1bWVudERlZmluaXRpb25OYW1lVGl0bGU/LnRyaW0oKSB9fTwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXNlRGV0YWlsQXNzaWduZWUgbGV0LWNhbkhhdmVBc3NpZ25lZT1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICA8ZGl2IGNsYXNzPVwicm93IG1sLTAgbXItMCBtdC0xIG1iLTFcIiAqbmdJZj1cImNhbkhhdmVBc3NpZ25lZSAmJiAoZG9jdW1lbnQkIHwgYXN5bmMpIGFzIGRvY3VtZW50XCI+XG4gICAgPHZhbHRpbW8tZG9zc2llci1hc3NpZ24tdXNlclxuICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnQuaWRcIlxuICAgICAgW2Fzc2lnbmVlSWRdPVwiZG9jdW1lbnQuYXNzaWduZWVJZFwiXG4gICAgICBbYXNzaWduZWVGdWxsTmFtZV09XCJkb2N1bWVudD8uYXNzaWduZWVGdWxsTmFtZVwiXG4gICAgICAoYXNzaWdubWVudE9mRG9jdW1lbnRDaGFuZ2VkKT1cImFzc2lnbm1lbnRPZkRvY3VtZW50Q2hhbmdlZCgpXCJcbiAgICA+PC92YWx0aW1vLWRvc3NpZXItYXNzaWduLXVzZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjbGFpbUJ1dHRvbiBsZXQtY2FuSGF2ZUFzc2lnbmVlPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWZ1bGwtbmFtZVwiICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5IG1yLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBpZD1cIlwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIChjbGljayk9XCJjbGFpbUFzc2lnbmVlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIihpc0Fzc2lnbmluZyQgfCBhc3luYykgfHwgKGlzQXNzaWduZWRUb0N1cnJlbnRVc2VyJCB8IGFzeW5jKVwiXG4gICAgPlxuICAgICAgPHNwYW4+e3sgJ2Rvc3NpZXIuY2xhaW1Bc3NpZ25lZUNhc2UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -25,13 +25,14 @@ import * as i3 from "@ngx-translate/core";
|
|
|
25
25
|
import * as i4 from "../dossier.service";
|
|
26
26
|
import * as i5 from "ngx-logger";
|
|
27
27
|
import * as i6 from "@valtimo/config";
|
|
28
|
-
import * as i7 from "
|
|
29
|
-
import * as i8 from "@
|
|
30
|
-
import * as i9 from "@
|
|
31
|
-
import * as i10 from "
|
|
28
|
+
import * as i7 from "../services";
|
|
29
|
+
import * as i8 from "@angular/common";
|
|
30
|
+
import * as i9 from "@valtimo/components";
|
|
31
|
+
import * as i10 from "@ng-bootstrap/ng-bootstrap";
|
|
32
|
+
import * as i11 from "../dossier-process-start-modal/dossier-process-start-modal.component";
|
|
32
33
|
moment.locale(localStorage.getItem('langKey') || '');
|
|
33
34
|
export class DossierListComponent {
|
|
34
|
-
constructor(route, router, documentService, translateService, dossierService, logger, configService) {
|
|
35
|
+
constructor(route, router, documentService, translateService, dossierService, logger, configService, dossierColumnService) {
|
|
35
36
|
this.route = route;
|
|
36
37
|
this.router = router;
|
|
37
38
|
this.documentService = documentService;
|
|
@@ -39,6 +40,7 @@ export class DossierListComponent {
|
|
|
39
40
|
this.dossierService = dossierService;
|
|
40
41
|
this.logger = logger;
|
|
41
42
|
this.configService = configService;
|
|
43
|
+
this.dossierColumnService = dossierColumnService;
|
|
42
44
|
this.dossierVisibleTabs = null;
|
|
43
45
|
this.selectedProcessDocumentDefinition = null;
|
|
44
46
|
this.modalListenerAdded = false;
|
|
@@ -56,7 +58,7 @@ export class DossierListComponent {
|
|
|
56
58
|
this.schema$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.documentService.getDocumentDefinition(documentDefinitionName)), map(documentDefinition => documentDefinition?.schema));
|
|
57
59
|
this.storedSearchRequestKey$ = this.documentDefinitionName$.pipe(map(documentDefinitionName => `list-search-${documentDefinitionName}`));
|
|
58
60
|
this.hasStoredSearchRequest$ = this.storedSearchRequestKey$.pipe(map(storedSearchRequestKey => localStorage.getItem(storedSearchRequestKey) !== null));
|
|
59
|
-
this.columns$ = this.documentDefinitionName$.pipe(
|
|
61
|
+
this.columns$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.dossierColumnService.getDefinitionColumns(documentDefinitionName)));
|
|
60
62
|
this.ASSIGNEE_KEY = 'assigneeFullName';
|
|
61
63
|
this.fields$ = combineLatest([
|
|
62
64
|
this.columns$,
|
|
@@ -64,13 +66,18 @@ export class DossierListComponent {
|
|
|
64
66
|
this.translateService.stream('key'),
|
|
65
67
|
]).pipe(map(([columns, canHaveAssignee]) => [
|
|
66
68
|
...columns
|
|
67
|
-
.map(column =>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
.map(column => {
|
|
70
|
+
const translationKey = `fieldLabels.${column.translationKey}`;
|
|
71
|
+
const translation = this.translateService.instant(translationKey);
|
|
72
|
+
const validTranslation = translation !== translationKey && translation;
|
|
73
|
+
return {
|
|
74
|
+
key: column.propertyName,
|
|
75
|
+
label: column.title || validTranslation || column.translationKey,
|
|
76
|
+
sortable: column.sortable,
|
|
77
|
+
...(column.viewType && { viewType: column.viewType }),
|
|
78
|
+
...(column.enum && { enum: column.enum }),
|
|
79
|
+
};
|
|
80
|
+
})
|
|
74
81
|
// Filter out assignee column if the case type can not have an assignee
|
|
75
82
|
.filter(column => {
|
|
76
83
|
if (column?.key === this.ASSIGNEE_KEY && !canHaveAssignee) {
|
|
@@ -269,13 +276,13 @@ export class DossierListComponent {
|
|
|
269
276
|
this.assigneeFilter$.next(tab.nextId.toUpperCase());
|
|
270
277
|
}
|
|
271
278
|
}
|
|
272
|
-
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.DossierService }, { token: i5.NGXLogger }, { token: i6.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
-
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DossierListComponent, selector: "valtimo-dossier-list", viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content pt-0\" *ngIf=\"{loading: loading$ | async} as obs\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0 || obs.loading\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-spinner *ngIf=\"obs.loading\"></valtimo-spinner>\n <ng-container *ngTemplateOutlet=\"searchFields\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #searchFields>\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"loadingDocumentSearchFields$ | async\"\n [searchFields]=\"documentSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"documentItems$ | async as documentItems\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n pagination?.collectionSize || 0\n }}</sup>\n </h3>\n </div>\n <div tabs *ngIf=\"canHaveAssignee$ | async\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ul ngbNav [destroyOnHide]=\"false\" (navChange)=\"tabChange($event)\" class=\"nav-tabs\">\n <li\n *ngFor=\"let tab of dossierVisibleTabs\"\n [ngbNavItem]=\"tab\"\n [title]=\"'dossier.tabs.' + tab | translate\"\n >\n <a ngbNavLink>{{ 'dossier.tabs.' + tab | translate }}</a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabs>\n <ul\n *ngIf=\"dossierVisibleTabs === null; else configuredTabs\"\n ngbNav\n [destroyOnHide]=\"false\"\n (navChange)=\"tabChange($event)\"\n class=\"nav-tabs\"\n >\n <li ngbNavItem=\"all\" [title]=\"'dossier.tabs.ALL' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.ALL' | translate }}</a>\n </li>\n <li ngbNavItem=\"mine\" [title]=\"'dossier.tabs.MINE' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.MINE' | translate }}</a>\n </li>\n <li ngbNavItem=\"open\" [title]=\"'dossier.tabs.OPEN' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.OPEN' | translate }}</a>\n </li>\n </ul>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type:
|
|
279
|
+
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.DossierService }, { token: i5.NGXLogger }, { token: i6.ConfigService }, { token: i7.DossierColumnService }], target: i0.ɵɵFactoryTarget.Component });
|
|
280
|
+
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DossierListComponent, selector: "valtimo-dossier-list", viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content pt-0\" *ngIf=\"{loading: loading$ | async} as obs\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0 || obs.loading\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-spinner *ngIf=\"obs.loading\"></valtimo-spinner>\n <ng-container *ngTemplateOutlet=\"searchFields\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #searchFields>\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"loadingDocumentSearchFields$ | async\"\n [searchFields]=\"documentSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"documentItems$ | async as documentItems\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n pagination?.collectionSize || 0\n }}</sup>\n </h3>\n </div>\n <div tabs *ngIf=\"canHaveAssignee$ | async\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ul ngbNav [destroyOnHide]=\"false\" (navChange)=\"tabChange($event)\" class=\"nav-tabs\">\n <li\n *ngFor=\"let tab of dossierVisibleTabs\"\n [ngbNavItem]=\"tab\"\n [title]=\"'dossier.tabs.' + tab | translate\"\n >\n <a ngbNavLink>{{ 'dossier.tabs.' + tab | translate }}</a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabs>\n <ul\n *ngIf=\"dossierVisibleTabs === null; else configuredTabs\"\n ngbNav\n [destroyOnHide]=\"false\"\n (navChange)=\"tabChange($event)\"\n class=\"nav-tabs\"\n >\n <li ngbNavItem=\"all\" [title]=\"'dossier.tabs.ALL' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.ALL' | translate }}</a>\n </li>\n <li ngbNavItem=\"mine\" [title]=\"'dossier.tabs.MINE' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.MINE' | translate }}</a>\n </li>\n <li ngbNavItem=\"open\" [title]=\"'dossier.tabs.OPEN' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.OPEN' | translate }}</a>\n </li>\n </ul>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i9.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i9.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "directive", type: i10.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i9.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName"], outputs: ["doSearch"] }, { kind: "directive", type: i10.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i10.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i10.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "component", type: i11.DossierProcessStartModalComponent, selector: "valtimo-dossier-process-start-modal" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
274
281
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DossierListComponent, decorators: [{
|
|
275
282
|
type: Component,
|
|
276
283
|
args: [{ selector: 'valtimo-dossier-list', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content pt-0\" *ngIf=\"{loading: loading$ | async} as obs\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0 || obs.loading\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-spinner *ngIf=\"obs.loading\"></valtimo-spinner>\n <ng-container *ngTemplateOutlet=\"searchFields\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #searchFields>\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"loadingDocumentSearchFields$ | async\"\n [searchFields]=\"documentSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"documentItems$ | async as documentItems\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n pagination?.collectionSize || 0\n }}</sup>\n </h3>\n </div>\n <div tabs *ngIf=\"canHaveAssignee$ | async\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ul ngbNav [destroyOnHide]=\"false\" (navChange)=\"tabChange($event)\" class=\"nav-tabs\">\n <li\n *ngFor=\"let tab of dossierVisibleTabs\"\n [ngbNavItem]=\"tab\"\n [title]=\"'dossier.tabs.' + tab | translate\"\n >\n <a ngbNavLink>{{ 'dossier.tabs.' + tab | translate }}</a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabs>\n <ul\n *ngIf=\"dossierVisibleTabs === null; else configuredTabs\"\n ngbNav\n [destroyOnHide]=\"false\"\n (navChange)=\"tabChange($event)\"\n class=\"nav-tabs\"\n >\n <li ngbNavItem=\"all\" [title]=\"'dossier.tabs.ALL' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.ALL' | translate }}</a>\n </li>\n <li ngbNavItem=\"mine\" [title]=\"'dossier.tabs.MINE' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.MINE' | translate }}</a>\n </li>\n <li ngbNavItem=\"open\" [title]=\"'dossier.tabs.OPEN' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.OPEN' | translate }}</a>\n </li>\n </ul>\n</ng-template>\n" }]
|
|
277
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.DossierService }, { type: i5.NGXLogger }, { type: i6.ConfigService }]; }, propDecorators: { processStart: [{
|
|
284
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.DossierService }, { type: i5.NGXLogger }, { type: i6.ConfigService }, { type: i7.DossierColumnService }]; }, propDecorators: { processStart: [{
|
|
278
285
|
type: ViewChild,
|
|
279
286
|
args: ['processStartModal']
|
|
280
287
|
}] } });
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBYTNELE9BQU8sRUFFTCxpQ0FBaUMsR0FLbEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBT3JELE1BQU0sT0FBTyxvQkFBb0I7SUFtTS9CLFlBQ21CLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsTUFBaUIsRUFDMUIsYUFBNEI7UUFObkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBdk0vQix1QkFBa0IsR0FBaUMsSUFBSSxDQUFDO1FBRXZELHNDQUFpQyxHQUFxQyxJQUFJLENBQUM7UUFDM0UsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUNqRSxTQUFTLENBQ1YsQ0FBQztRQUVPLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUU5QyxpQ0FBNEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUVsRSw0QkFBdUIsR0FBdUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLEVBQ2xELEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRU8scUJBQWdCLEdBQXdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQ2hGLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLENBQzdELEVBQ0QsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO1FBRU8sMEJBQXFCLEdBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9CLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3ZELFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsQ0FDckUsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1FBRUssMENBQXFDLEdBQzVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9CLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLHNCQUFzQjtZQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQztZQUM3RSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNYLEVBQ0QsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FDL0IsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQ2xGLENBQ0YsQ0FBQztRQUVLLFlBQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUNsRCxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLENBQ25FLEVBQ0QsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FDdEQsQ0FBQztRQUVlLDRCQUF1QixHQUF1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUM5RixHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLGVBQWUsc0JBQXNCLEVBQUUsQ0FBQyxDQUN2RSxDQUFDO1FBRWUsNEJBQXVCLEdBQXdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9GLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUNyRixDQUFDO1FBRWUsYUFBUSxHQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLENBQ2pFLENBQ0YsQ0FBQztRQUVhLGlCQUFZLEdBQUcsa0JBQWtCLENBQUM7UUFFMUMsWUFBTyxHQUFpQyxhQUFhLENBQUM7WUFDN0QsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLEdBQUcsT0FBTztpQkFDUCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWTtnQkFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZUFBZSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDO2dCQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDeEMsQ0FBQyxDQUFDO2dCQUNILHVFQUF1RTtpQkFDdEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNmLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUN6RCxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQztZQUNKLGlKQUFpSjtZQUNqSixHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDdkYsQ0FBQyxDQUFDO29CQUNFO3dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTt3QkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3hFLFFBQVEsRUFBRSxJQUFJO3dCQUNkLFFBQVEsRUFBRSxRQUFRO3FCQUNuQjtpQkFDRjtnQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUNILENBQUM7UUFFZSx1QkFBa0IsR0FBZTtZQUNoRCxjQUFjLEVBQUUsQ0FBQztZQUNqQixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxFQUFFO1lBQ1IscUJBQXFCLEVBQUUsQ0FBQztZQUN4QixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO1FBRWUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsU0FBUyxDQUFDLENBQUM7UUFFN0Usb0JBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3hFLENBQUM7UUFFZSwyQkFBc0IsR0FDckMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbEUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUN0QyxHQUFHLENBQ0QsQ0FBQyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxpQ0FBaUMsQ0FDbkMsc0JBQXNCLEVBQ3RCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUNuQixVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxJQUFJLENBQ2hCLENBQ0osQ0FDRixDQUFDO1FBRWEsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWlCLEtBQUssQ0FBQyxDQUFDO1FBRTdELHNCQUFpQixHQUEwQixhQUFhLENBQUM7WUFDeEUsSUFBSSxDQUFDLHNCQUFzQjtZQUMzQixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxlQUFlO1NBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQ0wsb0JBQW9CLENBQ2xCLENBQ0UsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUN6RCxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEVBQ3pELEVBQUUsQ0FDRixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLGdCQUFnQixFQUFDLENBQUMsR0FBRyxrQkFBa0I7WUFDaEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBQyxDQUFDLEdBQUcsa0JBQWtCLENBQ25GLEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsbUNBQW1DLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUMzRSxDQUFDO2dCQUNGLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FDNUMscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxjQUFjLEVBQ2QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUM1QyxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUM1QyxxQkFBcUIsRUFDckIsS0FBSyxFQUNMLGNBQWMsQ0FDZixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRU8sbUJBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDZCxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLE9BQU8sRUFBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILEVBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JDLENBQUM7UUFXQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLElBQUksSUFBSSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWU7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BELElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Z0JBQ2pELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRixNQUFNLE9BQU8sR0FDWCxzQkFBc0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFFdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLE9BQU8sbUJBQW1CLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxZQUF1QjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO2FBQzVEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWE7UUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDbkIsYUFBYSxzQkFBc0IsYUFBYSxRQUFRLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7YUFDckYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxxQ0FBcUM7YUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFO1lBQ2hELElBQUksb0NBQW9DLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbkQsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNsQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsaUNBQWlDLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLHlCQUFvRDtRQUNoRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLHlCQUF5QixDQUFDO1FBQ25FLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBb0M7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sd0JBQXdCLENBQzlCLE1BQXlCO1FBRXpCLE1BQU0sT0FBTyxHQUE0QyxFQUFFLENBQUM7UUFFNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBUSxDQUFDO1lBQzVDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRTtnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO2FBQ3ZGO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFDLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxzQkFBc0I7UUFDNUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUN0RixJQUFJLHNCQUFzQixLQUFLLDJCQUEyQixFQUFFO2dCQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsc0JBQThCO1FBQ2xELGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSxpQkFBaUIsR0FBZSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekUsTUFBTSxnQkFBZ0IsR0FBZSxJQUFJLENBQUMsbUJBQW1CLENBQzNELHNCQUFzQixFQUN0QixzQkFBc0IsQ0FDdkIsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG1CQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FDM0UsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBZ0M7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFFLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQyxrQkFBa0I7WUFDMUIsSUFBSSxFQUFFLGdCQUFnQjtTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQixDQUN6QixzQkFBK0IsRUFDL0Isc0JBQThCO1FBRTlCLE1BQU0sbUJBQW1CLEdBQ3ZCLHNCQUFzQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFFckYsT0FBTyxDQUNMLG1CQUFtQixJQUFJO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtZQUMxQixJQUFJLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtZQUM5QixJQUFJLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDbEMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLElBQUk7U0FDL0IsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQW9CO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwRCxJQUFJLFVBQVUsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLGFBQWEsRUFBRTtnQkFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUM7YUFDakY7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUNBQWlDLEtBQUssSUFBSSxFQUFFO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLFNBQW9CO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBRXBDLElBQUksV0FBVyxHQUFHLGFBQWEsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUEyQjtRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDOztrSEE1WFUsb0JBQW9CO3NHQUFwQixvQkFBb0IsK0tDbkVqQyxtdE1Bb0tBOzRGRGpHYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usc0JBQXNCO3dRQUtBLFlBQVk7c0JBQTNDLFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgRG9zc2llckxpc3RUYWIsXG4gIFNlYXJjaEZpZWxkLFxuICBTZWFyY2hGaWVsZFZhbHVlcyxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hGaWx0ZXJSYW5nZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50cyxcbiAgRG9jdW1lbnRTZXJ2aWNlLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxuICBTb3J0U3RhdGUsXG59IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEZWZhdWx0VGFic30gZnJvbSAnLi4vZG9zc2llci1kZXRhaWwtdGFiLWVudW0nO1xuaW1wb3J0IHtEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7RG9zc2llclNlcnZpY2V9IGZyb20gJy4uL2Rvc3NpZXIuc2VydmljZSc7XG5pbXBvcnQge0xpc3RGaWVsZCwgUGFnaW5hdGlvbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge05nYk5hdkNoYW5nZUV2ZW50fSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12YXJcbmRlY2xhcmUgdmFyICQ7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvY2Vzc1N0YXJ0TW9kYWwnKSBwcm9jZXNzU3RhcnQ6IERvc3NpZXJQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudDtcblxuICBwdWJsaWMgZG9zc2llclZpc2libGVUYWJzOiBBcnJheTxEb3NzaWVyTGlzdFRhYj4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHwgJycpLFxuICAgIHRhcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0Q2FzZVNldHRpbmdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoY2FzZVNldHRpbmdzID0+IGNhc2VTZXR0aW5ncz8uY2FuSGF2ZUFzc2lnbmVlKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50U2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4gfCBudWxsPiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQubmV4dCh0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQubmV4dChmYWxzZSkpXG4gICAgKTtcblxuICByZWFkb25seSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+PiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICAgOiBvZihbXSlcbiAgICAgICksXG4gICAgICBtYXAocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPT5cbiAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMuZmlsdGVyKGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5jYW5Jbml0aWFsaXplRG9jdW1lbnQpXG4gICAgICApXG4gICAgKTtcblxuICByZWFkb25seSBzY2hlbWEkID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb24gPT4gZG9jdW1lbnREZWZpbml0aW9uPy5zY2hlbWEpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+IGBsaXN0LXNlYXJjaC0ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhc1N0b3JlZFNlYXJjaFJlcXVlc3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JC5waXBlKFxuICAgIG1hcChzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5ID0+IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkpICE9PSBudWxsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8QXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4+ID1cbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvc3NpZXJTZXJ2aWNlLmdldERlZmluaXRpb25Db2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IEFTU0lHTkVFX0tFWSA9ICdhc3NpZ25lZUZ1bGxOYW1lJztcblxuICByZWFkb25seSBmaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb2x1bW5zJCxcbiAgICB0aGlzLmNhbkhhdmVBc3NpZ25lZSQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY29sdW1ucywgY2FuSGF2ZUFzc2lnbmVlXSkgPT4gW1xuICAgICAgLi4uY29sdW1uc1xuICAgICAgICAubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgIGtleTogY29sdW1uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGZpZWxkTGFiZWxzLiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApLFxuICAgICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUsXG4gICAgICAgICAgLi4uKGNvbHVtbi52aWV3VHlwZSAmJiB7dmlld1R5cGU6IGNvbHVtbi52aWV3VHlwZX0pLFxuICAgICAgICAgIC4uLihjb2x1bW4uZW51bSAmJiB7ZW51bTogY29sdW1uLmVudW19KSxcbiAgICAgICAgfSkpXG4gICAgICAgIC8vIEZpbHRlciBvdXQgYXNzaWduZWUgY29sdW1uIGlmIHRoZSBjYXNlIHR5cGUgY2FuIG5vdCBoYXZlIGFuIGFzc2lnbmVlXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uPy5rZXkgPT09IHRoaXMuQVNTSUdORUVfS0VZICYmICFjYW5IYXZlQXNzaWduZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgLy8gSWYgdGhlIGNhc2UgdHlwZSBjYW4gaGF2ZSBhbiBhc3NpZ25lZSwgYW5kIHRoZSBhc3NpZ25lZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgaW4gdGhlIGNhc2UgY29sdW1uIGRlZmluaXRpb24sIGFkZCBhbiBhc3NpZ25lZSBjb2x1bW4gYXQgdGhlIGVuZFxuICAgICAgLi4uKGNhbkhhdmVBc3NpZ25lZSAmJiAhY29sdW1ucy5maW5kKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHlOYW1lID09PSB0aGlzLkFTU0lHTkVFX0tFWSlcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogdGhpcy5BU1NJR05FRV9LRVksXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZmllbGRMYWJlbHMuJHt0aGlzLkFTU0lHTkVFX0tFWX1gKSxcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0ge1xuICAgIGNvbGxlY3Rpb25TaXplOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgc2l6ZTogMTAsXG4gICAgbWF4UGFnaW5hdGlvbkl0ZW1TaXplOiA1LFxuICAgIHNvcnQ6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25Db3B5JCA9IHRoaXMucGFnaW5hdGlvbiQucGlwZShcbiAgICBtYXAocGFnaW5hdGlvbiA9PiBwYWdpbmF0aW9uICYmIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFnaW5hdGlvbikpKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucGFnaW5hdGlvbiQsIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbcGFnaW5hdGlvbl0pID0+ICEhcGFnaW5hdGlvbiksXG4gICAgICBtYXAoXG4gICAgICAgIChbcGFnaW5hdGlvbiwgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICAgICAgbmV3IEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbChcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgLSAxLFxuICAgICAgICAgICAgcGFnaW5hdGlvbi5zaXplLFxuICAgICAgICAgICAgcGFnaW5hdGlvbi5zb3J0XG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hGaWVsZFZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkVmFsdWVzPih7fSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3NpZ25lZUZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFzc2lnbmVlRmlsdGVyPignQUxMJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudHNSZXF1ZXN0JDogT2JzZXJ2YWJsZTxEb2N1bWVudHM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudFNlYXJjaFJlcXVlc3QkLFxuICAgIHRoaXMuc2VhcmNoRmllbGRWYWx1ZXMkLFxuICAgIHRoaXMuYXNzaWduZWVGaWx0ZXIkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgKFxuICAgICAgICBbcHJldlNlYXJjaFJlcXVlc3QsIHByZXZTZWFyY2hWYWx1ZXMsIHByZXZBc3NpZ25lZUZpbHRlcl0sXG4gICAgICAgIFtjdXJyU2VhcmNoUmVxdWVzdCwgY3VyclNlYXJjaFZhbHVlcywgY3VyckFzc2lnbmVlRmlsdGVyXVxuICAgICAgKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7Li4ucHJldlNlYXJjaFJlcXVlc3QsIC4uLnByZXZTZWFyY2hWYWx1ZXN9KSArIHByZXZBc3NpZ25lZUZpbHRlciA9PT1cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoey4uLmN1cnJTZWFyY2hSZXF1ZXN0LCAuLi5jdXJyU2VhcmNoVmFsdWVzfSkgKyBjdXJyQXNzaWduZWVGaWx0ZXJcbiAgICApLFxuICAgIHRhcCgoW2RvY3VtZW50U2VhcmNoUmVxdWVzdF0pID0+IHtcbiAgICAgIHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc3RvcmVkU2VhcmNoUmVxdWVzdEtleSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBzdG9yZSByZXF1ZXN0IGluIGxvY2FsIHN0b3JhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KX1gXG4gICAgICAgICk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXksIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50U2VhcmNoUmVxdWVzdCkpO1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LCBzZWFyY2hWYWx1ZXMsIGFzc2lnbmVlRmlsdGVyXSkgPT4ge1xuICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICdBTkQnLFxuICAgICAgICAgIGFzc2lnbmVlRmlsdGVyLFxuICAgICAgICAgIHRoaXMubWFwU2VhcmNoVmFsdWVzVG9GaWx0ZXJzKHNlYXJjaFZhbHVlcylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICdBTkQnLFxuICAgICAgICAgIGFzc2lnbmVlRmlsdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgdGFwKGRvY3VtZW50cyA9PiB7XG4gICAgICB0aGlzLnNldENvbGxlY3Rpb25TaXplKGRvY3VtZW50cyk7XG4gICAgICB0aGlzLmNoZWNrUGFnZShkb2N1bWVudHMpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgZG9jdW1lbnRJdGVtcyQgPSB0aGlzLmRvY3VtZW50c1JlcXVlc3QkLnBpcGUoXG4gICAgbWFwKGRvY3VtZW50cyA9PlxuICAgICAgZG9jdW1lbnRzLmNvbnRlbnQubWFwKGRvY3VtZW50ID0+IHtcbiAgICAgICAgY29uc3Qge2NvbnRlbnQsIC4uLm90aGVyc30gPSBkb2N1bWVudDtcbiAgICAgICAgcmV0dXJuIHsuLi5jb250ZW50LCAuLi5vdGhlcnN9O1xuICAgICAgfSlcbiAgICApLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyU2VydmljZTogRG9zc2llclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5kb3NzaWVyVmlzaWJsZVRhYnMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy52aXNpYmxlRG9zc2llckxpc3RUYWJzIHx8IG51bGw7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICB9XG5cbiAgcGFnZUNoYW5nZShuZXdQYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5wYWdlICE9PSBuZXdQYWdlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIGNoYW5nZTogJHtuZXdQYWdlfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHBhZ2U6IG5ld1BhZ2V9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBhZ2VTaXplQ2hhbmdlKG5ld1BhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5zaXplICE9PSBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzID0gTWF0aC5jZWlsKHBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgLyBuZXdQYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2UgPVxuICAgICAgICAgIGFtb3VudE9mQXZhaWxhYmxlUGFnZXMgPCBwYWdpbmF0aW9uLnBhZ2UgPyBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzIDogcGFnaW5hdGlvbi5wYWdlO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIHNpemUgY2hhbmdlLiBOZXcgUGFnZTogJHtuZXdQYWdlfSBOZXcgcGFnZSBzaXplOiAke25ld1BhZ2VTaXplfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNpemU6IG5ld1BhZ2VTaXplLCBwYWdlOiBuZXdQYWdlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbiAmJiBKU09OLnN0cmluZ2lmeShwYWdpbmF0aW9uLnNvcnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTb3J0IHN0YXRlIGNoYW5nZTogJHtKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNvcnQ6IG5ld1NvcnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcm93Q2xpY2soZG9jdW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2RvY3VtZW50LmlkfS8ke0RlZmF1bHRUYWJzLnN1bW1hcnl9YCxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhcnREb3NzaWVyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJFxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0+IHtcbiAgICAgICAgaWYgKGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgJCgnI3N0YXJ0UHJvY2VzcycpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNbMF07XG4gICAgICAgICAgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9ICQoJyNzdGFydFByb2Nlc3MnKTtcbiAgICBpZiAoIXRoaXMubW9kYWxMaXN0ZW5lckFkZGVkKSB7XG4gICAgICBtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjtcbiAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG5cbiAgc2VhcmNoKHNlYXJjaEZpZWxkVmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlcyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRmllbGRWYWx1ZXMkLm5leHQoc2VhcmNoRmllbGRWYWx1ZXMgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoXG4gICAgdmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlc1xuICApOiBBcnJheTxTZWFyY2hGaWx0ZXIgfCBTZWFyY2hGaWx0ZXJSYW5nZT4ge1xuICAgIGNvbnN0IGZpbHRlcnM6IEFycmF5PFNlYXJjaEZpbHRlciB8IFNlYXJjaEZpbHRlclJhbmdlPiA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKHZhbHVlS2V5ID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdmFsdWVzW3ZhbHVlS2V5XSBhcyBhbnk7XG4gICAgICBpZiAoc2VhcmNoVmFsdWUuc3RhcnQpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKHtrZXk6IHZhbHVlS2V5LCByYW5nZUZyb206IHNlYXJjaFZhbHVlLnN0YXJ0LCByYW5nZVRvOiBzZWFyY2hWYWx1ZS5lbmR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7a2V5OiB2YWx1ZUtleSwgdmFsdWVzOiBbc2VhcmNoVmFsdWVdfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lID0+IHtcbiAgICAgIGlmIChkb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBzZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjbGVhciBwYWdpbmF0aW9uJyk7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lJC5uZXh0KGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5oYXNTdG9yZWRTZWFyY2hSZXF1ZXN0JCwgdGhpcy5zdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JCwgdGhpcy5jb2x1bW5zJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW2hhc1N0b3JlZFNlYXJjaFJlcXVlc3QsIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXksIGNvbHVtbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5nZXREZWZhdWx0UGFnaW5hdGlvbihjb2x1bW5zKTtcbiAgICAgICAgY29uc3Qgc3RvcmVkUGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0U3RvcmVkUGFnaW5hdGlvbihcbiAgICAgICAgICBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgU2V0IHBhZ2luYXRpb246ICR7SlNPTi5zdHJpbmdpZnkoc3RvcmVkUGFnaW5hdGlvbiB8fCBkZWZhdWx0UGFnaW5hdGlvbil9YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoc3RvcmVkUGFnaW5hdGlvbiB8fCBkZWZhdWx0UGFnaW5hdGlvbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFBhZ2luYXRpb24oY29sdW1uczogQXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4pOiBQYWdpbmF0aW9uIHtcbiAgICBjb25zdCBkZWZhdWx0U29ydFN0YXRlID0gdGhpcy5kb3NzaWVyU2VydmljZS5nZXRJbml0aWFsU29ydFN0YXRlKGNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLFxuICAgICAgc29ydDogZGVmYXVsdFNvcnRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yZWRQYWdpbmF0aW9uKFxuICAgIGhhc1N0b3JlZFNlYXJjaFJlcXVlc3Q6IGJvb2xlYW4sXG4gICAgc3RvcmVkU2VhcmNoUmVxdWVzdEtleTogc3RyaW5nXG4gICk6IFBhZ2luYXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0b3JlZFNlYXJjaFJlcXVlc3QgPVxuICAgICAgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCAmJiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkpKTtcblxuICAgIHJldHVybiAoXG4gICAgICBzdG9yZWRTZWFyY2hSZXF1ZXN0ICYmIHtcbiAgICAgICAgLi4udGhpcy5ERUZBVUxUX1BBR0lOQVRJT04sXG4gICAgICAgIHNvcnQ6IHN0b3JlZFNlYXJjaFJlcXVlc3Quc29ydCxcbiAgICAgICAgcGFnZTogc3RvcmVkU2VhcmNoUmVxdWVzdC5wYWdlICsgMSxcbiAgICAgICAgc2l6ZTogc3RvcmVkU2VhcmNoUmVxdWVzdC5zaXplLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbGxlY3Rpb25TaXplKGRvY3VtZW50czogRG9jdW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGlmIChwYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplICE9PSBkb2N1bWVudHMudG90YWxFbGVtZW50cykge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIGNvbGxlY3Rpb25TaXplOiBkb2N1bWVudHMudG90YWxFbGVtZW50c30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3RhcnRQcm9jZXNzTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByb2Nlc3NTdGFydC5vcGVuTW9kYWwodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pO1xuICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQYWdlKGRvY3VtZW50czogRG9jdW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudE9mSXRlbXMgPSBkb2N1bWVudHMudG90YWxFbGVtZW50cztcbiAgICAgIGNvbnN0IGFtb3VudE9mUGFnZXMgPSBNYXRoLmNlaWwoYW1vdW50T2ZJdGVtcyAvIHBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHBhZ2luYXRpb24ucGFnZTtcblxuICAgICAgaWYgKGN1cnJlbnRQYWdlID4gYW1vdW50T2ZQYWdlcykge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHBhZ2U6IGFtb3VudE9mUGFnZXN9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRhYkNoYW5nZSh0YWI6IE5nYk5hdkNoYW5nZUV2ZW50PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBwYWdlOiAxfSk7XG4gICAgfSk7XG4gICAgdGhpcy5hc3NpZ25lZUZpbHRlciQubmV4dCh0YWIubmV4dElkLnRvVXBwZXJDYXNlKCkpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQgcHQtMFwiICpuZ0lmPVwie2xvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmN9IGFzIG9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG1iLTVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkIHwgYXN5bmMgYXMgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IG10LW0zcHggbWItM1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5IG1yLTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RG9zc2llcigpXCJcbiAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDAgPyAnTm8gYWN0aW9uJyA6IG51bGxcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwIHx8IG9icy5sb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1wbHVzIG1yLTFcIj48L2k+XG4gICAgICAgICAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXG4gICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cInN0YXJ0UHJvY2Vzc0xhYmVsXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic3RhcnRQcm9jZXNzTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdkYXNoYm9hcmQuc3RhcnRQcm9jZXNzLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnY3RhLmNsb3NlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZhbHRpbW8tc3Bpbm5lciAqbmdJZj1cIm9icy5sb2FkaW5nXCI+PC92YWx0aW1vLXNwaW5uZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsICNwcm9jZXNzU3RhcnRNb2RhbD48L3ZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgIDx2YWx0aW1vLXNlYXJjaC1maWVsZHNcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgfCBhc3luY1wiXG4gICAgICBbc2VhcmNoRmllbGRzXT1cImRvY3VtZW50U2VhcmNoRmllbGRzJCB8IGFzeW5jXCJcbiAgICAgIChkb1NlYXJjaCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICBbZG9jdW1lbnREZWZpbml0aW9uTmFtZV09XCJkb2N1bWVudERlZmluaXRpb25OYW1lJCB8IGFzeW5jXCJcbiAgICA+PC92YWx0aW1vLXNlYXJjaC1maWVsZHM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Db3B5JCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzJCB8IGFzeW5jIGFzIGZpZWxkc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50SXRlbXMkIHwgYXN5bmMgYXMgZG9jdW1lbnRJdGVtc1wiPlxuICAgICAgICA8dmFsdGltby13aWRnZXQgKm5nSWY9XCJvYnMubG9hZGluZyA9PT0gZmFsc2VcIj5cbiAgICAgICAgICA8dmFsdGltby1saXN0XG4gICAgICAgICAgICBbaXRlbXNdPVwiZG9jdW1lbnRJdGVtc1wiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgW3ZpZXdNb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgW2hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgICAgICAgICAgKHBhZ2luYXRpb25DbGlja2VkKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cInBhZ2luYXRpb24uc29ydFwiXG4gICAgICAgICAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBoZWFkZXI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImxpc3QtaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNjaGVtYSQgfCBhc3luYyk/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cIm1sLTEgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb24/LmNvbGxlY3Rpb25TaXplIHx8IDBcbiAgICAgICAgICAgICAgICB9fTwvc3VwPlxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHRhYnMgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWUkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdmFsdGltby1saXN0PlxuICAgICAgICA8L3ZhbHRpbW8td2lkZ2V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb25maWd1cmVkVGFicz5cbiAgPHVsIG5nYk5hdiBbZGVzdHJveU9uSGlkZV09XCJmYWxzZVwiIChuYXZDaGFuZ2UpPVwidGFiQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cIm5hdi10YWJzXCI+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIGRvc3NpZXJWaXNpYmxlVGFic1wiXG4gICAgICBbbmdiTmF2SXRlbV09XCJ0YWJcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuJyArIHRhYiB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFicz5cbiAgPHVsXG4gICAgKm5nSWY9XCJkb3NzaWVyVmlzaWJsZVRhYnMgPT09IG51bGw7IGVsc2UgY29uZmlndXJlZFRhYnNcIlxuICAgIG5nYk5hdlxuICAgIFtkZXN0cm95T25IaWRlXT1cImZhbHNlXCJcbiAgICAobmF2Q2hhbmdlKT1cInRhYkNoYW5nZSgkZXZlbnQpXCJcbiAgICBjbGFzcz1cIm5hdi10YWJzXCJcbiAgPlxuICAgIDxsaSBuZ2JOYXZJdGVtPVwiYWxsXCIgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuQUxMJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLkFMTCcgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgPC9saT5cbiAgICA8bGkgbmdiTmF2SXRlbT1cIm1pbmVcIiBbdGl0bGVdPVwiJ2Rvc3NpZXIudGFicy5NSU5FJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLk1JTkUnIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIG5nYk5hdkl0ZW09XCJvcGVuXCIgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuT1BFTicgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ2Rvc3NpZXIudGFicy5PUEVOJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBYTNELE9BQU8sRUFFTCxpQ0FBaUMsR0FLbEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBV3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQU9yRCxNQUFNLE9BQU8sb0JBQW9CO0lBeU0vQixZQUNtQixLQUFxQixFQUNyQixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLE1BQWlCLEVBQ2pCLGFBQTRCLEVBQzVCLG9CQUEwQztRQVAxQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hD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QUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUVwQyxJQUFJLFdBQVcsR0FBRyxhQUFhLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBMkI7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7a0hBbllVLG9CQUFvQjtzR0FBcEIsb0JBQW9CLCtLQ3BFakMsbXRNQW9LQTs0RkRoR2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHNCQUFzQjsyU0FLQSxZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXNzaWduZWVGaWx0ZXIsXG4gIENvbmZpZ1NlcnZpY2UsXG4gIERlZmluaXRpb25Db2x1bW4sXG4gIERvc3NpZXJMaXN0VGFiLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRWYWx1ZXMsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoRmlsdGVyUmFuZ2UsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgQWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3RJbXBsLFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VydmljZSxcbiAgUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbixcbiAgU29ydFN0YXRlLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGVmYXVsdFRhYnN9IGZyb20gJy4uL2Rvc3NpZXItZGV0YWlsLXRhYi1lbnVtJztcbmltcG9ydCB7RG9zc2llclByb2Nlc3NTdGFydE1vZGFsQ29tcG9uZW50fSBmcm9tICcuLi9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwvZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge0Rvc3NpZXJTZXJ2aWNlfSBmcm9tICcuLi9kb3NzaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHtMaXN0RmllbGQsIFBhZ2luYXRpb259IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtOZ2JOYXZDaGFuZ2VFdmVudH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHtEb3NzaWVyQ29sdW1uU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdmFyXG5kZWNsYXJlIHZhciAkO1xuXG5tb21lbnQubG9jYWxlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nS2V5JykgfHwgJycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Byb2Nlc3NTdGFydE1vZGFsJykgcHJvY2Vzc1N0YXJ0OiBEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcHVibGljIGRvc3NpZXJWaXNpYmxlVGFiczogQXJyYXk8RG9zc2llckxpc3RUYWI+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtb2RhbExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBsb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8ICcnKSxcbiAgICB0YXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkhhdmVBc3NpZ25lZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldENhc2VTZXR0aW5ncyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICksXG4gICAgbWFwKGNhc2VTZXR0aW5ncyA9PiBjYXNlU2V0dGluZ3M/LmNhbkhhdmVBc3NpZ25lZSlcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudFNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+IHwgbnVsbD4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkLm5leHQoZmFsc2UpKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPj4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVcbiAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmZpbmRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICAgIDogb2YoW10pXG4gICAgICApLFxuICAgICAgbWFwKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0+XG4gICAgICAgIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmZpbHRlcihkZWZpbml0aW9uID0+IGRlZmluaXRpb24uY2FuSW5pdGlhbGl6ZURvY3VtZW50KVxuICAgICAgKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgc2NoZW1hJCA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uID0+IGRvY3VtZW50RGVmaW5pdGlvbj8uc2NoZW1hKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiBgbGlzdC1zZWFyY2gtJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQucGlwZShcbiAgICBtYXAoc3RvcmVkU2VhcmNoUmVxdWVzdEtleSA9PiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5KSAhPT0gbnVsbClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPEFycmF5PERlZmluaXRpb25Db2x1bW4+PiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb3NzaWVyQ29sdW1uU2VydmljZS5nZXREZWZpbml0aW9uQ29sdW1ucyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBBU1NJR05FRV9LRVkgPSAnYXNzaWduZWVGdWxsTmFtZSc7XG5cbiAgcmVhZG9ubHkgZmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY29sdW1ucyQsXG4gICAgdGhpcy5jYW5IYXZlQXNzaWduZWUkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2NvbHVtbnMsIGNhbkhhdmVBc3NpZ25lZV0pID0+IFtcbiAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uS2V5ID0gYGZpZWxkTGFiZWxzLiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWA7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgICAgY29uc3QgdmFsaWRUcmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uICE9PSB0cmFuc2xhdGlvbktleSAmJiB0cmFuc2xhdGlvbjtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGNvbHVtbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICBsYWJlbDogY29sdW1uLnRpdGxlIHx8IHZhbGlkVHJhbnNsYXRpb24gfHwgY29sdW1uLnRyYW5zbGF0aW9uS2V5LFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICAgICAgICAgIC4uLihjb2x1bW4udmlld1R5cGUgJiYge3ZpZXdUeXBlOiBjb2x1bW4udmlld1R5cGV9KSxcbiAgICAgICAgICAgIC4uLihjb2x1bW4uZW51bSAmJiB7ZW51bTogY29sdW1uLmVudW19KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAvLyBGaWx0ZXIgb3V0IGFzc2lnbmVlIGNvbHVtbiBpZiB0aGUgY2FzZSB0eXBlIGNhbiBub3QgaGF2ZSBhbiBhc3NpZ25lZVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbj8ua2V5ID09PSB0aGlzLkFTU0lHTkVFX0tFWSAmJiAhY2FuSGF2ZUFzc2lnbmVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSxcbiAgICAgIC8vIElmIHRoZSBjYXNlIHR5cGUgY2FuIGhhdmUgYW4gYXNzaWduZWUsIGFuZCB0aGUgYXNzaWduZWUgY29sdW1uIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjYXNlIGNvbHVtbiBkZWZpbml0aW9uLCBhZGQgYW4gYXNzaWduZWUgY29sdW1uIGF0IHRoZSBlbmRcbiAgICAgIC4uLihjYW5IYXZlQXNzaWduZWUgJiYgIWNvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uLnByb3BlcnR5TmFtZSA9PT0gdGhpcy5BU1NJR05FRV9LRVkpXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IHRoaXMuQVNTSUdORUVfS0VZLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGZpZWxkTGFiZWxzLiR7dGhpcy5BU1NJR05FRV9LRVl9YCksXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUEFHSU5BVElPTjogUGFnaW5hdGlvbiA9IHtcbiAgICBjb2xsZWN0aW9uU2l6ZTogMCxcbiAgICBwYWdlOiAxLFxuICAgIHNpemU6IDEwLFxuICAgIG1heFBhZ2luYXRpb25JdGVtU2l6ZTogNSxcbiAgICBzb3J0OiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBwYWdpbmF0aW9uQ29weSQgPSB0aGlzLnBhZ2luYXRpb24kLnBpcGUoXG4gICAgbWFwKHBhZ2luYXRpb24gPT4gcGFnaW5hdGlvbiAmJiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBhZ2luYXRpb24pKSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VhcmNoUmVxdWVzdCQ6IE9ic2VydmFibGU8QWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3Q+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnBhZ2luYXRpb24kLCB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3BhZ2luYXRpb25dKSA9PiAhIXBhZ2luYXRpb24pLFxuICAgICAgbWFwKFxuICAgICAgICAoW3BhZ2luYXRpb24sIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PlxuICAgICAgICAgIG5ldyBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwoXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgcGFnaW5hdGlvbi5wYWdlIC0gMSxcbiAgICAgICAgICAgIHBhZ2luYXRpb24uc2l6ZSxcbiAgICAgICAgICAgIHBhZ2luYXRpb24uc29ydFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoRmllbGRWYWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZFZhbHVlcz4oe30pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzaWduZWVGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBc3NpZ25lZUZpbHRlcj4oJ0FMTCcpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRzUmVxdWVzdCQ6IE9ic2VydmFibGU8RG9jdW1lbnRzPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JCxcbiAgICB0aGlzLnNlYXJjaEZpZWxkVmFsdWVzJCxcbiAgICB0aGlzLmFzc2lnbmVlRmlsdGVyJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgIChcbiAgICAgICAgW3ByZXZTZWFyY2hSZXF1ZXN0LCBwcmV2U2VhcmNoVmFsdWVzLCBwcmV2QXNzaWduZWVGaWx0ZXJdLFxuICAgICAgICBbY3VyclNlYXJjaFJlcXVlc3QsIGN1cnJTZWFyY2hWYWx1ZXMsIGN1cnJBc3NpZ25lZUZpbHRlcl1cbiAgICAgICkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoey4uLnByZXZTZWFyY2hSZXF1ZXN0LCAuLi5wcmV2U2VhcmNoVmFsdWVzfSkgKyBwcmV2QXNzaWduZWVGaWx0ZXIgPT09XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsuLi5jdXJyU2VhcmNoUmVxdWVzdCwgLi4uY3VyclNlYXJjaFZhbHVlc30pICsgY3VyckFzc2lnbmVlRmlsdGVyXG4gICAgKSxcbiAgICB0YXAoKFtkb2N1bWVudFNlYXJjaFJlcXVlc3RdKSA9PiB7XG4gICAgICB0aGlzLnN0b3JlZFNlYXJjaFJlcXVlc3RLZXkkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgc3RvcmUgcmVxdWVzdCBpbiBsb2NhbCBzdG9yYWdlOiAke0pTT04uc3RyaW5naWZ5KGRvY3VtZW50U2VhcmNoUmVxdWVzdCl9YFxuICAgICAgICApO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5LCBKU09OLnN0cmluZ2lmeShkb2N1bWVudFNlYXJjaFJlcXVlc3QpKTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50U2VhcmNoUmVxdWVzdCwgc2VhcmNoVmFsdWVzLCBhc3NpZ25lZUZpbHRlcl0pID0+IHtcbiAgICAgIGlmICgoT2JqZWN0LmtleXMoc2VhcmNoVmFsdWVzKSB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICB0aGlzLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICBhc3NpZ25lZUZpbHRlclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHRhcChkb2N1bWVudHMgPT4ge1xuICAgICAgdGhpcy5zZXRDb2xsZWN0aW9uU2l6ZShkb2N1bWVudHMpO1xuICAgICAgdGhpcy5jaGVja1BhZ2UoZG9jdW1lbnRzKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50SXRlbXMkID0gdGhpcy5kb2N1bWVudHNSZXF1ZXN0JC5waXBlKFxuICAgIG1hcChkb2N1bWVudHMgPT5cbiAgICAgIGRvY3VtZW50cy5jb250ZW50Lm1hcChkb2N1bWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHtjb250ZW50LCAuLi5vdGhlcnN9ID0gZG9jdW1lbnQ7XG4gICAgICAgIHJldHVybiB7Li4uY29udGVudCwgLi4ub3RoZXJzfTtcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llclNlcnZpY2U6IERvc3NpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llckNvbHVtblNlcnZpY2U6IERvc3NpZXJDb2x1bW5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZG9zc2llclZpc2libGVUYWJzID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZz8udmlzaWJsZURvc3NpZXJMaXN0VGFicyB8fCBudWxsO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHBhZ2VDaGFuZ2UobmV3UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGlmIChwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24ucGFnZSAhPT0gbmV3UGFnZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUGFnZSBjaGFuZ2U6ICR7bmV3UGFnZX1gKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBwYWdlOiBuZXdQYWdlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwYWdlU2l6ZUNoYW5nZShuZXdQYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGlmIChwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24uc2l6ZSAhPT0gbmV3UGFnZVNpemUpIHtcbiAgICAgICAgY29uc3QgYW1vdW50T2ZBdmFpbGFibGVQYWdlcyA9IE1hdGguY2VpbChwYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplIC8gbmV3UGFnZVNpemUpO1xuICAgICAgICBjb25zdCBuZXdQYWdlID1cbiAgICAgICAgICBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzIDwgcGFnaW5hdGlvbi5wYWdlID8gYW1vdW50T2ZBdmFpbGFibGVQYWdlcyA6IHBhZ2luYXRpb24ucGFnZTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUGFnZSBzaXplIGNoYW5nZS4gTmV3IFBhZ2U6ICR7bmV3UGFnZX0gTmV3IHBhZ2Ugc2l6ZTogJHtuZXdQYWdlU2l6ZX1gKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBzaXplOiBuZXdQYWdlU2l6ZSwgcGFnZTogbmV3UGFnZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ydENoYW5nZWQobmV3U29ydFN0YXRlOiBTb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgSlNPTi5zdHJpbmdpZnkocGFnaW5hdGlvbi5zb3J0KSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3U29ydFN0YXRlKSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgU29ydCBzdGF0ZSBjaGFuZ2U6ICR7SlNPTi5zdHJpbmdpZnkobmV3U29ydFN0YXRlKX1gKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBzb3J0OiBuZXdTb3J0U3RhdGV9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJvd0NsaWNrKGRvY3VtZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xuICAgICAgICBgL2Rvc3NpZXJzLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudC5pZH0vJHtEZWZhdWx0VGFicy5zdW1tYXJ5fWAsXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0RG9zc2llcigpOiB2b2lkIHtcbiAgICB0aGlzLmFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyRcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIGlmIChhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICQoJyNzdGFydFByb2Nlc3MnKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zWzBdO1xuICAgICAgICAgIHRoaXMuc2hvd1N0YXJ0UHJvY2Vzc01vZGFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWwgPSAkKCcjc3RhcnRQcm9jZXNzJyk7XG4gICAgaWYgKCF0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCkge1xuICAgICAgbW9kYWwub24oJ2hpZGRlbi5icy5tb2RhbCcsIHRoaXMuc2hvd1N0YXJ0UHJvY2Vzc01vZGFsLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb247XG4gICAgbW9kYWwubW9kYWwoJ2hpZGUnKTtcbiAgfVxuXG4gIHNlYXJjaChzZWFyY2hGaWVsZFZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkVmFsdWVzJC5uZXh0KHNlYXJjaEZpZWxkVmFsdWVzIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2VhcmNoVmFsdWVzVG9GaWx0ZXJzKFxuICAgIHZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXNcbiAgKTogQXJyYXk8U2VhcmNoRmlsdGVyIHwgU2VhcmNoRmlsdGVyUmFuZ2U+IHtcbiAgICBjb25zdCBmaWx0ZXJzOiBBcnJheTxTZWFyY2hGaWx0ZXIgfCBTZWFyY2hGaWx0ZXJSYW5nZT4gPSBbXTtcblxuICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCh2YWx1ZUtleSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHZhbHVlc1t2YWx1ZUtleV0gYXMgYW55O1xuICAgICAgaWYgKHNlYXJjaFZhbHVlLnN0YXJ0KSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7a2V5OiB2YWx1ZUtleSwgcmFuZ2VGcm9tOiBzZWFyY2hWYWx1ZS5zdGFydCwgcmFuZ2VUbzogc2VhcmNoVmFsdWUuZW5kfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2tleTogdmFsdWVLZXksIHZhbHVlczogW3NlYXJjaFZhbHVlXX0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSAhPT0gc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnY2xlYXIgcGFnaW5hdGlvbicpO1xuICAgICAgICB0aGlzLnNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCQsIHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQsIHRoaXMuY29sdW1ucyRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0LCBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5LCBjb2x1bW5zXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFBhZ2luYXRpb24oY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JlZFBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLmdldFN0b3JlZFBhZ2luYXRpb24oXG4gICAgICAgICAgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFNldCBwYWdpbmF0aW9uOiAke0pTT04uc3RyaW5naWZ5KHN0b3JlZFBhZ2luYXRpb24gfHwgZGVmYXVsdFBhZ2luYXRpb24pfWBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHN0b3JlZFBhZ2luYXRpb24gfHwgZGVmYXVsdFBhZ2luYXRpb24pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRQYWdpbmF0aW9uKGNvbHVtbnM6IEFycmF5PERlZmluaXRpb25Db2x1bW4+KTogUGFnaW5hdGlvbiB7XG4gICAgY29uc3QgZGVmYXVsdFNvcnRTdGF0ZSA9IHRoaXMuZG9zc2llclNlcnZpY2UuZ2V0SW5pdGlhbFNvcnRTdGF0ZShjb2x1bW5zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLkRFRkFVTFRfUEFHSU5BVElPTixcbiAgICAgIHNvcnQ6IGRlZmF1bHRTb3J0U3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmVkUGFnaW5hdGlvbihcbiAgICBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0OiBib29sZWFuLFxuICAgIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXk6IHN0cmluZ1xuICApOiBQYWdpbmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yZWRTZWFyY2hSZXF1ZXN0ID1cbiAgICAgIGhhc1N0b3JlZFNlYXJjaFJlcXVlc3QgJiYgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5KSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgc3RvcmVkU2VhcmNoUmVxdWVzdCAmJiB7XG4gICAgICAgIC4uLnRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLFxuICAgICAgICBzb3J0OiBzdG9yZWRTZWFyY2hSZXF1ZXN0LnNvcnQsXG4gICAgICAgIHBhZ2U6IHN0b3JlZFNlYXJjaFJlcXVlc3QucGFnZSArIDEsXG4gICAgICAgIHNpemU6IHN0b3JlZFNlYXJjaFJlcXVlc3Quc2l6ZSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2xsZWN0aW9uU2l6ZShkb2N1bWVudHM6IERvY3VtZW50cyk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSAhPT0gZG9jdW1lbnRzLnRvdGFsRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBjb2xsZWN0aW9uU2l6ZTogZG9jdW1lbnRzLnRvdGFsRWxlbWVudHN9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N0YXJ0UHJvY2Vzc01vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9jZXNzU3RhcnQub3Blbk1vZGFsKHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUGFnZShkb2N1bWVudHM6IERvY3VtZW50cyk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBjb25zdCBhbW91bnRPZkl0ZW1zID0gZG9jdW1lbnRzLnRvdGFsRWxlbWVudHM7XG4gICAgICBjb25zdCBhbW91bnRPZlBhZ2VzID0gTWF0aC5jZWlsKGFtb3VudE9mSXRlbXMgLyBwYWdpbmF0aW9uLnNpemUpO1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBwYWdpbmF0aW9uLnBhZ2U7XG5cbiAgICAgIGlmIChjdXJyZW50UGFnZSA+IGFtb3VudE9mUGFnZXMpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBwYWdlOiBhbW91bnRPZlBhZ2VzfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0YWJDaGFuZ2UodGFiOiBOZ2JOYXZDaGFuZ2VFdmVudDxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4ucGFnaW5hdGlvbiwgcGFnZTogMX0pO1xuICAgIH0pO1xuICAgIHRoaXMuYXNzaWduZWVGaWx0ZXIkLm5leHQodGFiLm5leHRJZC50b1VwcGVyQ2FzZSgpKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50IHB0LTBcIiAqbmdJZj1cIntsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBtYi01XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJCB8IGFzeW5jIGFzIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodCBtdC1tM3B4IG1iLTNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tcHJpbWFyeSBtci0wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdGFydERvc3NpZXIoKVwiXG4gICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID8gJ05vIGFjdGlvbicgOiBudWxsXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmxlbmd0aCA9PT0gMCB8fCBvYnMubG9hZGluZ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktcGx1cyBtci0xXCI+PC9pPlxuICAgICAgICAgICAge3sgJ1N0YXJ0IERvc3NpZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxuICAgICAgICAgIGlkPVwic3RhcnRQcm9jZXNzXCJcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJzdGFydFByb2Nlc3NMYWJlbFwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInN0YXJ0UHJvY2Vzc0xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnZGFzaGJvYXJkLnN0YXJ0UHJvY2Vzcy50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG0tMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiBvZiBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5wcm9jZXNzTmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ2N0YS5jbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx2YWx0aW1vLXNwaW5uZXIgKm5nSWY9XCJvYnMubG9hZGluZ1wiPjwvdmFsdGltby1zcGlubmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx2YWx0aW1vLWRvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbCAjcHJvY2Vzc1N0YXJ0TW9kYWw+PC92YWx0aW1vLWRvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkcz5cbiAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICA8dmFsdGltby1zZWFyY2gtZmllbGRzXG4gICAgICBbbG9hZGluZ109XCJsb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkIHwgYXN5bmNcIlxuICAgICAgW3NlYXJjaEZpZWxkc109XCJkb2N1bWVudFNlYXJjaEZpZWxkcyQgfCBhc3luY1wiXG4gICAgICAoZG9TZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdPVwiZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luY1wiXG4gICAgPjwvdmFsdGltby1zZWFyY2gtZmllbGRzPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdCBsZXQtb2JzPVwib2JzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdpbmF0aW9uQ29weSQgfCBhc3luYyBhcyBwYWdpbmF0aW9uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkcyQgfCBhc3luYyBhcyBmaWVsZHNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb2N1bWVudEl0ZW1zJCB8IGFzeW5jIGFzIGRvY3VtZW50SXRlbXNcIj5cbiAgICAgICAgPHZhbHRpbW8td2lkZ2V0ICpuZ0lmPVwib2JzLmxvYWRpbmcgPT09IGZhbHNlXCI+XG4gICAgICAgICAgPHZhbHRpbW8tbGlzdFxuICAgICAgICAgICAgW2l0ZW1zXT1cImRvY3VtZW50SXRlbXNcIlxuICAgICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgKHJvd0NsaWNrZWQpPVwicm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgIFt2aWV3TW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtoZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBwYWdpbmF0aW9uSWRlbnRpZmllcj1cImRvc3NpZXJMaXN0XCJcbiAgICAgICAgICAgIChwYWdpbmF0aW9uQ2xpY2tlZCk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKHBhZ2luYXRpb25TZXQpPVwicGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaW5pdGlhbFNvcnRTdGF0ZV09XCJwYWdpbmF0aW9uLnNvcnRcIlxuICAgICAgICAgICAgKHNvcnRDaGFuZ2VkKT1cInNvcnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgaGVhZGVyPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJsaXN0LWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IChzY2hlbWEkIHwgYXN5bmMpPy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDxzdXAgY2xhc3M9XCJtbC0xIGJhZGdlIGJhZGdlLXBpbGwgYmFkZ2UtcHJpbWFyeVwiPnt7XG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPy5jb2xsZWN0aW9uU2l6ZSB8fCAwXG4gICAgICAgICAgICAgICAgfX08L3N1cD5cbiAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiB0YWJzICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3ZhbHRpbW8tbGlzdD5cbiAgICAgICAgPC92YWx0aW1vLXdpZGdldD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlndXJlZFRhYnM+XG4gIDx1bCBuZ2JOYXYgW2Rlc3Ryb3lPbkhpZGVdPVwiZmFsc2VcIiAobmF2Q2hhbmdlKT1cInRhYkNoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJuYXYtdGFic1wiPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiBkb3NzaWVyVmlzaWJsZVRhYnNcIlxuICAgICAgW25nYk5hdkl0ZW1dPVwidGFiXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ2Rvc3NpZXIudGFicy4nICsgdGFiIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYnM+XG4gIDx1bFxuICAgICpuZ0lmPVwiZG9zc2llclZpc2libGVUYWJzID09PSBudWxsOyBlbHNlIGNvbmZpZ3VyZWRUYWJzXCJcbiAgICBuZ2JOYXZcbiAgICBbZGVzdHJveU9uSGlkZV09XCJmYWxzZVwiXG4gICAgKG5hdkNoYW5nZSk9XCJ0YWJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJuYXYtdGFic1wiXG4gID5cbiAgICA8bGkgbmdiTmF2SXRlbT1cImFsbFwiIFt0aXRsZV09XCInZG9zc2llci50YWJzLkFMTCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ2Rvc3NpZXIudGFicy5BTEwnIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIG5nYk5hdkl0ZW09XCJtaW5lXCIgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuTUlORScgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ2Rvc3NpZXIudGFicy5NSU5FJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBuZ2JOYXZJdGVtPVwib3BlblwiIFt0aXRsZV09XCInZG9zc2llci50YWJzLk9QRU4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8YSBuZ2JOYXZMaW5rPnt7ICdkb3NzaWVyLnRhYnMuT1BFTicgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|