@valtimo/dossier 12.4.1 → 12.4.2

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.
@@ -15,11 +15,12 @@
15
15
  */
16
16
  import { DOCUMENT } from '@angular/common';
17
17
  import { Component, Inject, RendererStyleFlags2, ViewChild, ViewContainerRef, } from '@angular/core';
18
+ import { NavigationStart } from '@angular/router';
18
19
  import { ChevronDown16 } from '@carbon/icons';
19
20
  import { CurrentCarbonTheme, PendingChangesComponent, } from '@valtimo/components';
20
21
  import { InternalCaseStatusUtils, } from '@valtimo/document';
21
22
  import moment from 'moment';
22
- import { BehaviorSubject, combineLatest, filter, map, of, startWith, Subject, switchMap, take, tap, } from 'rxjs';
23
+ import { BehaviorSubject, combineLatest, filter, map, of, startWith, Subject, Subscription, switchMap, take, tap, } from 'rxjs';
23
24
  import { DOSSIER_DETAIL_DEFAULT_DISPLAY_SIZE, DOSSIER_DETAIL_DEFAULT_DISPLAY_TYPE, DOSSIER_DETAIL_GUTTER_SIZE, } from '../../constants';
24
25
  import { TabLoaderImpl } from '../../models';
25
26
  import { CAN_ASSIGN_CASE_PERMISSION, CAN_CLAIM_CASE_PERMISSION, DOSSIER_DETAIL_PERMISSION_RESOURCE, } from '../../permissions';
