@valtimo/components 12.8.0 → 12.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -500,11 +500,11 @@ export class CarbonListComponent {
500
500
  }));
501
501
  }
502
502
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.EllipsisPipe }, { token: i2.CarbonListFilterPipe }, { token: i3.IconService }, { token: i4.NGXLogger }, { token: i5.TranslateService }, { token: i6.ViewContentService }, { token: i7.KeyStateService }, { token: i8.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
503
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data[0].content\" class=\"cds-tag--no-margin\" [type]=\"data[0].type\">\n {{ data[0].ellipsisContent ?? data[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data)\"\n >\n {{ data.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\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"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i3.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i3.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i3.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i3.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i3.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i3.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i3.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i3.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i3.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i12.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
503
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.length === 0) {\n -\n } @else {\n <cds-tag\n *ngIf=\"!!data[0].content\"\n class=\"cds-tag--no-margin\"\n [type]=\"data[0].type\"\n [title]=\"data[0].content\"\n >\n {{ data[0].ellipsisContent ?? data[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data)\"\n >\n {{ data.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\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"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i3.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i3.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i3.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i3.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i3.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i3.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i3.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i3.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i3.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i12.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
504
504
  }
505
505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, decorators: [{
506
506
  type: Component,
507
- args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data[0].content\" class=\"cds-tag--no-margin\" [type]=\"data[0].type\">\n {{ data[0].ellipsisContent ?? data[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data)\"\n >\n {{ data.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\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"] }]
507
+ args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.length === 0) {\n -\n } @else {\n <cds-tag\n *ngIf=\"!!data[0].content\"\n class=\"cds-tag--no-margin\"\n [type]=\"data[0].type\"\n [title]=\"data[0].content\"\n >\n {{ data[0].ellipsisContent ?? data[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data)\"\n >\n {{ data.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\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"] }]
508
508
  }], ctorParameters: () => [{ type: i1.EllipsisPipe }, { type: i2.CarbonListFilterPipe }, { type: i3.IconService }, { type: i4.NGXLogger }, { type: i5.TranslateService }, { type: i6.ViewContentService }, { type: i7.KeyStateService }, { type: i8.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
509
509
  type: ViewChild,
510
510
  args: ['actionsMenuTemplate']
@@ -593,4 +593,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
593
593
  }], itemsReordered: [{
594
594
  type: Output
595
595
  }] } });
