@progress-chef/platform-shared-components 0.0.90 → 0.0.92

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.
@@ -196,7 +196,9 @@ export class GridPaginationComponent {
196
196
  if (this.allPagesSelected) {
197
197
  this.triggerSelectAllPagesEvent(false);
198
198
  }
199
- elementResult.style.height = this.savedHeight + 'px';
199
+ if (this.savedHeight > 0) {
200
+ elementResult.style.height = this.savedHeight + 'px';
201
+ }
200
202
  }
201
203
  }
202
204
  }
@@ -381,11 +383,11 @@ export class GridPaginationComponent {
381
383
  this.grid.cancelCell();
382
384
  }
383
385
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPaginationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GridPaginationComponent, selector: "lib-grid-pagination", inputs: { gridView: "gridView", skip: "skip", itemName: "itemName", showSelectAllMessage: "showSelectAllMessage", columnData: "columnData", pageSize: "pageSize", pageable: "pageable", sortable: "sortable", groupable: "groupable", reorderable: "reorderable", resizable: "resizable", checkBoxWidth: "checkBoxWidth", checkBoxColumnResizable: "checkBoxColumnResizable", checkBoxColumnMenu: "checkBoxColumnMenu", checkBoxColumnShowSelectedAll: "checkBoxColumnShowSelectedAll", checkBoxRequired: "checkBoxRequired", columnMenu: "columnMenu", mode: "mode", checkboxOnly: "checkboxOnly", dragColumns: "dragColumns", navigable: "navigable", gridRowSelectByValue: "gridRowSelectByValue", noRecordsContent: "noRecordsContent", showToolbar: "showToolbar", kebabList: "kebabList", showKebab: "showKebab", icon: "icon", kebabColumnWidth: "kebabColumnWidth", selectColumn: "selectColumn", preSelected: "preSelected", ignoreColumnCellClick: "ignoreColumnCellClick", allowColumnClick: "allowColumnClick", sort: "sort", hasApiSorting: "hasApiSorting", expandRowIndex: "expandRowIndex", customExpandRowColumn: "customExpandRowColumn", deleteColumnWidth: "deleteColumnWidth", sizes: "sizes", pageCount: "pageCount", showDeleteColumn: "showDeleteColumn", hideKebabRowIndex: "hideKebabRowIndex", loading: "loading", loaderType: "loaderType", loaderSize: "loaderSize", loaderTheme: "loaderTheme", disablePreSelectedRows: "disablePreSelectedRows", allowEditingCell: "allowEditingCell", columnContentNoWrap: "columnContentNoWrap" }, outputs: { onSelectAllAcrossPages: "onSelectAllAcrossPages", selectedRowData: "selectedRowData", rowDetails: "rowDetails", kebabItemClick: "kebabItemClick", rowDataOfClickedCell: "rowDataOfClickedCell", onPageChange: "onPageChange", sortDirection: "sortDirection", deletedRowData: "deletedRowData", updatedData: "updatedData" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "templateRef", first: true, predicate: ["multiColumnData"], descendants: true }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true }, { propertyName: "impactColumn", first: true, predicate: ["impactColumn"], descendants: true }, { propertyName: "columnTemplates", predicate: CustomColumnTemplate }], viewQueries: [{ propertyName: "grid", first: true, predicate: GridComponent, descendants: true }, { propertyName: "gridElement", first: true, predicate: ["gridElement"], descendants: true }, { propertyName: "selectAllMessageElement", first: true, predicate: ["selectAllMessageElement"], descendants: true }], ngImport: i0, template: "<div #gridElement (window:resize)=\"resize($event)\" [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [groupable]=\"groupable\" [reorderable]=\"reorderable\"\n [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\" [height]=\"height\" [style.height]=\"height\"\n (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\" [sort]=\"sort\"\n (sortChange)=\"sortChange($event)\" [ngClass]=\"getHeaderHeight()\" id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement class=\"lib-grid-select-all-message-container\">\n <div *ngIf=\"!allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+gridView.data.length+' '+itemName+' on this page are selected.'\" type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class= \"select-all-handler\" [defaultText]=\"'Select all '+gridView.total+' '+itemName+' from all pages'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+gridView.total+' '+itemName+' across all pages are selected.'\" type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class= \"select-all-handler\" [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n <ng-template *ngIf=\"showToolbar\" kendoGridToolbarTemplate>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-template *ngIf=\"this.gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n\n <ng-container *ngIf=\"this.gridView.total > 0\">\n <kendo-grid-checkbox-column *ngIf=\"checkBoxRequired === true\" [width]=\"checkBoxWidth\"\n [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\" class=\"checkbox-column\">\n <ng-template kendoGridHeaderTemplate>\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n \n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [sortable]=\"item.sortable\" [editor]=\"item.editor\" [class]=\"item.class\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\" [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: ["::ng-deep .k-grid tr{height:50px}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link .k-column-title,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link .k-column-title{text-overflow:clip!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "component", type: i3.IconComponent, selector: "lib-icon", inputs: ["name", "projectedIcon", "fontSize", "type"] }, { kind: "directive", type: i4.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "component", type: i5.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i5.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "directive", type: i5.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i5.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i5.DetailTemplateDirective, selector: "[kendoGridDetailTemplate]", inputs: ["kendoGridDetailTemplateShowIf"] }, { kind: "component", type: i5.CheckboxColumnComponent, selector: "kendo-grid-checkbox-column", inputs: ["showSelectAll"] }, { kind: "directive", type: i5.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i5.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { kind: "directive", type: i5.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "directive", type: i5.SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { kind: "component", type: i5.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { kind: "component", type: i5.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { kind: "component", type: i5.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { kind: "component", type: i5.PagerInfoComponent, selector: "kendo-pager-info" }, { kind: "component", type: i5.PagerPageSizesComponent, selector: "kendo-pager-page-sizes", inputs: ["pageSizes"] }, { kind: "directive", type: i5.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { kind: "component", type: i6.TooltipComponent, selector: "lib-tooltip", inputs: ["position", "tooltipWidth", "tooltipHeight", "showOn", "closable", "title", "callout"] }, { kind: "component", type: i7.TypographyComponent, selector: "lib-typography", inputs: ["type", "defaultText", "isLabel", "hiddenLabel"] }, { kind: "component", type: i8.LoaderComponent, selector: "lib-loader", inputs: ["size", "type", "themeColor"] }, { kind: "pipe", type: i9.KebabMenuFilterPipe, name: "kebabMenuFilter" }] }); }
386
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GridPaginationComponent, selector: "lib-grid-pagination", inputs: { gridView: "gridView", skip: "skip", itemName: "itemName", showSelectAllMessage: "showSelectAllMessage", columnData: "columnData", pageSize: "pageSize", pageable: "pageable", sortable: "sortable", groupable: "groupable", reorderable: "reorderable", resizable: "resizable", checkBoxWidth: "checkBoxWidth", checkBoxColumnResizable: "checkBoxColumnResizable", checkBoxColumnMenu: "checkBoxColumnMenu", checkBoxColumnShowSelectedAll: "checkBoxColumnShowSelectedAll", checkBoxRequired: "checkBoxRequired", columnMenu: "columnMenu", mode: "mode", checkboxOnly: "checkboxOnly", dragColumns: "dragColumns", navigable: "navigable", gridRowSelectByValue: "gridRowSelectByValue", noRecordsContent: "noRecordsContent", showToolbar: "showToolbar", kebabList: "kebabList", showKebab: "showKebab", icon: "icon", kebabColumnWidth: "kebabColumnWidth", selectColumn: "selectColumn", preSelected: "preSelected", ignoreColumnCellClick: "ignoreColumnCellClick", allowColumnClick: "allowColumnClick", sort: "sort", hasApiSorting: "hasApiSorting", expandRowIndex: "expandRowIndex", customExpandRowColumn: "customExpandRowColumn", deleteColumnWidth: "deleteColumnWidth", sizes: "sizes", pageCount: "pageCount", showDeleteColumn: "showDeleteColumn", hideKebabRowIndex: "hideKebabRowIndex", loading: "loading", loaderType: "loaderType", loaderSize: "loaderSize", loaderTheme: "loaderTheme", disablePreSelectedRows: "disablePreSelectedRows", allowEditingCell: "allowEditingCell", columnContentNoWrap: "columnContentNoWrap" }, outputs: { onSelectAllAcrossPages: "onSelectAllAcrossPages", selectedRowData: "selectedRowData", rowDetails: "rowDetails", kebabItemClick: "kebabItemClick", rowDataOfClickedCell: "rowDataOfClickedCell", onPageChange: "onPageChange", sortDirection: "sortDirection", deletedRowData: "deletedRowData", updatedData: "updatedData" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "templateRef", first: true, predicate: ["multiColumnData"], descendants: true }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true }, { propertyName: "impactColumn", first: true, predicate: ["impactColumn"], descendants: true }, { propertyName: "columnTemplates", predicate: CustomColumnTemplate }], viewQueries: [{ propertyName: "grid", first: true, predicate: GridComponent, descendants: true }, { propertyName: "gridElement", first: true, predicate: ["gridElement"], descendants: true }, { propertyName: "selectAllMessageElement", first: true, predicate: ["selectAllMessageElement"], descendants: true }], ngImport: i0, template: "<div #gridElement (window:resize)=\"resize($event)\" [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [groupable]=\"groupable\" [reorderable]=\"reorderable\"\n [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\" [height]=\"height\" [style.height]=\"height\"\n (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\"\n [sort]=\"sort\" (sortChange)=\"sortChange($event)\" [ngClass]=\"getHeaderHeight()\" id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement class=\"lib-grid-select-all-message-container\">\n <div *ngIf=\"!allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+gridView.data.length+' '+itemName+' on this page are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class=\"select-all-handler\"\n [defaultText]=\"'Select all '+gridView.total+' '+itemName+' from all pages'\"\n type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+gridView.total+' '+itemName+' across all pages are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class=\"select-all-handler\"\n [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n <ng-template *ngIf=\"showToolbar\" kendoGridToolbarTemplate>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-template *ngIf=\"this.gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n\n <ng-container *ngIf=\"this.gridView.total > 0\">\n <kendo-grid-checkbox-column *ngIf=\"checkBoxRequired === true\" [width]=\"checkBoxWidth\"\n [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\" class=\"checkbox-column\">\n <ng-template kendoGridHeaderTemplate>\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n\n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [sortable]=\"item.sortable\" [editor]=\"item.editor\" [class]=\"item.class\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\"\n [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <div class=\"pagination-wrapper\" [ngClass]=\"allPagesSelected ? 'pagination-disabled' : ''\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </div>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: ["::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link .k-column-title,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link .k-column-title{text-overflow:clip!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "component", type: i3.IconComponent, selector: "lib-icon", inputs: ["name", "projectedIcon", "fontSize", "type"] }, { kind: "directive", type: i4.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "component", type: i5.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i5.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "directive", type: i5.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i5.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i5.DetailTemplateDirective, selector: "[kendoGridDetailTemplate]", inputs: ["kendoGridDetailTemplateShowIf"] }, { kind: "component", type: i5.CheckboxColumnComponent, selector: "kendo-grid-checkbox-column", inputs: ["showSelectAll"] }, { kind: "directive", type: i5.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i5.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { kind: "directive", type: i5.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "directive", type: i5.SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { kind: "component", type: i5.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { kind: "component", type: i5.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { kind: "component", type: i5.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { kind: "component", type: i5.PagerInfoComponent, selector: "kendo-pager-info" }, { kind: "component", type: i5.PagerPageSizesComponent, selector: "kendo-pager-page-sizes", inputs: ["pageSizes"] }, { kind: "directive", type: i5.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { kind: "component", type: i6.TooltipComponent, selector: "lib-tooltip", inputs: ["position", "tooltipWidth", "tooltipHeight", "showOn", "closable", "title", "callout"] }, { kind: "component", type: i7.TypographyComponent, selector: "lib-typography", inputs: ["type", "defaultText", "isLabel", "hiddenLabel"] }, { kind: "component", type: i8.LoaderComponent, selector: "lib-loader", inputs: ["size", "type", "themeColor"] }, { kind: "pipe", type: i9.KebabMenuFilterPipe, name: "kebabMenuFilter" }] }); }
385
387
  }
386
388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPaginationComponent, decorators: [{
387
389
  type: Component,
388
- args: [{ selector: 'lib-grid-pagination', template: "<div #gridElement (window:resize)=\"resize($event)\" [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [groupable]=\"groupable\" [reorderable]=\"reorderable\"\n [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\" [height]=\"height\" [style.height]=\"height\"\n (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\" [sort]=\"sort\"\n (sortChange)=\"sortChange($event)\" [ngClass]=\"getHeaderHeight()\" id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement class=\"lib-grid-select-all-message-container\">\n <div *ngIf=\"!allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+gridView.data.length+' '+itemName+' on this page are selected.'\" type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class= \"select-all-handler\" [defaultText]=\"'Select all '+gridView.total+' '+itemName+' from all pages'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+gridView.total+' '+itemName+' across all pages are selected.'\" type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class= \"select-all-handler\" [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n <ng-template *ngIf=\"showToolbar\" kendoGridToolbarTemplate>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-template *ngIf=\"this.gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n\n <ng-container *ngIf=\"this.gridView.total > 0\">\n <kendo-grid-checkbox-column *ngIf=\"checkBoxRequired === true\" [width]=\"checkBoxWidth\"\n [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\" class=\"checkbox-column\">\n <ng-template kendoGridHeaderTemplate>\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n \n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [sortable]=\"item.sortable\" [editor]=\"item.editor\" [class]=\"item.class\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\" [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: ["::ng-deep .k-grid tr{height:50px}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link .k-column-title,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link .k-column-title{text-overflow:clip!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}\n"] }]
390
+ args: [{ selector: 'lib-grid-pagination', template: "<div #gridElement (window:resize)=\"resize($event)\" [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [groupable]=\"groupable\" [reorderable]=\"reorderable\"\n [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\" [height]=\"height\" [style.height]=\"height\"\n (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\"\n [sort]=\"sort\" (sortChange)=\"sortChange($event)\" [ngClass]=\"getHeaderHeight()\" id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement class=\"lib-grid-select-all-message-container\">\n <div *ngIf=\"!allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+gridView.data.length+' '+itemName+' on this page are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class=\"select-all-handler\"\n [defaultText]=\"'Select all '+gridView.total+' '+itemName+' from all pages'\"\n type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+gridView.total+' '+itemName+' across all pages are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class=\"select-all-handler\"\n [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n <ng-template *ngIf=\"showToolbar\" kendoGridToolbarTemplate>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-template *ngIf=\"this.gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n\n <ng-container *ngIf=\"this.gridView.total > 0\">\n <kendo-grid-checkbox-column *ngIf=\"checkBoxRequired === true\" [width]=\"checkBoxWidth\"\n [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\" class=\"checkbox-column\">\n <ng-template kendoGridHeaderTemplate>\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n\n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [sortable]=\"item.sortable\" [editor]=\"item.editor\" [class]=\"item.class\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\"\n [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <div class=\"pagination-wrapper\" [ngClass]=\"allPagesSelected ? 'pagination-disabled' : ''\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </div>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: ["::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link .k-column-title,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link .k-column-title{text-overflow:clip!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}\n"] }]
389
391
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { columnTemplates: [{
390
392
  type: ContentChildren,
391
393
  args: [CustomColumnTemplate]
@@ -525,4 +527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
525
527
  type: HostListener,
526
528
  args: ['window:resize', ['$event']]
527
529
  }] } });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEQsT0FBTyxFQUdMLGFBQWEsRUFPZCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBa0IsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUVMLGVBQWUsRUFDZixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFLL0YsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFtQixRQUFnQztRQUFoQyxhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUQxQyxTQUFJLEdBQVcsRUFBRSxDQUFDO0lBQzRCLENBQUM7K0dBRjdDLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JB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QUFlO3NCQUF4QixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRSxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFNRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0UsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkF5T04sTUFBTTtzQkFETCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEtleXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2VsbENsaWNrRXZlbnQsXG4gIENlbGxDbG9zZUV2ZW50LFxuICBHcmlkQ29tcG9uZW50LFxuICBHcmlkRGF0YVJlc3VsdCxcbiAgUGFnZUNoYW5nZUV2ZW50LFxuICBSb3dDbGFzc0FyZ3MsXG4gIFNlbGVjdEFsbENoZWNrYm94U3RhdGUsXG4gIFNlbGVjdGFibGVNb2RlLFxuICBTZWxlY3RhYmxlU2V0dGluZ3Ncbn0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XG5pbXBvcnQgeyBTb3J0RGVzY3JpcHRvciwgb3JkZXJCeSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcbmltcG9ydCB7XG4gIFNWR0ljb24sXG4gIGNoZXZyb25Eb3duSWNvbixcbiAgY2hldnJvblVwSWNvbixcbiAgbW9yZVZlcnRpY2FsSWNvblxufSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tc3ZnLWljb25zJztcbmltcG9ydCB7IExvYWRlclNpemUsIExvYWRlclRoZW1lQ29sb3IsIExvYWRlclR5cGUgfSBmcm9tICcuLi8uLi9hdG9tcy9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3R5cGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Db2x1bW5UZW1wbGF0ZSB7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiXCI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q29tcG9uZW50PikgeyB9XG59XG5cbmNvbnN0IGNyZWF0ZUZvcm1Hcm91cCA9IChkYXRhSXRlbTogYW55KTogRm9ybUdyb3VwID0+IHtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBmb3IgKGxldCBkYXRhIG9mIE9iamVjdC5rZXlzKGRhdGFJdGVtKSkge1xuICAgIGZvcm0uYWRkQ29udHJvbChkYXRhLCBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bZGF0YV0sIFZhbGlkYXRvcnMucmVxdWlyZWQpKVxuICB9XG4gIHJldHVybiBmb3JtXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ3JpZC1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkUGFnaW5hdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBDb250ZW50Q2hpbGRyZW4oQ3VzdG9tQ29sdW1uVGVtcGxhdGUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxDdXN0b21Db2x1bW5UZW1wbGF0ZT4gfCBbXTtcbiAgQENvbnRlbnRDaGlsZCgnbXVsdGlDb2x1bW5EYXRhJykgdGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQENvbnRlbnRDaGlsZCgnZGV0YWlsVGVtcGxhdGUnKSBkZXRhaWxUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBAQ29udGVudENoaWxkKCdpbXBhY3RDb2x1bW4nKSBpbXBhY3RDb2x1bW4hOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQFZpZXdDaGlsZChHcmlkQ29tcG9uZW50KSBncmlkITogR3JpZENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZ3JpZEVsZW1lbnQnKSBncmlkRWxlbWVudCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Jykgc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGdyaWRWaWV3OiBHcmlkRGF0YVJlc3VsdCA9IHsgZGF0YTogW10sIHRvdGFsOiAwIH07XG4gIEBJbnB1dCgpIHNraXA6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGl0ZW1OYW1lOiBzdHJpbmcgPSAnSXRlbXMnO1xuICBASW5wdXQoKSBzaG93U2VsZWN0QWxsTWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxQYWdlc1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVkSGVpZ2h0OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1NlbGVjdEFsbFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gIEBPdXRwdXQoKSBvblNlbGVjdEFsbEFjcm9zc1BhZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBASW5wdXQoKSBjb2x1bW5EYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGdyb3VwYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZW9yZGVyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tCb3hXaWR0aDogbnVtYmVyID0gNDU7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uUmVzaXphYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjaGVja0JveENvbHVtblNob3dTZWxlY3RlZEFsbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNoZWNrQm94UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RlOiBTZWxlY3RhYmxlTW9kZSB8IHVuZGVmaW5lZCA9ICdtdWx0aXBsZSc7XG4gIEBJbnB1dCgpIGNoZWNrYm94T25seSA9IHRydWU7XG4gIEBJbnB1dCgpIGRyYWdDb2x1bW5zID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5hdmlnYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGhlaWdodDogYW55O1xuICBASW5wdXQoKSBncmlkUm93U2VsZWN0QnlWYWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG5vUmVjb3Jkc0NvbnRlbnQ6IHN0cmluZyA9ICdObyBSZWNvcmRzIEF2YWlsYWJsZSc7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd0RhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBASW5wdXQoKSBzaG93VG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBleHRyYWN0RGF0YUl0ZW1zOiBhbnk7XG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzID0ge307XG4gIEBJbnB1dCgpIGtlYmFiTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIHNob3dLZWJhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcm93RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBrZWJhYkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBpY29uOiBTVkdJY29uID0gbW9yZVZlcnRpY2FsSWNvbjtcbiAgQElucHV0KCkga2ViYWJDb2x1bW5XaWR0aDogbnVtYmVyID0gNjA7XG4gIGRhdGE6IGFueSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RDb2x1bW4gPSAnJztcbiAgQE91dHB1dCgpIHJvd0RhdGFPZkNsaWNrZWRDZWxsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHByZVNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwcmVTZWxlY3RlZFJlY29yZHM6IGFueVtdID0gW107XG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgaWdub3JlQ29sdW1uQ2VsbENsaWNrOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBhbGxvd0NvbHVtbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnQ6IFNvcnREZXNjcmlwdG9yW10gPSBbXG4gICAge1xuICAgICAgZmllbGQ6ICcnLFxuICAgICAgZGlyOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgXTtcbiAgQElucHV0KCkgaGFzQXBpU29ydGluZyA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc29ydERpcmVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgYXJyb3dEb3duSWNvbjogU1ZHSWNvbiA9IGNoZXZyb25Eb3duSWNvbjtcbiAgcHVibGljIGFycm93VXBJY29uOiBTVkdJY29uID0gY2hldnJvblVwSWNvbjtcbiAgQElucHV0KCkgZXhwYW5kUm93SW5kZXg6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbUV4cGFuZFJvd0NvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWxldGVDb2x1bW5XaWR0aDogbnVtYmVyID0gNDI7XG4gIGV4cGFuZFJvd0NvbHVtbldpZHRoOiBudW1iZXIgPSA1NjtcbiAgQE91dHB1dCgpIGRlbGV0ZWRSb3dEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHNpemVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdlQ291bnQgPSAwO1xuICBASW5wdXQoKSBzaG93RGVsZXRlQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVLZWJhYlJvd0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRlclR5cGU6IExvYWRlclR5cGUgPSBMb2FkZXJUeXBlLnB1bHNpbmc7XG4gIEBJbnB1dCgpIGxvYWRlclNpemU6IExvYWRlclNpemUgPSBMb2FkZXJTaXplLm1lZGl1bTtcbiAgQElucHV0KCkgbG9hZGVyVGhlbWU6IExvYWRlclRoZW1lQ29sb3IgPSBMb2FkZXJUaGVtZUNvbG9yLnByaW1hcnk7XG4gIGluaXRpYWxHcmlkSGVpZ2h0OiBhbnk7XG4gIGdyaWRCb3R0b21TcGFjZSA9IDI0O1xuICByZXNpemVIZWlnaHQ6IGFueSA9IDA7XG4gIHNlbGVjdEFsbFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcbiAgQElucHV0KCkgZGlzYWJsZVByZVNlbGVjdGVkUm93cyA9IGZhbHNlO1xuICBwdWJsaWMgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgYW55O1xuICBAT3V0cHV0KCkgdXBkYXRlZERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgYWxsb3dFZGl0aW5nQ2VsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5Db250ZW50Tm9XcmFwID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMuc2V0U2VsZWN0YWJsZVNldHRpbmdzKCk7XG4gIH1cblxuICBjb2x1bW5UZW1wbGF0ZURpY3Q6IGFueSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29sdW1uRGF0YS5mb3JFYWNoKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29sdW1uLnNvcnRhYmxlID0gY29sdW1uLnNvcnRhYmxlID09IHVuZGVmaW5lZCA/IHRydWUgOiBjb2x1bW4uc29ydGFibGU7XG4gICAgICBpZiAoIXRoaXMuaWdub3JlQ29sdW1uQ2VsbENsaWNrLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICBjb2x1bW4uY2xhc3MgPSAnY29sdW1uLWN1cnNvci1wb2ludGVyJztcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICghdGhpcy5oYXNBcGlTb3J0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRHcmlkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLmdyaWRWaWV3LmRhdGE/Lmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCh4ID0+IHRoaXMuY29sdW1uVGVtcGxhdGVEaWN0W3gudHlwZV0gPSB4LnRlbXBsYXRlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jdXN0b21FeHBhbmRSb3dDb2x1bW4pIHtcbiAgICAgIHRoaXMuZXhwYW5kUm93SW5kZXguZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkLmV4cGFuZFJvdyhpZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLnByZVNlbGVjdGVkO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGggPT0gdGhpcy5ncmlkVmlldy50b3RhbCkge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2NoZWNrZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICd1bmNoZWNrZWQnO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxHcmlkSGVpZ2h0ID1cbiAgICAgIHRoaXMuZ3JpZEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyB0aGlzLmdyaWRCb3R0b21TcGFjZTtcbiAgICAvLyB0aGlzLmdldEdyaWRIZWlnaHQoKTtcblxuICAgIGNvbnN0IGdyaWRDb250YWluZXIgPSB0aGlzLmdyaWRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdrLWdyaWQtY29udGFpbmVyJylbMF07XG4gICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICBncmlkQ29udGFpbmVyLnBhcmVudEVsZW1lbnQsXG4gICAgICB0aGlzLnNlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBncmlkQ29udGFpbmVyLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgfVxuXG4gIHNlbGVjdEFjcm9zc1BhZ2VzKGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50KGlzU2VsZWN0ZWQpO1xuICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZSh0aGlzLnByZXZpb3VzU2VsZWN0QWxsU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlclNlbGVjdEFsbFBhZ2VzRXZlbnQoaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMuYWxsUGFnZXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5vblNlbGVjdEFsbEFjcm9zc1BhZ2VzLmVtaXQoaXNTZWxlY3RlZCk7XG4gICAgY29uc29sZS5sb2coJ3RyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50IDogaXNTZWxlY3RlZCcsIGlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgYWRkU2VsZWN0QWxsTWVzc2FnZShzZWxlY3RBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zaG93U2VsZWN0QWxsTWVzc2FnZSAmJiB0aGlzLnBhZ2VDb3VudCA+IDEpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZXN1bHQgPSB0aGlzLnNlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIGlmIChzZWxlY3RBbGwpIHtcbiAgICAgICAgdGhpcy5zYXZlZEhlaWdodCA9IGVsZW1lbnRSZXN1bHQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBiZWZvcmVIZWlnaHQgPSBlbGVtZW50UmVzdWx0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNZXNzYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1zaG93Jyk7XG4gICAgICAgIGNvbnN0IGFmdGVySGVpZ2h0ID0gZWxlbWVudFJlc3VsdC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGVsZW1lbnRSZXN1bHQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IC0gKGFmdGVySGVpZ2h0IC0gYmVmb3JlSGVpZ2h0KSkgKyAncHgnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNZXNzYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1zaG93Jyk7XG4gICAgICAgIGlmICh0aGlzLmFsbFBhZ2VzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50UmVzdWx0LnN0eWxlLmhlaWdodCA9IHRoaXMuc2F2ZWRIZWlnaHQgKyAncHgnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0YWJsZVNldHRpbmdzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrYm94T25seSB8fCB0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmRyYWdDb2x1bW5zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XG4gICAgICBjaGVja2JveE9ubHk6IHRoaXMuY2hlY2tib3hPbmx5LFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgZHJhZzogdGhpcy5kcmFnQ29sdW1ucyxcbiAgICB9O1xuICB9XG5cbiAgLy8gV2UgY2FuIGV4dHJhY3QgZGF0YSBvdXQgb2Ygcm93IG51bWJlciB1c2luZyBiZWxvdyBmdW5jdGlvblxuICAvKiBleHRyYWN0KCkge1xuICAgIHRoaXMuZXh0cmFjdERhdGFJdGVtcyA9IHRoaXMubXlTZWxlY3Rpb24ubWFwKGlkeCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YS5maW5kKChkYXRhOiB7IFByb2R1Y3RJRDogbnVtYmVyOyB9KSA9PiBkYXRhLlByb2R1Y3RJRCA9PT0gaWR4KTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmV4dHJhY3REYXRhSXRlbXMpXG4gICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEuZW1pdCh0aGlzLmV4dHJhY3REYXRhSXRlbXMpO1xuICB9ICovXG5cbiAgc2VsZWN0ZWRLZXlzQ2hhbmdlKHJvd3M6IG51bWJlcltdKSB7XG4gICAgbGV0IHNlbGVjdGVkUm93RGF0YSA9IFtdO1xuICAgIGxldCBzZWxlY3RlZFJvd3NDb3VudCA9IDA7XG5cbiAgICBpZiAocm93cz8ubGVuZ3RoID4gMCkge1xuICAgICAgc2VsZWN0ZWRSb3dzQ291bnQgPSByb3dzPy5sZW5ndGg7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID4gMCAmJiB0aGlzLmRpc2FibGVQcmVTZWxlY3RlZFJvd3MpIHtcbiAgICAgIHNlbGVjdGVkUm93c0NvdW50ID0gdGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aDtcbiAgICAgIHJvd3MgPSB0aGlzLnNlbGVjdGVkUm93cztcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdEFsbFN0YXRlID0gdGhpcy5zZWxlY3RBbGxTdGF0ZTtcbiAgICBpZiAoc2VsZWN0ZWRSb3dzQ291bnQgPT0gdGhpcy5ncmlkVmlldy50b3RhbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICdjaGVja2VkJztcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93c0NvdW50ID09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAndW5jaGVja2VkJztcbiAgICAgIHRoaXMuYWRkU2VsZWN0QWxsTWVzc2FnZShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICB0aGlzLmFkZFNlbGVjdEFsbE1lc3NhZ2UoZmFsc2UpO1xuICAgIH1cblxuICAgIHNlbGVjdGVkUm93RGF0YSA9IHJvd3MubWFwKHJvd0RhdGEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JpZFZpZXcuZGF0YS5maW5kKChkYXRhKSA9PiBkYXRhW3RoaXMuZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdID09PSByb3dEYXRhKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0ZWRSb3dEYXRhLmVtaXQoc2VsZWN0ZWRSb3dEYXRhKTtcbiAgfVxuXG4gIG9uS2ViYWJDbGljayhpdGVtOiBhbnksIHJvd0RldGFpbHM6IGFueSkge1xuICAgIHRoaXMua2ViYWJJdGVtQ2xpY2suZW1pdCh7IGFjdGlvbjogaXRlbSwgcm93RGV0YWlscyB9KTtcbiAgfVxuXG4gIG9uRGV0YWlsRXhwYW5kKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMucm93RGV0YWlscy5lbWl0KHJvd0RhdGEuZGF0YUl0ZW0pO1xuICB9XG5cbiAgY2VsbENsaWNrSGFuZGxlcihhcmdzOiBDZWxsQ2xpY2tFdmVudCkge1xuICAgIGlmICh0aGlzLmFsbG93Q29sdW1uQ2xpY2spIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZUNvbHVtbkNlbGxDbGljay5pbmNsdWRlcyhhcmdzLmNvbHVtbkluZGV4KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJvd0RhdGFPZkNsaWNrZWRDZWxsLmVtaXQoeyBkYXRhSXRlbTogYXJncy5kYXRhSXRlbSwgY29sdW1uSW5kZXg6IGFyZ3MuY29sdW1uSW5kZXggfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbG93RWRpdGluZ0NlbGwpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gY3JlYXRlRm9ybUdyb3VwKGFyZ3MuZGF0YUl0ZW0pO1xuICAgICAgYXJncy5zZW5kZXIuZWRpdENlbGwoYXJncy5yb3dJbmRleCwgYXJncy5jb2x1bW5JbmRleCwgdGhpcy5mb3JtR3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xuICAgIHRoaXMuc29ydCA9IHNvcnQ7XG4gICAgaWYgKCF0aGlzLmhhc0FwaVNvcnRpbmcpIHtcbiAgICAgIHRoaXMubG9hZEdyaWREYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc29ydERpcmVjdGlvbi5lbWl0KHRoaXMuc29ydCk7XG4gIH1cblxuICBsb2FkR3JpZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkVmlldyA9IHtcbiAgICAgIGRhdGE6IG9yZGVyQnkodGhpcy5ncmlkVmlldz8uZGF0YSwgdGhpcy5zb3J0KSxcbiAgICAgIHRvdGFsOiB0aGlzLmdyaWRWaWV3Py50b3RhbCxcbiAgICB9O1xuICB9XG5cbiAgZXhwYW5kUm93KGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLmdyaWQuZXhwYW5kUm93KGlkKTtcbiAgICB0aGlzLmV4cGFuZFJvd0luZGV4LnB1c2goaWQpO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5nZXRHcmlkSGVpZ2h0KCk7XG4gICAgLy8gfSwgMCk7XG4gIH1cblxuICBjb2xsYXBzZVJvdyhpZDogbnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KGlkKTtcbiAgICB0aGlzLmV4cGFuZFJvd0luZGV4LnNwbGljZSh0aGlzLmV4cGFuZFJvd0luZGV4LmluZGV4T2YoaWQpLCAxKTtcbiAgICBpZiAodGhpcy5leHBhbmRSb3dJbmRleD8ubGVuZ3RoID09IDApIHtcbiAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGliLWdyaWQnKTtcbiAgICAgIGNvbnN0IGdyaWRPZmZzZXQgPSB2aWV3cG9ydC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIGlmICh3aW5kb3dIZWlnaHQgPiBncmlkT2Zmc2V0ICsgdGhpcy5pbml0aWFsR3JpZEhlaWdodCkge1xuICAgICAgICB0aGlzLmhlaWdodCA9ICcxMDAlJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdGhpcy5nZXRHcmlkSGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgb25EZWxldGUocm93RGV0YWlsczogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdldEhlYWRlckhlaWdodCgpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMuZGVsZXRlZFJvd0RhdGEuZW1pdChyb3dEZXRhaWxzKTtcbiAgfVxuXG4gIGdldEhlYWRlckhlaWdodCgpIHtcbiAgICBpZiAodGhpcy5ncmlkVmlldz8uZGF0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJ2hpZGUtaGVhZGVyJztcbiAgICB9XG4gICAgcmV0dXJuICd2aWV3LWhlYWRlcic7XG4gIH1cblxuICAvKlxuICAqIFRoaXMgbG9naWMgb2YgZHluYW1pY2FsbHkgY2FsY3VsYXRpbmcgdGhlIGhlaWdodCBvZiBncmlkIG5lZWQgZnVydGhlciBicmFpbnN0b3JtaW5nIGhlbmNlIGNvbW1lbnRlZCBmb3Igbm93LlxuICAqL1xuICAvLyBnZXRHcmlkSGVpZ2h0KCkge1xuICAvLyAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgLy8gICBjb25zdCB2aWV3cG9ydDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpYi1ncmlkJyk7XG4gIC8vICAgY29uc3QgZ3JpZE9mZnNldCA9IHZpZXdwb3J0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuICAvLyAgIGNvbnN0IGdyaWRIZWlnaHQgPVxuICAvLyAgICAgdGhpcy5ncmlkRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArIHRoaXMuZ3JpZEJvdHRvbVNwYWNlOyAvL2dyaWQgc2hvdWxkIGhhdmUgMjRweCBzcGFjZSBhdCBib3R0b21cbiAgLy8gICBpZiAoZ3JpZE9mZnNldCArIGdyaWRIZWlnaHQgPj0gd2luZG93SGVpZ2h0KSB7XG4gIC8vICAgICB0aGlzLmhlaWdodCA9IHdpbmRvd0hlaWdodCAtIChncmlkT2Zmc2V0ICsgdGhpcy5ncmlkQm90dG9tU3BhY2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICByZXNpemUoZXY6IGFueSkge1xuICAgIGlmIChldi50YXJnZXQuaW5uZXJIZWlnaHQgPiB0aGlzLnJlc2l6ZUhlaWdodCkge1xuICAgICAgdGhpcy5yZXNpemVIZWlnaHQgPSBldi50YXJnZXQuaW5uZXJIZWlnaHQ7XG4gICAgICB0aGlzLmhlaWdodCA9ICcxMDAlJztcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzaXplSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0KSB7XG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCA9IDA7XG4gICAgfVxuICAgIC8vIHRoaXMuZ2V0R3JpZEhlaWdodCgpO1xuICB9XG5cbiAgcm93Q2xhc3MgPSAoYXJnczogUm93Q2xhc3NBcmdzKSA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzICYmIHRoaXMuZGlzYWJsZVByZVNlbGVjdGVkUm93cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2stZGlzYWJsZWQnOiB0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyhcbiAgICAgICAgICBhcmdzLmRhdGFJdGVtW3RoaXMuZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdXG4gICAgICAgICkgfHwgdGhpcy5hbGxQYWdlc1NlbGVjdGVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIGV4cGFuZENvbHVtbkNsYXNzKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID4gMCAmJiB0aGlzLmRpc2FibGVQcmVTZWxlY3RlZFJvd3MpIHtcbiAgICAgIHRoaXMuZXhwYW5kUm93Q29sdW1uV2lkdGggPSAxOTQ7XG4gICAgICByZXR1cm4gJ2V4cGFuZC1yb3cnO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZFJvd0NvbHVtbldpZHRoID0gNTY7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb25TZWxlY3RBbGxDaGFuZ2UoY2hlY2tlZFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgY2hlY2tlZFN0YXRlID09PSAnY2hlY2tlZCcgfHxcbiAgICAgICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID09IHRoaXMuZ3JpZFZpZXcudG90YWwgJiZcbiAgICAgICAgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKVxuICAgICkge1xuICAgICAgdGhpcy5wcmVTZWxlY3RlZCA9IHRoaXMuZ3JpZFZpZXcuZGF0YVxuICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bdGhpcy5ncmlkUm93U2VsZWN0QnlWYWx1ZV0pXG4gICAgICAgIC5maWx0ZXIoKGlkOiBhbnkpID0+IGlkKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnY2hlY2tlZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID4gMCAmJiB0aGlzLmRpc2FibGVQcmVTZWxlY3RlZFJvd3MpIHtcbiAgICAgIHRoaXMucHJlU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUm93cztcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlU2VsZWN0ZWQgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAndW5jaGVja2VkJztcbiAgICB9XG4gICAgdGhpcy5hZGRTZWxlY3RBbGxNZXNzYWdlKHRoaXMuc2VsZWN0QWxsU3RhdGUgPT09ICdjaGVja2VkJyk7XG4gIH1cblxuICBwdWJsaWMgY2VsbENsb3NlSGFuZGxlcihhcmdzOiBDZWxsQ2xvc2VFdmVudCk6IHZvaWQge1xuICAgIGxldCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5kaXJ0eSkge1xuICAgICAgaWYgKGFyZ3Mub3JpZ2luYWxFdmVudCAmJiBhcmdzLm9yaWdpbmFsRXZlbnQua2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgZm9ybUdyb3VwLnZhbHVlKTtcbiAgICAgIHRoaXMuc2F2ZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlZERhdGEuZW1pdCh0aGlzLmdyaWQuZGF0YSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkLmNsb3NlQ2VsbCgpO1xuICAgIHRoaXMuZ3JpZC5jYW5jZWxDZWxsKCk7XG4gIH1cbn1cbiIsIjxkaXYgI2dyaWRFbGVtZW50ICh3aW5kb3c6cmVzaXplKT1cInJlc2l6ZSgkZXZlbnQpXCIgW25nQ2xhc3NdPVwiY29sdW1uQ29udGVudE5vV3JhcCA/ICdjb2x1bW4tY29udGVudC1ub3dyYXAnIDogJydcIj5cbiAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZFZpZXdcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIiBbc2tpcF09XCJza2lwXCIgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcbiAgICBbcGFnZWFibGVdPVwicGFnZWFibGVcIiBbc29ydGFibGVdPVwic29ydGFibGVcIiBbZ3JvdXBhYmxlXT1cImdyb3VwYWJsZVwiIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIiBbY29sdW1uTWVudV09XCJjb2x1bW5NZW51XCIgW25hdmlnYWJsZV09XCJuYXZpZ2FibGVcIiBbaGVpZ2h0XT1cImhlaWdodFwiIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICAoY2hhbmdlKT1cInNldFNlbGVjdGFibGVTZXR0aW5ncygpXCIgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJzZWxlY3RlZEtleXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW2tlbmRvR3JpZFNlbGVjdEJ5XT1cImdyaWRSb3dTZWxlY3RCeVZhbHVlXCIgKGRldGFpbEV4cGFuZCk9XCJvbkRldGFpbEV4cGFuZCgkZXZlbnQpXCIgW3NlbGVjdGVkS2V5c109XCJwcmVTZWxlY3RlZFwiXG4gICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCIgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIiAoY2VsbENsb3NlKT1cImNlbGxDbG9zZUhhbmRsZXIoJGV2ZW50KVwiIFtzb3J0XT1cInNvcnRcIlxuICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiIFtuZ0NsYXNzXT1cImdldEhlYWRlckhlaWdodCgpXCIgaWQ9XCJsaWItZ3JpZFwiIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiPlxuICAgIDxkaXYgI3NlbGVjdEFsbE1lc3NhZ2VFbGVtZW50IGNsYXNzPVwibGliLWdyaWQtc2VsZWN0LWFsbC1tZXNzYWdlLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdJZj1cIiFhbGxQYWdlc1NlbGVjdGVkXCIgY2xhc3M9XCJsaWItZ3JpZC1zZWxlY3QtYWxsLW1lc3NhZ2VcIj5cbiAgICAgICAgPGxpYi10eXBvZ3JhcGh5IFtkZWZhdWx0VGV4dF09XCInQWxsICcrZ3JpZFZpZXcuZGF0YS5sZW5ndGgrJyAnK2l0ZW1OYW1lKycgb24gdGhpcyBwYWdlIGFyZSBzZWxlY3RlZC4nXCIgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PlxuICAgICAgICA8dT48bGliLXR5cG9ncmFwaHkgKGNsaWNrKT1cInNlbGVjdEFjcm9zc1BhZ2VzKHRydWUpXCIgY2xhc3M9IFwic2VsZWN0LWFsbC1oYW5kbGVyXCIgW2RlZmF1bHRUZXh0XT1cIidTZWxlY3QgYWxsICcrZ3JpZFZpZXcudG90YWwrJyAnK2l0ZW1OYW1lKycgZnJvbSBhbGwgcGFnZXMnXCIgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PjwvdT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImFsbFBhZ2VzU2VsZWN0ZWRcIiBjbGFzcz1cImxpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZVwiPlxuICAgICAgICA8bGliLWljb24gbmFtZT1cImNpcmNsZS1jaGVja2VkXCIgY2xhc3M9XCJhbGwtc2VsZWN0ZWQtaWNvblwiPjwvbGliLWljb24+XG4gICAgICAgIDxsaWItdHlwb2dyYXBoeSBbZGVmYXVsdFRleHRdPVwiJ0FsbCAnK2dyaWRWaWV3LnRvdGFsKycgJytpdGVtTmFtZSsnIGFjcm9zcyBhbGwgcGFnZXMgYXJlIHNlbGVjdGVkLidcIiB0eXBlPVwiQk9EWV9TTUFMTFwiPjwvbGliLXR5cG9ncmFwaHk+XG4gICAgICAgIDx1PjxsaWItdHlwb2dyYXBoeSAoY2xpY2spPVwic2VsZWN0QWNyb3NzUGFnZXMoZmFsc2UpXCIgY2xhc3M9IFwic2VsZWN0LWFsbC1oYW5kbGVyXCIgW2RlZmF1bHRUZXh0XT1cIidDbGVhciBzZWxlY3Rpb24nXCIgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PjwvdT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNob3dUb29sYmFyXCIga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0aGlzLmdyaWRWaWV3LnRvdGFsID09PSAwXCIga2VuZG9HcmlkTm9SZWNvcmRzVGVtcGxhdGU+XG4gICAgICA8bGliLXR5cG9ncmFwaHkgKm5nSWY9XCIhbG9hZGluZ1wiIFtkZWZhdWx0VGV4dF09XCJub1JlY29yZHNDb250ZW50XCIgdHlwZT1cIkJPRFlfTUVESVVNXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgIDxsaWItbG9hZGVyICpuZ0lmPVwibG9hZGluZ1wiIFt0eXBlXT1cImxvYWRlclR5cGVcIiBbc2l6ZV09XCJsb2FkZXJTaXplXCIgW3RoZW1lQ29sb3JdPVwibG9hZGVyVGhlbWVcIj48L2xpYi1sb2FkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLmdyaWRWaWV3LnRvdGFsID4gMFwiPlxuICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiY2hlY2tCb3hSZXF1aXJlZCA9PT0gdHJ1ZVwiIFt3aWR0aF09XCJjaGVja0JveFdpZHRoXCJcbiAgICAgICAgW3Jlc2l6YWJsZV09XCJjaGVja0JveENvbHVtblJlc2l6YWJsZVwiIFtjb2x1bW5NZW51XT1cImNoZWNrQm94Q29sdW1uTWVudVwiIGNsYXNzPVwiY2hlY2tib3gtY29sdW1uXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJzZWxlY3RBbGxDaGVja2JveElkXCIgdHlwZT1cImNoZWNrYm94XCIga2VuZG9DaGVja0JveCBrZW5kb0dyaWRTZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgW3N0YXRlXT1cInNlbGVjdEFsbFN0YXRlXCIgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG4gICAgICBcbiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBjbGFzcz1cImdyaWQtY29sdW1uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uRGF0YVwiIFtmaWVsZF09XCJpdGVtLmZpZWxkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICBbd2lkdGhdPVwiaXRlbS5jb2x1bW5XaWR0aFwiIFtzb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCIgW2VkaXRvcl09XCJpdGVtLmVkaXRvclwiIFtjbGFzc109XCJpdGVtLmNsYXNzXCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic29ydGFibGVcIiBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydFswXS5maWVsZCA9PT0gaXRlbS5maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0WzBdLmRpciA9PT0gJ2FzYydcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRbMF0uZGlyID09PSAnZGVzYydcIj48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW0uY3VzdG9tQ29sdW1uXCIga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtblRlbXBsYXRlRGljdFtpdGVtLnR5cGVdXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGRhdGFJdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW0uY3VzdG9tXCIga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSZWY7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRhdGFJdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpdGVtLmltcGFjdFwiIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImltcGFjdENvbHVtbjsgY29udGV4dDogeyRpbXBsaWNpdDogZGF0YUl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuXG4gICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gKm5nSWY9XCJzaG93RGVsZXRlQ29sdW1uXCIgW3dpZHRoXT1cImRlbGV0ZUNvbHVtbldpZHRoXCIgY2xhc3M9XCJkZWxldGUtY29sdW1uXCIgdGl0bGU9XCJBY3Rpb25cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgICA8bGliLXRvb2x0aXAgc2hvd09uPVwiaG92ZXJcIiBwb3NpdGlvbj1cImJvdHRvbVwiIGNsYXNzPVwicmVtb3ZlLXRvb2x0aXBcIj5cbiAgICAgICAgICAgIDxsaWItaWNvbiBuYW1lPVwiZGVsZXRlXCIgY2xhc3M9XCJkZWxldGUtaWNvblwiIChjbGljayk9XCJvbkRlbGV0ZShkYXRhSXRlbSlcIj48L2xpYi1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtY29udGVudFwiPlxuICAgICAgICAgICAgICA8bGliLXR5cG9ncmFwaHkgZGVmYXVsdFRleHQ9XCJSZW1vdmVcIj48L2xpYi10eXBvZ3JhcGh5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saWItdG9vbHRpcD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG5cbiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBbd2lkdGhdPVwia2ViYWJDb2x1bW5XaWR0aFwiIGNsYXNzPVwia2ViYWItY29sdW1uXCIgKm5nSWY9XCJzaG93S2ViYWJcIiB0aXRsZT1cIkFjdGlvbnNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgICA8a2VuZG8tZHJvcGRvd25idXR0b24gKm5nSWY9XCIhaGlkZUtlYmFiUm93SW5kZXguaW5jbHVkZXMocm93SW5kZXgpXCIgW3N2Z0ljb25dPVwiaWNvblwiIGZpbGxNb2RlPVwibm9uZVwiXG4gICAgICAgICAgICBbZGF0YV09XCJrZWJhYkxpc3QgfCBrZWJhYk1lbnVGaWx0ZXIgOiBkYXRhSXRlbVwiIGNsYXNzPVwia2ViYWJcIiAoaXRlbUNsaWNrKT1cIm9uS2ViYWJDbGljaygkZXZlbnQsIGRhdGFJdGVtKVwiXG4gICAgICAgICAgICBbcG9wdXBTZXR0aW5nc109XCJ7IGFsaWduOiAncmlnaHQnLCBhbmltYXRlOiB0cnVlLCBwb3B1cENsYXNzOiAna2ViYWItbGlzdCcgfVwiPlxuICAgICAgICAgIDwva2VuZG8tZHJvcGRvd25idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZERldGFpbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXRhaWxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogZGF0YUl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxrZW5kby1ncmlkLWNvbHVtbiAqbmdJZj1cImN1c3RvbUV4cGFuZFJvd0NvbHVtblwiIFt3aWR0aF09XCJleHBhbmRSb3dDb2x1bW5XaWR0aFwiIGNsYXNzPVwiZ3JpZC1jb2x1bW4gZXhwYW5kLWNvbHVtblwiPlxuICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleHBhbmRDb2x1bW5DbGFzcygpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZFJvd3MuaW5jbHVkZXMoZGF0YUl0ZW1bZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdKSAmJiBkaXNhYmxlUHJlU2VsZWN0ZWRSb3dzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWNvbHVtbi10ZXh0XCI+XG4gICAgICAgICAgICBBbHJlYWR5IGFkZGVkXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxrZW5kby1idXR0b24gKm5nSWY9XCIhZXhwYW5kUm93SW5kZXguaW5jbHVkZXMocm93SW5kZXgpXCIgW3N2Z0ljb25dPVwiYXJyb3dEb3duSWNvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kUm93KHJvd0luZGV4KVwiIGZpbGxNb2RlPVwibm9uZVwiIGNsYXNzPVwiYXJyb3ctYnRuXCI+XG4gICAgICAgICAgPC9rZW5kby1idXR0b24+XG4gICAgICAgICAgPGtlbmRvLWJ1dHRvbiAqbmdJZj1cImV4cGFuZFJvd0luZGV4LmluY2x1ZGVzKHJvd0luZGV4KVwiIFtzdmdJY29uXT1cImFycm93VXBJY29uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb2xsYXBzZVJvdyhyb3dJbmRleClcIiBmaWxsTW9kZT1cIm5vbmVcIiBjbGFzcz1cImFycm93LWJ0blwiPlxuICAgICAgICAgIDwva2VuZG8tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cblxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BhZ2VyVGVtcGxhdGUgbGV0LXRvdGFsUGFnZXM9XCJ0b3RhbFBhZ2VzXCIgbGV0LWN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIj5cbiAgICAgIDxrZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+PC9rZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+XG4gICAgICA8a2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zIFtidXR0b25Db3VudF09XCJwYWdlQ291bnRcIj48L2tlbmRvLXBhZ2VyLW51bWVyaWMtYnV0dG9ucz5cbiAgICAgIDxrZW5kby1wYWdlci1uZXh0LWJ1dHRvbnM+PC9rZW5kby1wYWdlci1uZXh0LWJ1dHRvbnM+XG4gICAgICA8a2VuZG8tcGFnZXItaW5mbz48L2tlbmRvLXBhZ2VyLWluZm8+XG4gICAgICA8a2VuZG8tcGFnZXItcGFnZS1zaXplcyBbcGFnZVNpemVzXT1cInNpemVzXCI+PC9rZW5kby1wYWdlci1wYWdlLXNpemVzPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgPC9rZW5kby1ncmlkPlxuPC9kaXY+XG4iXX0=
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEQsT0FBTyxFQUdMLGFBQWEsRUFPZCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBa0IsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUVMLGVBQWUsRUFDZixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFLL0YsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFtQixRQUFnQztRQUFoQyxhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUQxQyxTQUFJLEdBQVcsRUFBRSxDQUFDO0lBQzRCLENBQUM7K0dBRjdDLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JB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XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEtleXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2VsbENsaWNrRXZlbnQsXG4gIENlbGxDbG9zZUV2ZW50LFxuICBHcmlkQ29tcG9uZW50LFxuICBHcmlkRGF0YVJlc3VsdCxcbiAgUGFnZUNoYW5nZUV2ZW50LFxuICBSb3dDbGFzc0FyZ3MsXG4gIFNlbGVjdEFsbENoZWNrYm94U3RhdGUsXG4gIFNlbGVjdGFibGVNb2RlLFxuICBTZWxlY3RhYmxlU2V0dGluZ3Ncbn0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XG5pbXBvcnQgeyBTb3J0RGVzY3JpcHRvciwgb3JkZXJCeSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcbmltcG9ydCB7XG4gIFNWR0ljb24sXG4gIGNoZXZyb25Eb3duSWNvbixcbiAgY2hldnJvblVwSWNvbixcbiAgbW9yZVZlcnRpY2FsSWNvblxufSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tc3ZnLWljb25zJztcbmltcG9ydCB7IExvYWRlclNpemUsIExvYWRlclRoZW1lQ29sb3IsIExvYWRlclR5cGUgfSBmcm9tICcuLi8uLi9hdG9tcy9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3R5cGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Db2x1bW5UZW1wbGF0ZSB7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiXCI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q29tcG9uZW50PikgeyB9XG59XG5cbmNvbnN0IGNyZWF0ZUZvcm1Hcm91cCA9IChkYXRhSXRlbTogYW55KTogRm9ybUdyb3VwID0+IHtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBmb3IgKGxldCBkYXRhIG9mIE9iamVjdC5rZXlzKGRhdGFJdGVtKSkge1xuICAgIGZvcm0uYWRkQ29udHJvbChkYXRhLCBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bZGF0YV0sIFZhbGlkYXRvcnMucmVxdWlyZWQpKVxuICB9XG4gIHJldHVybiBmb3JtXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ3JpZC1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkUGFnaW5hdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBDb250ZW50Q2hpbGRyZW4oQ3VzdG9tQ29sdW1uVGVtcGxhdGUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxDdXN0b21Db2x1bW5UZW1wbGF0ZT4gfCBbXTtcbiAgQENvbnRlbnRDaGlsZCgnbXVsdGlDb2x1bW5EYXRhJykgdGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQENvbnRlbnRDaGlsZCgnZGV0YWlsVGVtcGxhdGUnKSBkZXRhaWxUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBAQ29udGVudENoaWxkKCdpbXBhY3RDb2x1bW4nKSBpbXBhY3RDb2x1bW4hOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQFZpZXdDaGlsZChHcmlkQ29tcG9uZW50KSBncmlkITogR3JpZENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZ3JpZEVsZW1lbnQnKSBncmlkRWxlbWVudCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Jykgc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGdyaWRWaWV3OiBHcmlkRGF0YVJlc3VsdCA9IHsgZGF0YTogW10sIHRvdGFsOiAwIH07XG4gIEBJbnB1dCgpIHNraXA6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGl0ZW1OYW1lOiBzdHJpbmcgPSAnSXRlbXMnO1xuICBASW5wdXQoKSBzaG93U2VsZWN0QWxsTWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxQYWdlc1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVkSGVpZ2h0OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1NlbGVjdEFsbFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gIEBPdXRwdXQoKSBvblNlbGVjdEFsbEFjcm9zc1BhZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBASW5wdXQoKSBjb2x1bW5EYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGdyb3VwYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZW9yZGVyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tCb3hXaWR0aDogbnVtYmVyID0gNDU7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uUmVzaXphYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjaGVja0JveENvbHVtblNob3dTZWxlY3RlZEFsbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNoZWNrQm94UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RlOiBTZWxlY3RhYmxlTW9kZSB8IHVuZGVmaW5lZCA9ICdtdWx0aXBsZSc7XG4gIEBJbnB1dCgpIGNoZWNrYm94T25seSA9IHRydWU7XG4gIEBJbnB1dCgpIGRyYWdDb2x1bW5zID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5hdmlnYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGhlaWdodDogYW55O1xuICBASW5wdXQoKSBncmlkUm93U2VsZWN0QnlWYWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG5vUmVjb3Jkc0NvbnRlbnQ6IHN0cmluZyA9ICdObyBSZWNvcmRzIEF2YWlsYWJsZSc7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd0RhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBASW5wdXQoKSBzaG93VG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBleHRyYWN0RGF0YUl0ZW1zOiBhbnk7XG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzID0ge307XG4gIEBJbnB1dCgpIGtlYmFiTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIHNob3dLZWJhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcm93RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBrZWJhYkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBpY29uOiBTVkdJY29uID0gbW9yZVZlcnRpY2FsSWNvbjtcbiAgQElucHV0KCkga2ViYWJDb2x1bW5XaWR0aDogbnVtYmVyID0gNjA7XG4gIGRhdGE6IGFueSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RDb2x1bW4gPSAnJztcbiAgQE91dHB1dCgpIHJvd0RhdGFPZkNsaWNrZWRDZWxsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHByZVNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwcmVTZWxlY3RlZFJlY29yZHM6IGFueVtdID0gW107XG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgaWdub3JlQ29sdW1uQ2VsbENsaWNrOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBhbGxvd0NvbHVtbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnQ6IFNvcnREZXNjcmlwdG9yW10gPSBbXG4gICAge1xuICAgICAgZmllbGQ6ICcnLFxuICAgICAgZGlyOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgXTtcbiAgQElucHV0KCkgaGFzQXBpU29ydGluZyA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc29ydERpcmVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgYXJyb3dEb3duSWNvbjogU1ZHSWNvbiA9IGNoZXZyb25Eb3duSWNvbjtcbiAgcHVibGljIGFycm93VXBJY29uOiBTVkdJY29uID0gY2hldnJvblVwSWNvbjtcbiAgQElucHV0KCkgZXhwYW5kUm93SW5kZXg6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbUV4cGFuZFJvd0NvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWxldGVDb2x1bW5XaWR0aDogbnVtYmVyID0gNDI7XG4gIGV4cGFuZFJvd0NvbHVtbldpZHRoOiBudW1iZXIgPSA1NjtcbiAgQE91dHB1dCgpIGRlbGV0ZWRSb3dEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHNpemVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdlQ291bnQgPSAwO1xuICBASW5wdXQoKSBzaG93RGVsZXRlQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVLZWJhYlJvd0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRlclR5cGU6IExvYWRlclR5cGUgPSBMb2FkZXJUeXBlLnB1bHNpbmc7XG4gIEBJbnB1dCgpIGxvYWRlclNpemU6IExvYWRlclNpemUgPSBMb2FkZXJTaXplLm1lZGl1bTtcbiAgQElucHV0KCkgbG9hZGVyVGhlbWU6IExvYWRlclRoZW1lQ29sb3IgPSBMb2FkZXJUaGVtZUNvbG9yLnByaW1hcnk7XG4gIGluaXRpYWxHcmlkSGVpZ2h0OiBhbnk7XG4gIGdyaWRCb3R0b21TcGFjZSA9IDI0O1xuICByZXNpemVIZWlnaHQ6IGFueSA9IDA7XG4gIHNlbGVjdEFsbFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcbiAgQElucHV0KCkgZGlzYWJsZVByZVNlbGVjdGVkUm93cyA9IGZhbHNlO1xuICBwdWJsaWMgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgYW55O1xuICBAT3V0cHV0KCkgdXBkYXRlZERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgYWxsb3dFZGl0aW5nQ2VsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5Db250ZW50Tm9XcmFwID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMuc2V0U2VsZWN0YWJsZVNldHRpbmdzKCk7XG4gIH1cblxuICBjb2x1bW5UZW1wbGF0ZURpY3Q6IGFueSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29sdW1uRGF0YS5mb3JFYWNoKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29sdW1uLnNvcnRhYmxlID0gY29sdW1uLnNvcnRhYmxlID09IHVuZGVmaW5lZCA/IHRydWUgOiBjb2x1bW4uc29ydGFibGU7XG4gICAgICBpZiAoIXRoaXMuaWdub3JlQ29sdW1uQ2VsbENsaWNrLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICBjb2x1bW4uY2xhc3MgPSAnY29sdW1uLWN1cnNvci1wb2ludGVyJztcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICghdGhpcy5oYXNBcGlTb3J0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRHcmlkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLmdyaWRWaWV3LmRhdGE/Lmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCh4ID0+IHRoaXMuY29sdW1uVGVtcGxhdGVEaWN0W3gudHlwZV0gPSB4LnRlbXBsYXRlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jdXN0b21FeHBhbmRSb3dDb2x1bW4pIHtcbiAgICAgIHRoaXMuZXhwYW5kUm93SW5kZXguZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkLmV4cGFuZFJvdyhpZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLnByZVNlbGVjdGVkO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGggPT0gdGhpcy5ncmlkVmlldy50b3RhbCkge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2NoZWNrZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICd1bmNoZWNrZWQnO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxHcmlkSGVpZ2h0ID1cbiAgICAgIHRoaXMuZ3JpZEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyB0aGlzLmdyaWRCb3R0b21TcGFjZTtcbiAgICAvLyB0aGlzLmdldEdyaWRIZWlnaHQoKTtcblxuICAgIGNvbnN0IGdyaWRDb250YWluZXIgPSB0aGlzLmdyaWRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdrLWdyaWQtY29udGFpbmVyJylbMF07XG4gICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICBncmlkQ29udGFpbmVyLnBhcmVudEVsZW1lbnQsXG4gICAgICB0aGlzLnNlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBncmlkQ29udGFpbmVyLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgfVxuXG4gIHNlbGVjdEFjcm9zc1BhZ2VzKGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50KGlzU2VsZWN0ZWQpO1xuICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZSh0aGlzLnByZXZpb3VzU2VsZWN0QWxsU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlclNlbGVjdEFsbFBhZ2VzRXZlbnQoaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMuYWxsUGFnZXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5vblNlbGVjdEFsbEFjcm9zc1BhZ2VzLmVtaXQoaXNTZWxlY3RlZCk7XG4gICAgY29uc29sZS5sb2coJ3RyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50IDogaXNTZWxlY3RlZCcsIGlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgYWRkU2VsZWN0QWxsTWVzc2FnZShzZWxlY3RBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zaG93U2VsZWN0QWxsTWVzc2FnZSAmJiB0aGlzLnBhZ2VDb3VudCA+IDEpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZXN1bHQgPSB0aGlzLnNlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIGlmIChzZWxlY3RBbGwpIHtcbiAgICAgICAgdGhpcy5zYXZlZEhlaWdodCA9IGVsZW1lbnRSZXN1bHQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBiZWZvcmVIZWlnaHQgPSBlbGVtZW50UmVzdWx0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNZXNzYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1zaG93Jyk7XG4gICAgICAgIGNvbnN0IGFmdGVySGVpZ2h0ID0gZWxlbWVudFJlc3VsdC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGVsZW1lbnRSZXN1bHQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IC0gKGFmdGVySGVpZ2h0IC0gYmVmb3JlSGVpZ2h0KSkgKyAncHgnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNZXNzYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1zaG93Jyk7XG4gICAgICAgIGlmICh0aGlzLmFsbFBhZ2VzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJTZWxlY3RBbGxQYWdlc0V2ZW50KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNhdmVkSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGVsZW1lbnRSZXN1bHQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zYXZlZEhlaWdodCArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHNldFNlbGVjdGFibGVTZXR0aW5ncygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja2JveE9ubHkgfHwgdGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5kcmFnQ29sdW1ucyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xuICAgICAgY2hlY2tib3hPbmx5OiB0aGlzLmNoZWNrYm94T25seSxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGRyYWc6IHRoaXMuZHJhZ0NvbHVtbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBleHRyYWN0IGRhdGEgb3V0IG9mIHJvdyBudW1iZXIgdXNpbmcgYmVsb3cgZnVuY3Rpb25cbiAgLyogZXh0cmFjdCgpIHtcbiAgICB0aGlzLmV4dHJhY3REYXRhSXRlbXMgPSB0aGlzLm15U2VsZWN0aW9uLm1hcChpZHggPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGEuZmluZCgoZGF0YTogeyBQcm9kdWN0SUQ6IG51bWJlcjsgfSkgPT4gZGF0YS5Qcm9kdWN0SUQgPT09IGlkeCk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2codGhpcy5leHRyYWN0RGF0YUl0ZW1zKVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dEYXRhLmVtaXQodGhpcy5leHRyYWN0RGF0YUl0ZW1zKTtcbiAgfSAqL1xuXG4gIHNlbGVjdGVkS2V5c0NoYW5nZShyb3dzOiBudW1iZXJbXSkge1xuICAgIGxldCBzZWxlY3RlZFJvd0RhdGEgPSBbXTtcbiAgICBsZXQgc2VsZWN0ZWRSb3dzQ291bnQgPSAwO1xuXG4gICAgaWYgKHJvd3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHNlbGVjdGVkUm93c0NvdW50ID0gcm93cz8ubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKSB7XG4gICAgICBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGg7XG4gICAgICByb3dzID0gdGhpcy5zZWxlY3RlZFJvd3M7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RBbGxTdGF0ZSA9IHRoaXMuc2VsZWN0QWxsU3RhdGU7XG4gICAgaWYgKHNlbGVjdGVkUm93c0NvdW50ID09IHRoaXMuZ3JpZFZpZXcudG90YWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnY2hlY2tlZCc7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZFJvd3NDb3VudCA9PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgICB0aGlzLmFkZFNlbGVjdEFsbE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgICAgdGhpcy5hZGRTZWxlY3RBbGxNZXNzYWdlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZFJvd0RhdGEgPSByb3dzLm1hcChyb3dEYXRhID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdyaWRWaWV3LmRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YVt0aGlzLmdyaWRSb3dTZWxlY3RCeVZhbHVlXSA9PT0gcm93RGF0YSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUm93RGF0YS5lbWl0KHNlbGVjdGVkUm93RGF0YSk7XG4gIH1cblxuICBvbktlYmFiQ2xpY2soaXRlbTogYW55LCByb3dEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLmtlYmFiSXRlbUNsaWNrLmVtaXQoeyBhY3Rpb246IGl0ZW0sIHJvd0RldGFpbHMgfSk7XG4gIH1cblxuICBvbkRldGFpbEV4cGFuZChyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0RldGFpbHMuZW1pdChyb3dEYXRhLmRhdGFJdGVtKTtcbiAgfVxuXG4gIGNlbGxDbGlja0hhbmRsZXIoYXJnczogQ2VsbENsaWNrRXZlbnQpIHtcbiAgICBpZiAodGhpcy5hbGxvd0NvbHVtbkNsaWNrKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVDb2x1bW5DZWxsQ2xpY2suaW5jbHVkZXMoYXJncy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3dEYXRhT2ZDbGlja2VkQ2VsbC5lbWl0KHsgZGF0YUl0ZW06IGFyZ3MuZGF0YUl0ZW0sIGNvbHVtbkluZGV4OiBhcmdzLmNvbHVtbkluZGV4IH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbGxvd0VkaXRpbmdDZWxsKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IGNyZWF0ZUZvcm1Hcm91cChhcmdzLmRhdGFJdGVtKTtcbiAgICAgIGFyZ3Muc2VuZGVyLmVkaXRDZWxsKGFyZ3Mucm93SW5kZXgsIGFyZ3MuY29sdW1uSW5kZXgsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB9XG4gIH1cblxuICBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQgPSBzb3J0O1xuICAgIGlmICghdGhpcy5oYXNBcGlTb3J0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRHcmlkRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnNvcnREaXJlY3Rpb24uZW1pdCh0aGlzLnNvcnQpO1xuICB9XG5cbiAgbG9hZEdyaWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFZpZXcgPSB7XG4gICAgICBkYXRhOiBvcmRlckJ5KHRoaXMuZ3JpZFZpZXc/LmRhdGEsIHRoaXMuc29ydCksXG4gICAgICB0b3RhbDogdGhpcy5ncmlkVmlldz8udG90YWwsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGFuZFJvdyhpZDogbnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkLmV4cGFuZFJvdyhpZCk7XG4gICAgdGhpcy5leHBhbmRSb3dJbmRleC5wdXNoKGlkKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZ2V0R3JpZEhlaWdodCgpO1xuICAgIC8vIH0sIDApO1xuICB9XG5cbiAgY29sbGFwc2VSb3coaWQ6IG51bWJlcikge1xuICAgIHRoaXMuZ3JpZC5jb2xsYXBzZVJvdyhpZCk7XG4gICAgdGhpcy5leHBhbmRSb3dJbmRleC5zcGxpY2UodGhpcy5leHBhbmRSb3dJbmRleC5pbmRleE9mKGlkKSwgMSk7XG4gICAgaWYgKHRoaXMuZXhwYW5kUm93SW5kZXg/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICBjb25zdCB2aWV3cG9ydDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpYi1ncmlkJyk7XG4gICAgICBjb25zdCBncmlkT2Zmc2V0ID0gdmlld3BvcnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFk7XG4gICAgICBpZiAod2luZG93SGVpZ2h0ID4gZ3JpZE9mZnNldCArIHRoaXMuaW5pdGlhbEdyaWRIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMuZ2V0R3JpZEhlaWdodCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGVsZXRlKHJvd0RldGFpbHM6IGFueSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQoKTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLmRlbGV0ZWRSb3dEYXRhLmVtaXQocm93RGV0YWlscyk7XG4gIH1cblxuICBnZXRIZWFkZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMuZ3JpZFZpZXc/LmRhdGE/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdoaWRlLWhlYWRlcic7XG4gICAgfVxuICAgIHJldHVybiAndmlldy1oZWFkZXInO1xuICB9XG5cbiAgLypcbiAgKiBUaGlzIGxvZ2ljIG9mIGR5bmFtaWNhbGx5IGNhbGN1bGF0aW5nIHRoZSBoZWlnaHQgb2YgZ3JpZCBuZWVkIGZ1cnRoZXIgYnJhaW5zdG9ybWluZyBoZW5jZSBjb21tZW50ZWQgZm9yIG5vdy5cbiAgKi9cbiAgLy8gZ2V0R3JpZEhlaWdodCgpIHtcbiAgLy8gICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIC8vICAgY29uc3Qgdmlld3BvcnQ6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaWItZ3JpZCcpO1xuICAvLyAgIGNvbnN0IGdyaWRPZmZzZXQgPSB2aWV3cG9ydC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgLy8gICBjb25zdCBncmlkSGVpZ2h0ID1cbiAgLy8gICAgIHRoaXMuZ3JpZEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyB0aGlzLmdyaWRCb3R0b21TcGFjZTsgLy9ncmlkIHNob3VsZCBoYXZlIDI0cHggc3BhY2UgYXQgYm90dG9tXG4gIC8vICAgaWYgKGdyaWRPZmZzZXQgKyBncmlkSGVpZ2h0ID49IHdpbmRvd0hlaWdodCkge1xuICAvLyAgICAgdGhpcy5oZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSAoZ3JpZE9mZnNldCArIHRoaXMuZ3JpZEJvdHRvbVNwYWNlKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgcmVzaXplKGV2OiBhbnkpIHtcbiAgICBpZiAoZXYudGFyZ2V0LmlubmVySGVpZ2h0ID4gdGhpcy5yZXNpemVIZWlnaHQpIHtcbiAgICAgIHRoaXMucmVzaXplSGVpZ2h0ID0gZXYudGFyZ2V0LmlubmVySGVpZ2h0O1xuICAgICAgdGhpcy5oZWlnaHQgPSAnMTAwJSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc2l6ZUhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgdGhpcy5yZXNpemVIZWlnaHQgPSAwO1xuICAgIH1cbiAgICAvLyB0aGlzLmdldEdyaWRIZWlnaHQoKTtcbiAgfVxuXG4gIHJvd0NsYXNzID0gKGFyZ3M6IFJvd0NsYXNzQXJncykgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cyAmJiB0aGlzLmRpc2FibGVQcmVTZWxlY3RlZFJvd3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdrLWRpc2FibGVkJzogdGhpcy5zZWxlY3RlZFJvd3MuaW5jbHVkZXMoXG4gICAgICAgICAgYXJncy5kYXRhSXRlbVt0aGlzLmdyaWRSb3dTZWxlY3RCeVZhbHVlXVxuICAgICAgICApIHx8IHRoaXMuYWxsUGFnZXNTZWxlY3RlZCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBleHBhbmRDb2x1bW5DbGFzcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKSB7XG4gICAgICB0aGlzLmV4cGFuZFJvd0NvbHVtbldpZHRoID0gMTk0O1xuICAgICAgcmV0dXJuICdleHBhbmQtcm93JztcbiAgICB9XG4gICAgdGhpcy5leHBhbmRSb3dDb2x1bW5XaWR0aCA9IDU2O1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGNoZWNrZWRTdGF0ZTogU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoZWNrZWRTdGF0ZSA9PT0gJ2NoZWNrZWQnIHx8XG4gICAgICAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA9PSB0aGlzLmdyaWRWaWV3LnRvdGFsICYmXG4gICAgICAgIHRoaXMuZGlzYWJsZVByZVNlbGVjdGVkUm93cylcbiAgICApIHtcbiAgICAgIHRoaXMucHJlU2VsZWN0ZWQgPSB0aGlzLmdyaWRWaWV3LmRhdGFcbiAgICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdKVxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2NoZWNrZWQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKSB7XG4gICAgICB0aGlzLnByZVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd3M7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZVNlbGVjdGVkID0gW107XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgfVxuICAgIHRoaXMuYWRkU2VsZWN0QWxsTWVzc2FnZSh0aGlzLnNlbGVjdEFsbFN0YXRlID09PSAnY2hlY2tlZCcpO1xuICB9XG5cbiAgcHVibGljIGNlbGxDbG9zZUhhbmRsZXIoYXJnczogQ2VsbENsb3NlRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xuICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcbiAgICAgIGlmIChhcmdzLm9yaWdpbmFsRXZlbnQgJiYgYXJncy5vcmlnaW5hbEV2ZW50LmtleUNvZGUgPT09IEtleXMuRXNjYXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oZGF0YUl0ZW0sIGZvcm1Hcm91cC52YWx1ZSk7XG4gICAgICB0aGlzLnNhdmVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnVwZGF0ZWREYXRhLmVtaXQodGhpcy5ncmlkLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZC5jbG9zZUNlbGwoKTtcbiAgICB0aGlzLmdyaWQuY2FuY2VsQ2VsbCgpO1xuICB9XG59XG4iLCI8ZGl2ICNncmlkRWxlbWVudCAod2luZG93OnJlc2l6ZSk9XCJyZXNpemUoJGV2ZW50KVwiIFtuZ0NsYXNzXT1cImNvbHVtbkNvbnRlbnROb1dyYXAgPyAnY29sdW1uLWNvbnRlbnQtbm93cmFwJyA6ICcnXCI+XG4gIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWRWaWV3XCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3NraXBdPVwic2tpcFwiIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVTZXR0aW5nc1wiXG4gICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCIgW3NvcnRhYmxlXT1cInNvcnRhYmxlXCIgW2dyb3VwYWJsZV09XCJncm91cGFibGVcIiBbcmVvcmRlcmFibGVdPVwicmVvcmRlcmFibGVcIlxuICAgIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCIgW2NvbHVtbk1lbnVdPVwiY29sdW1uTWVudVwiIFtuYXZpZ2FibGVdPVwibmF2aWdhYmxlXCIgW2hlaWdodF09XCJoZWlnaHRcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgKGNoYW5nZSk9XCJzZXRTZWxlY3RhYmxlU2V0dGluZ3MoKVwiIChzZWxlY3RlZEtleXNDaGFuZ2UpPVwic2VsZWN0ZWRLZXlzQ2hhbmdlKCRldmVudClcIlxuICAgIFtrZW5kb0dyaWRTZWxlY3RCeV09XCJncmlkUm93U2VsZWN0QnlWYWx1ZVwiIChkZXRhaWxFeHBhbmQpPVwib25EZXRhaWxFeHBhbmQoJGV2ZW50KVwiIFtzZWxlY3RlZEtleXNdPVwicHJlU2VsZWN0ZWRcIlxuICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCIgKGNlbGxDbG9zZSk9XCJjZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxuICAgIFtzb3J0XT1cInNvcnRcIiAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIiBbbmdDbGFzc109XCJnZXRIZWFkZXJIZWlnaHQoKVwiIGlkPVwibGliLWdyaWRcIiBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIj5cbiAgICA8ZGl2ICNzZWxlY3RBbGxNZXNzYWdlRWxlbWVudCBjbGFzcz1cImxpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhYWxsUGFnZXNTZWxlY3RlZFwiIGNsYXNzPVwibGliLWdyaWQtc2VsZWN0LWFsbC1tZXNzYWdlXCI+XG4gICAgICAgIDxsaWItdHlwb2dyYXBoeSBbZGVmYXVsdFRleHRdPVwiJ0FsbCAnK2dyaWRWaWV3LmRhdGEubGVuZ3RoKycgJytpdGVtTmFtZSsnIG9uIHRoaXMgcGFnZSBhcmUgc2VsZWN0ZWQuJ1wiXG4gICAgICAgICAgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PlxuICAgICAgICA8dT48bGliLXR5cG9ncmFwaHkgKGNsaWNrKT1cInNlbGVjdEFjcm9zc1BhZ2VzKHRydWUpXCIgY2xhc3M9XCJzZWxlY3QtYWxsLWhhbmRsZXJcIlxuICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidTZWxlY3QgYWxsICcrZ3JpZFZpZXcudG90YWwrJyAnK2l0ZW1OYW1lKycgZnJvbSBhbGwgcGFnZXMnXCJcbiAgICAgICAgICAgIHR5cGU9XCJCT0RZX1NNQUxMXCI+PC9saWItdHlwb2dyYXBoeT48L3U+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhbGxQYWdlc1NlbGVjdGVkXCIgY2xhc3M9XCJsaWItZ3JpZC1zZWxlY3QtYWxsLW1lc3NhZ2VcIj5cbiAgICAgICAgPGxpYi1pY29uIG5hbWU9XCJjaXJjbGUtY2hlY2tlZFwiIGNsYXNzPVwiYWxsLXNlbGVjdGVkLWljb25cIj48L2xpYi1pY29uPlxuICAgICAgICA8bGliLXR5cG9ncmFwaHkgW2RlZmF1bHRUZXh0XT1cIidBbGwgJytncmlkVmlldy50b3RhbCsnICcraXRlbU5hbWUrJyBhY3Jvc3MgYWxsIHBhZ2VzIGFyZSBzZWxlY3RlZC4nXCJcbiAgICAgICAgICB0eXBlPVwiQk9EWV9TTUFMTFwiPjwvbGliLXR5cG9ncmFwaHk+XG4gICAgICAgIDx1PjxsaWItdHlwb2dyYXBoeSAoY2xpY2spPVwic2VsZWN0QWNyb3NzUGFnZXMoZmFsc2UpXCIgY2xhc3M9XCJzZWxlY3QtYWxsLWhhbmRsZXJcIlxuICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidDbGVhciBzZWxlY3Rpb24nXCIgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PjwvdT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNob3dUb29sYmFyXCIga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0aGlzLmdyaWRWaWV3LnRvdGFsID09PSAwXCIga2VuZG9HcmlkTm9SZWNvcmRzVGVtcGxhdGU+XG4gICAgICA8bGliLXR5cG9ncmFwaHkgKm5nSWY9XCIhbG9hZGluZ1wiIFtkZWZhdWx0VGV4dF09XCJub1JlY29yZHNDb250ZW50XCIgdHlwZT1cIkJPRFlfTUVESVVNXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgIDxsaWItbG9hZGVyICpuZ0lmPVwibG9hZGluZ1wiIFt0eXBlXT1cImxvYWRlclR5cGVcIiBbc2l6ZV09XCJsb2FkZXJTaXplXCIgW3RoZW1lQ29sb3JdPVwibG9hZGVyVGhlbWVcIj48L2xpYi1sb2FkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLmdyaWRWaWV3LnRvdGFsID4gMFwiPlxuICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiY2hlY2tCb3hSZXF1aXJlZCA9PT0gdHJ1ZVwiIFt3aWR0aF09XCJjaGVja0JveFdpZHRoXCJcbiAgICAgICAgW3Jlc2l6YWJsZV09XCJjaGVja0JveENvbHVtblJlc2l6YWJsZVwiIFtjb2x1bW5NZW51XT1cImNoZWNrQm94Q29sdW1uTWVudVwiIGNsYXNzPVwiY2hlY2tib3gtY29sdW1uXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJzZWxlY3RBbGxDaGVja2JveElkXCIgdHlwZT1cImNoZWNrYm94XCIga2VuZG9DaGVja0JveCBrZW5kb0dyaWRTZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgW3N0YXRlXT1cInNlbGVjdEFsbFN0YXRlXCIgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG5cbiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBjbGFzcz1cImdyaWQtY29sdW1uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uRGF0YVwiIFtmaWVsZF09XCJpdGVtLmZpZWxkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICBbd2lkdGhdPVwiaXRlbS5jb2x1bW5XaWR0aFwiIFtzb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCIgW2VkaXRvcl09XCJpdGVtLmVkaXRvclwiIFtjbGFzc109XCJpdGVtLmNsYXNzXCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic29ydGFibGVcIiBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydFswXS5maWVsZCA9PT0gaXRlbS5maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0WzBdLmRpciA9PT0gJ2FzYydcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRbMF0uZGlyID09PSAnZGVzYydcIj48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW0uY3VzdG9tQ29sdW1uXCIga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtblRlbXBsYXRlRGljdFtpdGVtLnR5cGVdXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBkYXRhSXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpdGVtLmN1c3RvbVwiIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhSXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXRlbS5pbXBhY3RcIiBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbXBhY3RDb2x1bW47IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRhdGFJdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cblxuICAgICAgPGtlbmRvLWdyaWQtY29sdW1uICpuZ0lmPVwic2hvd0RlbGV0ZUNvbHVtblwiIFt3aWR0aF09XCJkZWxldGVDb2x1bW5XaWR0aFwiIGNsYXNzPVwiZGVsZXRlLWNvbHVtblwiIHRpdGxlPVwiQWN0aW9uXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgPGxpYi10b29sdGlwIHNob3dPbj1cImhvdmVyXCIgcG9zaXRpb249XCJib3R0b21cIiBjbGFzcz1cInJlbW92ZS10b29sdGlwXCI+XG4gICAgICAgICAgICA8bGliLWljb24gbmFtZT1cImRlbGV0ZVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAoY2xpY2spPVwib25EZWxldGUoZGF0YUl0ZW0pXCI+PC9saWItaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGxpYi10eXBvZ3JhcGh5IGRlZmF1bHRUZXh0PVwiUmVtb3ZlXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGliLXRvb2x0aXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuXG4gICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3dpZHRoXT1cImtlYmFiQ29sdW1uV2lkdGhcIiBjbGFzcz1cImtlYmFiLWNvbHVtblwiICpuZ0lmPVwic2hvd0tlYmFiXCIgdGl0bGU9XCJBY3Rpb25zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgPGtlbmRvLWRyb3Bkb3duYnV0dG9uICpuZ0lmPVwiIWhpZGVLZWJhYlJvd0luZGV4LmluY2x1ZGVzKHJvd0luZGV4KVwiIFtzdmdJY29uXT1cImljb25cIiBmaWxsTW9kZT1cIm5vbmVcIlxuICAgICAgICAgICAgW2RhdGFdPVwia2ViYWJMaXN0IHwga2ViYWJNZW51RmlsdGVyIDogZGF0YUl0ZW1cIiBjbGFzcz1cImtlYmFiXCIgKGl0ZW1DbGljayk9XCJvbktlYmFiQ2xpY2soJGV2ZW50LCBkYXRhSXRlbSlcIlxuICAgICAgICAgICAgW3BvcHVwU2V0dGluZ3NdPVwieyBhbGlnbjogJ3JpZ2h0JywgYW5pbWF0ZTogdHJ1ZSwgcG9wdXBDbGFzczogJ2tlYmFiLWxpc3QnIH1cIj5cbiAgICAgICAgICA8L2tlbmRvLWRyb3Bkb3duYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWREZXRhaWxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRhdGFJdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gKm5nSWY9XCJjdXN0b21FeHBhbmRSb3dDb2x1bW5cIiBbd2lkdGhdPVwiZXhwYW5kUm93Q29sdW1uV2lkdGhcIiBjbGFzcz1cImdyaWQtY29sdW1uIGV4cGFuZC1jb2x1bW5cIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZXhwYW5kQ29sdW1uQ2xhc3MoKVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRSb3dzLmluY2x1ZGVzKGRhdGFJdGVtW2dyaWRSb3dTZWxlY3RCeVZhbHVlXSkgJiYgZGlzYWJsZVByZVNlbGVjdGVkUm93c1wiXG4gICAgICAgICAgICBjbGFzcz1cImV4cGFuZC1jb2x1bW4tdGV4dFwiPlxuICAgICAgICAgICAgQWxyZWFkeSBhZGRlZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8a2VuZG8tYnV0dG9uICpuZ0lmPVwiIWV4cGFuZFJvd0luZGV4LmluY2x1ZGVzKHJvd0luZGV4KVwiIFtzdmdJY29uXT1cImFycm93RG93bkljb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZFJvdyhyb3dJbmRleClcIiBmaWxsTW9kZT1cIm5vbmVcIiBjbGFzcz1cImFycm93LWJ0blwiPlxuICAgICAgICAgIDwva2VuZG8tYnV0dG9uPlxuICAgICAgICAgIDxrZW5kby1idXR0b24gKm5nSWY9XCJleHBhbmRSb3dJbmRleC5pbmNsdWRlcyhyb3dJbmRleClcIiBbc3ZnSWNvbl09XCJhcnJvd1VwSWNvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29sbGFwc2VSb3cocm93SW5kZXgpXCIgZmlsbE1vZGU9XCJub25lXCIgY2xhc3M9XCJhcnJvdy1idG5cIj5cbiAgICAgICAgICA8L2tlbmRvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG5cbiAgICA8bmctdGVtcGxhdGUga2VuZG9QYWdlclRlbXBsYXRlIGxldC10b3RhbFBhZ2VzPVwidG90YWxQYWdlc1wiIGxldC1jdXJyZW50UGFnZT1cImN1cnJlbnRQYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi13cmFwcGVyXCIgW25nQ2xhc3NdPVwiYWxsUGFnZXNTZWxlY3RlZCA/ICdwYWdpbmF0aW9uLWRpc2FibGVkJyA6ICcnXCI+XG4gICAgICAgIDxrZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+PC9rZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+XG4gICAgICAgIDxrZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnMgW2J1dHRvbkNvdW50XT1cInBhZ2VDb3VudFwiPjwva2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zPlxuICAgICAgICA8a2VuZG8tcGFnZXItbmV4dC1idXR0b25zPjwva2VuZG8tcGFnZXItbmV4dC1idXR0b25zPlxuICAgICAgICA8a2VuZG8tcGFnZXItaW5mbz48L2tlbmRvLXBhZ2VyLWluZm8+XG4gICAgICAgIDxrZW5kby1wYWdlci1wYWdlLXNpemVzIFtwYWdlU2l6ZXNdPVwic2l6ZXNcIj48L2tlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXM+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gIDwva2VuZG8tZ3JpZD5cbjwvZGl2PlxuIl19