@@ -129,6 +130,7 @@ export class DossierDetailComponent extends PendingChangesComponent {
129
130
  this.isDarkMode$ = this.cdsThemeService.currentTheme$.pipe(map(currentTheme => currentTheme === CurrentCarbonTheme.G90));
130
131
  this._activeChange = false;
131
132
  this._tabsInit = false;
133
+ this._subscriptions = new Subscription();
132
134
  this._snapshot = this.route.snapshot.paramMap;
133
135
  this.documentDefinitionName = this._snapshot.get('documentDefinitionName') || '';
134
136
  this.documentId = this._snapshot.get('documentId') || '';
@@ -141,11 +143,13 @@ export class DossierDetailComponent extends PendingChangesComponent {
141
143
  this.pageTitleService.disableReset();
142
144
  this.iconService.registerAll([ChevronDown16]);
143
145
  this.setDocumentStyle();
146
+ this.enableResetOnBackNavigation();
144
147
  }
145
148
  ngOnDestroy() {
146
149
  this.breadcrumbService.clearSecondBreadcrumb();
147
150
  this.pageTitleService.enableReset();
148
151
  this.removeDocumentStyle();
152
+ this._subscriptions.unsubscribe();
149
153
  }
150
154
  getAllAssociatedProcessDefinitions() {
151
155
  this.documentService
@@ -309,6 +313,13 @@ export class DossierDetailComponent extends PendingChangesComponent {
309
313
  getNestedProperty(obj, path, defaultValue) {
310
314
  return (path.split('.').reduce((currentObject, key) => currentObject?.[key], obj) || defaultValue);
311
315
  }
316
+ enableResetOnBackNavigation() {
317
+ this._subscriptions.add(this.router.events
318
+ .pipe(filter(event => event instanceof NavigationStart && event.navigationTrigger === 'popstate'))
319
+ .subscribe(() => {
320
+ this.pageTitleService.enableReset();
321
+ }));
322
+ }
312
323
  setBreadcrumb() {
313
324
  this.breadcrumbService.setSecondBreadcrumb({
314
325
  route: [`/dossiers/${this.documentDefinitionName}`],
@@ -337,11 +348,11 @@ export class DossierDetailComponent extends PendingChangesComponent {
337
348
  this.renderer.removeStyle(this.htmlDocument.getElementsByTagName('html')[0], 'overflow');
338
349
  }
339
350
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailComponent, deps: [{ token: i1.BreadcrumbService }, { token: i0.ComponentFactoryResolver }, { token: i2.ConfigService }, { token: i3.DocumentService }, { token: i4.KeycloakService }, { token: i5.NGXLogger }, { token: i6.PermissionService }, { token: i7.ActivatedRoute }, { token: i7.Router }, { token: i8.DossierTabService }, { token: i8.DossierService }, { token: i3.CaseStatusService }, { token: i1.PageTitleService }, { token: i9.IconService }, { token: i1.PageHeaderService }, { token: i8.DossierDetailLayoutService }, { token: i0.Renderer2 }, { token: i10.TaskService }, { token: i1.CdsThemeService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
340
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailComponent, selector: "valtimo-dossier-detail", providers: [DossierTabService, DossierDetailLayoutService], viewQueries: [{ propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }, { propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_tabContentContainer", first: true, predicate: ["tabContentContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n\n <div\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': isDarkMode$ | async,\n }\"\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n taskOpenedInPanel: taskOpenedInPanel$ | async,\n dossierDetailLayout: dossierDetailLayout$ | async,\n } as tabContentObs\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.dossierDetailLayout.widthAdjustable\"\n [gutterSize]=\"DOSSIER_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.dossierDetailLayout.unit\"\n >\n <as-split-area\n [size]=\"tabContentObs.dossierDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.leftPanelMaxWidth\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'dossier.tabs.noResultsDescription' | translate\"\n [title]=\"'dossier.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.dossierDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.dossierDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (!tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-list\n [openInTaskModal]=\"openTaskInModal$ | async\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n ></valtimo-dossier-detail-task-list>\n }\n\n @if (tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-detail\n [task]=\"tabContentObs.taskOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n >\n </valtimo-dossier-detail-task-detail>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div class=\"row\" *ngIf=\"(customDossierHeaderItems || []).length > 0\">\n <span\n *ngFor=\"let item of customDossierHeaderItems\"\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 class=\"mb-0 mt-0 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n\n <span *ngIf=\"item.label && item.value\">: </span>\n\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-dossier-assign-user\n *ngIf=\"canAssignLoaded$ | async\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [documentId]=\"document.id\"\n [hasPermission]=\"canAssign\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <cds-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (click)=\"claimAssignee()\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </cds-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n >\n {{ 'dossier.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"dossier-actions\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div\n class=\"dossier-status-assign-custom-title\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\">{{ obs.caseStatus.title }}</cds-tag>\n }\n\n <div class=\"dossier-assign-user\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <cds-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"obs.canHaveAssignee\"\n flip=\"true\"\n [offset]=\"(compactMode$ | async) ? {y: 48, x: -4} : {y: 48, x: 4}\"\n class=\"overflow-button assign-overflow\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n <cds-overflow-menu-option (selected)=\"unassignAssignee()\" [disabled]=\"!obs.assigneeId\">\n {{ 'assignDocument.remove' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <cds-overflow-menu\n valtimoCdsOverflowButton\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [width]=\"250\"\n [customTrigger]=\"customStartTrigger\"\n [offset]=\"{y: 48, x: 35}\"\n class=\"overflow-button case-detail-overflow\"\n >\n <cds-overflow-menu-option\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{\n (processDocumentDefinition?.id?.processDefinitionKey | translate) !==\n processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName\n }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;max-height:calc(100vh - 248px)}.tab-container--compact{max-height:calc(100vh - 208px)}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.loading-container{display:flex;justify-content:center;flex-direction:row}.dossier-detail-page-header{display:flex;width:100%;justify-content:flex-start;padding-bottom:5px}.dossier-detail-page-header ::ng-deep .cds--tag{margin:0}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.cds--overflow-menu-options{margin-top:32px}.assign-overflow{margin-right:8px}.buttons-container{display:flex;flex-direction:row}.dossier-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.dossier-actions.--compact{padding-bottom:0;align-items:flex-start}.dossier-actions ::ng-deep .version-selection{width:160px}.dossier-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.dossier-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.dossier-status-assign-custom-title .cds--tag{margin:0;height:var(--cds-layout-size-height-md)}.dossier-status-assign-custom-title.--compact{align-items:center}.tab-content-container{overflow:hidden;display:flex;gap:32px;overflow:auto;margin-bottom:16px}.task-panel{width:100%;transition:height .15s ease-in-out}.container-fluid{height:100%}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAgEBAYcDngAAAAAASUVORK5CYII=);--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i12.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i9.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i9.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "component", type: i1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i1.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i9.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i9.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i9.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i1.ValtimoCdsOverflowButtonDirective, selector: "[valtimoCdsOverflowButton]", inputs: ["width"] }, { kind: "component", type: i13.DossierDetailTaskListComponent, selector: "valtimo-dossier-detail-task-list", inputs: ["openInTaskModal"], outputs: ["taskClickEvent"] }, { kind: "component", type: i14.DossierDetailsTaskDetailComponent, selector: "valtimo-dossier-detail-task-detail", inputs: ["task"], outputs: ["closeEvent", "assignmentOfTaskChanged", "activeChange", "formSubmit"] }, { kind: "component", type: i15.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i15.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: i16.DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", outputs: ["formSubmit"] }, { kind: "component", type: i17.DossierAssignUserComponent, selector: "valtimo-dossier-assign-user", inputs: ["documentId", "assigneeId", "assigneeFullName", "hasPermission"], outputs: ["assignmentOfDocumentChanged"] }, { kind: "pipe", type: i11.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }, { kind: "pipe", type: i19.TabTranslatePipe, name: "tabTranslate" }] }); }
351
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailComponent, selector: "valtimo-dossier-detail", providers: [DossierTabService, DossierDetailLayoutService], viewQueries: [{ propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }, { propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_tabContentContainer", first: true, predicate: ["tabContentContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n\n <div\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': isDarkMode$ | async,\n }\"\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n dossierDetailLayout: dossierDetailLayout$ | async,\n } as tabContentObs\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.dossierDetailLayout.widthAdjustable\"\n [gutterSize]=\"DOSSIER_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.dossierDetailLayout.unit\"\n >\n <as-split-area\n [size]=\"tabContentObs.dossierDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.leftPanelMaxWidth\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'dossier.tabs.noResultsDescription' | translate\"\n [title]=\"'dossier.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.dossierDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.dossierDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (!tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-list\n [openInTaskModal]=\"openTaskInModal$ | async\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n ></valtimo-dossier-detail-task-list>\n }\n\n @if (tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-detail\n [task]=\"tabContentObs.taskOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n >\n </valtimo-dossier-detail-task-detail>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div class=\"row\" *ngIf=\"(customDossierHeaderItems || []).length > 0\">\n <span\n *ngFor=\"let item of customDossierHeaderItems\"\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 class=\"mb-0 mt-0 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n\n <span *ngIf=\"item.label && item.value\">: </span>\n\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-dossier-assign-user\n *ngIf=\"canAssignLoaded$ | async\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [documentId]=\"document.id\"\n [hasPermission]=\"canAssign\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <cds-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (click)=\"claimAssignee()\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </cds-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n >\n {{ 'dossier.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"dossier-actions\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div\n class=\"dossier-status-assign-custom-title\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\">{{ obs.caseStatus.title }}</cds-tag>\n }\n\n <div class=\"dossier-assign-user\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <cds-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"obs.canHaveAssignee\"\n flip=\"true\"\n [offset]=\"(compactMode$ | async) ? {y: 48, x: -4} : {y: 48, x: 4}\"\n class=\"overflow-button assign-overflow\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n <cds-overflow-menu-option (selected)=\"unassignAssignee()\" [disabled]=\"!obs.assigneeId\">\n {{ 'assignDocument.remove' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <cds-overflow-menu\n valtimoCdsOverflowButton\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [width]=\"250\"\n [customTrigger]=\"customStartTrigger\"\n [offset]=\"{y: 48, x: 35}\"\n class=\"overflow-button case-detail-overflow\"\n >\n <cds-overflow-menu-option\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{\n (processDocumentDefinition?.id?.processDefinitionKey | translate) !==\n processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName\n }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;max-height:calc(100vh - 248px)}.tab-container--compact{max-height:calc(100vh - 208px)}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.loading-container{display:flex;justify-content:center;flex-direction:row}.dossier-detail-page-header{display:flex;width:100%;justify-content:flex-start;padding-bottom:5px}.dossier-detail-page-header ::ng-deep .cds--tag{margin:0}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.cds--overflow-menu-options{margin-top:32px}.assign-overflow{margin-right:8px}.buttons-container{display:flex;flex-direction:row}.dossier-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.dossier-actions.--compact{padding-bottom:0;align-items:flex-start}.dossier-actions ::ng-deep .version-selection{width:160px}.dossier-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.dossier-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.dossier-status-assign-custom-title .cds--tag{margin:0;height:var(--cds-layout-size-height-md)}.dossier-status-assign-custom-title.--compact{align-items:center}.tab-content-container{overflow:hidden;display:flex;gap:32px;overflow:auto;margin-bottom:16px}.task-panel{width:100%;transition:height .15s ease-in-out}.container-fluid{height:100%}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAgEBAYcDngAAAAAASUVORK5CYII=);--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i12.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i9.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i9.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "component", type: i1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i1.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i9.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i9.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i9.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i1.ValtimoCdsOverflowButtonDirective, selector: "[valtimoCdsOverflowButton]", inputs: ["width"] }, { kind: "component", type: i13.DossierDetailTaskListComponent, selector: "valtimo-dossier-detail-task-list", inputs: ["openInTaskModal"], outputs: ["taskClickEvent"] }, { kind: "component", type: i14.DossierDetailsTaskDetailComponent, selector: "valtimo-dossier-detail-task-detail", inputs: ["task"], outputs: ["closeEvent", "assignmentOfTaskChanged", "activeChange", "formSubmit"] }, { kind: "component", type: i15.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i15.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: i16.DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", outputs: ["formSubmit"] }, { kind: "component", type: i17.DossierAssignUserComponent, selector: "valtimo-dossier-assign-user", inputs: ["documentId", "assigneeId", "assigneeFullName", "hasPermission"], outputs: ["assignmentOfDocumentChanged"] }, { kind: "pipe", type: i11.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }, { kind: "pipe", type: i19.TabTranslatePipe, name: "tabTranslate" }] }); }
341
352
  }
342
353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailComponent, decorators: [{
343
354
  type: Component,
344
- args: [{ selector: 'valtimo-dossier-detail', providers: [DossierTabService, DossierDetailLayoutService], template: "<!--\n ~ Copyright 2015-2024 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n\n <div\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': isDarkMode$ | async,\n }\"\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n taskOpenedInPanel: taskOpenedInPanel$ | async,\n dossierDetailLayout: dossierDetailLayout$ | async,\n } as tabContentObs\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.dossierDetailLayout.widthAdjustable\"\n [gutterSize]=\"DOSSIER_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.dossierDetailLayout.unit\"\n >\n <as-split-area\n [size]=\"tabContentObs.dossierDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.leftPanelMaxWidth\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'dossier.tabs.noResultsDescription' | translate\"\n [title]=\"'dossier.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.dossierDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.dossierDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (!tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-list\n [openInTaskModal]=\"openTaskInModal$ | async\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n ></valtimo-dossier-detail-task-list>\n }\n\n @if (tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-detail\n [task]=\"tabContentObs.taskOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n >\n </valtimo-dossier-detail-task-detail>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div class=\"row\" *ngIf=\"(customDossierHeaderItems || []).length > 0\">\n <span\n *ngFor=\"let item of customDossierHeaderItems\"\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 class=\"mb-0 mt-0 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n\n <span *ngIf=\"item.label && item.value\">: </span>\n\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-dossier-assign-user\n *ngIf=\"canAssignLoaded$ | async\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [documentId]=\"document.id\"\n [hasPermission]=\"canAssign\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <cds-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (click)=\"claimAssignee()\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </cds-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n >\n {{ 'dossier.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"dossier-actions\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div\n class=\"dossier-status-assign-custom-title\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\">{{ obs.caseStatus.title }}</cds-tag>\n }\n\n <div class=\"dossier-assign-user\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <cds-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"obs.canHaveAssignee\"\n flip=\"true\"\n [offset]=\"(compactMode$ | async) ? {y: 48, x: -4} : {y: 48, x: 4}\"\n class=\"overflow-button assign-overflow\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n <cds-overflow-menu-option (selected)=\"unassignAssignee()\" [disabled]=\"!obs.assigneeId\">\n {{ 'assignDocument.remove' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <cds-overflow-menu\n valtimoCdsOverflowButton\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [width]=\"250\"\n [customTrigger]=\"customStartTrigger\"\n [offset]=\"{y: 48, x: 35}\"\n class=\"overflow-button case-detail-overflow\"\n >\n <cds-overflow-menu-option\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{\n (processDocumentDefinition?.id?.processDefinitionKey | translate) !==\n processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName\n }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;max-height:calc(100vh - 248px)}.tab-container--compact{max-height:calc(100vh - 208px)}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.loading-container{display:flex;justify-content:center;flex-direction:row}.dossier-detail-page-header{display:flex;width:100%;justify-content:flex-start;padding-bottom:5px}.dossier-detail-page-header ::ng-deep .cds--tag{margin:0}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.cds--overflow-menu-options{margin-top:32px}.assign-overflow{margin-right:8px}.buttons-container{display:flex;flex-direction:row}.dossier-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.dossier-actions.--compact{padding-bottom:0;align-items:flex-start}.dossier-actions ::ng-deep .version-selection{width:160px}.dossier-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.dossier-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.dossier-status-assign-custom-title .cds--tag{margin:0;height:var(--cds-layout-size-height-md)}.dossier-status-assign-custom-title.--compact{align-items:center}.tab-content-container{overflow:hidden;display:flex;gap:32px;overflow:auto;margin-bottom:16px}.task-panel{width:100%;transition:height .15s ease-in-out}.container-fluid{height:100%}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAgEBAYcDngAAAAAASUVORK5CYII=);--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}\n"] }]
355
+ args: [{ selector: 'valtimo-dossier-detail', providers: [DossierTabService, DossierDetailLayoutService], template: "<!--\n ~ Copyright 2015-2024 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n\n <div\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': isDarkMode$ | async,\n }\"\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n dossierDetailLayout: dossierDetailLayout$ | async,\n } as tabContentObs\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.dossierDetailLayout.widthAdjustable\"\n [gutterSize]=\"DOSSIER_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.dossierDetailLayout.unit\"\n >\n <as-split-area\n [size]=\"tabContentObs.dossierDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.leftPanelMaxWidth\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'dossier.tabs.noResultsDescription' | translate\"\n [title]=\"'dossier.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.dossierDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.dossierDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.dossierDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.dossierDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (!tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-list\n [openInTaskModal]=\"openTaskInModal$ | async\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n ></valtimo-dossier-detail-task-list>\n }\n\n @if (tabContentObs.taskOpenedInPanel) {\n <valtimo-dossier-detail-task-detail\n [task]=\"tabContentObs.taskOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n >\n </valtimo-dossier-detail-task-detail>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-dossier-supporting-process-start-modal\n (formSubmit)=\"tabLoader.refreshView()\"\n #supportingProcessStartModal\n ></valtimo-dossier-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div class=\"row\" *ngIf=\"(customDossierHeaderItems || []).length > 0\">\n <span\n *ngFor=\"let item of customDossierHeaderItems\"\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 class=\"mb-0 mt-0 align-self-end col-xl-{{ item.columnSize }} col-lg-{{\n item.columnSize * 2\n }} {{ item.customClass }}\"\n >\n <span *ngIf=\"item.label\">{{ item.label | translate }}</span>\n\n <span *ngIf=\"item.label && item.value\">: </span>\n\n <strong>{{ item.value }}</strong>\n </span>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-dossier-assign-user\n *ngIf=\"canAssignLoaded$ | async\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [documentId]=\"document.id\"\n [hasPermission]=\"canAssign\"\n (assignmentOfDocumentChanged)=\"assignmentOfDocumentChanged()\"\n ></valtimo-dossier-assign-user>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <cds-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (click)=\"claimAssignee()\"\n >\n <span>{{ 'dossier.claimAssigneeCase' | translate }}</span>\n </cds-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"processDocumentDefinitions.length === 0\"\n [ngbTooltip]=\"processDocumentDefinitions.length === 0 ? 'No action' : null\"\n >\n {{ 'dossier.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"dossier-actions\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div\n class=\"dossier-status-assign-custom-title\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\">{{ obs.caseStatus.title }}</cds-tag>\n }\n\n <div class=\"dossier-assign-user\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <cds-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n *ngIf=\"obs.canHaveAssignee\"\n flip=\"true\"\n [offset]=\"(compactMode$ | async) ? {y: 48, x: -4} : {y: 48, x: 4}\"\n class=\"overflow-button assign-overflow\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n <cds-overflow-menu-option (selected)=\"unassignAssignee()\" [disabled]=\"!obs.assigneeId\">\n {{ 'assignDocument.remove' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <cds-overflow-menu\n valtimoCdsOverflowButton\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [width]=\"250\"\n [customTrigger]=\"customStartTrigger\"\n [offset]=\"{y: 48, x: 35}\"\n class=\"overflow-button case-detail-overflow\"\n >\n <cds-overflow-menu-option\n *ngFor=\"let processDocumentDefinition of processDocumentDefinitions\"\n (click)=\"startProcess(processDocumentDefinition)\"\n >\n {{\n (processDocumentDefinition?.id?.processDefinitionKey | translate) !==\n processDocumentDefinition?.id?.processDefinitionKey\n ? (processDocumentDefinition.id.processDefinitionKey | translate)\n : processDocumentDefinition.processName\n }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;max-height:calc(100vh - 248px)}.tab-container--compact{max-height:calc(100vh - 208px)}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.loading-container{display:flex;justify-content:center;flex-direction:row}.dossier-detail-page-header{display:flex;width:100%;justify-content:flex-start;padding-bottom:5px}.dossier-detail-page-header ::ng-deep .cds--tag{margin:0}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.cds--overflow-menu-options{margin-top:32px}.assign-overflow{margin-right:8px}.buttons-container{display:flex;flex-direction:row}.dossier-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.dossier-actions.--compact{padding-bottom:0;align-items:flex-start}.dossier-actions ::ng-deep .version-selection{width:160px}.dossier-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.dossier-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.dossier-status-assign-custom-title .cds--tag{margin:0;height:var(--cds-layout-size-height-md)}.dossier-status-assign-custom-title.--compact{align-items:center}.tab-content-container{overflow:hidden;display:flex;gap:32px;overflow:auto;margin-bottom:16px}.task-panel{width:100%;transition:height .15s ease-in-out}.container-fluid{height:100%}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAgEBAYcDngAAAAAASUVORK5CYII=);--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}\n"] }]
345
356
  }], ctorParameters: () => [{ type: i1.BreadcrumbService }, { type: i0.ComponentFactoryResolver }, { type: i2.ConfigService }, { type: i3.DocumentService }, { type: i4.KeycloakService }, { type: i5.NGXLogger }, { type: i6.PermissionService }, { type: i7.ActivatedRoute }, { type: i7.Router }, { type: i8.DossierTabService }, { type: i8.DossierService }, { type: i3.CaseStatusService }, { type: i1.PageTitleService }, { type: i9.IconService }, { type: i1.PageHeaderService }, { type: i8.DossierDetailLayoutService }, { type: i0.Renderer2 }, { type: i10.TaskService }, { type: i1.CdsThemeService }, { type: Document, decorators: [{
346
357
  type: Inject,
347
358
  args: [DOCUMENT]
@@ -355,4 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
355
366
  type: ViewChild,
356
367
  args: ['tabContentContainer']
357
368
  }] } });
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC9kb3NzaWVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsL2Rvc3NpZXItZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUdOLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUdMLGtCQUFrQixFQUdsQix1QkFBdUIsR0FDeEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBS0wsdUJBQXVCLEdBRXhCLE1BQU0sbUJBQW1CLENBQUM7QUFLM0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsbUNBQW1DLEVBQ25DLG1DQUFtQyxFQUNuQywwQkFBMEIsR0FDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQVUsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BE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Q0FBQztRQUU1RCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNqRCxVQUFVLEVBQ1YsUUFBUSxFQUNSLG1CQUFtQixDQUFDLFNBQVMsQ0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRixDQUFDOytHQXJjVSxzQkFBc0IsOGxCQThMdkIsUUFBUTttR0E5TFAsc0JBQXNCLGlEQUZ0QixDQUFDLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDLCtPQVN4QixnQkFBZ0Isa0tDOUZwRCwyMFRBbVJBOzs0RkQ1TGEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDOzswQkFnTXZELE1BQU07MkJBQUMsUUFBUTt5Q0F6TGxCLHNCQUFzQjtzQkFEckIsU0FBUzt1QkFBQyw2QkFBNkI7Z0JBSXhDLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQkFJbEMsb0JBQW9CO3NCQURwQyxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbU1hcCwgUGFyYW1zLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0NoZXZyb25Eb3duMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgQnJlYWRjcnVtYlNlcnZpY2UsXG4gIENkc1RoZW1lU2VydmljZSxcbiAgQ3VycmVudENhcmJvblRoZW1lLFxuICBQYWdlSGVhZGVyU2VydmljZSxcbiAgUGFnZVRpdGxlU2VydmljZSxcbiAgUGVuZGluZ0NoYW5nZXNDb21wb25lbnQsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtcbiAgQ2FzZVN0YXR1c1NlcnZpY2UsXG4gIERvY3VtZW50IGFzIFZhbHRpbW9Eb2N1bWVudCxcbiAgRG9jdW1lbnRTZXJ2aWNlLFxuICBJbnRlcm5hbENhc2VTdGF0dXMsXG4gIEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1Byb2Nlc3NJbnN0YW5jZVRhc2t9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtJbnRlcm1lZGlhdGVTdWJtaXNzaW9uLCBUYXNrLCBUYXNrU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vdGFzayc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERPU1NJRVJfREVUQUlMX0RFRkFVTFRfRElTUExBWV9TSVpFLFxuICBET1NTSUVSX0RFVEFJTF9ERUZBVUxUX0RJU1BMQVlfVFlQRSxcbiAgRE9TU0lFUl9ERVRBSUxfR1VUVEVSX1NJWkUsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1RhYkltcGwsIFRhYkxvYWRlckltcGx9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBDQU5fQVNTSUdOX0NBU0VfUEVSTUlTU0lPTixcbiAgQ0FOX0NMQUlNX0NBU0VfUEVSTUlTU0lPTixcbiAgRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbn0gZnJvbSAnLi4vLi4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IHtEb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZSwgRG9zc2llclNlcnZpY2UsIERvc3NpZXJUYWJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0Rvc3NpZXJTdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtEb3NzaWVyVGFiU2VydmljZSwgRG9zc2llckRldGFpbExheW91dFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsQ29tcG9uZW50XG4gIGV4dGVuZHMgUGVuZGluZ0NoYW5nZXNDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZCgnc3VwcG9ydGluZ1Byb2Nlc3NTdGFydE1vZGFsJylcbiAgc3VwcG9ydGluZ1Byb2Nlc3NTdGFydDogRG9zc2llclN1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCd0YWJDb250YWluZXInLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQFZpZXdDaGlsZCgndGFiQ29udGVudENvbnRhaW5lcicpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhYkNvbnRlbnRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBwdWJsaWMgY3VzdG9tRG9zc2llckhlYWRlckl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBkb2N1bWVudDogVmFsdGltb0RvY3VtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkb2N1bWVudERlZmluaXRpb25OYW1lVGl0bGU6IHN0cmluZztcbiAgcHVibGljIGRvY3VtZW50SWQ6IHN0cmluZztcbiAgcHVibGljIHByb2Nlc3NEZWZpbml0aW9uTGlzdEZpZWxkczogQXJyYXk8YW55PiA9IFtdO1xuICBwdWJsaWMgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnM6IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25bXSA9IFtdO1xuICBwdWJsaWMgdGFiTG9hZGVyOiBUYWJMb2FkZXJJbXBsIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbmVlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJtZWRpYXRlU3VibWlzc2lvbiB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGFza09wZW5lZEluUGFuZWwkID0gdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS50YXNrT3BlbmVkSW5QYW5lbCQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2FzZVN0YXR1c0tleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGwgfCAnTk9UX0FWQUlMQUJMRSc+KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYXNlU3RhdHVzS2V5JDogT2JzZXJ2YWJsZTxzdHJpbmcgfCAnTk9UX0FWQUlMQUJMRSc+ID0gdGhpcy5fY2FzZVN0YXR1c0tleSQucGlwZShcbiAgICBmaWx0ZXIoa2V5ID0+ICEha2V5KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCQ6IE9ic2VydmFibGU8VmFsdGltb0RvY3VtZW50IHwgbnVsbD4gPVxuICAgIHRoaXMuZG9zc2llclNlcnZpY2UucmVmcmVzaERvY3VtZW50JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucm91dGUucGFyYW1zKSxcbiAgICAgIG1hcCgocGFyYW1zOiBQYXJhbXMpID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgICBzd2l0Y2hNYXAoKGRvY3VtZW50SWQ6IHN0cmluZykgPT5cbiAgICAgICAgZG9jdW1lbnRJZCA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50KHRoaXMuZG9jdW1lbnRJZCkgOiBvZihudWxsKVxuICAgICAgKSxcbiAgICAgIHRhcCgoZG9jdW1lbnQ6IFZhbHRpbW9Eb2N1bWVudCB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKGRvY3VtZW50KSB7XG4gICAgICAgICAgdGhpcy5hc3NpZ25lZUlkJC5uZXh0KGRvY3VtZW50LmFzc2lnbmVlSWQpO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgICB0aGlzLl9jYXNlU3RhdHVzS2V5JC5uZXh0KGRvY3VtZW50Py5pbnRlcm5hbFN0YXR1cyB8fCAnTk9UX0FWQUlMQUJMRScpO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5jdXN0b21Eb3NzaWVySGVhZGVyPy5oYXNPd25Qcm9wZXJ0eShcbiAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRG9zc2llckhlYWRlckl0ZW1zLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5jdXN0b21Eb3NzaWVySGVhZGVyW1xuICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgXT8uZm9yRWFjaChpdGVtID0+IHRoaXMuZ2V0Q3VzdG9tRG9zc2llckhlYWRlckl0ZW0oaXRlbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8ICcnKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYXNlU3RhdHVzJDogT2JzZXJ2YWJsZTxJbnRlcm5hbENhc2VTdGF0dXMgfCB1bmRlZmluZWQ+ID1cbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBmaWx0ZXIoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiAhIWRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy5jYXNlU3RhdHVzU2VydmljZS5nZXRJbnRlcm5hbENhc2VTdGF0dXNlcyhkb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICAgICAgICB0aGlzLmNhc2VTdGF0dXNLZXkkLFxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIG1hcChcbiAgICAgICAgKFtzdGF0dXNlcywga2V5XSkgPT4ga2V5ICE9PSAnTk9UX0FWQUlMQUJMRScgJiYgc3RhdHVzZXMuZmluZChzdGF0dXMgPT4gc3RhdHVzPy5rZXkgPT09IGtleSlcbiAgICAgICksXG4gICAgICBtYXAoXG4gICAgICAgIHN0YXR1cyA9PlxuICAgICAgICAgIHN0YXR1cyAmJiB7XG4gICAgICAgICAgICAuLi5zdGF0dXMsXG4gICAgICAgICAgICB0YWdUeXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJJZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG9mKFxuICAgIHRoaXMua2V5Q2xvYWtTZXJ2aWNlLmlzTG9nZ2VkSW4oKVxuICApLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMua2V5Q2xvYWtTZXJ2aWNlLmxvYWRVc2VyUHJvZmlsZSgpKSxcbiAgICBtYXAocHJvZmlsZSA9PiBwcm9maWxlPy5pZClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNBc3NpZ25pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc0Fzc2lnbmVkVG9DdXJyZW50VXNlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFzc2lnbmVlSWQkLFxuICAgIHRoaXMudXNlcklkJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFthc3NpZ25lZUlkLCB1c2VySWRdKSA9PiAhIWFzc2lnbmVlSWQgJiYgISF1c2VySWQgJiYgYXNzaWduZWVJZCA9PT0gdXNlcklkKSxcbiAgICBzdGFydFdpdGgodHJ1ZSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0Q2FzZVNldHRpbmdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoY2FzZVNldHRpbmdzID0+IGNhc2VTZXR0aW5ncz8uY2FuSGF2ZUFzc2lnbmVlKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Mb2FkZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxuICAgIHN3aXRjaE1hcCgocGFyYW1zOiBQYXJhbU1hcCkgPT5cbiAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24oQ0FOX0FTU0lHTl9DQVNFX1BFUk1JU1NJT04sIHtcbiAgICAgICAgcmVzb3VyY2U6IERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UuanNvblNjaGVtYURvY3VtZW50LFxuICAgICAgICBpZGVudGlmaWVyOiBwYXJhbXMuZ2V0KCdkb2N1bWVudElkJykgPz8gJycsXG4gICAgICB9KVxuICAgICksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuY2FuQXNzaWduTG9hZGVkJC5uZXh0KHRydWUpO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkNsYWltJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcbiAgICBzd2l0Y2hNYXAoKHBhcmFtczogUGFyYW1NYXApID0+XG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9DTEFJTV9DQVNFX1BFUk1JU1NJT04sIHtcbiAgICAgICAgcmVzb3VyY2U6IERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UuanNvblNjaGVtYURvY3VtZW50LFxuICAgICAgICBpZGVudGlmaWVyOiBwYXJhbXMuZ2V0KCdkb2N1bWVudElkJykgPz8gJycsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1RhYnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IG5vVGFic0NvbmZpZ3VyZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBhY3RpdmVUYWIkOiBPYnNlcnZhYmxlPFRhYkltcGw+O1xuXG4gIHB1YmxpYyByZWFkb25seSBjb21wYWN0TW9kZSQgPSB0aGlzLnBhZ2VIZWFkZXJTZXJ2aWNlLmNvbXBhY3RNb2RlJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGFiSG9yaXpvbnRhbE92ZXJmbG93RGlzYWJsZWQgPVxuICAgIHRoaXMuZG9zc2llclRhYlNlcnZpY2UudGFiSG9yaXpvbnRhbE92ZXJmbG93RGlzYWJsZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNob3dUYXNrTGlzdCQgPSB0aGlzLmRvc3NpZXJUYWJTZXJ2aWNlLnNob3dUYXNrTGlzdCQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVGFiTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgZ2V0IGFjdGl2ZVRhYk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLnJvdXRlLnBhcmFtTWFwLCB0aGlzLl9hY3RpdmVUYWJOYW1lJF0pLnBpcGUoXG4gICAgICBtYXAoKFtwYXJhbU1hcCwgYWN0aXZlVGFiTmFtZV0pID0+XG4gICAgICAgICFhY3RpdmVUYWJOYW1lID8gKHBhcmFtTWFwLmdldCgndGFiJykgPz8gbnVsbCkgOiBhY3RpdmVUYWJOYW1lXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBET1NTSUVSX0RFVEFJTF9HVVRURVJfU0laRSA9IERPU1NJRVJfREVUQUlMX0dVVFRFUl9TSVpFO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb3NzaWVyRGV0YWlsTGF5b3V0JCA9IHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2UuZG9zc2llckRldGFpbExheW91dCQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW5UYXNrSW5Nb2RhbCQgPSBuZXcgU3ViamVjdDxUYXNrPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0RhcmtNb2RlJCA9IHRoaXMuY2RzVGhlbWVTZXJ2aWNlLmN1cnJlbnRUaGVtZSQucGlwZShcbiAgICBtYXAoY3VycmVudFRoZW1lID0+IGN1cnJlbnRUaGVtZSA9PT0gQ3VycmVudENhcmJvblRoZW1lLkc5MClcbiAgKTtcblxuICBwcml2YXRlIF9zbmFwc2hvdDogUGFyYW1NYXA7XG4gIHByaXZhdGUgX2luaXRpYWxUYWJOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2FjdGl2ZUNoYW5nZSA9IGZhbHNlO1xuICBwcml2YXRlIF9vbGRUYWJOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BlbmRpbmdUYWI6IFRhYkltcGw7XG4gIHByaXZhdGUgX29ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX3RhYnNJbml0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleUNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJUYWJTZXJ2aWNlOiBEb3NzaWVyVGFiU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJTZXJ2aWNlOiBEb3NzaWVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VTdGF0dXNTZXJ2aWNlOiBDYXNlU3RhdHVzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VUaXRsZVNlcnZpY2U6IFBhZ2VUaXRsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlSGVhZGVyU2VydmljZTogUGFnZUhlYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZTogRG9zc2llckRldGFpbExheW91dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza1NlcnZpY2U6IFRhc2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RzVGhlbWVTZXJ2aWNlOiBDZHNUaGVtZVNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBodG1sRG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc25hcHNob3QgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwO1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHRoaXMuX3NuYXBzaG90LmdldCgnZG9jdW1lbnREZWZpbml0aW9uTmFtZScpIHx8ICcnO1xuICAgIHRoaXMuZG9jdW1lbnRJZCA9IHRoaXMuX3NuYXBzaG90LmdldCgnZG9jdW1lbnRJZCcpIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRUYWJMb2FkZXIoKTtcbiAgICB0aGlzLmluaXRCcmVhZGNydW1iKCk7XG4gICAgdGhpcy5nZXRBbGxBc3NvY2lhdGVkUHJvY2Vzc0RlZmluaXRpb25zKCk7XG4gICAgdGhpcy5vcGVuV2lkdGhPYnNlcnZlcigpO1xuICAgIHRoaXMucGFnZVRpdGxlU2VydmljZS5kaXNhYmxlUmVzZXQoKTtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtDaGV2cm9uRG93bjE2XSk7XG4gICAgdGhpcy5zZXREb2N1bWVudFN0eWxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5icmVhZGNydW1iU2VydmljZS5jbGVhclNlY29uZEJyZWFkY3J1bWIoKTtcbiAgICB0aGlzLnBhZ2VUaXRsZVNlcnZpY2UuZW5hYmxlUmVzZXQoKTtcbiAgICB0aGlzLnJlbW92ZURvY3VtZW50U3R5bGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbGxBc3NvY2lhdGVkUHJvY2Vzc0RlZmluaXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zQnlTdGFydGFibGVCeVVzZXIodGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lLCB0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnM6IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25bXSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnM7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbkxpc3RGaWVsZHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAncHJvY2Vzc05hbWUnLFxuICAgICAgICAgICAgbGFiZWw6ICdQcm9jZXMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc3VwcG9ydGluZ1Byb2Nlc3NTdGFydC5vcGVuTW9kYWwocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiwgdGhpcy5kb2N1bWVudElkKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGFpbUFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnVzZXJJZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoKHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmFzc2lnbkhhbmRsZXJUb0RvY3VtZW50KHRoaXMuZG9jdW1lbnRJZCwgdXNlcklkID8/ICcnKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZG9zc2llclNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBhc3NpZ25pbmcgdXNlciB0byBjYXNlJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmFzc2lnbkFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBc3NpZ25pbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnVzZXJJZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoKHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVuYXNzaWduSGFuZGxlckZyb21Eb2N1bWVudCh0aGlzLmRvY3VtZW50SWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5kb3NzaWVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIHVuYXNzaWduaW5nIHVzZXIgZnJvbSBjYXNlJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhc2tDbGlja0V2ZW50KHRhc2s6IFRhc2spOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlLmdldFRhc2tQcm9jZXNzTGluayh0YXNrLmlkKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGRpc3BsYXlUeXBlID0gcmVzdWx0LnByb3BlcnRpZXMuZm9ybURpc3BsYXlUeXBlIHx8IERPU1NJRVJfREVUQUlMX0RFRkFVTFRfRElTUExBWV9UWVBFO1xuICAgICAgY29uc3Qgc2l6ZSA9IHJlc3VsdC5wcm9wZXJ0aWVzLmZvcm1TaXplIHx8IERPU1NJRVJfREVUQUlMX0RFRkFVTFRfRElTUExBWV9TSVpFO1xuXG4gICAgICB0aGlzLmRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLnNldEZvcm1EaXNwbGF5U2l6ZShzaXplKTtcbiAgICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0Rm9ybURpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKTtcblxuICAgICAgaWYgKGRpc3BsYXlUeXBlID09PSAncGFuZWwnKSB7XG4gICAgICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0VGFza09wZW5lZEluUGFuZWwodGFzayBhcyBhbnkgYXMgUHJvY2Vzc0luc3RhbmNlVGFzayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW5UYXNrSW5Nb2RhbCQubmV4dCh7Li4udGFza30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVGFza0RldGFpbHNDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLnNldFRhc2tPcGVuZWRJblBhbmVsKG51bGwpO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aXZlQ2hhbmdlRXZlbnQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVDaGFuZ2UgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBvblRhYlNlbGVjdGVkKHRhYjogVGFiSW1wbCwgYWN0aXZlVGFiOiBUYWJJbXBsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYkxvYWRlcikgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLl90YWJzSW5pdCkge1xuICAgICAgdGhpcy5fdGFic0luaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29sZFRhYk5hbWUgPSBhY3RpdmVUYWIubmFtZTtcbiAgICB0aGlzLl9wZW5kaW5nVGFiID0gdGFiO1xuICAgIHRoaXMuX2FjdGl2ZVRhYk5hbWUkLm5leHQodGFiLm5hbWUpO1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMgPVxuICAgICAgdGFiLmNvbnRlbnRLZXkgPT09ICdzdW1tYXJ5JyA/IGZhbHNlIDogIXRhYi5zaG93VGFza3MgJiYgdGhpcy5fYWN0aXZlQ2hhbmdlO1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ0NoYW5nZXMpIHtcbiAgICAgIHRoaXMudGFiTG9hZGVyLnJlcGxhY2VVcmxTdGF0ZSh0YWIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGFiLnNob3dUYXNrcykgdGhpcy5vcGVuVGFza0luTW9kYWwkLm5leHQobnVsbCk7XG4gICAgdGhpcy50YWJMb2FkZXIubG9hZCh0YWIpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnRTdHlsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRm9ybVN1Ym1pdEV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0VGFza09wZW5lZEluUGFuZWwobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db25maXJtUmVkaXJlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYkxvYWRlciB8fCAhdGhpcy5fcGVuZGluZ1RhYikgcmV0dXJuO1xuICAgIHRoaXMuX2FjdGl2ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRhYk5hbWUkLm5leHQodGhpcy5fcGVuZGluZ1RhYi5uYW1lKTtcbiAgICB0aGlzLnRhYkxvYWRlci5sb2FkKHRoaXMuX3BlbmRpbmdUYWIpO1xuICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0VGFza09wZW5lZEluUGFuZWwobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DYW5jZWxSZWRpcmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFiTG9hZGVyKSByZXR1cm47XG4gICAgdGhpcy5fYWN0aXZlVGFiTmFtZSQubmV4dCh0aGlzLl9vbGRUYWJOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJyZWFkY3J1bWIoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXREb2N1bWVudERlZmluaXRpb24odGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgLnN1YnNjcmliZShkZWZpbml0aW9uID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lVGl0bGUgPSBkZWZpbml0aW9uLnNjaGVtYS50aXRsZTtcbiAgICAgICAgdGhpcy5zZXRCcmVhZGNydW1iKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRhYkxvYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmRvc3NpZXJUYWJTZXJ2aWNlLnRhYnMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHRhYnMgPT4ge1xuICAgICAgaWYgKHRhYnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFRhYk5hbWUgPSB0aGlzLl9zbmFwc2hvdC5nZXQoJ3RhYicpID8/ICcnO1xuICAgICAgICB0aGlzLnRhYkxvYWRlciA9IG5ldyBUYWJMb2FkZXJJbXBsKFxuICAgICAgICAgIHRhYnMsXG4gICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgIHRoaXMucm91dGVyLFxuICAgICAgICAgIHRoaXMucm91dGVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50YWJMb2FkZXIuaW5pdGlhbCh0aGlzLl9pbml0aWFsVGFiTmFtZSk7XG4gICAgICAgIHRoaXMuZG9zc2llclRhYlNlcnZpY2Uuc2V0VGFiTG9hZGVyKHRoaXMudGFiTG9hZGVyKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGFicyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiJCA9IHRoaXMudGFiTG9hZGVyLmFjdGl2ZVRhYiQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vVGFic0NvbmZpZ3VyZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1RhYnMkLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzc2lnbm1lbnRPZkRvY3VtZW50Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRvc3NpZXJTZXJ2aWNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tRG9zc2llckhlYWRlckl0ZW0oaXRlbSk6IHZvaWQge1xuICAgIHRoaXMuY3VzdG9tRG9zc2llckhlYWRlckl0ZW1zLnB1c2goe1xuICAgICAgbGFiZWw6IGl0ZW1bJ2xhYmVsVHJhbnNsYXRpb25LZXknXSB8fCAnJyxcbiAgICAgIGNvbHVtblNpemU6IGl0ZW1bJ2NvbHVtblNpemUnXSB8fCAzLFxuICAgICAgdGV4dFNpemU6IGl0ZW1bJ3RleHRTaXplJ10gfHwgJ21kJyxcbiAgICAgIGN1c3RvbUNsYXNzOiBpdGVtWydjdXN0b21DbGFzcyddIHx8ICcnLFxuICAgICAgbW9kaWZpZXI6IGl0ZW1bJ21vZGlmaWVyJ10gfHwgJycsXG4gICAgICB2YWx1ZTogaXRlbVsncHJvcGVydHlQYXRocyddPy5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgdGhpcy5nZXRTdHJpbmdGcm9tRG9jdW1lbnRQYXRoKGl0ZW0sIGN1cnIpLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RyaW5nRnJvbURvY3VtZW50UGF0aChpdGVtLCBwYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmVmaXggPSBpdGVtWydwcm9wZXJ0eVBhdGhzJ10uaW5kZXhPZihwYXRoKSA+IDAgPyAnICcgOiAnJztcbiAgICBsZXQgc3RyaW5nID0gdGhpcy5nZXROZXN0ZWRQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LmNvbnRlbnQsIHBhdGgsIGl0ZW1bJ25vVmFsdWVUZXh0J10pIHx8ICcnO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRzID0gW21vbWVudC5JU09fODYwMSwgJ01NLURELVlZWVknLCAnREQtTU0tWVlZWScsICdZWVlZLU1NLUREJ107XG4gICAgc3dpdGNoIChpdGVtWydtb2RpZmllciddKSB7XG4gICAgICBjYXNlICdhZ2UnOiB7XG4gICAgICAgIGlmIChtb21lbnQoc3RyaW5nLCBkYXRlRm9ybWF0cywgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgc3RyaW5nID0gbW9tZW50KCkuZGlmZihzdHJpbmcsICd5ZWFycycpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAobW9tZW50KHN0cmluZywgZGF0ZUZvcm1hdHMsIHRydWUpLmlzVmFsaWQoKSkge1xuICAgICAgICAgIHN0cmluZyA9IG1vbWVudChzdHJpbmcpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXggKyBzdHJpbmc7XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFByb3BlcnR5KG9iajogYW55LCBwYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudE9iamVjdCwga2V5KSA9PiBjdXJyZW50T2JqZWN0Py5ba2V5XSwgb2JqKSB8fCBkZWZhdWx0VmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCcmVhZGNydW1iKCk6IHZvaWQge1xuICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2Uuc2V0U2Vjb25kQnJlYWRjcnVtYih7XG4gICAgICByb3V0ZTogW2AvZG9zc2llcnMvJHt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWV9YF0sXG4gICAgICBjb250ZW50OiB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZSxcbiAgICAgIGhyZWY6IGAvZG9zc2llcnMvJHt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbldpZHRoT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90YWJDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblxuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJNdXRhdGlvbihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YWJDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlck11dGF0aW9uKGV2ZW50OiBBcnJheTxSZXNpemVPYnNlcnZlckVudHJ5Pik6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IGV2ZW50WzBdPy5ib3JkZXJCb3hTaXplWzBdPy5pbmxpbmVTaXplO1xuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50V2lkdGggPT09ICdudW1iZXInICYmIGVsZW1lbnRXaWR0aCAhPT0gMCkge1xuICAgICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRUYWJDb250ZW50Q29udGFpbmVyV2lkdGgoZWxlbWVudFdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldERvY3VtZW50U3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuaHRtbERvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF0sXG4gICAgICAnb3ZlcmZsb3cnLFxuICAgICAgJ2hpZGRlbicsXG4gICAgICBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURvY3VtZW50U3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmh0bWxEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLCAnb3ZlcmZsb3cnKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1haW4tY29udGVudFwiXG4gIFtuZ0NsYXNzXT1cInsnbWFpbi1jb250ZW50LS1uby1ob3Jpem9udGFsLW92ZXJmbG93JzogdGFiSG9yaXpvbnRhbE92ZXJmbG93RGlzYWJsZWQoKX1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGFicz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7YWN0aXZlVGFiOiBhY3RpdmVUYWIkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgICAgICA8Y2RzLXRhYnMgKm5nSWY9XCJ0YWJMb2FkZXJcIiB0eXBlPVwiaW5saW5lXCIgY2xhc3M9XCJjYXNlLWRldGFpbC10YWJzXCI+XG4gICAgICAgICAgPGNkcy10YWJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiTG9hZGVyLnRhYnNcIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJ0YWIubmFtZSA9PT0gKGFjdGl2ZVRhYk5hbWUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIGhlYWRpbmc9XCJ7eyB0YWIgfCB0YWJUcmFuc2xhdGUgfCBhc3luYyB9fVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UYWJTZWxlY3RlZCh0YWIsIG9icy5hY3RpdmVUYWIpXCJcbiAgICAgICAgICA+PC9jZHMtdGFiPlxuICAgICAgICA8L2Nkcy10YWJzPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXZcbiAgICAgICN0YWJDb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInRhYi1jb250ZW50LWNvbnRhaW5lclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0YWItY29udGVudC1jb250YWluZXItLWRhcmsnOiBpc0RhcmtNb2RlJCB8IGFzeW5jLFxuICAgICAgfVwiXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgbm9UYWJzQ29uZmlndXJlZDogbm9UYWJzQ29uZmlndXJlZCQgfCBhc3luYyxcbiAgICAgICAgc2hvd1Rhc2tMaXN0OiBzaG93VGFza0xpc3QkIHwgYXN5bmMsXG4gICAgICAgIHRhc2tPcGVuZWRJblBhbmVsOiB0YXNrT3BlbmVkSW5QYW5lbCQgfCBhc3luYyxcbiAgICAgICAgZG9zc2llckRldGFpbExheW91dDogZG9zc2llckRldGFpbExheW91dCQgfCBhc3luYyxcbiAgICAgIH0gYXMgdGFiQ29udGVudE9ic1wiXG4gICAgPlxuICAgICAgPGFzLXNwbGl0XG4gICAgICAgIGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRhYkNvbnRlbnRPYnMuZG9zc2llckRldGFpbExheW91dC53aWR0aEFkanVzdGFibGVcIlxuICAgICAgICBbZ3V0dGVyU2l6ZV09XCJET1NTSUVSX0RFVEFJTF9HVVRURVJfU0laRVwiXG4gICAgICAgIFt1bml0XT1cInRhYkNvbnRlbnRPYnMuZG9zc2llckRldGFpbExheW91dC51bml0XCJcbiAgICAgID5cbiAgICAgICAgPGFzLXNwbGl0LWFyZWFcbiAgICAgICAgICBbc2l6ZV09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQubGVmdFBhbmVsV2lkdGhcIlxuICAgICAgICAgIFttaW5TaXplXT1cInRhYkNvbnRlbnRPYnMuZG9zc2llckRldGFpbExheW91dC5sZWZ0UGFuZWxNaW5XaWR0aFwiXG4gICAgICAgICAgW21heFNpemVdPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LmxlZnRQYW5lbE1heFdpZHRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IGJnLXdoaXRlIHAtNSBwb3NpdGlvbi1yZWxhdGl2ZSB0YWItY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtjbGFzcy50YWItY29udGFpbmVyLS1jb21wYWN0XT1cImNvbXBhY3RNb2RlJCB8IGFzeW5jXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1RhYnMkIHwgYXN5bmNcIiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxjZHMtbG9hZGluZz48L2Nkcy1sb2FkaW5nPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJDb250ZW50T2JzLm5vVGFic0NvbmZpZ3VyZWRcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2Rvc3NpZXIudGFicy5ub1Jlc3VsdHNEZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2Rvc3NpZXIudGFicy5ub1Jlc3VsdHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0YWJDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXMtc3BsaXQtYXJlYT5cblxuICAgICAgICA8YXMtc3BsaXQtYXJlYVxuICAgICAgICAgICpuZ0lmPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LnNob3dSaWdodFBhbmVsXCJcbiAgICAgICAgICBbc2l6ZV09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQucmlnaHRQYW5lbFdpZHRoXCJcbiAgICAgICAgICBbbWluU2l6ZV09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQucmlnaHRQYW5lbE1pbldpZHRoXCJcbiAgICAgICAgICBbbWF4U2l6ZV09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQucmlnaHRQYW5lbE1heFdpZHRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAodGFiQ29udGVudE9icy5zaG93VGFza0xpc3QpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXBhbmVsXCI+XG4gICAgICAgICAgICAgIEBpZiAoIXRhYkNvbnRlbnRPYnMudGFza09wZW5lZEluUGFuZWwpIHtcbiAgICAgICAgICAgICAgICA8dmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWxpc3RcbiAgICAgICAgICAgICAgICAgIFtvcGVuSW5UYXNrTW9kYWxdPVwib3BlblRhc2tJbk1vZGFsJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICh0YXNrQ2xpY2tFdmVudCk9XCJvblRhc2tDbGlja0V2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1saXN0PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgQGlmICh0YWJDb250ZW50T2JzLnRhc2tPcGVuZWRJblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgPHZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWxcbiAgICAgICAgICAgICAgICAgIFt0YXNrXT1cInRhYkNvbnRlbnRPYnMudGFza09wZW5lZEluUGFuZWxcIlxuICAgICAgICAgICAgICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJvbkFjdGl2ZUNoYW5nZUV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsb3NlRXZlbnQpPVwib25UYXNrRGV0YWlsc0Nsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25Gb3JtU3VibWl0RXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvdmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2FzLXNwbGl0LWFyZWE+XG4gICAgICA8L2FzLXNwbGl0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8dmFsdGltby1kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbFxuICAgIChmb3JtU3VibWl0KT1cInRhYkxvYWRlci5yZWZyZXNoVmlldygpXCJcbiAgICAjc3VwcG9ydGluZ1Byb2Nlc3NTdGFydE1vZGFsXG4gID48L3ZhbHRpbW8tZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNjYXNlRGV0YWlsSGVhZGVyXG4gIGxldC1jYW5IYXZlQXNzaWduZWU9XCJjYW5IYXZlQXNzaWduZWVcIlxuICBsZXQtZG9jdW1lbnQ9XCJkb2N1bWVudFwiXG4gIGxldC1jYW5Bc3NpZ249XCJjYW5Bc3NpZ25cIlxuPlxuICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIoY3VzdG9tRG9zc2llckhlYWRlckl0ZW1zIHx8IFtdKS5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW5cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1c3RvbURvc3NpZXJIZWFkZXJJdGVtc1wiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgIGgxOiBpdGVtLnRleHRTaXplID09PSAneGwnLFxuICAgICAgICBoMjogaXRlbS50ZXh0U2l6ZSA9PT0gJ2xnJyxcbiAgICAgICAgaDM6IGl0ZW0udGV4dFNpemUgPT09ICdtZCcsXG4gICAgICAgIGg0OiBpdGVtLnRleHRTaXplID09PSAnc20nLFxuICAgICAgICBoNTogaXRlbS50ZXh0U2l6ZSA9PT0gJ3hzJyxcbiAgICAgIH1cIlxuICAgICAgY2xhc3M9XCJtYi0wIG10LTAgYWxpZ24tc2VsZi1lbmQgY29sLXhsLXt7IGl0ZW0uY29sdW1uU2l6ZSB9fSBjb2wtbGcte3tcbiAgICAgICAgaXRlbS5jb2x1bW5TaXplICogMlxuICAgICAgfX0ge3sgaXRlbS5jdXN0b21DbGFzcyB9fVwiXG4gICAgPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmxhYmVsXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmxhYmVsICYmIGl0ZW0udmFsdWVcIj46IDwvc3Bhbj5cblxuICAgICAgPHN0cm9uZz57eyBpdGVtLnZhbHVlIH19PC9zdHJvbmc+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIGNhc2VEZXRhaWxBc3NpZ25lZTtcbiAgICAgIGNvbnRleHQ6IHtjYW5IYXZlQXNzaWduZWU6IGNhbkhhdmVBc3NpZ25lZSwgZG9jdW1lbnQ6IGRvY3VtZW50LCBjYW5Bc3NpZ246IGNhbkFzc2lnbn1cbiAgICBcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2Nhc2VEZXRhaWxBc3NpZ25lZVxuICBsZXQtY2FuSGF2ZUFzc2lnbmVlPVwiY2FuSGF2ZUFzc2lnbmVlXCJcbiAgbGV0LWRvY3VtZW50PVwiZG9jdW1lbnRcIlxuICBsZXQtY2FuQXNzaWduPVwiY2FuQXNzaWduXCJcbj5cbiAgPGRpdiAqbmdJZj1cImNhbkhhdmVBc3NpZ25lZSAmJiBkb2N1bWVudFwiPlxuICAgIDx2YWx0aW1vLWRvc3NpZXItYXNzaWduLXVzZXJcbiAgICAgICpuZ0lmPVwiY2FuQXNzaWduTG9hZGVkJCB8IGFzeW5jXCJcbiAgICAgIFthc3NpZ25lZUZ1bGxOYW1lXT1cImRvY3VtZW50Py5hc3NpZ25lZUZ1bGxOYW1lXCJcbiAgICAgIFthc3NpZ25lZUlkXT1cImRvY3VtZW50LmFzc2lnbmVlSWRcIlxuICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnQuaWRcIlxuICAgICAgW2hhc1Blcm1pc3Npb25dPVwiY2FuQXNzaWduXCJcbiAgICAgIChhc3NpZ25tZW50T2ZEb2N1bWVudENoYW5nZWQpPVwiYXNzaWdubWVudE9mRG9jdW1lbnRDaGFuZ2VkKClcIlxuICAgID48L3ZhbHRpbW8tZG9zc2llci1hc3NpZ24tdXNlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NsYWltQnV0dG9uIGxldC1jYW5DbGFpbT1cImNhbkNsYWltXCIgbGV0LWNhbkhhdmVBc3NpZ25lZT1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uXG4gICAgKm5nSWY9XCJjYW5DbGFpbSAmJiBjYW5IYXZlQXNzaWduZWVcIlxuICAgIFtkaXNhYmxlZF09XCIoaXNBc3NpZ25pbmckIHwgYXN5bmMpIHx8IChpc0Fzc2lnbmVkVG9DdXJyZW50VXNlciQgfCBhc3luYylcIlxuICAgIChjbGljayk9XCJjbGFpbUFzc2lnbmVlKClcIlxuICA+XG4gICAgPHNwYW4+e3sgJ2Rvc3NpZXIuY2xhaW1Bc3NpZ25lZUNhc2UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tU3RhcnRUcmlnZ2VyPlxuICA8YnV0dG9uXG4gICAgW3NpemVdPVwiKGNvbXBhY3RNb2RlJCB8IGFzeW5jKSA/ICdzbScgOiAnbGcnXCJcbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgICBbbmdiVG9vbHRpcF09XCJwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDAgPyAnTm8gYWN0aW9uJyA6IG51bGxcIlxuICA+XG4gICAge3sgJ2Rvc3NpZXIuc3RhcnRTdWJQcm9jZXNzJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImNoZXZyb24tLWRvd25cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyIHJlbmRlckluUGFnZUhlYWRlciBbZnVsbFdpZHRoXT1cInRydWVcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZG9zc2llci1hY3Rpb25zXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnLS1jb21wYWN0JzogY29tcGFjdE1vZGUkIHwgYXN5bmN9XCJcbiAgICAgICpuZ0lmPVwie1xuICAgICAgICBhc3NpZ25lZUlkOiBhc3NpZ25lZUlkJCB8IGFzeW5jLFxuICAgICAgICBjYW5Bc3NpZ246IGNhbkFzc2lnbiQgfCBhc3luYyxcbiAgICAgICAgY2FuQ2xhaW06IGNhbkNsYWltJCB8IGFzeW5jLFxuICAgICAgICBjYW5IYXZlQXNzaWduZWU6IGNhbkhhdmVBc3NpZ25lZSQgfCBhc3luYyxcbiAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50JCB8IGFzeW5jLFxuICAgICAgICBjYXNlU3RhdHVzOiBjYXNlU3RhdHVzJCB8IGFzeW5jLFxuICAgICAgfSBhcyBvYnNcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkb3NzaWVyLXN0YXR1cy1hc3NpZ24tY3VzdG9tLXRpdGxlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyctLWNvbXBhY3QnOiBjb21wYWN0TW9kZSQgfCBhc3luY31cIlxuICAgICAgPlxuICAgICAgICBAaWYgKG9icy5jYXNlU3RhdHVzKSB7XG4gICAgICAgICAgPGNkcy10YWcgc2l6ZT1cInNtXCIgW3R5cGVdPVwib2JzLmNhc2VTdGF0dXMudGFnVHlwZVwiPnt7IG9icy5jYXNlU3RhdHVzLnRpdGxlIH19PC9jZHMtdGFnPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvc3NpZXItYXNzaWduLXVzZXJcIiBbbmdDbGFzc109XCJ7Jy0tY29tcGFjdCc6IGNvbXBhY3RNb2RlJCB8IGFzeW5jfVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGNhc2VEZXRhaWxBc3NpZ25lZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNhbkhhdmVBc3NpZ25lZTogb2JzLmNhbkhhdmVBc3NpZ25lZSxcbiAgICAgICAgICAgICAgICBkb2N1bWVudDogb2JzLmRvY3VtZW50LFxuICAgICAgICAgICAgICAgIGNhbkFzc2lnbjogb2JzLmNhbkFzc2lnbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXNlRGV0YWlsSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudVxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnLS1jb21wYWN0JzogY29tcGFjdE1vZGUkIHwgYXN5bmN9XCJcbiAgICAgICAgICAqbmdJZj1cIm9icy5jYW5IYXZlQXNzaWduZWVcIlxuICAgICAgICAgIGZsaXA9XCJ0cnVlXCJcbiAgICAgICAgICBbb2Zmc2V0XT1cIihjb21wYWN0TW9kZSQgfCBhc3luYykgPyB7eTogNDgsIHg6IC00fSA6IHt5OiA0OCwgeDogNH1cIlxuICAgICAgICAgIGNsYXNzPVwib3ZlcmZsb3ctYnV0dG9uIGFzc2lnbi1vdmVyZmxvd1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBjbGFpbUJ1dHRvbjtcbiAgICAgICAgICAgICAgY29udGV4dDoge2NhbkNsYWltOiBvYnMuY2FuQ2xhaW0sIGNhbkhhdmVBc3NpZ25lZTogb2JzLmNhbkhhdmVBc3NpZ25lZX1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24gKHNlbGVjdGVkKT1cInVuYXNzaWduQXNzaWduZWUoKVwiIFtkaXNhYmxlZF09XCIhb2JzLmFzc2lnbmVlSWRcIj5cbiAgICAgICAgICAgIHt7ICdhc3NpZ25Eb2N1bWVudC5yZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgICAgIDwvY2RzLW92ZXJmbG93LW1lbnU+XG5cbiAgICAgICAgPGNkcy1vdmVyZmxvdy1tZW51XG4gICAgICAgICAgdmFsdGltb0Nkc092ZXJmbG93QnV0dG9uXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyctLWNvbXBhY3QnOiBjb21wYWN0TW9kZSQgfCBhc3luY31cIlxuICAgICAgICAgIFt3aWR0aF09XCIyNTBcIlxuICAgICAgICAgIFtjdXN0b21UcmlnZ2VyXT1cImN1c3RvbVN0YXJ0VHJpZ2dlclwiXG4gICAgICAgICAgW29mZnNldF09XCJ7eTogNDgsIHg6IDM1fVwiXG4gICAgICAgICAgY2xhc3M9XCJvdmVyZmxvdy1idXR0b24gY2FzZS1kZXRhaWwtb3ZlcmZsb3dcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gb2YgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24/LmlkPy5wcm9jZXNzRGVmaW5pdGlvbktleSB8IHRyYW5zbGF0ZSkgIT09XG4gICAgICAgICAgICAgIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24/LmlkPy5wcm9jZXNzRGVmaW5pdGlvbktleVxuICAgICAgICAgICAgICAgID8gKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24uaWQucHJvY2Vzc0RlZmluaXRpb25LZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgOiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlxuICAgICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC9kb3NzaWVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsL2Rvc3NpZXItZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUdOLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsZUFBZSxFQUEyQixNQUFNLGlCQUFpQixDQUFDO0FBQzFGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUdMLGtCQUFrQixFQUdsQix1QkFBdUIsR0FDeEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBS0wsdUJBQXVCLEdBRXhCLE1BQU0sbUJBQW1CLENBQUM7QUFLM0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxtQ0FBbUMsRUFDbkMsMEJBQTBCLEdBQzNCLE1BQU0saUJB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c0JBQXNCLDhsQkErTHZCLFFBQVE7bUdBL0xQLHNCQUFzQixpREFGdEIsQ0FBQyxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQywrT0FTeEIsZ0JBQWdCLGtLQy9GcEQsbXhUQWtSQTs7NEZEMUxhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSx3QkFBd0IsYUFHdkIsQ0FBQyxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQzs7MEJBaU12RCxNQUFNOzJCQUFDLFFBQVE7eUNBMUxsQixzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsNkJBQTZCO2dCQUl4QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBSWxDLG9CQUFvQjtzQkFEcEMsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBQYXJhbU1hcCwgUGFyYW1zLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0NoZXZyb25Eb3duMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgQnJlYWRjcnVtYlNlcnZpY2UsXG4gIENkc1RoZW1lU2VydmljZSxcbiAgQ3VycmVudENhcmJvblRoZW1lLFxuICBQYWdlSGVhZGVyU2VydmljZSxcbiAgUGFnZVRpdGxlU2VydmljZSxcbiAgUGVuZGluZ0NoYW5nZXNDb21wb25lbnQsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtcbiAgQ2FzZVN0YXR1c1NlcnZpY2UsXG4gIERvY3VtZW50IGFzIFZhbHRpbW9Eb2N1bWVudCxcbiAgRG9jdW1lbnRTZXJ2aWNlLFxuICBJbnRlcm5hbENhc2VTdGF0dXMsXG4gIEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1Byb2Nlc3NJbnN0YW5jZVRhc2t9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtJbnRlcm1lZGlhdGVTdWJtaXNzaW9uLCBUYXNrLCBUYXNrU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vdGFzayc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRE9TU0lFUl9ERVRBSUxfREVGQVVMVF9ESVNQTEFZX1NJWkUsXG4gIERPU1NJRVJfREVUQUlMX0RFRkFVTFRfRElTUExBWV9UWVBFLFxuICBET1NTSUVSX0RFVEFJTF9HVVRURVJfU0laRSxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7VGFiSW1wbCwgVGFiTG9hZGVySW1wbH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIENBTl9BU1NJR05fQ0FTRV9QRVJNSVNTSU9OLFxuICBDQU5fQ0xBSU1fQ0FTRV9QRVJNSVNTSU9OLFxuICBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxufSBmcm9tICcuLi8uLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQge0Rvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLCBEb3NzaWVyU2VydmljZSwgRG9zc2llclRhYlNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9zc2llclN1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwvZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0Rvc3NpZXJUYWJTZXJ2aWNlLCBEb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJEZXRhaWxDb21wb25lbnRcbiAgZXh0ZW5kcyBQZW5kaW5nQ2hhbmdlc0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBAVmlld0NoaWxkKCdzdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWwnKVxuICBzdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0OiBEb3NzaWVyU3VwcG9ydGluZ1Byb2Nlc3NTdGFydE1vZGFsQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkNvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICBAVmlld0NoaWxkKCd0YWJDb250ZW50Q29udGFpbmVyJylcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFiQ29udGVudENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHB1YmxpYyBjdXN0b21Eb3NzaWVySGVhZGVySXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHVibGljIGRvY3VtZW50OiBWYWx0aW1vRG9jdW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZztcbiAgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgcHJvY2Vzc0RlZmluaXRpb25MaXN0RmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uczogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdID0gW107XG4gIHB1YmxpYyB0YWJMb2FkZXI6IFRhYkxvYWRlckltcGwgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXNzaWduZWVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudEludGVybWVkaWF0ZVNhdmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YXNrT3BlbmVkSW5QYW5lbCQgPSB0aGlzLmRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLnRhc2tPcGVuZWRJblBhbmVsJDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jYXNlU3RhdHVzS2V5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbCB8ICdOT1RfQVZBSUxBQkxFJz4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhc2VTdGF0dXNLZXkkOiBPYnNlcnZhYmxlPHN0cmluZyB8ICdOT1RfQVZBSUxBQkxFJz4gPSB0aGlzLl9jYXNlU3RhdHVzS2V5JC5waXBlKFxuICAgIGZpbHRlcihrZXkgPT4gISFrZXkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50JDogT2JzZXJ2YWJsZTxWYWx0aW1vRG9jdW1lbnQgfCBudWxsPiA9XG4gICAgdGhpcy5kb3NzaWVyU2VydmljZS5yZWZyZXNoRG9jdW1lbnQkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5yb3V0ZS5wYXJhbXMpLFxuICAgICAgbWFwKChwYXJhbXM6IFBhcmFtcykgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICAgIHN3aXRjaE1hcCgoZG9jdW1lbnRJZDogc3RyaW5nKSA9PlxuICAgICAgICBkb2N1bWVudElkID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnQodGhpcy5kb2N1bWVudElkKSA6IG9mKG51bGwpXG4gICAgICApLFxuICAgICAgdGFwKChkb2N1bWVudDogVmFsdGltb0RvY3VtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAoZG9jdW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlSWQkLm5leHQoZG9jdW1lbnQuYXNzaWduZWVJZCk7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICAgIHRoaXMuX2Nhc2VTdGF0dXNLZXkkLm5leHQoZG9jdW1lbnQ/LmludGVybmFsU3RhdHVzIHx8ICdOT1RfQVZBSUxBQkxFJyk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLmN1c3RvbURvc3NpZXJIZWFkZXI/Lmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgdGhpcy5jdXN0b21Eb3NzaWVySGVhZGVySXRlbXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLmN1c3RvbURvc3NpZXJIZWFkZXJbXG4gICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICBdPy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5nZXRDdXN0b21Eb3NzaWVySGVhZGVySXRlbShpdGVtKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHwgJycpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhc2VTdGF0dXMkOiBPYnNlcnZhYmxlPEludGVybmFsQ2FzZVN0YXR1cyB8IHVuZGVmaW5lZD4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIGZpbHRlcihkb2N1bWVudERlZmluaXRpb25OYW1lID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLmNhc2VTdGF0dXNTZXJ2aWNlLmdldEludGVybmFsQ2FzZVN0YXR1c2VzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICAgIHRoaXMuY2FzZVN0YXR1c0tleSQsXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKFxuICAgICAgICAoW3N0YXR1c2VzLCBrZXldKSA9PiBrZXkgIT09ICdOT1RfQVZBSUxBQkxFJyAmJiBzdGF0dXNlcy5maW5kKHN0YXR1cyA9PiBzdGF0dXM/LmtleSA9PT0ga2V5KVxuICAgICAgKSxcbiAgICAgIG1hcChcbiAgICAgICAgc3RhdHVzID0+XG4gICAgICAgICAgc3RhdHVzICYmIHtcbiAgICAgICAgICAgIC4uLnN0YXR1cyxcbiAgICAgICAgICAgIHRhZ1R5cGU6IEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLmdldFRhZ1R5cGVGcm9tSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3Ioc3RhdHVzLmNvbG9yKSxcbiAgICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXNlcklkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gb2YoXG4gICAgdGhpcy5rZXlDbG9ha1NlcnZpY2UuaXNMb2dnZWRJbigpXG4gICkucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5rZXlDbG9ha1NlcnZpY2UubG9hZFVzZXJQcm9maWxlKCkpLFxuICAgIG1hcChwcm9maWxlID0+IHByb2ZpbGU/LmlkKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0Fzc2lnbmluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzQXNzaWduZWRUb0N1cnJlbnRVc2VyJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYXNzaWduZWVJZCQsXG4gICAgdGhpcy51c2VySWQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2Fzc2lnbmVlSWQsIHVzZXJJZF0pID0+ICEhYXNzaWduZWVJZCAmJiAhIXVzZXJJZCAmJiBhc3NpZ25lZUlkID09PSB1c2VySWQpLFxuICAgIHN0YXJ0V2l0aCh0cnVlKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5IYXZlQXNzaWduZWUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRDYXNlU2V0dGluZ3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChjYXNlU2V0dGluZ3MgPT4gY2FzZVNldHRpbmdzPy5jYW5IYXZlQXNzaWduZWUpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnbkxvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUoXG4gICAgc3dpdGNoTWFwKChwYXJhbXM6IFBhcmFtTWFwKSA9PlxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbihDQU5fQVNTSUdOX0NBU0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgIGlkZW50aWZpZXI6IHBhcmFtcy5nZXQoJ2RvY3VtZW50SWQnKSA/PyAnJyxcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5jYW5Bc3NpZ25Mb2FkZWQkLm5leHQodHJ1ZSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuQ2xhaW0kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxuICAgIHN3aXRjaE1hcCgocGFyYW1zOiBQYXJhbU1hcCkgPT5cbiAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24oQ0FOX0NMQUlNX0NBU0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgIGlkZW50aWZpZXI6IHBhcmFtcy5nZXQoJ2RvY3VtZW50SWQnKSA/PyAnJyxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nVGFicyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgbm9UYWJzQ29uZmlndXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGFjdGl2ZVRhYiQ6IE9ic2VydmFibGU8VGFiSW1wbD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBhY3RNb2RlJCA9IHRoaXMucGFnZUhlYWRlclNlcnZpY2UuY29tcGFjdE1vZGUkO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YWJIb3Jpem9udGFsT3ZlcmZsb3dEaXNhYmxlZCA9XG4gICAgdGhpcy5kb3NzaWVyVGFiU2VydmljZS50YWJIb3Jpem9udGFsT3ZlcmZsb3dEaXNhYmxlZDtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1Rhc2tMaXN0JCA9IHRoaXMuZG9zc2llclRhYlNlcnZpY2Uuc2hvd1Rhc2tMaXN0JDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVUYWJOYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiTmFtZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMucm91dGUucGFyYW1NYXAsIHRoaXMuX2FjdGl2ZVRhYk5hbWUkXSkucGlwZShcbiAgICAgIG1hcCgoW3BhcmFtTWFwLCBhY3RpdmVUYWJOYW1lXSkgPT5cbiAgICAgICAgIWFjdGl2ZVRhYk5hbWUgPyAocGFyYW1NYXAuZ2V0KCd0YWInKSA/PyBudWxsKSA6IGFjdGl2ZVRhYk5hbWVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IERPU1NJRVJfREVUQUlMX0dVVFRFUl9TSVpFID0gRE9TU0lFUl9ERVRBSUxfR1VUVEVSX1NJWkU7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvc3NpZXJEZXRhaWxMYXlvdXQkID0gdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5kb3NzaWVyRGV0YWlsTGF5b3V0JDtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3BlblRhc2tJbk1vZGFsJCA9IG5ldyBTdWJqZWN0PFRhc2s+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzRGFya01vZGUkID0gdGhpcy5jZHNUaGVtZVNlcnZpY2UuY3VycmVudFRoZW1lJC5waXBlKFxuICAgIG1hcChjdXJyZW50VGhlbWUgPT4gY3VycmVudFRoZW1lID09PSBDdXJyZW50Q2FyYm9uVGhlbWUuRzkwKVxuICApO1xuXG4gIHByaXZhdGUgX3NuYXBzaG90OiBQYXJhbU1hcDtcbiAgcHJpdmF0ZSBfaW5pdGlhbFRhYk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfYWN0aXZlQ2hhbmdlID0gZmFsc2U7XG4gIHByaXZhdGUgX29sZFRhYk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGVuZGluZ1RhYjogVGFiSW1wbDtcbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBfdGFic0luaXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJTZXJ2aWNlOiBCcmVhZGNydW1iU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Q2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llclRhYlNlcnZpY2U6IERvc3NpZXJUYWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llclNlcnZpY2U6IERvc3NpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZVN0YXR1c1NlcnZpY2U6IENhc2VTdGF0dXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpdGxlU2VydmljZTogUGFnZVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VIZWFkZXJTZXJ2aWNlOiBQYWdlSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlOiBEb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrU2VydmljZTogVGFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGh0bWxEb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zbmFwc2hvdCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXA7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lID0gdGhpcy5fc25hcHNob3QuZ2V0KCdkb2N1bWVudERlZmluaXRpb25OYW1lJykgfHwgJyc7XG4gICAgdGhpcy5kb2N1bWVudElkID0gdGhpcy5fc25hcHNob3QuZ2V0KCdkb2N1bWVudElkJykgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRhYkxvYWRlcigpO1xuICAgIHRoaXMuaW5pdEJyZWFkY3J1bWIoKTtcbiAgICB0aGlzLmdldEFsbEFzc29jaWF0ZWRQcm9jZXNzRGVmaW5pdGlvbnMoKTtcbiAgICB0aGlzLm9wZW5XaWR0aE9ic2VydmVyKCk7XG4gICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLmRpc2FibGVSZXNldCgpO1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0NoZXZyb25Eb3duMTZdKTtcbiAgICB0aGlzLnNldERvY3VtZW50U3R5bGUoKTtcbiAgICB0aGlzLmVuYWJsZVJlc2V0T25CYWNrTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2UuY2xlYXJTZWNvbmRCcmVhZGNydW1iKCk7XG4gICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLmVuYWJsZVJlc2V0KCk7XG4gICAgdGhpcy5yZW1vdmVEb2N1bWVudFN0eWxlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEFsbEFzc29jaWF0ZWRQcm9jZXNzRGVmaW5pdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNCeVN0YXJ0YWJsZUJ5VXNlcih0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHRydWUpXG4gICAgICAuc3Vic2NyaWJlKChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uczogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucztcblxuICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTGlzdEZpZWxkcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdwcm9jZXNzTmFtZScsXG4gICAgICAgICAgICBsYWJlbDogJ1Byb2NlcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5zdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0Lm9wZW5Nb2RhbChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLCB0aGlzLmRvY3VtZW50SWQpO1xuICB9XG5cbiAgcHVibGljIGNsYWltQXNzaWduZWUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMudXNlcklkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgodXNlcklkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuYXNzaWduSGFuZGxlclRvRG9jdW1lbnQodGhpcy5kb2N1bWVudElkLCB1c2VySWQgPz8gJycpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5kb3NzaWVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGFzc2lnbmluZyB1c2VyIHRvIGNhc2UnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVuYXNzaWduQXNzaWduZWUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0Fzc2lnbmluZyQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMudXNlcklkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgodXNlcklkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudW5hc3NpZ25IYW5kbGVyRnJvbURvY3VtZW50KHRoaXMuZG9jdW1lbnRJZClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmlzQXNzaWduaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmRvc3NpZXJTZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmlzQXNzaWduaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgdW5hc3NpZ25pbmcgdXNlciBmcm9tIGNhc2UnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVGFza0NsaWNrRXZlbnQodGFzazogVGFzayk6IHZvaWQge1xuICAgIHRoaXMudGFza1NlcnZpY2UuZ2V0VGFza1Byb2Nlc3NMaW5rKHRhc2suaWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgZGlzcGxheVR5cGUgPSByZXN1bHQucHJvcGVydGllcy5mb3JtRGlzcGxheVR5cGUgfHwgRE9TU0lFUl9ERVRBSUxfREVGQVVMVF9ESVNQTEFZX1RZUEU7XG4gICAgICBjb25zdCBzaXplID0gcmVzdWx0LnByb3BlcnRpZXMuZm9ybVNpemUgfHwgRE9TU0lFUl9ERVRBSUxfREVGQVVMVF9ESVNQTEFZX1NJWkU7XG5cbiAgICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0Rm9ybURpc3BsYXlTaXplKHNpemUpO1xuICAgICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRGb3JtRGlzcGxheVR5cGUoZGlzcGxheVR5cGUpO1xuXG4gICAgICBpZiAoZGlzcGxheVR5cGUgPT09ICdwYW5lbCcpIHtcbiAgICAgICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRUYXNrT3BlbmVkSW5QYW5lbCh0YXNrIGFzIGFueSBhcyBQcm9jZXNzSW5zdGFuY2VUYXNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3BlblRhc2tJbk1vZGFsJC5uZXh0KHsuLi50YXNrfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25UYXNrRGV0YWlsc0Nsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2Uuc2V0VGFza09wZW5lZEluUGFuZWwobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgb25BY3RpdmVDaGFuZ2VFdmVudChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZUNoYW5nZSA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIG9uVGFiU2VsZWN0ZWQodGFiOiBUYWJJbXBsLCBhY3RpdmVUYWI6IFRhYkltcGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFiTG9hZGVyKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuX3RhYnNJbml0KSB7XG4gICAgICB0aGlzLl90YWJzSW5pdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb2xkVGFiTmFtZSA9IGFjdGl2ZVRhYi5uYW1lO1xuICAgIHRoaXMuX3BlbmRpbmdUYWIgPSB0YWI7XG4gICAgdGhpcy5fYWN0aXZlVGFiTmFtZSQubmV4dCh0YWIubmFtZSk7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcyA9XG4gICAgICB0YWIuY29udGVudEtleSA9PT0gJ3N1bW1hcnknID8gZmFsc2UgOiAhdGFiLnNob3dUYXNrcyAmJiB0aGlzLl9hY3RpdmVDaGFuZ2U7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nQ2hhbmdlcykge1xuICAgICAgdGhpcy50YWJMb2FkZXIucmVwbGFjZVVybFN0YXRlKHRhYik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YWIuc2hvd1Rhc2tzKSB0aGlzLm9wZW5UYXNrSW5Nb2RhbCQubmV4dChudWxsKTtcbiAgICB0aGlzLnRhYkxvYWRlci5sb2FkKHRhYik7XG4gICAgdGhpcy5zZXREb2N1bWVudFN0eWxlKCk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtU3VibWl0RXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRUYXNrT3BlbmVkSW5QYW5lbChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmZpcm1SZWRpcmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFiTG9hZGVyIHx8ICF0aGlzLl9wZW5kaW5nVGFiKSByZXR1cm47XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVGFiTmFtZSQubmV4dCh0aGlzLl9wZW5kaW5nVGFiLm5hbWUpO1xuICAgIHRoaXMudGFiTG9hZGVyLmxvYWQodGhpcy5fcGVuZGluZ1RhYik7XG4gICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRUYXNrT3BlbmVkSW5QYW5lbChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNhbmNlbFJlZGlyZWN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJMb2FkZXIpIHJldHVybjtcbiAgICB0aGlzLl9hY3RpdmVUYWJOYW1lJC5uZXh0KHRoaXMuX29sZFRhYk5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnJlYWRjcnVtYigpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmdldERvY3VtZW50RGVmaW5pdGlvbih0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAuc3Vic2NyaWJlKGRlZmluaXRpb24gPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZSA9IGRlZmluaXRpb24uc2NoZW1hLnRpdGxlO1xuICAgICAgICB0aGlzLnNldEJyZWFkY3J1bWIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGFiTG9hZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuZG9zc2llclRhYlNlcnZpY2UudGFicyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodGFicyA9PiB7XG4gICAgICBpZiAodGFicz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9pbml0aWFsVGFiTmFtZSA9IHRoaXMuX3NuYXBzaG90LmdldCgndGFiJykgPz8gJyc7XG4gICAgICAgIHRoaXMudGFiTG9hZGVyID0gbmV3IFRhYkxvYWRlckltcGwoXG4gICAgICAgICAgdGFicyxcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgdGhpcy5yb3V0ZXIsXG4gICAgICAgICAgdGhpcy5yb3V0ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRhYkxvYWRlci5pbml0aWFsKHRoaXMuX2luaXRpYWxUYWJOYW1lKTtcbiAgICAgICAgdGhpcy5kb3NzaWVyVGFiU2VydmljZS5zZXRUYWJMb2FkZXIodGhpcy50YWJMb2FkZXIpO1xuICAgICAgICB0aGlzLmxvYWRpbmdUYWJzJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIkID0gdGhpcy50YWJMb2FkZXIuYWN0aXZlVGFiJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9UYWJzQ29uZmlndXJlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGFicyQubmV4dChmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXNzaWdubWVudE9mRG9jdW1lbnRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZG9zc2llclNlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXN0b21Eb3NzaWVySGVhZGVySXRlbShpdGVtKTogdm9pZCB7XG4gICAgdGhpcy5jdXN0b21Eb3NzaWVySGVhZGVySXRlbXMucHVzaCh7XG4gICAgICBsYWJlbDogaXRlbVsnbGFiZWxUcmFuc2xhdGlvbktleSddIHx8ICcnLFxuICAgICAgY29sdW1uU2l6ZTogaXRlbVsnY29sdW1uU2l6ZSddIHx8IDMsXG4gICAgICB0ZXh0U2l6ZTogaXRlbVsndGV4dFNpemUnXSB8fCAnbWQnLFxuICAgICAgY3VzdG9tQ2xhc3M6IGl0ZW1bJ2N1c3RvbUNsYXNzJ10gfHwgJycsXG4gICAgICBtb2RpZmllcjogaXRlbVsnbW9kaWZpZXInXSB8fCAnJyxcbiAgICAgIHZhbHVlOiBpdGVtWydwcm9wZXJ0eVBhdGhzJ10/LnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnIpID0+IHByZXYgKyB0aGlzLmdldFN0cmluZ0Zyb21Eb2N1bWVudFBhdGgoaXRlbSwgY3VyciksXG4gICAgICAgICcnXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdGcm9tRG9jdW1lbnRQYXRoKGl0ZW0sIHBhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeCA9IGl0ZW1bJ3Byb3BlcnR5UGF0aHMnXS5pbmRleE9mKHBhdGgpID4gMCA/ICcgJyA6ICcnO1xuICAgIGxldCBzdHJpbmcgPSB0aGlzLmdldE5lc3RlZFByb3BlcnR5KHRoaXMuZG9jdW1lbnQuY29udGVudCwgcGF0aCwgaXRlbVsnbm9WYWx1ZVRleHQnXSkgfHwgJyc7XG4gICAgY29uc3QgZGF0ZUZvcm1hdHMgPSBbbW9tZW50LklTT184NjAxLCAnTU0tREQtWVlZWScsICdERC1NTS1ZWVlZJywgJ1lZWVktTU0tREQnXTtcbiAgICBzd2l0Y2ggKGl0ZW1bJ21vZGlmaWVyJ10pIHtcbiAgICAgIGNhc2UgJ2FnZSc6IHtcbiAgICAgICAgaWYgKG1vbWVudChzdHJpbmcsIGRhdGVGb3JtYXRzLCB0cnVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICBzdHJpbmcgPSBtb21lbnQoKS5kaWZmKHN0cmluZywgJ3llYXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChtb21lbnQoc3RyaW5nLCBkYXRlRm9ybWF0cywgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgc3RyaW5nID0gbW9tZW50KHN0cmluZykuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArIHN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmVzdGVkUHJvcGVydHkob2JqOiBhbnksIHBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50T2JqZWN0LCBrZXkpID0+IGN1cnJlbnRPYmplY3Q/LltrZXldLCBvYmopIHx8IGRlZmF1bHRWYWx1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVJlc2V0T25CYWNrTmF2aWdhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICBldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCAmJiBldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2VUaXRsZVNlcnZpY2UuZW5hYmxlUmVzZXQoKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCcmVhZGNydW1iKCk6IHZvaWQge1xuICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2Uuc2V0U2Vjb25kQnJlYWRjcnVtYih7XG4gICAgICByb3V0ZTogW2AvZG9zc2llcnMvJHt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWV9YF0sXG4gICAgICBjb250ZW50OiB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVUaXRsZSxcbiAgICAgIGhyZWY6IGAvZG9zc2llcnMvJHt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbldpZHRoT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90YWJDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblxuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJNdXRhdGlvbihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YWJDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlck11dGF0aW9uKGV2ZW50OiBBcnJheTxSZXNpemVPYnNlcnZlckVudHJ5Pik6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IGV2ZW50WzBdPy5ib3JkZXJCb3hTaXplWzBdPy5pbmxpbmVTaXplO1xuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50V2lkdGggPT09ICdudW1iZXInICYmIGVsZW1lbnRXaWR0aCAhPT0gMCkge1xuICAgICAgdGhpcy5kb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZS5zZXRUYWJDb250ZW50Q29udGFpbmVyV2lkdGgoZWxlbWVudFdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldERvY3VtZW50U3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuaHRtbERvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF0sXG4gICAgICAnb3ZlcmZsb3cnLFxuICAgICAgJ2hpZGRlbicsXG4gICAgICBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURvY3VtZW50U3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmh0bWxEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLCAnb3ZlcmZsb3cnKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1haW4tY29udGVudFwiXG4gIFtuZ0NsYXNzXT1cInsnbWFpbi1jb250ZW50LS1uby1ob3Jpem9udGFsLW92ZXJmbG93JzogdGFiSG9yaXpvbnRhbE92ZXJmbG93RGlzYWJsZWQoKX1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGFicz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7YWN0aXZlVGFiOiBhY3RpdmVUYWIkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgICAgICA8Y2RzLXRhYnMgKm5nSWY9XCJ0YWJMb2FkZXJcIiB0eXBlPVwiaW5saW5lXCIgY2xhc3M9XCJjYXNlLWRldGFpbC10YWJzXCI+XG4gICAgICAgICAgPGNkcy10YWJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiTG9hZGVyLnRhYnNcIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJ0YWIubmFtZSA9PT0gKGFjdGl2ZVRhYk5hbWUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIGhlYWRpbmc9XCJ7eyB0YWIgfCB0YWJUcmFuc2xhdGUgfCBhc3luYyB9fVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UYWJTZWxlY3RlZCh0YWIsIG9icy5hY3RpdmVUYWIpXCJcbiAgICAgICAgICA+PC9jZHMtdGFiPlxuICAgICAgICA8L2Nkcy10YWJzPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXZcbiAgICAgICN0YWJDb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInRhYi1jb250ZW50LWNvbnRhaW5lclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0YWItY29udGVudC1jb250YWluZXItLWRhcmsnOiBpc0RhcmtNb2RlJCB8IGFzeW5jLFxuICAgICAgfVwiXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgbm9UYWJzQ29uZmlndXJlZDogbm9UYWJzQ29uZmlndXJlZCQgfCBhc3luYyxcbiAgICAgICAgc2hvd1Rhc2tMaXN0OiBzaG93VGFza0xpc3QkIHwgYXN5bmMsXG4gICAgICAgIGRvc3NpZXJEZXRhaWxMYXlvdXQ6IGRvc3NpZXJEZXRhaWxMYXlvdXQkIHwgYXN5bmMsXG4gICAgICB9IGFzIHRhYkNvbnRlbnRPYnNcIlxuICAgID5cbiAgICAgIDxhcy1zcGxpdFxuICAgICAgICBkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQud2lkdGhBZGp1c3RhYmxlXCJcbiAgICAgICAgW2d1dHRlclNpemVdPVwiRE9TU0lFUl9ERVRBSUxfR1VUVEVSX1NJWkVcIlxuICAgICAgICBbdW5pdF09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQudW5pdFwiXG4gICAgICA+XG4gICAgICAgIDxhcy1zcGxpdC1hcmVhXG4gICAgICAgICAgW3NpemVdPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LmxlZnRQYW5lbFdpZHRoXCJcbiAgICAgICAgICBbbWluU2l6ZV09XCJ0YWJDb250ZW50T2JzLmRvc3NpZXJEZXRhaWxMYXlvdXQubGVmdFBhbmVsTWluV2lkdGhcIlxuICAgICAgICAgIFttYXhTaXplXT1cInRhYkNvbnRlbnRPYnMuZG9zc2llckRldGFpbExheW91dC5sZWZ0UGFuZWxNYXhXaWR0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBiZy13aGl0ZSBwLTUgcG9zaXRpb24tcmVsYXRpdmUgdGFiLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbY2xhc3MudGFiLWNvbnRhaW5lci0tY29tcGFjdF09XCJjb21wYWN0TW9kZSQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdUYWJzJCB8IGFzeW5jXCIgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8Y2RzLWxvYWRpbmc+PC9jZHMtbG9hZGluZz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICAgICAgICAgICpuZ0lmPVwidGFiQ29udGVudE9icy5ub1RhYnNDb25maWd1cmVkXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLnRhYnMubm9SZXN1bHRzRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFiQ29udGFpbmVyPjwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzLXNwbGl0LWFyZWE+XG5cbiAgICAgICAgPGFzLXNwbGl0LWFyZWFcbiAgICAgICAgICAqbmdJZj1cInRhYkNvbnRlbnRPYnMuZG9zc2llckRldGFpbExheW91dC5zaG93UmlnaHRQYW5lbFwiXG4gICAgICAgICAgW3NpemVdPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LnJpZ2h0UGFuZWxXaWR0aFwiXG4gICAgICAgICAgW21pblNpemVdPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LnJpZ2h0UGFuZWxNaW5XaWR0aFwiXG4gICAgICAgICAgW21heFNpemVdPVwidGFiQ29udGVudE9icy5kb3NzaWVyRGV0YWlsTGF5b3V0LnJpZ2h0UGFuZWxNYXhXaWR0aFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHRhYkNvbnRlbnRPYnMuc2hvd1Rhc2tMaXN0KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1wYW5lbFwiPlxuICAgICAgICAgICAgICBAaWYgKCF0YWJDb250ZW50T2JzLnRhc2tPcGVuZWRJblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgPHZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1saXN0XG4gICAgICAgICAgICAgICAgICBbb3BlbkluVGFza01vZGFsXT1cIm9wZW5UYXNrSW5Nb2RhbCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAodGFza0NsaWNrRXZlbnQpPVwib25UYXNrQ2xpY2tFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC92YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stbGlzdD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIEBpZiAodGFiQ29udGVudE9icy50YXNrT3BlbmVkSW5QYW5lbCkge1xuICAgICAgICAgICAgICAgIDx2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsXG4gICAgICAgICAgICAgICAgICBbdGFza109XCJ0YWJDb250ZW50T2JzLnRhc2tPcGVuZWRJblBhbmVsXCJcbiAgICAgICAgICAgICAgICAgIChhY3RpdmVDaGFuZ2UpPVwib25BY3RpdmVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjbG9zZUV2ZW50KT1cIm9uVGFza0RldGFpbHNDbG9zZSgpXCJcbiAgICAgICAgICAgICAgICAgIChmb3JtU3VibWl0KT1cIm9uRm9ybVN1Ym1pdEV2ZW50KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9hcy1zcGxpdC1hcmVhPlxuICAgICAgPC9hcy1zcGxpdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHZhbHRpbW8tZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWxcbiAgICAoZm9ybVN1Ym1pdCk9XCJ0YWJMb2FkZXIucmVmcmVzaFZpZXcoKVwiXG4gICAgI3N1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbFxuICA+PC92YWx0aW1vLWRvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY2FzZURldGFpbEhlYWRlclxuICBsZXQtY2FuSGF2ZUFzc2lnbmVlPVwiY2FuSGF2ZUFzc2lnbmVlXCJcbiAgbGV0LWRvY3VtZW50PVwiZG9jdW1lbnRcIlxuICBsZXQtY2FuQXNzaWduPVwiY2FuQXNzaWduXCJcbj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiKGN1c3RvbURvc3NpZXJIZWFkZXJJdGVtcyB8fCBbXSkubGVuZ3RoID4gMFwiPlxuICAgIDxzcGFuXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjdXN0b21Eb3NzaWVySGVhZGVySXRlbXNcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBoMTogaXRlbS50ZXh0U2l6ZSA9PT0gJ3hsJyxcbiAgICAgICAgaDI6IGl0ZW0udGV4dFNpemUgPT09ICdsZycsXG4gICAgICAgIGgzOiBpdGVtLnRleHRTaXplID09PSAnbWQnLFxuICAgICAgICBoNDogaXRlbS50ZXh0U2l6ZSA9PT0gJ3NtJyxcbiAgICAgICAgaDU6IGl0ZW0udGV4dFNpemUgPT09ICd4cycsXG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwibWItMCBtdC0wIGFsaWduLXNlbGYtZW5kIGNvbC14bC17eyBpdGVtLmNvbHVtblNpemUgfX0gY29sLWxnLXt7XG4gICAgICAgIGl0ZW0uY29sdW1uU2l6ZSAqIDJcbiAgICAgIH19IHt7IGl0ZW0uY3VzdG9tQ2xhc3MgfX1cIlxuICAgID5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5sYWJlbCAmJiBpdGVtLnZhbHVlXCI+OiA8L3NwYW4+XG5cbiAgICAgIDxzdHJvbmc+e3sgaXRlbS52YWx1ZSB9fTwvc3Ryb25nPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBjYXNlRGV0YWlsQXNzaWduZWU7XG4gICAgICBjb250ZXh0OiB7Y2FuSGF2ZUFzc2lnbmVlOiBjYW5IYXZlQXNzaWduZWUsIGRvY3VtZW50OiBkb2N1bWVudCwgY2FuQXNzaWduOiBjYW5Bc3NpZ259XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNjYXNlRGV0YWlsQXNzaWduZWVcbiAgbGV0LWNhbkhhdmVBc3NpZ25lZT1cImNhbkhhdmVBc3NpZ25lZVwiXG4gIGxldC1kb2N1bWVudD1cImRvY3VtZW50XCJcbiAgbGV0LWNhbkFzc2lnbj1cImNhbkFzc2lnblwiXG4+XG4gIDxkaXYgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWUgJiYgZG9jdW1lbnRcIj5cbiAgICA8dmFsdGltby1kb3NzaWVyLWFzc2lnbi11c2VyXG4gICAgICAqbmdJZj1cImNhbkFzc2lnbkxvYWRlZCQgfCBhc3luY1wiXG4gICAgICBbYXNzaWduZWVGdWxsTmFtZV09XCJkb2N1bWVudD8uYXNzaWduZWVGdWxsTmFtZVwiXG4gICAgICBbYXNzaWduZWVJZF09XCJkb2N1bWVudC5hc3NpZ25lZUlkXCJcbiAgICAgIFtkb2N1bWVudElkXT1cImRvY3VtZW50LmlkXCJcbiAgICAgIFtoYXNQZXJtaXNzaW9uXT1cImNhbkFzc2lnblwiXG4gICAgICAoYXNzaWdubWVudE9mRG9jdW1lbnRDaGFuZ2VkKT1cImFzc2lnbm1lbnRPZkRvY3VtZW50Q2hhbmdlZCgpXCJcbiAgICA+PC92YWx0aW1vLWRvc3NpZXItYXNzaWduLXVzZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjbGFpbUJ1dHRvbiBsZXQtY2FuQ2xhaW09XCJjYW5DbGFpbVwiIGxldC1jYW5IYXZlQXNzaWduZWU9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICpuZ0lmPVwiY2FuQ2xhaW0gJiYgY2FuSGF2ZUFzc2lnbmVlXCJcbiAgICBbZGlzYWJsZWRdPVwiKGlzQXNzaWduaW5nJCB8IGFzeW5jKSB8fCAoaXNBc3NpZ25lZFRvQ3VycmVudFVzZXIkIHwgYXN5bmMpXCJcbiAgICAoY2xpY2spPVwiY2xhaW1Bc3NpZ25lZSgpXCJcbiAgPlxuICAgIDxzcGFuPnt7ICdkb3NzaWVyLmNsYWltQXNzaWduZWVDYXNlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbVN0YXJ0VHJpZ2dlcj5cbiAgPGJ1dHRvblxuICAgIFtzaXplXT1cIihjb21wYWN0TW9kZSQgfCBhc3luYykgPyAnc20nIDogJ2xnJ1wiXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cInByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmxlbmd0aCA9PT0gMFwiXG4gICAgW25nYlRvb2x0aXBdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID8gJ05vIGFjdGlvbicgOiBudWxsXCJcbiAgPlxuICAgIHt7ICdkb3NzaWVyLnN0YXJ0U3ViUHJvY2VzcycgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjaGV2cm9uLS1kb3duXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciByZW5kZXJJblBhZ2VIZWFkZXIgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRvc3NpZXItYWN0aW9uc1wiXG4gICAgICBbbmdDbGFzc109XCJ7Jy0tY29tcGFjdCc6IGNvbXBhY3RNb2RlJCB8IGFzeW5jfVwiXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgYXNzaWduZWVJZDogYXNzaWduZWVJZCQgfCBhc3luYyxcbiAgICAgICAgY2FuQXNzaWduOiBjYW5Bc3NpZ24kIHwgYXN5bmMsXG4gICAgICAgIGNhbkNsYWltOiBjYW5DbGFpbSQgfCBhc3luYyxcbiAgICAgICAgY2FuSGF2ZUFzc2lnbmVlOiBjYW5IYXZlQXNzaWduZWUkIHwgYXN5bmMsXG4gICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCQgfCBhc3luYyxcbiAgICAgICAgY2FzZVN0YXR1czogY2FzZVN0YXR1cyQgfCBhc3luYyxcbiAgICAgIH0gYXMgb2JzXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZG9zc2llci1zdGF0dXMtYXNzaWduLWN1c3RvbS10aXRsZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnLS1jb21wYWN0JzogY29tcGFjdE1vZGUkIHwgYXN5bmN9XCJcbiAgICAgID5cbiAgICAgICAgQGlmIChvYnMuY2FzZVN0YXR1cykge1xuICAgICAgICAgIDxjZHMtdGFnIHNpemU9XCJzbVwiIFt0eXBlXT1cIm9icy5jYXNlU3RhdHVzLnRhZ1R5cGVcIj57eyBvYnMuY2FzZVN0YXR1cy50aXRsZSB9fTwvY2RzLXRhZz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb3NzaWVyLWFzc2lnbi11c2VyXCIgW25nQ2xhc3NdPVwieyctLWNvbXBhY3QnOiBjb21wYWN0TW9kZSQgfCBhc3luY31cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBjYXNlRGV0YWlsQXNzaWduZWU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjYW5IYXZlQXNzaWduZWU6IG9icy5jYW5IYXZlQXNzaWduZWUsXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IG9icy5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICBjYW5Bc3NpZ246IG9icy5jYW5Bc3NpZ24sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FzZURldGFpbEhlYWRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICA8Y2RzLW92ZXJmbG93LW1lbnVcbiAgICAgICAgICBbbmdDbGFzc109XCJ7Jy0tY29tcGFjdCc6IGNvbXBhY3RNb2RlJCB8IGFzeW5jfVwiXG4gICAgICAgICAgKm5nSWY9XCJvYnMuY2FuSGF2ZUFzc2lnbmVlXCJcbiAgICAgICAgICBmbGlwPVwidHJ1ZVwiXG4gICAgICAgICAgW29mZnNldF09XCIoY29tcGFjdE1vZGUkIHwgYXN5bmMpID8ge3k6IDQ4LCB4OiAtNH0gOiB7eTogNDgsIHg6IDR9XCJcbiAgICAgICAgICBjbGFzcz1cIm92ZXJmbG93LWJ1dHRvbiBhc3NpZ24tb3ZlcmZsb3dcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY2xhaW1CdXR0b247XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtjYW5DbGFpbTogb2JzLmNhbkNsYWltLCBjYW5IYXZlQXNzaWduZWU6IG9icy5jYW5IYXZlQXNzaWduZWV9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uIChzZWxlY3RlZCk9XCJ1bmFzc2lnbkFzc2lnbmVlKClcIiBbZGlzYWJsZWRdPVwiIW9icy5hc3NpZ25lZUlkXCI+XG4gICAgICAgICAgICB7eyAnYXNzaWduRG9jdW1lbnQucmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlxuICAgICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuXG4gICAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudVxuICAgICAgICAgIHZhbHRpbW9DZHNPdmVyZmxvd0J1dHRvblxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnLS1jb21wYWN0JzogY29tcGFjdE1vZGUkIHwgYXN5bmN9XCJcbiAgICAgICAgICBbd2lkdGhdPVwiMjUwXCJcbiAgICAgICAgICBbY3VzdG9tVHJpZ2dlcl09XCJjdXN0b21TdGFydFRyaWdnZXJcIlxuICAgICAgICAgIFtvZmZzZXRdPVwie3k6IDQ4LCB4OiAzNX1cIlxuICAgICAgICAgIGNsYXNzPVwib3ZlcmZsb3ctYnV0dG9uIGNhc2UtZGV0YWlsLW92ZXJmbG93XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdGFydFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPy5pZD8ucHJvY2Vzc0RlZmluaXRpb25LZXkgfCB0cmFuc2xhdGUpICE9PVxuICAgICAgICAgICAgICBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPy5pZD8ucHJvY2Vzc0RlZmluaXRpb25LZXlcbiAgICAgICAgICAgICAgICA/IChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLmlkLnByb2Nlc3NEZWZpbml0aW9uS2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIDogcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5wcm9jZXNzTmFtZVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAgICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -61,6 +61,7 @@ export class TabLoaderImpl {
61
61
  ...(nextTab.name === 'documents' && {
62
62
  queryParams,
63
63
  }),
64
+ replaceUrl: true,
64
65
  });