596
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FB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QUFLO2dCQXVCRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRU8sU0FBUztzQkFBckIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBEcmFnZ2FibGUxNiwgU2V0dGluZ3NWaWV3MTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U29ydFN0YXRlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBJY29uU2VydmljZSxcbiAgT3ZlcmZsb3dNZW51LFxuICBQYWdpbmF0aW9uTW9kZWwsXG4gIFBhZ2luYXRpb25UcmFuc2xhdGlvbnMsXG4gIFRhYmxlLFxuICBUYWJsZUhlYWRlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVNb2RlbCxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2dldCBhcyBfZ2V0LCBpc0FycmF5fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JPT0xFQU5fQ09OVkVSVEVSX1ZBTFVFUywgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ2FyYm9uTGlzdEJhdGNoVGV4dCxcbiAgQ2FyYm9uTGlzdEl0ZW0sXG4gIENhcmJvbkxpc3RUcmFuc2xhdGlvbnMsXG4gIENhcmJvblBhZ2luYXRvckNvbmZpZyxcbiAgQ2FyYm9uVGFnLFxuICBDb2x1bW5Db25maWcsXG4gIERFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFBhZ2luYXRpb24sXG4gIFRBR19FTExJUFNJU19MSU1JVCxcbiAgVmlld1R5cGUsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0VsbGlwc2lzUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtLZXlTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtDYXJib25MaXN0RmlsdGVyUGlwZSwgQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbnNNZW51VGVtcGxhdGUnKSBhY3Rpb25zTWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxPdmVyZmxvd01lbnU+O1xuICBAVmlld0NoaWxkKCdhY3Rpb25UZW1wbGF0ZScpIGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdib29sZWFuVGVtcGxhdGUnKSBib29sZWFuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dzVGVtcGxhdGUnKSBtb3ZlUm93c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcFRlbXBsYXRlJykgZHJhZ0FuZERyb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFnVGVtcGxhdGUnKSB0YWdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRlbXBsYXRlJykgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVEYXRhU291cmNlOiBUYWJsZUl0ZW1bXVtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuXG4gIHByaXZhdGUgZ2V0IF9pdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogQ2FyYm9uTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50T3BlbkFjdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5Db25maWdbXT4oW10pO1xuXG4gIEBJbnB1dCgpIHNldCBmaWVsZHModmFsdWU6IENvbHVtbkNvbmZpZ1tdKSB7XG4gICAgdGhpcy5fZmllbGRzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlVHJhbnNsYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TXG4gICk7XG5cbiAgQElucHV0KCkgc2V0IHRhYmxlVHJhbnNsYXRpb25zKHZhbHVlOiBQYXJ0aWFsPENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+KSB7XG4gICAgdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLm5leHQoey4uLkRFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsIC4uLnZhbHVlfSk7XG4gIH1cblxuICBASW5wdXQoKSBwYWdpbmF0b3JDb25maWc6IENhcmJvblBhZ2luYXRvckNvbmZpZyA9IERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRztcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgcHJpdmF0ZSBfaXNQYWdpbmF0aW9uSW5pdCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbih2YWx1ZTogUGFydGlhbDxQYWdpbmF0aW9uPiB8IGZhbHNlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi5ERUZBVUxUX1BBR0lOQVRJT04sIC4uLnZhbHVlfTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLnRoaXMuX3BhZ2luYXRpb24sIC4uLnZhbHVlfTtcbiAgICB0aGlzLmJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk7XG5cbiAgICBpZiAodGhpcy5faXNQYWdpbmF0aW9uSW5pdCB8fCAhdmFsdWUuc2l6ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZSh2YWx1ZS5zaXplLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX2lzUGFnaW5hdGlvbkluaXQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGFjdGlvbnMgZmllbGQgaXMgZGVwcmVjYXRlZC4gQWN0aW9ucyBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW107XG4gIEBJbnB1dCgpIGhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuXG4gIEBJbnB1dCgpIHNldCBzb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNvcnQkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcERpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3ZlUm93RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1Jlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyYm9uTGlzdEl0ZW1bXT4oKTtcblxuICBwdWJsaWMgYmF0Y2hUZXh0JDogT2JzZXJ2YWJsZTxDYXJib25MaXN0QmF0Y2hUZXh0PiA9IHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKFtTSU5HTEUsIE1VTFRJUExFXSkgPT4gKHtTSU5HTEUsIE1VTFRJUExFfSkpXG4gICk7XG5cbiAgcHVibGljIHBhZ2luYXRpb25UcmFuc2xhdGlvbnMkOiBPYnNlcnZhYmxlPFBhcnRpYWw8UGFnaW5hdGlvblRyYW5zbGF0aW9ucz4+ID1cbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW0pLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtcyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZScpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2VzJyksXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbSVRFTVNfUEVSX1BBR0UsIFRPVEFMX0lURU0sIFRPVEFMX0lURU1TLCBPRl9MQVNUX1BBR0UsIE9GX0xBU1RfUEFHRVNdKSA9PiAoe1xuICAgICAgICBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgVE9UQUxfSVRFTSxcbiAgICAgICAgVE9UQUxfSVRFTVMsXG4gICAgICAgIE9GX0xBU1RfUEFHRSxcbiAgICAgICAgT0ZfTEFTVF9QQUdFUyxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbE9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25UYWdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG4gIHB1YmxpYyByZWFkb25seSBWaWV3VHlwZSA9IFZpZXdUeXBlO1xuICBwdWJsaWMgc2tlbGV0b25Nb2RlbCA9IFRhYmxlLnNrZWxldG9uTW9kZWwoNSwgNSk7XG4gIHB1YmxpYyBwYWdpbmF0aW9uTW9kZWw6IFBhZ2luYXRpb25Nb2RlbDtcbiAgcHVibGljIHNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSAnUGFnaW5hdGlvblNpemUnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuX3RhYmxlLm1vZGVsO1xuXG4gICAgcmV0dXJuIG1vZGVsLmRhdGEucmVkdWNlKFxuICAgICAgKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBfLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICBtb2RlbC5pc1Jvd1NlbGVjdGVkKGluZGV4KSA/IFsuLi5pdGVtcywgdGhpcy5pdGVtc1tpbmRleF1dIDogWy4uLml0ZW1zXSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgZ2V0IHZpZXdJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShmaWx0ZXIoaW5pdGlhbGl6ZWQgPT4gaW5pdGlhbGl6ZWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogVGFibGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGxpcHNpc1BpcGU6IEVsbGlwc2lzUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU29ydFN0YXRlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5pbml0aWFsU29ydFN0YXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbSwgZmllbGQua2V5KSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZE9iamVjdDogc3RyaW5nID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXNvbHZlZE9iamVjdCA/PyAnLScsXG4gICAgICAgICAgICAgICAgZGF0YTpcbiAgICAgICAgICAgICAgICAgIChmaWVsZC50b29sdGlwQ2hhckxpbWl0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5lbGxpcHNpc1BpcGUudHJhbnNmb3JtKHJlc29sdmVkT2JqZWN0LCBmaWVsZC50b29sdGlwQ2hhckxpbWl0KVxuICAgICAgICAgICAgICAgICAgICA6IHJlc29sdmVkT2JqZWN0KSA/PyAnLScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuZGVmYXVsdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC4uLnRoaXMuZ2V0RXh0cmFJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICB0YXAoKGRhdGE6IFRhYmxlSXRlbVtdW10pID0+IHtcbiAgICAgIHRoaXMuX2NvbXBsZXRlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJlZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJdGVtW11bXSB8IG51bGw+KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBtb2RlbCQ6IE9ic2VydmFibGU8VGFibGVNb2RlbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9oZWFkZXJJdGVtcyQsXG4gICAgdGhpcy5fdGFibGVJdGVtcyQsXG4gICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaGVhZGVyLCBkYXRhLCBmaWx0ZXJlZERhdGFdKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbCA9IG5ldyBUYWJsZU1vZGVsKCk7XG4gICAgICBtb2RlbC5oZWFkZXIgPSBoZWFkZXI7XG4gICAgICBtb2RlbC5kYXRhID0gZmlsdGVyZWREYXRhID8/IGRhdGE7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSksXG4gICAgc3RhcnRXaXRoKG5ldyBUYWJsZU1vZGVsKCkpXG4gICk7XG5cbiAgcHJpdmF0ZSBnZXQgZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zKCk6IFRhYmxlSGVhZGVySXRlbVtdIHtcbiAgICBjb25zdCBlbXB0eUhlYWRlciA9IG5ldyBUYWJsZUhlYWRlckl0ZW0oKTtcblxuICAgIGVtcHR5SGVhZGVyLnNvcnRhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGUgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKGl0ZW0gPT4gaXRlbS5sb2NrZWQpID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVEb3duQ2xpY2soXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGE6IHtpbmRleDogbnVtYmVyOyBpdGVtOiBDYXJib25MaXN0SXRlbTsgbGVuZ3RoOiBudW1iZXJ9XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW92ZVJvd0V2ZW50ID0ge1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXgsIG1vdmVSb3dFdmVudC5pbmRleCArIDEpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5VUCxcbiAgICAgIGluZGV4OiBkYXRhLmluZGV4LFxuICAgIH07XG4gICAgY29uc3Qgb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXModGhpcy5faXRlbXMsIG1vdmVSb3dFdmVudC5pbmRleCAtIDEsIG1vdmVSb3dFdmVudC5pbmRleCk7XG5cbiAgICB0aGlzLm1vdmVSb3cuZW1pdChtb3ZlUm93RXZlbnQpO1xuICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChvcmRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soZXZlbnQ6IEV2ZW50LCB0YWdzOiBDYXJib25UYWdbXSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudGFnTW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMudGFnTW9kYWxEYXRhJC5uZXh0KHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQWN0aW9uT3BlbkNoYW5nZShhY3Rpb25JZDogc3RyaW5nLCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBhY3Rpb25JZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gYWN0aW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnQW5kRHJvcEl0ZW1zSXRlbXMoXG4gICAgaXRlbTogQ2FyYm9uTGlzdEl0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlclxuICApOiBUYWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLighIXRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5kcmFnQW5kRHJvcFRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEV4dHJhSXRlbXMoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBjYWxsYmFjazogYWN0aW9uLmNhbGxiYWNrLCBpY29uQ2xhc3M6IGFjdGlvbi5pY29uQ2xhc3N9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUodGFibGVJdGVtID0+IHRhYmxlSXRlbS5sb2NrZWQpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtsb2NrZWQ6IGl0ZW0ubG9ja2VkfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMucm93RGlzYWJsZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGVcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGV9KV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLm1vdmVSb3dzVGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgZGF0YToge2FjdGlvbnM6IHRoaXMuYWN0aW9uSXRlbXMsIGl0ZW19LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25zTWVudVRlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7c2l6ZTogK2VudHJpZXN9O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcEl0ZW1zKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBpdGVtVG9JbnNlcnQgPSBpdGVtc1tpbmRleDFdO1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCAhPT0gaW5kZXgxKTtcbiAgICBmaWx0ZXJlZEl0ZW1zLnNwbGljZShpbmRleDIsIDAsIGl0ZW1Ub0luc2VydCk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRhZ09iamVjdChpdGVtOiBDYXJib25MaXN0SXRlbSwga2V5OiBzdHJpbmcpOiBDYXJib25UYWdbXSB8IG51bGwge1xuICAgIGNvbnN0IG9iamVjdDogc3RyaW5nIHwgc3RyaW5nW10gfCBDYXJib25UYWcgfCBDYXJib25UYWdbXSA9IGl0ZW1ba2V5XTtcblxuICAgIGlmICghb2JqZWN0KSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChpc0FycmF5KG9iamVjdCkgJiYgdHlwZW9mIG9iamVjdFswXSAhPT0gJ3N0cmluZycpIHJldHVybiBvYmplY3QgYXMgQ2FyYm9uVGFnW107XG5cbiAgICBpZiAoIWlzQXJyYXkob2JqZWN0KSAmJiB0eXBlb2Ygb2JqZWN0ICE9PSAnc3RyaW5nJykgcmV0dXJuIFtvYmplY3QgYXMgQ2FyYm9uVGFnXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiBvYmplY3QsXG4gICAgICAgICAgdHlwZTogJ2JsdWUnLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgIHJldHVybiAob2JqZWN0IGFzIHN0cmluZ1tdKS5tYXAoKGNvbnRlbnQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGNvbnRlbnQsXG4gICAgICB0eXBlOiAnYmx1ZScsXG4gICAgfSkpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Y2RzLXRhYmxlLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzb3J0OiBzb3J0JCB8IGFzeW5jLFxuICAgIG1vZGVsOiBtb2RlbCQgfCBhc3luYyxcbiAgICB2aWV3SW5pdGlhbGl6ZWQ6IHZpZXdJbml0aWFsaXplZCQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RcIlxuPlxuICA8Y2RzLXRhYmxlLWhlYWRlciAqbmdJZj1cImhlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Nkcy10YWJsZS1oZWFkZXI+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxjZHMtdGFibGUtdG9vbGJhclxuICAgICpuZ0lmPVwiIWhpZGVUb29sYmFyXCJcbiAgICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX3Rvb2xiYXJcIlxuICAgIFttb2RlbF09XCJvYnMubW9kZWxcIlxuICAgIFtiYXRjaFRleHRdPVwiYmF0Y2hUZXh0JCB8IGFzeW5jXCJcbiAgPlxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NhcmJvblRvb2xiYXJBY3Rpb25zXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPC9jZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuXG4gICAgPGNkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gICAgICA8Y2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoXG4gICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICA+PC9jZHMtdGFibGUtdG9vbGJhci1zZWFyY2g+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQ29udGVudF1cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAgPC9jZHMtdGFibGUtdG9vbGJhcj5cblxuICA8Y2RzLXRhYmxlXG4gICAgKm5nSWY9XCIhIW9icy5zb3J0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAndmFsdGltby1jYXJib24tbGlzdF9faGVhZGVyLS1oaWRkZW4nOiBoaWRlQ29sdW1uSGVhZGVyLFxuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3QtLXVuY2xpY2thYmxlJzogIXRoaXMucm93Q2xpY2tlZC5vYnNlcnZlZCxcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcz8ubGVuZ3RoXCJcbiAgICBbaXRlbXNQZXJQYWdlT3B0aW9uc109XCJwYWdpbmF0b3JDb25maWcuaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgW21vZGVsXT1cInBhZ2luYXRpb25Nb2RlbFwiXG4gICAgW3Nob3dQYWdlSW5wdXRdPVwicGFnaW5hdG9yQ29uZmlnLnNob3dQYWdlSW5wdXRcIlxuICAgIFtza2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICBbdHJhbnNsYXRpb25zXT1cInBhZ2luYXRpb25UcmFuc2xhdGlvbnMkIHwgYXN5bmNcIlxuICAgIChzZWxlY3RQYWdlKT1cIm9uU2VsZWN0UGFnZSgkZXZlbnQpXCJcbiAgPjwvY2RzLXBhZ2luYXRpb24+XG48L2Nkcy10YWJsZS1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxpXG4gICAgY2xhc3M9XCJjbGlja2FibGVcIlxuICAgIFtuZ0NsYXNzXT1cImRhdGEuaWNvbkNsYXNzXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkYXRhLmNhbGxiYWNrKGRhdGEuaXRlbSlcIlxuICA+PC9pPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib29sZWFuVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIHt7IGRhdGEgfCB0cmFuc2xhdGUgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uc01lbnVUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGNkcy1vdmVyZmxvdy1tZW51XG4gICAgW29wZW5dPVwiY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gZGF0YS5pdGVtXCJcbiAgICAob3BlbkNoYW5nZSk9XCJoYW5kbGVBY3Rpb25PcGVuQ2hhbmdlKGRhdGEuaXRlbSwgJGV2ZW50KVwiXG4gICAgW2ZsaXBdPVwidHJ1ZVwiXG4gICAgW29mZnNldF09XCJ7eDogMCwgeTogNTB9XCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgQGZvciAoYWN0aW9uIG9mIGRhdGEuYWN0aW9uczsgdHJhY2sgYWN0aW9uLmxhYmVsKSB7XG4gICAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRDYWxsYmFjayA/IGFjdGlvbi5kaXNhYmxlZENhbGxiYWNrKGRhdGEuaXRlbSkgOiBmYWxzZVwiXG4gICAgICAgIFt0eXBlXT1cImFjdGlvbi50eXBlXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cImFjdGlvbi5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGkgKm5nSWY9XCIhIWFjdGlvbi5pY29uQ2xhc3NcIiBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuXG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgfVxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJsb2NrZWRcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiZy1ncmV5XCJcbiAgICAgIG5nYlRvb2x0aXA9XCJ7eyBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd3NUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX21vdmUtcm93c1wiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSAwXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlVXBDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tdXBcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlRG93bkNsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS1kb3duXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ0FuZERyb3BUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX2RyYWdnYWJsZVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkcmFnQW5kRHJvcERpc2FibGVkXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImRyYWdnYWJsZVwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhZ1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICBAaWYgKCFkYXRhKSB7XG4gICAgLVxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwidGFnLXRlbXBsYXRlXCI+XG4gICAgICBAaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y2RzLXRhZyAqbmdJZj1cIiEhZGF0YVswXS5jb250ZW50XCIgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhWzBdLnR5cGVcIj5cbiAgICAgICAgICB7eyBkYXRhWzBdLmVsbGlwc2lzQ29udGVudCA/PyBkYXRhWzBdLmNvbnRlbnQgfX1cbiAgICAgICAgPC9jZHMtdGFnPlxuXG4gICAgICAgIDxjZHMtdGFnXG4gICAgICAgICAgKm5nSWY9XCJkYXRhLmxlbmd0aCA+IDFcIlxuICAgICAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luIHZhbHRpbW8tY2FyYm9uLWxpc3RfX2V4cGFuZC10YWdcIlxuICAgICAgICAgIHR5cGU9XCJoaWdoLWNvbnRyYXN0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25UYWdDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRhdGEubGVuZ3RoIC0gMSB9fSA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgPC9jZHMtdGFnPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPHNwYW4+e3sgZGF0YSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjx2YWx0aW1vLXRhZ3MtbW9kYWxcbiAgW29wZW5dPVwidGFnTW9kYWxPcGVuJCB8IGFzeW5jXCJcbiAgW3RhZ3NdPVwidGFnTW9kYWxEYXRhJCB8IGFzeW5jXCJcbiAgKGNsb3NlRXZlbnQpPVwib25DbG9zZUV2ZW50KClcIlxuPjwvdmFsdGltby10YWdzLW1vZGFsPlxuIl19
596
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FB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QUFLO2dCQXVCRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRU8sU0FBUztzQkFBckIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBEcmFnZ2FibGUxNiwgU2V0dGluZ3NWaWV3MTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U29ydFN0YXRlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBJY29uU2VydmljZSxcbiAgT3ZlcmZsb3dNZW51LFxuICBQYWdpbmF0aW9uTW9kZWwsXG4gIFBhZ2luYXRpb25UcmFuc2xhdGlvbnMsXG4gIFRhYmxlLFxuICBUYWJsZUhlYWRlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVNb2RlbCxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2dldCBhcyBfZ2V0LCBpc0FycmF5fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JPT0xFQU5fQ09OVkVSVEVSX1ZBTFVFUywgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ2FyYm9uTGlzdEJhdGNoVGV4dCxcbiAgQ2FyYm9uTGlzdEl0ZW0sXG4gIENhcmJvbkxpc3RUcmFuc2xhdGlvbnMsXG4gIENhcmJvblBhZ2luYXRvckNvbmZpZyxcbiAgQ2FyYm9uVGFnLFxuICBDb2x1bW5Db25maWcsXG4gIERFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFBhZ2luYXRpb24sXG4gIFRBR19FTExJUFNJU19MSU1JVCxcbiAgVmlld1R5cGUsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0VsbGlwc2lzUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtLZXlTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtDYXJib25MaXN0RmlsdGVyUGlwZSwgQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbnNNZW51VGVtcGxhdGUnKSBhY3Rpb25zTWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxPdmVyZmxvd01lbnU+O1xuICBAVmlld0NoaWxkKCdhY3Rpb25UZW1wbGF0ZScpIGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdib29sZWFuVGVtcGxhdGUnKSBib29sZWFuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dzVGVtcGxhdGUnKSBtb3ZlUm93c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcFRlbXBsYXRlJykgZHJhZ0FuZERyb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFnVGVtcGxhdGUnKSB0YWdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRlbXBsYXRlJykgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVEYXRhU291cmNlOiBUYWJsZUl0ZW1bXVtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuXG4gIHByaXZhdGUgZ2V0IF9pdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogQ2FyYm9uTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50T3BlbkFjdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5Db25maWdbXT4oW10pO1xuXG4gIEBJbnB1dCgpIHNldCBmaWVsZHModmFsdWU6IENvbHVtbkNvbmZpZ1tdKSB7XG4gICAgdGhpcy5fZmllbGRzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlVHJhbnNsYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TXG4gICk7XG5cbiAgQElucHV0KCkgc2V0IHRhYmxlVHJhbnNsYXRpb25zKHZhbHVlOiBQYXJ0aWFsPENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+KSB7XG4gICAgdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLm5leHQoey4uLkRFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsIC4uLnZhbHVlfSk7XG4gIH1cblxuICBASW5wdXQoKSBwYWdpbmF0b3JDb25maWc6IENhcmJvblBhZ2luYXRvckNvbmZpZyA9IERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRztcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgcHJpdmF0ZSBfaXNQYWdpbmF0aW9uSW5pdCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbih2YWx1ZTogUGFydGlhbDxQYWdpbmF0aW9uPiB8IGZhbHNlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi5ERUZBVUxUX1BBR0lOQVRJT04sIC4uLnZhbHVlfTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLnRoaXMuX3BhZ2luYXRpb24sIC4uLnZhbHVlfTtcbiAgICB0aGlzLmJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk7XG5cbiAgICBpZiAodGhpcy5faXNQYWdpbmF0aW9uSW5pdCB8fCAhdmFsdWUuc2l6ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZSh2YWx1ZS5zaXplLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX2lzUGFnaW5hdGlvbkluaXQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGFjdGlvbnMgZmllbGQgaXMgZGVwcmVjYXRlZC4gQWN0aW9ucyBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW107XG4gIEBJbnB1dCgpIGhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuXG4gIEBJbnB1dCgpIHNldCBzb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNvcnQkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcERpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3ZlUm93RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1Jlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyYm9uTGlzdEl0ZW1bXT4oKTtcblxuICBwdWJsaWMgYmF0Y2hUZXh0JDogT2JzZXJ2YWJsZTxDYXJib25MaXN0QmF0Y2hUZXh0PiA9IHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKFtTSU5HTEUsIE1VTFRJUExFXSkgPT4gKHtTSU5HTEUsIE1VTFRJUExFfSkpXG4gICk7XG5cbiAgcHVibGljIHBhZ2luYXRpb25UcmFuc2xhdGlvbnMkOiBPYnNlcnZhYmxlPFBhcnRpYWw8UGFnaW5hdGlvblRyYW5zbGF0aW9ucz4+ID1cbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW0pLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtcyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZScpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2VzJyksXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbSVRFTVNfUEVSX1BBR0UsIFRPVEFMX0lURU0sIFRPVEFMX0lURU1TLCBPRl9MQVNUX1BBR0UsIE9GX0xBU1RfUEFHRVNdKSA9PiAoe1xuICAgICAgICBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgVE9UQUxfSVRFTSxcbiAgICAgICAgVE9UQUxfSVRFTVMsXG4gICAgICAgIE9GX0xBU1RfUEFHRSxcbiAgICAgICAgT0ZfTEFTVF9QQUdFUyxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbE9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25UYWdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG4gIHB1YmxpYyByZWFkb25seSBWaWV3VHlwZSA9IFZpZXdUeXBlO1xuICBwdWJsaWMgc2tlbGV0b25Nb2RlbCA9IFRhYmxlLnNrZWxldG9uTW9kZWwoNSwgNSk7XG4gIHB1YmxpYyBwYWdpbmF0aW9uTW9kZWw6IFBhZ2luYXRpb25Nb2RlbDtcbiAgcHVibGljIHNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSAnUGFnaW5hdGlvblNpemUnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuX3RhYmxlLm1vZGVsO1xuXG4gICAgcmV0dXJuIG1vZGVsLmRhdGEucmVkdWNlKFxuICAgICAgKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBfLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICBtb2RlbC5pc1Jvd1NlbGVjdGVkKGluZGV4KSA/IFsuLi5pdGVtcywgdGhpcy5pdGVtc1tpbmRleF1dIDogWy4uLml0ZW1zXSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgZ2V0IHZpZXdJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShmaWx0ZXIoaW5pdGlhbGl6ZWQgPT4gaW5pdGlhbGl6ZWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogVGFibGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGxpcHNpc1BpcGU6IEVsbGlwc2lzUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU29ydFN0YXRlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5pbml0aWFsU29ydFN0YXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbSwgZmllbGQua2V5KSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZE9iamVjdDogc3RyaW5nID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXNvbHZlZE9iamVjdCA/PyAnLScsXG4gICAgICAgICAgICAgICAgZGF0YTpcbiAgICAgICAgICAgICAgICAgIChmaWVsZC50b29sdGlwQ2hhckxpbWl0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5lbGxpcHNpc1BpcGUudHJhbnNmb3JtKHJlc29sdmVkT2JqZWN0LCBmaWVsZC50b29sdGlwQ2hhckxpbWl0KVxuICAgICAgICAgICAgICAgICAgICA6IHJlc29sdmVkT2JqZWN0KSA/PyAnLScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuZGVmYXVsdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC4uLnRoaXMuZ2V0RXh0cmFJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICB0YXAoKGRhdGE6IFRhYmxlSXRlbVtdW10pID0+IHtcbiAgICAgIHRoaXMuX2NvbXBsZXRlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJlZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJdGVtW11bXSB8IG51bGw+KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBtb2RlbCQ6IE9ic2VydmFibGU8VGFibGVNb2RlbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9oZWFkZXJJdGVtcyQsXG4gICAgdGhpcy5fdGFibGVJdGVtcyQsXG4gICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaGVhZGVyLCBkYXRhLCBmaWx0ZXJlZERhdGFdKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbCA9IG5ldyBUYWJsZU1vZGVsKCk7XG4gICAgICBtb2RlbC5oZWFkZXIgPSBoZWFkZXI7XG4gICAgICBtb2RlbC5kYXRhID0gZmlsdGVyZWREYXRhID8/IGRhdGE7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSksXG4gICAgc3RhcnRXaXRoKG5ldyBUYWJsZU1vZGVsKCkpXG4gICk7XG5cbiAgcHJpdmF0ZSBnZXQgZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zKCk6IFRhYmxlSGVhZGVySXRlbVtdIHtcbiAgICBjb25zdCBlbXB0eUhlYWRlciA9IG5ldyBUYWJsZUhlYWRlckl0ZW0oKTtcblxuICAgIGVtcHR5SGVhZGVyLnNvcnRhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGUgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKGl0ZW0gPT4gaXRlbS5sb2NrZWQpID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVEb3duQ2xpY2soXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGE6IHtpbmRleDogbnVtYmVyOyBpdGVtOiBDYXJib25MaXN0SXRlbTsgbGVuZ3RoOiBudW1iZXJ9XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW92ZVJvd0V2ZW50ID0ge1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXgsIG1vdmVSb3dFdmVudC5pbmRleCArIDEpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5VUCxcbiAgICAgIGluZGV4OiBkYXRhLmluZGV4LFxuICAgIH07XG4gICAgY29uc3Qgb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXModGhpcy5faXRlbXMsIG1vdmVSb3dFdmVudC5pbmRleCAtIDEsIG1vdmVSb3dFdmVudC5pbmRleCk7XG5cbiAgICB0aGlzLm1vdmVSb3cuZW1pdChtb3ZlUm93RXZlbnQpO1xuICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChvcmRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soZXZlbnQ6IEV2ZW50LCB0YWdzOiBDYXJib25UYWdbXSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudGFnTW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMudGFnTW9kYWxEYXRhJC5uZXh0KHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQWN0aW9uT3BlbkNoYW5nZShhY3Rpb25JZDogc3RyaW5nLCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBhY3Rpb25JZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gYWN0aW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnQW5kRHJvcEl0ZW1zSXRlbXMoXG4gICAgaXRlbTogQ2FyYm9uTGlzdEl0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlclxuICApOiBUYWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLighIXRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5kcmFnQW5kRHJvcFRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEV4dHJhSXRlbXMoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBjYWxsYmFjazogYWN0aW9uLmNhbGxiYWNrLCBpY29uQ2xhc3M6IGFjdGlvbi5pY29uQ2xhc3N9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUodGFibGVJdGVtID0+IHRhYmxlSXRlbS5sb2NrZWQpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtsb2NrZWQ6IGl0ZW0ubG9ja2VkfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMucm93RGlzYWJsZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGVcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGV9KV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLm1vdmVSb3dzVGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgZGF0YToge2FjdGlvbnM6IHRoaXMuYWN0aW9uSXRlbXMsIGl0ZW19LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25zTWVudVRlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7c2l6ZTogK2VudHJpZXN9O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcEl0ZW1zKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBpdGVtVG9JbnNlcnQgPSBpdGVtc1tpbmRleDFdO1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCAhPT0gaW5kZXgxKTtcbiAgICBmaWx0ZXJlZEl0ZW1zLnNwbGljZShpbmRleDIsIDAsIGl0ZW1Ub0luc2VydCk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRhZ09iamVjdChpdGVtOiBDYXJib25MaXN0SXRlbSwga2V5OiBzdHJpbmcpOiBDYXJib25UYWdbXSB8IG51bGwge1xuICAgIGNvbnN0IG9iamVjdDogc3RyaW5nIHwgc3RyaW5nW10gfCBDYXJib25UYWcgfCBDYXJib25UYWdbXSA9IGl0ZW1ba2V5XTtcblxuICAgIGlmICghb2JqZWN0KSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChpc0FycmF5KG9iamVjdCkgJiYgdHlwZW9mIG9iamVjdFswXSAhPT0gJ3N0cmluZycpIHJldHVybiBvYmplY3QgYXMgQ2FyYm9uVGFnW107XG5cbiAgICBpZiAoIWlzQXJyYXkob2JqZWN0KSAmJiB0eXBlb2Ygb2JqZWN0ICE9PSAnc3RyaW5nJykgcmV0dXJuIFtvYmplY3QgYXMgQ2FyYm9uVGFnXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiBvYmplY3QsXG4gICAgICAgICAgdHlwZTogJ2JsdWUnLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgIHJldHVybiAob2JqZWN0IGFzIHN0cmluZ1tdKS5tYXAoKGNvbnRlbnQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGNvbnRlbnQsXG4gICAgICB0eXBlOiAnYmx1ZScsXG4gICAgfSkpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Y2RzLXRhYmxlLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzb3J0OiBzb3J0JCB8IGFzeW5jLFxuICAgIG1vZGVsOiBtb2RlbCQgfCBhc3luYyxcbiAgICB2aWV3SW5pdGlhbGl6ZWQ6IHZpZXdJbml0aWFsaXplZCQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RcIlxuPlxuICA8Y2RzLXRhYmxlLWhlYWRlciAqbmdJZj1cImhlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Nkcy10YWJsZS1oZWFkZXI+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxjZHMtdGFibGUtdG9vbGJhclxuICAgICpuZ0lmPVwiIWhpZGVUb29sYmFyXCJcbiAgICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX3Rvb2xiYXJcIlxuICAgIFttb2RlbF09XCJvYnMubW9kZWxcIlxuICAgIFtiYXRjaFRleHRdPVwiYmF0Y2hUZXh0JCB8IGFzeW5jXCJcbiAgPlxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NhcmJvblRvb2xiYXJBY3Rpb25zXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPC9jZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuXG4gICAgPGNkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gICAgICA8Y2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoXG4gICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICA+PC9jZHMtdGFibGUtdG9vbGJhci1zZWFyY2g+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQ29udGVudF1cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAgPC9jZHMtdGFibGUtdG9vbGJhcj5cblxuICA8Y2RzLXRhYmxlXG4gICAgKm5nSWY9XCIhIW9icy5zb3J0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAndmFsdGltby1jYXJib24tbGlzdF9faGVhZGVyLS1oaWRkZW4nOiBoaWRlQ29sdW1uSGVhZGVyLFxuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3QtLXVuY2xpY2thYmxlJzogIXRoaXMucm93Q2xpY2tlZC5vYnNlcnZlZCxcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcz8ubGVuZ3RoXCJcbiAgICBbaXRlbXNQZXJQYWdlT3B0aW9uc109XCJwYWdpbmF0b3JDb25maWcuaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgW21vZGVsXT1cInBhZ2luYXRpb25Nb2RlbFwiXG4gICAgW3Nob3dQYWdlSW5wdXRdPVwicGFnaW5hdG9yQ29uZmlnLnNob3dQYWdlSW5wdXRcIlxuICAgIFtza2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICBbdHJhbnNsYXRpb25zXT1cInBhZ2luYXRpb25UcmFuc2xhdGlvbnMkIHwgYXN5bmNcIlxuICAgIChzZWxlY3RQYWdlKT1cIm9uU2VsZWN0UGFnZSgkZXZlbnQpXCJcbiAgPjwvY2RzLXBhZ2luYXRpb24+XG48L2Nkcy10YWJsZS1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxpXG4gICAgY2xhc3M9XCJjbGlja2FibGVcIlxuICAgIFtuZ0NsYXNzXT1cImRhdGEuaWNvbkNsYXNzXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkYXRhLmNhbGxiYWNrKGRhdGEuaXRlbSlcIlxuICA+PC9pPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib29sZWFuVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIHt7IGRhdGEgfCB0cmFuc2xhdGUgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uc01lbnVUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGNkcy1vdmVyZmxvdy1tZW51XG4gICAgW29wZW5dPVwiY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gZGF0YS5pdGVtXCJcbiAgICAob3BlbkNoYW5nZSk9XCJoYW5kbGVBY3Rpb25PcGVuQ2hhbmdlKGRhdGEuaXRlbSwgJGV2ZW50KVwiXG4gICAgW2ZsaXBdPVwidHJ1ZVwiXG4gICAgW29mZnNldF09XCJ7eDogMCwgeTogNTB9XCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgQGZvciAoYWN0aW9uIG9mIGRhdGEuYWN0aW9uczsgdHJhY2sgYWN0aW9uLmxhYmVsKSB7XG4gICAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRDYWxsYmFjayA/IGFjdGlvbi5kaXNhYmxlZENhbGxiYWNrKGRhdGEuaXRlbSkgOiBmYWxzZVwiXG4gICAgICAgIFt0eXBlXT1cImFjdGlvbi50eXBlXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cImFjdGlvbi5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGkgKm5nSWY9XCIhIWFjdGlvbi5pY29uQ2xhc3NcIiBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuXG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgfVxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJsb2NrZWRcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiZy1ncmV5XCJcbiAgICAgIG5nYlRvb2x0aXA9XCJ7eyBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd3NUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX21vdmUtcm93c1wiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSAwXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlVXBDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tdXBcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlRG93bkNsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS1kb3duXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ0FuZERyb3BUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX2RyYWdnYWJsZVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkcmFnQW5kRHJvcERpc2FibGVkXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImRyYWdnYWJsZVwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhZ1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICBAaWYgKCFkYXRhKSB7XG4gICAgLVxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwidGFnLXRlbXBsYXRlXCI+XG4gICAgICBAaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y2RzLXRhZ1xuICAgICAgICAgICpuZ0lmPVwiISFkYXRhWzBdLmNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCJcbiAgICAgICAgICBbdHlwZV09XCJkYXRhWzBdLnR5cGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJkYXRhWzBdLmNvbnRlbnRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF0YVswXS5lbGxpcHNpc0NvbnRlbnQgPz8gZGF0YVswXS5jb250ZW50IH19XG4gICAgICAgIDwvY2RzLXRhZz5cblxuICAgICAgICA8Y2RzLXRhZ1xuICAgICAgICAgICpuZ0lmPVwiZGF0YS5sZW5ndGggPiAxXCJcbiAgICAgICAgICBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpbiB2YWx0aW1vLWNhcmJvbi1saXN0X19leHBhbmQtdGFnXCJcbiAgICAgICAgICB0eXBlPVwiaGlnaC1jb250cmFzdFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVGFnQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXRhLmxlbmd0aCAtIDEgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvY2RzLXRhZz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxzcGFuPnt7IGRhdGEgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby10YWdzLW1vZGFsXG4gIFtvcGVuXT1cInRhZ01vZGFsT3BlbiQgfCBhc3luY1wiXG4gIFt0YWdzXT1cInRhZ01vZGFsRGF0YSQgfCBhc3luY1wiXG4gIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgpXCJcbj48L3ZhbHRpbW8tdGFncy1tb2RhbD5cbiJdfQ==
@@ -67,11 +67,11 @@ export class StatusSelectorComponent {
67
67
  });
