@rangertechnologies/ngnxt 2.1.97 → 2.1.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/datatable/datatable.component.mjs +35 -39
- package/esm2022/lib/pages/builder/element/element.component.mjs +35 -28
- package/esm2022/lib/pages/builder/form/form.component.mjs +3 -3
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +63 -76
- package/esm2022/lib/services/form-builder.service.mjs +20 -12
- package/fesm2022/rangertechnologies-ngnxt.mjs +150 -152
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +0 -4
- package/lib/pages/builder/element/element.component.d.ts +1 -10
- package/lib/pages/builder/properties/properties.component.d.ts +1 -36
- package/lib/services/form-builder.service.d.ts +8 -6
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.99.tgz +0 -0
- package/src/lib/style.css +1 -18
- package/rangertechnologies-ngnxt-2.1.97.tgz +0 -0
|
@@ -54,11 +54,18 @@ export class NxtDatatable {
|
|
|
54
54
|
// "pageSize": 10,
|
|
55
55
|
// "pageIndex": 10
|
|
56
56
|
// },
|
|
57
|
-
// "tableSearch":
|
|
57
|
+
// "tableSearch": { // 1
|
|
58
|
+
// "fields" : [
|
|
59
|
+
// "lightType",
|
|
60
|
+
// "system",
|
|
61
|
+
// "status"
|
|
62
|
+
// ] ,
|
|
63
|
+
// "value": 'r-001'
|
|
64
|
+
// },
|
|
58
65
|
// "searchFilterData": { // 2
|
|
59
66
|
// "lightType": [
|
|
60
67
|
// "AA",
|
|
61
|
-
// "BB"
|
|
68
|
+
// "BB"
|
|
62
69
|
// ]
|
|
63
70
|
// },
|
|
64
71
|
// "sort": { // 3
|
|
@@ -106,8 +113,6 @@ export class NxtDatatable {
|
|
|
106
113
|
configPagination = false; // flag for config pagination
|
|
107
114
|
deleteData; // to get the delete row
|
|
108
115
|
deleteModal = false; // for conformation popup
|
|
109
|
-
actionColumnSize; // track a action column button size
|
|
110
|
-
dropdownButtonSize = 0; // for action column dropdown button size
|
|
111
116
|
dropdownActionButton; // for action column dropdown button
|
|
112
117
|
currentOpenIndex = null; // track the current open action dropdown icon index
|
|
113
118
|
clickListener; // action column dropdown button click listener for close a dropdown button
|
|
@@ -121,6 +126,11 @@ export class NxtDatatable {
|
|
|
121
126
|
this.originalData = [...this.data];
|
|
122
127
|
this.sFilterData = [...this.data];
|
|
123
128
|
this.dataSource.data = this.originalData;
|
|
129
|
+
this.pageSize = this.pagination?.pageSize ? this.pagination['pageSize'] : 10;
|
|
130
|
+
this.pageIndex = this.pagination?.pageIndex ? this.pagination['pageIndex'] : 1;
|
|
131
|
+
this.totalRecords = this.pagination?.totalRecords ? this.pagination['totalRecords'] : undefined;
|
|
132
|
+
this.pageSizeOptions = this.pagination?.pageSizeOptions ? this.pagination['pageSizeOptions'] : ['5', '10', '25', '50', '100', '200'];
|
|
133
|
+
this.pagination === undefined ? this.configPagination = false : this.configPagination = true;
|
|
124
134
|
this.selection = new SelectionModel(true, []);
|
|
125
135
|
if (!this.totalRecords && this.data) {
|
|
126
136
|
this.dataSource.data = this.data?.slice(0, 10);
|
|
@@ -199,15 +209,7 @@ export class NxtDatatable {
|
|
|
199
209
|
this.totalRecords = this.pagination?.totalRecords ? this.pagination['totalRecords'] : undefined;
|
|
200
210
|
this.pageSizeOptions = this.pagination?.pageSizeOptions ? this.pagination['pageSizeOptions'] : ['5', '10', '25', '50', '100', '200'];
|
|
201
211
|
this.pagination === undefined ? this.configPagination = false : this.configPagination = true;
|
|
202
|
-
|
|
203
|
-
this.actionColumnSize = 2;
|
|
204
|
-
}
|
|
205
|
-
else if (this.isEditRow || this.isDeleteRow) {
|
|
206
|
-
this.actionColumnSize = 1;
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
this.actionColumnSize = 0;
|
|
210
|
-
}
|
|
212
|
+
this.dropdownActionButton = this.actionButtonArray?.buttonArray.slice(this.actionButtonArray?.size);
|
|
211
213
|
this.originalData = [...this.data];
|
|
212
214
|
this.sFilterData = [...this.data];
|
|
213
215
|
this.dataSource.data = this.originalData;
|
|
@@ -357,11 +359,9 @@ export class NxtDatatable {
|
|
|
357
359
|
this.currentSortColumn = column;
|
|
358
360
|
this.currentSortDirection = 'asc';
|
|
359
361
|
}
|
|
360
|
-
this.pageIndex
|
|
361
|
-
this.pageSize = 10;
|
|
362
|
-
localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: false, pageSize: 10, pageIndex: this.pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));
|
|
362
|
+
localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: false, pageSize: this.pageSize, pageIndex: this.pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));
|
|
363
363
|
// Only sort if the direction is 'asc' or 'desc'
|
|
364
|
-
this.NxtTableEmit.emit({ pagination: { pageSize:
|
|
364
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
365
365
|
}
|
|
366
366
|
}
|
|
367
367
|
onScroll(tableContainer) {
|
|
@@ -386,20 +386,19 @@ export class NxtDatatable {
|
|
|
386
386
|
}
|
|
387
387
|
// SKS15FEB25 emitting pagr size and index to parent on paginating
|
|
388
388
|
pageParams(event) {
|
|
389
|
+
this.pageIndex = event.pageIndex;
|
|
390
|
+
this.pageSize = event.pageSize;
|
|
389
391
|
if (!this.configPagination || this.dataSource.data.length === this.totalRecords) {
|
|
390
|
-
this.pageIndex = event.pageIndex;
|
|
391
|
-
this.pageSize = event.pageSize;
|
|
392
392
|
const start = (Number(event.pageIndex) - 1) * Number(event.pageSize);
|
|
393
393
|
const end = start + Number(event.pageSize);
|
|
394
394
|
this.dataSource.data = this.sFilterData?.slice(start, end);
|
|
395
395
|
}
|
|
396
396
|
else {
|
|
397
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: event.pageSize, pageIndex: event.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
397
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: event.pageSize, pageIndex: event.pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
400
|
// SKS15FEB25 apply search bar filter using mat
|
|
401
401
|
applyFilter(event) {
|
|
402
|
-
console.log("i am in apply filter");
|
|
403
402
|
let filterValue = event.target.value;
|
|
404
403
|
filterValue = filterValue.trim().toLowerCase();
|
|
405
404
|
if (!filterValue) {
|
|
@@ -586,7 +585,7 @@ export class NxtDatatable {
|
|
|
586
585
|
else {
|
|
587
586
|
const pageIndex = Math.ceil(this.totalRecords / 10);
|
|
588
587
|
localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: true, pageSize: 10, pageIndex: pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));
|
|
589
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
588
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
590
589
|
}
|
|
591
590
|
}
|
|
592
591
|
// SKS15FEB25 Action button conditionally displayed function
|
|
@@ -618,7 +617,7 @@ export class NxtDatatable {
|
|
|
618
617
|
if (this.searchConfigs || this.dataSource.data.length === this.totalRecords) {
|
|
619
618
|
this.pageIndex = 1;
|
|
620
619
|
this.pageSize = 10;
|
|
621
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
620
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
622
621
|
}
|
|
623
622
|
}
|
|
624
623
|
// SKS15FEB25 If the value in the search box is empty, call the onSearch function automatically
|
|
@@ -641,8 +640,16 @@ export class NxtDatatable {
|
|
|
641
640
|
}
|
|
642
641
|
// SKS15FEB25 for close search filter box
|
|
643
642
|
closefilter() {
|
|
643
|
+
this.pageSize = 10;
|
|
644
|
+
this.pageIndex = 1;
|
|
644
645
|
this.filterDataArray[this.selectedFilter] = [];
|
|
645
|
-
this.
|
|
646
|
+
this.isResized = false;
|
|
647
|
+
if (!this.configPagination || this.dataSource.data.length === this.totalRecords) {
|
|
648
|
+
this.filterRetain(this.filterDataArray);
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: 1 }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
652
|
+
}
|
|
646
653
|
}
|
|
647
654
|
// SKS15FEB25 search filter box checkbox retain
|
|
648
655
|
isSelected(event) {
|
|
@@ -668,23 +675,12 @@ export class NxtDatatable {
|
|
|
668
675
|
if (this.dataSource.data.length !== this.totalRecords && this.configPagination) {
|
|
669
676
|
this.pageIndex = 1;
|
|
670
677
|
this.pageSize = 10;
|
|
671
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
678
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
672
679
|
}
|
|
673
680
|
else {
|
|
674
681
|
this.filterRetain(this.filterDataArray);
|
|
675
682
|
}
|
|
676
683
|
}
|
|
677
|
-
// SKS15FEB25 action column button count track
|
|
678
|
-
incrementActionColumnSize() {
|
|
679
|
-
this.actionColumnSize++;
|
|
680
|
-
this.dropdownButtonSize++;
|
|
681
|
-
return ''; // Returning empty string to avoid rendering issues
|
|
682
|
-
}
|
|
683
|
-
// SKS15FEB25 action column dropdown buttons slice
|
|
684
|
-
updatedDropdownArraySize() {
|
|
685
|
-
this.dropdownActionButton = this.actionButtonArray?.buttonArray.slice(this.dropdownButtonSize);
|
|
686
|
-
return "";
|
|
687
|
-
}
|
|
688
684
|
// SKS15FEB25 action column dropdown buttons close
|
|
689
685
|
addClickOutsideListener() {
|
|
690
686
|
if (!this.clickListener) {
|
|
@@ -713,7 +709,7 @@ export class NxtDatatable {
|
|
|
713
709
|
this.actionButtonEmit.emit(event);
|
|
714
710
|
}
|
|
715
711
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
716
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div class=\"m-4\">\n <div class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p *ngIf=\"totalRecords || totalCount\" style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font\" type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event) : applyFilter($event)\"\n [value]=\"searchConfigs ? searchBoxValue || '' : ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\" (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" #tableContainer (scroll)=\"onScroll(tableContainer)\">\n <ng-container> <!--*ngIf=\"!isLoading; else loadingTemplate\"-->\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\" [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortData(column)\"\n (mouseenter)=\"hoveredColumn = column\"\n (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <div class=\"ellipsis\" title=\"{{ headerLabels[displayedColumns.indexOf(column)] }}\">{{headerLabels[displayedColumns.indexOf(column)]}}</div>\n <div class=\"position-relative\" (click)=\"$event.stopPropagation()\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\" style=\"padding-right: 2px;\" width=\"12\" height=\"11\" viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\" stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <!--SKS15FEB25 Red dot for active filter -->\n <circle *ngIf=\"filterDataArray[column]?.length > 0\" cx=\"10\" cy=\"1\" r=\"2\" fill=\"red\"></circle>\n </svg>\n <div class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection === 'desc' ? '\u2193' : '' }}\n </span>\n <span *ngIf=\"hoveredColumn === column && currentSortColumn !== column\" class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\" class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font width-100\" type=\"text\" placeholder=\"Search\" [(ngModel)]=\"searchText\" class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14.83 14.83L9.16998 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\" style=\"gap: 5px;\">\n <input type=\"checkbox\" [checked]=\"isSelected(data)\" [value]=\"data\" [id]=\"data\"\n (change)=\"checkedData(data)\">\n <div class=\"medium-font ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\" ></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\" style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\" (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns ellipsis\" class=\"table-cell body-color\">\n <div *ngIf=\" column !== 'active'\">\n <div class=\"font-size-13 {{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n *ngIf=\"hyperLinkColumns?.includes(column)\"\n (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column)\" class=\"font-size-13\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container> \n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \" class=\"on-edit d-flex\">\n <input #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \" class=\"on-edit d-flex\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \" type=\"time\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n placeholder=\"HH:mm:ss\" [(ngModel)]=\"element[column]\" [disabled]=\"element.editRow ? false : true\" />\n <div *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n [(ngModel)]=\"element[column]\">\n <option [disabled]=\"element.editRow ? false : true\" *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \" [value]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"true\">\n </div>\n \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\" style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\" fill=\"#6C757D\"/>\n </svg>\n </div>\n </div>\n \n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\" style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <!--SKS15FEB25 Render inline buttons up to actionColumnSize -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"actionColumnSize < actionButtonArray?.size\" style=\" margin-left: 3px; margin-right: 3px;\">\n {{ incrementActionColumnSize() }}\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip \n (click)=\"actionButtonClicked(button)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\"> \n </div>\n </div>\n </div>\n </div>\n {{ updatedDropdownArraySize() }}\n <div *ngIf=\"dropdownActionButton.length > 0\" class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\" width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <div class=\"dropdown-menu\" *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\"> \n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\"\n style=\"display: flex;\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n\n [matTooltip]=btn.tooltip\n [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn)\">\n <img [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">{{btn.name}}</div>\n </button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data.length === 0\" class=\"\">\n No records/data found.\n </div>\n </div>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <!--SKS15FEB25 Skeleton Loader -->\n <div class=\"skeleton-loader\">\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"skeleton-row\">\n <div *ngFor=\"let _ of displayedColumns\" class=\"skeleton-cell\"></div>\n </div>\n </div>\n </ng-template>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \" (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"editColumn.length > 0 || tableSaveButton\" buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\" (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button> \n </div>\n <nxt-pagination [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"totalCount\" [pageSize]=\"pageSize\"\n [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\" (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\" aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n </div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.skeleton-loader{padding:1rem}.skeleton-row{display:flex;margin-bottom:1rem}.skeleton-cell{height:20px;background:#fff;margin:0 .5rem;flex:1;border-radius:4px;animation:pulse 1.5s infinite}@keyframes pulse{0%{background:var(--header-bg)}50%{background:color-mix(in srgb,var(--header-bg) 80%,#0000)}to{background:var(--header-bg)}}.table-container{width:100%;height:450px;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:15px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i4.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }] });
|
|
712
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div class=\"m-4\">\n <div class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p *ngIf=\"totalRecords || totalCount\" style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font\" type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event) : applyFilter($event)\"\n [value]=\"searchConfigs ? searchBoxValue || '' : ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\" (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" #tableContainer (scroll)=\"onScroll(tableContainer)\">\n <ng-container> <!--*ngIf=\"!isLoading; else loadingTemplate\"-->\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\" [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortData(column)\"\n (mouseenter)=\"hoveredColumn = column\"\n (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <div class=\"ellipsis\" title=\"{{ headerLabels[displayedColumns.indexOf(column)] }}\">{{headerLabels[displayedColumns.indexOf(column)]}}</div>\n <div class=\"position-relative\" (click)=\"$event.stopPropagation()\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\" style=\"padding-right: 2px;\" width=\"12\" height=\"11\" viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\" stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <!--SKS15FEB25 Red dot for active filter -->\n <circle *ngIf=\"filterDataArray[column]?.length > 0\" cx=\"10\" cy=\"1\" r=\"2\" fill=\"red\"></circle>\n </svg>\n <div class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection === 'desc' ? '\u2193' : '' }}\n </span>\n <span *ngIf=\"hoveredColumn === column && currentSortColumn !== column\" class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\" class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font width-100\" type=\"text\" placeholder=\"Search\" [(ngModel)]=\"searchText\" class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14.83 14.83L9.16998 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\" style=\"gap: 5px;\">\n <input type=\"checkbox\" [checked]=\"isSelected(data)\" [value]=\"data\" [id]=\"data\"\n (change)=\"checkedData(data)\">\n <div class=\"medium-font ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\" ></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\" style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\" (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns ellipsis\" class=\"table-cell body-color\">\n <div *ngIf=\" column !== 'active'\">\n <div class=\"font-size-13 {{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n *ngIf=\"hyperLinkColumns?.includes(column)\"\n (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column)\" class=\"font-size-13\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container> \n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \" class=\"on-edit d-flex\">\n <input #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \" class=\"on-edit d-flex\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \" type=\"time\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n placeholder=\"HH:mm:ss\" [(ngModel)]=\"element[column]\" [disabled]=\"element.editRow ? false : true\" />\n <div *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n [(ngModel)]=\"element[column]\">\n <option [disabled]=\"element.editRow ? false : true\" *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \" [value]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"true\">\n </div>\n \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\" style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\" fill=\"#6C757D\"/>\n </svg>\n </div>\n </div>\n \n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\" style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip \n (click)=\"actionButtonClicked(button)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\"> \n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton.length > 0\" class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\" width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <div class=\"dropdown-menu\" [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton.length > 0 ? 1 : 0)) * 100 + '%'\" *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\"> \n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\"\n style=\"display: flex;\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n\n [matTooltip]=btn.tooltip\n [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn)\">\n <img [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">{{btn.name}}</div>\n </button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data.length === 0\" class=\"\">\n No records/data found.\n </div>\n </div>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <!--SKS15FEB25 Skeleton Loader -->\n <div class=\"skeleton-loader\">\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"skeleton-row\">\n <div *ngFor=\"let _ of displayedColumns\" class=\"skeleton-cell\"></div>\n </div>\n </div>\n </ng-template>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \" (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"editColumn.length > 0 || tableSaveButton\" buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\" (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button> \n </div>\n <nxt-pagination [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"totalCount\" [pageSize]=\"pageSize\"\n [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\" (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\" aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n </div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.skeleton-loader{padding:1rem}.skeleton-row{display:flex;margin-bottom:1rem}.skeleton-cell{height:20px;background:#fff;margin:0 .5rem;flex:1;border-radius:4px;animation:pulse 1.5s infinite}@keyframes pulse{0%{background:var(--header-bg)}50%{background:color-mix(in srgb,var(--header-bg) 80%,#0000)}to{background:var(--header-bg)}}.table-container{width:100%;height:450px;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:15px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i4.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }] });
|
|
717
713
|
}
|
|
718
714
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, decorators: [{
|
|
719
715
|
type: Component,
|
|
@@ -731,7 +727,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
731
727
|
EditColumnTypePipe,
|
|
732
728
|
MatTooltipModule
|
|
733
729
|
// RowResizerDirective
|
|
734
|
-
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div class=\"m-4\">\n <div class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p *ngIf=\"totalRecords || totalCount\" style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font\" type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event) : applyFilter($event)\"\n [value]=\"searchConfigs ? searchBoxValue || '' : ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\" (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" #tableContainer (scroll)=\"onScroll(tableContainer)\">\n <ng-container> <!--*ngIf=\"!isLoading; else loadingTemplate\"-->\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\" [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortData(column)\"\n (mouseenter)=\"hoveredColumn = column\"\n (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <div class=\"ellipsis\" title=\"{{ headerLabels[displayedColumns.indexOf(column)] }}\">{{headerLabels[displayedColumns.indexOf(column)]}}</div>\n <div class=\"position-relative\" (click)=\"$event.stopPropagation()\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\" style=\"padding-right: 2px;\" width=\"12\" height=\"11\" viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\" stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <!--SKS15FEB25 Red dot for active filter -->\n <circle *ngIf=\"filterDataArray[column]?.length > 0\" cx=\"10\" cy=\"1\" r=\"2\" fill=\"red\"></circle>\n </svg>\n <div class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection === 'desc' ? '\u2193' : '' }}\n </span>\n <span *ngIf=\"hoveredColumn === column && currentSortColumn !== column\" class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\" class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font width-100\" type=\"text\" placeholder=\"Search\" [(ngModel)]=\"searchText\" class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14.83 14.83L9.16998 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\" style=\"gap: 5px;\">\n <input type=\"checkbox\" [checked]=\"isSelected(data)\" [value]=\"data\" [id]=\"data\"\n (change)=\"checkedData(data)\">\n <div class=\"medium-font ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\" ></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\" style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\" (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns ellipsis\" class=\"table-cell body-color\">\n <div *ngIf=\" column !== 'active'\">\n <div class=\"font-size-13 {{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n *ngIf=\"hyperLinkColumns?.includes(column)\"\n (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column)\" class=\"font-size-13\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container> \n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \" class=\"on-edit d-flex\">\n <input #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \" class=\"on-edit d-flex\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \" type=\"time\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n placeholder=\"HH:mm:ss\" [(ngModel)]=\"element[column]\" [disabled]=\"element.editRow ? false : true\" />\n <div *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n [(ngModel)]=\"element[column]\">\n <option [disabled]=\"element.editRow ? false : true\" *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \" [value]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"true\">\n </div>\n \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\" style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\" fill=\"#6C757D\"/>\n </svg>\n </div>\n </div>\n \n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\" style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <!--SKS15FEB25 Render inline buttons up to actionColumnSize -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"actionColumnSize < actionButtonArray?.size\" style=\" margin-left: 3px; margin-right: 3px;\">\n {{ incrementActionColumnSize() }}\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip \n (click)=\"actionButtonClicked(button)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\"> \n </div>\n </div>\n </div>\n </div>\n {{ updatedDropdownArraySize() }}\n <div *ngIf=\"dropdownActionButton.length > 0\" class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\" width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <div class=\"dropdown-menu\" *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\"> \n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\"\n style=\"display: flex;\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n\n [matTooltip]=btn.tooltip\n [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn)\">\n <img [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">{{btn.name}}</div>\n </button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data.length === 0\" class=\"\">\n No records/data found.\n </div>\n </div>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <!--SKS15FEB25 Skeleton Loader -->\n <div class=\"skeleton-loader\">\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"skeleton-row\">\n <div *ngFor=\"let _ of displayedColumns\" class=\"skeleton-cell\"></div>\n </div>\n </div>\n </ng-template>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \" (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"editColumn.length > 0 || tableSaveButton\" buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\" (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button> \n </div>\n <nxt-pagination [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"totalCount\" [pageSize]=\"pageSize\"\n [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\" (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\" aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n </div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.skeleton-loader{padding:1rem}.skeleton-row{display:flex;margin-bottom:1rem}.skeleton-cell{height:20px;background:#fff;margin:0 .5rem;flex:1;border-radius:4px;animation:pulse 1.5s infinite}@keyframes pulse{0%{background:var(--header-bg)}50%{background:color-mix(in srgb,var(--header-bg) 80%,#0000)}to{background:var(--header-bg)}}.table-container{width:100%;height:450px;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:15px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}\n"] }]
|
|
730
|
+
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div class=\"m-4\">\n <div class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p *ngIf=\"totalRecords || totalCount\" style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font\" type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event) : applyFilter($event)\"\n [value]=\"searchConfigs ? searchBoxValue || '' : ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\" (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" #tableContainer (scroll)=\"onScroll(tableContainer)\">\n <ng-container> <!--*ngIf=\"!isLoading; else loadingTemplate\"-->\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\" [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortData(column)\"\n (mouseenter)=\"hoveredColumn = column\"\n (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <div class=\"ellipsis\" title=\"{{ headerLabels[displayedColumns.indexOf(column)] }}\">{{headerLabels[displayedColumns.indexOf(column)]}}</div>\n <div class=\"position-relative\" (click)=\"$event.stopPropagation()\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\" style=\"padding-right: 2px;\" width=\"12\" height=\"11\" viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\" stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <!--SKS15FEB25 Red dot for active filter -->\n <circle *ngIf=\"filterDataArray[column]?.length > 0\" cx=\"10\" cy=\"1\" r=\"2\" fill=\"red\"></circle>\n </svg>\n <div class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection === 'desc' ? '\u2193' : '' }}\n </span>\n <span *ngIf=\"hoveredColumn === column && currentSortColumn !== column\" class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\" class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <input class=\"medium-font width-100\" type=\"text\" placeholder=\"Search\" [(ngModel)]=\"searchText\" class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M14.83 14.83L9.16998 9.17001\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\" style=\"gap: 5px;\">\n <input type=\"checkbox\" [checked]=\"isSelected(data)\" [value]=\"data\" [id]=\"data\"\n (change)=\"checkedData(data)\">\n <div class=\"medium-font ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\" ></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\" style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\" (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns ellipsis\" class=\"table-cell body-color\">\n <div *ngIf=\" column !== 'active'\">\n <div class=\"font-size-13 {{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n *ngIf=\"hyperLinkColumns?.includes(column)\"\n (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column)\" class=\"font-size-13\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n {{ element[column] | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n {{ element[column] | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n {{ element[column] }}\n </ng-template> \n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\"> \n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\" fill=\"#434555\" fill-opacity=\"0.5\"/>\n </svg> \n </ng-container> \n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \" class=\"on-edit d-flex\">\n <input #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \" class=\"on-edit d-flex\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"element.editRow ? false : true\">\n <input *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \" type=\"time\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n placeholder=\"HH:mm:ss\" [(ngModel)]=\"element[column]\" [disabled]=\"element.editRow ? false : true\" />\n <div *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\" class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \"\n [(ngModel)]=\"element[column]\">\n <option [disabled]=\"element.editRow ? false : true\" *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \" [value]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement class=\"lop-input table-width\" [class]=\"element.editRow ? 'input-box' : '' \" [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [value]=\"element[column]\" [(ngModel)]=\"element[column]\" [readOnly]=\"true\">\n </div>\n \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\" style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\" fill=\"#6C757D\"/>\n </svg>\n </div>\n </div>\n \n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\" style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\" style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip \n (click)=\"actionButtonClicked(button)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\"> \n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton.length > 0\" class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\" style=\" margin-left: 3px; margin-right: 3px;\">\n <div style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\" width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n \n <div class=\"dropdown-menu\" [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton.length > 0 ? 1 : 0)) * 100 + '%'\" *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\"> \n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\"\n style=\"display: flex;\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n\n [matTooltip]=btn.tooltip\n [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn)\">\n <img [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">{{btn.name}}</div>\n </button>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data.length === 0\" class=\"\">\n No records/data found.\n </div>\n </div>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <!--SKS15FEB25 Skeleton Loader -->\n <div class=\"skeleton-loader\">\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"skeleton-row\">\n <div *ngFor=\"let _ of displayedColumns\" class=\"skeleton-cell\"></div>\n </div>\n </div>\n </ng-template>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \" (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"editColumn.length > 0 || tableSaveButton\" buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\" (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button> \n </div>\n <nxt-pagination [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"totalCount\" [pageSize]=\"pageSize\"\n [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\" (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\" aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\" (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n </div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.skeleton-loader{padding:1rem}.skeleton-row{display:flex;margin-bottom:1rem}.skeleton-cell{height:20px;background:#fff;margin:0 .5rem;flex:1;border-radius:4px;animation:pulse 1.5s infinite}@keyframes pulse{0%{background:var(--header-bg)}50%{background:color-mix(in srgb,var(--header-bg) 80%,#0000)}to{background:var(--header-bg)}}.table-container{width:100%;height:450px;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:15px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}\n"] }]
|
|
735
731
|
}], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { data: [{
|
|
736
732
|
type: Input
|
|
737
733
|
}], columns: [{
|
|
@@ -802,4 +798,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
802
798
|
type: HostListener,
|
|
803
799
|
args: ['document:click', ['$event']]
|
|
804
800
|
}] } });
|
|
805
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXNDLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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QUFDLENBQUMsNEJBQTRCO0lBQzFDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMzRyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDM0csSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNuSCxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDM0csSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUdwSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdHLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFD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O3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBbUJhLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDVyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkF3U2lCLGVBQWU7c0JBQTFELFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRQYWdpbmF0aW9uIH0gZnJvbSAnLi4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hGaWx0ZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIucGlwZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZGF0ZS9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgVGltZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL3RpbWUvdGltZS5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5DaGVja1BpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5DaGVjay9lZGl0LWNvbHVtbi1jaGVjay5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5Ecm9wZG93blBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5Ecm9wZG93bi9lZGl0LWNvbHVtbi1kcm9wZG93bi5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5UeXBlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtblR5cGUvZWRpdC1jb2x1bW4tdHlwZS5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LWRhdGF0YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSwgXG4gICAgRm9ybXNNb2R1bGUsIFxuICAgIE54dEJ1dHRvbkNvbXBvbmVudCwgXG4gICAgTnh0UGFnaW5hdGlvbiwgXG4gICAgU2VhcmNoRmlsdGVyUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBUaW1lUGlwZSxcbiAgICBFZGl0Q29sdW1uQ2hlY2tQaXBlLFxuICAgIEVkaXRDb2x1bW5Ecm9wZG93blBpcGUsXG4gICAgRWRpdENvbHVtblR5cGVQaXBlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGVcbiAgICAvLyBSb3dSZXNpemVyRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE54dERhdGF0YWJsZSB7XG4gIEBJbnB1dCgpIGRhdGEhOiBhbnlbXTsgIC8vICBnZXQgZGF0YSB0aGF0IHRvIGJlIGRpc3BsYXllZCBpbiBhIGFycmF5XG4gIEBJbnB1dCgpIGNvbHVtbnMgOkFycmF5PGFueT4gPSBbXTsgLy8gQ29sdW1ucyBoYXZlIGEgbGFiZWwsIGEgY29sdW1uIHR5cGUsIGFuZCBmaWx0ZXIgZGV0YWlscy5cbiAgQElucHV0KCkgd2l0aENoZWNrQm94OiBib29sZWFuOyAgLy8gZ2V0IGlmIHdpdGggb3Igd2l0aG91dCBjaGVja2JveCBpbiB0YWJsZVxuICBASW5wdXQoKSBzZWFyY2hCYXI6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSBzZWFyY2ggYmFyIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlOyAvLyBzYXZlIGJ1dHRvbiBmb3IgZWRpdGluZyBMT1AgaW4gcGF5cm9sbCB0YWJsZSwgIGNoYW5nZWQgbmFtZSBmcm9tICdzYXZlTE9QJ1xuICBASW5wdXQoKSBzdGlja3lDb2x1bW4gPSBmYWxzZTsgLy8gaWYgdGhlIGxhc3QgY29sdW1uIHNob3VsZCBiZSBzdGlja3ksIGl0IHNob3VsZCBiZSBzZW50IGFzIGJvb2xlYW4gdmFsdWVcbiAgQElucHV0KCkgdGFibGVXaWR0aCA9ICcxMDAlJzsgLy8gd2lkdGggb2YgdGFibGUgY2FuIGJlIGFkanVzdGVkIGZyb20gcGFyZW50LCBieSBkZWZhdWx0IGl0IGlzIDEwMCVcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1IZWFkZXIgPSAnQWN0aW9uJzsgIC8vIHRvIGNoYW5nZSB0aGUgaGVhZGVyIGZvciBhY3Rpb24gY29sdW1uXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbjpib29sZWFuOyAgLy90byBzaG93IGJ1dHRvbiBjb2x1bSBhcyBhY3Rpb25cbiAgQElucHV0KCkgdGl0bGU6YW55Oy8vIHRoZSB0aXRsZSBmb3IgdGhlIHRhYmxlO1xuICBASW5wdXQoKSBpc0J1dHRvbnM6Ym9vbGVhbjsvLyBpcyBidXR0b24gcHJlc2VudCBpbiB0YWJsZTtcbiAgQElucHV0KCkgYnV0dG9uQXJyYXk6YW55Oy8vIGJ1dHRvbnMgdG8gYmUgZGlzcGxheWVkO1xuICBASW5wdXQoKSB0YWJsZUlkOmFueTsgLy8gaWQgb2YgdGFibGVcbiAgQElucHV0KCkgaXNFZGl0Um93OiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBlZGl0ZWRcbiAgQElucHV0KCkgaXNEZWxldGVSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGRlbGV0ZWRcbiAgQElucHV0KCkgYWRkSW5saW5lUmVjb3JkIDogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgYWRkZWQgaW5saW5lXG4gIEBJbnB1dCgpIHNlYXJjaENvbmZpZ3M6IGFueTsgLy8gc2VhcmNoIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyA9ICdsdHInOyAvLyBkaXJlY3Rpb24gb2YgdGFibGVcbiAgQElucHV0KCkgcGFnaW5hdGlvbjogYW55OyAvLyBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkFycmF5OiBhbnk7IC8vIGFjdGlvbiBidXR0b24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgbXVsdGlwbGVGaWx0ZXI6IGFueTsgLy8gaWYgcGFnaW5hdGlvbiB0cnVlIHRoZW4gdGhpcyB3aWxsIGJlIHVzZWRcblxuXG4gIEBPdXRwdXQoKSB0YWJsZVJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgb25FZGl0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaWYgZWRpdCBidXR0b24gaXMgY2xpY2tlZCwgdGhlIGRhdGEgb2YgdGhhdCByb3cgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIHNhdmVCdXR0b25EYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBlZGl0ZWQgcm93cyBkYXRhIHdpbGwgYmUgcGFzc2VkXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47ICAvLyB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZCBwYXNzIHRoZSBkYXRhXG4gIEBPdXRwdXQoKSBidXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyB0aGlzIHdpbGwgZW1pdCBhIHRhYmxlIHRvcCBidXR0b24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIGh5cGVyTGlua0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGh5cGVyIGxpbmsgY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIHNpZGVOYXZFbWl0ID1uZXcgRXZlbnRFbWl0dGVyPHtkYXRhOmFueSxjb2w6YW55LCBjb25maWc6YW55fT47IC8vIHJpZ2h0bmF2IGNvbHVtbiBlbWl0XG4gIEBPdXRwdXQoKSBhY3Rpb25CdXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgYWN0aXZlIGJ1dHRvbiBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBOeHRUYWJsZUVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47ICBcbiAgLy8ge1xuICAvLyAgIFwicGFnaW5hdGlvblwiOiB7ICAgICAgIC8vIDRcbiAgLy8gICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcbiAgLy8gICAgICAgXCJwYWdlSW5kZXhcIjogMTBcbiAgLy8gICB9LFxuICAvLyAgIFwidGFibGVTZWFyY2hcIjogXCJkZGRcIiwgIC8vIDFcbiAgLy8gICBcInNlYXJjaEZpbHRlckRhdGFcIjogeyAgLy8gMlxuICAvLyAgICAgICBcImxpZ2h0VHlwZVwiOiBbXG4gIC8vICAgICAgICAgICBcIkFBXCIsXG4gIC8vICAgICAgICAgICBcIkJCXCJcbiAgLy8gICAgICAgXVxuICAvLyAgIH0sXG4gIC8vICAgXCJzb3J0XCI6IHsgICAgICAgICAgICAgIC8vIDNcbiAgLy8gICAgICAgXCJjb2x1bW5cIjogXCJhc3NldENvZGVcIixcbiAgLy8gICAgICAgXCJkaXJlY3Rpb25cIjogXCJhc2NcIlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjsgXG4gXG4gIHNlbGVjdGlvbjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIHJvd1xuICBzdGlja3lDb25kaXRpb24hOiBudW1iZXI7IC8vIHRvIGdldCB0aGUgc3RpY2t5IGNvbHVtbiBpbmRleFxuICBzZWFyY2hGaWx0ZXIgPSBmYWxzZTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyXG4gIGZpbHRlckFycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGFycmF5XG4gIHNlbGVjdGVkRmlsdGVyOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgZmlsdGVyXG4gIHJlbmRlckNvbHVtbnM6IHN0cmluZyA9ICdkaXNwbGF5ZWRDb2x1bW5zJzsgLy8gdG8gZ2V0IHRoZSByZW5kZXJlZCBjb2x1bW5zXG4gIHBhZ2VTaXplT3B0aW9ucyA6IEFycmF5PGFueT4gIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplIG9wdGlvbnNcbiAgZGF0YVNvdXJjZTphbnk7ICAvLyBmb3IgdGFibGUgZGF0YSBzb3VyY2VcbiAgdG90YWxDb3VudCE6bnVtYmVyIC8vIGNvdW50IG9mIHRvdGFsIHJlY29yZHNcbiAgc2VhcmNoQm94VmFsdWU6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggYm94IHZhbHVlXG4gIHByZXZTZWFyY2g6IGFueTsgLy8gdG8gZ2V0IHRoZSBwcmV2aW91cyBzZWFyY2ggdmFsdWVcbiAgYWN0aXZlQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGFjdGl2ZSBjb2x1bW5cbiAgaXNTY3JvbGxlZCA9IGZhbHNlOyAvLyBCb29sZWFuIGZsYWcgdG8gdHJhY2sgc2Nyb2xsIHN0YXRlXG4gIGlzU2hhZG93SGlkZGVuID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzaGFkb3cgc3RhdGVcbiAgY3VycmVudFNvcnRDb2x1bW46IHN0cmluZyA9ICcnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBjb2x1bW5cbiAgY3VycmVudFNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnID0gJ25vbmUnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb25cbiAgb3JpZ2luYWxEYXRhOiBhbnk7IC8vIFN0b3JlIG9yaWdpbmFsIGRhdGEgZm9yIHNvcnRpbmdcbiAgaG92ZXJlZENvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBob3ZlcmVkIGNvbHVtblxuICBzZWFyY2hUZXh0OiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIHRleHRcbiAgbXVsdGlwbGVGaWx0ZXJBcnJheSA6IGFueTsgLy8gdG8gZ2V0IHRoZSBtdWx0aXBsZSBmaWx0ZXIgYXJyYXlcbiAgZmlsdGVyRGF0YUFycmF5OmFueSA9IHt9IC8vIHRvIGdldCB0aGUgZmlsdGVyIGRhdGEgYXJyYXlcbiAgaXNSZXNpemVkOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciB0YWJsZSBjb2x1bW4gcmVzaXplXG4gIHNGaWx0ZXJEYXRhOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlciBkYXRhXG4gIGhlYWRlckxhYmVsczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGhlYWRlciBsYWJlbHNcbiAgZGlzcGxheWVkQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGRpc3BsYXllZCBjb2x1bW5zXG4gIGZpbHRlckNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBoeXBlckxpbmtDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107IC8vIHRvIGdldCB0aGUgaHlwZXIgbGluayBjb2x1bW5zXG4gIGVkaXRDb2x1bW46IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZWRpdCBjb2x1bW5cbiAgZGF0ZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkYXRlIGNvbHVtbnNcbiAgdGltZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgdGltZSBjb2x1bW5zXG4gIG9iamVjdENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgb2JqZWN0IGNvbHVtbnNcbiAgaW5saW5lRWxlbWVudDphbnkgLy8gZm9yIGFkZCBhIG5ldyByb3cgb24gdGFibGVcbiAgcGFnZVNpemU6IGFueSAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemVcbiAgcGFnZUluZGV4OiBhbnkgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIGluZGV4XG4gIHRvdGFsUmVjb3JkczogbnVtYmVyOyAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHRvdGFsIHJlY29yZHNcbiAgY29uZmlnUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmbGFnIGZvciBjb25maWcgcGFnaW5hdGlvblxuICBkZWxldGVEYXRhOmFueTsgLy8gdG8gZ2V0IHRoZSBkZWxldGUgcm93XG4gIGRlbGV0ZU1vZGFsID0gZmFsc2U7IC8vIGZvciBjb25mb3JtYXRpb24gcG9wdXBcbiAgYWN0aW9uQ29sdW1uU2l6ZTogbnVtYmVyOyAvLyB0cmFjayBhIGFjdGlvbiBjb2x1bW4gYnV0dG9uIHNpemVcbiAgZHJvcGRvd25CdXR0b25TaXplOiBudW1iZXIgPSAwOyAvLyBmb3IgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b24gc2l6ZVxuICBkcm9wZG93bkFjdGlvbkJ1dHRvbjogYW55OyAvLyBmb3IgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25cbiAgY3VycmVudE9wZW5JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIHRyYWNrIHRoZSBjdXJyZW50IG9wZW4gYWN0aW9uIGRyb3Bkb3duIGljb24gaW5kZXhcbiAgY2xpY2tMaXN0ZW5lcjogYW55OyAvLyBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayBsaXN0ZW5lciBmb3IgY2xvc2UgYSBkcm9wZG93biBidXR0b25cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKXtcbiAgICBjb25zb2xlLmxvZyhcIm5nT25DaGFuZ2VzIGlzIHJ1bm5pbmdcIilcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YTtcbiAgICAgIC8vU0tTMTVGRUIyNSBJbml0aWFsaXplIHRoaXMgaW4geW91ciBkYXRhIGZldGNoIG1ldGhvZFxuICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgICAgIGlmKCF0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmRhdGEpe1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoMCwgMTApO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICB9LDEwMClcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMud2l0aENoZWNrQm94ICYmIHRoaXMuYWN0aW9uQnV0dG9uKXtcbiAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2JvdGgnO1xuICAgICAgfSBlbHNlIGlmKHRoaXMud2l0aENoZWNrQm94KXtcbiAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ3NlbGVjdCc7XG4gICAgICB9IGVsc2UgaWYodGhpcy5hY3Rpb25CdXR0b24pe1xuICAgICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYWN0aW9uJztcbiAgICAgIH0gICAgIFxuICAgICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgICB0aGlzLnByZXZTZWFyY2ggPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuZmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5jb25maWdQYWdpbmF0aW9uKXtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICAgIGNvbnN0IGZpbHRPYmpzOmFueSA9IHt9O1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlbZWxlbWVudF0gPSBudWxsO1xuICAgICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OmFueSkgPT4ge1xuICAgICAgICAgICAgaWYoT2JqZWN0LmtleXMoZWxlbWVudCkuaW5jbHVkZXMoa2V5KSl7XG4gICAgICAgICAgICAgIGZpbHRPYmpzW2tleV0ucHVzaChlbGVtZW50W2tleV0pXG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0obmV3IFNldChmaWx0T2Jqc1trZXldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgICAgaWYgKHRhYmxlQm9keSkge1xuICAgICAgICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEodGFibGVCb2R5LnNjcm9sbEhlaWdodCA8IDQ1MClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDE1MDApOyAvLyBXYWl0cyAxMDBtcyBmb3IgcmVuZGVyaW5nXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEJhciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoQmFyID09PSBmYWxzZSA/IHRoaXMuc2VhcmNoQmFyID0gZmFsc2UgOiAgdGhpcy5zZWFyY2hCYXIgPSB0cnVlO1xuICAgIHRoaXMud2l0aENoZWNrQm94ID09PSB1bmRlZmluZWQgfHwgdGhpcy53aXRoQ2hlY2tCb3ggPT09IGZhbHNlID8gdGhpcy53aXRoQ2hlY2tCb3ggPSBmYWxzZSA6ICB0aGlzLndpdGhDaGVja0JveCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdFJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdFJvdyA9IGZhbHNlIDogIHRoaXMuaXNFZGl0Um93ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGVsZXRlUm93ID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0RlbGV0ZVJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRGVsZXRlUm93ID0gZmFsc2UgOiAgdGhpcy5pc0RlbGV0ZVJvdyA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25CdXR0b24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFjdGlvbkJ1dHRvbiA9PT0gZmFsc2UgPyB0aGlzLmFjdGlvbkJ1dHRvbiA9IGZhbHNlIDogIHRoaXMuYWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmlzQnV0dG9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNCdXR0b25zID09PSBmYWxzZSA/IHRoaXMuaXNCdXR0b25zID0gZmFsc2UgOiAgdGhpcy5pc0J1dHRvbnMgPSB0cnVlO1xuICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID09PSB1bmRlZmluZWQgfHwgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IGZhbHNlID8gdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSBmYWxzZSA6ICB0aGlzLmFkZElubGluZVJlY29yZCA9IHRydWU7XG4gIFxuICAgIFxuICAgdGhpcy5oZWFkZXJMYWJlbHMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpO1xuICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk7XG4gICB0aGlzLmZpbHRlckNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmh5cGVyTGluayA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTtcbiAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgdGhpcy5kYXRlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnZGF0ZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk7XG4gICB0aGlzLnRpbWVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICd0aW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTtcbiAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnb2JqZWN0JykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTtcblxuICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZSddIDogMTA7XG4gICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZUluZGV4ID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlSW5kZXgnXSA6IDE7XG4gICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdGlvbj8udG90YWxSZWNvcmRzID8gdGhpcy5wYWdpbmF0aW9uWyd0b3RhbFJlY29yZHMnXSA6IHVuZGVmaW5lZDtcbiAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplT3B0aW9ucyddIDogWyc1JywnMTAnLCAnMjUnLCAnNTAnLCAnMTAwJywgJzIwMCddO1xuICAgdGhpcy5wYWdpbmF0aW9uICA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWdQYWdpbmF0aW9uID0gZmFsc2UgOiAgdGhpcy5jb25maWdQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgIFxuICAgaWYodGhpcy5pc0VkaXRSb3cgJiYgdGhpcy5pc0RlbGV0ZVJvdyl7XG4gICAgdGhpcy5hY3Rpb25Db2x1bW5TaXplID0gMlxuICAgfSBlbHNlIGlmKHRoaXMuaXNFZGl0Um93IHx8IHRoaXMuaXNEZWxldGVSb3cpe1xuICAgIHRoaXMuYWN0aW9uQ29sdW1uU2l6ZSA9IDFcbiAgIH0gZWxzZSB7XG4gICAgdGhpcy5hY3Rpb25Db2x1bW5TaXplID0gMFxuICAgfVxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgaWYoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiAmJiB0aGlzLmRhdGEpe1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKDAsIDEwKTtcbiAgICB9XG4gICAgaWYodGhpcy5maWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmICF0aGlzLmNvbmZpZ1BhZ2luYXRpb24pe1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICBjb25zdCBmaWx0T2JqczphbnkgPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVyQ29sdW1ucy5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlbZWxlbWVudF0gPSBudWxsO1xuICAgICAgICBmaWx0T2Jqc1tlbGVtZW50XSA9IFtdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGtleTphbnkpID0+IHtcbiAgICAgICAgICBpZihPYmplY3Qua2V5cyhlbGVtZW50KS5pbmNsdWRlcyhrZXkpKXtcbiAgICAgICAgICAgIGZpbHRPYmpzW2tleV0ucHVzaChlbGVtZW50W2tleV0pXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlba2V5XSA9KG5ldyBTZXQoZmlsdE9ianNba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlcjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgICAgfSwwKVxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG5cbiAgICBjb25zdCBOeHREYXRhVGFibGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdOeHREYXRhVGFibGUnKSk7XG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnRDb2x1bW47XG4gICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnREaXJlY3Rpb247XG4gICAgaWYgKE54dERhdGFUYWJsZT8uYWRkUmVjb3JkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gTnh0RGF0YVRhYmxlPy5wYWdlU2l6ZVxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBOeHREYXRhVGFibGU/LnBhZ2VJbmRleFxuICAgICAgdmFyIG9iajphbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVsZW1lbnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChlbGVtZW50S2V5OmFueSkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudEtleV09Jyc7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG9iaik7XG4gICAgICBjb25zdCBkYXRhOmFueSA9IHRoaXMuZGF0YTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcblxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0pO1xuICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5lZGl0Um93ID0gdHJ1ZTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdOeHREYXRhVGFibGUnLCBKU09OLnN0cmluZ2lmeSh7IGFkZFJlY29yZDogZmFsc2UsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0pKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgfVxuICAgIGlmKHRoaXMud2l0aENoZWNrQm94ICYmIHRoaXMuYWN0aW9uQnV0dG9uKXtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdib3RoJztcbiAgICB9IGVsc2UgaWYodGhpcy53aXRoQ2hlY2tCb3gpe1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ3NlbGVjdCc7XG4gICAgfSBlbHNlIGlmKHRoaXMuYWN0aW9uQnV0dG9uKXtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdhY3Rpb24nO1xuICAgIH0gXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YWJsZUJvZHkgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWJvZHknKTtcbiAgICAgICAgaWYgKHRhYmxlQm9keSkge1xuICAgICAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKHRhYmxlQm9keS5zY3JvbGxIZWlnaHQgPCA0NTApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxNTAwKTsgLy8gV2FpdHMgMTAwbXMgZm9yIHJlbmRlcmluZ1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDdXN0b20gc29ydCBmdW5jdGlvblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZykge1xuICAgIC8vIERlZmluZSBzb3J0aW5nIHN0YXRlc1xuICAgIGNvbnN0IHNvcnRpbmdTdGF0ZXMgPSBbJ2FzYycsICdkZXNjJywgJ25vbmUnXTtcbiAgICBpZighdGhpcy5jb25maWdQYWdpbmF0aW9uIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpe1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdO1xuICAgICAgLy8gT25seSBzb3J0IGlmIHRoZSBkaXJlY3Rpb24gaXMgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgfHwgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZUEgPSBhW2NvbHVtbl07XG4gICAgICAgICAgbGV0IHZhbHVlQiA9IGJbY29sdW1uXTtcbiAgICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkIG9yIG51bGwgdmFsdWVzXG4gICAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDsgLy8gQm90aCBhcmUgbnVsbC91bmRlZmluZWRcbiAgICAgICAgICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTsgLy8gdmFsdWVBIGlzIG51bGxcbiAgICAgICAgICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTsgLy8gdmFsdWVCIGlzIG51bGxcbiAgICAgICAgICAvLyBIYW5kbGUgZGF0ZSBzb3J0aW5nXG4gICAgICAgICAgaWYgKHRoaXMuaXNEYXRlQ29sdW1uKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUodmFsdWVBKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUodmFsdWVCKTtcbiAgICAgICAgICAgIHZhbHVlQSA9IGRhdGVBLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IGRhdGVCLmdldFRpbWUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbnVtYmVyIHNvcnRpbmdcbiAgICAgICAgICAgIHZhbHVlQSA9IE51bWJlcih2YWx1ZUEpO1xuICAgICAgICAgICAgdmFsdWVCID0gTnVtYmVyKHZhbHVlQik7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN0cmluZyBjb21wYXJpc29uXG4gICAgICAgICAgICB2YWx1ZUEgPSB2YWx1ZUEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IHZhbHVlQi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDb21wYXJlIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQSA+IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB2YWx1ZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gMCB0byBtYWludGFpbiBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiAxfSwgdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9XG4gIH1cblxuICBvblNjcm9sbCh0YWJsZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmlzU2Nyb2xsZWQgPSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPiAwO1xuICAgIGNvbnN0IHRhYmxlQm9keUhlaWdodCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gdGFibGVCb2R5SGVpZ2h0IC0gdGFibGVDb250YWluZXIuc2Nyb2xsVG9wIDw9IHRhYmxlQ29udGFpbmVyLmNsaWVudEhlaWdodCArIDE7XG4gICAgLy9TS1MxNUZFQjI1IEVuc3VyZSBzaGFkb3cgaXMgaGlkZGVuIG9ubHkgaWYgdGFibGUgYm9keSBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIDQwMHB4XG4gICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEoaXNBdEJvdHRvbSB8fCB0YWJsZUJvZHlIZWlnaHQgPCA0NTApO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGxvc2luZyB0aGUgZmlsdGVyIGNvbXBvbmVudCB3aGVuIHRoZSBtb3VzZSBpcyBjbGlja2VkIG91dHNpZGUgdGFibGVcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gZmFsc2U7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHByZXZlbnRzIGFueSBvdGhlciBkZWZhdWx0IGFjdGlvblxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGZpbHRlciBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlciBmaWx0ZXIgaWNvbiBpcyBwYXNzZWQgaW4gJ2ZpbHRlckFycmF5JyBhcnJheVxuICBmaWx0ZXIoZGF0YXM6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyID0gZGF0YXM7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtkYXRhc107XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSAhdGhpcy5zZWFyY2hGaWx0ZXI7XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXT8ubGVuZ3RoID4gMFxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgZW1pdHRpbmcgcGFnciBzaXplIGFuZCBpbmRleCB0byBwYXJlbnQgb24gcGFnaW5hdGluZ1xuICBwYWdlUGFyYW1zKGV2ZW50OmFueSl7XG4gICAgaWYoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKXtcbiAgICAgIHRoaXMucGFnZUluZGV4ID1ldmVudC5wYWdlSW5kZXhcbiAgICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZVxuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKGV2ZW50LnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcihldmVudC5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcihldmVudC5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHtwYWdpbmF0aW9uOntwYWdlU2l6ZTogZXZlbnQucGFnZVNpemUsIHBhZ2VJbmRleDogZXZlbnQucGFnZUluZGV4fSwgdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH19KVxuICAgIH1cbiAgfVxuXG4gLy8gU0tTMTVGRUIyNSBhcHBseSBzZWFyY2ggYmFyIGZpbHRlciB1c2luZyBtYXRcbiBhcHBseUZpbHRlcihldmVudDogRXZlbnQpIHtcbiAgY29uc29sZS5sb2coXCJpIGFtIGluIGFwcGx5IGZpbHRlclwiKTtcbiAgbGV0IGZpbHRlclZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMub3JpZ2luYWxEYXRhXTsgLy8gUmVzZXQgdG8gb3JpZ2luYWwgZGF0YVxuICB9IGVsc2Uge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKGl0ZW0gPT4gXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bY29sdW1uXT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyVmFsdWUpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIHRoaXMucGFnZUluZGV4ID0gMVxuICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgdGhpcy5zRmlsdGVyRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhXG4gIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aFxuICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gfVxuXG4gIC8qKiBTS1MxNUZFQjI1IFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cy4gKi9cbiAgaXNBbGxTZWxlY3RlZCgpIHtcbiAgICAvLyBjaGVjayBpZiBhbGwgcm93cyBhcmUgc2VsZWN0ZWRcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIC8qKiBTS1MxNUZFQjI1IFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cbiAgbWFzdGVyVG9nZ2xlKCkge1xuICAgIC8vIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIHRoZW4gY2xlYXIgdGhhdCBzZWxlY3Rpb25cbiAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCB2YWx1ZSBvbmx5IHRvIHBhcmVudFxuICAgIGlmICh0aGlzLmlzU29tZVNlbGVjdGVkKCkpIHtcbiAgICAgIC8vICAgdG8gcmVtb3ZlIHRoZSBlZGl0Um93LCBpZiB0aGUgY2hlY2tib3ggaXMgdW5jaGVja2VkXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICBpZihlbGVtZW50Py5lZGl0Um93KSBlbGVtZW50LmVkaXRSb3cgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLCBlaXRoZXIgc2VsZWN0IGFsbCBpdGVtcyBvciBjbGVhciB0aGUgc2VsZWN0aW9uXG4gICAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCB2YWx1ZXMgdG8gcGFyZW50XG4gICAgICB0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/IHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdykpO1xuICAgIH1cbiAgfVxuIFxuXG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVja3Mgd2hldGhlciBhbnkgaXRlbXMgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCBpbiB0aGUgdGFibGUuXG4gIGlzU29tZVNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICB9XG5cblxuICAvLyBTS1MxNUZFQjI1IGVtaXQgdGhlIGNoZWNrIGJveCB2YWx1ZXMsIHRoYXQgc2VsZWN0ZWQgc2VwYXJhdGVseVxuICBzZXBhcmF0ZVJvd1NlbGVjdChkYXRhOiBhbnksIGVsZW1lbnQ6YW55KSB7XG4gICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3cgaWQgY2hlY2sgYm94IGlzIHVuY2hlY2tlZCBvbiBzZXBhcmF0ZSByb3dcbiAgICBpZihkYXRhICYmIGVsZW1lbnQ/LmVkaXRSb3cpIHtcbiAgICAgIGVsZW1lbnQuZWRpdFJvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBkYXRhIHRoYXQgdG8gYmUgcGFzc2VkLCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIHRhYmxlQ2xpY2soZGF0YTogYW55KSB7XG4gICAgdGhpcy50YWJsZVJvd0NsaWNrLmVtaXQoZGF0YSk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgUmV0YWluIHRoZSBmaWx0ZXJkYXRhXG4gIGZpbHRlclJldGFpbihmaWx0ZXJrZXk6YW55KXtcbiAgICBpZihPYmplY3Qua2V5cyhmaWx0ZXJrZXkpLmxlbmd0aD09MCl7XG4gICAgICB0aGlzLmRhdGE9IHRoaXMuc0ZpbHRlckRhdGE7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGxldCBpc0RhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgICBmb3IobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKXtcbiAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldICYmIGZpbHRlcmtleVtrZXldLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGlzRGF0YUNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZighaXNEYXRhQ2hlY2tlZCl7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKXtcbiAgICAgICAgICBpZiAoZmlsdGVya2V5W2tleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhLmZpbHRlcigobmFtZTphbnkpPT4gZmlsdGVya2V5W2tleV0/LmluY2x1ZGVzKG5hbWVba2V5XSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YTEgPSBbLi4udGhpcy5kYXRhLC4uLmRhdGFdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKGRhdGExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0byByZW1vdmUgZHVwbGljYXRlIG9iamVjdCBmb3JtIHR3byBhcnJheXNcbiAgcmVtb3ZlRHVwbGljYXRlcyhvYmplY3RzOiBhbnkpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdW5pcXVlT2JqZWN0czogYW55ID0gW107XG4gICAgb2JqZWN0cy5mb3JFYWNoKChvYmo6YW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9iaik7XG4gICAgICAgIGlmICghc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgICAgIHVuaXF1ZU9iamVjdHMucHVzaChvYmopO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuaXF1ZU9iamVjdHM7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBvbiBkZWxldGUgY2xpY2sgc2F2ZSB0aGUgZGF0YSBpbiB2YXJpYWJsZXNcbiAgZGVsZXRlUmVjb3JkKGRhdGE6YW55KXtcbiAgICB0aGlzLmRlbGV0ZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuZGVsZXRlTW9kYWwgPSB0cnVlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWZ0ZXIgY2xpY2tpbmcgeWVzIGluIGRlbGV0ZSBhbGVydCBtb2RhbCwgZW1pdCB0byBwYXJlbnRcbiAgZGVsZXRlUmVjb3JkRGF0YSgpe1xuICAgIHRoaXMub25EZWxldGVEYXRhLmVtaXQoe2RhdGE6dGhpcy5kZWxldGVEYXRhLCBhbGxEYXRhOnRoaXMuZGF0YX0pO1xuICAgIHRoaXMuZGVsZXRlTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSB0byBzYXZlIHRoZSBlZGl0ZWQgZGF0YSBpbiB0YWJsZTtcbiAgc2F2ZUJ1dHRvbigpe1xuICAgIC8vIGVtaXR0aW5nIGFsbCBkYXRhIHdpdGggc2VsZWN0ZWQgZGF0YVxuICAgIHRoaXMuc2F2ZUJ1dHRvbkRhdGEuZW1pdCh7c2VsZWN0ZWREYXRhOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLCBhbGxEYXRhOnRoaXMuZGF0YX0pO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IHBhc3MgdGhlIHJlamVjdGVkIHJlYXNvblxuICBvbkVkaXQoZGF0YTphbnkpe1xuICAgIGlmKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JykgZGF0YS5lZGl0Um93ID0gdHJ1ZTsgLy8gbWFkZSBlZGl0aW5nIHJvdyBhcyB0cnVlIC8vICBzb2x2ZSB1bmRlZmluZWQgZXJyb3Igb24gc3RyaW5nXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KGRhdGEpO1xuICAgIHRoaXMub25FZGl0RGF0YS5lbWl0KHtkYXRhOmRhdGEsIGFsbERhdGE6dGhpcy5kYXRhfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRhYmxlIHRvcCBidXR0b25zIGVtaXRcbiAgY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uOmFueSl7XG4gICAgdGhpcy5idXR0b25FbWl0LmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBvYmplY3RzLiBcbiAgLy8gSW4gJ2VsZW1lbnQnIHdlIHdpbGwgcGFzcyBvYmplY3QgYW5kIGluICdjb2x1bW4nIHdlIHdpbGwgcGFzcyBwYXRoIGFzIHN0cmluZyBlZy5lbXBsb3llZS5maW5hbmNlSW5mb1swXS51YW4gdG8gcmV0aWV2ZSB1YW4gdmFsdWUgXG4gIGdldFZhbHVlKGVsZW1lbnQ6YW55LCBjb2x1bW46c3RyaW5nKXtcbiAgICBjb25zdCBpbml0aWFsRWwgPSBlbGVtZW50OyAvLyBmaXhlZCB0YWJsZSBzZWFyY2ggaXNzdWVcbiAgICBsZXQgZmxkcyA9IGNvbHVtbi5zcGxpdCgnLicpO1xuICAgIGZvcihsZXQgaT0wOyBpPGZsZHMubGVuZ3RoOyBpKyspe1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmKHNwbGl0Rmxkcy5sZW5ndGggPT09IDEpe1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFtmbGRzW2ldXSB8fCAnJyBhcyBhbnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdLnNwbGl0KCddJylbMF0pO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFtzcGxpdEZsZHNbMF1dW2luZGV4XSAgfHwgJycgYXMgYW55OyAvL1RvIHNvbHZlIHVuZGVmaW5lZCBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKGluaXRpYWxFbCwgeyBbY29sdW1uXTogZWxlbWVudCB9KTsgLy8gIEZpeGVkIEV4cHJlc3Npb24gY2hhbmdlZCBpc3N1ZVxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGh5cGVybGlubCBjb2x1bW5zIG9ubHkgZW1pdHRlZFxuICBvbkNsaWNrSHlwZXJsaW5rKGNvbHVtbjphbnksIGVsZW1lbnQ6YW55LCAgaXNIeXBlckxpbms6YW55KXsgXG4gICAgaWYoaXNIeXBlckxpbmspIHRoaXMuaHlwZXJMaW5rRW1pdC5lbWl0KHtjb2x1bW46Y29sdW1uLCBlbGVtZW50OmVsZW1lbnR9KTsgXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGh5cGVybGluayBhY3Rpb24gaXMgcHJlc2VudCBpbiB0aGF0IGNvbHVtblxuICBjaGVja0h5cGVybGlua0NoZWNrKGNvbDphbnkpe1xuICAgIHJldHVybiB0aGlzLmh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbCkgPyB0cnVlOiBmYWxzZTsgICAgXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IG9uIGFkZCByZWNvcmQgaW4gdGFibGUsIHRoZSAnaW5saW5lRWxlbWVudCcgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIHRhYmxlIGRhdGEgXG4gIGFkZFRhYmxlUmVjb3JkKGVsZW1lbnQ6YW55KXtcbiAgICBpZighdGhpcy5jb25maWdQYWdpbmF0aW9uIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpe1xuICAgICAgdmFyIG9iajphbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTphbnkpID0+IHtcbiAgICAgICAgb2JqW2VsZW1lbnRLZXldPScnO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEucHVzaChvYmopO1xuICAgICAgY29uc3QgZGF0YTphbnkgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMgKSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbENvdW50IC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdKTtcbiAgICAgIHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0uZWRpdFJvdyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIDEwKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdOeHREYXRhVGFibGUnLCBKU09OLnN0cmluZ2lmeSh7IGFkZFJlY29yZDogdHJ1ZSwgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9ufSkpO1xuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7cGFnaW5hdGlvbjp7cGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHBhZ2VJbmRleH0sIHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9IH0pXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBBY3Rpb24gYnV0dG9uIGNvbmRpdGlvbmFsbHkgZGlzcGxheWVkIGZ1bmN0aW9uXG4gIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQ6IGFueSwgY29uZGl0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYoY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIGNvbnN0IHsgYW5kQ29uZGl0aW9uTGlzdCwgb3JDb25kaXRpb25MaXN0IH0gPSBjb25kaXRpb25zO1xuICAgICAgLy8gIElmIGFuZENvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayB0aGF0IGFsbCBjb25kaXRpb25zIGFyZSBtZXRcbiAgICAgIGNvbnN0IGlzQW5kQ29uZGl0aW9uTWV0ID0gYW5kQ29uZGl0aW9uTGlzdCA/IGFuZENvbmRpdGlvbkxpc3QuZXZlcnkoKGNvbmQ6IHsgY29uZGl0aW9uOiBzdHJpbmcgfCBhbnlbXTsgY29sdW1uOiBzdHJpbmcgfCBudW1iZXI7IH0pID0+XG4gICAgICAgIGNvbmQuY29uZGl0aW9uLmluY2x1ZGVzKGVsZW1lbnRbY29uZC5jb2x1bW5dKVxuICAgICAgKSA6IHRydWU7IC8vICBJZiBubyBhbmRDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgSWYgb3JDb25kaXRpb25MaXN0IGV4aXN0cywgY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIGNvbnN0IGlzT3JDb25kaXRpb25NZXQgPSBvckNvbmRpdGlvbkxpc3QgPyBvckNvbmRpdGlvbkxpc3Quc29tZSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIG9yQ29uZGl0aW9uTGlzdCwgY29uc2lkZXIgaXQgYXMgYWx3YXlzIG1ldFxuICAgICAgLy8gIFJldHVybiB0cnVlIGlmIHRoZSBBTkQgY29uZGl0aW9uIGlzIG1ldCBhbmQgdGhlIE9SIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIHJldHVybiBpc0FuZENvbmRpdGlvbk1ldCAmJiBpc09yQ29uZGl0aW9uTWV0O1xuICAgIH0gZWxzZXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSAgXG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVjayBpZiB0aGUgY29sdW1uIGlzIGEgZGF0ZSBjb2x1bW5cbiAgaXNEYXRlQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbikgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IENoZWNrIGlmIHRoZSBjb2x1bW4gaXMgYSB0aW1lIGNvbHVtblxuICBpc1RpbWVDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lQ29sdW1ucz8uaW5jbHVkZXMoY29sdW1uKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgY29uZmlnIHNlYXJjaCBmaWx0ZXIgYm94IGZ1bmN0aW9uXG4gIG9uU2VhcmNoKGV2ZW50OmFueSl7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGV2ZW50OyAvLyBVcGRhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3MgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOnRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDpOdW1iZXIodGhpcy5wYWdlSW5kZXgpfSwgdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IElmIHRoZSB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveCBpcyBlbXB0eSwgY2FsbCB0aGUgb25TZWFyY2ggZnVuY3Rpb24gYXV0b21hdGljYWxseVxuICBlbXB0eVNlYXJjaChldmVudDphbnkpeyAgXG4gICAgaWYoIShldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUudHJpbSgpICYmICh0aGlzLnByZXZTZWFyY2ggIT0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZS50cmltKCkpKXtcbiAgICAgIHRoaXMub25TZWFyY2goKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSlcbiAgICB9XG4gICAgdGhpcy5wcmV2U2VhcmNoID0oZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLnRyaW0oKVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBpbmZvU2lkZXNjcmVlbiBlbWl0IFxuICBvblNpZGVOYXZJbmZvQ2xpY2soZGF0YTphbnksY29sOmFueSl7IFxuICAgIHRoaXMuc2lkZU5hdkVtaXQuZW1pdCh7XG4gICAgICBkYXRhLCBjb2wsXG4gICAgICBjb25maWc6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBhY3RpdmUgY29sdW1uIHNlbGVjdFxuICBvbkNvbHVtbkNsaWNrKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVDb2x1bW4gPSBjb2x1bW47XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBjbG9zZSBzZWFyY2ggZmlsdGVyIGJveFxuICBjbG9zZWZpbHRlcigpe1xuICAgIHRoaXMuZmlsdGVyRGF0YUFycmF5WyB0aGlzLnNlbGVjdGVkRmlsdGVyXSA9IFtdXG4gICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHJldGFpblxuICBpc1NlbGVjdGVkKGV2ZW50OmFueSl7XG4gICAgaWYodGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gJiZ0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXS5pbmNsdWRlcyhldmVudCkpe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCBzZWxlY3RcbiAgY2hlY2tlZERhdGEoZXZlbnQ6YW55KSB7XG4gICAgbGV0IHNlbGVjdGVkQXJyYXkgPSBbXVxuICAgIHNlbGVjdGVkQXJyYXkgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA/IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdIDogW11cbiAgICBpZiAoc2VsZWN0ZWRBcnJheSAmJiBzZWxlY3RlZEFycmF5LmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgc2VsZWN0ZWRBcnJheSA9IHNlbGVjdGVkQXJyYXkuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gIT09IGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRBcnJheS5wdXNoKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBzZWxlY3RlZEFycmF5XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBzZWxlY3RlZEFycmF5Py5sZW5ndGggPiAwXG4gICAgaWYodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICE9PSB0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24pe1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOnRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDpOdW1iZXIodGhpcy5wYWdlSW5kZXgpfSwgdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGJ1dHRvbiBjb3VudCB0cmFja1xuICBpbmNyZW1lbnRBY3Rpb25Db2x1bW5TaXplKCk6IHN0cmluZyB7XG4gICAgdGhpcy5hY3Rpb25Db2x1bW5TaXplKys7XG4gICAgdGhpcy5kcm9wZG93bkJ1dHRvblNpemUrK1xuICAgIHJldHVybiAnJzsgLy8gUmV0dXJuaW5nIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZW5kZXJpbmcgaXNzdWVzXG4gIH1cbiAgXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBzbGljZVxuICB1cGRhdGVkRHJvcGRvd25BcnJheVNpemUoKTogc3RyaW5nIHtcbiAgICB0aGlzLmRyb3Bkb3duQWN0aW9uQnV0dG9uID0gICB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheS5zbGljZSh0aGlzLmRyb3Bkb3duQnV0dG9uU2l6ZSk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgY2xvc2VcbiAgcHJpdmF0ZSBhZGRDbGlja091dHNpZGVMaXN0ZW5lcigpIHtcbiAgICBpZiAoIXRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGlmIGNsb3NlIHRoZSBkcm9wZG93biBtZW51IHN0b3AgdGhlIGNsaWNrIGxpc3RlbmVyXG4gIHByaXZhdGUgcmVtb3ZlQ2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25zIG9wZW4gLyBjO29zZVxuICB0b2dnbGVEcm9wZG93bihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gdGhpcy5jdXJyZW50T3BlbkluZGV4ID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgICB0aGlzLmFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgYWN0aW9uIGJ1dHRvbiBldm50IGVtaXRcbiAgYWN0aW9uQnV0dG9uQ2xpY2tlZChldmVudCA6IGFueSl7XG4gICAgdGhpcy5hY3Rpb25CdXR0b25FbWl0LmVtaXQoZXZlbnQpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1sYXlvdXRcIiBbaWRdPVwidGFibGVJZFwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy10b3AnOiAnMXB4JywgJ3dpZHRoJzogdGFibGVXaWR0aH1cIiBbZGlyXT1cImRpcmVjdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRhYmxlLXRpdGxlIGFsaWduLXRleHQtY2VudGVyIHB0LTNcIj5cbiAgICAgICAgICAgIHt7dGl0bGV9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAyMHB4O1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vT2ZSZWNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJ0b3RhbFJlY29yZHMgfHwgdG90YWxDb3VudFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgTm9zIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IHJnYig0MywgODcsIDI0OSk7XCI+e3t0b3RhbFJlY29yZHMgfHwgdG90YWxDb3VudH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEJhclwiIGNsYXNzPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNlYXJjaC1iYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCIgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxLjYyOTUgMjAuMTY2N0wxOS43MjcxIDE4LjMzMzNcIiBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibWVkaXVtLWZvbnRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoQ29uZmlncyA/IGVtcHR5U2VhcmNoKCRldmVudCkgOiBhcHBseUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoQ29uZmlncyA/IHNlYXJjaEJveFZhbHVlIHx8ICcnIDogJydcIiAjaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VhcmNoQ29uZmlncyAmJiBzZWFyY2hCYXJcIiAgY2xhc3M9XCJjb25maWdTZWFyY2hcIiAoY2xpY2spPVwib25TZWFyY2goaW5wdXQudmFsdWUpXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgNUgyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCA4SDE3XCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxIDExLjVDMjEgMTYuNzUgMTYuNzUgMjEgMTEuNSAyMUM2LjI1IDIxIDIgMTYuNzUgMiAxMS41QzIgNi4yNSA2LjI1IDIgMTEuNSAyXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyIDIyTDIwIDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nSWY9XCJpc0J1dHRvbnNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogN3B4OyBnYXA6IDdweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbkFycmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvbiBjbGFzcz1cImRhdGEtdGFibGUtZnNidG5cIiAoYnV0dG9uQ2xpY2tFbWl0KT1cIihidXR0b24udHlwZSA9PT0gJ2dyb3VwJyB8fCBidXR0b24udHlwZSA9PT0gJ2Ryb3Bkb3duJykgPyBjb21tb25CdXR0b25DbGljaygkZXZlbnQpIDogY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwiYnV0dG9uLmNsYXNzXCIgW2J1dHRvblZhbHVlXT1cImJ1dHRvbi5uYW1lXCIgW2J1dHRvbkNvbmZpZ109XCJidXR0b24uYnV0dG9uQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZVwiIGNsYXNzPVwibXMtMiBtZS0yXCIgW2ZjQnRuSWNvbkxlZnRTcmNdPVwiYnV0dG9uLmZjQnRuSWNvbkxlZnRTcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ltYWdlU3ZnXT1cImJ1dHRvbi5pc0ltYWdlU3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1tYXJnaW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiAjdGFibGVDb250YWluZXIgKHNjcm9sbCk9XCJvblNjcm9sbCh0YWJsZUNvbnRhaW5lcilcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPiA8IS0tKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdUZW1wbGF0ZVwiLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFRhYmxlIEhlYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiBbbmdDbGFzc109XCJ7ICdzaGFkb3cnOiBpc1Njcm9sbGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGhlYWQtY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJtYXN0ZXJUb2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgdGFibGVIZWFkZXIgaGVhZC1jb2xvclwiIFtjbGFzcy5zdGlja3ktY29sdW1uXT1cImkgPT09IChzdGlja3lDb25kaXRpb24gLSAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLWNvbHVtbl09XCJhY3RpdmVDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKGNvbHVtbik7IHNvcnREYXRhKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZENvbHVtbiA9IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQ29sdW1uID0gbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbkRpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpc1wiIHRpdGxlPVwie3sgaGVhZGVyTGFiZWxzW2Rpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXSB9fVwiPnt7aGVhZGVyTGFiZWxzW2Rpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJmaWx0ZXJDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbilcIiAoY2xpY2spPVwiZmlsdGVyKGNvbHVtbilcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDJweDtcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEyIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC43NSAxLjI1SDAuNzVMNC43NSA1LjcxNzIyVjguODA1NTZMNi43NSA5Ljc1VjUuNzE3MjJMMTAuNzUgMS4yNVpcIiBzdHJva2U9XCIjMjQyNTMzXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFJlZCBkb3QgZm9yIGFjdGl2ZSBmaWx0ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSAqbmdJZj1cImZpbHRlckRhdGFBcnJheVtjb2x1bW5dPy5sZW5ndGggPiAwXCIgY3g9XCIxMFwiIGN5PVwiMVwiIHI9XCIyXCIgZmlsbD1cInJlZFwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pbmRpY2F0b3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uXCIgY2xhc3M9XCJzb3J0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ+KGkScgOiBjdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ+KGkycgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhvdmVyZWRDb2x1bW4gPT09IGNvbHVtbiAmJiBjdXJyZW50U29ydENvbHVtbiAhPT0gY29sdW1uXCIgY2xhc3M9XCJzb3J0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hGaWx0ZXIgJiYgY29sdW1uID09PSBzZWxlY3RlZEZpbHRlclwiIGNsYXNzPVwic2VhcmNoLWNvbXBvbmVudCBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmc2VhcmNoXCIgW2NsYXNzLnJlc2l6ZWRdPVwiaXNSZXNpemVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmc2VhcmNoLWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNlYXJjaFN2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMS42Mjk1IDIwLjE2NjdMMTkuNzI3MSAxOC4zMzMzXCIgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtZWRpdW0tZm9udCB3aWR0aC0xMDBcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgY2xhc3M9XCJzZWFyY2hpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSZXNpemVkXCIgKGNsaWNrKT1cImNsb3NlZmlsdGVyKClcIiBjbGFzcz1cImNsb3NlLWljb25cIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS4xNjk5OCAxNC44M0wxNC44MyA5LjE3MDAxXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjgzIDE0LjgzTDkuMTY5OTggOS4xNzAwMVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDIySDE1QzIwIDIyIDIyIDIwIDIyIDE1VjlDMjIgNCAyMCAyIDE1IDJIOUM0IDIgMiA0IDIgOVYxNUMyIDIwIDQgMjIgOSAyMlpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtzdHlsZV09XCInb3ZlcmZsb3cteTogYXV0bydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckFycmF5IHwgc2VhcmNoRmlsdGVyIDogc2VhcmNoVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtYi0zIGNoZWNrYm94ZGl2XCIgc3R5bGU9XCJnYXA6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGRhdGEpXCIgW3ZhbHVlXT1cImRhdGFcIiBbaWRdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGVja2VkRGF0YShkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGl1bS1mb250IG1zLTIgbGFiZWwtZGF0YVwiPnt7ZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCIgPjwvZGl2PiA8IS0tU0tTMTVGRUIyNSBhcHBSb3dSZXNpemVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEFjdGlvbiBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCBoZWFkLWNvbG9yIGFjdGlvbkNvbCBzdGlja3ktY29sdW1uXCIgc3R5bGU9XCJwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbkNvbHVtSGVhZGVyfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgQm9keSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBkYXRhU291cmNlLmRhdGE7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInRhYmxlLXJvd1wiIChjbGljayk9XCJ0YWJsZUNsaWNrKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cInRhYmxlLWNlbGwgc3RpY2t5LWNvbHVtbiBib2R5LWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VwYXJhdGVSb3dTZWxlY3Qoc2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KSwgZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGVsZW1lbnQuaXNQYXlQcm9jZXNzZWQgPT09IHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERhdGEgQ2VsbHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zIGVsbGlwc2lzXCIgY2xhc3M9XCJ0YWJsZS1jZWxsIGJvZHktY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgY29sdW1uICE9PSAnYWN0aXZlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNpemUtMTMge3tjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikgPyAnIGh5cGVyLWxpbmsgY2xpY2thYmxlICcgOiAnJ319IGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoeXBlckxpbmtDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLGVsZW1lbnQsIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGF0ZUNvbHVtbihjb2x1bW4pOyBlbHNlIGNoZWNrVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tUaW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGltZUNvbHVtbihjb2x1bW4pOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgdGltZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByaWdodG5hdiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JqZWN0Q29sdW1ucz8uaW5jbHVkZXMoY29sdW1uKVwiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDMzIDExLjgzMzRDMi43Nzg2NiAxMS44MzM0IDAuMTY2OTkyIDkuMjIxNzEgMC4xNjY5OTIgNi4wMDAwOEMwLjE2Njk5MiAyLjc3ODQyIDIuNzc4NjYgMC4xNjY3NDggNi4wMDAzMyAwLjE2Njc0OEM5LjIyMTk2IDAuMTY2NzQ4IDExLjgzMzcgMi43Nzg0MiAxMS44MzM3IDYuMDAwMDhDMTEuODMzNyA5LjIyMTcxIDkuMjIxOTYgMTEuODMzNCA2LjAwMDMzIDExLjgzMzRaTTUuNDE2OTkgNS40MTY3NVY4LjkxNjc1SDYuNTgzNjZWNS40MTY3NUg1LjQxNjk5Wk01LjQxNjk5IDMuMDgzNDFWNC4yNTAwOEg2LjU4MzY2VjMuMDgzNDFINS40MTY5OVpcIiBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRDb2x1bW4/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbilcIiBjbGFzcz1cImZvbnQtc2l6ZS0xM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGF0ZUNvbHVtbihjb2x1bW4pOyBlbHNlIGNoZWNrVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tUaW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RpbWVDb2x1bW4oY29sdW1uKTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCB0aW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgcmlnaHRuYXYgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAzMyAxMS44MzM0QzIuNzc4NjYgMTEuODMzNCAwLjE2Njk5MiA5LjIyMTcxIDAuMTY2OTkyIDYuMDAwMDhDMC4xNjY5OTIgMi43Nzg0MiAyLjc3ODY2IDAuMTY2NzQ4IDYuMDAwMzMgMC4xNjY3NDhDOS4yMjE5NiAwLjE2Njc0OCAxMS44MzM3IDIuNzc4NDIgMTEuODMzNyA2LjAwMDA4QzExLjgzMzcgOS4yMjE3MSA5LjIyMTk2IDExLjgzMzQgNi4wMDAzMyAxMS44MzM0Wk01LjQxNjk5IDUuNDE2NzVWOC45MTY3NUg2LjU4MzY2VjUuNDE2NzVINS40MTY5OVpNNS40MTY5OSAzLjA4MzQxVjQuMjUwMDhINi41ODM2NlYzLjA4MzQxSDUuNDE2OTlaXCIgZmlsbD1cIiM0MzQ1NTVcIiBmaWxsLW9wYWNpdHk9XCIwLjVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IGFkZGVkIGlucHV0IGJveCBmb3IgaW5saW5lIGVkaXQgaW5wdXQtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdENvbHVtbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnc3RyaW5nJykgXCIgY2xhc3M9XCJvbi1lZGl0IGQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2VkaXRDb2xFbGVtZW50ICBjbGFzcz1cImxvcC1pbnB1dCB0YWJsZS13aWR0aFwiIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnRbY29sdW1uXVwiIFsobmdNb2RlbCldPVwiZWxlbWVudFtjb2x1bW5dXCIgW3JlYWRPbmx5XT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgSW4gdGFibGUsIGxpa2UgdGV4dCBpbnB1dCwgYWRkZWQgZHJvcCBkb3duIGFuZCB0aW1lIGlucHV0cyBhcyB3ZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uQ2hlY2s6IGNvbHVtbiA6IGVkaXRDb2x1bW4pID09PSAoJ29iamVjdCcpIFwiIGNsYXNzPVwib24tZWRpdCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGV4dCcpIFwiICNlZGl0Q29sRWxlbWVudCAgY2xhc3M9XCJsb3AtaW5wdXQgdGFibGUtd2lkdGhcIiBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIiAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWxlbWVudC5lZGl0Um93ID8gJ0VudGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJlbGVtZW50W2NvbHVtbl1cIiBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiIFtyZWFkT25seV09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGltZScpIFwiIHR5cGU9XCJ0aW1lXCIgIGNsYXNzPVwibG9wLWlucHV0IHRhYmxlLXdpZHRoXCIgIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIOm1tOnNzXCIgWyhuZ01vZGVsKV09XCJlbGVtZW50W2NvbHVtbl1cIiBbZGlzYWJsZWRdPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiAoJy0nIHwgZWRpdENvbHVtblR5cGU6IGNvbHVtbiA6IGVkaXRDb2x1bW4pID09PSAoJ2Ryb3Bkb3duJykgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9XCJkcm9wZG93blwiICpuZ0lmPVwiZWxlbWVudC5lZGl0Um93XCIgIGNsYXNzPVwibG9wLWlucHV0IHRhYmxlLXdpZHRoXCIgIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbZGlzYWJsZWRdPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCIgICpuZ0Zvcj1cImxldCBkYXRhIG9mIFtdIHwgZWRpdENvbHVtbkRyb3Bkb3duOiBjb2x1bW4gOiBlZGl0Q29sdW1uIFwiIFt2YWx1ZV09XCJkYXRhLnZhbHVlIHx8IGRhdGEubmFtZVwiPnt7ZGF0YS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWVsZW1lbnQuZWRpdFJvd1wiICNlZGl0Q29sRWxlbWVudCAgY2xhc3M9XCJsb3AtaW5wdXQgdGFibGUtd2lkdGhcIiBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIiAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWxlbWVudC5lZGl0Um93ID8gJ0VudGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJlbGVtZW50W2NvbHVtbl1cIiBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiIFtyZWFkT25seV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjVBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInRhYmxlLWNlbGwgYWN0aW9uQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uQnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRWRpdCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRSb3dcIiBjbGFzcz1cImVpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJFZGl0IFJlY29yZFwiIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGVkaXQtaWNvblwiIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25FZGl0KGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIiBmaWxsPVwiIzZDNzU3RFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEZWxldGUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWxldGVSb3dcIiBjbGFzcz1cImRpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJEZWxldGUgUmVjb3JkXCIgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNmZmI1YjU7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaWNvblwiIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlZWVkO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlUmVjb3JkKGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS42NjY1IDMuMzEzNjJMNS44MTMxNyAyLjQ0MDI4QzUuOTE5ODQgMS44MDY5NSA1Ljk5OTg0IDEuMzMzNjIgNy4xMjY1IDEuMzMzNjJIOC44NzMxN0M5Ljk5OTg0IDEuMzMzNjIgMTAuMDg2NSAxLjgzMzYyIDEwLjE4NjUgMi40NDY5NUwxMC4zMzMyIDMuMzEzNjJcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjMzMzUgOC4zMzMyNUg5LjY2NjgzXCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIGFjdGlvbkNvbHVtblNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQ29sdW1uU2l6ZSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCIgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmNyZW1lbnRBY3Rpb25Db2x1bW5TaXplKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBidXR0b24uY29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1idXR0b24udG9vbHRpcCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidXR0b24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ob3ZlckJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ib3JkZXJDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlci1yYWRpdXM6IHt7YnV0dG9uLmJvcmRlclJhZGl1c319cHg7ICBib3JkZXI6IDFweCBzb2xpZCB7e2J1dHRvbi5ib3JkZXJDb2xvcn19O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBidXR0b24uaG92ZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IHt7YnV0dG9uLnBhZGRpbmd9fXB4IHt7YnV0dG9uLnBhZGRpbmcgKyAyfX1weDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgYmFja2dyb3VuZC1jb2xvcjoge3tidXR0b24uYmFja2dyb3VuZENvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAjaW1nRWxlbWVudCBbc3JjXT1cImJ1dHRvbi5pY29uU3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaG92ZXJJY29uU3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaWNvblNyY1wiPiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVwZGF0ZWREcm9wZG93bkFycmF5U2l6ZSgpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duQWN0aW9uQnV0dG9uLmxlbmd0aCA+IDBcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGlja2FibGUtaW1nXCIgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IHBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgYm9yZGVyLXJhZGl1czogNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjNmM3NTdkO1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS45OTk5IDI1LjY2NjdDMjMuNjgxOCAyNS42NjY3IDI2LjY2NjYgMjIuNjgxOSAyNi42NjY2IDE5QzI2LjY2NjYgMTUuMzE4MSAyMy42ODE4IDEyLjMzMzQgMTkuOTk5OSAxMi4zMzM0QzE2LjMxOCAxMi4zMzM0IDEzLjMzMzMgMTUuMzE4MSAxMy4zMzMzIDE5QzEzLjMzMzMgMjIuNjgxOSAxNi4zMTggMjUuNjY2NyAxOS45OTk5IDI1LjY2NjdaXCIgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy42NDY3IDE4LjE2TDIwLjAwMDEgMjAuNTA2N0wyMi4zNTM0IDE4LjE2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiICAqbmdJZj1cImN1cnJlbnRPcGVuSW5kZXggPT09IGlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBkcm9wZG93bkFjdGlvbkJ1dHRvblwiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnRuLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJlbGVtZW50LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taWNvbiB7e2J0bi5idXR0b25UeXBlfX0gdG9vbHRpcC1jb250YWluZXJcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1idG4udG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidG4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJidG4uaWNvblNyY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmMtYnRuLXRleHRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj57e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBObyBEYXRhIFJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3Jkcy9kYXRhIGZvdW5kLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFNrZWxldG9uIExvYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwyLDMsNCw1XVwiIGNsYXNzPVwic2tlbGV0b24tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBkaXNwbGF5ZWRDb2x1bW5zXCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUGFnaW5hdGlvbiAtLT5cbiAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5zaGFkb3ctaGlkZGVuXT1cImlzU2hhZG93SGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPCEtLSB0YWJsZSBpbnB1dCBzYXZlIGJ1dHRvbiBjaGFuZ2VzIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggaW5saW5lQWRkIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWRkSWNvbkJvciBjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiYWRkSW5saW5lUmVjb3JkIFwiIChjbGljayk9XCJhZGRUYWJsZVJlY29yZChpbmxpbmVFbGVtZW50KVwiICBtYXRUb29sdGlwPVwiQWRkIFJlY29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibmF2LWljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0XCI+PHBhdGggZD1cIk00NDAtMjgwaDgwdi0xNjBoMTYwdi04MEg1MjB2LTE2MGgtODB2MTYwSDI4MHY4MGgxNjB2MTYwWm00MCAyMDBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWlwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgcmVtb3ZlZCBidXR0b24gZGlzYWJsZSBsb2dpYywgYWRkZWQgYW5vdGhlciBjb25kaXRpb24gZm9yIGJ1dHRvbiBzaG93aW5nLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFNSMDZKQU4yMDI1IGJ1dHRvbiBkaXNhYmxlIGxvZ2ljIGZvciBub3Qgc2VsZWN0IGFueSBlbXBsb3llZS0tPlxuICAgICAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvbiAqbmdJZj1cImVkaXRDb2x1bW4ubGVuZ3RoID4gMCAgfHwgdGFibGVTYXZlQnV0dG9uXCIgYnV0dG9uVHlwZT1cImJ0biBidG4tcHJpbWFyeVwiIFtidXR0b25EaXNhYmxlXT1cInNlbGVjdGlvbj8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMFwiIChidXR0b25DbGlja0VtaXQpPVwic2F2ZUJ1dHRvbigpXCIgYnV0dG9uVmFsdWU9XCJTYXZlXCI+PC9ueHQtYnV0dG9uPiBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bnh0LXBhZ2luYXRpb24gW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBbY29sbGVjdGlvblNpemVdPVwidG90YWxDb3VudFwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIiBbZmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKGV2ZW50KT1cInBhZ2VQYXJhbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXBhZ2luYXRpb24+XG4gICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS1TS1MxNUZFQjI1IGFsZXJ0IG9uIGRlbGV0aW5nIHJlY29yZCAtLT5cbjxkaXYgKm5nSWY9XCJkZWxldGVNb2RhbFwiIGNsYXNzPVwibW9kYWwgbW9kYWwtYmFja2Ryb3Agc2hvdyAgZC1ibG9ja1wiIGlkPVwiZGVsZXRlUmVjb3JkXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cImRlbGV0ZVJlY29yZExhYmVsXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWRlbGV0ZU1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxiIGNsYXNzPVwibW9kYWwtdGl0bGUgZnMtNVwiIGlkPVwiZGVsZXRlUmVjb3JkTGFiZWxcIj5EZWxldGUgUmVjb3JkPC9iPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhlIHJlY29yZCA/XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgIChjbGljayk9XCJkZWxldGVNb2RhbCA9IGZhbHNlXCI+Tm88L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZVJlY29yZERhdGEoKVwiPlllczwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj4iXX0=
|
|
801
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXNDLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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QUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDM0csSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNuSCxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDM0csSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUdwSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdHLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUs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QUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkEwQmEsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNXLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQW9TaUIsZUFBZTtzQkFBMUQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnh0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaEZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi9waXBlL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5waXBlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9kYXRlL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBUaW1lUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvdGltZS90aW1lLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtbkNoZWNrUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtbkNoZWNrL2VkaXQtY29sdW1uLWNoZWNrLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtbkRyb3Bkb3duUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtbkRyb3Bkb3duL2VkaXQtY29sdW1uLWRyb3Bkb3duLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtblR5cGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uVHlwZS9lZGl0LWNvbHVtbi10eXBlLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBcbiAgICBGb3Jtc01vZHVsZSwgXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LCBcbiAgICBOeHRQYWdpbmF0aW9uLCBcbiAgICBTZWFyY2hGaWx0ZXJQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIFRpbWVQaXBlLFxuICAgIEVkaXRDb2x1bW5DaGVja1BpcGUsXG4gICAgRWRpdENvbHVtbkRyb3Bkb3duUGlwZSxcbiAgICBFZGl0Q29sdW1uVHlwZVBpcGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICAgIC8vIFJvd1Jlc2l6ZXJEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0RGF0YXRhYmxlIHtcbiAgQElucHV0KCkgZGF0YSE6IGFueVtdOyAgLy8gIGdldCBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGEgYXJyYXlcbiAgQElucHV0KCkgY29sdW1ucyA6QXJyYXk8YW55PiA9IFtdOyAvLyBDb2x1bW5zIGhhdmUgYSBsYWJlbCwgYSBjb2x1bW4gdHlwZSwgYW5kIGZpbHRlciBkZXRhaWxzLlxuICBASW5wdXQoKSB3aXRoQ2hlY2tCb3g6IGJvb2xlYW47ICAvLyBnZXQgaWYgd2l0aCBvciB3aXRob3V0IGNoZWNrYm94IGluIHRhYmxlXG4gIEBJbnB1dCgpIHNlYXJjaEJhcjogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHNlYXJjaCBiYXIgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGFibGVcbiAgQElucHV0KCkgdGFibGVTYXZlQnV0dG9uID0gZmFsc2U7IC8vIHNhdmUgYnV0dG9uIGZvciBlZGl0aW5nIExPUCBpbiBwYXlyb2xsIHRhYmxlLCAgY2hhbmdlZCBuYW1lIGZyb20gJ3NhdmVMT1AnXG4gIEBJbnB1dCgpIHN0aWNreUNvbHVtbiA9IGZhbHNlOyAvLyBpZiB0aGUgbGFzdCBjb2x1bW4gc2hvdWxkIGJlIHN0aWNreSwgaXQgc2hvdWxkIGJlIHNlbnQgYXMgYm9vbGVhbiB2YWx1ZVxuICBASW5wdXQoKSB0YWJsZVdpZHRoID0gJzEwMCUnOyAvLyB3aWR0aCBvZiB0YWJsZSBjYW4gYmUgYWRqdXN0ZWQgZnJvbSBwYXJlbnQsIGJ5IGRlZmF1bHQgaXQgaXMgMTAwJVxuICBASW5wdXQoKSBhY3Rpb25Db2x1bUhlYWRlciA9ICdBY3Rpb24nOyAgLy8gdG8gY2hhbmdlIHRoZSBoZWFkZXIgZm9yIGFjdGlvbiBjb2x1bW5cbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uOmJvb2xlYW47ICAvL3RvIHNob3cgYnV0dG9uIGNvbHVtIGFzIGFjdGlvblxuICBASW5wdXQoKSB0aXRsZTphbnk7Ly8gdGhlIHRpdGxlIGZvciB0aGUgdGFibGU7XG4gIEBJbnB1dCgpIGlzQnV0dG9uczpib29sZWFuOy8vIGlzIGJ1dHRvbiBwcmVzZW50IGluIHRhYmxlO1xuICBASW5wdXQoKSBidXR0b25BcnJheTphbnk7Ly8gYnV0dG9ucyB0byBiZSBkaXNwbGF5ZWQ7XG4gIEBJbnB1dCgpIHRhYmxlSWQ6YW55OyAvLyBpZCBvZiB0YWJsZVxuICBASW5wdXQoKSBpc0VkaXRSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGVkaXRlZFxuICBASW5wdXQoKSBpc0RlbGV0ZVJvdzogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgZGVsZXRlZFxuICBASW5wdXQoKSBhZGRJbmxpbmVSZWNvcmQgOiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBhZGRlZCBpbmxpbmVcbiAgQElucHV0KCkgc2VhcmNoQ29uZmlnczogYW55OyAvLyBzZWFyY2ggY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInID0gJ2x0cic7IC8vIGRpcmVjdGlvbiBvZiB0YWJsZVxuICBASW5wdXQoKSBwYWdpbmF0aW9uOiBhbnk7IC8vIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uQXJyYXk6IGFueTsgLy8gYWN0aW9uIGJ1dHRvbiBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBtdWx0aXBsZUZpbHRlcjogYW55OyAvLyBpZiBwYWdpbmF0aW9uIHRydWUgdGhlbiB0aGlzIHdpbGwgYmUgdXNlZFxuXG5cbiAgQE91dHB1dCgpIHRhYmxlUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGRhdGFzIHRvIGJlIHBhc3NlZCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBvbkVkaXREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBpZiBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLCB0aGUgZGF0YSBvZiB0aGF0IHJvdyB3aWxsIGJlIHBhc3NlZFxuICBAT3V0cHV0KCkgc2F2ZUJ1dHRvbkRhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGVkaXRlZCByb3dzIGRhdGEgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIG9uRGVsZXRlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgIC8vIHdoZW4gZGVsZXRlIGJ1dHRvbiBjbGlja2VkIHBhc3MgdGhlIGRhdGFcbiAgQE91dHB1dCgpIGJ1dHRvbkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIHRoaXMgd2lsbCBlbWl0IGEgdGFibGUgdG9wIGJ1dHRvbiBjbGljayBldmVudFxuICBAT3V0cHV0KCkgaHlwZXJMaW5rRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaHlwZXIgbGluayBjbGljayBldmVudFxuICBAT3V0cHV0KCkgc2lkZU5hdkVtaXQgPW5ldyBFdmVudEVtaXR0ZXI8e2RhdGE6YW55LGNvbDphbnksIGNvbmZpZzphbnl9PjsgLy8gcmlnaHRuYXYgY29sdW1uIGVtaXRcbiAgQE91dHB1dCgpIGFjdGlvbkJ1dHRvbkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGRhdGFzIHRvIGJlIHBhc3NlZCB3aGVuIHRhYmxlIHJvdyBhY3RpdmUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgQE91dHB1dCgpIE54dFRhYmxlRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgIFxuICAvLyB7XG4gIC8vICAgXCJwYWdpbmF0aW9uXCI6IHsgICAgICAgLy8gNFxuICAvLyAgICAgICBcInBhZ2VTaXplXCI6IDEwLFxuICAvLyAgICAgICBcInBhZ2VJbmRleFwiOiAxMFxuICAvLyAgIH0sXG4gIC8vICAgXCJ0YWJsZVNlYXJjaFwiOiB7ICAgICAgLy8gMVxuICAvLyAgICAgICBcImZpZWxkc1wiIDogW1xuICAvLyAgICAgICAgICAgXCJsaWdodFR5cGVcIixcbiAgLy8gICAgICAgICAgIFwic3lzdGVtXCIsXG4gIC8vICAgICAgICAgICBcInN0YXR1c1wiXG4gIC8vICAgICAgIF0gLFxuICAvLyAgICAgICBcInZhbHVlXCI6ICdyLTAwMScgXG4gIC8vICAgfSwgIFxuICAvLyAgIFwic2VhcmNoRmlsdGVyRGF0YVwiOiB7ICAvLyAyXG4gIC8vICAgICAgIFwibGlnaHRUeXBlXCI6IFtcbiAgLy8gICAgICAgICAgIFwiQUFcIixcbiAgLy8gICAgICAgICAgIFwiQkJcIiBcbiAgLy8gICAgICAgXVxuICAvLyAgIH0sXG4gIC8vICAgXCJzb3J0XCI6IHsgICAgICAgICAgICAgIC8vIDNcbiAgLy8gICAgICAgXCJjb2x1bW5cIjogXCJhc3NldENvZGVcIixcbiAgLy8gICAgICAgXCJkaXJlY3Rpb25cIjogXCJhc2NcIlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjsgXG4gXG4gIHNlbGVjdGlvbjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIHJvd1xuICBzdGlja3lDb25kaXRpb24hOiBudW1iZXI7IC8vIHRvIGdldCB0aGUgc3RpY2t5IGNvbHVtbiBpbmRleFxuICBzZWFyY2hGaWx0ZXIgPSBmYWxzZTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyXG4gIGZpbHRlckFycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGFycmF5XG4gIHNlbGVjdGVkRmlsdGVyOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgZmlsdGVyXG4gIHJlbmRlckNvbHVtbnM6IHN0cmluZyA9ICdkaXNwbGF5ZWRDb2x1bW5zJzsgLy8gdG8gZ2V0IHRoZSByZW5kZXJlZCBjb2x1bW5zXG4gIHBhZ2VTaXplT3B0aW9ucyA6IEFycmF5PGFueT4gIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplIG9wdGlvbnNcbiAgZGF0YVNvdXJjZTphbnk7ICAvLyBmb3IgdGFibGUgZGF0YSBzb3VyY2VcbiAgdG90YWxDb3VudCE6bnVtYmVyIC8vIGNvdW50IG9mIHRvdGFsIHJlY29yZHNcbiAgc2VhcmNoQm94VmFsdWU6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggYm94IHZhbHVlXG4gIHByZXZTZWFyY2g6IGFueTsgLy8gdG8gZ2V0IHRoZSBwcmV2aW91cyBzZWFyY2ggdmFsdWVcbiAgYWN0aXZlQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGFjdGl2ZSBjb2x1bW5cbiAgaXNTY3JvbGxlZCA9IGZhbHNlOyAvLyBCb29sZWFuIGZsYWcgdG8gdHJhY2sgc2Nyb2xsIHN0YXRlXG4gIGlzU2hhZG93SGlkZGVuID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzaGFkb3cgc3RhdGVcbiAgY3VycmVudFNvcnRDb2x1bW46IHN0cmluZyA9ICcnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBjb2x1bW5cbiAgY3VycmVudFNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnID0gJ25vbmUnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb25cbiAgb3JpZ2luYWxEYXRhOiBhbnk7IC8vIFN0b3JlIG9yaWdpbmFsIGRhdGEgZm9yIHNvcnRpbmdcbiAgaG92ZXJlZENvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBob3ZlcmVkIGNvbHVtblxuICBzZWFyY2hUZXh0OiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIHRleHRcbiAgbXVsdGlwbGVGaWx0ZXJBcnJheSA6IGFueTsgLy8gdG8gZ2V0IHRoZSBtdWx0aXBsZSBmaWx0ZXIgYXJyYXlcbiAgZmlsdGVyRGF0YUFycmF5OmFueSA9IHt9IC8vIHRvIGdldCB0aGUgZmlsdGVyIGRhdGEgYXJyYXlcbiAgaXNSZXNpemVkOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciB0YWJsZSBjb2x1bW4gcmVzaXplXG4gIHNGaWx0ZXJEYXRhOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlciBkYXRhXG4gIGhlYWRlckxhYmVsczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGhlYWRlciBsYWJlbHNcbiAgZGlzcGxheWVkQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGRpc3BsYXllZCBjb2x1bW5zXG4gIGZpbHRlckNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBoeXBlckxpbmtDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107IC8vIHRvIGdldCB0aGUgaHlwZXIgbGluayBjb2x1bW5zXG4gIGVkaXRDb2x1bW46IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZWRpdCBjb2x1bW5cbiAgZGF0ZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkYXRlIGNvbHVtbnNcbiAgdGltZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgdGltZSBjb2x1bW5zXG4gIG9iamVjdENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgb2JqZWN0IGNvbHVtbnNcbiAgaW5saW5lRWxlbWVudDphbnkgLy8gZm9yIGFkZCBhIG5ldyByb3cgb24gdGFibGVcbiAgcGFnZVNpemU6IGFueSAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemVcbiAgcGFnZUluZGV4OiBhbnkgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIGluZGV4XG4gIHRvdGFsUmVjb3JkczogbnVtYmVyOyAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHRvdGFsIHJlY29yZHNcbiAgY29uZmlnUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmbGFnIGZvciBjb25maWcgcGFnaW5hdGlvblxuICBkZWxldGVEYXRhOmFueTsgLy8gdG8gZ2V0IHRoZSBkZWxldGUgcm93XG4gIGRlbGV0ZU1vZGFsID0gZmFsc2U7IC8vIGZvciBjb25mb3JtYXRpb24gcG9wdXBcbiAgZHJvcGRvd25BY3Rpb25CdXR0b246IGFueTsgLy8gZm9yIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9uXG4gIGN1cnJlbnRPcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyB0cmFjayB0aGUgY3VycmVudCBvcGVuIGFjdGlvbiBkcm9wZG93biBpY29uIGluZGV4XG4gIGNsaWNrTGlzdGVuZXI6IGFueTsgLy8gYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b24gY2xpY2sgbGlzdGVuZXIgZm9yIGNsb3NlIGEgZHJvcGRvd24gYnV0dG9uXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCl7XG4gICAgY29uc29sZS5sb2coXCJuZ09uQ2hhbmdlcyBpcyBydW5uaW5nXCIpXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGE7XG4gICAgICAvL1NLUzE1RkVCMjUgSW5pdGlhbGl6ZSB0aGlzIGluIHlvdXIgZGF0YSBmZXRjaCBtZXRob2RcbiAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB0aGlzLnNGaWx0ZXJEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemUgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplJ10gOiAxMDtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VJbmRleCddIDogMTtcbiAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0aW9uPy50b3RhbFJlY29yZHMgPyB0aGlzLnBhZ2luYXRpb25bJ3RvdGFsUmVjb3JkcyddIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemVPcHRpb25zJ10gOiBbJzUnLCcxMCcsICcyNScsICc1MCcsICcxMDAnLCAnMjAwJ107XG4gICAgICB0aGlzLnBhZ2luYXRpb24gID09PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSBmYWxzZSA6ICB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gICAgICBpZighdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhKXtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKDAsIDEwKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgICAgfSwxMDApXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgICBpZih0aGlzLndpdGhDaGVja0JveCAmJiB0aGlzLmFjdGlvbkJ1dHRvbil7XG4gICAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdib3RoJztcbiAgICAgIH0gZWxzZSBpZih0aGlzLndpdGhDaGVja0JveCl7XG4gICAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdzZWxlY3QnO1xuICAgICAgfSBlbHNlIGlmKHRoaXMuYWN0aW9uQnV0dG9uKXtcbiAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2FjdGlvbic7XG4gICAgICB9ICAgICBcbiAgICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbCkge1xuICAgICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICBpZih0aGlzLmZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29uZmlnUGFnaW5hdGlvbil7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgICBjb25zdCBmaWx0T2JqczphbnkgPSB7fTtcbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2VsZW1lbnRdID0gbnVsbDtcbiAgICAgICAgICBmaWx0T2Jqc1tlbGVtZW50XSA9IFtdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGtleTphbnkpID0+IHtcbiAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKGVsZW1lbnQpLmluY2x1ZGVzKGtleSkpe1xuICAgICAgICAgICAgICBmaWx0T2Jqc1trZXldLnB1c2goZWxlbWVudFtrZXldKVxuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlba2V5XSA9KG5ldyBTZXQoZmlsdE9ianNba2V5XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlcjtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtYm9keScpO1xuICAgICAgICAgIGlmICh0YWJsZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKHRhYmxlQm9keS5zY3JvbGxIZWlnaHQgPCA0NTApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxNTAwKTsgLy8gV2FpdHMgMTAwbXMgZm9yIHJlbmRlcmluZ1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hCYXIgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNlYXJjaEJhciA9PT0gZmFsc2UgPyB0aGlzLnNlYXJjaEJhciA9IGZhbHNlIDogIHRoaXMuc2VhcmNoQmFyID0gdHJ1ZTtcbiAgICB0aGlzLndpdGhDaGVja0JveCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMud2l0aENoZWNrQm94ID09PSBmYWxzZSA/IHRoaXMud2l0aENoZWNrQm94ID0gZmFsc2UgOiAgdGhpcy53aXRoQ2hlY2tCb3ggPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0Um93ID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRSb3cgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRSb3cgPSBmYWxzZSA6ICB0aGlzLmlzRWRpdFJvdyA9IHRydWU7XG4gICAgdGhpcy5pc0RlbGV0ZVJvdyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNEZWxldGVSb3cgPT09IGZhbHNlID8gdGhpcy5pc0RlbGV0ZVJvdyA9IGZhbHNlIDogIHRoaXMuaXNEZWxldGVSb3cgPSB0cnVlO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25CdXR0b24gPT09IGZhbHNlID8gdGhpcy5hY3Rpb25CdXR0b24gPSBmYWxzZSA6ICB0aGlzLmFjdGlvbkJ1dHRvbiA9IHRydWU7XG4gICAgdGhpcy5pc0J1dHRvbnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzQnV0dG9ucyA9PT0gZmFsc2UgPyB0aGlzLmlzQnV0dG9ucyA9IGZhbHNlIDogIHRoaXMuaXNCdXR0b25zID0gdHJ1ZTtcbiAgICB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYWRkSW5saW5lUmVjb3JkID09PSBmYWxzZSA/IHRoaXMuYWRkSW5saW5lUmVjb3JkID0gZmFsc2UgOiAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSB0cnVlO1xuICBcbiAgICBcbiAgIHRoaXMuaGVhZGVyTGFiZWxzID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKTtcbiAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTtcbiAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk7XG4gICB0aGlzLmVkaXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZWRpdCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTtcbiAgIHRoaXMuZGF0ZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgdGhpcy50aW1lQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAndGltZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk7XG4gICB0aGlzLm9iamVjdENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ29iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk7XG5cbiAgIHRoaXMuaW5saW5lRWxlbWVudCA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmRpc3BsYXllZENvbHVtbnMubWFwKGtleSA9PiBba2V5LCBcIlwiXSkpO1xuXG4gICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemUnXSA6IDEwO1xuICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VJbmRleCA/IHRoaXMucGFnaW5hdGlvblsncGFnZUluZGV4J10gOiAxO1xuICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRpb24/LnRvdGFsUmVjb3JkcyA/IHRoaXMucGFnaW5hdGlvblsndG90YWxSZWNvcmRzJ10gOiB1bmRlZmluZWQ7XG4gICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZU9wdGlvbnMnXSA6IFsnNScsJzEwJywgJzI1JywgJzUwJywgJzEwMCcsICcyMDAnXTtcbiAgIHRoaXMucGFnaW5hdGlvbiAgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9IGZhbHNlIDogIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9IHRydWU7XG4gICBcbiAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSAgIHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5LnNsaWNlKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUpO1xuXG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YTtcbiAgICBpZighdGhpcy5jb25maWdQYWdpbmF0aW9uICYmIHRoaXMuZGF0YSl7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoMCwgMTApO1xuICAgIH1cbiAgICBpZih0aGlzLmZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29uZmlnUGFnaW5hdGlvbil7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB7fTtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOmFueSA9IHt9O1xuICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OmFueSkgPT4ge1xuICAgICAgICAgIGlmKE9iamVjdC5rZXlzKGVsZW1lbnQpLmluY2x1ZGVzKGtleSkpe1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKGVsZW1lbnRba2V5XSlcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0obmV3IFNldChmaWx0T2Jqc1trZXldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICB9LDApXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcblxuICAgIGNvbnN0IE54dERhdGFUYWJsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ054dERhdGFUYWJsZScpKTtcbiAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydENvbHVtbjtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydERpcmVjdGlvbjtcbiAgICBpZiAoTnh0RGF0YVRhYmxlPy5hZGRSZWNvcmQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSBOeHREYXRhVGFibGU/LnBhZ2VTaXplXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IE54dERhdGFUYWJsZT8ucGFnZUluZGV4XG4gICAgICB2YXIgb2JqOmFueSA9IHt9O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6YW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XT0nJztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6YW55ID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgaWYodGhpcy53aXRoQ2hlY2tCb3ggJiYgdGhpcy5hY3Rpb25CdXR0b24pe1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2JvdGgnO1xuICAgIH0gZWxzZSBpZih0aGlzLndpdGhDaGVja0JveCl7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnc2VsZWN0JztcbiAgICB9IGVsc2UgaWYodGhpcy5hY3Rpb25CdXR0b24pe1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2FjdGlvbic7XG4gICAgfSBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtYm9keScpO1xuICAgICAgICBpZiAodGFibGVCb2R5KSB7XG4gICAgICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEodGFibGVCb2R5LnNjcm9sbEhlaWdodCA8IDQ1MClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDE1MDApOyAvLyBXYWl0cyAxMDBtcyBmb3IgcmVuZGVyaW5nXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IEN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gIHNvcnREYXRhKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgLy8gRGVmaW5lIHNvcnRpbmcgc3RhdGVzXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlcyA9IFsnYXNjJywgJ2Rlc2MnLCAnbm9uZSddO1xuICAgIGlmKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcyl7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc29ydGluZyBzdGF0ZVxuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyB8fCB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlQSA9IGFbY29sdW1uXTtcbiAgICAgICAgICBsZXQgdmFsdWVCID0gYltjb2x1bW5dO1xuICAgICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXNcbiAgICAgICAgICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIHJldHVybiAwOyAvLyBCb3RoIGFyZSBudWxsL3VuZGVmaW5lZFxuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xOyAvLyB2YWx1ZUEgaXMgbnVsbFxuICAgICAgICAgIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxOyAvLyB2YWx1ZUIgaXMgbnVsbFxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIHNvcnRpbmdcbiAgICAgICAgICBpZiAodGhpcy5pc0RhdGVDb2x1bW4oY29sdW1uKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZSh2YWx1ZUEpO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZSh2YWx1ZUIpO1xuICAgICAgICAgICAgdmFsdWVBID0gZGF0ZUEuZ2V0VGltZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gZGF0ZUIuZ2V0VGltZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBudW1iZXIgc29ydGluZ1xuICAgICAgICAgICAgdmFsdWVBID0gTnVtYmVyKHZhbHVlQSk7XG4gICAgICAgICAgICB2YWx1ZUIgPSBOdW1iZXIodmFsdWVCKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgc3RyaW5nIGNvbXBhcmlzb25cbiAgICAgICAgICAgIHZhbHVlQSA9IHZhbHVlQS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gdmFsdWVCLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWVzXG4gICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVBID4gdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHZhbHVlcyBhcmUgdGhlIHNhbWUsIHJldHVybiAwIHRvIG1haW50YWluIG9yaWdpbmFsIG9yZGVyXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc29ydGluZyBzdGF0ZVxuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4fSwgdGFibGVTZWFyY2g6eyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucyAsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSB9KVxuICAgIH1cbiAgfVxuXG4gIG9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA+IDA7XG4gICAgY29uc3QgdGFibGVCb2R5SGVpZ2h0ID0gdGFibGVDb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IGlzQXRCb3R0b20gPSB0YWJsZUJvZHlIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPD0gdGFibGVDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICAvL1NLUzE1RkVCMjUgRW5zdXJlIHNoYWRvdyBpcyBoaWRkZW4gb25seSBpZiB0YWJsZSBib2R5IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNDAwcHhcbiAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gIShpc0F0Qm90dG9tIHx8IHRhYmxlQm9keUhlaWdodCA8IDQ1MCk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgbG9zaW5nIHRoZSBmaWx0ZXIgY29tcG9uZW50IHdoZW4gdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3V0c2lkZSB0YWJsZVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIG9uRG9jdW1lbnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSBmYWxzZTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudHMgYW55IG90aGVyIGRlZmF1bHQgYWN0aW9uXG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZmlsdGVyIGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyIGZpbHRlciBpY29uIGlzIHBhc3NlZCBpbiAnZmlsdGVyQXJyYXknIGFycmF5XG4gIGZpbHRlcihkYXRhczogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIgPSBkYXRhcztcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2RhdGFzXTtcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9ICF0aGlzLnNlYXJjaEZpbHRlcjtcbiAgICB0aGlzLmlzUmVzaXplZCA9IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdPy5sZW5ndGggPiAwXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBlbWl0dGluZyBwYWdyIHNpemUgYW5kIGluZGV4IHRvIHBhcmVudCBvbiBwYWdpbmF0aW5nXG4gIHBhZ2VQYXJhbXMoZXZlbnQ6YW55KXtcbiAgICB0aGlzLnBhZ2VJbmRleCA9ZXZlbnQucGFnZUluZGV4XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplXG4gICAgaWYoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKXtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcihldmVudC5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIoZXZlbnQucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIoZXZlbnQucGFnZVNpemUpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7cGFnaW5hdGlvbjp7cGFnZVNpemU6IGV2ZW50LnBhZ2VTaXplLCBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zICwgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWV9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9fSlcbiAgICB9XG4gIH1cblxuIC8vIFNLUzE1RkVCMjUgYXBwbHkgc2VhcmNoIGJhciBmaWx0ZXIgdXNpbmcgbWF0XG4gYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gIGxldCBmaWx0ZXJWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gIGZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghZmlsdGVyVmFsdWUpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07IC8vIFJlc2V0IHRvIG9yaWdpbmFsIGRhdGFcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+IFxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoY29sdW1uID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gIHRoaXMuc0ZpbHRlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIHRoaXMuZmlsdGVyUmV0YWluKHRoaXMuZmlsdGVyRGF0YUFycmF5KVxuIH1cblxuICAvKiogU0tTMTVGRUIyNSBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgLy8gY2hlY2sgaWYgYWxsIHJvd3MgYXJlIHNlbGVjdGVkXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICAvKiogU0tTMTVGRUIyNSBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIG1hc3RlclRvZ2dsZSgpIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiB0aGVuIGNsZWFyIHRoYXQgc2VsZWN0aW9uXG4gICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWUgb25seSB0byBwYXJlbnRcbiAgICBpZiAodGhpcy5pc1NvbWVTZWxlY3RlZCgpKSB7XG4gICAgICAvLyAgIHRvIHJlbW92ZSB0aGUgZWRpdFJvdywgaWYgdGhlIGNoZWNrYm94IGlzIHVuY2hlY2tlZFxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgICAgaWYoZWxlbWVudD8uZWRpdFJvdykgZWxlbWVudC5lZGl0Um93ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZCwgZWl0aGVyIHNlbGVjdCBhbGwgaXRlbXMgb3IgY2xlYXIgdGhlIHNlbGVjdGlvblxuICAgICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWVzIHRvIHBhcmVudFxuICAgICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgPyB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDogdGhpcy5kYXRhU291cmNlLmRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICB9XG4gIH1cbiBcblxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2tzIHdoZXRoZXIgYW55IGl0ZW1zIGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIHRhYmxlLlxuICBpc1NvbWVTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG5cbiAgLy8gU0tTMTVGRUIyNSBlbWl0IHRoZSBjaGVjayBib3ggdmFsdWVzLCB0aGF0IHNlbGVjdGVkIHNlcGFyYXRlbHlcbiAgc2VwYXJhdGVSb3dTZWxlY3QoZGF0YTogYW55LCBlbGVtZW50OmFueSkge1xuICAgIC8vICAgdG8gcmVtb3ZlIHRoZSBlZGl0Um93IGlkIGNoZWNrIGJveCBpcyB1bmNoZWNrZWQgb24gc2VwYXJhdGUgcm93XG4gICAgaWYoZGF0YSAmJiBlbGVtZW50Py5lZGl0Um93KSB7XG4gICAgICBlbGVtZW50LmVkaXRSb3cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZGF0YSB0aGF0IHRvIGJlIHBhc3NlZCwgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICB0YWJsZUNsaWNrKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGFibGVSb3dDbGljay5lbWl0KGRhdGEpO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IFJldGFpbiB0aGUgZmlsdGVyZGF0YVxuICBmaWx0ZXJSZXRhaW4oZmlsdGVya2V5OmFueSl7XG4gICAgaWYoT2JqZWN0LmtleXMoZmlsdGVya2V5KS5sZW5ndGg9PTApe1xuICAgICAgdGhpcy5kYXRhPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICBsZXQgaXNEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgZm9yKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSl7XG4gICAgICAgIGlmIChmaWx0ZXJrZXlba2V5XSAmJiBmaWx0ZXJrZXlba2V5XS5sZW5ndGggPiAwKXtcbiAgICAgICAgICBpc0RhdGFDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoIWlzRGF0YUNoZWNrZWQpe1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSl7XG4gICAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zRmlsdGVyRGF0YS5maWx0ZXIoKG5hbWU6YW55KT0+IGZpbHRlcmtleVtrZXldPy5pbmNsdWRlcyhuYW1lW2tleV0pKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGExID0gWy4uLnRoaXMuZGF0YSwuLi5kYXRhXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucmVtb3ZlRHVwbGljYXRlcyhkYXRhMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBvYmplY3QgZm9ybSB0d28gYXJyYXlzXG4gIHJlbW92ZUR1cGxpY2F0ZXMob2JqZWN0czogYW55KSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHVuaXF1ZU9iamVjdHM6IGFueSA9IFtdO1xuICAgIG9iamVjdHMuZm9yRWFjaCgob2JqOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICBpZiAoIXNlZW4uaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgICAgICB1bmlxdWVPYmplY3RzLnB1c2gob2JqKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1bmlxdWVPYmplY3RzO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgb24gZGVsZXRlIGNsaWNrIHNhdmUgdGhlIGRhdGEgaW4gdmFyaWFibGVzXG4gIGRlbGV0ZVJlY29yZChkYXRhOmFueSl7XG4gICAgdGhpcy5kZWxldGVEYXRhID0gZGF0YTtcbiAgICB0aGlzLmRlbGV0ZU1vZGFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFmdGVyIGNsaWNraW5nIHllcyBpbiBkZWxldGUgYWxlcnQgbW9kYWwsIGVtaXQgdG8gcGFyZW50XG4gIGRlbGV0ZVJlY29yZERhdGEoKXtcbiAgICB0aGlzLm9uRGVsZXRlRGF0YS5lbWl0KHtkYXRhOnRoaXMuZGVsZXRlRGF0YSwgYWxsRGF0YTp0aGlzLmRhdGF9KTtcbiAgICB0aGlzLmRlbGV0ZU1vZGFsID0gZmFsc2U7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgdG8gc2F2ZSB0aGUgZWRpdGVkIGRhdGEgaW4gdGFibGU7XG4gIHNhdmVCdXR0b24oKXtcbiAgICAvLyBlbWl0dGluZyBhbGwgZGF0YSB3aXRoIHNlbGVjdGVkIGRhdGFcbiAgICB0aGlzLnNhdmVCdXR0b25EYXRhLmVtaXQoe3NlbGVjdGVkRGF0YTp0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgYWxsRGF0YTp0aGlzLmRhdGF9KTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBwYXNzIHRoZSByZWplY3RlZCByZWFzb25cbiAgb25FZGl0KGRhdGE6YW55KXtcbiAgICBpZih0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIGRhdGEuZWRpdFJvdyA9IHRydWU7IC8vIG1hZGUgZWRpdGluZyByb3cgYXMgdHJ1ZSAvLyAgc29sdmUgdW5kZWZpbmVkIGVycm9yIG9uIHN0cmluZ1xuICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdChkYXRhKTtcbiAgICB0aGlzLm9uRWRpdERhdGEuZW1pdCh7ZGF0YTpkYXRhLCBhbGxEYXRhOnRoaXMuZGF0YX0pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0YWJsZSB0b3AgYnV0dG9ucyBlbWl0XG4gIGNvbW1vbkJ1dHRvbkNsaWNrKGJ1dHRvbjphbnkpe1xuICAgIHRoaXMuYnV0dG9uRW1pdC5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSBkYXRhIGZyb20gb2JqZWN0cy4gXG4gIC8vIEluICdlbGVtZW50JyB3ZSB3aWxsIHBhc3Mgb2JqZWN0IGFuZCBpbiAnY29sdW1uJyB3ZSB3aWxsIHBhc3MgcGF0aCBhcyBzdHJpbmcgZWcuZW1wbG95ZWUuZmluYW5jZUluZm9bMF0udWFuIHRvIHJldGlldmUgdWFuIHZhbHVlIFxuICBnZXRWYWx1ZShlbGVtZW50OmFueSwgY29sdW1uOnN0cmluZyl7XG4gICAgY29uc3QgaW5pdGlhbEVsID0gZWxlbWVudDsgLy8gZml4ZWQgdGFibGUgc2VhcmNoIGlzc3VlXG4gICAgbGV0IGZsZHMgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgICBmb3IobGV0IGk9MDsgaTxmbGRzLmxlbmd0aDsgaSsrKXtcbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZihzcGxpdEZsZHMubGVuZ3RoID09PSAxKXtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbZmxkc1tpXV0gfHwgJycgYXMgYW55O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbc3BsaXRGbGRzWzBdXVtpbmRleF0gIHx8ICcnIGFzIGFueTsgLy9UbyBzb2x2ZSB1bmRlZmluZWQgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihpbml0aWFsRWwsIHsgW2NvbHVtbl06IGVsZW1lbnQgfSk7IC8vICBGaXhlZCBFeHByZXNzaW9uIGNoYW5nZWQgaXNzdWVcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBoeXBlcmxpbmwgY29sdW1ucyBvbmx5IGVtaXR0ZWRcbiAgb25DbGlja0h5cGVybGluayhjb2x1bW46YW55LCBlbGVtZW50OmFueSwgIGlzSHlwZXJMaW5rOmFueSl7IFxuICAgIGlmKGlzSHlwZXJMaW5rKSB0aGlzLmh5cGVyTGlua0VtaXQuZW1pdCh7Y29sdW1uOmNvbHVtbiwgZWxlbWVudDplbGVtZW50fSk7IFxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0byBjaGVjayB3aGV0aGVyIHRoZSBoeXBlcmxpbmsgYWN0aW9uIGlzIHByZXNlbnQgaW4gdGhhdCBjb2x1bW5cbiAgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2w6YW55KXtcbiAgICByZXR1cm4gdGhpcy5oeXBlckxpbmtDb2x1bW5zPy5pbmNsdWRlcyhjb2wpID8gdHJ1ZTogZmFsc2U7ICAgIFxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBvbiBhZGQgcmVjb3JkIGluIHRhYmxlLCB0aGUgJ2lubGluZUVsZW1lbnQnIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSB0YWJsZSBkYXRhIFxuICBhZGRUYWJsZVJlY29yZChlbGVtZW50OmFueSl7XG4gICAgaWYoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKXtcbiAgICAgIHZhciBvYmo6YW55ID0ge307XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6YW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XT0nJztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6YW55ID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuXG4gICAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zICkge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyAxMCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IHRydWUsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbn0pKTtcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXh9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucyAsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQWN0aW9uIGJ1dHRvbiBjb25kaXRpb25hbGx5IGRpc3BsYXllZCBmdW5jdGlvblxuICBpc0NvbmRpdGlvbk1ldChlbGVtZW50OiBhbnksIGNvbmRpdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmKGNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCl7XG4gICAgICBjb25zdCB7IGFuZENvbmRpdGlvbkxpc3QsIG9yQ29uZGl0aW9uTGlzdCB9ID0gY29uZGl0aW9ucztcbiAgICAgIC8vICBJZiBhbmRDb25kaXRpb25MaXN0IGV4aXN0cywgY2hlY2sgdGhhdCBhbGwgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgICBjb25zdCBpc0FuZENvbmRpdGlvbk1ldCA9IGFuZENvbmRpdGlvbkxpc3QgPyBhbmRDb25kaXRpb25MaXN0LmV2ZXJ5KChjb25kOiB7IGNvbmRpdGlvbjogc3RyaW5nIHwgYW55W107IGNvbHVtbjogc3RyaW5nIHwgbnVtYmVyOyB9KSA9PlxuICAgICAgICBjb25kLmNvbmRpdGlvbi5pbmNsdWRlcyhlbGVtZW50W2NvbmQuY29sdW1uXSlcbiAgICAgICkgOiB0cnVlOyAvLyAgSWYgbm8gYW5kQ29uZGl0aW9uTGlzdCwgY29uc2lkZXIgaXQgYXMgYWx3YXlzIG1ldFxuICAgICAgLy8gIElmIG9yQ29uZGl0aW9uTGlzdCBleGlzdHMsIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBjb25kaXRpb24gaXMgbWV0XG4gICAgICBjb25zdCBpc09yQ29uZGl0aW9uTWV0ID0gb3JDb25kaXRpb25MaXN0ID8gb3JDb25kaXRpb25MaXN0LnNvbWUoKGNvbmQ6IHsgY29uZGl0aW9uOiBzdHJpbmcgfCBhbnlbXTsgY29sdW1uOiBzdHJpbmcgfCBudW1iZXI7IH0pID0+XG4gICAgICAgIGNvbmQuY29uZGl0aW9uLmluY2x1ZGVzKGVsZW1lbnRbY29uZC5jb2x1bW5dKVxuICAgICAgKSA6IHRydWU7IC8vICBJZiBubyBvckNvbmRpdGlvbkxpc3QsIGNvbnNpZGVyIGl0IGFzIGFsd2F5cyBtZXRcbiAgICAgIC8vICBSZXR1cm4gdHJ1ZSBpZiB0aGUgQU5EIGNvbmRpdGlvbiBpcyBtZXQgYW5kIHRoZSBPUiBjb25kaXRpb24gaXMgbWV0XG4gICAgICByZXR1cm4gaXNBbmRDb25kaXRpb25NZXQgJiYgaXNPckNvbmRpdGlvbk1ldDtcbiAgICB9IGVsc2V7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gIFxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBhIGRhdGUgY29sdW1uXG4gIGlzRGF0ZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVjayBpZiB0aGUgY29sdW1uIGlzIGEgdGltZSBjb2x1bW5cbiAgaXNUaW1lQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGltZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbikgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGNvbmZpZyBzZWFyY2ggZmlsdGVyIGJveCBmdW5jdGlvblxuICBvblNlYXJjaChldmVudDphbnkpe1xuICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSBldmVudDsgLy8gVXBkYXRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHtwYWdpbmF0aW9uOntwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6TnVtYmVyKHRoaXMucGFnZUluZGV4KX0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zICwgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWV9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9IH0pXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBJZiB0aGUgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIGNhbGwgdGhlIG9uU2VhcmNoIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHlcbiAgZW1wdHlTZWFyY2goZXZlbnQ6YW55KXsgIFxuICAgIGlmKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLnRyaW0oKSAmJiAodGhpcy5wcmV2U2VhcmNoICE9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUudHJpbSgpKSl7XG4gICAgICB0aGlzLm9uU2VhcmNoKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpXG4gICAgfVxuICAgIHRoaXMucHJldlNlYXJjaCA9KGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZS50cmltKClcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgaW5mb1NpZGVzY3JlZW4gZW1pdCBcbiAgb25TaWRlTmF2SW5mb0NsaWNrKGRhdGE6YW55LGNvbDphbnkpeyBcbiAgICB0aGlzLnNpZGVOYXZFbWl0LmVtaXQoe1xuICAgICAgZGF0YSwgY29sLFxuICAgICAgY29uZmlnOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBmb3IgYWN0aXZlIGNvbHVtbiBzZWxlY3RcbiAgb25Db2x1bW5DbGljayhjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlQ29sdW1uID0gY29sdW1uO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBmb3IgY2xvc2Ugc2VhcmNoIGZpbHRlciBib3hcbiAgY2xvc2VmaWx0ZXIoKXtcbiAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheVsgdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBbXVxuICAgIHRoaXMuaXNSZXNpemVkID0gZmFsc2VcbiAgICBpZighdGhpcy5jb25maWdQYWdpbmF0aW9uIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpe1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiAxfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMgLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZX0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHJldGFpblxuICBpc1NlbGVjdGVkKGV2ZW50OmFueSl7XG4gICAgaWYodGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gJiZ0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXS5pbmNsdWRlcyhldmVudCkpe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCBzZWxlY3RcbiAgY2hlY2tlZERhdGEoZXZlbnQ6YW55KSB7XG4gICAgbGV0IHNlbGVjdGVkQXJyYXkgPSBbXVxuICAgIHNlbGVjdGVkQXJyYXkgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA/IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdIDogW11cbiAgICBpZiAoc2VsZWN0ZWRBcnJheSAmJiBzZWxlY3RlZEFycmF5LmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgc2VsZWN0ZWRBcnJheSA9IHNlbGVjdGVkQXJyYXkuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gIT09IGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRBcnJheS5wdXNoKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBzZWxlY3RlZEFycmF5XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBzZWxlY3RlZEFycmF5Py5sZW5ndGggPiAwXG4gICAgaWYodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICE9PSB0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24pe1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoe3BhZ2luYXRpb246e3BhZ2VTaXplOnRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDpOdW1iZXIodGhpcy5wYWdlSW5kZXgpfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMgLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZX0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBjbG9zZVxuICBwcml2YXRlIGFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCkge1xuICAgIGlmICghdGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgaWYgY2xvc2UgdGhlIGRyb3Bkb3duIG1lbnUgc3RvcCB0aGUgY2xpY2sgbGlzdGVuZXJcbiAgcHJpdmF0ZSByZW1vdmVDbGlja0xpc3RlbmVyKCkge1xuICAgICAgaWYgKHRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgb3BlbiAvIGM7b3NlXG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICAgIHRoaXMuYWRkQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBhY3Rpb24gYnV0dG9uIGV2bnQgZW1pdFxuICBhY3Rpb25CdXR0b25DbGlja2VkKGV2ZW50IDogYW55KXtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbkVtaXQuZW1pdChldmVudClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWxheW91dFwiIFtpZF09XCJ0YWJsZUlkXCIgW25nU3R5bGVdPVwieydwYWRkaW5nLXRvcCc6ICcxcHgnLCAnd2lkdGgnOiB0YWJsZVdpZHRofVwiIFtkaXJdPVwiZGlyZWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdGFibGUtdGl0bGUgYWxpZ24tdGV4dC1jZW50ZXIgcHQtM1wiPlxuICAgICAgICAgICAge3t0aXRsZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9PZlJlY1wiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInRvdGFsUmVjb3JkcyB8fCB0b3RhbENvdW50XCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICBOb3MgPC9wPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogcmdiKDQzLCA4NywgMjQ5KTtcIj57e3RvdGFsUmVjb3JkcyB8fCB0b3RhbENvdW50fX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoQmFyXCIgY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc2VhcmNoLWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS42NDEzIDE5LjI1QzE2LjYzMjIgMTkuMjUgMjAuNjc4MSAxNS4zNTExIDIwLjY3ODEgMTAuNTQxN0MyMC42NzgxIDUuNzMyMTggMTYuNjMyMiAxLjgzMzMzIDExLjY0MTMgMS44MzMzM0M2LjY1MDQgMS44MzMzMyAyLjYwNDQ5IDUuNzMyMTggMi42MDQ0OSAxMC41NDE3QzIuNjA0NDkgMTUuMzUxMSA2LjY1MDQgMTkuMjUgMTEuNjQxMyAxOS4yNVpcIiBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtZWRpdW0tZm9udFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hDb25maWdzID8gZW1wdHlTZWFyY2goJGV2ZW50KSA6IGFwcGx5RmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hDb25maWdzID8gc2VhcmNoQm94VmFsdWUgfHwgJycgOiAnJ1wiICNpbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWFyY2hDb25maWdzICYmIHNlYXJjaEJhclwiICBjbGFzcz1cImNvbmZpZ1NlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaChpbnB1dC52YWx1ZSlcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCA1SDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDhIMTdcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTEuNUMyMSAxNi43NSAxNi43NSAyMSAxMS41IDIxQzYuMjUgMjEgMiAxNi43NSAyIDExLjVDMiA2LjI1IDYuMjUgMiAxMS41IDJcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIgMjJMMjAgMjBcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdJZj1cImlzQnV0dG9uc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA3cHg7IGdhcDogN3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uQXJyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uIGNsYXNzPVwiZGF0YS10YWJsZS1mc2J0blwiIChidXR0b25DbGlja0VtaXQpPVwiKGJ1dHRvbi50eXBlID09PSAnZ3JvdXAnIHx8IGJ1dHRvbi50eXBlID09PSAnZHJvcGRvd24nKSA/IGNvbW1vbkJ1dHRvbkNsaWNrKCRldmVudCkgOiBjb21tb25CdXR0b25DbGljayhidXR0b24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCJidXR0b24uY2xhc3NcIiBbYnV0dG9uVmFsdWVdPVwiYnV0dG9uLm5hbWVcIiBbYnV0dG9uQ29uZmlnXT1cImJ1dHRvbi5idXR0b25Db25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlXCIgY2xhc3M9XCJtcy0yIG1lLTJcIiBbZmNCdG5JY29uTGVmdFNyY109XCJidXR0b24uZmNCdG5JY29uTGVmdFNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSW1hZ2VTdmddPVwiYnV0dG9uLmlzSW1hZ2VTdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLW1hcmdpblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiICN0YWJsZUNvbnRhaW5lciAoc2Nyb2xsKT1cIm9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+IDwhLS0qbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCItLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgSGVhZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiIFtuZ0NsYXNzXT1cInsgJ3NoYWRvdyc6IGlzU2Nyb2xsZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIHN0aWNreS1jb2x1bW4gaGVhZC1jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIm1hc3RlclRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCB0YWJsZUhlYWRlciBoZWFkLWNvbG9yXCIgW2NsYXNzLnN0aWNreS1jb2x1bW5dPVwiaSA9PT0gKHN0aWNreUNvbmRpdGlvbiAtIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtY29sdW1uXT1cImFjdGl2ZUNvbHVtbiA9PT0gY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uQ29sdW1uQ2xpY2soY29sdW1uKTsgc29ydERhdGEoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkQ29sdW1uID0gY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRDb2x1bW4gPSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzXCIgdGl0bGU9XCJ7eyBoZWFkZXJMYWJlbHNbZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbildIH19XCI+e3toZWFkZXJMYWJlbHNbZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbildfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVwiIChjbGljayk9XCJmaWx0ZXIoY29sdW1uKVwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMnB4O1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTIgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjc1IDEuMjVIMC43NUw0Ljc1IDUuNzE3MjJWOC44MDU1Nkw2Ljc1IDkuNzVWNS43MTcyMkwxMC43NSAxLjI1WlwiIHN0cm9rZT1cIiMyNDI1MzNcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVkIGRvdCBmb3IgYWN0aXZlIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlICpuZ0lmPVwiZmlsdGVyRGF0YUFycmF5W2NvbHVtbl0/Lmxlbmd0aCA+IDBcIiBjeD1cIjEwXCIgY3k9XCIxXCIgcj1cIjJcIiBmaWxsPVwicmVkXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW5cIiBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAn4oaRJyA6IGN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnZGVzYycgPyAn4oaTJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaG92ZXJlZENvbHVtbiA9PT0gY29sdW1uICYmIGN1cnJlbnRTb3J0Q29sdW1uICE9PSBjb2x1bW5cIiBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpbHRlciAmJiBjb2x1bW4gPT09IHNlbGVjdGVkRmlsdGVyXCIgY2xhc3M9XCJzZWFyY2gtY29tcG9uZW50IHBvc2l0aW9uLWFic29sdXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2hcIiBbY2xhc3MucmVzaXplZF09XCJpc1Jlc2l6ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoU3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCIgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxLjYyOTUgMjAuMTY2N0wxOS43MjcxIDE4LjMzMzNcIiBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+ICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIm1lZGl1bS1mb250IHdpZHRoLTEwMFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBjbGFzcz1cInNlYXJjaGlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1Jlc2l6ZWRcIiAoY2xpY2spPVwiY2xvc2VmaWx0ZXIoKVwiIGNsYXNzPVwiY2xvc2UtaWNvblwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2OTk4IDE0LjgzTDE0LjgzIDkuMTcwMDFcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQuODMgMTQuODNMOS4xNjk5OCA5LjE3MDAxXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMjJIMTVDMjAgMjIgMjIgMjAgMjIgMTVWOUMyMiA0IDIwIDIgMTUgMkg5QzQgMiAyIDQgMiA5VjE1QzIgMjAgNCAyMiA5IDIyWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250ZW50XCIgW3N0eWxlXT1cIidvdmVyZmxvdy15OiBhdXRvJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyQXJyYXkgfCBzZWFyY2hGaWx0ZXIgOiBzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTMgY2hlY2tib3hkaXZcIiBzdHlsZT1cImdhcDogNXB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZGF0YSlcIiBbdmFsdWVdPVwiZGF0YVwiIFtpZF09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoZWNrZWREYXRhKGRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaXVtLWZvbnQgbXMtMiBsYWJlbC1kYXRhXCI+e3tkYXRhfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIiA+PC9kaXY+IDwhLS1TS1MxNUZFQjI1IGFwcFJvd1Jlc2l6ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsIGhlYWQtY29sb3IgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIiBzdHlsZT1cInBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uQ29sdW1IZWFkZXJ9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBUYWJsZSBCb2R5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFibGUtcm93XCIgKGNsaWNrKT1cInRhYmxlQ2xpY2soZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGJvZHktY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXBhcmF0ZVJvd1NlbGVjdChzZWxlY3Rpb24udG9nZ2xlKGVsZW1lbnQpLCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZWxlbWVudC5pc1BheVByb2Nlc3NlZCA9PT0gdHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDZWxscyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnMgZWxsaXBzaXNcIiBjbGFzcz1cInRhYmxlLWNlbGwgYm9keS1jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiBjb2x1bW4gIT09ICdhY3RpdmUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2l6ZS0xMyB7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCBkYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUaW1lQ29sdW1uKGNvbHVtbik7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCB0aW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJpZ2h0bmF2IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtcy0yXCIgKGNsaWNrKT1cIm9uU2lkZU5hdkluZm9DbGljayhlbGVtZW50LCBjb2x1bW4pXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMzMgMTEuODMzNEMyLjc3ODY2IDExLjgzMzQgMC4xNjY5OTIgOS4yMjE3MSAwLjE2Njk5MiA2LjAwMDA4QzAuMTY2OTkyIDIuNzc4NDIgMi43Nzg2NiAwLjE2Njc0OCA2LjAwMDMzIDAuMTY2NzQ4QzkuMjIxOTYgMC4xNjY3NDggMTEuODMzNyAyLjc3ODQyIDExLjgzMzcgNi4wMDAwOEMxMS44MzM3IDkuMjIxNzEgOS4yMjE5NiAxMS44MzM0IDYuMDAwMzMgMTEuODMzNFpNNS40MTY5OSA1LjQxNjc1VjguOTE2NzVINi41ODM2NlY1LjQxNjc1SDUuNDE2OTlaTTUuNDE2OTkgMy4wODM0MVY0LjI1MDA4SDYuNTgzNjZWMy4wODM0MUg1LjQxNjk5WlwiIGZpbGw9XCIjNDM0NTU1XCIgZmlsbC1vcGFjaXR5PVwiMC41XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdENvbHVtbj8uaW5jbHVkZXMoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKVwiIGNsYXNzPVwiZm9udC1zaXplLTEzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGltZUNvbHVtbihjb2x1bW4pOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IHRpbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByaWdodG5hdiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iamVjdENvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtcy0yXCIgKGNsaWNrKT1cIm9uU2lkZU5hdkluZm9DbGljayhlbGVtZW50LCBjb2x1bW4pXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDMzIDExLjgzMzRDMi43Nzg2NiAxMS44MzM0IDAuMTY2OTkyIDkuMjIxNzEgMC4xNjY5OTIgNi4wMDAwOEMwLjE2Njk5MiAyLjc3ODQyIDIuNzc4NjYgMC4xNjY3NDggNi4wMDAzMyAwLjE2Njc0OEM5LjIyMTk2IDAuMTY2NzQ4IDExLjgzMzcgMi43Nzg0MiAxMS44MzM3IDYuMDAwMDhDMTEuODMzNyA5LjIyMTcxIDkuMjIxOTYgMTEuODMzNCA2LjAwMDMzIDExLjgzMzRaTTUuNDE2OTkgNS40MTY3NVY4LjkxNjc1SDYuNTgzNjZWNS40MTY3NUg1LjQxNjk5Wk01LjQxNjk5IDMuMDgzNDFWNC4yNTAwOEg2LjU4MzY2VjMuMDgzNDFINS40MTY5OVpcIiBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgYWRkZWQgaW5wdXQgYm94IGZvciBpbmxpbmUgZWRpdCBpbnB1dC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0Q29sdW1uLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiAoJy0nIHwgZWRpdENvbHVtbkNoZWNrOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCdzdHJpbmcnKSBcIiBjbGFzcz1cIm9uLWVkaXQgZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZWRpdENvbEVsZW1lbnQgIGNsYXNzPVwibG9wLWlucHV0IHRhYmxlLXdpZHRoXCIgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCIgIFthdHRyLnBsYWNlaG9sZGVyXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdFbnRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudFtjb2x1bW5dXCIgWyhuZ01vZGVsKV09XCJlbGVtZW50W2NvbHVtbl1cIiBbcmVhZE9ubHldPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBJbiB0YWJsZSwgbGlrZSB0ZXh0IGlucHV0LCBhZGRlZCBkcm9wIGRvd24gYW5kIHRpbWUgaW5wdXRzIGFzIHdlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnb2JqZWN0JykgXCIgY2xhc3M9XCJvbi1lZGl0IGQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5UeXBlOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCd0ZXh0JykgXCIgI2VkaXRDb2xFbGVtZW50ICBjbGFzcz1cImxvcC1pbnB1dCB0YWJsZS13aWR0aFwiIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnRbY29sdW1uXVwiIFsobmdNb2RlbCldPVwiZWxlbWVudFtjb2x1bW5dXCIgW3JlYWRPbmx5XT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5UeXBlOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCd0aW1lJykgXCIgdHlwZT1cInRpbWVcIiAgY2xhc3M9XCJsb3AtaW5wdXQgdGFibGUtd2lkdGhcIiAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEg6bW06c3NcIiBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiIFtkaXNhYmxlZF09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnZHJvcGRvd24nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT1cImRyb3Bkb3duXCIgKm5nSWY9XCJlbGVtZW50LmVkaXRSb3dcIiAgY2xhc3M9XCJsb3AtaW5wdXQgdGFibGUtd2lkdGhcIiAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWxlbWVudFtjb2x1bW5dXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtkaXNhYmxlZF09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIiAgKm5nRm9yPVwibGV0IGRhdGEgb2YgW10gfCBlZGl0Q29sdW1uRHJvcGRvd246IGNvbHVtbiA6IGVkaXRDb2x1bW4gXCIgW3ZhbHVlXT1cImRhdGEudmFsdWUgfHwgZGF0YS5uYW1lXCI+e3tkYXRhLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhZWxlbWVudC5lZGl0Um93XCIgI2VkaXRDb2xFbGVtZW50ICBjbGFzcz1cImxvcC1pbnB1dCB0YWJsZS13aWR0aFwiIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnRbY29sdW1uXVwiIFsobmdNb2RlbCldPVwiZWxlbWVudFtjb2x1bW5dXCIgW3JlYWRPbmx5XT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInRhYmxlLWNlbGwgYWN0aW9uQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uQnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRWRpdCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRSb3dcIiBjbGFzcz1cImVpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJFZGl0IFJlY29yZFwiIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGVkaXQtaWNvblwiIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25FZGl0KGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIiBmaWxsPVwiIzZDNzU3RFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEZWxldGUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWxldGVSb3dcIiBjbGFzcz1cImRpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJEZWxldGUgUmVjb3JkXCIgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNmZmI1YjU7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaWNvblwiIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlZWVkO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlUmVjb3JkKGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS42NjY1IDMuMzEzNjJMNS44MTMxNyAyLjQ0MDI4QzUuOTE5ODQgMS44MDY5NSA1Ljk5OTg0IDEuMzMzNjIgNy4xMjY1IDEuMzMzNjJIOC44NzMxN0M5Ljk5OTg0IDEuMzMzNjIgMTAuMDg2NSAxLjgzMzYyIDEwLjE4NjUgMi40NDY5NUwxMC4zMzMyIDMuMzEzNjJcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjMzMzUgOC4zMzMyNUg5LjY2NjgzXCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCIgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnV0dG9uLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09YnV0dG9uLnRvb2x0aXAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBidXR0b24uaG92ZXJCb3JkZXJDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBidXR0b24uYm9yZGVyQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXItcmFkaXVzOiB7e2J1dHRvbi5ib3JkZXJSYWRpdXN9fXB4OyAgYm9yZGVyOiAxcHggc29saWQge3tidXR0b24uYm9yZGVyQ29sb3J9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChtb3VzZWVudGVyKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYnV0dG9uLmhvdmVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBidXR0b24uYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiB7e2J1dHRvbi5wYWRkaW5nfX1weCB7e2J1dHRvbi5wYWRkaW5nICsgMn19cHg7IGJvcmRlci1yYWRpdXM6IHt7YnV0dG9uLmJvcmRlclJhZGl1c319cHg7IGJhY2tncm91bmQtY29sb3I6IHt7YnV0dG9uLmJhY2tncm91bmRDb2xvcn19O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgI2ltZ0VsZW1lbnQgW3NyY109XCJidXR0b24uaWNvblNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImltZ0VsZW1lbnQuc3JjID0gYnV0dG9uLmhvdmVySWNvblNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImltZ0VsZW1lbnQuc3JjID0gYnV0dG9uLmljb25TcmNcIj4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25BY3Rpb25CdXR0b24ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrYWJsZS1pbWdcIiAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKGkpXCIgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgcGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyBib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlcjogMXB4IHNvbGlkICM2Yzc1N2Q7XCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5Ljk5OTkgMjUuNjY2N0MyMy42ODE4IDI1LjY2NjcgMjYuNjY2NiAyMi42ODE5IDI2LjY2NjYgMTlDMjYuNjY2NiAxNS4zMTgxIDIzLjY4MTggMTIuMzMzNCAxOS45OTk5IDEyLjMzMzRDMTYuMzE4IDEyLjMzMzQgMTMuMzMzMyAxNS4zMTgxIDEzLjMzMzMgMTlDMTMuMzMzMyAyMi42ODE5IDE2LjMxOCAyNS42NjY3IDE5Ljk5OTkgMjUuNjY2N1pcIiBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjY0NjcgMTguMTZMMjAuMDAwMSAyMC41MDY3TDIyLjM1MzQgMTguMTZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgW3N0eWxlLnJpZ2h0XT1cIigoYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgLSAoYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zaXplID8/IDApICsgKGlzRWRpdFJvdyA/IDEgOiAwKSArIChpc0RlbGV0ZVJvdyA/IDEgOiAwKSArIChkcm9wZG93bkFjdGlvbkJ1dHRvbi5sZW5ndGggPiAwID8gMSA6IDApKSAqIDEwMCArICclJ1wiICpuZ0lmPVwiY3VycmVudE9wZW5JbmRleCA9PT0gaVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGRyb3Bkb3duQWN0aW9uQnV0dG9uXCI+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBidG4uY29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImVsZW1lbnQuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPWJ0bi50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uYnV0dG9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25CdXR0b25DbGlja2VkKGJ0bilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJ0bi5pY29uU3JjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYy1idG4tdGV4dFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMHB4O1wiPnt7YnRuLm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDBcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzL2RhdGEgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgU2tlbGV0b24gTG9hZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBfIG9mIFsxLDIsMyw0LDVdXCIgY2xhc3M9XCJza2VsZXRvbi1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBfIG9mIGRpc3BsYXllZENvbHVtbnNcIiBjbGFzcz1cInNrZWxldG9uLWNlbGxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBQYWdpbmF0aW9uIC0tPlxuICAgICAgICAgICAgIDxkaXYgW2NsYXNzLnNoYWRvdy1oaWRkZW5dPVwiaXNTaGFkb3dIaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHRhYmxlIGlucHV0IHNhdmUgYnV0dG9uIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpbmxpbmVBZGQganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhZGRJY29uQm9yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJhZGRJbmxpbmVSZWNvcmQgXCIgKGNsaWNrKT1cImFkZFRhYmxlUmVjb3JkKGlubGluZUVsZW1lbnQpXCIgIG1hdFRvb2x0aXA9XCJBZGQgUmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJuYXYtaWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRcIj48cGF0aCBkPVwiTTQ0MC0yODBoODB2LTE2MGgxNjB2LTgwSDUyMHYtMTYwaC04MHYxNjBIMjgwdjgwaDE2MHYxNjBabTQwIDIwMHEtODMgMC0xNTYtMzEuNVQxOTctMTk3cS01NC01NC04NS41LTEyN1Q4MC00ODBxMC04MyAzMS41LTE1NlQxOTctNzYzcTU0LTU0IDEyNy04NS41VDQ4MC04ODBxODMgMCAxNTYgMzEuNVQ3NjMtNzYzcTU0IDU0IDg1LjUgMTI3VDg4MC00ODBxMCA4My0zMS41IDE1NlQ3NjMtMTk3cS01NCA1NC0xMjcgODUuNVQ0ODAtODBabTAtODBxMTM0IDAgMjI3LTkzdDkzLTIyN3EwLTEzNC05My0yMjd0LTIyNy05M3EtMTM0IDAtMjI3IDkzdC05MyAyMjdxMCAxMzQgOTMgMjI3dDIyNyA5M1ptMC0zMjBaXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByZW1vdmVkIGJ1dHRvbiBkaXNhYmxlIGxvZ2ljLCBhZGRlZCBhbm90aGVyIGNvbmRpdGlvbiBmb3IgYnV0dG9uIHNob3dpbmctLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgU1IwNkpBTjIwMjUgYnV0dG9uIGRpc2FibGUgbG9naWMgZm9yIG5vdCBzZWxlY3QgYW55IGVtcGxveWVlLS0+XG4gICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uICpuZ0lmPVwiZWRpdENvbHVtbi5sZW5ndGggPiAwICB8fCB0YWJsZVNhdmVCdXR0b25cIiBidXR0b25UeXBlPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2J1dHRvbkRpc2FibGVdPVwic2VsZWN0aW9uPy5zZWxlY3RlZD8ubGVuZ3RoID09PSAwXCIgKGJ1dHRvbkNsaWNrRW1pdCk9XCJzYXZlQnV0dG9uKClcIiBidXR0b25WYWx1ZT1cIlNhdmVcIj48L254dC1idXR0b24+IFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxueHQtcGFnaW5hdGlvbiBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtjb2xsZWN0aW9uU2l6ZV09XCJ0b3RhbENvdW50XCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cInBhZ2VJbmRleFwiIFtmaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAoZXZlbnQpPVwicGFnZVBhcmFtcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtcGFnaW5hdGlvbj5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzE1RkVCMjUgYWxlcnQgb24gZGVsZXRpbmcgcmVjb3JkIC0tPlxuPGRpdiAqbmdJZj1cImRlbGV0ZU1vZGFsXCIgY2xhc3M9XCJtb2RhbCBtb2RhbC1iYWNrZHJvcCBzaG93ICBkLWJsb2NrXCIgaWQ9XCJkZWxldGVSZWNvcmRcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVsZXRlUmVjb3JkTGFiZWxcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhZGVsZXRlTW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGIgY2xhc3M9XCJtb2RhbC10aXRsZSBmcy01XCIgaWQ9XCJkZWxldGVSZWNvcmRMYWJlbFwiPkRlbGV0ZSBSZWNvcmQ8L2I+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJkZWxldGVNb2RhbCA9IGZhbHNlXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkID9cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiAgKGNsaWNrKT1cImRlbGV0ZU1vZGFsID0gZmFsc2VcIj5ObzwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlUmVjb3JkRGF0YSgpXCI+WWVzPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiJdfQ==
|