@paperless/angular 2.0.1-beta.97 → 2.0.1-beta.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/modules/table/components/table/table.component.mjs +3 -3
- package/fesm2015/paperless-angular.mjs +2 -2
- package/fesm2015/paperless-angular.mjs.map +1 -1
- package/fesm2020/paperless-angular.mjs +2 -2
- package/fesm2020/paperless-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/paperless.css +5 -0
|
@@ -742,14 +742,14 @@ let Table = class Table {
|
|
|
742
742
|
}
|
|
743
743
|
};
|
|
744
744
|
Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
745
|
-
Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", rowSelectionLimit: "rowSelectionLimit", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableFloatingMenu: "enableFloatingMenu", floatingMenuAmountSelectedText: "floatingMenuAmountSelectedText", floatingMenuAmountSelectedTemplate: "floatingMenuAmountSelectedTemplate", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", enableFilterDesktop: "enableFilterDesktop", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePaginationSize: "enablePaginationSize", enablePaginationPages: "enablePaginationPages", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", emptyStateActionIcon: "emptyStateActionIcon", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", enableScroll: "enableScroll", shadow: "shadow", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", action: "action", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "window:resize": "onResize($event)", "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" }, properties: { "class": "this.className" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "headerCustomActionsTemplate", first: true, predicate: TableCustomActionsDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "rowActions", predicate: TableRowAction }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "tableRows", predicate: PTableRow, descendants: true, read: ElementRef }, { propertyName: "tableCells", predicate: TableCell, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[enableFilterDesktop]=\"enableFilterDesktop\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div class=\"relative flex-1\" *ngIf=\"enableScroll; else rowsTemplate\">\n\t\t<div class=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"cn(\n\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1]',\n\t\t\t\t'before:w-[10%] before:h-full before:transition-opacity',\n\t\t\t\t'before:bg-gradient-to-r before:from-white before:via-white/80 before:to-transparent',\n\n\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0]',\n\t\t\t\t'after:w-[10%] after:h-full after:transition-opacity',\n\t\t\t\t'after:bg-gradient-to-l after:from-white after:via-white/80 after:to-transparent',\n\n\t\t\t\t{\n\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false,\n\t\t\t\t}\n\t\t\t)\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action['type'] === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction['disabled']\n\t\t\t\t\"\n\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t></p-checkbox>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t></p-checkbox>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n</ng-template>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PButton, selector: "p-button", inputs: ["active", "as", "buttonGroupPosition", "chevron", "chevronPosition", "class", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "label", "loading", "size", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PCheckbox, selector: "p-checkbox", inputs: ["checked", "disabled", "id", "indeterminate", "name", "required"] }, { kind: "component", type: i3.PEmptyState, selector: "p-empty-state", inputs: ["actionIcon", "actionLoading", "actionText", "actionVariant", "content", "enableAction", "header", "illustration"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["amount", "amountSelectedTemplate", "enableAmountSelected", "enableClose", "usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover", "icon", "iconFlip", "iconPosition", "iconRotate", "loading"] }, { kind: "component", type: i3.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i3.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "scrollLock", "show", "showClose", "showMobileFooter", "size"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enablePaginationPages", "enablePaginationSize", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableExport", "enableFilter", "enableFilterDesktop", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.PTableRowActionsContainer, selector: "p-table-row-actions-container" }, { kind: "component", type: i3.PTooltip, selector: "p-tooltip", inputs: ["canManuallyClose", "content", "enableUserInput", "offset", "placement", "show", "strategy", "usePortal", "variant"] }, { kind: "component", type: i4.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i5.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i6.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
745
|
+
Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", rowSelectionLimit: "rowSelectionLimit", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableFloatingMenu: "enableFloatingMenu", floatingMenuAmountSelectedText: "floatingMenuAmountSelectedText", floatingMenuAmountSelectedTemplate: "floatingMenuAmountSelectedTemplate", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", enableFilterDesktop: "enableFilterDesktop", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePaginationSize: "enablePaginationSize", enablePaginationPages: "enablePaginationPages", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", emptyStateActionIcon: "emptyStateActionIcon", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", enableScroll: "enableScroll", shadow: "shadow", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", action: "action", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "window:resize": "onResize($event)", "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" }, properties: { "class": "this.className" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "headerCustomActionsTemplate", first: true, predicate: TableCustomActionsDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "rowActions", predicate: TableRowAction }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "tableRows", predicate: PTableRow, descendants: true, read: ElementRef }, { propertyName: "tableCells", predicate: TableCell, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[enableFilterDesktop]=\"enableFilterDesktop\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div class=\"relative flex-1\" *ngIf=\"enableScroll; else rowsTemplate\">\n\t\t<div class=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"cn(\n\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t'before:w-[10%] before:h-full before:transition-opacity',\n\t\t\t\t'before:bg-gradient-to-r before:from-white before:via-white/80 before:to-transparent',\n\n\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t'after:w-[10%] after:h-full after:transition-opacity',\n\t\t\t\t'after:bg-gradient-to-l after:from-white after:via-white/80 after:to-transparent',\n\n\t\t\t\t{\n\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false,\n\t\t\t\t}\n\t\t\t)\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action['type'] === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction['disabled']\n\t\t\t\t\"\n\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t></p-checkbox>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t></p-checkbox>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n</ng-template>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PButton, selector: "p-button", inputs: ["active", "as", "buttonGroupPosition", "chevron", "chevronPosition", "class", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "label", "loading", "size", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PCheckbox, selector: "p-checkbox", inputs: ["checked", "disabled", "id", "indeterminate", "name", "required"] }, { kind: "component", type: i3.PEmptyState, selector: "p-empty-state", inputs: ["actionIcon", "actionLoading", "actionText", "actionVariant", "content", "enableAction", "header", "illustration"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["amount", "amountSelectedTemplate", "enableAmountSelected", "enableClose", "usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover", "icon", "iconFlip", "iconPosition", "iconRotate", "loading"] }, { kind: "component", type: i3.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i3.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "scrollLock", "show", "showClose", "showMobileFooter", "size"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enablePaginationPages", "enablePaginationSize", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableExport", "enableFilter", "enableFilterDesktop", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.PTableRowActionsContainer, selector: "p-table-row-actions-container" }, { kind: "component", type: i3.PTooltip, selector: "p-tooltip", inputs: ["canManuallyClose", "content", "enableUserInput", "offset", "placement", "show", "strategy", "usePortal", "variant"] }, { kind: "component", type: i4.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i5.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i6.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
746
746
|
Table = __decorate([
|
|
747
747
|
UntilDestroy({ checkProperties: true })
|
|
748
748
|
], Table);
|
|
749
749
|
export { Table };
|
|
750
750
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, decorators: [{
|
|
751
751
|
type: Component,
|
|
752
|
-
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[enableFilterDesktop]=\"enableFilterDesktop\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div class=\"relative flex-1\" *ngIf=\"enableScroll; else rowsTemplate\">\n\t\t<div class=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"cn(\n\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1]',\n\t\t\t\t'before:w-[10%] before:h-full before:transition-opacity',\n\t\t\t\t'before:bg-gradient-to-r before:from-white before:via-white/80 before:to-transparent',\n\n\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0]',\n\t\t\t\t'after:w-[10%] after:h-full after:transition-opacity',\n\t\t\t\t'after:bg-gradient-to-l after:from-white after:via-white/80 after:to-transparent',\n\n\t\t\t\t{\n\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false,\n\t\t\t\t}\n\t\t\t)\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action['type'] === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction['disabled']\n\t\t\t\t\"\n\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t></p-checkbox>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t></p-checkbox>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n</ng-template>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n" }]
|
|
752
|
+
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[enableFilterDesktop]=\"enableFilterDesktop\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div class=\"relative flex-1\" *ngIf=\"enableScroll; else rowsTemplate\">\n\t\t<div class=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"cn(\n\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t'before:w-[10%] before:h-full before:transition-opacity',\n\t\t\t\t'before:bg-gradient-to-r before:from-white before:via-white/80 before:to-transparent',\n\n\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t'after:w-[10%] after:h-full after:transition-opacity',\n\t\t\t\t'after:bg-gradient-to-l after:from-white after:via-white/80 after:to-transparent',\n\n\t\t\t\t{\n\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false,\n\t\t\t\t}\n\t\t\t)\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action['type'] === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction['disabled']\n\t\t\t\t\"\n\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t></p-checkbox>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t></p-checkbox>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n</ng-template>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n" }]
|
|
753
753
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { className: [{
|
|
754
754
|
type: HostBinding,
|
|
755
755
|
args: ['class']
|
|
@@ -941,4 +941,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
941
941
|
type: HostListener,
|
|
942
942
|
args: ['document:visibilitychange', ['$event']]
|
|
943
943
|
}] } });
|
|
944
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixXQUFXLEVBQ1IsWUFBWSxFQUNmLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTixRQUFRLEVBR1Isc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUN2QixFQUFFLEdBQ0wsTUFBTSxpQkFBaUIsQ0FBQztBQU16QixPQUFPLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNOLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIseUJBQXlCLEdBQ3pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFFTixjQUFjLEdBR2QsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUs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VTtzQkFEYixlQUFlO3VCQUFDLGNBQWM7Z0JBU3RCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBMEVQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT3pDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVNUMsS0FBSztzQkFESixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0QmluZGluZyxcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkluaXQsXG5cdE91dHB1dCxcblx0UXVlcnlMaXN0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG5cdGlzTW9iaWxlLFxuXHRRdWlja0ZpbHRlcixcblx0Um93Q2xpY2tFdmVudCxcblx0dGFibGVDb2x1bVNpemVzT3B0aW9ucyxcblx0ZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3MsXG4gICAgY24sXG59IGZyb20gJ0BwYXBlcmxlc3MvY29yZSc7XG5pbXBvcnQge1xuXHRJY29uVmFyaWFudCxcblx0SWxsdXN0cmF0aW9uVmFyaWFudCxcblx0VGFibGVDb2x1bW5TaXplcyxcbn0gZnJvbSAnQHBhcGVybGVzcy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuXHRCZWhhdmlvclN1YmplY3QsXG5cdGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuXHRmaWx0ZXIsXG5cdFN1YnNjcmlwdGlvbixcblx0dGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRUYWJsZUN1c3RvbUFjdGlvbnNEaXJlY3RpdmUsXG5cdFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLFxuXHRUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0QXN5bmNJdGVtLFxuXHRUYWJsZVJvd0FjdGlvbixcblx0VGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0VGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxufSBmcm9tICcuLi90YWJsZS1yb3ctYWN0aW9uL3RhYmxlLXJvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRTaXplLCBkZWZhdWx0U2l6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICcuLi90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBUYWJsZVJvdyB9IGZyb20gJ3Byb2plY3RzL3BhcGVybGVzcy9zcmMvcHVibGljLWFwaSc7XG5cbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3AtdGFibGUtbmd4Jyxcblx0dGVtcGxhdGVVcmw6ICd0YWJsZS5jb21wb25lbnQuaHRtbCcsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblx0QEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzTmFtZSA9ICdmbGV4IGZsZXgtY29sIHotMCc7XG5cblx0LyoqXG5cdCAqIFRoZSBpdGVtcyB0byBiZSBmZWQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBpdGVtcyE6IHN0cmluZyB8IGFueVtdO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgZGF0YSBpcyBsb2FkaW5nXG5cdCAqL1xuXHRASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgaGVhZGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGhlYWRlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBmb290ZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuXHQgKi9cblx0QElucHV0KCkgZm9vdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGxvYWRpbmcgcm93cyB0byBzaG93XG5cdCAqL1xuXHRASW5wdXQoKSBhbW91bnRPZkxvYWRpbmdSb3dzOiBudW1iZXIgPSA2O1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNlbGVjdGlvblxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQSBsaW1pdCB0byB0aGUgYW1vdW50IG9mIHJvd3MgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHJvd1NlbGVjdGlvbkxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcm93IGNsaWNraW5nXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVSb3dDbGljazogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGNhbiBiZSBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgY2FuU2VsZWN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgdGhlIGZsb2F0aW5nIG1lbnVcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZsb2F0aW5nTWVudTogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBmbG9hdGluZyBtZW51IGFtb3VudCBpdGVtIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dDogc3RyaW5nID0gJzAgaXRlbXMgc2VsZWN0ZWQnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIGFtb3VudCBzZWxlY3RlZCBpdGVtIGluIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZmxvYXRpbmcgbWVudSBoYXMgYmVlbiBzaG93biBhdGxlYXN0IG9uY2Vcblx0ICovXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVTaG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEhFQURFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcblx0ICovXG5cdEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuXHQgKi9cblx0QElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uIG9uIGRlc2t0b3Bcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlckRlc2t0b3A6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGxvYWRpbmdcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFjdGlvbiBidXR0b24gaWNvblxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSAncGVuY2lsJztcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGVuYWJsZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYWN0aW9uIGJ1dHRvbiB0ZXh0IGlmIGNoYW5nZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGFjdGlvbiBidXR0b24gdGV4dFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHF1aWNrRmlsdGVyOiBFdmVudEVtaXR0ZXI8UXVpY2tGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBxdWVyeSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBmaWx0ZXIgYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBmaWx0ZXI6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgYWN0aW9uOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEZPT1RFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZm9vdGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb24gc2l6ZSBzZWxlY3Rcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb25TaXplOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBwYWdpbmF0aW9uIHBhZ2VzXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVQYWdpbmF0aW9uUGFnZXM6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIGV4cG9ydFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZTogbnVtYmVyID0gMTtcblxuXHQvKipcblx0ICogVGhlIHRvdGFsIGFtb3VudCBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgdG90YWwhOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBpdGVtcyBwZXIgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IGRlZmF1bHRTaXplO1xuXG5cdC8qKlxuXHQgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHBhZ2Ugc2l6ZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGRlZmF1bHRTaXplT3B0aW9ucztcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIGV4cG9ydDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBoaWRlIHdoZW4gdGhlcmUgaXMgb25seSAxIHBhZ2UgYXZhaWxhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlT25TaW5nbGVQYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKiBFbXB0eSBzdGF0ZSBzdGFydCAqL1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlVHlwZTogJ25vX2ZpbHRlcicgfCAnZmlsdGVyZWQnID0gJ25vX2ZpbHRlcic7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUlsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9ICd0YWJsZSc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVIZWFkZXIhOiBzdHJpbmc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVDb250ZW50ITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQWN0aW9uITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQWN0aW9uSWNvbjogSWNvblZhcmlhbnQgPSAncGx1cyc7XG5cblx0QElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gJ3NlYXJjaCc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCE6IHN0cmluZztcblxuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNjcm9sbGluZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGRyZW4oUFRhYmxlUm93LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVSb3dzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8UFRhYmxlUm93Pj47XG5cdEBWaWV3Q2hpbGRyZW4oVGFibGVDZWxsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVDZWxscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFRhYmxlQ2VsbD4+O1xuXHRAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuXHRwdWJsaWMgcmVhY2hlZFNjcm9sbFN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG5cdHB1YmxpYyByZWFjaGVkU2Nyb2xsRW5kJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXHRwcml2YXRlIF90b3RhbFdpZHRoID0gMDtcblx0cHJpdmF0ZSBfY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dD86IG51bWJlcjtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIGVtcHR5IHN0YXRlIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBlbXB0eVN0YXRlQWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiBFbXB0eSBzdGF0ZSBlbmQgKi9cblxuXHQvKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2hhZG93IG9yIG5vdFxuXHQgKi9cblx0QElucHV0KCkgc2hhZG93OiBib29sZWFuID0gdHJ1ZTtcblxuXHRwdWJsaWMgY29sdW1uczogYW55W10gPSBbXTtcblx0cHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0fSk7XG5cdHByaXZhdGUgX2N0cmxEb3duID0gZmFsc2U7XG5cblx0Ly8gQW5ndWxhciBzdHVmZlxuXHQvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG5cdEBDb250ZW50Q2hpbGQoVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjdXN0b20gYWN0aW9ucyB0ZW1wbGF0ZVxuXHRAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjb2x1bW4gdGVtcGxhdGVzXG5cdHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblxuXHRAQ29udGVudENoaWxkcmVuKFRhYmxlQ29sdW1uKVxuXHRzZXQgY29sdW1uRGVmaW5pdGlvbnModjogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPikge1xuXHRcdHRoaXMuX2NvbHVtbkRlZmluaXRpb25zID0gdjtcblx0XHR0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcblx0fVxuXHRnZXQgY29sdW1uRGVmaW5pdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zO1xuXHR9XG5cblx0Ly8gZmlsdGVyIG1vZGFsXG5cdEBDb250ZW50Q2hpbGQoVGFibGVGaWx0ZXJNb2RhbERpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGZpbHRlck1vZGFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cblx0cHVibGljIGZpbHRlck1vZGFsU2hvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvLyByb3cgYWN0aW9ucyB0ZW1wbGF0ZXNcblx0cHJpdmF0ZSBfcm93QWN0aW9ucyE6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj47XG5cdHByaXZhdGUgX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVSb3dBY3Rpb24pXG5cdHNldCByb3dBY3Rpb25zKHY6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj4pIHtcblx0XHR0aGlzLl9yb3dBY3Rpb25zID0gdjtcblx0XHR0aGlzLl9zZXRSb3dTZWxlY3Rpb25EYXRhKCk7XG5cdH1cblx0Z2V0IHJvd0FjdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlUm93QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvd0FjdGlvbnM7XG5cdH1cblxuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbEhlYWRlclRleHQ6IHN0cmluZyA9ICdGaWx0ZXJzJztcblx0QElucHV0KCkgZmlsdGVyTW9kYWxTYXZlVGV4dDogc3RyaW5nID0gJ1NhdmUnO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9ICdDYW5jZWwnO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFJlc2V0VGV4dDogc3RyaW5nID0gJ1Jlc2V0IGZpbHRlcnMnO1xuXG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0OiBib29sZWFuID0gZmFsc2U7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlOiBib29sZWFuID0gZmFsc2U7XG5cblx0QE91dHB1dCgpIGZpbHRlck1vZGFsU2hvdzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxTYXZlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFJlc2V0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0cHVibGljIHJvd0FjdGlvbnNSb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cdHB1YmxpYyByb3dBY3Rpb25zRmxvYXRpbmdBbGwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cdHB1YmxpYyByb3dBY3Rpb25zRmxvYXRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cblx0cHVibGljIGlzTW9iaWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaXNNb2JpbGUoKSk7XG5cblx0cHVibGljIGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzID0gZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3M7XG5cblx0cHJpdmF0ZSBfcmVzaXplVGltZW91dDogdW5rbm93bjtcblx0cHJpdmF0ZSBfaW5wdXRFbmFibGVSb3dTZWxlY3Rpb246IGJvb2xlYW4gPSB0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbjtcblx0cHJpdmF0ZSBfaW5wdXRSb3dTZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdDtcblxuXHRwdWJsaWMgZm9vdGVySGlkZGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG5cdHB1YmxpYyBjbiA9IGNuO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5fcGFyc2VJdGVtcyh0aGlzLml0ZW1zKTtcblxuXHRcdHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRcdGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckXG5cdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcblx0XHRcdC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUl0ZW1zKGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRcdGxlbmd0aDogY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddLmN1cnJlbnRWYWx1ZSxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gZmFsc2U7XG5cdFx0aWYgKGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbiA9XG5cdFx0XHRcdGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydyb3dTZWxlY3Rpb25MaW1pdCddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0ID0gY2hhbmdlc1sncm93U2VsZWN0aW9uTGltaXQnXS5jdXJyZW50VmFsdWU7XG5cdFx0XHRjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSB8fCBjaGFuZ2VzWydzZWxlY3RlZFJvd3MnXSkge1xuXHRcdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHRcdH1cblxuXHRcdGlmKGNoYW5nZXNbJ2VuYWJsZVNjcm9sbCddPy5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZighdGhpcy5lbmFibGVTY3JvbGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuXHRrZXlEb3duKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcblx0a2V5VXAoeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG5cdFx0aWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcblx0dmlzaWJpbGl0eUNoYW5nZSgpIHtcblx0XHRpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQoZGV0YWlsKTtcblx0fVxuXG5cdG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG5cdFx0dGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5wYWdlID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvbkZpbHRlck1vZGFsU2F2ZSgpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGVtcHR5U3RhdGVDbGlja2VkKCkge1xuXHRcdGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuXHR9XG5cblx0cGFyc2VSb3dBY3Rpb25zUm93KGFjdGlvbnM6IFRhYmxlUm93QWN0aW9uW10gfCBudWxsLCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCFhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRhID0+ICFhLnNob3dGdW5jdGlvbiB8fCBhLnNob3dGdW5jdGlvbih0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XSlcblx0XHQpO1xuXHR9XG5cblx0b25Db250YWluZXJYU2Nyb2xsKGV2OiBhbnkpIHtcblx0XHRpZighdGhpcy5lbmFibGVTY3JvbGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVTY3JvbGxQb3NpdGlvbihldik7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZUl0ZW1zKGl0ZW1zOiBzdHJpbmcgfCBhbnlbXSkge1xuXHRcdGlmICghaXRlbXMpIHtcblx0XHRcdHRoaXMucGFyc2VkSXRlbXMgPSBbXTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcblx0XHRcdHRoaXMucGFyc2VkSXRlbXMgPSBpdGVtcztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gSlNPTi5wYXJzZShpdGVtcyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZW5lcmF0ZUNvbHVtbnMoKSB7XG5cdFx0bGV0IGRlZmluaXRpb25zQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZmluaXRpb25zKSBhcyBUYWJsZUNvbHVtbltdO1xuXG5cdFx0ZGVmaW5pdGlvbnNBcnJheSA9IHRoaXMuX3BhcnNlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnNBcnJheSk7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBkZWZpbml0aW9uc0FycmF5O1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveERpc2FibGVkKGl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IHNlbGVjdGlvbkNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQodGhpcy5jYW5TZWxlY3RLZXkgJiYgIWl0ZW1bdGhpcy5jYW5TZWxlY3RLZXldKSB8fFxuXHRcdFx0KHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQhc2VsZWN0aW9uQ29udGFpbnMgJiZcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0KVxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQ6IGFueSwgZm9yY2VWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBmb3JjZVZhbHVlID09PSB1bmRlZmluZWQgPyAkZXZlbnQuZGV0YWlsIDogZm9yY2VWYWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0Y29uc3QgdG9BZGQgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0XHRpZiAodGhpcy5jYW5TZWxlY3RLZXkgJiYgIXJvd1t0aGlzLmNhblNlbGVjdEtleV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGkpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b0FkZC5wdXNoKHJvdyk7XG5cdFx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggKyB0b0FkZC5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIC4uLnRvQWRkXTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1tpXTtcblx0XHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXMuZmluZChcblx0XHRcdFx0ZCA9PiB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShkLCBpKSA9PT0gdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUodmFsdWUsIGkpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXJvdykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveENoYW5nZSh0YXJnZXQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQpO1xuXHRcdGlmIChcblx0XHRcdHZhbHVlICYmXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4T2ZUb1JlbW92ZSA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaW5kZXgsIHRydWUpO1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG5cdFx0c2VsZWN0aW9uLnNwbGljZShpbmRleE9mVG9SZW1vdmUsIDEpO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHRcdHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U2VsZWN0aW9uVmFsdWUocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMocm93OiBhbnksIGluZGV4OiBudW1iZXIsIHJldHVybkluZGV4ID0gZmFsc2UpOiBhbnkge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuXHRcdFx0aXRlbSA9PlxuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShyb3csIGluZGV4KSA9PT1cblx0XHRcdFx0dGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoaXRlbSwgaW5kZXgpXG5cdFx0KTtcblx0XHRyZXR1cm4gIXJldHVybkluZGV4ID8gcmV0dXJuVmFsdWUgPj0gMCA6IHJldHVyblZhbHVlO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcblx0XHRsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuXHRcdGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuXHRcdFx0aWYgKCFjb250YWlucykge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG5cdFx0aWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGggfHwgIXRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBjb250YWluc0NvdW50ID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cblx0XHRcdGlmIChjb250YWlucykge1xuXHRcdFx0XHRjb250YWluc0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0cHVibGljIF9yb3dDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0aWYgKFxuXHRcdFx0dGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fFxuXHRcdFx0KHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlID09PSAnY2hlY2tib3gnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5fZmluZFJvdyh0YXJnZXQpO1xuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuX2ZpbmRSb3dBY3Rpb24odGFyZ2V0KTtcblxuXHRcdGlmIChhY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVSb3dDbGljaykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXHRcdFx0dGhpcy5yb3dDbGljay5lbWl0KHtcblx0XHRcdFx0aXRlbSxcblx0XHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNoZWNrYm94ID0gcm93Py5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuXHRcdGlmICghY2hlY2tib3gpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XG5cdFx0dGhpcy5fY2hlY2tib3hDaGFuZ2UoY2hlY2tib3gsIGluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUm91dGVyTGluayhcblx0XHRyb3V0ZXJMaW5rOiBUYWJsZVJvd0FjdGlvblJvdXRlckxpbmssXG5cdFx0cm93SW5kZXg6IG51bWJlclxuXHQpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgYW55W10+IHwgQXN5bmNJdGVtPHN0cmluZyB8IGFueVtdPiB7XG5cdFx0aWYgKHR5cGVvZiByb3V0ZXJMaW5rID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUm91dGVyTGluayhyb3V0ZXJMaW5rKGl0ZW0pLCByb3dJbmRleCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByb3V0ZXJMaW5rID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHJvdXRlckxpbmspKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdChyb3V0ZXJMaW5rKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm91dGVyTGluaztcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUXVlcnlQYXJhbXMoXG5cdFx0cXVlcnlQYXJhbXM6IFRhYmxlUm93QWN0aW9uUXVlcnlQYXJhbXMsXG5cdFx0cm93SW5kZXg6IG51bWJlclxuXHQpOiBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPiB8IEFzeW5jSXRlbTxQYXJhbXM+IHtcblx0XHRpZiAodHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMoaXRlbSksIHJvd0luZGV4KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlQYXJhbXMgaW5zdGFuY2VvZiBPYmplY3QgJiYgcXVlcnlQYXJhbXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIG5ldyBCZWhhdmlvclN1YmplY3QocXVlcnlQYXJhbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBxdWVyeVBhcmFtcyBhcyBBc3luY0l0ZW08UGFyYW1zPjtcblx0fVxuXG5cdHB1YmxpYyBfcm93QWN0aW9uQ2xpY2soYWN0aW9uOiBUYWJsZVJvd0FjdGlvbiwgcm93SW5kZXg/OiBudW1iZXIpIHtcblx0XHRpZiAoYWN0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGlvbi5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFhY3Rpb24uYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnR5cGUgPT09ICdtdWx0aScgfHxcblx0XHRcdChhY3Rpb24udHlwZSA9PT0gJ2JvdGgnICYmIHJvd0luZGV4ID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRhY3Rpb24uYWN0aW9uLmVtaXQoe1xuXHRcdFx0XHRpdGVtczogdGhpcy5zZWxlY3RlZFJvd3MsXG5cdFx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdFx0XHRjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRhY3Rpb24ucm91dGVyTGluayB8fFxuXHRcdFx0KEFycmF5LmlzQXJyYXkoYWN0aW9uLnJvdXRlckxpbmspICYmIGFjdGlvbi5yb3V0ZXJMaW5rLmxlbmd0aClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtID1cblx0XHRcdHJvd0luZGV4ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XVxuXHRcdFx0XHQ6IHRoaXMuc2VsZWN0ZWRSb3dzWzBdO1xuXHRcdGFjdGlvbi5hY3Rpb24uZW1pdCh7XG5cdFx0XHRpdGVtLFxuXHRcdFx0bXVsdGk6IGZhbHNlLFxuXHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvdyhlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0aWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09IG51bGwgJiZcblx0XHRcdGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gJ2ZhbHNlJ1xuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3dBY3Rpb24oZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2V0Um93U2VsZWN0aW9uRGF0YSgpIHtcblx0XHRpZiAodGhpcy5fcmVzaXplVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQgYXMgbnVtYmVyKTtcblx0XHR9XG5cblx0XHQvLyBXZSBhZGQgYSB0aW1lb3V0IGhlcmUgYmVjYXVzZSBpdCdzIGEgbG90IGVhc2llciBvbiB0aGUgbWFjaGluZSB0byBkbyB0aGVzZSB3aGVuIHNvbWVvbmUgaXMgZG9uZVxuXHRcdC8vIHJlc2l6aW5nIGFuZCBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZWlyIGJyb3dzZXJcblx0XHR0aGlzLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtb2JpbGUgPSBpc01vYmlsZSgpO1xuXHRcdFx0dGhpcy5pc01vYmlsZSQubmV4dChtb2JpbGUpO1xuXG5cdFx0XHRjb25zdCBhY3Rpb25zID0gQXJyYXkuZnJvbSh0aGlzLl9yb3dBY3Rpb25zKSBhcyBUYWJsZVJvd0FjdGlvbltdO1xuXG5cdFx0XHRpZiAodGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAobGV0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucykge1xuXHRcdFx0XHRcdHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zID0gYWN0aW9ucy5tYXAoYWN0aW9uID0+XG5cdFx0XHRcdGFjdGlvbi5fbG9hZGluZ0NoYW5nZWRcblx0XHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcblx0XHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyB3ZSBoYWNrIHRoaXMgdG8gYW55W10gdG8gbWFrZSBpdCB3b3JrLi5cblx0XHRcdGNvbnN0IHJvd0FjdGlvbnNSb3cgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0YSA9PiBhLnR5cGUgPT09ICdib3RoJyB8fCBhLnR5cGUgPT09ICdzaW5nbGUnXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgcm93QWN0aW9uc0Zsb2F0aW5nID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdGEgPT5cblx0XHRcdFx0XHQodGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb24gJiZcblx0XHRcdFx0XHRcdChhLnR5cGUgPT09ICdib3RoJyB8fCBhLnR5cGUgPT09ICdtdWx0aScpKSB8fFxuXHRcdFx0XHRcdChtb2JpbGUgJiYgYS50eXBlID09PSAnc2luZ2xlJyAmJiAhYS5yb3V0ZXJMaW5rKVxuXHRcdFx0KTtcblxuXHRcdFx0bGV0IHJvd1NlbGVjdGlvbkxpbWl0ID0gdGhpcy5faW5wdXRSb3dTZWxlY3Rpb25MaW1pdDtcblx0XHRcdGlmIChcblx0XHRcdFx0bW9iaWxlICYmIC8vIHdlJ3JlIG1vYmlsZVxuXHRcdFx0XHRyb3dBY3Rpb25zRmxvYXRpbmc/Lmxlbmd0aCAmJiAvLyB3ZSBoYXZlIGF0bGVhc3QgMSBpdGVtIGluIF9yb3dBY3Rpb25zRmxvYXRpbmdcblx0XHRcdFx0KChyb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB8fFxuXHRcdFx0XHRcdCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbilcblx0XHRcdCkge1xuXHRcdFx0XHRyb3dTZWxlY3Rpb25MaW1pdCA9IDE7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgPSByb3dTZWxlY3Rpb25MaW1pdDtcblxuXHRcdFx0bGV0IGVuYWJsZVJvd1NlbGVjdGlvbiA9IHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtb2JpbGUgJiYgLy8gd2UncmUgbW9iaWxlXG5cdFx0XHRcdHJvd0FjdGlvbnNGbG9hdGluZz8ubGVuZ3RoICYmIC8vIHdlIGhhdmUgYXRsZWFzdCAxIGl0ZW0gaW4gX3Jvd0FjdGlvbnNGbG9hdGluZ1xuXHRcdFx0XHQhZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHQpIHtcblx0XHRcdFx0ZW5hYmxlUm93U2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZW5hYmxlUm93U2VsZWN0aW9uID0gZW5hYmxlUm93U2VsZWN0aW9uO1xuXG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNSb3ckLm5leHQocm93QWN0aW9uc1Jvdyk7XG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZ0FsbCQubmV4dChyb3dBY3Rpb25zRmxvYXRpbmcpO1xuXG5cdFx0XHR0aGlzLmZsb2F0aW5nTWVudVNob3duJFxuXHRcdFx0XHQucGlwZShcblx0XHRcdFx0XHR0YWtlKDEpLFxuXHRcdFx0XHRcdGZpbHRlcih2ID0+ICEhdilcblx0XHRcdFx0KVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKSk7XG5cdFx0fSwgMjAwKTtcblx0fVxuXG5cdHByaXZhdGUgX3Nob3dGbG9hdGluZ01lbnUoKSB7XG5cdFx0dGhpcy5yb3dBY3Rpb25zRmxvYXRpbmdBbGwkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGFjdGlvbnMgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ID09PSAxICYmXG5cdFx0XHRcdGFjdGlvbnMuZmluZEluZGV4KFxuXHRcdFx0XHRcdGEgPT4gKGEudHlwZSA9PT0gJ3NpbmdsZScgfHwgYS50eXBlID09PSAnYm90aCcpICYmIGEuc2hvd0Z1bmN0aW9uXG5cdFx0XHRcdCkgPj0gMFxuXHRcdFx0KSB7XG5cdFx0XHRcdGFjdGlvbnMgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0XHRhID0+XG5cdFx0XHRcdFx0XHRhLnR5cGUgPT09ICdtdWx0aScgfHxcblx0XHRcdFx0XHRcdCFhLnNob3dGdW5jdGlvbiB8fFxuXHRcdFx0XHRcdFx0YS5zaG93RnVuY3Rpb24odGhpcy5zZWxlY3RlZFJvd3NbMF0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nJC5uZXh0KGFjdGlvbnMpO1xuXHRcdFx0dGhpcy5mbG9hdGluZ01lbnVTaG93biQubmV4dCh0cnVlKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3BhcnNlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnNBcnJheTogVGFibGVDb2x1bW5bXSkge1xuXHRcdHJldHVybiBkZWZpbml0aW9uc0FycmF5Lm1hcChkZWZpbml0aW9uID0+IHtcblx0XHRcdGRlZmluaXRpb24gPSB0aGlzLl9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uKTtcblx0XHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VEZWZpbml0aW9uU2l6ZXMoZGVmaW5pdGlvbjogVGFibGVDb2x1bW4pIHtcblx0XHRjb25zdCBkZWZpbml0aW9uQW55ID0gZGVmaW5pdGlvbiBhcyBhbnk7XG5cdFx0bGV0IHBhcnNlZFNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiAnZnVsbCcgfTtcblxuXHRcdGZvciAoY29uc3QgW2luZGV4LCBzaXplXSBvZiB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2hpZGRlbicgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2Z1bGwnIHx8XG5cdFx0XHRcdHR5cGVvZiBkZWZpbml0aW9uQW55LnNpemVzID09PSAnbnVtYmVyJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHBhcnNlZFNpemVzW3NpemVdID1cblx0XHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgPyAnZnVsbCcgOiBkZWZpbml0aW9uQW55LnNpemVzO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cGFyc2VkU2l6ZXNbc2l6ZV0gPVxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzW3NpemVdID8/XG5cdFx0XHRcdHBhcnNlZFNpemVzW3RhYmxlQ29sdW1TaXplc09wdGlvbnNbaW5kZXggLSAxXV07XG5cdFx0fVxuXG5cdFx0ZGVmaW5pdGlvbi5wYXJzZWRTaXplcyA9IHBhcnNlZFNpemVzO1xuXHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkgIHtcblx0XHRpZighdGhpcy50YWJsZUNlbGxzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQpO1xuXHRcdFx0dGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dCA9IDA7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm93cyA9IHRoaXMudGFibGVSb3dzLm1hcChjID0+IGMubmF0aXZlRWxlbWVudCBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50KTtcblx0XHRjb25zdCBjZWxscyA9IHRoaXMudGFibGVDZWxscy5tYXAoYyA9PiBjLm5hdGl2ZUVsZW1lbnQgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudCk7XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cyk7XG5cblx0XHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRcdGZvcihjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG5cdFx0XHRcdGlmKGNlbGwuc3R5bGUud2lkdGg/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdGNlbGwuc3R5bGUud2lkdGggPSAnJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByb21pc2VzLnB1c2gobmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByZWN0ID0gY2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHRjZWxsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgd2lkdGg6ICR7cmVjdC53aWR0aH1weCAhaW1wb3J0YW50YCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9LCAxMDApKSlcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cywgJ21pbi1jb250ZW50Jyk7XG5cblx0XHRcdHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oKTtcblx0XHR9LCAyMDApXG5cdH1cblxuXHRwcml2YXRlIF9zZXRSb3dzV2lkdGgocm93czogSFRNTEVsZW1lbnRbXSwgdmFsdWU6ICdtaW4tY29udGVudCcgfCBudWxsID0gbnVsbCkge1xuXHRcdGZvcihsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCByb3cgPSByb3dzW2ldO1xuXG5cdFx0XHRjb25zdCBzaGFkb3cgPSByb3cuc2hhZG93Um9vdDtcblx0XHRcdGlmKCFzaGFkb3cpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpcnN0RGl2ID0gc2hhZG93LnF1ZXJ5U2VsZWN0b3IoJyo6bnRoLWNoaWxkKDEpJyk7XG5cdFx0XHRpZighZmlyc3REaXYpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlY29uZERpdiA9IGZpcnN0RGl2LnF1ZXJ5U2VsZWN0b3IoJyo6bnRoLWNoaWxkKDEpJyk7XG5cdFx0XHRpZighc2Vjb25kRGl2KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZih2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRmaXJzdERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuXHRcdFx0XHRzZWNvbmREaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpcnN0RGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnd2lkdGg6IG1pbi1jb250ZW50OycpXG5cdFx0XHRzZWNvbmREaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogbWluLWNvbnRlbnQ7JylcblxuXHRcdFx0aWYoaSA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLl90b3RhbFdpZHRoID0gZmlyc3REaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVzZXRTY3JvbGxQb3NpdGlvbigpIHtcblx0XHRpZih0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuXHRcdFx0dGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0cnVlKVxuXHRcdHRoaXMucmVhY2hlZFNjcm9sbEVuZCQubmV4dChmYWxzZSk7XG5cdH1cblxuXHRwcml2YXRlIF9jYWxjdWxhdGVTY3JvbGxQb3NpdGlvbih7IHRhcmdldCB9OiB7IHRhcmdldDogSFRNTERpdkVsZW1lbnQgfSkge1xuXHRcdHRoaXMucmVhY2hlZFNjcm9sbFN0YXJ0JC5uZXh0KHRhcmdldC5zY3JvbGxMZWZ0IDwgMTAwKTtcblxuXHRcdGNvbnN0IHJpZ2h0ID0gdGFyZ2V0LnNjcm9sbExlZnQgKyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0dGhpcy5yZWFjaGVkU2Nyb2xsRW5kJC5uZXh0KHJpZ2h0ID4gdGhpcy5fdG90YWxXaWR0aCAtIDEwMClcblx0fVxufVxuIiwiPHAtdGFibGUtY29udGFpbmVyPlxuXHQ8cC10YWJsZS1oZWFkZXJcblx0XHQqbmdJZj1cImVuYWJsZUhlYWRlclwiXG5cdFx0Y2xhc3M9XCJtYi04XCJcblx0XHRbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG5cdFx0W2FjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcl09XCJhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJcIlxuXHRcdChxdWlja0ZpbHRlcik9XCJvblF1aWNrRmlsdGVyKCRldmVudClcIlxuXHRcdFtlbmFibGVTZWFyY2hdPVwiZW5hYmxlU2VhcmNoXCJcblx0XHRbcXVlcnldPVwicXVlcnlcIlxuXHRcdChxdWVyeUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVGaWx0ZXJdPVwiZW5hYmxlRmlsdGVyXCJcblx0XHRbZW5hYmxlRmlsdGVyRGVza3RvcF09XCJlbmFibGVGaWx0ZXJEZXNrdG9wXCJcblx0XHRbc2VsZWN0ZWRGaWx0ZXJzQW1vdW50XT1cInNlbGVjdGVkRmlsdGVyc0Ftb3VudFwiXG5cdFx0W2ZpbHRlckJ1dHRvblRlbXBsYXRlXT1cImZpbHRlckJ1dHRvblRlbXBsYXRlXCJcblx0XHQoZmlsdGVyKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dCh0cnVlKVwiXG5cdFx0W2VuYWJsZUFjdGlvbl09XCJlbmFibGVBY3Rpb25cIlxuXHRcdFtjYW5Vc2VBY3Rpb25dPVwiYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG5cdFx0W2FjdGlvbkJ1dHRvblRlbXBsYXRlXT1cImFjdGlvbkJ1dHRvblRlbXBsYXRlXCJcblx0XHRbYWN0aW9uTG9hZGluZ109XCJhY3Rpb25CdXR0b25Mb2FkaW5nXCJcblx0XHRbYWN0aW9uVGV4dF09XCJhY3Rpb25CdXR0b25UZXh0XCJcblx0XHRbYWN0aW9uSWNvbl09XCJhY3Rpb25CdXR0b25JY29uXCJcblx0XHQoYWN0aW9uKT1cImFjdGlvbi5lbWl0KClcIlxuXHRcdFtpdGVtc1NlbGVjdGVkQW1vdW50XT1cInNlbGVjdGVkUm93cy5sZW5ndGhcIlxuXHRcdFtlbmFibGVFeHBvcnRdPVwiZW5hYmxlRXhwb3J0XCJcblx0XHQoZXhwb3J0KT1cImV4cG9ydC5lbWl0KClcIlxuXHRcdFtsb2FkaW5nXT1cImhlYWRlckxvYWRpbmdcIlxuXHQ+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdCpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIlxuXHRcdFx0PjwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZVwiXG5cdFx0XHQ+PC9uZy1jb250YWluZXI+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdDwvcC10YWJsZS1oZWFkZXI+XG5cblx0PGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtMVwiICpuZ0lmPVwiZW5hYmxlU2Nyb2xsOyBlbHNlIHJvd3NUZW1wbGF0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG92ZXJmbG93LXgtYXV0b1wiXG5cdFx0XHQjc2Nyb2xsQ29udGFpbmVyXG5cdFx0XHRbY2xhc3NdPVwiY24oXG5cdFx0XHRcdCdiZWZvcmU6YWJzb2x1dGUgYmVmb3JlOnRvcC0wIGJlZm9yZTpsZWZ0LTAgYmVmb3JlOnotWzFdJyxcblx0XHRcdFx0J2JlZm9yZTp3LVsxMCVdIGJlZm9yZTpoLWZ1bGwgYmVmb3JlOnRyYW5zaXRpb24tb3BhY2l0eScsXG5cdFx0XHRcdCdiZWZvcmU6YmctZ3JhZGllbnQtdG8tciBiZWZvcmU6ZnJvbS13aGl0ZSBiZWZvcmU6dmlhLXdoaXRlLzgwIGJlZm9yZTp0by10cmFuc3BhcmVudCcsXG5cblx0XHRcdFx0J2FmdGVyOmFic29sdXRlIGFmdGVyOnRvcC0wIGFmdGVyOnJpZ2h0LTAgYWZ0ZXI6ei1bMF0nLFxuXHRcdFx0XHQnYWZ0ZXI6dy1bMTAlXSBhZnRlcjpoLWZ1bGwgYWZ0ZXI6dHJhbnNpdGlvbi1vcGFjaXR5Jyxcblx0XHRcdFx0J2FmdGVyOmJnLWdyYWRpZW50LXRvLWwgYWZ0ZXI6ZnJvbS13aGl0ZSBhZnRlcjp2aWEtd2hpdGUvODAgYWZ0ZXI6dG8tdHJhbnNwYXJlbnQnLFxuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMCc6IHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYyxcblx0XHRcdFx0XHQnYWZ0ZXI6b3BhY2l0eS0wJzogcmVhY2hlZFNjcm9sbEVuZCQgfCBhc3luYyxcblx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdCdhZnRlcjpvcGFjaXR5LTEwMCc6IChyZWFjaGVkU2Nyb2xsRW5kJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG5cdFx0XHRcdH1cblx0XHRcdClcIlxuXHRcdFx0KHNjcm9sbCk9XCJvbkNvbnRhaW5lclhTY3JvbGwoJGV2ZW50KVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlRmxvYXRpbmdNZW51ICYmIGVuYWJsZVJvd1NlbGVjdGlvblwiPlxuXHRcdDxwLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyXG5cdFx0XHRbdXNlZEluVGFibGVdPVwidHJ1ZVwiXG5cdFx0XHRbY2xhc3NdPVwiXG5cdFx0XHRcdGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzKHtcblx0XHRcdFx0XHRoYXNGb290ZXI6IGVuYWJsZUZvb3RlciAmJiAoZm9vdGVySGlkZGVuJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG5cdFx0XHRcdFx0YWN0aXZlOiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMCxcblx0XHRcdFx0XHRzaG93bjogJGFueShmbG9hdGluZ01lbnVTaG93biQgfCBhc3luYylcblx0XHRcdFx0fSlcblx0XHRcdFwiXG5cdFx0XHRbYW1vdW50XT1cImZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dFwiXG5cdFx0XHRbZW5hYmxlQW1vdW50U2VsZWN0ZWRdPVwiISEocm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jKT8ubGVuZ3RoXCJcblx0XHRcdChjbG9zZSk9XCJfc2VsZWN0QWxsQ2hhbmdlKG51bGwsIGZhbHNlKVwiXG5cdFx0PlxuXHRcdFx0PHAtZmxvYXRpbmctbWVudS1pdGVtXG5cdFx0XHRcdCpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHRcdFtkaXNhYmxlZF09XCJcblx0XHRcdFx0XHQoYWN0aW9uWyd0eXBlJ10gPT09ICdzaW5nbGUnICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAxKSB8fFxuXHRcdFx0XHRcdGFjdGlvblsnZGlzYWJsZWQnXVxuXHRcdFx0XHRcIlxuXHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb25bJ2xvYWRpbmcnXVwiXG5cdFx0XHRcdFtpY29uXT1cImFjdGlvblsnaWNvbiddXCJcblx0XHRcdFx0W2ljb25Sb3RhdGVdPVwiYWN0aW9uWydpY29uUm90YXRlJ11cIlxuXHRcdFx0XHRbaWNvbkZsaXBdPVwiYWN0aW9uWydpY29uRmxpcCddXCJcblx0XHRcdFx0KGNsaWNrKT1cIl9yb3dBY3Rpb25DbGljayhhY3Rpb24pXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgYWN0aW9uWydsYWJlbCddIH19XG5cdFx0XHQ8L3AtZmxvYXRpbmctbWVudS1pdGVtPlxuXHRcdDwvcC1mbG9hdGluZy1tZW51LWNvbnRhaW5lcj5cblx0PC9uZy1jb250YWluZXI+XG5cblx0PHAtdGFibGUtZm9vdGVyXG5cdFx0Km5nSWY9XCJlbmFibGVGb290ZXJcIlxuXHRcdFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuXHRcdFtlbmFibGVQYWdpbmF0aW9uU2l6ZV09XCJlbmFibGVQYWdpbmF0aW9uU2l6ZVwiXG5cdFx0W3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcblx0XHRbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG5cdFx0KHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0W2VuYWJsZVBhZ2luYXRpb25QYWdlc109XCJlbmFibGVQYWdpbmF0aW9uUGFnZXNcIlxuXHRcdFtwYWdlXT1cInBhZ2VcIlxuXHRcdFt0b3RhbF09XCJ0b3RhbFwiXG5cdFx0KHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuXHRcdFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuXHRcdChoaWRkZW5DaGFuZ2UpPVwiZm9vdGVySGlkZGVuJC5uZXh0KCRldmVudC5kZXRhaWwpXCJcblx0PjwvcC10YWJsZS1mb290ZXI+XG48L3AtdGFibGUtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Jvd3NUZW1wbGF0ZT5cblx0PHAtdGFibGUtcm93IHZhcmlhbnQ9XCJoZWFkZXJcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFt2YWx1ZV09XCJjb2wubmFtZVwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJoZWFkZXJcIlxuXHRcdFx0XHRbaW5kZXhdPVwiaW5kZXhcIlxuXHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFwiXG5cdFx0XHQ+PC9wLXRhYmxlLWNlbGwtbmd4PlxuXHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHQ8cC1jaGVja2JveFxuXHRcdFx0XHRcdChjaGVja2VkQ2hhbmdlKT1cIl9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zQWxsKClcIlxuXHRcdFx0XHRcdFtpbmRldGVybWluYXRlXT1cIl9zZWxlY3Rpb25JbmRldGVybWluYXRlKClcIlxuXHRcdFx0XHRcdFtjbGFzcy5vcGFjaXR5LTBdPVwicm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZFwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cInJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWRcIlxuXHRcdFx0XHQ+PC9wLWNoZWNrYm94PlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9wLXRhYmxlLXJvdz5cblxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgZmxleC1jb2xcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50VGVtcGxhdGVcIj5cblx0XHRcdDxwLXRhYmxlLXJvd1xuXHRcdFx0XHQqbmdGb3I9XCJsZXQgciBvZiBsb2FkaW5nUm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuXHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwibG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8cC1sb2FkZXJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoLTYgdy02IHJvdW5kZWRcIlxuXHRcdFx0XHRcdFx0PjwvcC1sb2FkZXI+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VkSXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cblx0XHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcblx0XHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdFx0XHQoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdHBhcnNlUm93QWN0aW9uc1Jvdyhcblx0XHRcdFx0XHRcdFx0XHRyb3dBY3Rpb25zUm93JCB8IGFzeW5jLFxuXHRcdFx0XHRcdFx0XHRcdHJvd0luZGV4XG5cdFx0XHRcdFx0XHRcdCkgYXMgcm93QWN0aW9uc1Jvd1xuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFx0XHRbZGVmaW5pdGlvbl09XCJjb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFtpdGVtXT1cIml0ZW1cIlxuXHRcdFx0XHRcdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFx0XHRcdFx0W3Jvd0luZGV4XT1cInJvd0luZGV4XCJcblx0XHRcdFx0XHRcdFx0XHRbdGVtcGxhdGVdPVwiY29sLnRlbXBsYXRlXCJcblx0XHRcdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblxuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdFx0PHAtY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdChjaGVja2VkQ2hhbmdlKT1cIl9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHQ+PC9wLWNoZWNrYm94PlxuXHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHRcdDxwLXRhYmxlLXJvdy1hY3Rpb25zLWNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cIiEhcm93QWN0aW9uc1Jvdz8ubGVuZ3RoICYmICEoaXNNb2JpbGUkIHwgYXN5bmMpXCJcblx0XHRcdFx0XHRcdFx0c2xvdD1cImFjdGlvbnNcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc1Jvd1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxwLXRvb2x0aXBcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5zaG93RnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGFjdGlvbi5zaG93RnVuY3Rpb24ocGFyc2VkSXRlbXNbcm93SW5kZXhdKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFtjb250ZW50XT1cImFjdGlvblsnbGFiZWwnXVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtaXMtYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzbG90PVwidHJpZ2dlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtpY29uXT1cImFjdGlvblsnaWNvbiddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25Sb3RhdGVdPVwiYWN0aW9uWydpY29uUm90YXRlJ11cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uRmxpcD1cImFjdGlvbi5pY29uRmxpcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtsb2FkaW5nXT1cImFjdGlvblsnbG9hZGluZyddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImFjdGlvblsnZGlzYWJsZWQnXVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtyb3V0ZXJMaW5rXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5yb3V0ZXJMaW5rXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChfZ2V0QWN0aW9uUm91dGVyTGluayhhY3Rpb24ucm91dGVyTGluaywgcm93SW5kZXgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3F1ZXJ5UGFyYW1zXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5xdWVyeVBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoX2dldEFjdGlvblF1ZXJ5UGFyYW1zKGFjdGlvbi5xdWVyeVBhcmFtcywgcm93SW5kZXgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiX3Jvd0FjdGlvbkNsaWNrKGFjdGlvbiwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRcdD48L3AtYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdDwvcC10b29sdGlwPlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvcC10YWJsZS1yb3ctYWN0aW9ucy1jb250YWluZXI+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDwvcC10YWJsZS1yb3c+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCI+XG5cdDxwLW1vZGFsXG5cdFx0W2hlYWRlcl09XCJmaWx0ZXJNb2RhbEhlYWRlclRleHRcIlxuXHRcdFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG5cdFx0KGNsb3NlZCk9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpXCJcblx0PlxuXHRcdDxkaXZcblx0XHRcdHNsb3Q9XCJjb250ZW50XCJcblx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNlwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2XG5cdFx0XHRzbG90PVwiZm9vdGVyXCJcblx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcblx0XHQ+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Km5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZVwiXG5cdFx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmhpZGRlblwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQodHJ1ZSlcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHQqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcblx0XHRcdFx0Y2xhc3M9XCJoaWRkZW4gdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpmbGV4XCJcblx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Y2xhc3M9XCJtbC1hdXRvIHctZnVsbCB0YWJsZXQ6dy1hdXRvXCJcblx0XHRcdFx0aWNvbj1cImNoZWNrbWFya1wiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxTYXZlKClcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFNhdmVUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L3AtbW9kYWw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlVGVtcGxhdGU+XG5cdDxwLWVtcHR5LXN0YXRlXG5cdFx0Km5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuXHRcdGNsYXNzPVwibXktMTYgc2VsZi1jZW50ZXJcIlxuXHRcdFtpbGx1c3RyYXRpb25dPVwiZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uXCJcblx0XHRbaGVhZGVyXT1cImVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlclwiXG5cdFx0W2NvbnRlbnRdPVwiZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudFwiXG5cdD48L3AtZW1wdHktc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cblx0PHAtZW1wdHktc3RhdGVcblx0XHRjbGFzcz1cIm15LTE2IHNlbGYtY2VudGVyXCJcblx0XHRbaWxsdXN0cmF0aW9uXT1cImVtcHR5U3RhdGVJbGx1c3RyYXRpb25cIlxuXHRcdFtoZWFkZXJdPVwiZW1wdHlTdGF0ZUhlYWRlclwiXG5cdFx0W2NvbnRlbnRdPVwiZW1wdHlTdGF0ZUNvbnRlbnRcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZW5hYmxlRW1wdHlTdGF0ZUFjdGlvblwiXG5cdFx0W2FjdGlvblRleHRdPVwiZW1wdHlTdGF0ZUFjdGlvblwiXG5cdFx0W2FjdGlvbkljb25dPVwiZW1wdHlTdGF0ZUFjdGlvbkljb25cIlxuXHRcdChhY3Rpb24pPVwiZW1wdHlTdGF0ZUNsaWNrZWQoKVwiXG5cdD48L3AtZW1wdHktc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
944
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixXQUFXLEVBQ1IsWUFBWSxFQUNmLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTixRQUFRLEVBR1Isc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUN2QixFQUFFLEdBQ0wsTUFBTSxpQkFBaUIsQ0FBQztBQU16QixPQUFPLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNOLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIseUJBQXlCLEdBQ3pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFFTixjQUFjLEdBR2QsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUs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VTtzQkFEYixlQUFlO3VCQUFDLGNBQWM7Z0JBU3RCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBMEVQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT3pDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVNUMsS0FBSztzQkFESixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0QmluZGluZyxcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkluaXQsXG5cdE91dHB1dCxcblx0UXVlcnlMaXN0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG5cdGlzTW9iaWxlLFxuXHRRdWlja0ZpbHRlcixcblx0Um93Q2xpY2tFdmVudCxcblx0dGFibGVDb2x1bVNpemVzT3B0aW9ucyxcblx0ZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3MsXG4gICAgY24sXG59IGZyb20gJ0BwYXBlcmxlc3MvY29yZSc7XG5pbXBvcnQge1xuXHRJY29uVmFyaWFudCxcblx0SWxsdXN0cmF0aW9uVmFyaWFudCxcblx0VGFibGVDb2x1bW5TaXplcyxcbn0gZnJvbSAnQHBhcGVybGVzcy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuXHRCZWhhdmlvclN1YmplY3QsXG5cdGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuXHRmaWx0ZXIsXG5cdFN1YnNjcmlwdGlvbixcblx0dGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRUYWJsZUN1c3RvbUFjdGlvbnNEaXJlY3RpdmUsXG5cdFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLFxuXHRUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0QXN5bmNJdGVtLFxuXHRUYWJsZVJvd0FjdGlvbixcblx0VGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0VGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxufSBmcm9tICcuLi90YWJsZS1yb3ctYWN0aW9uL3RhYmxlLXJvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRTaXplLCBkZWZhdWx0U2l6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICcuLi90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBUYWJsZVJvdyB9IGZyb20gJ3Byb2plY3RzL3BhcGVybGVzcy9zcmMvcHVibGljLWFwaSc7XG5cbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3AtdGFibGUtbmd4Jyxcblx0dGVtcGxhdGVVcmw6ICd0YWJsZS5jb21wb25lbnQuaHRtbCcsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblx0QEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzTmFtZSA9ICdmbGV4IGZsZXgtY29sIHotMCc7XG5cblx0LyoqXG5cdCAqIFRoZSBpdGVtcyB0byBiZSBmZWQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBpdGVtcyE6IHN0cmluZyB8IGFueVtdO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgZGF0YSBpcyBsb2FkaW5nXG5cdCAqL1xuXHRASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgaGVhZGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGhlYWRlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBmb290ZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuXHQgKi9cblx0QElucHV0KCkgZm9vdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGxvYWRpbmcgcm93cyB0byBzaG93XG5cdCAqL1xuXHRASW5wdXQoKSBhbW91bnRPZkxvYWRpbmdSb3dzOiBudW1iZXIgPSA2O1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNlbGVjdGlvblxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQSBsaW1pdCB0byB0aGUgYW1vdW50IG9mIHJvd3MgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHJvd1NlbGVjdGlvbkxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcm93IGNsaWNraW5nXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVSb3dDbGljazogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGNhbiBiZSBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgY2FuU2VsZWN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgdGhlIGZsb2F0aW5nIG1lbnVcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZsb2F0aW5nTWVudTogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBmbG9hdGluZyBtZW51IGFtb3VudCBpdGVtIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dDogc3RyaW5nID0gJzAgaXRlbXMgc2VsZWN0ZWQnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIGFtb3VudCBzZWxlY3RlZCBpdGVtIGluIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZmxvYXRpbmcgbWVudSBoYXMgYmVlbiBzaG93biBhdGxlYXN0IG9uY2Vcblx0ICovXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVTaG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEhFQURFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcblx0ICovXG5cdEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuXHQgKi9cblx0QElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uIG9uIGRlc2t0b3Bcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlckRlc2t0b3A6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGxvYWRpbmdcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFjdGlvbiBidXR0b24gaWNvblxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSAncGVuY2lsJztcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGVuYWJsZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYWN0aW9uIGJ1dHRvbiB0ZXh0IGlmIGNoYW5nZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGFjdGlvbiBidXR0b24gdGV4dFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHF1aWNrRmlsdGVyOiBFdmVudEVtaXR0ZXI8UXVpY2tGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBxdWVyeSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBmaWx0ZXIgYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBmaWx0ZXI6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgYWN0aW9uOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEZPT1RFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZm9vdGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb24gc2l6ZSBzZWxlY3Rcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb25TaXplOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBwYWdpbmF0aW9uIHBhZ2VzXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVQYWdpbmF0aW9uUGFnZXM6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIGV4cG9ydFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZTogbnVtYmVyID0gMTtcblxuXHQvKipcblx0ICogVGhlIHRvdGFsIGFtb3VudCBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgdG90YWwhOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBpdGVtcyBwZXIgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IGRlZmF1bHRTaXplO1xuXG5cdC8qKlxuXHQgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHBhZ2Ugc2l6ZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGRlZmF1bHRTaXplT3B0aW9ucztcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIGV4cG9ydDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBoaWRlIHdoZW4gdGhlcmUgaXMgb25seSAxIHBhZ2UgYXZhaWxhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlT25TaW5nbGVQYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKiBFbXB0eSBzdGF0ZSBzdGFydCAqL1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlVHlwZTogJ25vX2ZpbHRlcicgfCAnZmlsdGVyZWQnID0gJ25vX2ZpbHRlcic7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUlsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9ICd0YWJsZSc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVIZWFkZXIhOiBzdHJpbmc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVDb250ZW50ITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQWN0aW9uITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQWN0aW9uSWNvbjogSWNvblZhcmlhbnQgPSAncGx1cyc7XG5cblx0QElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gJ3NlYXJjaCc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCE6IHN0cmluZztcblxuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNjcm9sbGluZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGRyZW4oUFRhYmxlUm93LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVSb3dzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8UFRhYmxlUm93Pj47XG5cdEBWaWV3Q2hpbGRyZW4oVGFibGVDZWxsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVDZWxscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFRhYmxlQ2VsbD4+O1xuXHRAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuXHRwdWJsaWMgcmVhY2hlZFNjcm9sbFN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG5cdHB1YmxpYyByZWFjaGVkU2Nyb2xsRW5kJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXHRwcml2YXRlIF90b3RhbFdpZHRoID0gMDtcblx0cHJpdmF0ZSBfY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dD86IG51bWJlcjtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIGVtcHR5IHN0YXRlIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBlbXB0eVN0YXRlQWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiBFbXB0eSBzdGF0ZSBlbmQgKi9cblxuXHQvKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2hhZG93IG9yIG5vdFxuXHQgKi9cblx0QElucHV0KCkgc2hhZG93OiBib29sZWFuID0gdHJ1ZTtcblxuXHRwdWJsaWMgY29sdW1uczogYW55W10gPSBbXTtcblx0cHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0fSk7XG5cdHByaXZhdGUgX2N0cmxEb3duID0gZmFsc2U7XG5cblx0Ly8gQW5ndWxhciBzdHVmZlxuXHQvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG5cdEBDb250ZW50Q2hpbGQoVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjdXN0b20gYWN0aW9ucyB0ZW1wbGF0ZVxuXHRAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjb2x1bW4gdGVtcGxhdGVzXG5cdHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblxuXHRAQ29udGVudENoaWxkcmVuKFRhYmxlQ29sdW1uKVxuXHRzZXQgY29sdW1uRGVmaW5pdGlvbnModjogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPikge1xuXHRcdHRoaXMuX2NvbHVtbkRlZmluaXRpb25zID0gdjtcblx0XHR0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcblx0fVxuXHRnZXQgY29sdW1uRGVmaW5pdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zO1xuXHR9XG5cblx0Ly8gZmlsdGVyIG1vZGFsXG5cdEBDb250ZW50Q2hpbGQoVGFibGVGaWx0ZXJNb2RhbERpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGZpbHRlck1vZGFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cblx0cHVibGljIGZpbHRlck1vZGFsU2hvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvLyByb3cgYWN0aW9ucyB0ZW1wbGF0ZXNcblx0cHJpdmF0ZSBfcm93QWN0aW9ucyE6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj47XG5cdHByaXZhdGUgX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVSb3dBY3Rpb24pXG5cdHNldCByb3dBY3Rpb25zKHY6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj4pIHtcblx0XHR0aGlzLl9yb3dBY3Rpb25zID0gdjtcblx0XHR0aGlzLl9zZXRSb3dTZWxlY3Rpb25EYXRhKCk7XG5cdH1cblx0Z2V0IHJvd0FjdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlUm93QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvd0FjdGlvbnM7XG5cdH1cblxuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbEhlYWRlclRleHQ6IHN0cmluZyA9ICdGaWx0ZXJzJztcblx0QElucHV0KCkgZmlsdGVyTW9kYWxTYXZlVGV4dDogc3RyaW5nID0gJ1NhdmUnO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9ICdDYW5jZWwnO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFJlc2V0VGV4dDogc3RyaW5nID0gJ1Jlc2V0IGZpbHRlcnMnO1xuXG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0OiBib29sZWFuID0gZmFsc2U7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlOiBib29sZWFuID0gZmFsc2U7XG5cblx0QE91dHB1dCgpIGZpbHRlck1vZGFsU2hvdzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxTYXZlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFJlc2V0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0cHVibGljIHJvd0FjdGlvbnNSb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cdHB1YmxpYyByb3dBY3Rpb25zRmxvYXRpbmdBbGwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cdHB1YmxpYyByb3dBY3Rpb25zRmxvYXRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvd0FjdGlvbltdPihbXSk7XG5cblx0cHVibGljIGlzTW9iaWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaXNNb2JpbGUoKSk7XG5cblx0cHVibGljIGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzID0gZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3M7XG5cblx0cHJpdmF0ZSBfcmVzaXplVGltZW91dDogdW5rbm93bjtcblx0cHJpdmF0ZSBfaW5wdXRFbmFibGVSb3dTZWxlY3Rpb246IGJvb2xlYW4gPSB0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbjtcblx0cHJpdmF0ZSBfaW5wdXRSb3dTZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdDtcblxuXHRwdWJsaWMgZm9vdGVySGlkZGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG5cdHB1YmxpYyBjbiA9IGNuO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5fcGFyc2VJdGVtcyh0aGlzLml0ZW1zKTtcblxuXHRcdHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRcdGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckXG5cdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcblx0XHRcdC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUl0ZW1zKGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRcdGxlbmd0aDogY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddLmN1cnJlbnRWYWx1ZSxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gZmFsc2U7XG5cdFx0aWYgKGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbiA9XG5cdFx0XHRcdGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydyb3dTZWxlY3Rpb25MaW1pdCddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0ID0gY2hhbmdlc1sncm93U2VsZWN0aW9uTGltaXQnXS5jdXJyZW50VmFsdWU7XG5cdFx0XHRjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSB8fCBjaGFuZ2VzWydzZWxlY3RlZFJvd3MnXSkge1xuXHRcdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHRcdH1cblxuXHRcdGlmKGNoYW5nZXNbJ2VuYWJsZVNjcm9sbCddPy5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZighdGhpcy5lbmFibGVTY3JvbGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuXHRrZXlEb3duKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcblx0a2V5VXAoeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG5cdFx0aWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcblx0dmlzaWJpbGl0eUNoYW5nZSgpIHtcblx0XHRpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQoZGV0YWlsKTtcblx0fVxuXG5cdG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG5cdFx0dGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5wYWdlID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvbkZpbHRlck1vZGFsU2F2ZSgpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGVtcHR5U3RhdGVDbGlja2VkKCkge1xuXHRcdGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuXHR9XG5cblx0cGFyc2VSb3dBY3Rpb25zUm93KGFjdGlvbnM6IFRhYmxlUm93QWN0aW9uW10gfCBudWxsLCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCFhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRhID0+ICFhLnNob3dGdW5jdGlvbiB8fCBhLnNob3dGdW5jdGlvbih0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XSlcblx0XHQpO1xuXHR9XG5cblx0b25Db250YWluZXJYU2Nyb2xsKGV2OiBhbnkpIHtcblx0XHRpZighdGhpcy5lbmFibGVTY3JvbGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVTY3JvbGxQb3NpdGlvbihldik7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZUl0ZW1zKGl0ZW1zOiBzdHJpbmcgfCBhbnlbXSkge1xuXHRcdGlmICghaXRlbXMpIHtcblx0XHRcdHRoaXMucGFyc2VkSXRlbXMgPSBbXTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcblx0XHRcdHRoaXMucGFyc2VkSXRlbXMgPSBpdGVtcztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gSlNPTi5wYXJzZShpdGVtcyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZW5lcmF0ZUNvbHVtbnMoKSB7XG5cdFx0bGV0IGRlZmluaXRpb25zQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZmluaXRpb25zKSBhcyBUYWJsZUNvbHVtbltdO1xuXG5cdFx0ZGVmaW5pdGlvbnNBcnJheSA9IHRoaXMuX3BhcnNlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnNBcnJheSk7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBkZWZpbml0aW9uc0FycmF5O1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveERpc2FibGVkKGl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IHNlbGVjdGlvbkNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQodGhpcy5jYW5TZWxlY3RLZXkgJiYgIWl0ZW1bdGhpcy5jYW5TZWxlY3RLZXldKSB8fFxuXHRcdFx0KHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQhc2VsZWN0aW9uQ29udGFpbnMgJiZcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0KVxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQ6IGFueSwgZm9yY2VWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBmb3JjZVZhbHVlID09PSB1bmRlZmluZWQgPyAkZXZlbnQuZGV0YWlsIDogZm9yY2VWYWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0Y29uc3QgdG9BZGQgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0XHRpZiAodGhpcy5jYW5TZWxlY3RLZXkgJiYgIXJvd1t0aGlzLmNhblNlbGVjdEtleV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGkpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b0FkZC5wdXNoKHJvdyk7XG5cdFx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggKyB0b0FkZC5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIC4uLnRvQWRkXTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1tpXTtcblx0XHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXMuZmluZChcblx0XHRcdFx0ZCA9PiB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShkLCBpKSA9PT0gdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUodmFsdWUsIGkpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXJvdykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveENoYW5nZSh0YXJnZXQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQpO1xuXHRcdGlmIChcblx0XHRcdHZhbHVlICYmXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4T2ZUb1JlbW92ZSA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaW5kZXgsIHRydWUpO1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG5cdFx0c2VsZWN0aW9uLnNwbGljZShpbmRleE9mVG9SZW1vdmUsIDEpO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHRcdHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U2VsZWN0aW9uVmFsdWUocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMocm93OiBhbnksIGluZGV4OiBudW1iZXIsIHJldHVybkluZGV4ID0gZmFsc2UpOiBhbnkge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuXHRcdFx0aXRlbSA9PlxuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShyb3csIGluZGV4KSA9PT1cblx0XHRcdFx0dGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoaXRlbSwgaW5kZXgpXG5cdFx0KTtcblx0XHRyZXR1cm4gIXJldHVybkluZGV4ID8gcmV0dXJuVmFsdWUgPj0gMCA6IHJldHVyblZhbHVlO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcblx0XHRsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuXHRcdGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuXHRcdFx0aWYgKCFjb250YWlucykge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG5cdFx0aWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGggfHwgIXRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBjb250YWluc0NvdW50ID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cblx0XHRcdGlmIChjb250YWlucykge1xuXHRcdFx0XHRjb250YWluc0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0cHVibGljIF9yb3dDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0aWYgKFxuXHRcdFx0dGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fFxuXHRcdFx0KHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlID09PSAnY2hlY2tib3gnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5fZmluZFJvdyh0YXJnZXQpO1xuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuX2ZpbmRSb3dBY3Rpb24odGFyZ2V0KTtcblxuXHRcdGlmIChhY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVSb3dDbGljaykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXHRcdFx0dGhpcy5yb3dDbGljay5lbWl0KHtcblx0XHRcdFx0aXRlbSxcblx0XHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNoZWNrYm94ID0gcm93Py5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuXHRcdGlmICghY2hlY2tib3gpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XG5cdFx0dGhpcy5fY2hlY2tib3hDaGFuZ2UoY2hlY2tib3gsIGluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUm91dGVyTGluayhcblx0XHRyb3V0ZXJMaW5rOiBUYWJsZVJvd0FjdGlvblJvdXRlckxpbmssXG5cdFx0cm93SW5kZXg6IG51bWJlclxuXHQpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgYW55W10+IHwgQXN5bmNJdGVtPHN0cmluZyB8IGFueVtdPiB7XG5cdFx0aWYgKHR5cGVvZiByb3V0ZXJMaW5rID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUm91dGVyTGluayhyb3V0ZXJMaW5rKGl0ZW0pLCByb3dJbmRleCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByb3V0ZXJMaW5rID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHJvdXRlckxpbmspKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdChyb3V0ZXJMaW5rKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm91dGVyTGluaztcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUXVlcnlQYXJhbXMoXG5cdFx0cXVlcnlQYXJhbXM6IFRhYmxlUm93QWN0aW9uUXVlcnlQYXJhbXMsXG5cdFx0cm93SW5kZXg6IG51bWJlclxuXHQpOiBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPiB8IEFzeW5jSXRlbTxQYXJhbXM+IHtcblx0XHRpZiAodHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMoaXRlbSksIHJvd0luZGV4KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlQYXJhbXMgaW5zdGFuY2VvZiBPYmplY3QgJiYgcXVlcnlQYXJhbXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIG5ldyBCZWhhdmlvclN1YmplY3QocXVlcnlQYXJhbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBxdWVyeVBhcmFtcyBhcyBBc3luY0l0ZW08UGFyYW1zPjtcblx0fVxuXG5cdHB1YmxpYyBfcm93QWN0aW9uQ2xpY2soYWN0aW9uOiBUYWJsZVJvd0FjdGlvbiwgcm93SW5kZXg/OiBudW1iZXIpIHtcblx0XHRpZiAoYWN0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGlvbi5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFhY3Rpb24uYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnR5cGUgPT09ICdtdWx0aScgfHxcblx0XHRcdChhY3Rpb24udHlwZSA9PT0gJ2JvdGgnICYmIHJvd0luZGV4ID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRhY3Rpb24uYWN0aW9uLmVtaXQoe1xuXHRcdFx0XHRpdGVtczogdGhpcy5zZWxlY3RlZFJvd3MsXG5cdFx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdFx0XHRjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRhY3Rpb24ucm91dGVyTGluayB8fFxuXHRcdFx0KEFycmF5LmlzQXJyYXkoYWN0aW9uLnJvdXRlckxpbmspICYmIGFjdGlvbi5yb3V0ZXJMaW5rLmxlbmd0aClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtID1cblx0XHRcdHJvd0luZGV4ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XVxuXHRcdFx0XHQ6IHRoaXMuc2VsZWN0ZWRSb3dzWzBdO1xuXHRcdGFjdGlvbi5hY3Rpb24uZW1pdCh7XG5cdFx0XHRpdGVtLFxuXHRcdFx0bXVsdGk6IGZhbHNlLFxuXHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvdyhlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0aWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09IG51bGwgJiZcblx0XHRcdGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gJ2ZhbHNlJ1xuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3dBY3Rpb24oZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2V0Um93U2VsZWN0aW9uRGF0YSgpIHtcblx0XHRpZiAodGhpcy5fcmVzaXplVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQgYXMgbnVtYmVyKTtcblx0XHR9XG5cblx0XHQvLyBXZSBhZGQgYSB0aW1lb3V0IGhlcmUgYmVjYXVzZSBpdCdzIGEgbG90IGVhc2llciBvbiB0aGUgbWFjaGluZSB0byBkbyB0aGVzZSB3aGVuIHNvbWVvbmUgaXMgZG9uZVxuXHRcdC8vIHJlc2l6aW5nIGFuZCBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZWlyIGJyb3dzZXJcblx0XHR0aGlzLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtb2JpbGUgPSBpc01vYmlsZSgpO1xuXHRcdFx0dGhpcy5pc01vYmlsZSQubmV4dChtb2JpbGUpO1xuXG5cdFx0XHRjb25zdCBhY3Rpb25zID0gQXJyYXkuZnJvbSh0aGlzLl9yb3dBY3Rpb25zKSBhcyBUYWJsZVJvd0FjdGlvbltdO1xuXG5cdFx0XHRpZiAodGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAobGV0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucykge1xuXHRcdFx0XHRcdHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zID0gYWN0aW9ucy5tYXAoYWN0aW9uID0+XG5cdFx0XHRcdGFjdGlvbi5fbG9hZGluZ0NoYW5nZWRcblx0XHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcblx0XHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyB3ZSBoYWNrIHRoaXMgdG8gYW55W10gdG8gbWFrZSBpdCB3b3JrLi5cblx0XHRcdGNvbnN0IHJvd0FjdGlvbnNSb3cgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0YSA9PiBhLnR5cGUgPT09ICdib3RoJyB8fCBhLnR5cGUgPT09ICdzaW5nbGUnXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgcm93QWN0aW9uc0Zsb2F0aW5nID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdGEgPT5cblx0XHRcdFx0XHQodGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb24gJiZcblx0XHRcdFx0XHRcdChhLnR5cGUgPT09ICdib3RoJyB8fCBhLnR5cGUgPT09ICdtdWx0aScpKSB8fFxuXHRcdFx0XHRcdChtb2JpbGUgJiYgYS50eXBlID09PSAnc2luZ2xlJyAmJiAhYS5yb3V0ZXJMaW5rKVxuXHRcdFx0KTtcblxuXHRcdFx0bGV0IHJvd1NlbGVjdGlvbkxpbWl0ID0gdGhpcy5faW5wdXRSb3dTZWxlY3Rpb25MaW1pdDtcblx0XHRcdGlmIChcblx0XHRcdFx0bW9iaWxlICYmIC8vIHdlJ3JlIG1vYmlsZVxuXHRcdFx0XHRyb3dBY3Rpb25zRmxvYXRpbmc/Lmxlbmd0aCAmJiAvLyB3ZSBoYXZlIGF0bGVhc3QgMSBpdGVtIGluIF9yb3dBY3Rpb25zRmxvYXRpbmdcblx0XHRcdFx0KChyb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB8fFxuXHRcdFx0XHRcdCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbilcblx0XHRcdCkge1xuXHRcdFx0XHRyb3dTZWxlY3Rpb25MaW1pdCA9IDE7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgPSByb3dTZWxlY3Rpb25MaW1pdDtcblxuXHRcdFx0bGV0IGVuYWJsZVJvd1NlbGVjdGlvbiA9IHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtb2JpbGUgJiYgLy8gd2UncmUgbW9iaWxlXG5cdFx0XHRcdHJvd0FjdGlvbnNGbG9hdGluZz8ubGVuZ3RoICYmIC8vIHdlIGhhdmUgYXRsZWFzdCAxIGl0ZW0gaW4gX3Jvd0FjdGlvbnNGbG9hdGluZ1xuXHRcdFx0XHQhZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHQpIHtcblx0XHRcdFx0ZW5hYmxlUm93U2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZW5hYmxlUm93U2VsZWN0aW9uID0gZW5hYmxlUm93U2VsZWN0aW9uO1xuXG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNSb3ckLm5leHQocm93QWN0aW9uc1Jvdyk7XG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZ0FsbCQubmV4dChyb3dBY3Rpb25zRmxvYXRpbmcpO1xuXG5cdFx0XHR0aGlzLmZsb2F0aW5nTWVudVNob3duJFxuXHRcdFx0XHQucGlwZShcblx0XHRcdFx0XHR0YWtlKDEpLFxuXHRcdFx0XHRcdGZpbHRlcih2ID0+ICEhdilcblx0XHRcdFx0KVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKSk7XG5cdFx0fSwgMjAwKTtcblx0fVxuXG5cdHByaXZhdGUgX3Nob3dGbG9hdGluZ01lbnUoKSB7XG5cdFx0dGhpcy5yb3dBY3Rpb25zRmxvYXRpbmdBbGwkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGFjdGlvbnMgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ID09PSAxICYmXG5cdFx0XHRcdGFjdGlvbnMuZmluZEluZGV4KFxuXHRcdFx0XHRcdGEgPT4gKGEudHlwZSA9PT0gJ3NpbmdsZScgfHwgYS50eXBlID09PSAnYm90aCcpICYmIGEuc2hvd0Z1bmN0aW9uXG5cdFx0XHRcdCkgPj0gMFxuXHRcdFx0KSB7XG5cdFx0XHRcdGFjdGlvbnMgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0XHRhID0+XG5cdFx0XHRcdFx0XHRhLnR5cGUgPT09ICdtdWx0aScgfHxcblx0XHRcdFx0XHRcdCFhLnNob3dGdW5jdGlvbiB8fFxuXHRcdFx0XHRcdFx0YS5zaG93RnVuY3Rpb24odGhpcy5zZWxlY3RlZFJvd3NbMF0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nJC5uZXh0KGFjdGlvbnMpO1xuXHRcdFx0dGhpcy5mbG9hdGluZ01lbnVTaG93biQubmV4dCh0cnVlKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3BhcnNlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnNBcnJheTogVGFibGVDb2x1bW5bXSkge1xuXHRcdHJldHVybiBkZWZpbml0aW9uc0FycmF5Lm1hcChkZWZpbml0aW9uID0+IHtcblx0XHRcdGRlZmluaXRpb24gPSB0aGlzLl9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uKTtcblx0XHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VEZWZpbml0aW9uU2l6ZXMoZGVmaW5pdGlvbjogVGFibGVDb2x1bW4pIHtcblx0XHRjb25zdCBkZWZpbml0aW9uQW55ID0gZGVmaW5pdGlvbiBhcyBhbnk7XG5cdFx0bGV0IHBhcnNlZFNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiAnZnVsbCcgfTtcblxuXHRcdGZvciAoY29uc3QgW2luZGV4LCBzaXplXSBvZiB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2hpZGRlbicgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2Z1bGwnIHx8XG5cdFx0XHRcdHR5cGVvZiBkZWZpbml0aW9uQW55LnNpemVzID09PSAnbnVtYmVyJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHBhcnNlZFNpemVzW3NpemVdID1cblx0XHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgPyAnZnVsbCcgOiBkZWZpbml0aW9uQW55LnNpemVzO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cGFyc2VkU2l6ZXNbc2l6ZV0gPVxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzW3NpemVdID8/XG5cdFx0XHRcdHBhcnNlZFNpemVzW3RhYmxlQ29sdW1TaXplc09wdGlvbnNbaW5kZXggLSAxXV07XG5cdFx0fVxuXG5cdFx0ZGVmaW5pdGlvbi5wYXJzZWRTaXplcyA9IHBhcnNlZFNpemVzO1xuXHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkgIHtcblx0XHRpZighdGhpcy50YWJsZUNlbGxzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQpO1xuXHRcdFx0dGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzVGltZW91dCA9IDA7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm93cyA9IHRoaXMudGFibGVSb3dzLm1hcChjID0+IGMubmF0aXZlRWxlbWVudCBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50KTtcblx0XHRjb25zdCBjZWxscyA9IHRoaXMudGFibGVDZWxscy5tYXAoYyA9PiBjLm5hdGl2ZUVsZW1lbnQgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudCk7XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cyk7XG5cblx0XHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRcdGZvcihjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG5cdFx0XHRcdGlmKGNlbGwuc3R5bGUud2lkdGg/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdGNlbGwuc3R5bGUud2lkdGggPSAnJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByb21pc2VzLnB1c2gobmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByZWN0ID0gY2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHRjZWxsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgd2lkdGg6ICR7cmVjdC53aWR0aH1weCAhaW1wb3J0YW50YCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9LCAxMDApKSlcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cywgJ21pbi1jb250ZW50Jyk7XG5cblx0XHRcdHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oKTtcblx0XHR9LCAyMDApXG5cdH1cblxuXHRwcml2YXRlIF9zZXRSb3dzV2lkdGgocm93czogSFRNTEVsZW1lbnRbXSwgdmFsdWU6ICdtaW4tY29udGVudCcgfCBudWxsID0gbnVsbCkge1xuXHRcdGZvcihsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCByb3cgPSByb3dzW2ldO1xuXG5cdFx0XHRjb25zdCBzaGFkb3cgPSByb3cuc2hhZG93Um9vdDtcblx0XHRcdGlmKCFzaGFkb3cpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpcnN0RGl2ID0gc2hhZG93LnF1ZXJ5U2VsZWN0b3IoJyo6bnRoLWNoaWxkKDEpJyk7XG5cdFx0XHRpZighZmlyc3REaXYpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlY29uZERpdiA9IGZpcnN0RGl2LnF1ZXJ5U2VsZWN0b3IoJyo6bnRoLWNoaWxkKDEpJyk7XG5cdFx0XHRpZighc2Vjb25kRGl2KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZih2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRmaXJzdERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuXHRcdFx0XHRzZWNvbmREaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpcnN0RGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnd2lkdGg6IG1pbi1jb250ZW50OycpXG5cdFx0XHRzZWNvbmREaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogbWluLWNvbnRlbnQ7JylcblxuXHRcdFx0aWYoaSA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLl90b3RhbFdpZHRoID0gZmlyc3REaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVzZXRTY3JvbGxQb3NpdGlvbigpIHtcblx0XHRpZih0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuXHRcdFx0dGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0cnVlKVxuXHRcdHRoaXMucmVhY2hlZFNjcm9sbEVuZCQubmV4dChmYWxzZSk7XG5cdH1cblxuXHRwcml2YXRlIF9jYWxjdWxhdGVTY3JvbGxQb3NpdGlvbih7IHRhcmdldCB9OiB7IHRhcmdldDogSFRNTERpdkVsZW1lbnQgfSkge1xuXHRcdHRoaXMucmVhY2hlZFNjcm9sbFN0YXJ0JC5uZXh0KHRhcmdldC5zY3JvbGxMZWZ0IDwgMTAwKTtcblxuXHRcdGNvbnN0IHJpZ2h0ID0gdGFyZ2V0LnNjcm9sbExlZnQgKyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0dGhpcy5yZWFjaGVkU2Nyb2xsRW5kJC5uZXh0KHJpZ2h0ID4gdGhpcy5fdG90YWxXaWR0aCAtIDEwMClcblx0fVxufVxuIiwiPHAtdGFibGUtY29udGFpbmVyPlxuXHQ8cC10YWJsZS1oZWFkZXJcblx0XHQqbmdJZj1cImVuYWJsZUhlYWRlclwiXG5cdFx0Y2xhc3M9XCJtYi04XCJcblx0XHRbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG5cdFx0W2FjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcl09XCJhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJcIlxuXHRcdChxdWlja0ZpbHRlcik9XCJvblF1aWNrRmlsdGVyKCRldmVudClcIlxuXHRcdFtlbmFibGVTZWFyY2hdPVwiZW5hYmxlU2VhcmNoXCJcblx0XHRbcXVlcnldPVwicXVlcnlcIlxuXHRcdChxdWVyeUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVGaWx0ZXJdPVwiZW5hYmxlRmlsdGVyXCJcblx0XHRbZW5hYmxlRmlsdGVyRGVza3RvcF09XCJlbmFibGVGaWx0ZXJEZXNrdG9wXCJcblx0XHRbc2VsZWN0ZWRGaWx0ZXJzQW1vdW50XT1cInNlbGVjdGVkRmlsdGVyc0Ftb3VudFwiXG5cdFx0W2ZpbHRlckJ1dHRvblRlbXBsYXRlXT1cImZpbHRlckJ1dHRvblRlbXBsYXRlXCJcblx0XHQoZmlsdGVyKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dCh0cnVlKVwiXG5cdFx0W2VuYWJsZUFjdGlvbl09XCJlbmFibGVBY3Rpb25cIlxuXHRcdFtjYW5Vc2VBY3Rpb25dPVwiYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG5cdFx0W2FjdGlvbkJ1dHRvblRlbXBsYXRlXT1cImFjdGlvbkJ1dHRvblRlbXBsYXRlXCJcblx0XHRbYWN0aW9uTG9hZGluZ109XCJhY3Rpb25CdXR0b25Mb2FkaW5nXCJcblx0XHRbYWN0aW9uVGV4dF09XCJhY3Rpb25CdXR0b25UZXh0XCJcblx0XHRbYWN0aW9uSWNvbl09XCJhY3Rpb25CdXR0b25JY29uXCJcblx0XHQoYWN0aW9uKT1cImFjdGlvbi5lbWl0KClcIlxuXHRcdFtpdGVtc1NlbGVjdGVkQW1vdW50XT1cInNlbGVjdGVkUm93cy5sZW5ndGhcIlxuXHRcdFtlbmFibGVFeHBvcnRdPVwiZW5hYmxlRXhwb3J0XCJcblx0XHQoZXhwb3J0KT1cImV4cG9ydC5lbWl0KClcIlxuXHRcdFtsb2FkaW5nXT1cImhlYWRlckxvYWRpbmdcIlxuXHQ+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdCpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIlxuXHRcdFx0PjwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZVwiXG5cdFx0XHQ+PC9uZy1jb250YWluZXI+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdDwvcC10YWJsZS1oZWFkZXI+XG5cblx0PGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtMVwiICpuZ0lmPVwiZW5hYmxlU2Nyb2xsOyBlbHNlIHJvd3NUZW1wbGF0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG92ZXJmbG93LXgtYXV0b1wiXG5cdFx0XHQjc2Nyb2xsQ29udGFpbmVyXG5cdFx0XHRbY2xhc3NdPVwiY24oXG5cdFx0XHRcdCdiZWZvcmU6YWJzb2x1dGUgYmVmb3JlOnRvcC0wIGJlZm9yZTpsZWZ0LTAgYmVmb3JlOnotWzFdIGJlZm9yZTpwb2ludGVyLWV2ZW50cy1ub25lJyxcblx0XHRcdFx0J2JlZm9yZTp3LVsxMCVdIGJlZm9yZTpoLWZ1bGwgYmVmb3JlOnRyYW5zaXRpb24tb3BhY2l0eScsXG5cdFx0XHRcdCdiZWZvcmU6YmctZ3JhZGllbnQtdG8tciBiZWZvcmU6ZnJvbS13aGl0ZSBiZWZvcmU6dmlhLXdoaXRlLzgwIGJlZm9yZTp0by10cmFuc3BhcmVudCcsXG5cblx0XHRcdFx0J2FmdGVyOmFic29sdXRlIGFmdGVyOnRvcC0wIGFmdGVyOnJpZ2h0LTAgYWZ0ZXI6ei1bMF0gYmVmb3JlOnBvaW50ZXItZXZlbnRzLW5vbmUnLFxuXHRcdFx0XHQnYWZ0ZXI6dy1bMTAlXSBhZnRlcjpoLWZ1bGwgYWZ0ZXI6dHJhbnNpdGlvbi1vcGFjaXR5Jyxcblx0XHRcdFx0J2FmdGVyOmJnLWdyYWRpZW50LXRvLWwgYWZ0ZXI6ZnJvbS13aGl0ZSBhZnRlcjp2aWEtd2hpdGUvODAgYWZ0ZXI6dG8tdHJhbnNwYXJlbnQnLFxuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMCc6IHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYyxcblx0XHRcdFx0XHQnYWZ0ZXI6b3BhY2l0eS0wJzogcmVhY2hlZFNjcm9sbEVuZCQgfCBhc3luYyxcblx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdCdhZnRlcjpvcGFjaXR5LTEwMCc6IChyZWFjaGVkU2Nyb2xsRW5kJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG5cdFx0XHRcdH1cblx0XHRcdClcIlxuXHRcdFx0KHNjcm9sbCk9XCJvbkNvbnRhaW5lclhTY3JvbGwoJGV2ZW50KVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlRmxvYXRpbmdNZW51ICYmIGVuYWJsZVJvd1NlbGVjdGlvblwiPlxuXHRcdDxwLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyXG5cdFx0XHRbdXNlZEluVGFibGVdPVwidHJ1ZVwiXG5cdFx0XHRbY2xhc3NdPVwiXG5cdFx0XHRcdGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzKHtcblx0XHRcdFx0XHRoYXNGb290ZXI6IGVuYWJsZUZvb3RlciAmJiAoZm9vdGVySGlkZGVuJCB8IGFzeW5jKSA9PT0gZmFsc2UsXG5cdFx0XHRcdFx0YWN0aXZlOiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMCxcblx0XHRcdFx0XHRzaG93bjogJGFueShmbG9hdGluZ01lbnVTaG93biQgfCBhc3luYylcblx0XHRcdFx0fSlcblx0XHRcdFwiXG5cdFx0XHRbYW1vdW50XT1cImZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dFwiXG5cdFx0XHRbZW5hYmxlQW1vdW50U2VsZWN0ZWRdPVwiISEocm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jKT8ubGVuZ3RoXCJcblx0XHRcdChjbG9zZSk9XCJfc2VsZWN0QWxsQ2hhbmdlKG51bGwsIGZhbHNlKVwiXG5cdFx0PlxuXHRcdFx0PHAtZmxvYXRpbmctbWVudS1pdGVtXG5cdFx0XHRcdCpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHRcdFtkaXNhYmxlZF09XCJcblx0XHRcdFx0XHQoYWN0aW9uWyd0eXBlJ10gPT09ICdzaW5nbGUnICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAxKSB8fFxuXHRcdFx0XHRcdGFjdGlvblsnZGlzYWJsZWQnXVxuXHRcdFx0XHRcIlxuXHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb25bJ2xvYWRpbmcnXVwiXG5cdFx0XHRcdFtpY29uXT1cImFjdGlvblsnaWNvbiddXCJcblx0XHRcdFx0W2ljb25Sb3RhdGVdPVwiYWN0aW9uWydpY29uUm90YXRlJ11cIlxuXHRcdFx0XHRbaWNvbkZsaXBdPVwiYWN0aW9uWydpY29uRmxpcCddXCJcblx0XHRcdFx0KGNsaWNrKT1cIl9yb3dBY3Rpb25DbGljayhhY3Rpb24pXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgYWN0aW9uWydsYWJlbCddIH19XG5cdFx0XHQ8L3AtZmxvYXRpbmctbWVudS1pdGVtPlxuXHRcdDwvcC1mbG9hdGluZy1tZW51LWNvbnRhaW5lcj5cblx0PC9uZy1jb250YWluZXI+XG5cblx0PHAtdGFibGUtZm9vdGVyXG5cdFx0Km5nSWY9XCJlbmFibGVGb290ZXJcIlxuXHRcdFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuXHRcdFtlbmFibGVQYWdpbmF0aW9uU2l6ZV09XCJlbmFibGVQYWdpbmF0aW9uU2l6ZVwiXG5cdFx0W3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcblx0XHRbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG5cdFx0KHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0W2VuYWJsZVBhZ2luYXRpb25QYWdlc109XCJlbmFibGVQYWdpbmF0aW9uUGFnZXNcIlxuXHRcdFtwYWdlXT1cInBhZ2VcIlxuXHRcdFt0b3RhbF09XCJ0b3RhbFwiXG5cdFx0KHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuXHRcdFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuXHRcdChoaWRkZW5DaGFuZ2UpPVwiZm9vdGVySGlkZGVuJC5uZXh0KCRldmVudC5kZXRhaWwpXCJcblx0PjwvcC10YWJsZS1mb290ZXI+XG48L3AtdGFibGUtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Jvd3NUZW1wbGF0ZT5cblx0PHAtdGFibGUtcm93IHZhcmlhbnQ9XCJoZWFkZXJcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFt2YWx1ZV09XCJjb2wubmFtZVwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJoZWFkZXJcIlxuXHRcdFx0XHRbaW5kZXhdPVwiaW5kZXhcIlxuXHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFwiXG5cdFx0XHQ+PC9wLXRhYmxlLWNlbGwtbmd4PlxuXHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHQ8cC1jaGVja2JveFxuXHRcdFx0XHRcdChjaGVja2VkQ2hhbmdlKT1cIl9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zQWxsKClcIlxuXHRcdFx0XHRcdFtpbmRldGVybWluYXRlXT1cIl9zZWxlY3Rpb25JbmRldGVybWluYXRlKClcIlxuXHRcdFx0XHRcdFtjbGFzcy5vcGFjaXR5LTBdPVwicm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZFwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cInJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWRcIlxuXHRcdFx0XHQ+PC9wLWNoZWNrYm94PlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9wLXRhYmxlLXJvdz5cblxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgZmxleC1jb2xcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50VGVtcGxhdGVcIj5cblx0XHRcdDxwLXRhYmxlLXJvd1xuXHRcdFx0XHQqbmdGb3I9XCJsZXQgciBvZiBsb2FkaW5nUm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuXHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwibG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8cC1sb2FkZXJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoLTYgdy02IHJvdW5kZWRcIlxuXHRcdFx0XHRcdFx0PjwvcC1sb2FkZXI+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VkSXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cblx0XHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcblx0XHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdFx0XHQoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdHBhcnNlUm93QWN0aW9uc1Jvdyhcblx0XHRcdFx0XHRcdFx0XHRyb3dBY3Rpb25zUm93JCB8IGFzeW5jLFxuXHRcdFx0XHRcdFx0XHRcdHJvd0luZGV4XG5cdFx0XHRcdFx0XHRcdCkgYXMgcm93QWN0aW9uc1Jvd1xuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFx0XHRbZGVmaW5pdGlvbl09XCJjb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFtpdGVtXT1cIml0ZW1cIlxuXHRcdFx0XHRcdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFx0XHRcdFx0W3Jvd0luZGV4XT1cInJvd0luZGV4XCJcblx0XHRcdFx0XHRcdFx0XHRbdGVtcGxhdGVdPVwiY29sLnRlbXBsYXRlXCJcblx0XHRcdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblxuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdFx0PHAtY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdChjaGVja2VkQ2hhbmdlKT1cIl9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHQ+PC9wLWNoZWNrYm94PlxuXHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHRcdDxwLXRhYmxlLXJvdy1hY3Rpb25zLWNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cIiEhcm93QWN0aW9uc1Jvdz8ubGVuZ3RoICYmICEoaXNNb2JpbGUkIHwgYXN5bmMpXCJcblx0XHRcdFx0XHRcdFx0c2xvdD1cImFjdGlvbnNcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc1Jvd1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxwLXRvb2x0aXBcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5zaG93RnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGFjdGlvbi5zaG93RnVuY3Rpb24ocGFyc2VkSXRlbXNbcm93SW5kZXhdKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFtjb250ZW50XT1cImFjdGlvblsnbGFiZWwnXVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtaXMtYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzbG90PVwidHJpZ2dlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtpY29uXT1cImFjdGlvblsnaWNvbiddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25Sb3RhdGVdPVwiYWN0aW9uWydpY29uUm90YXRlJ11cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uRmxpcD1cImFjdGlvbi5pY29uRmxpcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtsb2FkaW5nXT1cImFjdGlvblsnbG9hZGluZyddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImFjdGlvblsnZGlzYWJsZWQnXVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtyb3V0ZXJMaW5rXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5yb3V0ZXJMaW5rXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChfZ2V0QWN0aW9uUm91dGVyTGluayhhY3Rpb24ucm91dGVyTGluaywgcm93SW5kZXgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3F1ZXJ5UGFyYW1zXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5xdWVyeVBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoX2dldEFjdGlvblF1ZXJ5UGFyYW1zKGFjdGlvbi5xdWVyeVBhcmFtcywgcm93SW5kZXgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiX3Jvd0FjdGlvbkNsaWNrKGFjdGlvbiwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRcdD48L3AtYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdDwvcC10b29sdGlwPlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvcC10YWJsZS1yb3ctYWN0aW9ucy1jb250YWluZXI+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDwvcC10YWJsZS1yb3c+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCI+XG5cdDxwLW1vZGFsXG5cdFx0W2hlYWRlcl09XCJmaWx0ZXJNb2RhbEhlYWRlclRleHRcIlxuXHRcdFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG5cdFx0KGNsb3NlZCk9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpXCJcblx0PlxuXHRcdDxkaXZcblx0XHRcdHNsb3Q9XCJjb250ZW50XCJcblx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNlwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2XG5cdFx0XHRzbG90PVwiZm9vdGVyXCJcblx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcblx0XHQ+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Km5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZVwiXG5cdFx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmhpZGRlblwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQodHJ1ZSlcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHQqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcblx0XHRcdFx0Y2xhc3M9XCJoaWRkZW4gdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpmbGV4XCJcblx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Y2xhc3M9XCJtbC1hdXRvIHctZnVsbCB0YWJsZXQ6dy1hdXRvXCJcblx0XHRcdFx0aWNvbj1cImNoZWNrbWFya1wiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxTYXZlKClcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFNhdmVUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L3AtbW9kYWw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlVGVtcGxhdGU+XG5cdDxwLWVtcHR5LXN0YXRlXG5cdFx0Km5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuXHRcdGNsYXNzPVwibXktMTYgc2VsZi1jZW50ZXJcIlxuXHRcdFtpbGx1c3RyYXRpb25dPVwiZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uXCJcblx0XHRbaGVhZGVyXT1cImVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlclwiXG5cdFx0W2NvbnRlbnRdPVwiZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudFwiXG5cdD48L3AtZW1wdHktc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cblx0PHAtZW1wdHktc3RhdGVcblx0XHRjbGFzcz1cIm15LTE2IHNlbGYtY2VudGVyXCJcblx0XHRbaWxsdXN0cmF0aW9uXT1cImVtcHR5U3RhdGVJbGx1c3RyYXRpb25cIlxuXHRcdFtoZWFkZXJdPVwiZW1wdHlTdGF0ZUhlYWRlclwiXG5cdFx0W2NvbnRlbnRdPVwiZW1wdHlTdGF0ZUNvbnRlbnRcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZW5hYmxlRW1wdHlTdGF0ZUFjdGlvblwiXG5cdFx0W2FjdGlvblRleHRdPVwiZW1wdHlTdGF0ZUFjdGlvblwiXG5cdFx0W2FjdGlvbkljb25dPVwiZW1wdHlTdGF0ZUFjdGlvbkljb25cIlxuXHRcdChhY3Rpb24pPVwiZW1wdHlTdGF0ZUNsaWNrZWQoKVwiXG5cdD48L3AtZW1wdHktc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|