68
68
  }
69
69
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StatusSelectorComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
70
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StatusSelectorComponent, isStandalone: true, selector: "valtimo-status-selector", inputs: { statuses: "statuses", selectedStatuses: "selectedStatuses", carbonTheme: "carbonTheme", disabled: "disabled" }, outputs: { selectedStatusesChangeEvent: "selectedStatusesChangeEvent" }, 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\n<cds-label class=\"status-selector\" *ngIf=\"listItems$ | async as listItems\">\n {{ 'dossierManagement.statuses.searchFieldTitle' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n type=\"multi\"\n [disabled]=\"disabled\"\n selectionFeedback=\"fixed\"\n (selected)=\"itemSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"listItems\"\n [listTpl]=\"colorDropdownItemTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</cds-label>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"status-selector-dropdown-template\">\n <cds-checkbox [checked]=\"item.selected\"></cds-checkbox>\n\n <span *ngIf=\"item.key === CASES_WITHOUT_STATUS_KEY\" class=\"generic-span\">{{\n item?.content\n }}</span>\n\n <cds-tag\n *ngIf=\"item.key !== CASES_WITHOUT_STATUS_KEY\"\n class=\"cds-tag--no-margin\"\n [type]=\"item?.tagType\"\n >\n {{ item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: ["::ng-deep .status-selector .cds--label{width:100%;margin-bottom:0!important}::ng-deep .status-selector .cds--multiselect{margin-top:8px}::ng-deep .status-selector-dropdown-template{display:flex;margin-top:-4px}::ng-deep .status-selector-dropdown-template .cds--tag{margin:0}::ng-deep .status-selector-dropdown-template .generic-span{display:flex;align-items:center}\n/*!\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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StatusSelectorComponent, isStandalone: true, selector: "valtimo-status-selector", inputs: { statuses: "statuses", selectedStatuses: "selectedStatuses", carbonTheme: "carbonTheme", disabled: "disabled" }, outputs: { selectedStatusesChangeEvent: "selectedStatusesChangeEvent" }, 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\n<cds-label class=\"status-selector\" *ngIf=\"listItems$ | async as listItems\">\n {{ 'dossierManagement.statuses.searchFieldTitle' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n type=\"multi\"\n [disabled]=\"disabled\"\n selectionFeedback=\"fixed\"\n (selected)=\"itemSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"listItems\"\n [listTpl]=\"colorDropdownItemTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</cds-label>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"status-selector-dropdown-template\">\n <cds-checkbox [checked]=\"item.selected\"></cds-checkbox>\n\n <span *ngIf=\"item.key === CASES_WITHOUT_STATUS_KEY\" class=\"generic-span\">{{\n item?.content\n }}</span>\n\n <cds-tag\n *ngIf=\"item.key !== CASES_WITHOUT_STATUS_KEY\"\n class=\"cds-tag--no-margin\"\n [type]=\"item?.tagType\"\n [title]=\"item?.content\"\n >\n {{ item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: ["::ng-deep .status-selector .cds--label{width:100%;margin-bottom:0!important}::ng-deep .status-selector .cds--multiselect{margin-top:8px}::ng-deep .status-selector-dropdown-template{display:flex;margin-top:-4px}::ng-deep .status-selector-dropdown-template .cds--tag{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}::ng-deep .status-selector-dropdown-template .generic-span{display:flex;align-items:center}\n/*!\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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
71
71
  }
72
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StatusSelectorComponent, decorators: [{
73
73
  type: Component,
74
- args: [{ selector: 'valtimo-status-selector', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, DropdownModule, CheckboxModule, InputModule, TranslateModule, TagModule], 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\n<cds-label class=\"status-selector\" *ngIf=\"listItems$ | async as listItems\">\n {{ 'dossierManagement.statuses.searchFieldTitle' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n type=\"multi\"\n [disabled]=\"disabled\"\n selectionFeedback=\"fixed\"\n (selected)=\"itemSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"listItems\"\n [listTpl]=\"colorDropdownItemTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</cds-label>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"status-selector-dropdown-template\">\n <cds-checkbox [checked]=\"item.selected\"></cds-checkbox>\n\n <span *ngIf=\"item.key === CASES_WITHOUT_STATUS_KEY\" class=\"generic-span\">{{\n item?.content\n }}</span>\n\n <cds-tag\n *ngIf=\"item.key !== CASES_WITHOUT_STATUS_KEY\"\n class=\"cds-tag--no-margin\"\n [type]=\"item?.tagType\"\n >\n {{ item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: ["::ng-deep .status-selector .cds--label{width:100%;margin-bottom:0!important}::ng-deep .status-selector .cds--multiselect{margin-top:8px}::ng-deep .status-selector-dropdown-template{display:flex;margin-top:-4px}::ng-deep .status-selector-dropdown-template .cds--tag{margin:0}::ng-deep .status-selector-dropdown-template .generic-span{display:flex;align-items:center}\n/*!\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"] }]
74
+ args: [{ selector: 'valtimo-status-selector', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, DropdownModule, CheckboxModule, InputModule, TranslateModule, TagModule], 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\n<cds-label class=\"status-selector\" *ngIf=\"listItems$ | async as listItems\">\n {{ 'dossierManagement.statuses.searchFieldTitle' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n type=\"multi\"\n [disabled]=\"disabled\"\n selectionFeedback=\"fixed\"\n (selected)=\"itemSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"listItems\"\n [listTpl]=\"colorDropdownItemTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</cds-label>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"status-selector-dropdown-template\">\n <cds-checkbox [checked]=\"item.selected\"></cds-checkbox>\n\n <span *ngIf=\"item.key === CASES_WITHOUT_STATUS_KEY\" class=\"generic-span\">{{\n item?.content\n }}</span>\n\n <cds-tag\n *ngIf=\"item.key !== CASES_WITHOUT_STATUS_KEY\"\n class=\"cds-tag--no-margin\"\n [type]=\"item?.tagType\"\n [title]=\"item?.content\"\n >\n {{ item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: ["::ng-deep .status-selector .cds--label{width:100%;margin-bottom:0!important}::ng-deep .status-selector .cds--multiselect{margin-top:8px}::ng-deep .status-selector-dropdown-template{display:flex;margin-top:-4px}::ng-deep .status-selector-dropdown-template .cds--tag{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}::ng-deep .status-selector-dropdown-template .generic-span{display:flex;align-items:center}\n/*!\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"] }]
75
75
  }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { statuses: [{
76
76
  type: Input
77
77
  }], selectedStatuses: [{
@@ -83,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
83
83
  }], selectedStatusesChangeEvent: [{
84
84
  type: Output
85
85
  }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc3RhdHVzLXNlbGVjdG9yL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3N0YXR1cy1zZWxlY3Rvci9zdGF0dXMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQXFCLHVCQUF1QixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUNMLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxFQUVYLFNBQVMsR0FDVixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7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LEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F2RFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsc1JDekNwQywybkRBa0RBLHNpQ0RYWSxZQUFZLHVMQUFFLGNBQWMsZ3NCQUFFLGNBQWMseVRBQUUsV0FBVyxrT0FBRSxlQUFlLDJGQUFFLFNBQVM7OzRGQUVwRix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO3FGQUc1RSxRQUFRO3NCQUEzQixLQUFLO2dCQVFjLGdCQUFnQjtzQkFBbkMsS0FBSztnQkFHVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBRVcsMkJBQTJCO3NCQUEzQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ludGVybmFsQ2FzZVN0YXR1cywgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHN9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7XG4gIENoZWNrYm94TW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBUYWdNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtDQVJCT05fVEhFTUV9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtDQVNFU19XSVRIT1VUX1NUQVRVU19LRVl9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc3RhdHVzLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIENoZWNrYm94TW9kdWxlLCBJbnB1dE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBUYWdNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTdGF0dXNTZWxlY3RvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc3RhdHVzZXModmFsdWU6IEludGVybmFsQ2FzZVN0YXR1c1tdKSB7XG4gICAgdGhpcy5fc3RhdHVzZXMkLm5leHQoXG4gICAgICAodmFsdWUgfHwgW10pLm1hcChzdGF0dXMgPT4gKHtcbiAgICAgICAgLi4uc3RhdHVzLFxuICAgICAgICB0YWdUeXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICB9KSlcbiAgICApO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2VsZWN0ZWRTdGF0dXNlcyh2YWx1ZTogSW50ZXJuYWxDYXNlU3RhdHVzW10pIHtcbiAgICB0aGlzLl9zZWxlY3RlZFN0YXR1c2VzJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgY2FyYm9uVGhlbWU6IENBUkJPTl9USEVNRSA9IENBUkJPTl9USEVNRS5XSElURTtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgcHVibGljIHNlbGVjdGVkU3RhdHVzZXNDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJuYWxDYXNlU3RhdHVzW10+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbENhc2VTdGF0dXNbXT4oW10pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkU3RhdHVzZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbENhc2VTdGF0dXNbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxpc3RJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9zdGF0dXNlcyQsXG4gICAgdGhpcy5fc2VsZWN0ZWRTdGF0dXNlcyQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbc3RhdHVzZXMsIHNlbGVjdGVkU3RhdHVzZXNdKSA9PiAhIXN0YXR1c2VzICYmICEhc2VsZWN0ZWRTdGF0dXNlcyksXG4gICAgbWFwKChbc3RhdHVzZXMsIHNlbGVjdGVkU3RhdHVzZXNdKSA9PlxuICAgICAgc3RhdHVzZXMubWFwKHN0YXR1cyA9PiAoe1xuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHN0YXR1cy5rZXkgPT09IHRoaXMuQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXG4gICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy53aXRob3V0U3RhdHVzJylcbiAgICAgICAgICAgIDogc3RhdHVzLnRpdGxlLFxuICAgICAgICBzZWxlY3RlZDogISFzZWxlY3RlZFN0YXR1c2VzLmZpbmQoc2VsZWN0ZWRTdGF0dXMgPT4gc2VsZWN0ZWRTdGF0dXMua2V5ID09PSBzdGF0dXMua2V5KSxcbiAgICAgICAga2V5OiBzdGF0dXMua2V5LFxuICAgICAgICB0YWdUeXBlOiBzdGF0dXMudGFnVHlwZSxcbiAgICAgIH0pKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBpc0VxdWFsKHByZXZpb3VzLCBjdXJyZW50KSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHVibGljIGl0ZW1TZWxlY3RlZChldmVudDogTGlzdEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1NlbGVjdGVkSXRlbXMgPSBldmVudD8uZmlsdGVyKGl0ZW0gPT4gaXRlbT8uc2VsZWN0ZWQpIHx8IFtdO1xuXG4gICAgdGhpcy5fc3RhdHVzZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHN0YXR1c2VzID0+IHtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkU3RhdHVzZXMgPSBuZXdTZWxlY3RlZEl0ZW1zXG4gICAgICAgIC5tYXAoaXRlbSA9PiBzdGF0dXNlcy5maW5kKHN0YXR1cyA9PiBzdGF0dXMua2V5ID09PSBpdGVtLmtleSkpXG4gICAgICAgIC5maWx0ZXIoc3RhdHVzID0+ICEhc3RhdHVzKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFN0YXR1c2VzQ2hhbmdlRXZlbnQuZW1pdChuZXdTZWxlY3RlZFN0YXR1c2VzKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLWxhYmVsIGNsYXNzPVwic3RhdHVzLXNlbGVjdG9yXCIgKm5nSWY9XCJsaXN0SXRlbXMkIHwgYXN5bmMgYXMgbGlzdEl0ZW1zXCI+XG4gIHt7ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5zZWFyY2hGaWVsZFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuXG4gIDxjZHMtZHJvcGRvd25cbiAgICBbYXBwZW5kSW5saW5lXT1cImZhbHNlXCJcbiAgICB0eXBlPVwibXVsdGlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgc2VsZWN0aW9uRmVlZGJhY2s9XCJmaXhlZFwiXG4gICAgKHNlbGVjdGVkKT1cIml0ZW1TZWxlY3RlZCgkZXZlbnQpXCJcbiAgPlxuICAgIDxjZHMtZHJvcGRvd24tbGlzdFxuICAgICAgW2l0ZW1zXT1cImxpc3RJdGVtc1wiXG4gICAgICBbbGlzdFRwbF09XCJjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCJcbiAgICA+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgPC9jZHMtZHJvcGRvd24+XG48L2Nkcy1sYWJlbD5cblxuPG5nLXRlbXBsYXRlICNjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwic3RhdHVzLXNlbGVjdG9yLWRyb3Bkb3duLXRlbXBsYXRlXCI+XG4gICAgPGNkcy1jaGVja2JveCBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCI+PC9jZHMtY2hlY2tib3g+XG5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0ua2V5ID09PSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVlcIiBjbGFzcz1cImdlbmVyaWMtc3BhblwiPnt7XG4gICAgICBpdGVtPy5jb250ZW50XG4gICAgfX08L3NwYW4+XG5cbiAgICA8Y2RzLXRhZ1xuICAgICAgKm5nSWY9XCJpdGVtLmtleSAhPT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXCJcbiAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCJcbiAgICAgIFt0eXBlXT1cIml0ZW0/LnRhZ1R5cGVcIlxuICAgID5cbiAgICAgIHt7IGl0ZW0/LmNvbnRlbnQgfX1cbiAgICA8L2Nkcy10YWc+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc3RhdHVzLXNlbGVjdG9yL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3N0YXR1cy1zZWxlY3Rvci9zdGF0dXMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQXFCLHVCQUF1QixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUNMLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxFQUVYLFNBQVMsR0FDVixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7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LEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F2RFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsc1JDekNwQyw0cERBbURBLHFwQ0RaWSxZQUFZLHVMQUFFLGNBQWMsZ3NCQUFFLGNBQWMseVRBQUUsV0FBVyxrT0FBRSxlQUFlLDJGQUFFLFNBQVM7OzRGQUVwRix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0UseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO3FGQUc1RSxRQUFRO3NCQUEzQixLQUFLO2dCQVFjLGdCQUFnQjtzQkFBbkMsS0FBSztnQkFHVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBRVcsMkJBQTJCO3NCQUEzQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ludGVybmFsQ2FzZVN0YXR1cywgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHN9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7XG4gIENoZWNrYm94TW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBUYWdNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtDQVJCT05fVEhFTUV9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtDQVNFU19XSVRIT1VUX1NUQVRVU19LRVl9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc3RhdHVzLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YXR1cy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIENoZWNrYm94TW9kdWxlLCBJbnB1dE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBUYWdNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTdGF0dXNTZWxlY3RvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc3RhdHVzZXModmFsdWU6IEludGVybmFsQ2FzZVN0YXR1c1tdKSB7XG4gICAgdGhpcy5fc3RhdHVzZXMkLm5leHQoXG4gICAgICAodmFsdWUgfHwgW10pLm1hcChzdGF0dXMgPT4gKHtcbiAgICAgICAgLi4uc3RhdHVzLFxuICAgICAgICB0YWdUeXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICB9KSlcbiAgICApO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2VsZWN0ZWRTdGF0dXNlcyh2YWx1ZTogSW50ZXJuYWxDYXNlU3RhdHVzW10pIHtcbiAgICB0aGlzLl9zZWxlY3RlZFN0YXR1c2VzJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgY2FyYm9uVGhlbWU6IENBUkJPTl9USEVNRSA9IENBUkJPTl9USEVNRS5XSElURTtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgcHVibGljIHNlbGVjdGVkU3RhdHVzZXNDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJuYWxDYXNlU3RhdHVzW10+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbENhc2VTdGF0dXNbXT4oW10pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkU3RhdHVzZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbENhc2VTdGF0dXNbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxpc3RJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9zdGF0dXNlcyQsXG4gICAgdGhpcy5fc2VsZWN0ZWRTdGF0dXNlcyQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbc3RhdHVzZXMsIHNlbGVjdGVkU3RhdHVzZXNdKSA9PiAhIXN0YXR1c2VzICYmICEhc2VsZWN0ZWRTdGF0dXNlcyksXG4gICAgbWFwKChbc3RhdHVzZXMsIHNlbGVjdGVkU3RhdHVzZXNdKSA9PlxuICAgICAgc3RhdHVzZXMubWFwKHN0YXR1cyA9PiAoe1xuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHN0YXR1cy5rZXkgPT09IHRoaXMuQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXG4gICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy53aXRob3V0U3RhdHVzJylcbiAgICAgICAgICAgIDogc3RhdHVzLnRpdGxlLFxuICAgICAgICBzZWxlY3RlZDogISFzZWxlY3RlZFN0YXR1c2VzLmZpbmQoc2VsZWN0ZWRTdGF0dXMgPT4gc2VsZWN0ZWRTdGF0dXMua2V5ID09PSBzdGF0dXMua2V5KSxcbiAgICAgICAga2V5OiBzdGF0dXMua2V5LFxuICAgICAgICB0YWdUeXBlOiBzdGF0dXMudGFnVHlwZSxcbiAgICAgIH0pKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBpc0VxdWFsKHByZXZpb3VzLCBjdXJyZW50KSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHVibGljIGl0ZW1TZWxlY3RlZChldmVudDogTGlzdEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1NlbGVjdGVkSXRlbXMgPSBldmVudD8uZmlsdGVyKGl0ZW0gPT4gaXRlbT8uc2VsZWN0ZWQpIHx8IFtdO1xuXG4gICAgdGhpcy5fc3RhdHVzZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHN0YXR1c2VzID0+IHtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkU3RhdHVzZXMgPSBuZXdTZWxlY3RlZEl0ZW1zXG4gICAgICAgIC5tYXAoaXRlbSA9PiBzdGF0dXNlcy5maW5kKHN0YXR1cyA9PiBzdGF0dXMua2V5ID09PSBpdGVtLmtleSkpXG4gICAgICAgIC5maWx0ZXIoc3RhdHVzID0+ICEhc3RhdHVzKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFN0YXR1c2VzQ2hhbmdlRXZlbnQuZW1pdChuZXdTZWxlY3RlZFN0YXR1c2VzKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLWxhYmVsIGNsYXNzPVwic3RhdHVzLXNlbGVjdG9yXCIgKm5nSWY9XCJsaXN0SXRlbXMkIHwgYXN5bmMgYXMgbGlzdEl0ZW1zXCI+XG4gIHt7ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5zZWFyY2hGaWVsZFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuXG4gIDxjZHMtZHJvcGRvd25cbiAgICBbYXBwZW5kSW5saW5lXT1cImZhbHNlXCJcbiAgICB0eXBlPVwibXVsdGlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgc2VsZWN0aW9uRmVlZGJhY2s9XCJmaXhlZFwiXG4gICAgKHNlbGVjdGVkKT1cIml0ZW1TZWxlY3RlZCgkZXZlbnQpXCJcbiAgPlxuICAgIDxjZHMtZHJvcGRvd24tbGlzdFxuICAgICAgW2l0ZW1zXT1cImxpc3RJdGVtc1wiXG4gICAgICBbbGlzdFRwbF09XCJjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCJcbiAgICA+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgPC9jZHMtZHJvcGRvd24+XG48L2Nkcy1sYWJlbD5cblxuPG5nLXRlbXBsYXRlICNjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwic3RhdHVzLXNlbGVjdG9yLWRyb3Bkb3duLXRlbXBsYXRlXCI+XG4gICAgPGNkcy1jaGVja2JveCBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCI+PC9jZHMtY2hlY2tib3g+XG5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0ua2V5ID09PSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVlcIiBjbGFzcz1cImdlbmVyaWMtc3BhblwiPnt7XG4gICAgICBpdGVtPy5jb250ZW50XG4gICAgfX08L3NwYW4+XG5cbiAgICA8Y2RzLXRhZ1xuICAgICAgKm5nSWY9XCJpdGVtLmtleSAhPT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXCJcbiAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCJcbiAgICAgIFt0eXBlXT1cIml0ZW0/LnRhZ1R5cGVcIlxuICAgICAgW3RpdGxlXT1cIml0ZW0/LmNvbnRlbnRcIlxuICAgID5cbiAgICAgIHt7IGl0ZW0/LmNvbnRlbnQgfX1cbiAgICA8L2Nkcy10YWc+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==