65
66
  });
66
67
  }
@@ -112,4 +113,4 @@ export class TabImpl {
112
113
  return this._active;
113
114
  }
114
115
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL21vZGVscy90YWJzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBVTlFLE1BQU0sT0FBTyxhQUFhO0lBVXhCLFlBQ0UsSUFBZSxFQUNmLHdCQUFrRCxFQUNsRCxnQkFBa0MsRUFDbEMsTUFBYyxFQUNkLEtBQXFCO1FBZE4sZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsSUFBSSxDQUFDLENBQUM7UUFDeEQsVUFBSyxHQUFjLElBQUksQ0FBQztRQUN4Qiw4QkFBeUIsR0FBNkIsSUFBSSxDQUFDO1FBQzNELHNCQUFpQixHQUFxQixJQUFJLENBQUM7UUFDcEQscUJBQWdCLEdBQXNCLElBQUksQ0FBQztRQUMzQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBV2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLE9BQU8sQ0FBQyxP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SyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2V9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYkxvYWRlcjxUX1RBQiBleHRlbmRzIFRhYj4ge1xuICB0YWJzOiBUX1RBQltdO1xuXG4gIGluaXRpYWwodGFiTmFtZT86IHN0cmluZyk6IHZvaWQ7XG5cbiAgbG9hZCh0YWJUb0xvYWQ6IFRfVEFCKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkxvYWRlckltcGwgaW1wbGVtZW50cyBUYWJMb2FkZXI8VGFiSW1wbD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVUYWIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJJbXBsIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhYnM6IFRhYkltcGxbXSA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiA9IG51bGw7XG4gIHByaXZhdGUgX2FjdGl2ZUNvbXBvbmVudDogQ29tcG9uZW50UmVmPGFueT4gPSBudWxsO1xuICBwcml2YXRlIF9hY3RpdmVUYWI6IFRhYkltcGwgPSBudWxsO1xuICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcjtcbiAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhYnM6IFRhYkltcGxbXSxcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHJvdXRlcjogUm91dGVyLFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICB0aGlzLl90YWJzID0gdGFicztcbiAgICB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZiA9IHZpZXdDb250YWluZXJSZWY7XG4gICAgdGhpcy5fcm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMuX3JvdXRlID0gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYnMoKTogVGFiSW1wbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiJCgpOiBPYnNlcnZhYmxlPFRhYkltcGw+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVGFiJC5waXBlKGZpbHRlcih0YWIgPT4gISF0YWIpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsKHRhYk5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgaW5pdGlhbFRhYiE6IFRhYkltcGw7XG5cbiAgICBpZiAodGFiTmFtZSkge1xuICAgICAgaW5pdGlhbFRhYiA9XG4gICAgICAgIHRoaXMuX3RhYnMuZmluZCh0YWIgPT4gdGFiLm5hbWUgPT09IHRhYk5hbWUpIHx8XG4gICAgICAgIHRoaXMuX3RhYnMuZmluZCh0YWIgPT4gdGFiLmNvbnRlbnRLZXkgPT09IHRhYk5hbWUpO1xuICAgIH1cblxuICAgIGlmICghaW5pdGlhbFRhYikge1xuICAgICAgaW5pdGlhbFRhYiA9IHRoaXMuX3RhYnNbMF0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWQoaW5pdGlhbFRhYik7XG4gIH1cblxuICBwdWJsaWMgbG9hZChuZXdUYWI6IFRhYkltcGwpOiB2b2lkIHtcbiAgICBpZiAobmV3VGFiICE9PSB0aGlzLl9hY3RpdmVUYWIpIHtcbiAgICAgIHRoaXMuX3RhYnMuZm9yRWFjaCh0YWIgPT4gdGFiLmRlYWN0aXZhdGUoKSk7XG4gICAgICB0aGlzLnJlcGxhY2VWaWV3KG5ld1RhYik7XG4gICAgICB0aGlzLnJlcGxhY2VVcmxTdGF0ZShuZXdUYWIpO1xuICAgICAgdGhpcy5zZXRBY3RpdmUobmV3VGFiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaFZpZXcoKSB7XG4gICAgdGhpcy5yZXBsYWNlVmlldyh0aGlzLl9hY3RpdmVUYWIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlVmlldyh0YWI6IFRhYkltcGwpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRhYi5jb21wb25lbnQpO1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlVGFiICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9hY3RpdmVDb21wb25lbnQuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVDb21wb25lbnQgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlVXJsU3RhdGUobmV4dFRhYjogVGFiSW1wbCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3JvdXRlLnBhcmFtcywgdGhpcy5fcm91dGUucXVlcnlQYXJhbXNdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwYXJhbXMsIHF1ZXJ5UGFyYW1zXSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5fcm91dGVyLnVybDtcbiAgICAgICAgY29uc3QgY3VycmVudERvY3VtZW50SWQgPSBwYXJhbXM/LmRvY3VtZW50SWQ7XG4gICAgICAgIGNvbnN0IHVybEJlZm9yZURvY3VtZW50SWQgPSBjdXJyZW50VXJsLnNwbGl0KGN1cnJlbnREb2N1bWVudElkKVswXTtcblxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2Ake3VybEJlZm9yZURvY3VtZW50SWR9JHtjdXJyZW50RG9jdW1lbnRJZH0vJHtuZXh0VGFiLm5hbWV9YF0sIHtcbiAgICAgICAgICAuLi4obmV4dFRhYi5uYW1lID09PSAnZG9jdW1lbnRzJyAmJiB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlKHRhYjogVGFiSW1wbCk6IHZvaWQge1xuICAgIHRhYi5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2FjdGl2ZVRhYiA9IHRhYjtcbiAgICB0aGlzLl9hY3RpdmVUYWIkLm5leHQodGFiKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2VxdWVuY2U6IG51bWJlcjtcbiAgY29tcG9uZW50OiBhbnk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvbnRlbnRLZXk6IHN0cmluZztcblxuICBhY3RpdmF0ZSgpOiB2b2lkO1xuXG4gIGRlYWN0aXZhdGUoKTogdm9pZDtcblxuICBpc0FjdGl2ZSgpOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSW1wbCBpbXBsZW1lbnRzIFRhYiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnRLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dUYXNrcyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzZXF1ZW5jZTogbnVtYmVyLFxuICAgIGNvbXBvbmVudDogYW55LFxuICAgIGNvbnRlbnRLZXk/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgc2hvd1Rhc2tzOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgICBpZiAoY29udGVudEtleSkgdGhpcy5fY29udGVudEtleSA9IGNvbnRlbnRLZXk7XG4gICAgaWYgKHRpdGxlKSB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgIGlmIChzaG93VGFza3MpIHRoaXMuX3Nob3dUYXNrcyA9IHNob3dUYXNrcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXF1ZW5jZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50S2V5O1xuICB9XG5cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1Rhc2tzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VGFza3M7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cbn1cbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL21vZGVscy90YWJzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBVTlFLE1BQU0sT0FBTyxhQUFhO0lBVXhCLFlBQ0UsSUFBZSxFQUNmLHdCQUFrRCxFQUNsRCxnQkFBa0MsRUFDbEMsTUFBYyxFQUNkLEtBQXFCO1FBZE4sZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsSUFBSSxDQUFDLENBQUM7UUFDeEQsVUFBSyxHQUFjLElBQUksQ0FBQztRQUN4Qiw4QkFBeUIsR0FBNkIsSUFBSSxDQUFDO1FBQzNELHNCQUFpQixHQUFxQixJQUFJLENBQUM7UUFDcEQscUJBQWdCLEdBQXNCLElBQUksQ0FBQztRQUMzQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBV2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLE9BQU8sQ0FBQyxP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QUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCB0YWtlfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJMb2FkZXI8VF9UQUIgZXh0ZW5kcyBUYWI+IHtcbiAgdGFiczogVF9UQUJbXTtcblxuICBpbml0aWFsKHRhYk5hbWU/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIGxvYWQodGFiVG9Mb2FkOiBUX1RBQik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2FkZXJJbXBsIGltcGxlbWVudHMgVGFiTG9hZGVyPFRhYkltcGw+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVGFiJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFiSW1wbCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90YWJzOiBUYWJJbXBsW10gPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuICBwcml2YXRlIF9hY3RpdmVDb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+ID0gbnVsbDtcbiAgcHJpdmF0ZSBfYWN0aXZlVGFiOiBUYWJJbXBsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXI7XG4gIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YWJzOiBUYWJJbXBsW10sXG4gICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICByb3V0ZXI6IFJvdXRlcixcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgdGhpcy5fdGFicyA9IHRhYnM7XG4gICAgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSB2aWV3Q29udGFpbmVyUmVmO1xuICAgIHRoaXMuX3JvdXRlciA9IHJvdXRlcjtcbiAgICB0aGlzLl9yb3V0ZSA9IHJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJzKCk6IFRhYkltcGxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVRhYiQoKTogT2JzZXJ2YWJsZTxUYWJJbXBsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVRhYiQucGlwZShmaWx0ZXIodGFiID0+ICEhdGFiKSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbCh0YWJOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGluaXRpYWxUYWIhOiBUYWJJbXBsO1xuXG4gICAgaWYgKHRhYk5hbWUpIHtcbiAgICAgIGluaXRpYWxUYWIgPVxuICAgICAgICB0aGlzLl90YWJzLmZpbmQodGFiID0+IHRhYi5uYW1lID09PSB0YWJOYW1lKSB8fFxuICAgICAgICB0aGlzLl90YWJzLmZpbmQodGFiID0+IHRhYi5jb250ZW50S2V5ID09PSB0YWJOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoIWluaXRpYWxUYWIpIHtcbiAgICAgIGluaXRpYWxUYWIgPSB0aGlzLl90YWJzWzBdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkKGluaXRpYWxUYWIpO1xuICB9XG5cbiAgcHVibGljIGxvYWQobmV3VGFiOiBUYWJJbXBsKTogdm9pZCB7XG4gICAgaWYgKG5ld1RhYiAhPT0gdGhpcy5fYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLl90YWJzLmZvckVhY2godGFiID0+IHRhYi5kZWFjdGl2YXRlKCkpO1xuICAgICAgdGhpcy5yZXBsYWNlVmlldyhuZXdUYWIpO1xuICAgICAgdGhpcy5yZXBsYWNlVXJsU3RhdGUobmV3VGFiKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlKG5ld1RhYik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2hWaWV3KCkge1xuICAgIHRoaXMucmVwbGFjZVZpZXcodGhpcy5fYWN0aXZlVGFiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVZpZXcodGFiOiBUYWJJbXBsKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0YWIuY29tcG9uZW50KTtcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhYiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fYWN0aXZlQ29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlQ29tcG9uZW50ID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gIH1cblxuICBwdWJsaWMgcmVwbGFjZVVybFN0YXRlKG5leHRUYWI6IFRhYkltcGwpOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9yb3V0ZS5wYXJhbXMsIHRoaXMuX3JvdXRlLnF1ZXJ5UGFyYW1zXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbcGFyYW1zLCBxdWVyeVBhcmFtc10pID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuX3JvdXRlci51cmw7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREb2N1bWVudElkID0gcGFyYW1zPy5kb2N1bWVudElkO1xuICAgICAgICBjb25zdCB1cmxCZWZvcmVEb2N1bWVudElkID0gY3VycmVudFVybC5zcGxpdChjdXJyZW50RG9jdW1lbnRJZClbMF07XG5cbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtgJHt1cmxCZWZvcmVEb2N1bWVudElkfSR7Y3VycmVudERvY3VtZW50SWR9LyR7bmV4dFRhYi5uYW1lfWBdLCB7XG4gICAgICAgICAgLi4uKG5leHRUYWIubmFtZSA9PT0gJ2RvY3VtZW50cycgJiYge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlKHRhYjogVGFiSW1wbCk6IHZvaWQge1xuICAgIHRhYi5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2FjdGl2ZVRhYiA9IHRhYjtcbiAgICB0aGlzLl9hY3RpdmVUYWIkLm5leHQodGFiKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2VxdWVuY2U6IG51bWJlcjtcbiAgY29tcG9uZW50OiBhbnk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvbnRlbnRLZXk6IHN0cmluZztcblxuICBhY3RpdmF0ZSgpOiB2b2lkO1xuXG4gIGRlYWN0aXZhdGUoKTogdm9pZDtcblxuICBpc0FjdGl2ZSgpOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSW1wbCBpbXBsZW1lbnRzIFRhYiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnRLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dUYXNrcyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzZXF1ZW5jZTogbnVtYmVyLFxuICAgIGNvbXBvbmVudDogYW55LFxuICAgIGNvbnRlbnRLZXk/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgc2hvd1Rhc2tzOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgICBpZiAoY29udGVudEtleSkgdGhpcy5fY29udGVudEtleSA9IGNvbnRlbnRLZXk7XG4gICAgaWYgKHRpdGxlKSB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgIGlmIChzaG93VGFza3MpIHRoaXMuX3Nob3dUYXNrcyA9IHNob3dUYXNrcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXF1ZW5jZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50S2V5O1xuICB9XG5cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1Rhc2tzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VGFza3M7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cbn1cbiJdfQ==