@coreui/angular-pro 4.4.4 → 4.4.5

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.
@@ -439,7 +439,7 @@ export class SmartTableComponent {
439
439
  }
440
440
  }
441
441
  SmartTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
442
- SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\n <ng-template [ngIf]=\"tableFilter || cleaner\">\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] });
442
+ SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']\" class=\"row my-2 mx-0\">\n <div class=\"col-auto p-0\" *ngIf=\"tableFilter\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\" *ngIf=\"cleaner\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\"></ng-container>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\"></ng-content>\n </div>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] });
443
443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SmartTableComponent, decorators: [{
444
444
  type: Component,
445
445
  args: [{ selector: 'c-smart-table', exportAs: 'cSmartTable', standalone: true, imports: [
@@ -461,7 +461,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
461
461
  TableActiveDirective,
462
462
  TableColorDirective,
463
463
  TableDirective
464
- ], template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\n <ng-template [ngIf]=\"tableFilter || cleaner\">\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
464
+ ], template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']\" class=\"row my-2 mx-0\">\n <div class=\"col-auto p-0\" *ngIf=\"tableFilter\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\" *ngIf=\"cleaner\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\"></ng-container>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\"></ng-content>\n </div>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
465
465
  }], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; }, propDecorators: { activePage: [{
466
466
  type: Input
467
467
  }], cleaner: [{
@@ -536,4 +536,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
536
536
  type: ContentChildren,
537
537
  args: [TemplateIdDirective]
538
538
  }] } });
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFpQi9HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQ0wsdUNBQXVDLEVBQ3hDLE1BQU0sc0ZBQXNGLENBQUM7O0FBNkI5RixNQUFNLE9BQU8sbUJBQW1CO0lBVzlCLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXVCbEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFXaEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQVcxQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQStCaEMsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQWE1QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBV3pCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFnQnpCLFdBQU0sR0FBb0IsRUFBZ0MsQ0FBQztRQVczRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUxQixzQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR2hELGlCQUFZLEdBQThCLGdCQUFnQixDQUFDO1FBVzVELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBVzdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBaUI3QixpQkFBWSxHQUFpQixFQUFFLENBQUM7UUFrQi9CLHFCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUM3QiwyQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQztRQWUzQyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFFOUIsbUJBQWMsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQXNCLEVBQUUsQ0FBQztRQUN2QyxtQkFBYyxHQUFzQixFQUFFLENBQUM7UUFDdkMsZUFBVSxHQUFZLEVBQUUsQ0FBQztRQUV4Qix3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRSxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5RCx1QkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNoRSxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsNEJBQXVCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckUsd0JBQW1CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakUsMkJBQXNCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHOUUsY0FBUyxHQUFpRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xHLDBCQUFxQixHQUFpRCxFQUFFLENBQUM7UUF5QmpFLGlCQUFZLEdBQXVCLEtBQUssQ0FBQztRQXdGekMsb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBL1U1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFPRCxJQUNJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFJRCxJQUNJLGFBQWEsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBSUQsSUFDSSxPQUFPLENBQUMsS0FBMkI7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzlDLENBQUM7SUFNRCxJQUNJLGlCQUFpQixDQUFDLEtBQXlCO1FBQzdDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDZCQUE2QjthQUNsRDtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFNRCxJQUNJLE1BQU0sQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBSUQsSUFDSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUlELElBQ0ksS0FBSyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQStCLENBQUM7YUFDbEU7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFVRCxJQUNJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBSUQsSUFDSSxVQUFVLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQ0ksV0FBVyxDQUFDLEtBQW1CO1FBQ2pDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDM0M7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ0ksV0FBVyxDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3hILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDakc7SUFDSCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFPRCxJQUNJLGdCQUFnQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsNkJBQTZCO1NBQ2xEO0lBQ0gsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFzQkQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBMEIsRUFBRSxFQUFFO1lBQzFELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDekQsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDdEcsNEJBQTRCO0lBQzlCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDbkgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQywwQkFBMEIsRUFDL0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzFFLDJCQUEyQjtJQUM3QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzFDLElBQ0UsQ0FBQyxTQUFTO1lBQ1YsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUTtnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFDN0I7WUFDQSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDM0I7UUFDRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLDZGQUE2RjtRQUM3RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9GLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzVHLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDbkYsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3QztRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBNEIsRUFBRSxLQUE0QixFQUFFLEVBQUU7WUFDL0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzlGLENBQUM7SUFBQSxDQUFDO0lBSUYsSUFBSSxjQUFjO1FBQ2hCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFDRSxJQUFJLENBQUMsWUFBWTtZQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUTtZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUI7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBRTlELElBQUksS0FBSyxZQUFZLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPO2FBQ1I7WUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3BHLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ25GLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5SCxPQUFPO2FBQ1I7WUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUMxRjtRQUVILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFDdkY7WUFDQSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRixhQUFhO1FBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEyQixFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFjO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQXNCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBNkM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWTtZQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ1osT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN4RixJQUFJLFlBQVksQ0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPO1NBQ1I7UUFDRCw2REFBNkQ7UUFDN0QsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO2lCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO29CQUN6RSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdEIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQVc7UUFDbEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQXdDO1FBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxRixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFrQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDRCQUE0QjtJQUNsRCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFhLEVBQUUsSUFBbUI7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBSSxNQUFNLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBVztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBVyxFQUFFLE9BQWU7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BFLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ3ZFLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFXLEVBQUUsT0FBZTtRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDNUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckYsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBNkIsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2RDtRQUMxRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUM7WUFDMUQsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUM5RSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDO1lBQ3pELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QjtTQUNGO0lBQ0gsQ0FBQzs7Z0hBbGpCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixnd0NBMk9iLG1CQUFtQiw2RUN2VHRDLDIvUEE2TUEsZ0ZEckpJLElBQUksNkZBQ0osZ0JBQWdCLG9KQUNoQixPQUFPLG9GQUNQLE9BQU8sbUhBQ1AsT0FBTywyRUFDUCxjQUFjLHlFQUNkLGVBQWUsMEpBQ2YscUJBQXFCLGdIQUNyQixvQkFBb0Isd0pBQ3BCLHVCQUF1QiwrR0FDdkIsdUJBQXVCLHdHQUN2Qix3QkFBd0IsZ1NBQ3hCLHlCQUF5Qix5SEFDekIsdUJBQXVCLHVTQUN2Qix1Q0FBdUMseUxBQ3ZDLG9CQUFvQixxRkFDcEIsbUJBQW1CLG1GQUNuQixjQUFjOzJGQUdMLG1CQUFtQjtrQkEzQi9CLFNBQVM7K0JBQ0UsZUFBZSxZQUdmLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLHVDQUF1Qzt3QkFDdkMsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLGNBQWM7cUJBQ2Y7b0lBNkJHLFVBQVU7c0JBRGIsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsYUFBYTtzQkFEaEIsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBV0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBa0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsTUFBTTtzQkFEVCxLQUFLO2dCQVlGLE1BQU07c0JBRFQsS0FBSztnQkFZRixLQUFLO3NCQURSLEtBQUs7Z0JBaUJGLFlBQVk7c0JBRGYsS0FBSztnQkFXRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBWUYsVUFBVTtzQkFEYixLQUFLO2dCQVlGLFdBQVc7c0JBRGQsS0FBSztnQkFrQkYsV0FBVztzQkFEZCxLQUFLO2dCQWdCRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFlRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUUrQixlQUFlO3NCQUFwRCxlQUFlO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IElUYWJsZSB9IGZyb20gJy4uLy4uL3RhYmxlL3RhYmxlLnR5cGUnO1xuaW1wb3J0IHtcbiAgSUNvbHVtbixcbiAgSUNvbHVtbkZpbHRlcixcbiAgSUNvbHVtbkZpbHRlclZhbHVlLFxuICBJSXRlbSxcbiAgSUl0ZW1JbnRlcm5hbCxcbiAgSVNtYXJ0VGFibGUsXG4gIElTb3J0ZXIsXG4gIElTb3J0ZXJWYWx1ZSxcbiAgSVRhYmxlRmlsdGVyLFxuICBJVGFibGVHcm91cFByb3BzLFxuICBJdGVtc1BlclBhZ2VTZWxlY3Rcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudHlwZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtQ2hlY2tJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgRWxlbWVudENvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudC1jb3Zlcic7XG5pbXBvcnQgeyBIdG1sQXR0cmlidXRlc0RpcmVjdGl2ZSwgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBTbWFydFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9zbWFydC1wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRhYmxlQWN0aXZlRGlyZWN0aXZlLCBUYWJsZUNvbG9yRGlyZWN0aXZlLCBUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3RhYmxlJztcbmltcG9ydCB7IEFsaWduRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC10YWJsZS1maWx0ZXIvc21hcnQtdGFibGUtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWZpbHRlci9maWx0ZXItaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0VGFibGVIZWFkQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtaGVhZC9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBTbWFydFRhYmxlSXRlbXNQZXJQYWdlU2VsZWN0b3JDb21wb25lbnRcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3Ivc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3IuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY1NtYXJ0VGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3JPZixcbiAgICBOZ1N0eWxlLFxuICAgIEFsaWduRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBFbGVtZW50Q292ZXJDb21wb25lbnQsXG4gICAgRmlsdGVySW5wdXREaXJlY3RpdmUsXG4gICAgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUsXG4gICAgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsXG4gICAgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFRhYmxlQWN0aXZlRGlyZWN0aXZlLFxuICAgIFRhYmxlQ29sb3JEaXJlY3RpdmUsXG4gICAgVGFibGVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0VGFibGUsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2FjdGl2ZVBhZ2U6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY2xlYW5lcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY2xpY2thYmxlUm93czogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2l0ZW1zUGVyUGFnZTogTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9wYWdpbmF0aW9uOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RhYmxlOiBCb29sZWFuSW5wdXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwcml2YXRlIGtleVZhbHVlRGlmZmVyczogS2V5VmFsdWVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuaXRlbXNEaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuaXRlbXMpLmNyZWF0ZSgpO1xuICAgIHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fY29sdW1uRmlsdGVyZWQpLmNyZWF0ZSgpO1xuICAgIHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5zb3J0ZXJWYWx1ZSkuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0ZpbHRlcmVkRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2x1bUZpbHRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHNvcnRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBhY3RpdmVQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIHx8IDE7XG4gICAgdGhpcy5hY3RpdmVQYWdlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlUGFnZSk7XG4gIH1cblxuICBnZXQgYWN0aXZlUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZSA9IDE7XG5cbiAgQElucHV0KClcbiAgc2V0IGNsZWFuZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhbmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW5lcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjbGlja2FibGVSb3dzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xpY2thYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY2xpY2thYmxlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpY2thYmxlUm93cztcbiAgfVxuXG4gIHByaXZhdGUgX2NsaWNrYWJsZVJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogKHN0cmluZyB8IElDb2x1bW4pW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWUubWFwKGNvbHVtbiA9PiB0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJyA/IHsga2V5OiBjb2x1bW4gfSA6IHsgLi4uY29sdW1uIH0pO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogKHN0cmluZyB8IElDb2x1bW4pW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zIHx8IHRoaXMucmF3Q29sdW1uTmFtZXM7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5zPzogKHN0cmluZyB8IElDb2x1bW4pW107XG5cbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbkZpbHRlclZhbHVlKHZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgPSB7IC4uLnZhbHVlIH07XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh7IC4uLnRoaXMuX2NvbHVtbkZpbHRlclZhbHVlIH0pO1xuICAgICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclZhbHVlKCk6IElDb2x1bW5GaWx0ZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkZpbHRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyVmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuXG4gIEBJbnB1dCgpIGNvbHVtblNvcnRlcj86IGJvb2xlYW4gfCBJU29ydGVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9mb290ZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGZvb3RlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9vdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGhlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXI7XG4gIH1cblxuICBwcml2YXRlIF9oZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IElJdGVtW10pIHtcbiAgICBpZiAodGhpcy5pdGVtc0RpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuc2V0SXRlbXModmFsdWUpIGFzIEFycmF5PFR5cGU8SUl0ZW1JbnRlcm5hbD4+O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG5cbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9pdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZUxhYmVsOiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCA1MF07XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZVNlbGVjdD86IGJvb2xlYW4gfCBJdGVtc1BlclBhZ2VTZWxlY3Q7XG4gIEBJbnB1dCgpIGxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBub0l0ZW1zTGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnTm8gaXRlbXMgZm91bmQnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwYWdpbmF0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5zb3J0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc29ydGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zb3J0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc29ydGVyVmFsdWUoKTogSVNvcnRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zb3J0ZXJWYWx1ZTogSVNvcnRlclZhbHVlID0ge307XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyKGZpbHRlcikge1xuICAgIHRoaXMuX3RhYmxlRmlsdGVyID0gZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy50YWJsZUZpbHRlckxhYmVsID0gdHlwZW9mIGZpbHRlci5sYWJlbCA9PT0gJ3N0cmluZycgPyBmaWx0ZXIubGFiZWwgOiB0aGlzLnRhYmxlRmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPSB0eXBlb2YgZmlsdGVyLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IGZpbHRlci5wbGFjZWhvbGRlciA6IHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlcjtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlcj86IGJvb2xlYW4gfCBJVGFibGVGaWx0ZXI7XG5cbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9ICd0eXBlIHN0cmluZy4uLic7XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl90YWJsZUZpbHRlclZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSB0YWJsZUJvZHlQcm9wcz86IElUYWJsZUdyb3VwUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlSGVhZFByb3BzPzogSVRhYmxlR3JvdXBQcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZVByb3BzPzogSVRhYmxlID0ge307XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlKSBjb2x1bW5UZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG4gIHRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7IHRhYmxlRGV0YWlsczogbnVsbCwgdGFibGVEYXRhOiBudWxsIH07XG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7fTtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgIGlmIChjaGlsZC5pZC5zdGFydHNXaXRoKCdjb2x1bW5GaWx0ZXJfJykpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgIH0pO1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyB9O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQubGVuZ3RoID09PSAwID8gZmFsc2UgOiBzZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuaXRlbXMubGVuZ3RoID8gdHJ1ZSA6ICdpbmRldGVybWluYXRlJztcbiAgICAvLyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRBbGw7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRBbGwodmFsdWUpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZC5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogJ2luZGV0ZXJtaW5hdGUnO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkQWxsOiAoYm9vbGVhbiB8IHN0cmluZykgPSBmYWxzZTtcblxuICBnZXQgdGFibGVGaWx0ZXJTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclZhbHVlID8gdGhpcy50YWJsZUZpbHRlclZhbHVlIDogJyc7XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPyB0aGlzLmNvbHVtbkZpbHRlclZhbHVlIDoge307XG4gIH1cblxuICBnZXQgbnVtYmVyT2ZQYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UgPyBNYXRoLmNlaWwodGhpcy5zb3J0ZWRJdGVtcy5sZW5ndGggLyB0aGlzLl9pdGVtc1BlclBhZ2UpIDogMTtcbiAgfVxuXG4gIGdldCBjb2xzcGFuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGUgPyB0aGlzLnJhd0NvbHVtbk5hbWVzLmxlbmd0aCArIDEgOiB0aGlzLnJhd0NvbHVtbk5hbWVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBmaXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gKHRoaXMuX2FjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMuX2l0ZW1zUGVyUGFnZSA6IDA7XG4gIH1cblxuICBnZXQgaXRlbXNPbkFjdGl2ZVBhZ2UoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcy5zbGljZShcbiAgICAgIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgsXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4ICsgdGhpcy5faXRlbXNQZXJQYWdlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50SXRlbXMoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/IHRoaXMuaXRlbXNPbkFjdGl2ZVBhZ2UgOiB0aGlzLnNvcnRlZEl0ZW1zID8/IFtdO1xuICAgIC8vIHJldHVybiB0aGlzLml0ZW1zID8/IFtdO1xuICB9XG5cbiAgZ2V0IGdlbkNvbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2l0ZW1zID8gdGhpcy5faXRlbXNbMF0gPz8ge30gOiB7fSkuZmlsdGVyKChlbCkgPT4gZWwuY2hhckF0KDApICE9PSAnXycpO1xuICB9XG5cbiAgZ2V0IHJhd0NvbHVtbk5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zID8gdGhpcy5fY29sdW1ucy5tYXAoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnID8gY29sdW1uLmtleSA6IGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2VuQ29scztcbiAgfVxuXG4gIGdldCBpdGVtc0RhdGFDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnJhd0NvbHVtbk5hbWVzLmZpbHRlcigobmFtZSkgPT4gdGhpcy5nZW5Db2xzLmluY2x1ZGVzKG5hbWUpKTtcbiAgfVxuXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuc29ydGVyVmFsdWUuY29sdW1uO1xuICAgIGlmIChcbiAgICAgICFjb2x1bW5LZXkgfHxcbiAgICAgICF0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSB8fFxuICAgICAgKHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkID0gWy4uLnRoaXMudGFibGVGaWx0ZXJlZF07XG5cbiAgICAvLyBpZiB2YWx1ZXMgaW4gY29sdW1uIGFyZSB0byBiZSBzb3J0ZWQgYnkgbnVtZXJpYyB2YWx1ZSB0aGV5IGFsbCBoYXZlIHRvIGJlIGEgdHlwZSBvZiBudW1iZXJcbiAgICBjb25zdCBmbGlwID0gdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2FzYycgPyAxIDogdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2Rlc2MnID8gLTEgOiAwO1xuXG4gICAgaWYgKGZsaXAgPT09IDApIHtcbiAgICAgIHJldHVybiB0YWJsZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiBjb2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGN1cnJlbnRDb2x1bW4uc29ydGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjdXJyZW50Q29sdW1uLnNvcnRlcik7XG4gICAgICByZXR1cm4gZmxpcCA8IDAgPyBzb3J0ZWQucmV2ZXJzZSgpIDogc29ydGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVGbiA9IChpdGVtMTogeyBbeDogc3RyaW5nXTogYW55OyB9LCBpdGVtMjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBpdGVtMVtjb2x1bW5LZXldO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXRlbTJbY29sdW1uS2V5XTtcbiAgICAgIGNvbnN0IGEgPSB0eXBlb2YgdmFsdWUxID09PSAnbnVtYmVyJyA/IHZhbHVlMSA6IFN0cmluZyh2YWx1ZTEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGEgPiBiID8gMSAqIGZsaXAgOiBiID4gYSA/IC0xICogZmxpcCA6IDA7XG4gICAgfTtcblxuICAgIHJldHVybiB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjb21wYXJlRm4pO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyRXZlbnQoKTogJ2NoYW5nZScgfCAnaW5wdXQnIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkpID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICB9O1xuXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlcmVkOiBJSXRlbUludGVybmFsW10gPSBbXTtcblxuICBnZXQgY29sdW1uRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgX2l0ZW1zID0gdGhpcy5faXRlbXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbHVtbkZpbHRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICAgIHJldHVybiBfaXRlbXM7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZShpdGVtW2tleV0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5rZXkgPT09IGtleSk7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRDb2x1bW4gPT09ICdvYmplY3QnICYmIHR5cGVvZiBjdXJyZW50Q29sdW1uLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAodHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnRDb2x1bW4uZmlsdGVyKGl0ZW0sIHZhbHVlKSkgPz8gIXZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29sdW1uRmlsdGVyICYmIHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IFN0cmluZyhpdGVtW2tleV0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29sdW1uRmlsdGVyKSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICByZXR1cm4gX2l0ZW1zO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmNvbHVtbkZpbHRlcmVkO1xuICAgIGlmIChcbiAgICAgICF0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHxcbiAgICAgICh0aGlzLnRhYmxlRmlsdGVyICYmIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmV4dGVybmFsKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyU3RhdGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZUNvbnRhaW5GaWx0ZXIgPSAodmFsOiBhbnkpID0+IFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5pdGVtc0RhdGFDb2x1bW5zLmZpbmQoKGtleSkgPT4gdmFsdWVDb250YWluRmlsdGVyKGl0ZW1ba2V5XSkpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldCBpc0ZpbHRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHwgdGhpcy5zb3J0ZXJWYWx1ZT8uY29sdW1uIHx8IE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1zKGl0ZW1zOiBJSXRlbVtdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBfaWQ6IGluZGV4IH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIDxJSXRlbUludGVybmFsPltdO1xuICB9XG5cbiAgaGFuZGxlU29ydENoYW5nZSgkZXZlbnQ6IHsgY29sdW1uS2V5OiBzdHJpbmc7IGluZGV4OiBudW1iZXI7IH0pIHtcbiAgICB0aGlzLmhhbmRsZVNvcnRlckNoYW5nZSgkZXZlbnQuY29sdW1uS2V5LCAkZXZlbnQuaW5kZXgpO1xuICB9XG5cbiAgaXNTb3J0YWJsZShpOiBudW1iZXIpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RhdGFDb2x1bW4gPSB0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXModGhpcy5yYXdDb2x1bW5OYW1lc1tpXSk7XG4gICAgbGV0IGNvbHVtbjtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbHVtblNvcnRlciAmJlxuICAgICAgKCF0aGlzLmNvbHVtbnMgfHxcbiAgICAgICAgdHlwZW9mIGNvbHVtbiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmICh0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgY29sdW1uLnNvcnRlcikpXG4gICAgICApICYmIGlzRGF0YUNvbHVtblxuICAgICk7XG4gIH1cblxuICBoYW5kbGVTb3J0ZXJDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnNvcnRlclZhbHVlIH07XG5cbiAgICBpZiAoc3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gMCkge1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0ZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgc3RhdGUuc3RhdGUgPSAnZGVzYyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJiAhdGhpcy5jb2x1bW5Tb3J0ZXIucmVzZXRhYmxlKSB7XG4gICAgICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29sdW1uID0gY29sdW1uO1xuICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcbiAgICB9XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIHNldEFjdGl2ZVBhZ2UoJGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZVBhZ2UgPSAkZXZlbnQ7XG4gIH1cblxuICBoYW5kbGVDb2x1bW5GaWx0ZXJDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSwgW2Ake2NvbHVtbn1gXTogdmFsdWUgfTtcbiAgfVxuXG4gIGhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudDogeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pIHtcbiAgICBjb25zdCB7IHZhbHVlLCB0eXBlIH0gPSAkZXZlbnQ7XG4gICAgY29uc3QgaXNMYXp5ID0gdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSA9PT0gdHJ1ZTtcbiAgICBpZiAoKChpc0xhenkgJiYgdHlwZSA9PT0gJ2lucHV0JykgfHwgKCFpc0xhenkgJiYgdHlwZSA9PT0gJ2NoYW5nZScpKSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xlYW4oJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc29ydGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgfVxuXG4gIGhhbmRsZUl0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pdGVtc1BlclBhZ2UpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHZhbHVlO1xuICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQ6IEV2ZW50LCBpdGVtOiBJSXRlbUludGVybmFsKSB7XG4gICAgaXRlbS5fc2VsZWN0ZWQgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuaXRlbXMubWFwKChpdGVtOiBJSXRlbUludGVybmFsKSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBfc2VsZWN0ZWQ6ICRldmVudCB9O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGwgPSAkZXZlbnQ7XG4gIH1cblxuICB0YWJsZURhdGFDZWxsUHJvcHMoaXRlbTogSUl0ZW0sIGNvbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3BzID0gaXRlbVsnX2NlbGxQcm9wcyddICYmIHtcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bJ19hbGwnXSAmJiB7IC4uLml0ZW1bJ19jZWxsUHJvcHMnXVsnX2FsbCddIH0pLFxuICAgICAgLi4uKGl0ZW1bJ19jZWxsUHJvcHMnXVtjb2xOYW1lXSAmJiB7IC4uLml0ZW1bJ19jZWxsUHJvcHMnXVtjb2xOYW1lXSB9KVxuICAgIH07XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgdGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbTogSUl0ZW0sIGNvbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycgPyBjb2x1bW4gPT09IGNvbE5hbWUgOiBjb2x1bW5bJ2tleSddID09PSBjb2xOYW1lKTtcbiAgICByZXR1cm4gY29sdW1uWzBdICYmIHR5cGVvZiBjb2x1bW5bMF0gPT09ICdvYmplY3QnID8gY29sdW1uWzBdLl9jbGFzc2VzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uTmFtZSgkZXZlbnQ6IE1vdXNlRXZlbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjbG9zZXN0ID8gQXJyYXkuZnJvbShjbG9zZXN0LmNoaWxkcmVuKSA6IFtdO1xuICAgIGNvbnN0IGNsaWNrZWRDZWxsID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuY29udGFpbnModGFyZ2V0KSlbMF07XG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXNbY2hpbGRyZW4uaW5kZXhPZihjbGlja2VkQ2VsbCkgLSAodGhpcy5fc2VsZWN0YWJsZSA/IDEgOiAwKV07XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyAkZXZlbnQsIGl0ZW0sIGkgfSA9IHsgLi4ucGFyYW0gfTtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5nZXRDb2x1bW5OYW1lKHBhcmFtLiRldmVudCk7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgKyB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LCBjb2x1bW5OYW1lLCBldmVudDogJGV2ZW50IH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY3VycmVudFZhbHVlID8/IHt9KS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlID0gY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0IHx8IHRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIiBjbGFzcz1cInJvdyBteS0yIG14LTBcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVGaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUNsZWFuZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVGaWx0ZXJUZW1wbGF0ZT5cbiAgICA8Yy1zbWFydC10YWJsZS1maWx0ZXJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJcIlxuICAgICAgW2RlbGF5XT1cIjMwMFwiXG4gICAgICBbZmlsdGVyTGFiZWxdPVwidGFibGVGaWx0ZXJMYWJlbFwiXG4gICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICBbb25FdmVudF09XCJ0YWJsZUZpbHRlckV2ZW50XCJcbiAgICAgIFt2YWx1ZV09XCJ0YWJsZUZpbHRlclN0YXRlXCJcbiAgICAgIGNGaWx0ZXJJbnB1dFxuICAgID5cbiAgICA8L2Mtc21hcnQtdGFibGUtZmlsdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVDbGVhbmVyVGVtcGxhdGU+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNsZWFuKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJjbGVhbmVyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWx0ZXJlZFwiXG4gICAgICBbbmdDbGFzc109XCJ7J21zLTEnOiB0YWJsZUZpbHRlcn1cIlxuICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgY0J1dHRvblxuICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gIDx0YWJsZSBbYWxpZ25dPVwidGFibGVQcm9wcz8uYWxpZ25cIlxuICAgICAgICAgW2JvcmRlckNvbG9yXT1cInRhYmxlUHJvcHM/LmJvcmRlckNvbG9yXCJcbiAgICAgICAgIFtib3JkZXJlZF09XCJ0YWJsZVByb3BzPy5ib3JkZXJlZFwiXG4gICAgICAgICBbYm9yZGVybGVzc109XCJ0YWJsZVByb3BzPy5ib3JkZXJsZXNzXCJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxuICAgICAgICAgW2NvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtob3Zlcl09XCJ0YWJsZVByb3BzPy5ob3ZlclwiXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcbiAgICAgICAgIFtzbWFsbF09XCJ0YWJsZVByb3BzPy5zbWFsbFwiXG4gICAgICAgICBbc3RyaXBlZF09XCJ0YWJsZVByb3BzPy5zdHJpcGVkXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgY1RhYmxlXG4gID5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoY29sdW1uRmlsdGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiaGVhZGVyXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJTdGF0ZV09XCJjb2x1bW5GaWx0ZXJTdGF0ZVwiXG4gICAgICBbY29sdW1uRmlsdGVyXT1cImNvbHVtbkZpbHRlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVIZWFkUHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVIZWFkUHJvcHM/LmFsaWduXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImZvb3RlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUZvb3RQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVGb290UHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcbiAgICAgIGNvbXBvbmVudD1cInRmb290XCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgPC90YWJsZT5cbiAgPGMtZWxlbWVudC1jb3ZlclxuICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgW2JvdW5kYXJpZXNdPVwiW1xuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcbiAgICAgIHsgc2lkZXM6IFsnYm90dG9tJ10sIHF1ZXJ5OiAndGJvZHknIH1cbiAgICBdXCJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgW25nSWZdPVwicGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3RcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxXCJcbiAgICAgICAgW2FjdGl2ZVBhZ2VdPVwiYWN0aXZlUGFnZVwiXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCI+XG4gICAgICA8L2Mtc21hcnQtcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxuICAgICAgPGMtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3JcbiAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0XCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZUxhYmVsXT1cIml0ZW1zUGVyUGFnZUxhYmVsXCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcbiAgICAgID5cbiAgICAgIDwvYy1zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3Rvcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rib2R5RGVmYXVsdFRlbXBsYXRlPlxuICA8dGJvZHkgW2NIdG1sQXR0cl09XCJ0YWJsZUJvZHlQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtjQWxpZ25dPVwidGFibGVCb2R5UHJvcHM/LmFsaWduXCJcbiAgPlxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiY3VycmVudEl0ZW1zXCIgbGV0LWNudD1cImNvdW50XCIgbGV0LWk9XCJpbmRleFwiIGxldC1pc0V2ZW49XCJldmVuXCIgbGV0LWlzT2RkPVwib2RkXCI+XG4gICAgPHRyIFt0YWJpbmRleF09XCJjbGlja2FibGVSb3dzID8gMCA6IC0xXCJcbiAgICAgICAgW25nU3R5bGVdPVwie2N1cnNvcjogY2xpY2thYmxlUm93cyA/ICdwb2ludGVyJyA6ICdhdXRvJ31cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soeyRldmVudCwgaXRlbSwgaX0pXCJcbiAgICAgICAgW2NUYWJsZUFjdGl2ZV09XCJpdGVtLl9wcm9wcz8uYWN0aXZlXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0uX3Byb3BzPy5jb2xvclwiXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICA+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmVcIlxuICAgICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtPy5bJ19jZWxsUHJvcHMnXT8uX2FsbD8uY29sb3JcIlxuICAgICAgICAgIFtjQWxpZ25dPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmFsaWduXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQsIGl0ZW0pXCIgW2NoZWNrZWRdPVwiaXRlbS5fc2VsZWN0ZWQgPz8gZmFsc2VcIiBjRm9ybUNoZWNrSW5wdXQ+XG4gICAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5OYW1lIFtuZ0Zvck9mXT1cInJhd0NvbHVtbk5hbWVzXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cbiAgICAgIDwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPi0tPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXTsgY29udGV4dDoge2l0ZW0sIGluZGV4OiBpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9JdGVtc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5EZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtbk5hbWU9XCJjb2x1bW5OYW1lXCIgbGV0LXRkQ29udGVudD1cInRkQ29udGVudFwiPlxuICA8dGRcbiAgICBbY1RhYmxlQWN0aXZlXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uWydhY3RpdmUnXVwiXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uY29sb3JcIlxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXG4gICAgW25nQ2xhc3NdPVwidGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbSwgY29sdW1uTmFtZSlcIlxuICA+XG4gICAge3t0ZENvbnRlbnR9fVxuICA8L3RkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLTxuZy10ZW1wbGF0ZSAjcm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg+LS0+XG48IS0tICA8dHI+PHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIHRhYmluZGV4PVwiLTFcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyQm90dG9tV2lkdGg6IDB9XCI+PC90ZD48L3RyPi0tPlxuPCEtLSAgPHRyIGNsYXNzPVwicC0wXCI+LS0+XG48IS0tICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPi0tPlxuPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LnRhYmxlRGV0YWlsc1wiPjwvbmctY29udGFpbmVyPi0tPlxuPCEtLSAgICA8L3RkPi0tPlxuPCEtLSAgPC90cj4tLT5cbjwhLS08L25nLXRlbXBsYXRlPi0tPlxuXG48bmctdGVtcGxhdGUgI25vSXRlbXNEZWZhdWx0VGVtcGxhdGU+XG4gIDx0ciAqbmdJZj1cIiFjdXJyZW50SXRlbXMubGVuZ3RoXCI+XG4gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57e25vSXRlbXNMYWJlbH19PC90ZD5cbiAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS10b2RvOiBmaWx0ZXJJY29uQ3VzdG9tVGVtcGxhdGUtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVySWNvblRlbXBsYXRlPlxuICA8c3ZnIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwb2ludGVyLWV2ZW50cz1cIm5vbmVcIiByb2xlPVwiaW1nXCJcbiAgICAgICBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiIHdpZHRoPVwiMThcIj5cbiAgICA8cG9seWdvblxuICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxuICAgICAgcG9pbnRzPVwiNDAgMTYgNDAgNTMuODI4IDEwOS4wMjQgMTM2IDE1MC44MTUgMTM2IDc2Ljg5NiA0OCA0NTkuNTEgNDggMzA0IDI0Mi4zODggMzA0IDQwMS4zNzMgMjQxLjM3MyA0NjQgMjQwIDQ2NCAyNDAgMzY4IDIwOCAzNjggMjA4IDQ5NiAyNTQuNjI3IDQ5NiAzMzYgNDE0LjYyNyAzMzYgMjUzLjYxMiA0OTYgNTMuNjEyIDQ5NiAxNiA0MCAxNlwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjE2Ni40MDMgMjQ4LjIyNSAyMjYuODY0IDE4Ny43NjMgMjA0LjIzNyAxNjUuMTM1IDE0My43NzUgMjI1LjU5NyA4My4zMTMgMTY1LjEzNSA2MC42ODcgMTg3Ljc2MyAxMjEuMTQ4IDI0OC4yMjUgNjAuNjg3IDMwOC42ODcgODMuMzEzIDMzMS4zMTQgMTQzLjc3NSAyNzAuODUyIDIwNC4yMzcgMzMxLjMxNCAyMjYuODY0IDMwOC42ODcgMTY2LjQwMyAyNDguMjI1XCJcbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiPlxuICAgIDwvcG9seWdvbj5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFpQi9HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQ0wsdUNBQXVDLEVBQ3hDLE1BQU0sc0ZBQXNGLENBQUM7O0FBNkI5RixNQUFNLE9BQU8sbUJBQW1CO0lBVzlCLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXVCbEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFXaEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQVcxQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQStCaEMsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQWE1QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBV3pCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFnQnpCLFdBQU0sR0FBb0IsRUFBZ0MsQ0FBQztRQVczRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUxQixzQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR2hELGlCQUFZLEdBQThCLGdCQUFnQixDQUFDO1FBVzVELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBVzdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBaUI3QixpQkFBWSxHQUFpQixFQUFFLENBQUM7UUFrQi9CLHFCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUM3QiwyQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQztRQWUzQyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFFOUIsbUJBQWMsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQXNCLEVBQUUsQ0FBQztRQUN2QyxtQkFBYyxHQUFzQixFQUFFLENBQUM7UUFDdkMsZUFBVSxHQUFZLEVBQUUsQ0FBQztRQUV4Qix3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRSxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5RCx1QkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNoRSxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsNEJBQXVCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckUsd0JBQW1CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakUsMkJBQXNCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHOUUsY0FBUyxHQUFpRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xHLDBCQUFxQixHQUFpRCxFQUFFLENBQUM7UUF5QmpFLGlCQUFZLEdBQXVCLEtBQUssQ0FBQztRQXdGekMsb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBL1U1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFPRCxJQUNJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFJRCxJQUNJLGFBQWEsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBSUQsSUFDSSxPQUFPLENBQUMsS0FBMkI7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzlDLENBQUM7SUFNRCxJQUNJLGlCQUFpQixDQUFDLEtBQXlCO1FBQzdDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDZCQUE2QjthQUNsRDtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFNRCxJQUNJLE1BQU0sQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBSUQsSUFDSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUlELElBQ0ksS0FBSyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQStCLENBQUM7YUFDbEU7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFVRCxJQUNJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBSUQsSUFDSSxVQUFVLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUlELElBQ0ksV0FBVyxDQUFDLEtBQW1CO1FBQ2pDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDM0M7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ0ksV0FBVyxDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3hILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDakc7SUFDSCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFPRCxJQUNJLGdCQUFnQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsNkJBQTZCO1NBQ2xEO0lBQ0gsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFzQkQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBMEIsRUFBRSxFQUFFO1lBQzFELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDekQsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDdEcsNEJBQTRCO0lBQzlCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDbkgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQywwQkFBMEIsRUFDL0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzFFLDJCQUEyQjtJQUM3QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzFDLElBQ0UsQ0FBQyxTQUFTO1lBQ1YsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUTtnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFDN0I7WUFDQSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDM0I7UUFDRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLDZGQUE2RjtRQUM3RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9GLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzVHLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDbkYsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3QztRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBNEIsRUFBRSxLQUE0QixFQUFFLEVBQUU7WUFDL0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzlGLENBQUM7SUFBQSxDQUFDO0lBSUYsSUFBSSxjQUFjO1FBQ2hCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFDRSxJQUFJLENBQUMsWUFBWTtZQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUTtZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUI7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBRTlELElBQUksS0FBSyxZQUFZLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPO2FBQ1I7WUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3BHLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ25GLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5SCxPQUFPO2FBQ1I7WUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUMxRjtRQUVILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFDdkY7WUFDQSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRixhQUFhO1FBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEyQixFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFjO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQXNCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBNkM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWTtZQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ1osT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN4RixJQUFJLFlBQVksQ0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPO1NBQ1I7UUFDRCw2REFBNkQ7UUFDN0QsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO2lCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO29CQUN6RSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdEIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQVc7UUFDbEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQXdDO1FBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxRixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFrQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDRCQUE0QjtJQUNsRCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFhLEVBQUUsSUFBbUI7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBSSxNQUFNLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBVztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBVyxFQUFFLE9BQWU7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BFLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ3ZFLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFXLEVBQUUsT0FBZTtRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDNUgsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckYsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBNkIsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2RDtRQUMxRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUM7WUFDMUQsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUM5RSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDO1lBQ3pELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QjtTQUNGO0lBQ0gsQ0FBQzs7Z0hBbGpCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixnd0NBMk9iLG1CQUFtQiw2RUN2VHRDLHd4UUFrTkEsZ0ZEMUpJLElBQUksNkZBQ0osZ0JBQWdCLG9KQUNoQixPQUFPLG9GQUNQLE9BQU8sbUhBQ1AsT0FBTywyRUFDUCxjQUFjLHlFQUNkLGVBQWUsMEpBQ2YscUJBQXFCLGdIQUNyQixvQkFBb0Isd0pBQ3BCLHVCQUF1QiwrR0FDdkIsdUJBQXVCLHdHQUN2Qix3QkFBd0IsZ1NBQ3hCLHlCQUF5Qix5SEFDekIsdUJBQXVCLHVTQUN2Qix1Q0FBdUMseUxBQ3ZDLG9CQUFvQixxRkFDcEIsbUJBQW1CLG1GQUNuQixjQUFjOzJGQUdMLG1CQUFtQjtrQkEzQi9CLFNBQVM7K0JBQ0UsZUFBZSxZQUdmLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLHVDQUF1Qzt3QkFDdkMsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLGNBQWM7cUJBQ2Y7b0lBNkJHLFVBQVU7c0JBRGIsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsYUFBYTtzQkFEaEIsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBV0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBa0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsTUFBTTtzQkFEVCxLQUFLO2dCQVlGLE1BQU07c0JBRFQsS0FBSztnQkFZRixLQUFLO3NCQURSLEtBQUs7Z0JBaUJGLFlBQVk7c0JBRGYsS0FBSztnQkFXRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBWUYsVUFBVTtzQkFEYixLQUFLO2dCQVlGLFdBQVc7c0JBRGQsS0FBSztnQkFrQkYsV0FBVztzQkFEZCxLQUFLO2dCQWdCRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFlRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUUrQixlQUFlO3NCQUFwRCxlQUFlO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IElUYWJsZSB9IGZyb20gJy4uLy4uL3RhYmxlL3RhYmxlLnR5cGUnO1xuaW1wb3J0IHtcbiAgSUNvbHVtbixcbiAgSUNvbHVtbkZpbHRlcixcbiAgSUNvbHVtbkZpbHRlclZhbHVlLFxuICBJSXRlbSxcbiAgSUl0ZW1JbnRlcm5hbCxcbiAgSVNtYXJ0VGFibGUsXG4gIElTb3J0ZXIsXG4gIElTb3J0ZXJWYWx1ZSxcbiAgSVRhYmxlRmlsdGVyLFxuICBJVGFibGVHcm91cFByb3BzLFxuICBJdGVtc1BlclBhZ2VTZWxlY3Rcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudHlwZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtQ2hlY2tJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgRWxlbWVudENvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudC1jb3Zlcic7XG5pbXBvcnQgeyBIdG1sQXR0cmlidXRlc0RpcmVjdGl2ZSwgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBTbWFydFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9zbWFydC1wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRhYmxlQWN0aXZlRGlyZWN0aXZlLCBUYWJsZUNvbG9yRGlyZWN0aXZlLCBUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3RhYmxlJztcbmltcG9ydCB7IEFsaWduRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC10YWJsZS1maWx0ZXIvc21hcnQtdGFibGUtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWZpbHRlci9maWx0ZXItaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0VGFibGVIZWFkQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtaGVhZC9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBTbWFydFRhYmxlSXRlbXNQZXJQYWdlU2VsZWN0b3JDb21wb25lbnRcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3Ivc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3IuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY1NtYXJ0VGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3JPZixcbiAgICBOZ1N0eWxlLFxuICAgIEFsaWduRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBFbGVtZW50Q292ZXJDb21wb25lbnQsXG4gICAgRmlsdGVySW5wdXREaXJlY3RpdmUsXG4gICAgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUsXG4gICAgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsXG4gICAgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFRhYmxlQWN0aXZlRGlyZWN0aXZlLFxuICAgIFRhYmxlQ29sb3JEaXJlY3RpdmUsXG4gICAgVGFibGVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0VGFibGUsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2FjdGl2ZVBhZ2U6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY2xlYW5lcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY2xpY2thYmxlUm93czogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2l0ZW1zUGVyUGFnZTogTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9wYWdpbmF0aW9uOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RhYmxlOiBCb29sZWFuSW5wdXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwcml2YXRlIGtleVZhbHVlRGlmZmVyczogS2V5VmFsdWVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuaXRlbXNEaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuaXRlbXMpLmNyZWF0ZSgpO1xuICAgIHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fY29sdW1uRmlsdGVyZWQpLmNyZWF0ZSgpO1xuICAgIHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5zb3J0ZXJWYWx1ZSkuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0ZpbHRlcmVkRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2x1bUZpbHRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHNvcnRlclZhbHVlRGlmZmVyOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfCBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBhY3RpdmVQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIHx8IDE7XG4gICAgdGhpcy5hY3RpdmVQYWdlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlUGFnZSk7XG4gIH1cblxuICBnZXQgYWN0aXZlUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZSA9IDE7XG5cbiAgQElucHV0KClcbiAgc2V0IGNsZWFuZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhbmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW5lcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjbGlja2FibGVSb3dzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xpY2thYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY2xpY2thYmxlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpY2thYmxlUm93cztcbiAgfVxuXG4gIHByaXZhdGUgX2NsaWNrYWJsZVJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogKHN0cmluZyB8IElDb2x1bW4pW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWUubWFwKGNvbHVtbiA9PiB0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJyA/IHsga2V5OiBjb2x1bW4gfSA6IHsgLi4uY29sdW1uIH0pO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogKHN0cmluZyB8IElDb2x1bW4pW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zIHx8IHRoaXMucmF3Q29sdW1uTmFtZXM7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5zPzogKHN0cmluZyB8IElDb2x1bW4pW107XG5cbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbkZpbHRlclZhbHVlKHZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgPSB7IC4uLnZhbHVlIH07XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh7IC4uLnRoaXMuX2NvbHVtbkZpbHRlclZhbHVlIH0pO1xuICAgICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclZhbHVlKCk6IElDb2x1bW5GaWx0ZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkZpbHRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyVmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuXG4gIEBJbnB1dCgpIGNvbHVtblNvcnRlcj86IGJvb2xlYW4gfCBJU29ydGVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9mb290ZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGZvb3RlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9vdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGhlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXI7XG4gIH1cblxuICBwcml2YXRlIF9oZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IElJdGVtW10pIHtcbiAgICBpZiAodGhpcy5pdGVtc0RpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuc2V0SXRlbXModmFsdWUpIGFzIEFycmF5PFR5cGU8SUl0ZW1JbnRlcm5hbD4+O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG5cbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9pdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZUxhYmVsOiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCA1MF07XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZVNlbGVjdD86IGJvb2xlYW4gfCBJdGVtc1BlclBhZ2VTZWxlY3Q7XG4gIEBJbnB1dCgpIGxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBub0l0ZW1zTGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnTm8gaXRlbXMgZm91bmQnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwYWdpbmF0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5zb3J0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc29ydGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zb3J0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc29ydGVyVmFsdWUoKTogSVNvcnRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zb3J0ZXJWYWx1ZTogSVNvcnRlclZhbHVlID0ge307XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyKGZpbHRlcikge1xuICAgIHRoaXMuX3RhYmxlRmlsdGVyID0gZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy50YWJsZUZpbHRlckxhYmVsID0gdHlwZW9mIGZpbHRlci5sYWJlbCA9PT0gJ3N0cmluZycgPyBmaWx0ZXIubGFiZWwgOiB0aGlzLnRhYmxlRmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPSB0eXBlb2YgZmlsdGVyLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IGZpbHRlci5wbGFjZWhvbGRlciA6IHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlcjtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlcj86IGJvb2xlYW4gfCBJVGFibGVGaWx0ZXI7XG5cbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9ICd0eXBlIHN0cmluZy4uLic7XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl90YWJsZUZpbHRlclZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSB0YWJsZUJvZHlQcm9wcz86IElUYWJsZUdyb3VwUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlSGVhZFByb3BzPzogSVRhYmxlR3JvdXBQcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZVByb3BzPzogSVRhYmxlID0ge307XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlKSBjb2x1bW5UZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG4gIHRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7IHRhYmxlRGV0YWlsczogbnVsbCwgdGFibGVEYXRhOiBudWxsIH07XG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7fTtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgIGlmIChjaGlsZC5pZC5zdGFydHNXaXRoKCdjb2x1bW5GaWx0ZXJfJykpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgIH0pO1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyB9O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQubGVuZ3RoID09PSAwID8gZmFsc2UgOiBzZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuaXRlbXMubGVuZ3RoID8gdHJ1ZSA6ICdpbmRldGVybWluYXRlJztcbiAgICAvLyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRBbGw7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRBbGwodmFsdWUpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZC5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogJ2luZGV0ZXJtaW5hdGUnO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkQWxsOiAoYm9vbGVhbiB8IHN0cmluZykgPSBmYWxzZTtcblxuICBnZXQgdGFibGVGaWx0ZXJTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclZhbHVlID8gdGhpcy50YWJsZUZpbHRlclZhbHVlIDogJyc7XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPyB0aGlzLmNvbHVtbkZpbHRlclZhbHVlIDoge307XG4gIH1cblxuICBnZXQgbnVtYmVyT2ZQYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UgPyBNYXRoLmNlaWwodGhpcy5zb3J0ZWRJdGVtcy5sZW5ndGggLyB0aGlzLl9pdGVtc1BlclBhZ2UpIDogMTtcbiAgfVxuXG4gIGdldCBjb2xzcGFuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGUgPyB0aGlzLnJhd0NvbHVtbk5hbWVzLmxlbmd0aCArIDEgOiB0aGlzLnJhd0NvbHVtbk5hbWVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBmaXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gKHRoaXMuX2FjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMuX2l0ZW1zUGVyUGFnZSA6IDA7XG4gIH1cblxuICBnZXQgaXRlbXNPbkFjdGl2ZVBhZ2UoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcy5zbGljZShcbiAgICAgIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgsXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4ICsgdGhpcy5faXRlbXNQZXJQYWdlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50SXRlbXMoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/IHRoaXMuaXRlbXNPbkFjdGl2ZVBhZ2UgOiB0aGlzLnNvcnRlZEl0ZW1zID8/IFtdO1xuICAgIC8vIHJldHVybiB0aGlzLml0ZW1zID8/IFtdO1xuICB9XG5cbiAgZ2V0IGdlbkNvbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2l0ZW1zID8gdGhpcy5faXRlbXNbMF0gPz8ge30gOiB7fSkuZmlsdGVyKChlbCkgPT4gZWwuY2hhckF0KDApICE9PSAnXycpO1xuICB9XG5cbiAgZ2V0IHJhd0NvbHVtbk5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zID8gdGhpcy5fY29sdW1ucy5tYXAoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnID8gY29sdW1uLmtleSA6IGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2VuQ29scztcbiAgfVxuXG4gIGdldCBpdGVtc0RhdGFDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnJhd0NvbHVtbk5hbWVzLmZpbHRlcigobmFtZSkgPT4gdGhpcy5nZW5Db2xzLmluY2x1ZGVzKG5hbWUpKTtcbiAgfVxuXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuc29ydGVyVmFsdWUuY29sdW1uO1xuICAgIGlmIChcbiAgICAgICFjb2x1bW5LZXkgfHxcbiAgICAgICF0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSB8fFxuICAgICAgKHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkID0gWy4uLnRoaXMudGFibGVGaWx0ZXJlZF07XG5cbiAgICAvLyBpZiB2YWx1ZXMgaW4gY29sdW1uIGFyZSB0byBiZSBzb3J0ZWQgYnkgbnVtZXJpYyB2YWx1ZSB0aGV5IGFsbCBoYXZlIHRvIGJlIGEgdHlwZSBvZiBudW1iZXJcbiAgICBjb25zdCBmbGlwID0gdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2FzYycgPyAxIDogdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2Rlc2MnID8gLTEgOiAwO1xuXG4gICAgaWYgKGZsaXAgPT09IDApIHtcbiAgICAgIHJldHVybiB0YWJsZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiBjb2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGN1cnJlbnRDb2x1bW4uc29ydGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjdXJyZW50Q29sdW1uLnNvcnRlcik7XG4gICAgICByZXR1cm4gZmxpcCA8IDAgPyBzb3J0ZWQucmV2ZXJzZSgpIDogc29ydGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVGbiA9IChpdGVtMTogeyBbeDogc3RyaW5nXTogYW55OyB9LCBpdGVtMjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBpdGVtMVtjb2x1bW5LZXldO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXRlbTJbY29sdW1uS2V5XTtcbiAgICAgIGNvbnN0IGEgPSB0eXBlb2YgdmFsdWUxID09PSAnbnVtYmVyJyA/IHZhbHVlMSA6IFN0cmluZyh2YWx1ZTEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGEgPiBiID8gMSAqIGZsaXAgOiBiID4gYSA/IC0xICogZmxpcCA6IDA7XG4gICAgfTtcblxuICAgIHJldHVybiB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjb21wYXJlRm4pO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyRXZlbnQoKTogJ2NoYW5nZScgfCAnaW5wdXQnIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkpID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICB9O1xuXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlcmVkOiBJSXRlbUludGVybmFsW10gPSBbXTtcblxuICBnZXQgY29sdW1uRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgX2l0ZW1zID0gdGhpcy5faXRlbXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbHVtbkZpbHRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICAgIHJldHVybiBfaXRlbXM7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZShpdGVtW2tleV0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5rZXkgPT09IGtleSk7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRDb2x1bW4gPT09ICdvYmplY3QnICYmIHR5cGVvZiBjdXJyZW50Q29sdW1uLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAodHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnRDb2x1bW4uZmlsdGVyKGl0ZW0sIHZhbHVlKSkgPz8gIXZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29sdW1uRmlsdGVyICYmIHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IFN0cmluZyhpdGVtW2tleV0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29sdW1uRmlsdGVyKSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICByZXR1cm4gX2l0ZW1zO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmNvbHVtbkZpbHRlcmVkO1xuICAgIGlmIChcbiAgICAgICF0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHxcbiAgICAgICh0aGlzLnRhYmxlRmlsdGVyICYmIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmV4dGVybmFsKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyU3RhdGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZUNvbnRhaW5GaWx0ZXIgPSAodmFsOiBhbnkpID0+IFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5pdGVtc0RhdGFDb2x1bW5zLmZpbmQoKGtleSkgPT4gdmFsdWVDb250YWluRmlsdGVyKGl0ZW1ba2V5XSkpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldCBpc0ZpbHRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHwgdGhpcy5zb3J0ZXJWYWx1ZT8uY29sdW1uIHx8IE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1zKGl0ZW1zOiBJSXRlbVtdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBfaWQ6IGluZGV4IH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIDxJSXRlbUludGVybmFsPltdO1xuICB9XG5cbiAgaGFuZGxlU29ydENoYW5nZSgkZXZlbnQ6IHsgY29sdW1uS2V5OiBzdHJpbmc7IGluZGV4OiBudW1iZXI7IH0pIHtcbiAgICB0aGlzLmhhbmRsZVNvcnRlckNoYW5nZSgkZXZlbnQuY29sdW1uS2V5LCAkZXZlbnQuaW5kZXgpO1xuICB9XG5cbiAgaXNTb3J0YWJsZShpOiBudW1iZXIpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RhdGFDb2x1bW4gPSB0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXModGhpcy5yYXdDb2x1bW5OYW1lc1tpXSk7XG4gICAgbGV0IGNvbHVtbjtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbHVtblNvcnRlciAmJlxuICAgICAgKCF0aGlzLmNvbHVtbnMgfHxcbiAgICAgICAgdHlwZW9mIGNvbHVtbiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmICh0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgY29sdW1uLnNvcnRlcikpXG4gICAgICApICYmIGlzRGF0YUNvbHVtblxuICAgICk7XG4gIH1cblxuICBoYW5kbGVTb3J0ZXJDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnNvcnRlclZhbHVlIH07XG5cbiAgICBpZiAoc3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gMCkge1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0ZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgc3RhdGUuc3RhdGUgPSAnZGVzYyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJiAhdGhpcy5jb2x1bW5Tb3J0ZXIucmVzZXRhYmxlKSB7XG4gICAgICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29sdW1uID0gY29sdW1uO1xuICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcbiAgICB9XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIHNldEFjdGl2ZVBhZ2UoJGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZVBhZ2UgPSAkZXZlbnQ7XG4gIH1cblxuICBoYW5kbGVDb2x1bW5GaWx0ZXJDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSwgW2Ake2NvbHVtbn1gXTogdmFsdWUgfTtcbiAgfVxuXG4gIGhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudDogeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pIHtcbiAgICBjb25zdCB7IHZhbHVlLCB0eXBlIH0gPSAkZXZlbnQ7XG4gICAgY29uc3QgaXNMYXp5ID0gdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSA9PT0gdHJ1ZTtcbiAgICBpZiAoKChpc0xhenkgJiYgdHlwZSA9PT0gJ2lucHV0JykgfHwgKCFpc0xhenkgJiYgdHlwZSA9PT0gJ2NoYW5nZScpKSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xlYW4oJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc29ydGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgfVxuXG4gIGhhbmRsZUl0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pdGVtc1BlclBhZ2UpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHZhbHVlO1xuICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQ6IEV2ZW50LCBpdGVtOiBJSXRlbUludGVybmFsKSB7XG4gICAgaXRlbS5fc2VsZWN0ZWQgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuaXRlbXMubWFwKChpdGVtOiBJSXRlbUludGVybmFsKSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBfc2VsZWN0ZWQ6ICRldmVudCB9O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGwgPSAkZXZlbnQ7XG4gIH1cblxuICB0YWJsZURhdGFDZWxsUHJvcHMoaXRlbTogSUl0ZW0sIGNvbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3BzID0gaXRlbVsnX2NlbGxQcm9wcyddICYmIHtcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bJ19hbGwnXSAmJiB7IC4uLml0ZW1bJ19jZWxsUHJvcHMnXVsnX2FsbCddIH0pLFxuICAgICAgLi4uKGl0ZW1bJ19jZWxsUHJvcHMnXVtjb2xOYW1lXSAmJiB7IC4uLml0ZW1bJ19jZWxsUHJvcHMnXVtjb2xOYW1lXSB9KVxuICAgIH07XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgdGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbTogSUl0ZW0sIGNvbE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycgPyBjb2x1bW4gPT09IGNvbE5hbWUgOiBjb2x1bW5bJ2tleSddID09PSBjb2xOYW1lKTtcbiAgICByZXR1cm4gY29sdW1uWzBdICYmIHR5cGVvZiBjb2x1bW5bMF0gPT09ICdvYmplY3QnID8gY29sdW1uWzBdLl9jbGFzc2VzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uTmFtZSgkZXZlbnQ6IE1vdXNlRXZlbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjbG9zZXN0ID8gQXJyYXkuZnJvbShjbG9zZXN0LmNoaWxkcmVuKSA6IFtdO1xuICAgIGNvbnN0IGNsaWNrZWRDZWxsID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuY29udGFpbnModGFyZ2V0KSlbMF07XG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXNbY2hpbGRyZW4uaW5kZXhPZihjbGlja2VkQ2VsbCkgLSAodGhpcy5fc2VsZWN0YWJsZSA/IDEgOiAwKV07XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyAkZXZlbnQsIGl0ZW0sIGkgfSA9IHsgLi4ucGFyYW0gfTtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5nZXRDb2x1bW5OYW1lKHBhcmFtLiRldmVudCk7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgKyB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LCBjb2x1bW5OYW1lLCBldmVudDogJGV2ZW50IH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY3VycmVudFZhbHVlID8/IHt9KS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlID0gY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0IHx8IHRhYmxlRmlsdGVyIHx8IGNsZWFuZXIgfHwgdGVtcGxhdGVzWyd0YWJsZUN1c3RvbUhlYWRlciddXCIgY2xhc3M9XCJyb3cgbXktMiBteC0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIiAqbmdJZj1cInRhYmxlRmlsdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlRmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIiAqbmdJZj1cImNsZWFuZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDbGVhbmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlQ3VzdG9tSGVhZGVyJ10gfHwgdGFibGVDdXN0b21IZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVGaWx0ZXJUZW1wbGF0ZT5cbiAgICA8Yy1zbWFydC10YWJsZS1maWx0ZXJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJcIlxuICAgICAgW2RlbGF5XT1cIjMwMFwiXG4gICAgICBbZmlsdGVyTGFiZWxdPVwidGFibGVGaWx0ZXJMYWJlbFwiXG4gICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICBbb25FdmVudF09XCJ0YWJsZUZpbHRlckV2ZW50XCJcbiAgICAgIFt2YWx1ZV09XCJ0YWJsZUZpbHRlclN0YXRlXCJcbiAgICAgIGNGaWx0ZXJJbnB1dFxuICAgID5cbiAgICA8L2Mtc21hcnQtdGFibGUtZmlsdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVDbGVhbmVyVGVtcGxhdGU+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNsZWFuKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJjbGVhbmVyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWx0ZXJlZFwiXG4gICAgICBbbmdDbGFzc109XCJ7J21zLTEnOiB0YWJsZUZpbHRlcn1cIlxuICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgY0J1dHRvblxuICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlQ3VzdG9tSGVhZGVyVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMCBtcy1hdXRvXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY3VzdG9tSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gIDx0YWJsZSBbYWxpZ25dPVwidGFibGVQcm9wcz8uYWxpZ25cIlxuICAgICAgICAgW2JvcmRlckNvbG9yXT1cInRhYmxlUHJvcHM/LmJvcmRlckNvbG9yXCJcbiAgICAgICAgIFtib3JkZXJlZF09XCJ0YWJsZVByb3BzPy5ib3JkZXJlZFwiXG4gICAgICAgICBbYm9yZGVybGVzc109XCJ0YWJsZVByb3BzPy5ib3JkZXJsZXNzXCJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxuICAgICAgICAgW2NvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtob3Zlcl09XCJ0YWJsZVByb3BzPy5ob3ZlclwiXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcbiAgICAgICAgIFtzbWFsbF09XCJ0YWJsZVByb3BzPy5zbWFsbFwiXG4gICAgICAgICBbc3RyaXBlZF09XCJ0YWJsZVByb3BzPy5zdHJpcGVkXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgY1RhYmxlXG4gID5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoY29sdW1uRmlsdGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiaGVhZGVyXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJTdGF0ZV09XCJjb2x1bW5GaWx0ZXJTdGF0ZVwiXG4gICAgICBbY29sdW1uRmlsdGVyXT1cImNvbHVtbkZpbHRlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVIZWFkUHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVIZWFkUHJvcHM/LmFsaWduXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImZvb3RlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUZvb3RQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVGb290UHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcbiAgICAgIGNvbXBvbmVudD1cInRmb290XCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgPC90YWJsZT5cbiAgPGMtZWxlbWVudC1jb3ZlclxuICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgW2JvdW5kYXJpZXNdPVwiW1xuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcbiAgICAgIHsgc2lkZXM6IFsnYm90dG9tJ10sIHF1ZXJ5OiAndGJvZHknIH1cbiAgICBdXCJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgW25nSWZdPVwicGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3RcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxXCJcbiAgICAgICAgW2FjdGl2ZVBhZ2VdPVwiYWN0aXZlUGFnZVwiXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCI+XG4gICAgICA8L2Mtc21hcnQtcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxuICAgICAgPGMtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3JcbiAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0XCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZUxhYmVsXT1cIml0ZW1zUGVyUGFnZUxhYmVsXCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcbiAgICAgID5cbiAgICAgIDwvYy1zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3Rvcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rib2R5RGVmYXVsdFRlbXBsYXRlPlxuICA8dGJvZHkgW2NIdG1sQXR0cl09XCJ0YWJsZUJvZHlQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtjQWxpZ25dPVwidGFibGVCb2R5UHJvcHM/LmFsaWduXCJcbiAgPlxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiY3VycmVudEl0ZW1zXCIgbGV0LWNudD1cImNvdW50XCIgbGV0LWk9XCJpbmRleFwiIGxldC1pc0V2ZW49XCJldmVuXCIgbGV0LWlzT2RkPVwib2RkXCI+XG4gICAgPHRyIFt0YWJpbmRleF09XCJjbGlja2FibGVSb3dzID8gMCA6IC0xXCJcbiAgICAgICAgW25nU3R5bGVdPVwie2N1cnNvcjogY2xpY2thYmxlUm93cyA/ICdwb2ludGVyJyA6ICdhdXRvJ31cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soeyRldmVudCwgaXRlbSwgaX0pXCJcbiAgICAgICAgW2NUYWJsZUFjdGl2ZV09XCJpdGVtLl9wcm9wcz8uYWN0aXZlXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0uX3Byb3BzPy5jb2xvclwiXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICA+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmVcIlxuICAgICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtPy5bJ19jZWxsUHJvcHMnXT8uX2FsbD8uY29sb3JcIlxuICAgICAgICAgIFtjQWxpZ25dPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmFsaWduXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQsIGl0ZW0pXCIgW2NoZWNrZWRdPVwiaXRlbS5fc2VsZWN0ZWQgPz8gZmFsc2VcIiBjRm9ybUNoZWNrSW5wdXQ+XG4gICAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5OYW1lIFtuZ0Zvck9mXT1cInJhd0NvbHVtbk5hbWVzXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cbiAgICAgIDwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPi0tPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXTsgY29udGV4dDoge2l0ZW0sIGluZGV4OiBpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9JdGVtc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5EZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtbk5hbWU9XCJjb2x1bW5OYW1lXCIgbGV0LXRkQ29udGVudD1cInRkQ29udGVudFwiPlxuICA8dGRcbiAgICBbY1RhYmxlQWN0aXZlXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uWydhY3RpdmUnXVwiXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uY29sb3JcIlxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXG4gICAgW25nQ2xhc3NdPVwidGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbSwgY29sdW1uTmFtZSlcIlxuICA+XG4gICAge3t0ZENvbnRlbnR9fVxuICA8L3RkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLTxuZy10ZW1wbGF0ZSAjcm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg+LS0+XG48IS0tICA8dHI+PHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIHRhYmluZGV4PVwiLTFcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyQm90dG9tV2lkdGg6IDB9XCI+PC90ZD48L3RyPi0tPlxuPCEtLSAgPHRyIGNsYXNzPVwicC0wXCI+LS0+XG48IS0tICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPi0tPlxuPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LnRhYmxlRGV0YWlsc1wiPjwvbmctY29udGFpbmVyPi0tPlxuPCEtLSAgICA8L3RkPi0tPlxuPCEtLSAgPC90cj4tLT5cbjwhLS08L25nLXRlbXBsYXRlPi0tPlxuXG48bmctdGVtcGxhdGUgI25vSXRlbXNEZWZhdWx0VGVtcGxhdGU+XG4gIDx0ciAqbmdJZj1cIiFjdXJyZW50SXRlbXMubGVuZ3RoXCI+XG4gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57e25vSXRlbXNMYWJlbH19PC90ZD5cbiAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS10b2RvOiBmaWx0ZXJJY29uQ3VzdG9tVGVtcGxhdGUtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVySWNvblRlbXBsYXRlPlxuICA8c3ZnIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwb2ludGVyLWV2ZW50cz1cIm5vbmVcIiByb2xlPVwiaW1nXCJcbiAgICAgICBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiIHdpZHRoPVwiMThcIj5cbiAgICA8cG9seWdvblxuICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxuICAgICAgcG9pbnRzPVwiNDAgMTYgNDAgNTMuODI4IDEwOS4wMjQgMTM2IDE1MC44MTUgMTM2IDc2Ljg5NiA0OCA0NTkuNTEgNDggMzA0IDI0Mi4zODggMzA0IDQwMS4zNzMgMjQxLjM3MyA0NjQgMjQwIDQ2NCAyNDAgMzY4IDIwOCAzNjggMjA4IDQ5NiAyNTQuNjI3IDQ5NiAzMzYgNDE0LjYyNyAzMzYgMjUzLjYxMiA0OTYgNTMuNjEyIDQ5NiAxNiA0MCAxNlwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjE2Ni40MDMgMjQ4LjIyNSAyMjYuODY0IDE4Ny43NjMgMjA0LjIzNyAxNjUuMTM1IDE0My43NzUgMjI1LjU5NyA4My4zMTMgMTY1LjEzNSA2MC42ODcgMTg3Ljc2MyAxMjEuMTQ4IDI0OC4yMjUgNjAuNjg3IDMwOC42ODcgODMuMzEzIDMzMS4zMTQgMTQzLjc3NSAyNzAuODUyIDIwNC4yMzcgMzMxLjMxNCAyMjYuODY0IDMwOC42ODcgMTY2LjQwMyAyNDguMjI1XCJcbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiPlxuICAgIDwvcG9seWdvbj5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvdGFibGUvdGFibGUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMsIENvbG9ycyB9IGZyb20gJy4uL2NvcmV1aS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIHtcbiAgLyoqXG4gICAqIFNldCB0aGUgdmVydGljYWwgYWxpZ25tZW50LlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQHZhbHVlcyAnYm90dG9tJyB8ICdtaWRkbGUnIHwgJ3RvcCdcbiAgICovXG4gIGFsaWduPzogJ2JvdHRvbScgfCAnbWlkZGxlJyB8ICd0b3AnO1xuICAvKipcbiAgICogU2V0cyB0aGUgYm9yZGVyIGNvbG9yIG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICogQHR5cGUgQ29sb3JzXG4gICAqL1xuICBib3JkZXJDb2xvcj86IENvbG9ycztcbiAgLyoqXG4gICAqIEFkZCBib3JkZXJzIG9uIGFsbCBzaWRlcyBvZiB0aGUgdGFibGUgYW5kIGNlbGxzLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBib3JkZXJlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZW1vdmUgYm9yZGVycyBvbiBhbGwgc2lkZXMgb2YgdGhlIHRhYmxlIGFuZCBjZWxscy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgYm9yZGVybGVzcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQdXQgdGhlIGA8Y2FwdGlvbj5gIG9uIHRoZSB0b3Agb2YgdGhlIHRhYmxlLlxuICAgKiBAdmFsdWVzICd0b3AnXG4gICAqL1xuICBjYXB0aW9uPzogJ3RvcCc7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICogQHR5cGUgQ29sb3JzXG4gICAqL1xuICBjb2xvcj86IENvbG9ycztcbiAgLyoqXG4gICAqIEVuYWJsZSBhIGhvdmVyIHN0YXRlIG9uIHRhYmxlIHJvd3Mgd2l0aGluIHRhYmxlIGJvZHkuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIGhvdmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1ha2UgdGFibGUgcmVzcG9uc2l2ZSBhY3Jvc3MgYWxsIHZpZXdwb3J0cyBvciBwaWNrIGEgbWF4aW11bSBicmVha3BvaW50IHdpdGggd2hpY2ggdG8gaGF2ZSBhIHJlc3BvbnNpdmUgdGFibGUgdXAgdG8uXG4gICAqIEB0eXBlOiB7Ym9vbGVhbiB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCAneHhsJ31cbiAgICovXG4gIHJlc3BvbnNpdmU/OiBib29sZWFuIHwgT21pdDxCcmVha3BvaW50cywgJ3hzJz47XG4gIC8qKlxuICAgKiBNYWtlIHRhYmxlIG1vcmUgY29tcGFjdCBieSBjdXR0aW5nIGFsbCBjZWxsIGBwYWRkaW5nYCBpbiBoYWxmLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBzbWFsbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBZGQgemVicmEtc3RyaXBpbmcgdG8gYW55IHRhYmxlIHJvdyB3aXRoaW4gdGhlIHRhYmxlIGJvZHlgLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBzdHJpcGVkPzogYm9vbGVhbjtcbiAgYXR0cmlidXRlcz86IHtba2V5OiBzdHJpbmddOiBhbnl9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUVsZW1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZlcnRpY2FsIGFsaWdubWVudC5cbiAgIEB0eXBlIHN0cmluZ1xuICAgKi9cbiAgYWxpZ24/OiAnYm90dG9tJyB8ICdtaWRkbGUnIHwgJ3RvcCdcbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbG9yIGNvbnRleHQgb2YgdGhlIGNvbXBvbmVudCB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxuICAgKiBAdHlwZSBDb2xvcnNcbiAgICovXG4gIGNvbG9yPzogQ29sb3JzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlUm93Q2VsbFByb3BzIGV4dGVuZHMgSVRhYmxlRWxlbWVudFByb3BzIHtcbiAgLyoqXG4gICAqIEhpZ2hsaWdodCBhIHRhYmxlIHJvdyBvciBjZWxsXG4gICBAdHlwZSBib29sZWFuXG4gICAqL1xuICBhY3RpdmU/OiBib29sZWFuXG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvdGFibGUvdGFibGUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMsIENvbG9ycyB9IGZyb20gJy4uL2NvcmV1aS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIHtcbiAgLyoqXG4gICAqIFNldCB0aGUgdmVydGljYWwgYWxpZ25tZW50LlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQHZhbHVlcyAnYm90dG9tJyB8ICdtaWRkbGUnIHwgJ3RvcCdcbiAgICovXG4gIGFsaWduPzogJ2JvdHRvbScgfCAnbWlkZGxlJyB8ICd0b3AnO1xuICAvKipcbiAgICogU2V0cyB0aGUgYm9yZGVyIGNvbG9yIG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICogQHR5cGUgQ29sb3JzXG4gICAqL1xuICBib3JkZXJDb2xvcj86IENvbG9ycztcbiAgLyoqXG4gICAqIEFkZCBib3JkZXJzIG9uIGFsbCBzaWRlcyBvZiB0aGUgdGFibGUgYW5kIGNlbGxzLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBib3JkZXJlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZW1vdmUgYm9yZGVycyBvbiBhbGwgc2lkZXMgb2YgdGhlIHRhYmxlIGFuZCBjZWxscy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgYm9yZGVybGVzcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQdXQgdGhlIGA8Y2FwdGlvbj5gIG9uIHRoZSB0b3Agb2YgdGhlIHRhYmxlLlxuICAgKiBAdmFsdWVzICd0b3AnXG4gICAqL1xuICBjYXB0aW9uPzogJ3RvcCc7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICogQHR5cGUgQ29sb3JzXG4gICAqL1xuICBjb2xvcj86IENvbG9ycztcbiAgLyoqXG4gICAqIEVuYWJsZSBhIGhvdmVyIHN0YXRlIG9uIHRhYmxlIHJvd3Mgd2l0aGluIHRhYmxlIGJvZHkuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIGhvdmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1ha2UgdGFibGUgcmVzcG9uc2l2ZSBhY3Jvc3MgYWxsIHZpZXdwb3J0cyBvciBwaWNrIGEgbWF4aW11bSBicmVha3BvaW50IHdpdGggd2hpY2ggdG8gaGF2ZSBhIHJlc3BvbnNpdmUgdGFibGUgdXAgdG8uXG4gICAqIEB0eXBlOiB7Ym9vbGVhbiB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCAneHhsJ31cbiAgICovXG4gIHJlc3BvbnNpdmU/OiBib29sZWFuIHwgT21pdDxCcmVha3BvaW50cywgJ3hzJz47XG4gIC8qKlxuICAgKiBNYWtlIHRhYmxlIG1vcmUgY29tcGFjdCBieSBjdXR0aW5nIGFsbCBjZWxsIGBwYWRkaW5nYCBpbiBoYWxmLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBzbWFsbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBZGQgemVicmEtc3RyaXBpbmcgdG8gYW55IHRhYmxlIHJvdyB3aXRoaW4gdGhlIHRhYmxlIGJvZHlgLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBzdHJpcGVkPzogYm9vbGVhbjtcbiAgYXR0cmlidXRlcz86IHtba2V5OiBzdHJpbmddOiBhbnl9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUVsZW1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZlcnRpY2FsIGFsaWdubWVudC5cbiAgIEB0eXBlICdib3R0b20nIHwgJ21pZGRsZScgfCAndG9wJ1xuICAgKi9cbiAgYWxpZ24/OiAoJ2JvdHRvbScgfCAnbWlkZGxlJyB8ICd0b3AnKVxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgY29tcG9uZW50IHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXG4gICAqIEB0eXBlIENvbG9yc1xuICAgKi9cbiAgY29sb3I/OiBDb2xvcnNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVSb3dDZWxsUHJvcHMgZXh0ZW5kcyBJVGFibGVFbGVtZW50UHJvcHMge1xuICAvKipcbiAgICogSGlnaGxpZ2h0IGEgdGFibGUgcm93IG9yIGNlbGxcbiAgIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIGFjdGl2ZT86IGJvb2xlYW5cbn1cbiJdfQ==