@paperless/angular 0.1.0-alpha.446 → 0.1.0-alpha.448
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 +6 -4
- package/esm2020/lib/modules/table/components/table-cell/table-cell.component.mjs +2 -1
- package/esm2020/lib/modules/table/components/table-column/table-column.component.mjs +7 -4
- package/esm2020/lib/stencil/components.mjs +7 -7
- package/fesm2015/paperless-angular.mjs +18 -13
- package/fesm2015/paperless-angular.mjs.map +1 -1
- package/fesm2020/paperless-angular.mjs +17 -11
- package/fesm2020/paperless-angular.mjs.map +1 -1
- package/lib/modules/table/components/table-column/table-column.component.d.ts +2 -1
- package/lib/stencil/components.d.ts +2 -2
- package/package.json +1 -1
- package/paperless.css +8 -0
|
@@ -263,7 +263,9 @@ let Table = class Table {
|
|
|
263
263
|
_generateColumns() {
|
|
264
264
|
// const definitions =
|
|
265
265
|
// this._el.nativeElement.querySelectorAll('p-table-definition');
|
|
266
|
-
|
|
266
|
+
const definitionsArray = Array.from(this._columnDefinitions);
|
|
267
|
+
definitionsArray[definitionsArray.length - 1].isLast = true;
|
|
268
|
+
this.columns = definitionsArray;
|
|
267
269
|
}
|
|
268
270
|
// private _getHeader() {
|
|
269
271
|
// return (
|
|
@@ -519,14 +521,14 @@ let Table = class Table {
|
|
|
519
521
|
}
|
|
520
522
|
};
|
|
521
523
|
Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
522
|
-
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", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableEdit: "enableEdit", editButtonLoading: "editButtonLoading", editButtonIcon: "editButtonIcon", editButtonText: "editButtonText", editButtonTemplate: "editButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", 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", edit: "edit", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}\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: "component", type: i2.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "variant"] }, { kind: "component", type: i2.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i2.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i2.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i2.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i2.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i2.PTableHeader, selector: "p-table-header", inputs: ["activeQuickFilterIdentifier", "canEdit", "editButtonTemplate", "editIcon", "editLoading", "editText", "enableEdit", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i2.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i4.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i5.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
524
|
+
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", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableEdit: "enableEdit", editButtonLoading: "editButtonLoading", editButtonIcon: "editButtonIcon", editButtonText: "editButtonText", editButtonTemplate: "editButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", 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", edit: "edit", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}\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: "component", type: i2.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "variant"] }, { kind: "component", type: i2.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i2.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i2.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i2.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i2.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i2.PTableHeader, selector: "p-table-header", inputs: ["activeQuickFilterIdentifier", "canEdit", "editButtonTemplate", "editIcon", "editLoading", "editText", "enableEdit", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i2.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i4.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i5.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
523
525
|
Table = __decorate([
|
|
524
526
|
UntilDestroy({ checkProperties: true })
|
|
525
527
|
], Table);
|
|
526
528
|
export { Table };
|
|
527
529
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, decorators: [{
|
|
528
530
|
type: Component,
|
|
529
|
-
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
|
|
531
|
+
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}\n"] }]
|
|
530
532
|
}], ctorParameters: function () { return []; }, propDecorators: { items: [{
|
|
531
533
|
type: Input
|
|
532
534
|
}], loading: [{
|
|
@@ -676,4 +678,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
676
678
|
type: HostListener,
|
|
677
679
|
args: ['document:visibilitychange', ['$event']]
|
|
678
680
|
}] } });
|
|
679
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUM1QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQWtTZDtRQTVSQTs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qzs7V0FFRztRQUNNLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ00sdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFeEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUVsQzs7V0FFRztRQUNPLHVCQUFrQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBWXJFOztXQUVHO1FBQ08sYUFBUSxHQUFnQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJFOztXQUVHO1FBQ08sZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5RDs7V0FFRztRQUNPLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEUsbUJBQW1CO1FBRW5COztXQUVHO1FBQ00saUJBQVksR0FBWSxJQUFJLENBQUM7UUFFdEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFPMUM7O1dBRUc7UUFDTSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQU90Qzs7V0FFRztRQUNNLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBWXRDOztXQUVHO1FBQ00sZUFBVSxHQUFZLElBQUksQ0FBQztRQUVwQzs7V0FFRztRQUNNLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7V0FFRztRQUNNLG1CQUFjLEdBQWdCLFFBQVEsQ0FBQztRQVloRDs7V0FFRztRQUNPLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEU7O1dBRUc7UUFDTyxnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpFOztXQUVHO1FBQ08sV0FBTSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFEOztXQUVHO1FBQ08sU0FBSSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhELG1CQUFtQjtRQUVuQjs7V0FFRztRQUNNLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFeEM7O1dBRUc7UUFDTSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFMUM7O1dBRUc7UUFDTSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUV0Qzs7V0FFRztRQUNNLFNBQUksR0FBVyxDQUFDLENBQUM7UUFPMUI7O1dBRUc7UUFDTyxlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEU7O1dBRUc7UUFDTSxhQUFRLEdBQVcsV0FBVyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sb0JBQWUsR0FBYSxrQkFBa0IsQ0FBQztRQUV4RDs7V0FFRztRQUNPLG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEU7O1dBRUc7UUFDTyxXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUQ7O1dBRUc7UUFDTSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFMUMsdUJBQXVCO1FBQ2QsbUJBQWMsR0FBNkIsV0FBVyxDQUFDO1FBRXZELDJCQUFzQixHQUF3QixpQkFBaUIsQ0FBQztRQUtoRSwyQkFBc0IsR0FBWSxJQUFJLENBQUM7UUFFdkMsbUNBQThCLEdBQ25DLG9CQUFvQixDQUFDO1FBSXpCOztXQUVHO1FBQ08sMEJBQXFCLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekUscUJBQXFCO1FBRWQsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDbkMsQ0FBQyxDQUFDO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztRQTZCbkIscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsMEJBQXFCLEdBQVcsU0FBUyxDQUFDO1FBQzFDLHdCQUFtQixHQUFXLE1BQU0sQ0FBQztRQUNyQywwQkFBcUIsR0FBVyxRQUFRLENBQUM7UUFDekMseUJBQW9CLEdBQVcsZUFBZSxDQUFDO1FBRS9DLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QywrQkFBMEIsR0FBWSxLQUFLLENBQUM7UUFFM0Msb0JBQWUsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1RCxvQkFBZSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pELHFCQUFnQixHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXhELENBQUM7SUE5QmhCLElBQ0ksaUJBQWlCLENBQUMsQ0FBeUI7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQXlCRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO1NBQ25DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0I7YUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2FBQ2xELFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RCwyQkFBMkI7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUMxQixNQUFNLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsWUFBWTthQUN0RCxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsZ0NBQWdDO0lBQ2hDLGdDQUFnQztJQUNoQyxLQUFLO0lBR0wsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFtQjtRQUM1QixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDOUMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUdELEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBbUI7UUFDMUIsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQy9DLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxnQkFBZ0I7UUFDWixJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ25FLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQXVCO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQW9CO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sRUFBdUI7UUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBdUI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsS0FBSztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM5QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsc0JBQXNCO1FBQ3RCLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIsMENBQTBDO0lBQzFDLHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDbkMsd0NBQXdDO0lBQ3hDLHdDQUF3QztJQUN4Qyx3Q0FBd0M7SUFDeEMsMkVBQTJFO0lBQzNFLHFDQUFxQztJQUNyQyxzQ0FBc0M7SUFDdEMsbUJBQW1CO0lBQ25CLDBCQUEwQjtJQUMxQixVQUFVO0lBQ1YsS0FBSztJQUVMLHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsOEJBQThCO0lBQzlCLGlCQUFpQjtJQUNqQixxREFBcUQ7SUFDckQsa0JBQWtCO0lBQ2xCLDJCQUEyQjtJQUMzQixnQ0FBZ0M7SUFDaEMscUNBQXFDO0lBQ3JDLDBFQUEwRTtJQUMxRSx5QkFBeUI7SUFDekIscUJBQXFCO0lBQ3JCLG9EQUFvRDtJQUNwRCxrQ0FBa0M7SUFDbEMsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxTQUFTO0lBRVQsaURBQWlEO0lBQ2pELHdCQUF3QjtJQUN4Qiw0RUFBNEU7SUFDNUUsMkRBQTJEO0lBQzNELGFBQWE7SUFDYixrREFBa0Q7SUFDbEQsMEJBQTBCO0lBQzFCLFdBQVc7SUFDWCxLQUFLO0lBRUwseUNBQXlDO0lBQ3pDLHNFQUFzRTtJQUN0RSxvQkFBb0I7SUFDcEIsK0JBQStCO0lBQy9CLG9DQUFvQztJQUNwQywrQkFBK0I7SUFDL0IsaUVBQWlFO0lBQ2pFLG9DQUFvQztJQUNwQyxvQ0FBb0M7SUFDcEMsa0NBQWtDO0lBQ2xDLGNBQWM7SUFDZCxXQUFXO0lBQ1gsS0FBSztJQUVMLHVDQUF1QztJQUN2QyxzRUFBc0U7SUFDdEUsb0JBQW9CO0lBQ3BCLCtCQUErQjtJQUMvQixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLDRFQUE0RTtJQUM1RSxvQ0FBb0M7SUFDcEMsb0NBQW9DO0lBQ3BDLGtDQUFrQztJQUNsQyxjQUFjO0lBQ2QsV0FBVztJQUNYLEtBQUs7SUFFTCx5QkFBeUI7SUFDekIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQiw2REFBNkQ7SUFDN0QsT0FBTztJQUNQLDRFQUE0RTtJQUM1RSxtQkFBbUI7SUFDbkIsU0FBUztJQUVULG9DQUFvQztJQUNwQyx3RUFBd0U7SUFDeEUsU0FBUztJQUVULG1DQUFtQztJQUNuQyxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLG1DQUFtQztJQUNuQyxtQ0FBbUM7SUFDbkMsZ0VBQWdFO0lBQ2hFLDBEQUEwRDtJQUMxRCxrRUFBa0U7SUFDbEUsa0JBQWtCO0lBQ2xCLGNBQWM7SUFDZCxTQUFTO0lBRVQsMkNBQTJDO0lBRTNDLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsK0JBQStCO0lBQy9CLCtCQUErQjtJQUMvQiw2RUFBNkU7SUFDN0Usd0VBQXdFO0lBQ3hFLGlFQUFpRTtJQUNqRSxjQUFjO0lBQ2QsVUFBVTtJQUNWLEtBQUs7SUFFRSxpQkFBaUIsQ0FBQyxJQUFTO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQVc7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDOUMsU0FBUztpQkFDWjtnQkFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pDLFNBQVM7aUJBQ1o7Z0JBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUI7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsT0FBTztTQUNWO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztZQUVGLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sU0FBUzthQUNaO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sZUFBZSxDQUFDLE1BQVcsRUFBRSxLQUFhO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsT0FBTztTQUNWO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEUsNEVBQTRFO1FBQzVFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQVc7UUFDaEMsT0FBTyxNQUFNLEVBQUUsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsS0FBYTtRQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RSxDQUFDO0lBRU0sa0JBQWtCLENBQ3JCLEdBQVEsRUFDUixLQUFhLEVBQ2IsV0FBVyxHQUFHLEtBQUs7UUFFbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQzNDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3pELENBQUM7SUFFTSxxQkFBcUI7UUFDeEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixNQUFNO2FBQ1Q7U0FDSjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSx1QkFBdUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUU7WUFDekQsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVsRCxJQUFJLFFBQVEsRUFBRTtnQkFDVixhQUFhLEVBQUUsQ0FBQzthQUNuQjtTQUNKO1FBRUQsT0FBTyxhQUFhLEdBQUcsQ0FBQyxJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQXVCLEVBQUUsS0FBYTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUM1QjtZQUNFLE9BQU87U0FDVjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsRCxJQUFJLE1BQU0sRUFBRTtnQkFDUixPQUFPO2FBQ1Y7WUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUk7Z0JBQ0osUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzNCLENBQUMsQ0FBQztZQUNILE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sUUFBUSxDQUFDLEVBQXNCO1FBQ25DLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLGFBQWEsRUFBRTtZQUM5QyxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEVBQXNCO1FBQ3pDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFDSSxFQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSTtZQUMxQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssT0FBTyxFQUMvQztZQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssYUFBYSxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7O2tHQWp0QlEsS0FBSztzRkFBTCxLQUFLLHM3RUEyUEEsMEJBQTBCLDJCQUM5QixXQUFXLGlGQWtCUCx5QkFBeUIsMkJBQzdCLFdBQVcsa0VBWEosV0FBVyxrREN4U2hDLHd0UkFpUEE7QUQ3TWEsS0FBSztJQVBqQixZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7R0FPM0IsS0FBSyxDQWt0QmpCO1NBbHRCWSxLQUFLOzJGQUFMLEtBQUs7a0JBTmpCLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzBFQU10QyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBS0UsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9FLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0ksV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLE1BQU07c0JBQWYsTUFBTTtnQkFLRyxJQUFJO3NCQUFiLE1BQU07Z0JBT0UsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFLRSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0ksY0FBYztzQkFBdkIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBS0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFLSSxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBaUJBLDBCQUEwQjtzQkFKaEMsWUFBWTt1QkFBQywwQkFBMEIsRUFBRTt3QkFDdEMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNmO2dCQU9HLGlCQUFpQjtzQkFEcEIsZUFBZTt1QkFBQyxXQUFXO2dCQWNyQixtQkFBbUI7c0JBSnpCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUU7d0JBQ3JDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDZjtnQkFLUSxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQW1DUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTVDLEtBQUs7c0JBREosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVMUMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgUm93Q2xpY2tFdmVudCB9IGZyb20gJ0BwYXBlcmxlc3MvY29yZSc7XG5pbXBvcnQge1xuICAgIEljb25WYXJpYW50LFxuICAgIElsbHVzdHJhdGlvblZhcmlhbnQsXG59IGZyb20gJ0BwYXBlcmxlc3MvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSxcbiAgICBUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdFNpemUsIGRlZmF1bHRTaXplT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXRhYmxlLW5neCcsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtcyB0byBiZSBmZWQgdG8gdGhlIHRhYmxlXG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbXMhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgZGF0YSBpcyBsb2FkaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhlYWRlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0aGUgZm9vdGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmb290ZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGxvYWRpbmcgcm93cyB0byBzaG93XG4gICAgICovXG4gICAgQElucHV0KCkgYW1vdW50T2ZMb2FkaW5nUm93czogbnVtYmVyID0gNjtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcm93IGNsaWNraW5nXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIGl0ZW1zXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0aW9uS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBBIGtleSB0byBkZXRlcm1pbmUgaWYgYSByb3cgY2FuIGJlIHNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgY2FuU2VsZWN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIFNUQVJUIEhFQURFUiAqL1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGhlYWRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUhlYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSBxdWlja0ZpbHRlcnM6IFF1aWNrRmlsdGVyW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEFjdGl2ZSBxdWljayBmaWx0ZXIgaWRlbnRpZmllclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZmlsdGVyIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RlZEZpbHRlcnNBbW91bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGZpbHRlciBidXR0b24gdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZWRpdCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVFZGl0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0aGUgZWRpdCBidXR0b24gaXMgbG9hZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdCBidXR0b24gaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25JY29uOiBJY29uVmFyaWFudCA9ICdwZW5jaWwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVkaXQgYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIGZvciB0aGUgZWRpdCBidXR0b24gdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25UZW1wbGF0ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBxdWlja0ZpbHRlcjogRXZlbnRFbWl0dGVyPFF1aWNrRmlsdGVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgZmlsdGVyIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogU1RBUlQgRk9PVEVSICovXG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZm9vdGVyXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcGFnZSBzaXplIHNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVBhZ2VTaXplOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcGFnaW5hdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBleHBvcnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVFeHBvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2U6IG51bWJlciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIGl0ZW1zXG4gICAgICovXG4gICAgQElucHV0KCkgdG90YWwhOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBpdGVtcyBwZXIgcGFnZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSBkZWZhdWx0U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIGZvciB0aGUgcGFnZSBzaXplXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGRlZmF1bHRTaXplT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBleHBvcnQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGhpZGUgd2hlbiB0aGVyZSBpcyBvbmx5IDEgcGFnZSBhdmFpbGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoaWRlT25TaW5nbGVQYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qIEVtcHR5IHN0YXRlIHN0YXJ0ICovXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZVR5cGU6ICdub19maWx0ZXInIHwgJ2ZpbHRlcmVkJyA9ICdub19maWx0ZXInO1xuXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUlsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9ICdlbXB0eS1zdGF0ZS1hZGQnO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVIZWFkZXIhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUNvbnRlbnQhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbiE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGVuYWJsZUVtcHR5U3RhdGVBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID1cbiAgICAgICAgJ2VtcHR5LXN0YXRlLXNlYXJjaCc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnQhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgZW1wdHkgc3RhdGUgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBlbXB0eVN0YXRlQWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qIEVtcHR5IHN0YXRlIGVuZCAqL1xuXG4gICAgcHVibGljIGNvbHVtbnM6IGFueVtdID0gW107XG4gICAgcHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBsb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICB9KTtcbiAgICBwcml2YXRlIF9jdHJsRG93biA9IGZhbHNlO1xuXG4gICAgLy8gQW5ndWxhciBzdHVmZlxuICAgIC8vIGN1c3RvbSBmaWx0ZXIgdGVtcGxhdGVcbiAgICBAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7XG4gICAgICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgICAgICBzdGF0aWM6IHRydWUsXG4gICAgfSlcbiAgICBwdWJsaWMgaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBjb2x1bW4gdGVtcGxhdGVzXG4gICAgcHJpdmF0ZSBfY29sdW1uRGVmaW5pdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICBzZXQgY29sdW1uRGVmaW5pdGlvbnModjogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPikge1xuICAgICAgICB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucyA9IHY7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuICAgIH1cbiAgICBnZXQgY29sdW1uRGVmaW5pdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucztcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgbW9kYWxcbiAgICBAQ29udGVudENoaWxkKFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgICAgIHN0YXRpYzogdHJ1ZSxcbiAgICB9KVxuICAgIHB1YmxpYyBmaWx0ZXJNb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGZpbHRlck1vZGFsU2hvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsSGVhZGVyVGV4dDogc3RyaW5nID0gJ0ZpbHRlcnMnO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsU2F2ZVRleHQ6IHN0cmluZyA9ICdTYXZlJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9ICdDYW5jZWwnO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsUmVzZXRUZXh0OiBzdHJpbmcgPSAnUmVzZXQgZmlsdGVycyc7XG5cbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZmlsdGVyTW9kYWxTaG93OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGZpbHRlck1vZGFsU2F2ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFJlc2V0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcGFyc2VJdGVtcyh0aGlzLml0ZW1zKTtcblxuICAgICAgICB0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNob3ckXG4gICAgICAgICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmZpbHRlck1vZGFsU2hvdy5uZXh0KHZhbHVlKSk7XG4gICAgICAgIC8vIHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlSXRlbXMoY2hhbmdlc1snaXRlbXMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Ftb3VudE9mTG9hZGluZ1Jvd3MnXSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuICAgICAgICAgICAgICAgIGxlbmd0aDogY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gIEBIb3N0TGlzdGVuZXIoJ2JvZHk6dGFibGVEZWZpbml0aW9uQ2hhbmdlZCcsIHsgdGFyZ2V0OiAnYm9keScgfSlcbiAgICAvLyAgb25UYWJsZURlZmluaXRpb25VcGRhdGVkKCkge1xuICAgIC8vICAgICAgdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgLy8gIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgICBrZXlVcCh7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcbiAgICB2aXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBDdXN0b21FdmVudDxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8YW55Pikge1xuICAgICAgICB0aGlzLnF1aWNrRmlsdGVyLmVtaXQoZGV0YWlsKTtcbiAgICB9XG5cbiAgICBvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZGV0YWlsKTtcbiAgICB9XG5cbiAgICBvbkZpbHRlck1vZGFsU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNhdmUubmV4dCgpO1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsUmVzZXQubmV4dChyZXNldFF1aWNrRmlsdGVyKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIGVtcHR5U3RhdGVDbGlja2VkKCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlSXRlbXMoaXRlbXM6IHN0cmluZykge1xuICAgICAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBpdGVtcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBKU09OLnBhcnNlKGl0ZW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUNvbHVtbnMoKSB7XG4gICAgICAgIC8vIGNvbnN0IGRlZmluaXRpb25zID1cbiAgICAgICAgLy8gXHR0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AtdGFibGUtZGVmaW5pdGlvbicpO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZmluaXRpb25zKTtcbiAgICB9XG5cbiAgICAvLyAgcHJpdmF0ZSBfZ2V0SGVhZGVyKCkge1xuICAgIC8vICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICA8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuICAgIC8vICAgICAgICAgICAgICB7dGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBpbmRleCkgPT4gKFxuICAgIC8vICAgICAgICAgICAgICAgICAgPHAtdGFibGUtY29sdW1uXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb2wubmFtZX1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiaGVhZGVyXCJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveD17dGhpcy5fZ2V0Q2hlY2tib3goaW5kZXgsIG51bGwsICdoZWFkZXInKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNvbHVtbj5cbiAgICAvLyAgICAgICAgICAgICAgKSl9XG4gICAgLy8gICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAvLyAgICAgICk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRSb3dzKCkge1xuICAgIC8vICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgIC8vICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgIC8vICAgICAgICAgICAgICB7XG4gICAgLy8gICAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICAvLyAgICAgICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgICAgICAgKF8sIGkpID0+IChcbiAgICAvLyAgICAgICAgICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUhvdmVyPXtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gfHwgdGhpcy5lbmFibGVSb3dDbGlja1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgID5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fZ2V0TG9hZGluZ0NvbHVtbnMoaSl9XG4gICAgLy8gICAgICAgICAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgICAgICAgICApXG4gICAgLy8gICAgICAgICAgKTtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAvLyAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAvLyAgICAgICAgICAgICAgZW5hYmxlSG92ZXI9e3RoaXMuZW5hYmxlUm93U2VsZWN0aW9uIHx8IHRoaXMuZW5hYmxlUm93Q2xpY2t9XG4gICAgLy8gICAgICAgICAgICAgIG9uQ2xpY2s9eyhldikgPT4gdGhpcy5fcm93Q2xpY2soZXYsIGluZGV4KX1cbiAgICAvLyAgICAgICAgICA+XG4gICAgLy8gICAgICAgICAgICAgIHt0aGlzLl9nZXRSb3dDb2x1bW5zKGl0ZW0sIGluZGV4KX1cbiAgICAvLyAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgKSk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRSb3dDb2x1bW5zKGl0ZW0sIGluZGV4KSB7XG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBjb2xJbmRleCkgPT4ge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxwLXRhYmxlLWNvbHVtblxuICAgIC8vICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChjb2xJbmRleCwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaW5kZXg9e2NvbEluZGV4fVxuICAgIC8vICAgICAgICAgICAgICAgICAgcm93SW5kZXg9e2luZGV4fVxuICAgIC8vICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNvbHVtbj5cbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfSk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRMb2FkaW5nQ29sdW1ucyhpbmRleCkge1xuICAgIC8vICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMubWFwKChjb2w6IFRhYmxlRGVmaW5pdGlvbiwgY29sSW5kZXgpID0+IHtcbiAgICAvLyAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgICA8cC10YWJsZS1jb2x1bW5cbiAgICAvLyAgICAgICAgICAgICAgICAgIGRlZmluaXRpb249e2NvbH1cbiAgICAvLyAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsb2FkaW5nXCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChjb2xJbmRleCwgaW5kZXgsICdsb2FkaW5nJyl9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpbmRleD17Y29sSW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICByb3dJbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9KTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldENoZWNrYm94KFxuICAgIC8vICAgICAgaW5kZXgsXG4gICAgLy8gICAgICByb3dJbmRleCxcbiAgICAvLyAgICAgIHZhcmlhbnQ6ICdoZWFkZXInIHwgJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnID0gJ2RlZmF1bHQnXG4gICAgLy8gICkge1xuICAgIC8vICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbiB8fCAhdGhpcy5zZWxlY3Rpb25LZXkgfHwgaW5kZXggIT09IDApIHtcbiAgICAvLyAgICAgICAgICByZXR1cm47XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGlmICh2YXJpYW50ID09PSAnbG9hZGluZycpIHtcbiAgICAvLyAgICAgICAgICByZXR1cm4gPHAtbG9hZGVyIHZhcmlhbnQ9XCJnaG9zdFwiIGNsYXNzPVwicm91bmRlZCB3LTYgaC02XCIgLz47XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGlmICh2YXJpYW50ID09PSAnaGVhZGVyJykge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxpbnB1dFxuICAgIC8vICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgLy8gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2KSA9PiB0aGlzLl9zZWxlY3RBbGxDaGFuZ2UoZXYpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5fc2VsZWN0aW9uQ29udGFpbnNBbGwoKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e3RoaXMuX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX1cbiAgICAvLyAgICAgICAgICAgICAgLz5cbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfVxuXG4gICAgLy8gICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbcm93SW5kZXhdO1xuXG4gICAgLy8gICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgIDxpbnB1dFxuICAgIC8vICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgIC8vICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIC8vICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2KSA9PiB0aGlzLl9jaGVja2JveENoYW5nZShldj8udGFyZ2V0LCByb3dJbmRleCl9XG4gICAgLy8gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmNhblNlbGVjdEtleSAmJiAhaXRlbVt0aGlzLmNhblNlbGVjdEtleV19XG4gICAgLy8gICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KX1cbiAgICAvLyAgICAgICAgICAvPlxuICAgIC8vICAgICAgKTtcbiAgICAvLyAgfVxuXG4gICAgcHVibGljIF9jaGVja2JveERpc2FibGVkKGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5TZWxlY3RLZXkgJiYgIWl0ZW1bdGhpcy5jYW5TZWxlY3RLZXldO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q2hlY2tlZFZhbHVlKCRldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQWRkID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCAuLi50b0FkZF07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3NbaV07XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgKGQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGQsIGkpID09PVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZSh2YWx1ZSwgaSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX2NoZWNrYm94Q2hhbmdlKHRhcmdldDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuICAgICAgICAgICAgdGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q2hlY2tlZFZhbHVlKHRhcmdldCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZlRvUmVtb3ZlID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpbmRleCwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3RlZFJvd3NdO1xuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZUb1JlbW92ZSwgMSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgdGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldD8uY2hlY2tlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRTZWxlY3Rpb25WYWx1ZShyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zKFxuICAgICAgICByb3c6IGFueSxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcmV0dXJuSW5kZXggPSBmYWxzZVxuICAgICk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUocm93LCBpbmRleCkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoaXRlbSwgaW5kZXgpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiAhcmV0dXJuSW5kZXggPyByZXR1cm5WYWx1ZSA+PSAwIDogcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuICAgICAgICAgICAgaWYgKCFjb250YWlucykge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Rpb25JbmRldGVybWluYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRhaW5zQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cbiAgICAgICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWluc0NvdW50ID4gMCAmJiBjb250YWluc0NvdW50ICE9PSB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3Jvd0NsaWNrKCRldmVudDogeyB0YXJnZXQ6IGFueSB9LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fFxuICAgICAgICAgICAgdGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9maW5kUm93KCRldmVudC50YXJnZXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVJvd0NsaWNrKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKCRldmVudC50YXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG4gICAgICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgY3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGVja2JveCA9IHJvdz8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cbiAgICAgICAgaWYgKCFjaGVja2JveCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jaGVja2JveENoYW5nZShjaGVja2JveCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRSb3coZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRSb3dBY3Rpb24oZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlzLWFjdGlvbicpICE9PSBudWxsICYmXG4gICAgICAgICAgICBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09ICdmYWxzZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWw/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdwLXRhYmxlLXJvdycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRSb3dBY3Rpb24oZWw/LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbn1cbiIsIjxwLXRhYmxlLWNvbnRhaW5lcj5cbiAgICA8cC10YWJsZS1oZWFkZXJcbiAgICAgICAgKm5nSWY9XCJlbmFibGVIZWFkZXJcIlxuICAgICAgICBbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG4gICAgICAgIFthY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJdPVwiYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXCJcbiAgICAgICAgKHF1aWNrRmlsdGVyKT1cIihvblF1aWNrRmlsdGVyKVwiXG4gICAgICAgIFtlbmFibGVTZWFyY2hdPVwiZW5hYmxlU2VhcmNoXCJcbiAgICAgICAgW3F1ZXJ5XT1cInF1ZXJ5XCJcbiAgICAgICAgKHF1ZXJ5Q2hhbmdlKT1cIihvblF1ZXJ5Q2hhbmdlKVwiXG4gICAgICAgIFtlbmFibGVGaWx0ZXJdPVwiZW5hYmxlRmlsdGVyXCJcbiAgICAgICAgW3NlbGVjdGVkRmlsdGVyc0Ftb3VudF09XCJzZWxlY3RlZEZpbHRlcnNBbW91bnRcIlxuICAgICAgICBbZmlsdGVyQnV0dG9uVGVtcGxhdGVdPVwiZmlsdGVyQnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAoZmlsdGVyKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dCh0cnVlKVwiXG4gICAgICAgIFtlbmFibGVFZGl0XT1cImVuYWJsZUVkaXRcIlxuICAgICAgICBbY2FuRWRpdF09XCIhIXNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgICAgICBbZWRpdEJ1dHRvblRlbXBsYXRlXT1cImVkaXRCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgIFtlZGl0TG9hZGluZ109XCJlZGl0QnV0dG9uTG9hZGluZ1wiXG4gICAgICAgIFtlZGl0VGV4dF09XCJlZGl0QnV0dG9uVGV4dFwiXG4gICAgICAgIFtlZGl0SWNvbl09XCJlZGl0QnV0dG9uSWNvblwiXG4gICAgICAgIChlZGl0KT1cImVkaXQuZW1pdCgpXCJcbiAgICAgICAgW2l0ZW1zU2VsZWN0ZWRBbW91bnRdPVwic2VsZWN0ZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgIFtsb2FkaW5nXT1cImhlYWRlckxvYWRpbmdcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcC10YWJsZS1oZWFkZXI+XG5cbiAgICA8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxwLXRhYmxlLWNlbGwtbmd4XG4gICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sLm5hbWVcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cIlxuICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJfc2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnNBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIl9zZWxlY3Rpb25JbmRldGVybWluYXRlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3AtdGFibGUtcm93PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgY29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBsb2FkaW5nUm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrYm94VGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNiB3LTYgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zPy5sZW5ndGg7IGVsc2UgZW1wdHlTdGF0ZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtdGFibGUtY2VsbC1uZ3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxwLXRhYmxlLWZvb3RlclxuICAgICAgICAqbmdJZj1cImVuYWJsZUZvb3RlclwiXG4gICAgICAgIFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuICAgICAgICBbZW5hYmxlUGFnZVNpemVdPVwiZW5hYmxlUGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCIocGFnZVNpemVDaGFuZ2UpXCJcbiAgICAgICAgW2VuYWJsZVBhZ2luYXRpb25dPVwiZW5hYmxlUGFnaW5hdGlvblwiXG4gICAgICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgICAgICBbdG90YWxdPVwidG90YWxcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCIocGFnZUNoYW5nZSlcIlxuICAgICAgICBbZW5hYmxlRXhwb3J0XT1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgIChleHBvcnQpPVwiZXhwb3J0LmVtaXQoKVwiXG4gICAgICAgIFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuICAgID48L3AtdGFibGUtZm9vdGVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj5cbiAgICA8cC1tb2RhbFxuICAgICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsSGVhZGVyVGV4dFwiXG4gICAgICAgIFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG4gICAgICAgIChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbiB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmZsZXhcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrbWFya1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFNhdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgbWF4LXctWzIwcmVtXVxuICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgc2VsZi1jZW50ZXJcbiAgICAgICAgICAgIHB5LTI0XG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYi02XCJcbiAgICAgICAgPjwvcC1pbGx1c3RyYXRpb24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMTQgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICBtYXgtdy1bMjByZW1dXG4gICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgaXRlbXMtY2VudGVyXG4gICAgICAgICAgICBzZWxmLWNlbnRlclxuICAgICAgICAgICAgcHktMjRcbiAgICAgICAgICAgIHRleHQtY2VudGVyXG4gICAgICAgIFwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cImVtcHR5U3RhdGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNlwiXG4gICAgICAgID48L3AtaWxsdXN0cmF0aW9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlSGVhZGVyIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi02IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVDb250ZW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlQWN0aW9uIH19XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
681
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUM1QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQWtTZDtRQTVSQTs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qzs7V0FFRztRQUNNLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ00sdUJBQWtCLEdB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cUI7c0JBQTdCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQW1DUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTVDLEtBQUs7c0JBREosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVMUMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgUm93Q2xpY2tFdmVudCB9IGZyb20gJ0BwYXBlcmxlc3MvY29yZSc7XG5pbXBvcnQge1xuICAgIEljb25WYXJpYW50LFxuICAgIElsbHVzdHJhdGlvblZhcmlhbnQsXG59IGZyb20gJ0BwYXBlcmxlc3MvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSxcbiAgICBUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdFNpemUsIGRlZmF1bHRTaXplT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXRhYmxlLW5neCcsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtcyB0byBiZSBmZWQgdG8gdGhlIHRhYmxlXG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbXMhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgZGF0YSBpcyBsb2FkaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhlYWRlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0aGUgZm9vdGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmb290ZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGxvYWRpbmcgcm93cyB0byBzaG93XG4gICAgICovXG4gICAgQElucHV0KCkgYW1vdW50T2ZMb2FkaW5nUm93czogbnVtYmVyID0gNjtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcm93IGNsaWNraW5nXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIGl0ZW1zXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0aW9uS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBBIGtleSB0byBkZXRlcm1pbmUgaWYgYSByb3cgY2FuIGJlIHNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgY2FuU2VsZWN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIFNUQVJUIEhFQURFUiAqL1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGhlYWRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUhlYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSBxdWlja0ZpbHRlcnM6IFF1aWNrRmlsdGVyW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEFjdGl2ZSBxdWljayBmaWx0ZXIgaWRlbnRpZmllclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZmlsdGVyIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RlZEZpbHRlcnNBbW91bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGZpbHRlciBidXR0b24gdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZWRpdCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVFZGl0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0aGUgZWRpdCBidXR0b24gaXMgbG9hZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdCBidXR0b24gaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25JY29uOiBJY29uVmFyaWFudCA9ICdwZW5jaWwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVkaXQgYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIGZvciB0aGUgZWRpdCBidXR0b24gdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRCdXR0b25UZW1wbGF0ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBxdWlja0ZpbHRlcjogRXZlbnRFbWl0dGVyPFF1aWNrRmlsdGVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgZmlsdGVyIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogU1RBUlQgRk9PVEVSICovXG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZm9vdGVyXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcGFnZSBzaXplIHNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVBhZ2VTaXplOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgcGFnaW5hdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBleHBvcnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVFeHBvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2U6IG51bWJlciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIGl0ZW1zXG4gICAgICovXG4gICAgQElucHV0KCkgdG90YWwhOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBpdGVtcyBwZXIgcGFnZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSBkZWZhdWx0U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIGZvciB0aGUgcGFnZSBzaXplXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGRlZmF1bHRTaXplT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBleHBvcnQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGhpZGUgd2hlbiB0aGVyZSBpcyBvbmx5IDEgcGFnZSBhdmFpbGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoaWRlT25TaW5nbGVQYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qIEVtcHR5IHN0YXRlIHN0YXJ0ICovXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZVR5cGU6ICdub19maWx0ZXInIHwgJ2ZpbHRlcmVkJyA9ICdub19maWx0ZXInO1xuXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUlsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9ICdlbXB0eS1zdGF0ZS1hZGQnO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVIZWFkZXIhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUNvbnRlbnQhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbiE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGVuYWJsZUVtcHR5U3RhdGVBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID1cbiAgICAgICAgJ2VtcHR5LXN0YXRlLXNlYXJjaCc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnQhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgZW1wdHkgc3RhdGUgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBlbXB0eVN0YXRlQWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qIEVtcHR5IHN0YXRlIGVuZCAqL1xuXG4gICAgcHVibGljIGNvbHVtbnM6IGFueVtdID0gW107XG4gICAgcHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBsb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICB9KTtcbiAgICBwcml2YXRlIF9jdHJsRG93biA9IGZhbHNlO1xuXG4gICAgLy8gQW5ndWxhciBzdHVmZlxuICAgIC8vIGN1c3RvbSBmaWx0ZXIgdGVtcGxhdGVcbiAgICBAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7XG4gICAgICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgICAgICBzdGF0aWM6IHRydWUsXG4gICAgfSlcbiAgICBwdWJsaWMgaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBjb2x1bW4gdGVtcGxhdGVzXG4gICAgcHJpdmF0ZSBfY29sdW1uRGVmaW5pdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICBzZXQgY29sdW1uRGVmaW5pdGlvbnModjogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPikge1xuICAgICAgICB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucyA9IHY7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuICAgIH1cbiAgICBnZXQgY29sdW1uRGVmaW5pdGlvbnMoKTogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucztcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgbW9kYWxcbiAgICBAQ29udGVudENoaWxkKFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgICAgIHN0YXRpYzogdHJ1ZSxcbiAgICB9KVxuICAgIHB1YmxpYyBmaWx0ZXJNb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGZpbHRlck1vZGFsU2hvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsSGVhZGVyVGV4dDogc3RyaW5nID0gJ0ZpbHRlcnMnO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsU2F2ZVRleHQ6IHN0cmluZyA9ICdTYXZlJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9ICdDYW5jZWwnO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsUmVzZXRUZXh0OiBzdHJpbmcgPSAnUmVzZXQgZmlsdGVycyc7XG5cbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZmlsdGVyTW9kYWxTaG93OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGZpbHRlck1vZGFsU2F2ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFJlc2V0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcGFyc2VJdGVtcyh0aGlzLml0ZW1zKTtcblxuICAgICAgICB0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNob3ckXG4gICAgICAgICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmZpbHRlck1vZGFsU2hvdy5uZXh0KHZhbHVlKSk7XG4gICAgICAgIC8vIHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlSXRlbXMoY2hhbmdlc1snaXRlbXMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Ftb3VudE9mTG9hZGluZ1Jvd3MnXSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuICAgICAgICAgICAgICAgIGxlbmd0aDogY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gIEBIb3N0TGlzdGVuZXIoJ2JvZHk6dGFibGVEZWZpbml0aW9uQ2hhbmdlZCcsIHsgdGFyZ2V0OiAnYm9keScgfSlcbiAgICAvLyAgb25UYWJsZURlZmluaXRpb25VcGRhdGVkKCkge1xuICAgIC8vICAgICAgdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgLy8gIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgICBrZXlVcCh7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcbiAgICB2aXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBDdXN0b21FdmVudDxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8YW55Pikge1xuICAgICAgICB0aGlzLnF1aWNrRmlsdGVyLmVtaXQoZGV0YWlsKTtcbiAgICB9XG5cbiAgICBvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZGV0YWlsKTtcbiAgICB9XG5cbiAgICBvbkZpbHRlck1vZGFsU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNhdmUubmV4dCgpO1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsUmVzZXQubmV4dChyZXNldFF1aWNrRmlsdGVyKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIGVtcHR5U3RhdGVDbGlja2VkKCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlSXRlbXMoaXRlbXM6IHN0cmluZykge1xuICAgICAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBpdGVtcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBKU09OLnBhcnNlKGl0ZW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUNvbHVtbnMoKSB7XG4gICAgICAgIC8vIGNvbnN0IGRlZmluaXRpb25zID1cbiAgICAgICAgLy8gXHR0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AtdGFibGUtZGVmaW5pdGlvbicpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zXG4gICAgICAgICkgYXMgVGFibGVDb2x1bW5bXTtcbiAgICAgICAgZGVmaW5pdGlvbnNBcnJheVtkZWZpbml0aW9uc0FycmF5Lmxlbmd0aCAtIDFdLmlzTGFzdCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zID0gZGVmaW5pdGlvbnNBcnJheTtcbiAgICB9XG5cbiAgICAvLyAgcHJpdmF0ZSBfZ2V0SGVhZGVyKCkge1xuICAgIC8vICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICA8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuICAgIC8vICAgICAgICAgICAgICB7dGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBpbmRleCkgPT4gKFxuICAgIC8vICAgICAgICAgICAgICAgICAgPHAtdGFibGUtY29sdW1uXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb2wubmFtZX1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiaGVhZGVyXCJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveD17dGhpcy5fZ2V0Q2hlY2tib3goaW5kZXgsIG51bGwsICdoZWFkZXInKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNvbHVtbj5cbiAgICAvLyAgICAgICAgICAgICAgKSl9XG4gICAgLy8gICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAvLyAgICAgICk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRSb3dzKCkge1xuICAgIC8vICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgIC8vICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgIC8vICAgICAgICAgICAgICB7XG4gICAgLy8gICAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcbiAgICAvLyAgICAgICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgICAgICAgKF8sIGkpID0+IChcbiAgICAvLyAgICAgICAgICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUhvdmVyPXtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gfHwgdGhpcy5lbmFibGVSb3dDbGlja1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgID5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fZ2V0TG9hZGluZ0NvbHVtbnMoaSl9XG4gICAgLy8gICAgICAgICAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgICAgICAgICApXG4gICAgLy8gICAgICAgICAgKTtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAvLyAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAvLyAgICAgICAgICAgICAgZW5hYmxlSG92ZXI9e3RoaXMuZW5hYmxlUm93U2VsZWN0aW9uIHx8IHRoaXMuZW5hYmxlUm93Q2xpY2t9XG4gICAgLy8gICAgICAgICAgICAgIG9uQ2xpY2s9eyhldikgPT4gdGhpcy5fcm93Q2xpY2soZXYsIGluZGV4KX1cbiAgICAvLyAgICAgICAgICA+XG4gICAgLy8gICAgICAgICAgICAgIHt0aGlzLl9nZXRSb3dDb2x1bW5zKGl0ZW0sIGluZGV4KX1cbiAgICAvLyAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgKSk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRSb3dDb2x1bW5zKGl0ZW0sIGluZGV4KSB7XG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBjb2xJbmRleCkgPT4ge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxwLXRhYmxlLWNvbHVtblxuICAgIC8vICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChjb2xJbmRleCwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaW5kZXg9e2NvbEluZGV4fVxuICAgIC8vICAgICAgICAgICAgICAgICAgcm93SW5kZXg9e2luZGV4fVxuICAgIC8vICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNvbHVtbj5cbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfSk7XG4gICAgLy8gIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRMb2FkaW5nQ29sdW1ucyhpbmRleCkge1xuICAgIC8vICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMubWFwKChjb2w6IFRhYmxlRGVmaW5pdGlvbiwgY29sSW5kZXgpID0+IHtcbiAgICAvLyAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgICA8cC10YWJsZS1jb2x1bW5cbiAgICAvLyAgICAgICAgICAgICAgICAgIGRlZmluaXRpb249e2NvbH1cbiAgICAvLyAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsb2FkaW5nXCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChjb2xJbmRleCwgaW5kZXgsICdsb2FkaW5nJyl9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpbmRleD17Y29sSW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICByb3dJbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9KTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldENoZWNrYm94KFxuICAgIC8vICAgICAgaW5kZXgsXG4gICAgLy8gICAgICByb3dJbmRleCxcbiAgICAvLyAgICAgIHZhcmlhbnQ6ICdoZWFkZXInIHwgJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnID0gJ2RlZmF1bHQnXG4gICAgLy8gICkge1xuICAgIC8vICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbiB8fCAhdGhpcy5zZWxlY3Rpb25LZXkgfHwgaW5kZXggIT09IDApIHtcbiAgICAvLyAgICAgICAgICByZXR1cm47XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGlmICh2YXJpYW50ID09PSAnbG9hZGluZycpIHtcbiAgICAvLyAgICAgICAgICByZXR1cm4gPHAtbG9hZGVyIHZhcmlhbnQ9XCJnaG9zdFwiIGNsYXNzPVwicm91bmRlZCB3LTYgaC02XCIgLz47XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGlmICh2YXJpYW50ID09PSAnaGVhZGVyJykge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxpbnB1dFxuICAgIC8vICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgLy8gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2KSA9PiB0aGlzLl9zZWxlY3RBbGxDaGFuZ2UoZXYpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5fc2VsZWN0aW9uQ29udGFpbnNBbGwoKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e3RoaXMuX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX1cbiAgICAvLyAgICAgICAgICAgICAgLz5cbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfVxuXG4gICAgLy8gICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbcm93SW5kZXhdO1xuXG4gICAgLy8gICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgIDxpbnB1dFxuICAgIC8vICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgIC8vICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIC8vICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2KSA9PiB0aGlzLl9jaGVja2JveENoYW5nZShldj8udGFyZ2V0LCByb3dJbmRleCl9XG4gICAgLy8gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmNhblNlbGVjdEtleSAmJiAhaXRlbVt0aGlzLmNhblNlbGVjdEtleV19XG4gICAgLy8gICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KX1cbiAgICAvLyAgICAgICAgICAvPlxuICAgIC8vICAgICAgKTtcbiAgICAvLyAgfVxuXG4gICAgcHVibGljIF9jaGVja2JveERpc2FibGVkKGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5TZWxlY3RLZXkgJiYgIWl0ZW1bdGhpcy5jYW5TZWxlY3RLZXldO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q2hlY2tlZFZhbHVlKCRldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQWRkID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCAuLi50b0FkZF07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3NbaV07XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgKGQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGQsIGkpID09PVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZSh2YWx1ZSwgaSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX2NoZWNrYm94Q2hhbmdlKHRhcmdldDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuICAgICAgICAgICAgdGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q2hlY2tlZFZhbHVlKHRhcmdldCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZlRvUmVtb3ZlID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpbmRleCwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3RlZFJvd3NdO1xuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZUb1JlbW92ZSwgMSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgdGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldD8uY2hlY2tlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRTZWxlY3Rpb25WYWx1ZShyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zKFxuICAgICAgICByb3c6IGFueSxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcmV0dXJuSW5kZXggPSBmYWxzZVxuICAgICk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUocm93LCBpbmRleCkgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoaXRlbSwgaW5kZXgpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiAhcmV0dXJuSW5kZXggPyByZXR1cm5WYWx1ZSA+PSAwIDogcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuICAgICAgICAgICAgaWYgKCFjb250YWlucykge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Rpb25JbmRldGVybWluYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRhaW5zQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cbiAgICAgICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWluc0NvdW50ID4gMCAmJiBjb250YWluc0NvdW50ICE9PSB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3Jvd0NsaWNrKCRldmVudDogeyB0YXJnZXQ6IGFueSB9LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fFxuICAgICAgICAgICAgdGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9maW5kUm93KCRldmVudC50YXJnZXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVJvd0NsaWNrKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKCRldmVudC50YXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG4gICAgICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgY3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGVja2JveCA9IHJvdz8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cbiAgICAgICAgaWYgKCFjaGVja2JveCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jaGVja2JveENoYW5nZShjaGVja2JveCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRSb3coZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRSb3dBY3Rpb24oZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlzLWFjdGlvbicpICE9PSBudWxsICYmXG4gICAgICAgICAgICBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09ICdmYWxzZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWw/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdwLXRhYmxlLXJvdycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRSb3dBY3Rpb24oZWw/LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbn1cbiIsIjxwLXRhYmxlLWNvbnRhaW5lcj5cbiAgICA8cC10YWJsZS1oZWFkZXJcbiAgICAgICAgKm5nSWY9XCJlbmFibGVIZWFkZXJcIlxuICAgICAgICBbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG4gICAgICAgIFthY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJdPVwiYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXCJcbiAgICAgICAgKHF1aWNrRmlsdGVyKT1cIihvblF1aWNrRmlsdGVyKVwiXG4gICAgICAgIFtlbmFibGVTZWFyY2hdPVwiZW5hYmxlU2VhcmNoXCJcbiAgICAgICAgW3F1ZXJ5XT1cInF1ZXJ5XCJcbiAgICAgICAgKHF1ZXJ5Q2hhbmdlKT1cIihvblF1ZXJ5Q2hhbmdlKVwiXG4gICAgICAgIFtlbmFibGVGaWx0ZXJdPVwiZW5hYmxlRmlsdGVyXCJcbiAgICAgICAgW3NlbGVjdGVkRmlsdGVyc0Ftb3VudF09XCJzZWxlY3RlZEZpbHRlcnNBbW91bnRcIlxuICAgICAgICBbZmlsdGVyQnV0dG9uVGVtcGxhdGVdPVwiZmlsdGVyQnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAoZmlsdGVyKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dCh0cnVlKVwiXG4gICAgICAgIFtlbmFibGVFZGl0XT1cImVuYWJsZUVkaXRcIlxuICAgICAgICBbY2FuRWRpdF09XCIhIXNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgICAgICBbZWRpdEJ1dHRvblRlbXBsYXRlXT1cImVkaXRCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgIFtlZGl0TG9hZGluZ109XCJlZGl0QnV0dG9uTG9hZGluZ1wiXG4gICAgICAgIFtlZGl0VGV4dF09XCJlZGl0QnV0dG9uVGV4dFwiXG4gICAgICAgIFtlZGl0SWNvbl09XCJlZGl0QnV0dG9uSWNvblwiXG4gICAgICAgIChlZGl0KT1cImVkaXQuZW1pdCgpXCJcbiAgICAgICAgW2l0ZW1zU2VsZWN0ZWRBbW91bnRdPVwic2VsZWN0ZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgIFtsb2FkaW5nXT1cImhlYWRlckxvYWRpbmdcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcC10YWJsZS1oZWFkZXI+XG5cbiAgICA8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxwLXRhYmxlLWNlbGwtbmd4XG4gICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sLm5hbWVcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cIlxuICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJfc2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnNBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIl9zZWxlY3Rpb25JbmRldGVybWluYXRlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3AtdGFibGUtcm93PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgY29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBsb2FkaW5nUm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrYm94VGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNiB3LTYgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zPy5sZW5ndGg7IGVsc2UgZW1wdHlTdGF0ZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtdGFibGUtY2VsbC1uZ3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxwLXRhYmxlLWZvb3RlclxuICAgICAgICAqbmdJZj1cImVuYWJsZUZvb3RlclwiXG4gICAgICAgIFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuICAgICAgICBbZW5hYmxlUGFnZVNpemVdPVwiZW5hYmxlUGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCIocGFnZVNpemVDaGFuZ2UpXCJcbiAgICAgICAgW2VuYWJsZVBhZ2luYXRpb25dPVwiZW5hYmxlUGFnaW5hdGlvblwiXG4gICAgICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgICAgICBbdG90YWxdPVwidG90YWxcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCIocGFnZUNoYW5nZSlcIlxuICAgICAgICBbZW5hYmxlRXhwb3J0XT1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgIChleHBvcnQpPVwiZXhwb3J0LmVtaXQoKVwiXG4gICAgICAgIFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuICAgID48L3AtdGFibGUtZm9vdGVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj5cbiAgICA8cC1tb2RhbFxuICAgICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsSGVhZGVyVGV4dFwiXG4gICAgICAgIFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG4gICAgICAgIChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbiB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmZsZXhcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrbWFya1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFNhdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgbWF4LXctWzIwcmVtXVxuICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgc2VsZi1jZW50ZXJcbiAgICAgICAgICAgIHB5LTI0XG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYi02XCJcbiAgICAgICAgPjwvcC1pbGx1c3RyYXRpb24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMTQgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICBtYXgtdy1bMjByZW1dXG4gICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgaXRlbXMtY2VudGVyXG4gICAgICAgICAgICBzZWxmLWNlbnRlclxuICAgICAgICAgICAgcHktMjRcbiAgICAgICAgICAgIHRleHQtY2VudGVyXG4gICAgICAgIFwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cImVtcHR5U3RhdGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNlwiXG4gICAgICAgID48L3AtaWxsdXN0cmF0aW9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlSGVhZGVyIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi02IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVDb250ZW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlQWN0aW9uIH19XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -72,6 +72,7 @@ export class TableCell {
|
|
|
72
72
|
'justify-end': this.definition?.align === 'end',
|
|
73
73
|
'font-semibold': this.variant !== 'header' && this.definition?.type === 'th',
|
|
74
74
|
'text-storm-dark': this.variant !== 'header' && this.definition?.type === 'th',
|
|
75
|
+
'pr-4': this.definition?.isLast === false,
|
|
75
76
|
...sizes,
|
|
76
77
|
};
|
|
77
78
|
}
|
|
@@ -208,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
208
209
|
type: HostBinding,
|
|
209
210
|
args: ['class']
|
|
210
211
|
}] } });
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXBlcmxlc3Mvc3JjL2xpYi9tb2R1bGVzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2VsbC90YWJsZS1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBSUgscUJBQXFCLEVBQ3JCLGVBQWUsR0FDbEIsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU16QixNQUFNLE9BQU8sU0FBUztJQUx0QjtRQU1JOztXQUVHO1FBQ00sWUFBTyxHQUFxQyxTQUFTLENBQUM7UUFFL0Q7O1dBRUc7UUFDTSxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sYUFBUSxHQUFXLENBQUMsQ0FBQztLQTZOakM7SUFsTUcsSUFDSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPO2dCQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNwQixDQUFDO1NBQ0w7UUFFRCxPQUFPO1lBQ0gsS0FBSyxFQUNELElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbEUsSUFBSSxFQUFFLElBQUks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S0FBSztzQkFBYixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRixLQUFLO3NCQURSLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtblNpemVzLFxuICAgIFRhYmxlQ29sdW1uU2l6ZXNLZXksXG4gICAgVGFibGVEZWZpbml0aW9uRGF0YSxcbiAgICBpc1RhYmxlQ29sdW1uU2l6ZXNLZXksXG4gICAgb2JqZWN0R2V0QnlQYXRoLFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXRhYmxlLWNlbGwtbmd4JyxcbiAgICBzdHlsZVVybHM6IFsndGFibGUtY2VsbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jZWxsLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFyaWFudCBvZiB0aGUgY29sdW1uXG4gICAgICovXG4gICAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnIHwgJ2hlYWRlcicgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSByb3dJbmRleDogbnVtYmVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB0YWJsZSBjb2x1bW5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBkZWZpbml0aW9uPzogYW55OyAvLyBUYWJsZURlZmluaXRpb25cblxuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtIGluIHF1ZXN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBjb2x1bW5cbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNoZWNrYm94IHRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KCkgY2hlY2tib3g6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgcmVmIGZvciB0aGUgY29udGVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5DbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogVGFibGVEZWZpbml0aW9uRGF0YSB8IHsgdmFsdWU6IHN0cmluZyB9IHtcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPz8gb2JqZWN0R2V0QnlQYXRoKHRoaXMuaXRlbSwgdGhpcy5kZWZpbml0aW9uLnBhdGgpLFxuICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICByb3dJbmRleDogdGhpcy5yb3dJbmRleCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyByZW5kZXIoKSB7XG4gICAgLy8gXHRyZXR1cm4gKFxuICAgIC8vIFx0XHQ8SG9zdFxuICAgIC8vIFx0XHRcdGNsYXNzPXt7XG4gICAgLy8gXHRcdFx0XHQncC10YWJsZS1jb2x1bW4nOiB0cnVlLFxuICAgIC8vIFx0XHRcdFx0W2B2YXJpYW50LSR7dGhpcy52YXJpYW50fWBdOiB0cnVlLFxuICAgIC8vIFx0XHRcdFx0Li4udGhpcy5fZ2V0Q29sdW1uQ2xhc3NlcygpLFxuICAgIC8vIFx0XHRcdH19XG4gICAgLy8gXHRcdD5cbiAgICAvLyBcdFx0XHR7dGhpcy5jaGVja2JveH1cblxuICAgIC8vIFx0XHRcdHt0aGlzLnZhcmlhbnQgPT09ICdsb2FkaW5nJyA/IChcbiAgICAvLyBcdFx0XHRcdDxwLWxvYWRlclxuICAgIC8vIFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuICAgIC8vIFx0XHRcdFx0XHRjbGFzcz1cInJvdW5kZWQgZmxleC0xIHctZnVsbCBoLTZcIlxuICAgIC8vIFx0XHRcdFx0Lz5cbiAgICAvLyBcdFx0XHQpIDogKFxuICAgIC8vIFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAvLyBcdFx0XHRcdFx0e3RoaXMudmFyaWFudCA9PT0gJ2hlYWRlcicgPyAoXG4gICAgLy8gXHRcdFx0XHRcdFx0dGhpcy5kYXRhLnZhbHVlXG4gICAgLy8gXHRcdFx0XHRcdCkgOiB0aGlzLmRlZmluaXRpb24udXNlU2xvdCA/IChcbiAgICAvLyBcdFx0XHRcdFx0XHQ8c2xvdCAvPlxuICAgIC8vIFx0XHRcdFx0XHQpIDogKFxuICAgIC8vIFx0XHRcdFx0XHRcdHRoaXMudGVtcGxhdGUodGhpcy5kYXRhIGFzIFRhYmxlRGVmaW5pdGlvbkRhdGEpXG4gICAgLy8gXHRcdFx0XHRcdCl9XG4gICAgLy8gXHRcdFx0XHQ8L2Rpdj5cbiAgICAvLyBcdFx0XHQpfVxuICAgIC8vIFx0XHQ8L0hvc3Q+XG4gICAgLy8gXHQpO1xuICAgIC8vIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5DbGFzc2VzKCkge1xuICAgICAgICBjb25zdCBzaXplcyA9IHRoaXMuZGVmaW5pdGlvbiA/IHRoaXMuX2dldFNpemVzKHRoaXMuZGVmaW5pdGlvbikgOiB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0JzpcbiAgICAgICAgICAgICAgICAhdGhpcy5kZWZpbml0aW9uPy5hbGlnbiB8fCB0aGlzLmRlZmluaXRpb24/LmFsaWduID09PSAnc3RhcnQnLFxuICAgICAgICAgICAgJ2p1c3RpZnktY2VudGVyJzogdGhpcy5kZWZpbml0aW9uPy5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICAgICAgICAnanVzdGlmeS1lbmQnOiB0aGlzLmRlZmluaXRpb24/LmFsaWduID09PSAnZW5kJyxcbiAgICAgICAgICAgICdmb250LXNlbWlib2xkJzpcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhbnQgIT09ICdoZWFkZXInICYmIHRoaXMuZGVmaW5pdGlvbj8udHlwZSA9PT0gJ3RoJyxcbiAgICAgICAgICAgICd0ZXh0LXN0b3JtLWRhcmsnOlxuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudCAhPT0gJ2hlYWRlcicgJiYgdGhpcy5kZWZpbml0aW9uPy50eXBlID09PSAndGgnLFxuICAgICAgICAgICAgLi4uc2l6ZXMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLypcbiAgICAgV2l0aCB0aGlzLCB3ZSBzaGFsbCBoYWNrIHRoZSBzeXN0ZW0gaW4gd2F5cyBubyBvbmUgd291bGQgZXZlciBoYXZlIHRob3VnaHQuXG5cbiAgICAgdy0xLzEyIHctMi8xMiB3LTMvMTIgdy00LzEyIHctNS8xMiB3LTYvMTIgdy03LzEyIHctOC8xMiB3LTkvMTIgdy0xMC8xMiB3LTExLzEyIHctMTIvMTJcbiAgICAgdGFibGV0OnctMS8xMiB0YWJsZXQ6dy0yLzEyIHRhYmxldDp3LTMvMTIgdGFibGV0OnctNC8xMiB0YWJsZXQ6dy01LzEyIHRhYmxldDp3LTYvMTIgdGFibGV0OnctNy8xMiB0YWJsZXQ6dy04LzEyIHRhYmxldDp3LTkvMTIgdGFibGV0OnctMTAvMTIgdGFibGV0OnctMTEvMTIgdGFibGV0OnctMTIvMTJcbiAgICAgZGVza3RvcC14czp3LTEvMTIgZGVza3RvcC14czp3LTIvMTIgZGVza3RvcC14czp3LTMvMTIgZGVza3RvcC14czp3LTQvMTIgZGVza3RvcC14czp3LTUvMTIgZGVza3RvcC14czp3LTYvMTIgZGVza3RvcC14czp3LTcvMTIgZGVza3RvcC14czp3LTgvMTIgZGVza3RvcC14czp3LTkvMTIgZGVza3RvcC14czp3LTEwLzEyIGRlc2t0b3AteHM6dy0xMS8xMiBkZXNrdG9wLXhzOnctMTIvMTJcbiAgICAgZGVza3RvcC14czp3LTEvMTIgZGVza3RvcC14czp3LTIvMTIgZGVza3RvcC14czp3LTMvMTIgZGVza3RvcC14czp3LTQvMTIgZGVza3RvcC14czp3LTUvMTIgZGVza3RvcC14czp3LTYvMTIgZGVza3RvcC14czp3LTcvMTIgZGVza3RvcC14czp3LTgvMTIgZGVza3RvcC14czp3LTkvMTIgZGVza3RvcC14czp3LTEwLzEyIGRlc2t0b3AteHM6dy0xMS8xMiBkZXNrdG9wLXhzOnctMTIvMTJcbiAgICAgZGVza3RvcC1zbTp3LTEvMTIgZGVza3RvcC1zbTp3LTIvMTIgZGVza3RvcC1zbTp3LTMvMTIgZGVza3RvcC1zbTp3LTQvMTIgZGVza3RvcC1zbTp3LTUvMTIgZGVza3RvcC1zbTp3LTYvMTIgZGVza3RvcC1zbTp3LTcvMTIgZGVza3RvcC1zbTp3LTgvMTIgZGVza3RvcC1zbTp3LTkvMTIgZGVza3RvcC1zbTp3LTEwLzEyIGRlc2t0b3Atc206dy0xMS8xMiBkZXNrdG9wLXNtOnctMTIvMTJcbiAgICAgZGVza3RvcDp3LTEvMTIgZGVza3RvcDp3LTIvMTIgZGVza3RvcDp3LTMvMTIgZGVza3RvcDp3LTQvMTIgZGVza3RvcDp3LTUvMTIgZGVza3RvcDp3LTYvMTIgZGVza3RvcDp3LTcvMTIgZGVza3RvcDp3LTgvMTIgZGVza3RvcDp3LTkvMTIgZGVza3RvcDp3LTEwLzEyIGRlc2t0b3A6dy0xMS8xMiBkZXNrdG9wOnctMTIvMTJcbiAgICAgZGVza3RvcC1sZzp3LTEvMTIgZGVza3RvcC1sZzp3LTIvMTIgZGVza3RvcC1sZzp3LTMvMTIgZGVza3RvcC1sZzp3LTQvMTIgZGVza3RvcC1sZzp3LTUvMTIgZGVza3RvcC1sZzp3LTYvMTIgZGVza3RvcC1sZzp3LTcvMTIgZGVza3RvcC1sZzp3LTgvMTIgZGVza3RvcC1sZzp3LTkvMTIgZGVza3RvcC1sZzp3LTEwLzEyIGRlc2t0b3AtbGc6dy0xMS8xMiBkZXNrdG9wLWxnOnctMTIvMTJcbiAgICAgZGVza3RvcC14bDp3LTEvMTIgZGVza3RvcC14bDp3LTIvMTIgZGVza3RvcC14bDp3LTMvMTIgZGVza3RvcC14bDp3LTQvMTIgZGVza3RvcC14bDp3LTUvMTIgZGVza3RvcC14bDp3LTYvMTIgZGVza3RvcC14bDp3LTcvMTIgZGVza3RvcC14bDp3LTgvMTIgZGVza3RvcC14bDp3LTkvMTIgZGVza3RvcC14bDp3LTEwLzEyIGRlc2t0b3AteGw6dy0xMS8xMiBkZXNrdG9wLXhsOnctMTIvMTJcbiAgICAgaGlkZGVuIGZsZXhcbiAgICAgdGFibGV0OmhpZGRlbiB0YWJsZXQ6ZmxleFxuICAgICBkZXNrdG9wLXhzOmhpZGRlbiBkZXNrdG9wLXhzOmZsZXhcbiAgICAgZGVza3RvcC1zbTpoaWRkZW4gZGVza3RvcC1zbTpmbGV4XG4gICAgIGRlc2t0b3A6aGlkZGVuIGRlc2t0b3A6ZmxleFxuICAgICBkZXNrdG9wLWxnOmhpZGRlbiBkZXNrdG9wLWxnOmZsZXhcbiAgICAgZGVza3RvcC14bDpoaWRkZW4gZGVza3RvcC14bDpmbGV4XG5cblxuICAgICAgICDioIDioIDioIDioIDioIDio6Dio7Tio7bio7/io7/ioL/io7fio7bio6Tio4TioYDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio6Dio7Tio7bio7fioL/io7/io7/io7bio6bio4DioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qKA4qO+4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO24qOm4qOs4qGJ4qCS4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCa4qKJ4qOl4qO04qO+4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qOn4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKhvuKgv+Kgm+Kgm+Kgm+Kgm+Kgv+Kiv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjt+KjhOKggOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjoOKjvuKjv+Kjv+Kjv+Kjv+Kjv+Kgv+Kgv+Kgm+Kgm+Kgm+Kgm+Kgv+Kip+KggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioJnioLvio7/io7/io7/io7/io7/ioYTioIDioIDioIDioIDioIDioIDio6Dio7/io7/io7/io7/iob/ioJ/ioInioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCZ4qK/4qO/4qGE4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKw4qO/4qG/4qCL4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKjoOKjpOKgtuKgtuKgtuKgsOKgpuKjpOKjgOKggOKgmeKjt+KggOKggOKggOKggOKggOKggOKggOKioOKhv+Kgi+KigOKjgOKjpOKitOKghuKgsuKgtuKgtuKjpOKjhOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioJjio4bioIDioIDioqDio77io6vio7bio77io7/io7/io7/io7/io7fio6/io7/io6bioIjioIPioYfioIDioIDioIDioIDiorjioJjiooHio7bio7/io7Xio77io7/io7/io7/io7/io7fio6bio53io7fioYTioIDioIDiobDioILioIBcbiAgICAgICAg4qCA4qCA4qOo4qO34qO24qO/4qOn4qOb4qOb4qC/4qC/4qO/4qK/4qO/4qO/4qOb4qO/4qG/4qCA4qCA4qGH4qCA4qCA4qCA4qCA4qK44qCA4qCI4qK/4qOf4qOb4qC/4qK/4qG/4qK/4qK/4qK/4qOb4qOr4qO84qG/4qO24qO+4qOF4qGA4qCAXG4gICAgICAgIOKigOKhvOKgi+KggeKggOKggOKgiOKgieKgm+Kgm+Kgu+Kgn+KguOKgm+Kgi+KgieKggeKggOKggOKiuOKhh+KggOKggOKghOKggOKiuOKhhOKggOKggOKgiOKgieKgmeKgm+Kgg+Kgu+Kgm+Kgm+Kgm+KgieKggeKggOKggOKgiOKgmeKip+KhgFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio7/ioYfioqDioIDioIDioIDiorjio7fioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKA4qO+4qO/4qGH4qCA4qCA4qCA4qCA4qK44qO/4qO34qGA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKjsOKgn+KggeKjv+Kgh+KggOKggOKggOKggOKiuOKhh+KgmeKiv+KjhuKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioLDio4TioIDioIDioIDioIDioIDioIDioIDioIDiooDio6Dio77ioJbiob7ioIHioIDioIDio7/ioIDioIDioIDioIDioIDioJjio7/ioIDioIDioJnioYfiorjio7fio4TioYDioIDioIDioIDioIDioIDioIDioIDioIDio7DioITioIBcbiAgICAgICAg4qCA4qCA4qK74qO34qGm4qOk4qOk4qOk4qG04qC24qC/4qCb4qCJ4qCB4qCA4qKz4qCA4qKg4qGA4qK/4qOA4qCA4qCA4qCA4qCA4qOg4qGf4qKA4qOA4qKg4qCH4qCA4qCI4qCZ4qCb4qC34qC24qKm4qOk4qOk4qOk4qK04qO+4qGP4qCA4qCAXG4gICAgICAgIOKggOKggOKgiOKjv+Kjp+KgmeKjv+Kjt+KjhOKggOKggOKggOKggOKggOKggOKggOKggOKgmOKgm+KiiuKjmeKgm+KgkuKgkuKim+Kji+KhmuKgm+KgieKggOKggOKggOKggOKggOKggOKggOKggOKjoOKjv+Khv+KggeKjvuKhv+KggOKggOKggFxuICAgICAgICDioIDioIDioIDioJjio7/io4fioIjior/io7/io6bioIDioIDioIDioIDioIDioIDioIDioIDio7Dio7/io7/io7/iob/ior/io7/io7/io7/io4bioIDioIDioIDioIDioIDioIDioIDiooDio7zio7/ioZ/ioIHio7ziob/ioIHioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCY4qO/4qOm4qCA4qC74qO/4qO34qOm4qOk4qOk4qO24qO24qO24qO/4qO/4qO/4qO/4qCP4qCA4qCA4qC74qO/4qO/4qO/4qO/4qO24qO24qO24qOm4qOk4qO04qO/4qO/4qCP4qKA4qO84qG/4qCB4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKgmOKiv+Kjt+KjhOKgmeKgu+Kgv+Kgv+Kgv+Kgv+Kgv+Kiv+Kjv+Kjv+Kjv+KjgeKjgOKjgOKjgOKjgOKjmeKjv+Kjv+Kjv+Kgv+Kgv+Kgv+Kgv+Kgv+Kgv+Kgn+KggeKjoOKjv+Khv+KggeKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIjioLvio6/ioJnioqbio4DioIDioIDioIDioIDioIDioInioInioInioInioInioInioInioInioInioInioInioInioIDioIDioIDioIDioIDio6DioLTioovio77ioJ/ioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCZ4qKn4qGA4qCI4qCJ4qCS4qCA4qCA4qCA4qCA4qCA4qCA4qOA4qCA4qCA4qCA4qCA4qKA4qCA4qCA4qCA4qCA4qCA4qCQ4qCS4qCJ4qCB4qKA4qG+4qCD4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKgiOKgs+KjhOKggOKggOKggOKggOKggOKggOKggOKggOKgu+Kjv+Kjv+Kjv+Kjv+Kgi+KggOKggOKggOKggOKggOKggOKggOKggOKjoOKgn+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioJjioqbioYDioIDioIDioIDioIDioIDioIDioIDio7jio7/io7/ioYfioIDioIDioIDioIDioIDioIDioIDiooDiobTioIHioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qO/4qO/4qO/4qO/4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCL4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKgkOKjv+Kjv+Kjv+Kjv+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDio7/io7/io7/iob/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qK74qO/4qO/4qGH4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKguOKjv+Kjv+Kgg+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U2l6ZXMoXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNpemVzLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgICBzaXplczogJ2F1dG8nIHwgJ2hpZGRlbicgfCAnZnVsbCcgfCBudW1iZXIgfCBUYWJsZUNvbHVtblNpemVzO1xuICAgICAgICB9IC8qIFRhYmxlIERlZmluaXRpb24gKi9cbiAgICApIHtcbiAgICAgICAgaWYgKHNpemVzID09PSAnYXV0bycgfHwgIXNpemVzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICd3LWF1dG8nOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaXplcyA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzaXplcyA9IHNpemVzIGFzIFRhYmxlQ29sdW1uU2l6ZXM7XG4gICAgICAgICAgICBjb25zdCBjbGFzc2VzOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGxldCBwcmV2aW91c1NpemU6IFRhYmxlQ29sdW1uU2l6ZXNLZXkgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHNpemUgaW4gc2l6ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVGFibGVDb2x1bW5TaXplc0tleShzaXplcywgc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNpemUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZXMuZGVmYXVsdCA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbJ2hpZGRlbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbYHctJHtzaXplcy5kZWZhdWx0fS8xMmBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gc2l6ZXNbc2l6ZV07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzU2l6ZSA/IHNpemVzW3ByZXZpb3VzU2l6ZV0gOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPT09ICdoaWRkZW4nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbYCR7c2l6ZX06ZmxleGBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzW2Ake3NpemV9OmhpZGRlbmBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gMTIgfHwgY3VycmVudFZhbHVlID09PSAnZnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tgJHtzaXplfTp3LWZ1bGxgXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlc1tgJHtzaXplfTp3LSR7Y3VycmVudFZhbHVlfS8xMmBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NpemUgPSBzaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaXplcyA9PT0gMTIgfHwgc2l6ZXMgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAndy1mdWxsJzogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpcyBhIG51bWJlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtgdy0ke3NpemVzfS8xMmBdOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja2JveFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGVja2JveFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInZhcmlhbnRcIj5cbiAgICA8cC1sb2FkZXJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsb2FkaW5nJ1wiXG4gICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgIGNsYXNzPVwiaC02IHctZnVsbCBmbGV4LTEgcm91bmRlZFwiXG4gICAgPjwvcC1sb2FkZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInaGVhZGVyJ1wiXG4gICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgW2NsYXNzLmp1c3RpZnktc3RhcnRdPVwiZGVmaW5pdGlvbi5hbGlnbiA9PT0gJ3N0YXJ0J1wiXG4gICAgICAgIFtjbGFzcy5qdXN0aWZ5LWNlbnRlcl09XCJkZWZpbml0aW9uLmFsaWduID09PSAnY2VudGVyJ1wiXG4gICAgICAgIFtjbGFzcy5qdXN0aWZ5LWVuZF09XCJkZWZpbml0aW9uLmFsaWduID09PSAnZW5kJ1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICBbY2xhc3MuanVzdGlmeS1zdGFydF09XCJkZWZpbml0aW9uLmFsaWduID09PSAnc3RhcnQnXCJcbiAgICAgICAgW2NsYXNzLmp1c3RpZnktY2VudGVyXT1cImRlZmluaXRpb24uYWxpZ24gPT09ICdjZW50ZXInXCJcbiAgICAgICAgW2NsYXNzLmp1c3RpZnktZW5kXT1cImRlZmluaXRpb24uYWxpZ24gPT09ICdlbmQnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSB2YWx1ZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogZGF0YVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjdmFsdWVUZW1wbGF0ZT5cbiAgICB7eyBkYXRhLnZhbHVlIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXBlcmxlc3Mvc3JjL2xpYi9tb2R1bGVzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2VsbC90YWJsZS1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGVBQWUsR0FJbEIsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU16QixNQUFNLE9BQU8sU0FBUztJQUx0QjtRQU1JOztXQUVHO1FBQ00sWUFBTyxHQUFxQyxTQUFTLENBQUM7UUFFL0Q7O1dBRUc7UUFDTSxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sYUFBUSxHQUFXLENBQUMsQ0FBQztLQThOakM7SUFuTUcsSUFDSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPO2dCQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNwQixDQUFDO1NBQ0w7UUFFRCxPQUFPO1lBQ0gsS0FBSyxFQUNELElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbEUsSUFBSSxFQUFFLElBQUks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Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRixLQUFLO3NCQURSLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBpc1RhYmxlQ29sdW1uU2l6ZXNLZXksXG4gICAgb2JqZWN0R2V0QnlQYXRoLFxuICAgIFRhYmxlQ29sdW1uU2l6ZXMsXG4gICAgVGFibGVDb2x1bW5TaXplc0tleSxcbiAgICBUYWJsZURlZmluaXRpb25EYXRhLFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXRhYmxlLWNlbGwtbmd4JyxcbiAgICBzdHlsZVVybHM6IFsndGFibGUtY2VsbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jZWxsLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFyaWFudCBvZiB0aGUgY29sdW1uXG4gICAgICovXG4gICAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnIHwgJ2hlYWRlcicgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSByb3dJbmRleDogbnVtYmVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB0YWJsZSBjb2x1bW5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBkZWZpbml0aW9uPzogYW55OyAvLyBUYWJsZURlZmluaXRpb25cblxuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtIGluIHF1ZXN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBjb2x1bW5cbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNoZWNrYm94IHRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KCkgY2hlY2tib3g6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgcmVmIGZvciB0aGUgY29udGVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5DbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogVGFibGVEZWZpbml0aW9uRGF0YSB8IHsgdmFsdWU6IHN0cmluZyB9IHtcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPz8gb2JqZWN0R2V0QnlQYXRoKHRoaXMuaXRlbSwgdGhpcy5kZWZpbml0aW9uLnBhdGgpLFxuICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICByb3dJbmRleDogdGhpcy5yb3dJbmRleCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyByZW5kZXIoKSB7XG4gICAgLy8gXHRyZXR1cm4gKFxuICAgIC8vIFx0XHQ8SG9zdFxuICAgIC8vIFx0XHRcdGNsYXNzPXt7XG4gICAgLy8gXHRcdFx0XHQncC10YWJsZS1jb2x1bW4nOiB0cnVlLFxuICAgIC8vIFx0XHRcdFx0W2B2YXJpYW50LSR7dGhpcy52YXJpYW50fWBdOiB0cnVlLFxuICAgIC8vIFx0XHRcdFx0Li4udGhpcy5fZ2V0Q29sdW1uQ2xhc3NlcygpLFxuICAgIC8vIFx0XHRcdH19XG4gICAgLy8gXHRcdD5cbiAgICAvLyBcdFx0XHR7dGhpcy5jaGVja2JveH1cblxuICAgIC8vIFx0XHRcdHt0aGlzLnZhcmlhbnQgPT09ICdsb2FkaW5nJyA/IChcbiAgICAvLyBcdFx0XHRcdDxwLWxvYWRlclxuICAgIC8vIFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuICAgIC8vIFx0XHRcdFx0XHRjbGFzcz1cInJvdW5kZWQgZmxleC0xIHctZnVsbCBoLTZcIlxuICAgIC8vIFx0XHRcdFx0Lz5cbiAgICAvLyBcdFx0XHQpIDogKFxuICAgIC8vIFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAvLyBcdFx0XHRcdFx0e3RoaXMudmFyaWFudCA9PT0gJ2hlYWRlcicgPyAoXG4gICAgLy8gXHRcdFx0XHRcdFx0dGhpcy5kYXRhLnZhbHVlXG4gICAgLy8gXHRcdFx0XHRcdCkgOiB0aGlzLmRlZmluaXRpb24udXNlU2xvdCA/IChcbiAgICAvLyBcdFx0XHRcdFx0XHQ8c2xvdCAvPlxuICAgIC8vIFx0XHRcdFx0XHQpIDogKFxuICAgIC8vIFx0XHRcdFx0XHRcdHRoaXMudGVtcGxhdGUodGhpcy5kYXRhIGFzIFRhYmxlRGVmaW5pdGlvbkRhdGEpXG4gICAgLy8gXHRcdFx0XHRcdCl9XG4gICAgLy8gXHRcdFx0XHQ8L2Rpdj5cbiAgICAvLyBcdFx0XHQpfVxuICAgIC8vIFx0XHQ8L0hvc3Q+XG4gICAgLy8gXHQpO1xuICAgIC8vIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5DbGFzc2VzKCkge1xuICAgICAgICBjb25zdCBzaXplcyA9IHRoaXMuZGVmaW5pdGlvbiA/IHRoaXMuX2dldFNpemVzKHRoaXMuZGVmaW5pdGlvbikgOiB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0JzpcbiAgICAgICAgICAgICAgICAhdGhpcy5kZWZpbml0aW9uPy5hbGlnbiB8fCB0aGlzLmRlZmluaXRpb24/LmFsaWduID09PSAnc3RhcnQnLFxuICAgICAgICAgICAgJ2p1c3RpZnktY2VudGVyJzogdGhpcy5kZWZpbml0aW9uPy5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICAgICAgICAnanVzdGlmeS1lbmQnOiB0aGlzLmRlZmluaXRpb24/LmFsaWduID09PSAnZW5kJyxcbiAgICAgICAgICAgICdmb250LXNlbWlib2xkJzpcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhbnQgIT09ICdoZWFkZXInICYmIHRoaXMuZGVmaW5pdGlvbj8udHlwZSA9PT0gJ3RoJyxcbiAgICAgICAgICAgICd0ZXh0LXN0b3JtLWRhcmsnOlxuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudCAhPT0gJ2hlYWRlcicgJiYgdGhpcy5kZWZpbml0aW9uPy50eXBlID09PSAndGgnLFxuICAgICAgICAgICAgJ3ByLTQnOiB0aGlzLmRlZmluaXRpb24/LmlzTGFzdCA9PT0gZmFsc2UsXG4gICAgICAgICAgICAuLi5zaXplcyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKlxuICAgICBXaXRoIHRoaXMsIHdlIHNoYWxsIGhhY2sgdGhlIHN5c3RlbSBpbiB3YXlzIG5vIG9uZSB3b3VsZCBldmVyIGhhdmUgdGhvdWdodC5cblxuICAgICB3LTEvMTIgdy0yLzEyIHctMy8xMiB3LTQvMTIgdy01LzEyIHctNi8xMiB3LTcvMTIgdy04LzEyIHctOS8xMiB3LTEwLzEyIHctMTEvMTIgdy0xMi8xMlxuICAgICB0YWJsZXQ6dy0xLzEyIHRhYmxldDp3LTIvMTIgdGFibGV0OnctMy8xMiB0YWJsZXQ6dy00LzEyIHRhYmxldDp3LTUvMTIgdGFibGV0OnctNi8xMiB0YWJsZXQ6dy03LzEyIHRhYmxldDp3LTgvMTIgdGFibGV0OnctOS8xMiB0YWJsZXQ6dy0xMC8xMiB0YWJsZXQ6dy0xMS8xMiB0YWJsZXQ6dy0xMi8xMlxuICAgICBkZXNrdG9wLXhzOnctMS8xMiBkZXNrdG9wLXhzOnctMi8xMiBkZXNrdG9wLXhzOnctMy8xMiBkZXNrdG9wLXhzOnctNC8xMiBkZXNrdG9wLXhzOnctNS8xMiBkZXNrdG9wLXhzOnctNi8xMiBkZXNrdG9wLXhzOnctNy8xMiBkZXNrdG9wLXhzOnctOC8xMiBkZXNrdG9wLXhzOnctOS8xMiBkZXNrdG9wLXhzOnctMTAvMTIgZGVza3RvcC14czp3LTExLzEyIGRlc2t0b3AteHM6dy0xMi8xMlxuICAgICBkZXNrdG9wLXhzOnctMS8xMiBkZXNrdG9wLXhzOnctMi8xMiBkZXNrdG9wLXhzOnctMy8xMiBkZXNrdG9wLXhzOnctNC8xMiBkZXNrdG9wLXhzOnctNS8xMiBkZXNrdG9wLXhzOnctNi8xMiBkZXNrdG9wLXhzOnctNy8xMiBkZXNrdG9wLXhzOnctOC8xMiBkZXNrdG9wLXhzOnctOS8xMiBkZXNrdG9wLXhzOnctMTAvMTIgZGVza3RvcC14czp3LTExLzEyIGRlc2t0b3AteHM6dy0xMi8xMlxuICAgICBkZXNrdG9wLXNtOnctMS8xMiBkZXNrdG9wLXNtOnctMi8xMiBkZXNrdG9wLXNtOnctMy8xMiBkZXNrdG9wLXNtOnctNC8xMiBkZXNrdG9wLXNtOnctNS8xMiBkZXNrdG9wLXNtOnctNi8xMiBkZXNrdG9wLXNtOnctNy8xMiBkZXNrdG9wLXNtOnctOC8xMiBkZXNrdG9wLXNtOnctOS8xMiBkZXNrdG9wLXNtOnctMTAvMTIgZGVza3RvcC1zbTp3LTExLzEyIGRlc2t0b3Atc206dy0xMi8xMlxuICAgICBkZXNrdG9wOnctMS8xMiBkZXNrdG9wOnctMi8xMiBkZXNrdG9wOnctMy8xMiBkZXNrdG9wOnctNC8xMiBkZXNrdG9wOnctNS8xMiBkZXNrdG9wOnctNi8xMiBkZXNrdG9wOnctNy8xMiBkZXNrdG9wOnctOC8xMiBkZXNrdG9wOnctOS8xMiBkZXNrdG9wOnctMTAvMTIgZGVza3RvcDp3LTExLzEyIGRlc2t0b3A6dy0xMi8xMlxuICAgICBkZXNrdG9wLWxnOnctMS8xMiBkZXNrdG9wLWxnOnctMi8xMiBkZXNrdG9wLWxnOnctMy8xMiBkZXNrdG9wLWxnOnctNC8xMiBkZXNrdG9wLWxnOnctNS8xMiBkZXNrdG9wLWxnOnctNi8xMiBkZXNrdG9wLWxnOnctNy8xMiBkZXNrdG9wLWxnOnctOC8xMiBkZXNrdG9wLWxnOnctOS8xMiBkZXNrdG9wLWxnOnctMTAvMTIgZGVza3RvcC1sZzp3LTExLzEyIGRlc2t0b3AtbGc6dy0xMi8xMlxuICAgICBkZXNrdG9wLXhsOnctMS8xMiBkZXNrdG9wLXhsOnctMi8xMiBkZXNrdG9wLXhsOnctMy8xMiBkZXNrdG9wLXhsOnctNC8xMiBkZXNrdG9wLXhsOnctNS8xMiBkZXNrdG9wLXhsOnctNi8xMiBkZXNrdG9wLXhsOnctNy8xMiBkZXNrdG9wLXhsOnctOC8xMiBkZXNrdG9wLXhsOnctOS8xMiBkZXNrdG9wLXhsOnctMTAvMTIgZGVza3RvcC14bDp3LTExLzEyIGRlc2t0b3AteGw6dy0xMi8xMlxuICAgICBoaWRkZW4gZmxleFxuICAgICB0YWJsZXQ6aGlkZGVuIHRhYmxldDpmbGV4XG4gICAgIGRlc2t0b3AteHM6aGlkZGVuIGRlc2t0b3AteHM6ZmxleFxuICAgICBkZXNrdG9wLXNtOmhpZGRlbiBkZXNrdG9wLXNtOmZsZXhcbiAgICAgZGVza3RvcDpoaWRkZW4gZGVza3RvcDpmbGV4XG4gICAgIGRlc2t0b3AtbGc6aGlkZGVuIGRlc2t0b3AtbGc6ZmxleFxuICAgICBkZXNrdG9wLXhsOmhpZGRlbiBkZXNrdG9wLXhsOmZsZXhcblxuXG4gICAgICAgIOKggOKggOKggOKggOKggOKjoOKjtOKjtuKjv+Kjv+Kgv+Kjt+KjtuKjpOKjhOKhgOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjoOKjtOKjtuKjt+Kgv+Kjv+Kjv+KjtuKjpuKjgOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDiooDio77io7/io7/io7/io7/io7/io7/io7/io7bio6bio6zioYnioJLioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioJrioonio6Xio7Tio77io7/io7/io7/io7/io7/io7/io7/io6fioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qG+4qC/4qCb4qCb4qCb4qCb4qC/4qK/4qO/4qO/4qO/4qO/4qO/4qO34qOE4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKA4qOg4qO+4qO/4qO/4qO/4qO/4qO/4qC/4qC/4qCb4qCb4qCb4qCb4qC/4qKn4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKgmeKgu+Kjv+Kjv+Kjv+Kjv+Kjv+KhhOKggOKggOKggOKggOKggOKggOKjoOKjv+Kjv+Kjv+Kjv+Khv+Kgn+KgieKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioJnior/io7/ioYTioIDioIDioIDioIDioIDioIDioIDioIDiorDio7/iob/ioIvioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qOg4qOk4qC24qC24qC24qCw4qCm4qOk4qOA4qCA4qCZ4qO34qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKg4qG/4qCL4qKA4qOA4qOk4qK04qCG4qCy4qC24qC24qOk4qOE4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKgmOKjhuKggOKggOKioOKjvuKjq+KjtuKjvuKjv+Kjv+Kjv+Kjv+Kjt+Kjr+Kjv+KjpuKgiOKgg+Khh+KggOKggOKggOKggOKiuOKgmOKigeKjtuKjv+KjteKjvuKjv+Kjv+Kjv+Kjv+Kjt+KjpuKjneKjt+KhhOKggOKggOKhsOKgguKggFxuICAgICAgICDioIDioIDio6jio7fio7bio7/io6fio5vio5vioL/ioL/io7/ior/io7/io7/io5vio7/iob/ioIDioIDioYfioIDioIDioIDioIDiorjioIDioIjior/io5/io5vioL/ior/iob/ior/ior/ior/io5vio6vio7ziob/io7bio77io4XioYDioIBcbiAgICAgICAg4qKA4qG84qCL4qCB4qCA4qCA4qCI4qCJ4qCb4qCb4qC74qCf4qC44qCb4qCL4qCJ4qCB4qCA4qCA4qK44qGH4qCA4qCA4qCE4qCA4qK44qGE4qCA4qCA4qCI4qCJ4qCZ4qCb4qCD4qC74qCb4qCb4qCb4qCJ4qCB4qCA4qCA4qCI4qCZ4qKn4qGAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjv+Khh+KioOKggOKggOKggOKiuOKjt+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio77io7/ioYfioIDioIDioIDioIDiorjio7/io7fioYDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qOw4qCf4qCB4qO/4qCH4qCA4qCA4qCA4qCA4qK44qGH4qCZ4qK/4qOG4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKgsOKjhOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjoOKjvuKgluKhvuKggeKggOKggOKjv+KggOKggOKggOKggOKggOKgmOKjv+KggOKggOKgmeKhh+KiuOKjt+KjhOKhgOKggOKggOKggOKggOKggOKggOKggOKggOKjsOKghOKggFxuICAgICAgICDioIDioIDiorvio7fioabio6Tio6Tio6TiobTioLbioL/ioJvioInioIHioIDiorPioIDioqDioYDior/io4DioIDioIDioIDioIDio6DioZ/iooDio4DioqDioIfioIDioIjioJnioJvioLfioLbioqbio6Tio6Tio6TiorTio77ioY/ioIDioIBcbiAgICAgICAg4qCA4qCA4qCI4qO/4qOn4qCZ4qO/4qO34qOE4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCY4qCb4qKK4qOZ4qCb4qCS4qCS4qKb4qOL4qGa4qCb4qCJ4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qOg4qO/4qG/4qCB4qO+4qG/4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKgmOKjv+Kjh+KgiOKiv+Kjv+KjpuKggOKggOKggOKggOKggOKggOKggOKggOKjsOKjv+Kjv+Kjv+Khv+Kiv+Kjv+Kjv+Kjv+KjhuKggOKggOKggOKggOKggOKggOKggOKigOKjvOKjv+Khn+KggeKjvOKhv+KggeKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioJjio7/io6bioIDioLvio7/io7fio6bio6Tio6Tio7bio7bio7bio7/io7/io7/io7/ioI/ioIDioIDioLvio7/io7/io7/io7/io7bio7bio7bio6bio6Tio7Tio7/io7/ioI/iooDio7ziob/ioIHioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCY4qK/4qO34qOE4qCZ4qC74qC/4qC/4qC/4qC/4qC/4qK/4qO/4qO/4qO/4qOB4qOA4qOA4qOA4qOA4qOZ4qO/4qO/4qO/4qC/4qC/4qC/4qC/4qC/4qC/4qCf4qCB4qOg4qO/4qG/4qCB4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKgiOKgu+Kjr+KgmeKipuKjgOKggOKggOKggOKggOKggOKgieKgieKgieKgieKgieKgieKgieKgieKgieKgieKgieKgieKggOKggOKggOKggOKggOKjoOKgtOKii+KjvuKgn+KggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioJnioqfioYDioIjioInioJLioIDioIDioIDioIDioIDioIDio4DioIDioIDioIDioIDiooDioIDioIDioIDioIDioIDioJDioJLioInioIHiooDiob7ioIPioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCI4qCz4qOE4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qC74qO/4qO/4qO/4qO/4qCL4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qOg4qCf4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKgmOKipuKhgOKggOKggOKggOKggOKggOKggOKggOKjuOKjv+Kjv+Khh+KggOKggOKggOKggOKggOKggOKggOKigOKhtOKggeKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDio7/io7/io7/io7/ioIDioIDioIDioIDioIDioIDioIDioIvioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCQ4qO/4qO/4qO/4qO/4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgICAgIOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKjv+Kjv+Kjv+Khv+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggFxuICAgICAgICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiorvio7/io7/ioYfioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIBcbiAgICAgICAg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qC44qO/4qO/4qCD4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCAXG4gICAgKi9cbiAgICBwcml2YXRlIF9nZXRTaXplcyhcbiAgICAgICAge1xuICAgICAgICAgICAgc2l6ZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICAgIHNpemVzOiAnYXV0bycgfCAnaGlkZGVuJyB8ICdmdWxsJyB8IG51bWJlciB8IFRhYmxlQ29sdW1uU2l6ZXM7XG4gICAgICAgIH0gLyogVGFibGUgRGVmaW5pdGlvbiAqL1xuICAgICkge1xuICAgICAgICBpZiAoc2l6ZXMgPT09ICdhdXRvJyB8fCAhc2l6ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3ctYXV0byc6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVzID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzaXplcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHNpemVzID0gc2l6ZXMgYXMgVGFibGVDb2x1bW5TaXplcztcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzZXM6IGFueSA9IHt9O1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzU2l6ZTogVGFibGVDb2x1bW5TaXplc0tleSB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgZm9yIChsZXQgc2l6ZSBpbiBzaXplcykge1xuICAgICAgICAgICAgICAgIGlmICghaXNUYWJsZUNvbHVtblNpemVzS2V5KHNpemVzLCBzaXplKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXplcy5kZWZhdWx0ID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1snaGlkZGVuJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tgdy0ke3NpemVzLmRlZmF1bHR9LzEyYF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1NpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzaXplc1tzaXplXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXNTaXplID8gc2l6ZXNbcHJldmlvdXNTaXplXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgIT09ICdoaWRkZW4nICYmXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9PT0gJ2hpZGRlbidcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tgJHtzaXplfTpmbGV4YF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbYCR7c2l6ZX06aGlkZGVuYF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1NpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSAxMiB8fCBjdXJyZW50VmFsdWUgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzW2Ake3NpemV9OnctZnVsbGBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzW2Ake3NpemV9OnctJHtjdXJyZW50VmFsdWV9LzEyYF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVzID09PSAxMiB8fCBzaXplcyA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICd3LWZ1bGwnOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlzIGEgbnVtYmVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2B3LSR7c2l6ZXN9LzEyYF06IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrYm94XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoZWNrYm94XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidmFyaWFudFwiPlxuICAgIDxwLWxvYWRlclxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCJcbiAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgY2xhc3M9XCJoLTYgdy1mdWxsIGZsZXgtMSByb3VuZGVkXCJcbiAgICA+PC9wLWxvYWRlcj5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidoZWFkZXInXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICBbY2xhc3MuanVzdGlmeS1zdGFydF09XCJkZWZpbml0aW9uLmFsaWduID09PSAnc3RhcnQnXCJcbiAgICAgICAgW2NsYXNzLmp1c3RpZnktY2VudGVyXT1cImRlZmluaXRpb24uYWxpZ24gPT09ICdjZW50ZXInXCJcbiAgICAgICAgW2NsYXNzLmp1c3RpZnktZW5kXT1cImRlZmluaXRpb24uYWxpZ24gPT09ICdlbmQnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIlxuICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgIFtjbGFzcy5qdXN0aWZ5LXN0YXJ0XT1cImRlZmluaXRpb24uYWxpZ24gPT09ICdzdGFydCdcIlxuICAgICAgICBbY2xhc3MuanVzdGlmeS1jZW50ZXJdPVwiZGVmaW5pdGlvbi5hbGlnbiA9PT0gJ2NlbnRlcidcIlxuICAgICAgICBbY2xhc3MuanVzdGlmeS1lbmRdPVwiZGVmaW5pdGlvbi5hbGlnbiA9PT0gJ2VuZCdcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlOyBlbHNlIHZhbHVlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiBkYXRhXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN2YWx1ZVRlbXBsYXRlPlxuICAgIHt7IGRhdGEudmFsdWUgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|