fixa-admin 0.0.55 → 0.0.57

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.
@@ -73,6 +73,7 @@ export class GridComponent {
73
73
  this.actionWidth = 100;
74
74
  this.label = null;
75
75
  this.id = null;
76
+ this.requireFilterOrData = false;
76
77
  this.rowModelType = 'serverSide';
77
78
  this.serverSideSort = true;
78
79
  this.serverSideFilter = true;
@@ -198,10 +199,12 @@ export class GridComponent {
198
199
  this._filterBoxItems.push({
199
200
  field: el.field,
200
201
  label: el.label,
201
- value: null,
202
+ value: el.defaultValue != null ? el.defaultValue : null,
202
203
  items: res,
203
204
  type: el.type,
204
205
  position: el.position ? el.position : 'filter',
206
+ colSpan: el.colSpan ? el.colSpan : 1,
207
+ sort: el.sort ? el.sort : 0,
205
208
  nodes
206
209
  });
207
210
  });
@@ -217,10 +220,12 @@ export class GridComponent {
217
220
  this._filterBoxItems.push({
218
221
  field: el.field,
219
222
  label: el.label,
220
- value: null,
223
+ value: el.defaultValue != null ? el.defaultValue : null,
221
224
  items,
222
225
  type: el.type,
223
226
  position: el.position ? el.position : 'filter',
227
+ colSpan: el.colSpan ? el.colSpan : 1,
228
+ sort: el.sort ? el.sort : 0,
224
229
  nodes: []
225
230
  });
226
231
  }
@@ -228,15 +233,23 @@ export class GridComponent {
228
233
  this._filterBoxItems.push({
229
234
  field: el.field,
230
235
  label: el.label,
231
- value: null,
236
+ value: el.defaultValue != null ? el.defaultValue : null,
232
237
  items,
233
238
  type: el.type,
234
239
  position: el.position ? el.position : 'filter',
240
+ colSpan: el.colSpan ? el.colSpan : 1,
241
+ sort: el.sort ? el.sort : 0,
235
242
  nodes: []
236
243
  });
237
244
  }
245
+ this._filterBoxItems.sort((a, b) => {
246
+ return a.sort - b.sort;
247
+ });
238
248
  }
239
249
  });
250
+ setTimeout(() => {
251
+ this.handleFilterLabelValue();
252
+ }, 50);
240
253
  }
241
254
  }
242
255
  get column() {
@@ -513,8 +526,13 @@ export class GridComponent {
513
526
  type: el.type,
514
527
  field: el.field,
515
528
  position: 'filter',
529
+ colSpan: 1,
530
+ sort: 0,
516
531
  nodes: []
517
532
  });
533
+ this._filterBoxItems.sort((a, b) => {
534
+ return a.sort - b.sort;
535
+ });
518
536
  });
519
537
  if (this.actionItems.length > 0) {
520
538
  this.columnDefs.push({
@@ -877,6 +895,16 @@ export class GridComponent {
877
895
  }
878
896
  }
879
897
  });
898
+ if (this.requireFilterOrData != null) {
899
+ if (this.requireFilterOrData && ((gridFilter.data == null || Object.keys(gridFilter.data).length == 0) && (gridFilter.filter.filters == null || gridFilter.filter.filters.length == 0))) {
900
+ this._toast.show('برای نمایش اطلاعات ، انتخاب یک فیلتر الزامی است', 'warning');
901
+ params.success({
902
+ rowData: [],
903
+ rowCount: 0,
904
+ });
905
+ return;
906
+ }
907
+ }
880
908
  this.gridModel = gridFilter;
881
909
  this.fetchData(gridFilter, requestParams).then(data => {
882
910
  params.success({
@@ -903,11 +931,11 @@ export class GridComponent {
903
931
  this.fetchTemplate();
904
932
  }
905
933
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }], target: i0.ɵɵFactoryTarget.Component }); }
906
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", id: "id", isRowSelection: "isRowSelection", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", filterItems: "filterItems", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked", rowSelectionChange: "rowSelectionChange" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' }\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: i9.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i9.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i13.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i13.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i13.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "component", type: i14.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i14.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i15.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i16.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i17.DatePickerComponent, selector: "qeydar-date-picker", inputs: ["rtl", "mode", "isRange", "customLabels", "calendarType", "lang", "cssClass", "footerDescription", "rangeInputLabels", "inputLabel", "placement", "disabled", "isInline", "showSidebar", "showToday", "valueFormat", "disableInputMask", "disabledDates", "disabledDatesFilter", "disabledTimesFilter", "allowEmpty", "readOnly", "readOnlyInput", "minDate", "maxDate", "format"], outputs: ["onFocus", "onBlur", "onChangeValue", "onOpenChange"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
934
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", id: "id", isRowSelection: "isRowSelection", requireFilterOrData: "requireFilterOrData", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", filterItems: "filterItems", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked", rowSelectionChange: "rowSelectionChange" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' || item.colSpan == 2}\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzVirtualHeight=\"320px\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: i9.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i9.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i13.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i13.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i13.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "component", type: i14.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i14.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i15.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i16.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i17.DatePickerComponent, selector: "qeydar-date-picker", inputs: ["rtl", "mode", "isRange", "customLabels", "calendarType", "lang", "cssClass", "footerDescription", "rangeInputLabels", "inputLabel", "placement", "disabled", "isInline", "showSidebar", "showToday", "valueFormat", "disableInputMask", "disabledDates", "disabledDatesFilter", "disabledTimesFilter", "allowEmpty", "readOnly", "readOnlyInput", "minDate", "maxDate", "format"], outputs: ["onFocus", "onBlur", "onChangeValue", "onOpenChange"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
907
935
  }
908
936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, decorators: [{
909
937
  type: Component,
910
- args: [{ selector: 'app-grid', template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' }\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n" }]
938
+ args: [{ selector: 'app-grid', template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' || item.colSpan == 2}\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzVirtualHeight=\"320px\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n" }]
911
939
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }], propDecorators: { onAction: [{
912
940
  type: Output
913
941
  }], onToolbar: [{
@@ -924,6 +952,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
924
952
  type: Input
925
953
  }], isRowSelection: [{
926
954
  type: Input
955
+ }], requireFilterOrData: [{
956
+ type: Input
927
957
  }], rowModelType: [{
928
958
  type: Input
929
959
  }], serverSideSort: [{
@@ -963,4 +993,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
963
993
  }], column: [{
964
994
  type: Input
965
995
  }] } });
966
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQXdKLGNBQWMsRUFBb0csTUFBTSwyQkFBMkIsQ0FBQztBQUNuVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCOUIsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFDWSxVQUE0QixFQUM1QixJQUF1QixFQUN2QixNQUFvQjtRQUZwQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBTXpCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3Qix5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDeEMsa0JBQWEsR0FBd0I7WUFDakMsSUFBSSxFQUFFLFdBQVc7WUFDakIsVUFBVSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLGVBQVUsR0FBVyxpQkFBaUIsQ0FBQztRQUN2Qyxl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QUFFO3NCQURELEtBQUs7Z0JBSUssY0FBYztzQkFEeEIsS0FBSztnQkE2Qk4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBYU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFlTixZQUFZO3NCQURYLEtBQUs7Z0JBaUJLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBeUJLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBaUVOLFNBQVM7c0JBRFIsS0FBSztnQkFJSyxNQUFNO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VsbERvdWJsZUNsaWNrZWRFdmVudCwgQ29sRGVmLCBHcmlkQXBpLCBJRGF0ZUZpbHRlclBhcmFtcywgSVJvd05vZGUsIElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLCBSb3dNb2RlbFR5cGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25JdGVtcywgQ29sdW1uSXRlbXMsIERhdGFzb3VyY2VPdXRwdXRNb2RlbCwgRmlsdGVyQm94SXRlbXNNb2RlbCwgRmlsdGVyQm94TW9kZWwsIEZpbHRlckdyaWRJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsLCBGaWx0ZXJPcGVyYXRvciwgRmlsdGVyVGVtcGxhdGVNb2RlbCwgR3JpZEFjdGlvbk91dHB1dCwgR3JpZElucHV0TW9kZWwsIEdyaWRSZXF1ZXN0UGFyYW0sIFNvcnRNb2RlbCwgVG9vbGJhckl0ZW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NoYXJlZC5tb2RlbCc7XG5pbXBvcnQgeyBKRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBEYXRlRmlsdGVyLCBUaW1lRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXIvaW5kZXguYXBpJztcbmltcG9ydCB7IE56VHJlZU5vZGVPcHRpb25zIH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBkYiB9IGZyb20gJy4uLy4uL2RiJztcbmV4cG9ydCBpbnRlcmZhY2UgSU9seW1waWNEYXRhIHtcbiAgICBhdGhsZXRlOiBzdHJpbmcsXG4gICAgYWdlOiBudW1iZXIsXG4gICAgY291bnRyeTogc3RyaW5nLFxuICAgIHllYXI6IG51bWJlcixcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgc3BvcnQ6IHN0cmluZyxcbiAgICBnb2xkOiBudW1iZXIsXG4gICAgc2lsdmVyOiBudW1iZXIsXG4gICAgYnJvbnplOiBudW1iZXIsXG4gICAgdG90YWw6IG51bWJlclxufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF90b2FzdDogVG9hc3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IHRoaXMuY3JlYXRlU2VydmVyU2lkZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBncmlkQXBpITogR3JpZEFwaTtcbiAgICBwdWJsaWMgaXNTZXJ2ZXJTaWRlR3JvdXA7XG4gICAgcHVibGljIGdldFNlcnZlclNpZGVHcm91cEtleSA9IG51bGw7XG4gICAgcHVibGljIGdyb3VwRGVmYXVsdEV4cGFuZGVkID0gLTE7XG4gICAgcHJpdmF0ZSBfdHJlZUdyb3VwQ29sdW1uOiBzdHJpbmcgPSBudWxsO1xuICAgIF9yb3dTZWxlY3Rpb246IFJvd1NlbGVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIG1vZGU6ICdzaW5nbGVSb3cnLFxuICAgICAgICBjaGVja2JveGVzOiBmYWxzZVxuICAgIH07XG4gICAgZGF0YXNvdXJjZTogSVNlcnZlclNpZGVEYXRhc291cmNlO1xuICAgIHRoZW1lQ2xhc3M6IHN0cmluZyA9IFwiYWctdGhlbWUtcXVhcnR6XCI7XG4gICAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyQm94OiBib29sZWFuID0gZmFsc2U7XG4gICAgX2NvbHVtbjogQ29sdW1uSXRlbXNbXSA9IFtdO1xuICAgIF9maWx0ZXJCb3hJdGVtczogRmlsdGVyQm94TW9kZWxbXSA9IFtdO1xuICAgIGZpbHRlckl0ZW1zVmFsdWVzOiBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsW10gPSBbXTtcbiAgICBmaWx0ZXJUZW1wbGF0ZUl0ZW1zOiBGaWx0ZXJUZW1wbGF0ZU1vZGVsW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyVGVtcGxhdGVCb3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc1Zpc2libGVNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdyaWRNb2RlbDogR3JpZElucHV0TW9kZWwgPSBudWxsO1xuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgICBncmlkSWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBfYXV0b0NvbHVtblNpemU6IFNpemVDb2x1bW5zVG9GaXRHcmlkU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICBhdXRvR3JvdXBDb2x1bW5EZWY6IENvbERlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogXCJcIixcbiAgICAgICAgbWluV2lkdGg6IDI1MCxcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIHN1cHByZXNzQ291bnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclBhcmFtczoge1xuICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgbWluV2lkdGg6IDE1MCxcbiAgICAgICAgZmlsdGVyOiAnYWdUZXh0Q29sdW1uRmlsdGVyJyxcbiAgICAgICAgc3VwcHJlc3NIZWFkZXJNZW51QnV0dG9uOiB0cnVlLFxuICAgICAgICBzdXBwcmVzc0hlYWRlckNvbnRleHRNZW51OiB0cnVlLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZVxuICAgIH07XG5cbiAgICBnZXRSb3dDbGFzcyhwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5ub2RlLnJvd0luZGV4ICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdyb3ctb2RkJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8R3JpZEFjdGlvbk91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvblRvb2xiYXI6IEV2ZW50RW1pdHRlcjxUb29sYmFySXRlbXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbldpZHRoOiBudW1iZXIgPSAxMDA7XG5cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1Jvd1NlbGVjdGlvbih2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ211bHRpUm93JyxcbiAgICAgICAgICAgICAgICBjaGVja2JveGVzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Rpb25DaGFuZ2VkKGU6IFNlbGVjdGlvbkNoYW5nZWRFdmVudCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBlLmFwaS5mb3JFYWNoTm9kZSgoZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGVsLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNlbGVjdEFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICByb3dNb2RlbFR5cGU6IFJvd01vZGVsVHlwZSA9ICdzZXJ2ZXJTaWRlJztcblxuICAgIEBJbnB1dCgpXG4gICAgc2VydmVyU2lkZVNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzZXJ2ZXJTaWRlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaXNUb29sYmFyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcnRsOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnaW5hdGlvblBhZ2VTaXplID0gMjU7XG5cbiAgICBASW5wdXQoKVxuICAgIHBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yOiBudW1iZXJbXSB8IGJvb2xlYW4gPSBbMjVdO1xuXG4gICAgQElucHV0KClcbiAgICBlbmFibGVBZHZhbmNlZEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICB0cmVlTW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaXNMZWFmOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHJvd0RhdGE6IGFueSA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgYXV0b0NvbHVtblNpemUoKTogU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9GaXRQcm92aWRlZFdpZHRoU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvQ29udGVudFN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9Db2x1bW5TaXplO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGF1dG9Db2x1bW5TaXplKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIHRoaXMuX2F1dG9Db2x1bW5TaXplID0geyB0eXBlOiAnZml0Q2VsbENvbnRlbnRzJyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXV0b0NvbHVtblNpemUgPSB7IHR5cGU6ICdmaXRHcmlkV2lkdGgnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dBZHZhbmNlZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtc1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnZWRpdCcsXG4gICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGVuJyxcbiAgICAgICAgICAgIGFsdDogJ9mI24zYsdin24zYtCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdHJhc2gnLFxuICAgICAgICAgICAgYWx0OiAn2K3YsNmBJ1xuICAgICAgICB9XG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgdG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbXNbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ2luc2VydCcsXG4gICAgICAgICAgICBpY29uOiAncGx1cycsXG4gICAgICAgICAgICB0ZXh0OiAn2KfbjNis2KfYryDYsdiv24zZgSDYrNiv24zYrycsXG4gICAgICAgICAgICB0eXBlOiAncHJpbWFyeSdcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgY29kZTogJ3JlZnJlc2gnLFxuICAgICAgICAvLyAgICAgaWNvbjogJ3N5bmMnLFxuICAgICAgICAvLyAgICAgdGV4dDogJ9io2LHZiNiy2LHYs9in2YbbjCcsXG4gICAgICAgIC8vICAgICB0eXBlOiAnZGVmYXVsdCdcbiAgICAgICAgLy8gfVxuICAgIF07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdHJlZUdyb3VwQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlR3JvdXBDb2x1bW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdHJlZUdyb3VwQ29sdW1uKHY6IHN0cmluZykge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5fdHJlZUdyb3VwQ29sdW1uID0gdjtcbiAgICAgICAgICAgIHRoaXMuaXNTZXJ2ZXJTaWRlR3JvdXAgPSBkYXRhSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YUl0ZW0ubGFzdE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5nZXRTZXJ2ZXJTaWRlR3JvdXBLZXkgPSBkYXRhSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLmhlYWRlck5hbWUgPSB2O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGZpbHRlckl0ZW1zKHY6IEZpbHRlckl0ZW1zTW9kZWxbXSkge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHYubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdi5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZWwudHlwZSA9PSAnZW51bScgfHwgZWwudHlwZSA9PSAnc2VsZWN0JyB8fCBlbC50eXBlID09ICd0cmVlLXNlbGVjdCcpICYmIGVsLml0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLml0ZW1zPy4oKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZXM6IE56VHJlZU5vZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAndHJlZS1zZWxlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRUb056VHJlZU5vZGVzID0gKGl0ZW1zOiBGaWx0ZXJCb3hJdGVtc01vZGVsW10pOiBOelRyZWVOb2RlT3B0aW9uc1tdID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU3RyaW5nKGl0ZW0udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVhZjogaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4gPyBjb252ZXJ0VG9OelRyZWVOb2RlcyhpdGVtLmNoaWxkcmVuKSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzID0gY29udmVydFRvTnpUcmVlTm9kZXMocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJ0cnVlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwiZmFsc2VcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZWwucG9zaXRpb24gPyBlbC5wb3NpdGlvbiA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBmZXRjaERhdGE6IChmaWx0ZXJHcmlkOiBHcmlkSW5wdXRNb2RlbCwgcmVxdWVzdFBhcmFtczogR3JpZFJlcXVlc3RQYXJhbSkgPT4gUHJvbWlzZTxEYXRhc291cmNlT3V0cHV0TW9kZWw+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGNvbHVtbih2OiBDb2x1bW5JdGVtc1tdKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW107XG4gICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uID0gdjtcbiAgICAgICAgICAgICAgICB2LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXI6IGFueSA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc29ydGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyUGFyYW1zOiBJRGF0ZUZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bUNvbmRpdGlvbnM6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnWUVTJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6ICgpID0+IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiAnZmFsc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdOTycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBlbC5maWx0ZXJJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChlbC5maWx0ZXJJdGVtc1twcm9wZXJ0eV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1wdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdTZXRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ0RhdGVDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCB8fCBpdGVtLmZpZWxkID09IGVsLnNlYXJjaEZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpbHRlciAhPSB1bmRlZmluZWQgJiYgKGVsLmZpbHRlciA9PSAnZmlsdGVyLWJveCcgfHwgZWwuZmlsdGVyID09ICdub25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zb3J0YWJsZSAhPSB1bmRlZmluZWQgJiYgIWVsLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5maWVsZCAhPSB0aGlzLl90cmVlR3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICdhZy1ib29sZWFuLWNlbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlID8gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHN0cm9rZT1cImdyZWVuXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGNsYXNzPVwiZmVhdGhlciBmZWF0aGVyLWNoZWNrXCI+PHBhdGggZD1cIk0yMCA2TDkgMTdMNCAxMlwiLz48L3N2Zz4nIDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHN0cm9rZT1cInJlZFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci14XCI+PGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIiAvPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCIgLz48L3N2Zz4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2VudW0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHBhcmFtcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogRGF0ZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKRGF0ZVBpcGUoKS50cmFuc2Zvcm0ocGFyYW1zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogVGltZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZS10aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBEYXRlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudmFsdWUudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxpbWcgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgbXQtMVwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHNyYz1cIiR7cGFyYW1zLnZhbHVlfVwiLz5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZi5maWVsZCA9IGVsLmZpZWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uLmZpbHRlcigoZWwpID0+IGVsLmZpbHRlciA9PSAnZmlsdGVyLWJveCcpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuZmlsdGVySXRlbXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsLmZpbHRlckl0ZW1zKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoZWwuZmlsdGVySXRlbXNbaXRlbV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC5maWx0ZXJJdGVtc1tpdGVtXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlbC5maWx0ZXJJdGVtcykuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwidHJ1ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChcImZhbHNlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlczogW11cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLmFjdGlvbldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChwYXJhbXM6IEdyaWRBY3Rpb25PdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbi5lbWl0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VEYXRlUGlja2VyVmFsdWUoZSwgaXRlbTogRmlsdGVyQm94TW9kZWwsIGluZGV4KSB7XG4gICAgICAgIGlmIChpdGVtLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW0udmFsdWVbaW5kZXhdID0gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgICBpdGVtLnZhbHVlW2luZGV4XSA9IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjZWxsRG91YmxlQ2xpY2tlZChlOiBDZWxsRG91YmxlQ2xpY2tlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DbGlja2VkLmVtaXQoeyAuLi5lLmRhdGEsIGNvbElkOiBlLmNvbHVtbi5nZXRDb2xJZCgpIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGl0ZW06IFRvb2xiYXJJdGVtcykge1xuICAgICAgICB0aGlzLm9uVG9vbGJhci5lbWl0KGl0ZW0pO1xuICAgIH1cblxuICAgIHNhdmVGaWx0ZXJHcmlkKCkge1xuICAgICAgICBpZiAodGhpcy5pZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfYtNmG2KfYs9mHINuMINis2K/ZiNmEINmI2KfYsdivINmG2LTYr9mHINin2LPYqicsICdlcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZElkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5nZXQodGhpcy5ncmlkSWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5wdXQoe1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXG4gICAgICAgICAgICAgICAgICAgIGdyaWQ6IHRoaXMuZ3JpZE1vZGVsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9mC2KfZhNioINio2Kcg2YXZiNmB2YLbjNiqINio2LHZiNiy2LHYs9in2YbbjCDYtNivJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGhhbmRsZUNhbmNlbE1vZGFsKCkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZU1vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlT2tNb2RhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVOYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9i52YbZiNin2YYg2YLYp9mE2Kgg2YjYp9ix2K8g2YbYtNiv2Ycg2KfYs9iqJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRJZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5hZGQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICAgICAgZ3JpZDogdGhpcy5ncmlkTW9kZWwsXG4gICAgICAgICAgICB0YWJsZUlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgdXNlck5hbWU6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9mC2KfZhNioINio2Kcg2YXZiNmB2YLbjNiqINiw2K7bjNix2Ycg2LTYrycsICdzdWNjZXNzJyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZldGNoVGVtcGxhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaChwdXJnZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoU2VydmVyU2lkZSh7IHB1cmdlIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdGhpcy5jb2x1bW5EZWZzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdsb2FkaW5nJywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YShudWxsLCBudWxsKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oJ2xvYWRpbmcnLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XG4gICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnY2xpZW50U2lkZScpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKG51bGwsIG51bGwpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmFpbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZHZhbmNlZEZpbHRlcigpIHtcbiAgICAgICAgdGhpcy5lbmFibGVBZHZhbmNlZEZpbHRlciA9ICF0aGlzLmVuYWJsZUFkdmFuY2VkRmlsdGVyO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zaG93QWR2YW5jZWRGaWx0ZXJCdWlsZGVyKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWctaWNvbi1tYXhpbWl6ZScpWzBdIGFzIEhUTUxFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgMTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um91dGVUb05vZGUocm93Tm9kZTogSVJvd05vZGUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghcm93Tm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udGhpcy5nZXRSb3V0ZVRvTm9kZShyb3dOb2RlLnBhcmVudCksXG4gICAgICAgICAgICByb3dOb2RlLmtleSA/IHJvd05vZGUua2V5IDogcm93Tm9kZS5kYXRhLmVtcGxveWVlTmFtZSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICByZWZyZXNoTm9kZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZEFwaS5nZXRSb3dOb2RlKGlkKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldFJvdXRlVG9Ob2RlKHNlbGVjdGVkUm93cyk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoU2VydmVyU2lkZSh7XG4gICAgICAgICAgICBwdXJnZTogdHJ1ZSxcbiAgICAgICAgICAgIHJvdXRlOiByb3V0ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcigpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlRmlsdGVyQm94ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobnVsbCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZWZyZXNoUGFyZW50Tm9kZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZEFwaS5nZXRSb3dOb2RlKGlkKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldFJvdXRlVG9Ob2RlKHNlbGVjdGVkUm93cy5wYXJlbnQpO1xuICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoe1xuICAgICAgICAgICAgcHVyZ2U6IHRydWUsXG4gICAgICAgICAgICByb3V0ZTogcm91dGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmlsdGVyKCkge1xuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckxhYmVsVmFsdWUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMudmlzaWJsZUZpbHRlckJveCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNldFRlbXBsYXRlRmlsdGVyKGl0ZW06IEZpbHRlclRlbXBsYXRlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uZ3JpZC5maWx0ZXIuZmlsdGVycy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGVsLmZpZWxkIHx8IGl0ZW0uc2VhcmNoRmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kRWwgJiYgdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZmluZEVsLmZpZWxkICYmIGl0ZW0uZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Q29sdW1uRmlsdGVyTW9kZWwoZmluZEVsLmZpZWxkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbC5sb2dpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZWwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maWx0ZXJCb3hJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtc1tpbmRleF0udmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gaXRlbS5pZDtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUZpbHRlclRlbXBsYXRlQm94ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluZEVsID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maW5kKChmaSkgPT4gZmkuZmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgaWYgKCFmaW5kRWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlID09IG51bGwgfHwgZWwudmFsdWUgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maWx0ZXIoKGZpKSA9PiBmaS5maWVsZCAhPSBlbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmluZEVsLnZhbHVlID0gZWwudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZUZpbHRlcihpdGVtOiBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZEluZGV4KChlbCkgPT4gZWwuZmllbGQgPT0gaXRlbS5maWVsZCk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtc1tpbmRleF0udmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldENvbHVtbkZpbHRlck1vZGVsKGl0ZW0uZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbHRlcigoZWwpID0+IGVsLmZpZWxkICE9IGl0ZW0uZmllbGQpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBjcmVhdGVTZXJ2ZXJTaWRlRGF0YXNvdXJjZSgpOiBJU2VydmVyU2lkZURhdGFzb3VyY2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0Um93czogKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcjogRmlsdGVyR3JpZEl0ZW1zTW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0ga2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nID8gdGhpcy5fdHJlZUdyb3VwQ29sdW1uIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmVxdWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZ25vcmVDYXNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSB0aGlzLl90cmVlR3JvdXBDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGZpbmRFbC5zZWFyY2hGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXJUeXBlID09ICdjdXN0b20tZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmJldHdlZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20sIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci50cnVuY0dyZWF0ZXJUaGFuRXF1YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvICYmIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci50cnVuY0xlc3NUaGFuT3JFcXVhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyVHlwZSA9PSAnY3VzdG9tLXRpbWUnICYmIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5lcXVhbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBgJHtwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnRpbWUuc3Vic3RyKDAsIDIpfToke3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZS5zdWJzdHIoMiwgMil9OiR7cGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50aW1lLnN1YnN0cig0LCAyKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRmlsdGVyT3BlcmF0b3JbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50eXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXIgPyBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmZpbHRlciA6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEVsICYmIGZpbmRFbC50eXBlID09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEZpbHRlckl0ZW1zRWwgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbmQoKGZpKSA9PiBmaS5maWVsZCA9PSBmaW5kRWwuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5kRmlsdGVySXRlbXNFbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaW5kRWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaW5kRWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kRmlsdGVySXRlbXNFbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzb3J0czogU29ydE1vZGVsW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5jb2xJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLnNvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpbmRFbC5zZWFyY2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0cyA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uc29ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLmNvbElkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBncmlkRmlsdGVyOiBHcmlkSW5wdXRNb2RlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGFrZTogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSAqIHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0UGFyYW1zOiBHcmlkUmVxdWVzdFBhcmFtID0ge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlOiBwYXJhbXMucGFyZW50Tm9kZS5kYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnBvc2l0aW9uID09ICdmaWx0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmNvbnRhaW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5iZXR3ZWVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlWzBdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZVswXSA9IG5ldyBEYXRlKCcxOTk3LTAxLTAxJykudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudmFsdWVbMV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlWzFdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmVxdWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkRmlsdGVyLmZpbHRlci5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRGaWx0ZXIuZGF0YVtlbC5maWVsZF0gPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsID0gZ3JpZEZpbHRlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRGF0YShncmlkRmlsdGVyLCByZXF1ZXN0UGFyYW1zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBkYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQ6IGRhdGEudG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScgJiYgdGhpcy5ncmlkQXBpLmdldFNlcnZlclNpZGVTZWxlY3Rpb25TdGF0ZSgpWydzZWxlY3RBbGwnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmZXRjaFRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMuZmlsdGVyKChlbCkgPT4gZWwudGFibGVJZCA9PSB0aGlzLmlkKS50b0FycmF5KCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZW1wbGF0ZUl0ZW1zID0gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mZXRjaFRlbXBsYXRlKCk7XG4gICAgfVxufSIsIjwhLS0gPGJ1dHRvbiAoY2xpY2spPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXI9IWVuYWJsZUFkdmFuY2VkRmlsdGVyXCI+YWR2YW5jZWQ8L2J1dHRvbj4gLS0+XG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB5LTQgYm9yZGVyLWIgYm9yZGVyLWItc2xhdGUtMjAwIG14LTRcIiAqbmdJZj1cImlzVG9vbGJhclwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC0yeGxcIj57eyBsYWJlbCB9fTwvaDQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0b29sYmFySXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBbbnpMb2FkaW5nXT1cIml0ZW0ubG9hZGluZyA/IGl0ZW0ubG9hZGluZyA6IGZhbHNlXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW0pXCIgW256VHlwZV09XCJpdGVtLnR5cGVcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+XG4gICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgICBuelR5cGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICAgIG56UG9wb3ZlclRpdGxlPVwiXCJcbiAgICAgICAgICAgIFsobnpQb3BvdmVyVmlzaWJsZSldPVwidmlzaWJsZUZpbHRlckJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3ZlclwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJfZmlsdGVyQm94SXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJmaWx0ZXJcIj48L3NwYW4+XG4gICAgICAgICAgICDZgduM2YTYqtixXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBuei1idXR0b25cbiAgICAgICAgICAgIG56VHlwZT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgICBuelBvcG92ZXJUaXRsZT1cIlwiXG4gICAgICAgICAgICBbKG56UG9wb3ZlclZpc2libGUpXT1cInZpc2libGVGaWx0ZXJUZW1wbGF0ZUJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudEZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3Zlci1zbVwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJpZCAhPSBudWxsXCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImxheW91dFwiPjwvc3Bhbj5cbiAgICAgICAgICAgINmB24zZhNiq2LEg2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwicmVmcmVzaCgpXCIgbnpUeXBlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJzeW5jXCI+PC9zcGFuPlxuICAgICAgICAgICAg2KjYsdmI2LLYsdiz2KfZhtuMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJhZHZhbmNlZEZpbHRlcigpXCIgKm5nSWY9XCJzaG93QWR2YW5jZWRCdXR0b25cIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImZpbHRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgINis2LPYqtis2YjbjCDZvtuM2LTYsdmB2KrZh1xuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXgtNCBwdC00XCIgW25nQ2xhc3NdPVwieyAnZ3JpZC1jb2xzLTEnOiBfZmlsdGVyQm94SXRlbXMubGVuZ3RoID09IDEsICdncmlkLWNvbHMtMic6IF9maWx0ZXJCb3hJdGVtcy5sZW5ndGggPiAxIH1cIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsdGVyQm94SXRlbXNcIiBbbmdDbGFzc109XCJ7ICdjb2wtc3Bhbi0yJzogaXRlbS50eXBlID09ICdkYXRlJyB8fCBpdGVtLnR5cGUgPT0gJ2RhdGUtdGltZScgfVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZScgfHwgaXRlbS50eXBlID09ICdkYXRlLXRpbWUnXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7Yp9iyINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVswXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7YqtinINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVsxXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZW51bScgfHwgaXRlbS50eXBlID09ICdzZWxlY3QnIHx8IGl0ZW0udHlwZSA9PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIiBuelNob3dTZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtMiBvZiBpdGVtLml0ZW1zXCIgW256VmFsdWVdPVwiaXRlbTIudmFsdWVcIiBbbnpMYWJlbF09XCJpdGVtMi5sYWJlbFwiPjwvbnotb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAndHJlZS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPG56LWZvcm0taXRlbSBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD57eyBpdGVtLmxhYmVsIH19PC9uei1mb3JtLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbbnpOb2Rlc109XCJpdGVtLm5vZGVzXCIgbnpTaG93U2VhcmNoIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvbnotdHJlZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3N0cmluZycgfHwgaXRlbS50eXBlID09IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG56LWlucHV0IFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgcHQtNCBtdC00IGJvcmRlci10IGJvcmRlci10LXNsYXRlLTIwMFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbHRlcigpXCI+2KfYudmF2KfZhDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj7Zvtin2qnYs9in2LLbjCDZiCDYqNiz2KrZhjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gdGVtcGxhdGUgaXRlbXMgYm94ICAtLT5cbjxuZy10ZW1wbGF0ZSAjY29udGVudEZpbHRlclRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtYXgtaC1bMzAwcHhdXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtMiByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItc2xhdGUtMjAwXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyVGVtcGxhdGVJdGVtc1wiIChjbGljayk9XCJzZXRUZW1wbGF0ZUZpbHRlcihpdGVtKVwiPnt7IGl0ZW0udGl0bGUgfX08L2xpPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC00IHB5LTIgaC0xNFwiICpuZ0lmPVwiaXNUb29sYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCI+2YHbjNmE2KrYsdmH2KfbjCDYp9i52YXYp9mEINi02K/Zhzo8L3NwYW4+XG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdJZj1cImZpbHRlckl0ZW1zVmFsdWVzLmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+2KjYr9mI2YYg2YHbjNmE2KrYsTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJJdGVtc1ZhbHVlc1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc2xhdGUtNTAwIHRleHQtc21cIj57eyBpdGVtLmxhYmVsIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+e3sgaXRlbS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtdGltZXMgY3Vyc29yLXBvaW50ZXIgcHMtMlwiIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaXRlbSlcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwiaWQgIT0gbnVsbFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKm5nSWY9XCJmaWx0ZXJJdGVtc1ZhbHVlcy5sZW5ndGggPiAwIHx8IGdyaWRJZCAhPSBudWxsXCIgKGNsaWNrKT1cInNhdmVGaWx0ZXJHcmlkKClcIj5cbiAgICAgICAgICAgIHt7IGdyaWRJZCA9PSBudWxsID8gJ9iw2K7bjNix2Ycg2YHbjNmE2KrYsScgOiAn2KfYudmF2KfZhCDYqti624zbjNix2KfYqiDZgduM2YTYqtixJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwiZGVmYXVsdFwiICpuZ0lmPVwiZ3JpZElkICE9IG51bGxcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKTsgZ3JpZElkID0gbnVsbFwiPtmE2LrZiDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuei1tb2RhbCBbKG56VmlzaWJsZSldPVwiaXNWaXNpYmxlTW9kYWxcIiBuelRpdGxlPVwi2KfZgdiy2YjYr9mGINmC2KfZhNioINis2K/bjNivXCIgKG56T25DYW5jZWwpPVwiaGFuZGxlQ2FuY2VsTW9kYWwoKVwiIChuek9uT2spPVwiaGFuZGxlT2tNb2RhbCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbnpNb2RhbENvbnRlbnQ+XG4gICAgICAgIDxuei1mb3JtLWl0ZW0gY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPti52YbZiNin2YYg2YLYp9mE2Kg8L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTmFtZVwiIC8+XG4gICAgICAgIDwvbnotZm9ybS1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uei1tb2RhbD5cblxuPGFnLWdyaWQtYW5ndWxhclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgIFtzdHlsZV09XCJpc1Rvb2xiYXIgPyAnaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtIC0gMTI0cHgpOycgOiAnaGVpZ2h0OiAxMDAlOydcIlxuICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIlxuICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIlxuICAgIFtjbGFzc109XCJ0aGVtZUNsYXNzXCJcbiAgICBbcm93SGVpZ2h0XT1cIjQ4XCJcbiAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcbiAgICBbZW5hYmxlQWR2YW5jZWRGaWx0ZXJdPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXJcIlxuICAgIFtlbmFibGVSdGxdPVwicnRsXCJcbiAgICBbdHJlZURhdGFdPVwidHJlZU1vZGVsXCJcbiAgICBbYXV0b0dyb3VwQ29sdW1uRGVmXT1cImF1dG9Hcm91cENvbHVtbkRlZlwiXG4gICAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgICBbZ2V0U2VydmVyU2lkZUdyb3VwS2V5XT1cImdldFNlcnZlclNpZGVHcm91cEtleVwiXG4gICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICAgIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuICAgIFtjYWNoZUJsb2NrU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxuICAgIFttYXhCbG9ja3NJbkNhY2hlXT1cIjJcIlxuICAgIFtjb250ZXh0XT1cInsgYWN0aW9uSXRlbXM6IGFjdGlvbkl0ZW1zIH1cIlxuICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJjZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICBbYXV0b1NpemVTdHJhdGVneV09XCJfYXV0b0NvbHVtblNpemVcIlxuICAgIFtyb3dTZWxlY3Rpb25dPVwiX3Jvd1NlbGVjdGlvblwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbdGhlbWVdPVwiXCJcbiAgICBbZ2V0Um93Q2xhc3NdPVwiZ2V0Um93Q2xhc3NcIlxuICAgICNncmlkIC8+XG4iXX0=
996
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQXdKLGNBQWMsRUFBb0csTUFBTSwyQkFBMkIsQ0FBQztBQUNuVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCOUIsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFDWSxVQUE0QixFQUM1QixJQUF1QixFQUN2QixNQUFvQjtRQUZwQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBTXpCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3Qix5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDeEMsa0JBQWEsR0FBd0I7WUFDakMsSUFBSSxFQUFFLFdBQVc7WUFDakIsVUFBVSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLGVBQVUsR0FBVyxpQkFBaUIsQ0FBQztRQUN2Qyxl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QUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBYU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFlTixZQUFZO3NCQURYLEtBQUs7Z0JBaUJLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBeUJLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBNEVOLFNBQVM7c0JBRFIsS0FBSztnQkFJSyxNQUFNO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VsbERvdWJsZUNsaWNrZWRFdmVudCwgQ29sRGVmLCBHcmlkQXBpLCBJRGF0ZUZpbHRlclBhcmFtcywgSVJvd05vZGUsIElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLCBSb3dNb2RlbFR5cGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25JdGVtcywgQ29sdW1uSXRlbXMsIERhdGFzb3VyY2VPdXRwdXRNb2RlbCwgRmlsdGVyQm94SXRlbXNNb2RlbCwgRmlsdGVyQm94TW9kZWwsIEZpbHRlckdyaWRJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsLCBGaWx0ZXJPcGVyYXRvciwgRmlsdGVyVGVtcGxhdGVNb2RlbCwgR3JpZEFjdGlvbk91dHB1dCwgR3JpZElucHV0TW9kZWwsIEdyaWRSZXF1ZXN0UGFyYW0sIFNvcnRNb2RlbCwgVG9vbGJhckl0ZW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NoYXJlZC5tb2RlbCc7XG5pbXBvcnQgeyBKRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBEYXRlRmlsdGVyLCBUaW1lRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXIvaW5kZXguYXBpJztcbmltcG9ydCB7IE56VHJlZU5vZGVPcHRpb25zIH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBkYiB9IGZyb20gJy4uLy4uL2RiJztcbmV4cG9ydCBpbnRlcmZhY2UgSU9seW1waWNEYXRhIHtcbiAgICBhdGhsZXRlOiBzdHJpbmcsXG4gICAgYWdlOiBudW1iZXIsXG4gICAgY291bnRyeTogc3RyaW5nLFxuICAgIHllYXI6IG51bWJlcixcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgc3BvcnQ6IHN0cmluZyxcbiAgICBnb2xkOiBudW1iZXIsXG4gICAgc2lsdmVyOiBudW1iZXIsXG4gICAgYnJvbnplOiBudW1iZXIsXG4gICAgdG90YWw6IG51bWJlclxufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF90b2FzdDogVG9hc3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IHRoaXMuY3JlYXRlU2VydmVyU2lkZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBncmlkQXBpITogR3JpZEFwaTtcbiAgICBwdWJsaWMgaXNTZXJ2ZXJTaWRlR3JvdXA7XG4gICAgcHVibGljIGdldFNlcnZlclNpZGVHcm91cEtleSA9IG51bGw7XG4gICAgcHVibGljIGdyb3VwRGVmYXVsdEV4cGFuZGVkID0gLTE7XG4gICAgcHJpdmF0ZSBfdHJlZUdyb3VwQ29sdW1uOiBzdHJpbmcgPSBudWxsO1xuICAgIF9yb3dTZWxlY3Rpb246IFJvd1NlbGVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIG1vZGU6ICdzaW5nbGVSb3cnLFxuICAgICAgICBjaGVja2JveGVzOiBmYWxzZVxuICAgIH07XG4gICAgZGF0YXNvdXJjZTogSVNlcnZlclNpZGVEYXRhc291cmNlO1xuICAgIHRoZW1lQ2xhc3M6IHN0cmluZyA9IFwiYWctdGhlbWUtcXVhcnR6XCI7XG4gICAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyQm94OiBib29sZWFuID0gZmFsc2U7XG4gICAgX2NvbHVtbjogQ29sdW1uSXRlbXNbXSA9IFtdO1xuICAgIF9maWx0ZXJCb3hJdGVtczogRmlsdGVyQm94TW9kZWxbXSA9IFtdO1xuICAgIGZpbHRlckl0ZW1zVmFsdWVzOiBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsW10gPSBbXTtcbiAgICBmaWx0ZXJUZW1wbGF0ZUl0ZW1zOiBGaWx0ZXJUZW1wbGF0ZU1vZGVsW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyVGVtcGxhdGVCb3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc1Zpc2libGVNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdyaWRNb2RlbDogR3JpZElucHV0TW9kZWwgPSBudWxsO1xuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgICBncmlkSWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBfYXV0b0NvbHVtblNpemU6IFNpemVDb2x1bW5zVG9GaXRHcmlkU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICBhdXRvR3JvdXBDb2x1bW5EZWY6IENvbERlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogXCJcIixcbiAgICAgICAgbWluV2lkdGg6IDI1MCxcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIHN1cHByZXNzQ291bnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclBhcmFtczoge1xuICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgbWluV2lkdGg6IDE1MCxcbiAgICAgICAgZmlsdGVyOiAnYWdUZXh0Q29sdW1uRmlsdGVyJyxcbiAgICAgICAgc3VwcHJlc3NIZWFkZXJNZW51QnV0dG9uOiB0cnVlLFxuICAgICAgICBzdXBwcmVzc0hlYWRlckNvbnRleHRNZW51OiB0cnVlLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZVxuICAgIH07XG5cbiAgICBnZXRSb3dDbGFzcyhwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5ub2RlLnJvd0luZGV4ICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdyb3ctb2RkJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8R3JpZEFjdGlvbk91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvblRvb2xiYXI6IEV2ZW50RW1pdHRlcjxUb29sYmFySXRlbXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbldpZHRoOiBudW1iZXIgPSAxMDA7XG5cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1Jvd1NlbGVjdGlvbih2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ211bHRpUm93JyxcbiAgICAgICAgICAgICAgICBjaGVja2JveGVzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Rpb25DaGFuZ2VkKGU6IFNlbGVjdGlvbkNoYW5nZWRFdmVudCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBlLmFwaS5mb3JFYWNoTm9kZSgoZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGVsLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNlbGVjdEFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlRmlsdGVyT3JEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuXG4gICAgQElucHV0KClcbiAgICBzZXJ2ZXJTaWRlU29ydDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlcnZlclNpZGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBpc1Rvb2xiYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBydGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwYWdpbmF0aW9uUGFnZVNpemUgPSAyNTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IG51bWJlcltdIHwgYm9vbGVhbiA9IFsyNV07XG5cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZUFkdmFuY2VkRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRyZWVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBpc0xlYWY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcm93RGF0YTogYW55ID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhdXRvQ29sdW1uU2l6ZSgpOiBTaXplQ29sdW1uc1RvRml0R3JpZFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9Db250ZW50U3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b0NvbHVtblNpemU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgYXV0b0NvbHVtblNpemUodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5fYXV0b0NvbHVtblNpemUgPSB7IHR5cGU6ICdmaXRDZWxsQ29udGVudHMnIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ29sdW1uU2l6ZSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkdmFuY2VkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdlZGl0JyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS1wZW4nLFxuICAgICAgICAgICAgYWx0OiAn2YjbjNix2KfbjNi0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS10cmFzaCcsXG4gICAgICAgICAgICBhbHQ6ICfYrdiw2YEnXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgQElucHV0KClcbiAgICB0b29sYmFySXRlbXM6IFRvb2xiYXJJdGVtc1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnaW5zZXJ0JyxcbiAgICAgICAgICAgIGljb246ICdwbHVzJyxcbiAgICAgICAgICAgIHRleHQ6ICfYp9uM2KzYp9ivINix2K/bjNmBINis2K/bjNivJyxcbiAgICAgICAgICAgIHR5cGU6ICdwcmltYXJ5J1xuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBjb2RlOiAncmVmcmVzaCcsXG4gICAgICAgIC8vICAgICBpY29uOiAnc3luYycsXG4gICAgICAgIC8vICAgICB0ZXh0OiAn2KjYsdmI2LLYsdiz2KfZhtuMJyxcbiAgICAgICAgLy8gICAgIHR5cGU6ICdkZWZhdWx0J1xuICAgICAgICAvLyB9XG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0cmVlR3JvdXBDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVHcm91cENvbHVtbjtcbiAgICB9XG4gICAgcHVibGljIHNldCB0cmVlR3JvdXBDb2x1bW4odjogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlR3JvdXBDb2x1bW4gPSB2O1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVHcm91cCA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhSXRlbS5sYXN0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmdldFNlcnZlclNpZGVHcm91cEtleSA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYuaGVhZGVyTmFtZSA9IHY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsdGVySXRlbXModjogRmlsdGVySXRlbXNNb2RlbFtdKSB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9maWx0ZXJCb3hJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGVsLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlbC50eXBlID09ICdlbnVtJyB8fCBlbC50eXBlID09ICdzZWxlY3QnIHx8IGVsLnR5cGUgPT0gJ3RyZWUtc2VsZWN0JykgJiYgZWwuaXRlbXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuaXRlbXM/LigpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub2RlczogTnpUcmVlTm9kZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC50eXBlID09ICd0cmVlLXNlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydFRvTnpUcmVlTm9kZXMgPSAoaXRlbXM6IEZpbHRlckJveEl0ZW1zTW9kZWxbXSk6IE56VHJlZU5vZGVPcHRpb25zW10gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBTdHJpbmcoaXRlbS52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWFmOiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbiA/IGNvbnZlcnRUb056VHJlZU5vZGVzKGl0ZW0uY2hpbGRyZW4pIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMgPSBjb252ZXJ0VG9OelRyZWVOb2RlcyhyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC5kZWZhdWx0VmFsdWUgIT0gbnVsbCA/IGVsLmRlZmF1bHRWYWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiByZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlbC5wb3NpdGlvbiA/IGVsLnBvc2l0aW9uIDogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IGVsLmNvbFNwYW4gPyBlbC5jb2xTcGFuIDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogZWwuc29ydCA/IGVsLnNvcnQgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChcInRydWVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJmYWxzZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWwuZGVmYXVsdFZhbHVlICE9IG51bGwgPyBlbC5kZWZhdWx0VmFsdWUgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiBlbC5jb2xTcGFuID8gZWwuY29sU3BhbiA6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogZWwuc29ydCA/IGVsLnNvcnQgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC5kZWZhdWx0VmFsdWUgIT0gbnVsbCA/IGVsLmRlZmF1bHRWYWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZWwucG9zaXRpb24gPyBlbC5wb3NpdGlvbiA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IGVsLmNvbFNwYW4gPyBlbC5jb2xTcGFuIDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBlbC5zb3J0ID8gZWwuc29ydCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zb3J0IC0gYi5zb3J0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGZldGNoRGF0YTogKGZpbHRlckdyaWQ6IEdyaWRJbnB1dE1vZGVsLCByZXF1ZXN0UGFyYW1zOiBHcmlkUmVxdWVzdFBhcmFtKSA9PiBQcm9taXNlPERhdGFzb3VyY2VPdXRwdXRNb2RlbD47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHY6IENvbHVtbkl0ZW1zW10pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMgPSBbXTtcbiAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW4gPSB2O1xuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlcjogYW55ID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3J0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJQYXJhbXM6IElEYXRlRmlsdGVyUGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ051bWJlckNvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1wdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogJ3RydWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdZRVMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5wdXRzOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6ICdmYWxzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ05PJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6ICgpID0+IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ051bWJlckNvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGVsLmZpbHRlckl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogZWwuZmlsdGVySXRlbXNbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ051bWJlckNvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ1NldENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnRGF0ZUNvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXJCb3hJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGVsLmZpZWxkIHx8IGl0ZW0uZmllbGQgPT0gZWwuc2VhcmNoRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuZmlsdGVyICE9IHVuZGVmaW5lZCAmJiAoZWwuZmlsdGVyID09ICdmaWx0ZXItYm94JyB8fCBlbC5maWx0ZXIgPT0gJ25vbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNvcnRhYmxlICE9IHVuZGVmaW5lZCAmJiAhZWwuc29ydGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpZWxkICE9IHRoaXMuX3RyZWVHcm91cENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ2FnLWJvb2xlYW4tY2VsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudmFsdWUgPyAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgc3Ryb2tlPVwiZ3JlZW5cIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJmZWF0aGVyIGZlYXRoZXItY2hlY2tcIj48cGF0aCBkPVwiTTIwIDZMOSAxN0w0IDEyXCIvPjwvc3ZnPicgOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgc3Ryb2tlPVwicmVkXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGNsYXNzPVwiZmVhdGhlciBmZWF0aGVyLXhcIj48bGluZSB4MT1cIjE4XCIgeTE9XCI2XCIgeDI9XCI2XCIgeTI9XCIxOFwiIC8+PGxpbmUgeDE9XCI2XCIgeTE9XCI2XCIgeDI9XCIxOFwiIHkyPVwiMThcIiAvPjwvc3ZnPic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZW51bScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQocGFyYW1zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBEYXRlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICd0aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBUaW1lRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdkYXRlLXRpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSkRhdGVQaXBlKCkudHJhbnNmb3JtKHBhcmFtcy52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAncHJpY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGltZyBjbGFzcz1cInJvdW5kZWQtZnVsbCBtdC0xXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgc3JjPVwiJHtwYXJhbXMudmFsdWV9XCIvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLmZpZWxkID0gZWwuZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW4uZmlsdGVyKChlbCkgPT4gZWwuZmlsdGVyID09ICdmaWx0ZXItYm94JykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5maWx0ZXJJdGVtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWwuZmlsdGVySXRlbXMpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChlbC5maWx0ZXJJdGVtc1tpdGVtXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLmZpbHRlckl0ZW1zW2l0ZW1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsLmZpbHRlckl0ZW1zKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJ0cnVlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwiZmFsc2VcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zb3J0IC0gYi5zb3J0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMuYWN0aW9uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKHBhcmFtczogR3JpZEFjdGlvbk91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQWN0aW9uLmVtaXQocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIGNoYW5nZURhdGVQaWNrZXJWYWx1ZShlLCBpdGVtOiBGaWx0ZXJCb3hNb2RlbCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGl0ZW0udmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbS52YWx1ZVtpbmRleF0gPSBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IFtudWxsLCBudWxsXTtcbiAgICAgICAgICAgIGl0ZW0udmFsdWVbaW5kZXhdID0gZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNlbGxEb3VibGVDbGlja2VkKGU6IENlbGxEb3VibGVDbGlja2VkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrZWQuZW1pdCh7IC4uLmUuZGF0YSwgY29sSWQ6IGUuY29sdW1uLmdldENvbElkKCkgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soaXRlbTogVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgIHRoaXMub25Ub29sYmFyLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgc2F2ZUZpbHRlckdyaWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9i02YbYp9iz2Ycg24wg2KzYr9mI2YQg2YjYp9ix2K8g2YbYtNiv2Ycg2KfYs9iqJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkSWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGIuZ3JpZEZpbHRlckl0ZW1zLmdldCh0aGlzLmdyaWRJZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgZGIuZ3JpZEZpbHRlckl0ZW1zLnB1dCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZDogdGhpcy5ncmlkTW9kZWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9hc3Quc2hvdygn2YLYp9mE2Kgg2KjYpyDZhdmI2YHZgtuM2Kog2KjYsdmI2LLYsdiz2KfZhtuMINi02K8nLCAnc3VjY2VzcycpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaGFuZGxlQ2FuY2VsTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVPa01vZGFsKCkge1xuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3Quc2hvdygn2LnZhtmI2KfZhiDZgtin2YTYqCDZiNin2LHYryDZhti02K/ZhyDYp9iz2KonLCAnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZElkID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKTtcbiAgICAgICAgZGIuZ3JpZEZpbHRlckl0ZW1zLmFkZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5ncmlkSWQsXG4gICAgICAgICAgICBncmlkOiB0aGlzLmdyaWRNb2RlbCxcbiAgICAgICAgICAgIHRhYmxlSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICB1c2VyTmFtZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdG9hc3Quc2hvdygn2YLYp9mE2Kgg2KjYpyDZhdmI2YHZgtuM2Kog2LDYrtuM2LHZhyDYtNivJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZU5hbWUgPSBudWxsO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZU1vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hUZW1wbGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWZyZXNoKHB1cmdlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hTZXJ2ZXJTaWRlKHsgcHVyZ2UgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscygpO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB0aGlzLmNvbHVtbkRlZnMpO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oJ2xvYWRpbmcnLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKG51bGwsIG51bGwpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignbG9hZGluZycsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25HcmlkUmVhZHkocGFyYW1zOiBhbnkpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpID0gcGFyYW1zLmFwaTtcbiAgICAgICAgaWYgKHRoaXMucm93TW9kZWxUeXBlID09ICdjbGllbnRTaWRlJykge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEobnVsbCwgbnVsbCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkdmFuY2VkRmlsdGVyKCkge1xuICAgICAgICB0aGlzLmVuYWJsZUFkdmFuY2VkRmlsdGVyID0gIXRoaXMuZW5hYmxlQWR2YW5jZWRGaWx0ZXI7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNob3dBZHZhbmNlZEZpbHRlckJ1aWxkZXIoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhZy1pY29uLW1heGltaXplJylbMF0gYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3V0ZVRvTm9kZShyb3dOb2RlOiBJUm93Tm9kZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKCFyb3dOb2RlLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50aGlzLmdldFJvdXRlVG9Ob2RlKHJvd05vZGUucGFyZW50KSxcbiAgICAgICAgICAgIHJvd05vZGUua2V5ID8gcm93Tm9kZS5rZXkgOiByb3dOb2RlLmRhdGEuZW1wbG95ZWVOYW1lLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHJlZnJlc2hOb2RlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkQXBpLmdldFJvd05vZGUoaWQpO1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0Um91dGVUb05vZGUoc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hTZXJ2ZXJTaWRlKHtcbiAgICAgICAgICAgIHB1cmdlOiB0cnVlLFxuICAgICAgICAgICAgcm91dGU6IHJvdXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyRmlsdGVyKCkge1xuICAgICAgICB0aGlzLnZpc2libGVGaWx0ZXJCb3ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGVsLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJlZnJlc2hQYXJlbnROb2RlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkQXBpLmdldFJvd05vZGUoaWQpO1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0Um91dGVUb05vZGUoc2VsZWN0ZWRSb3dzLnBhcmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoU2VydmVyU2lkZSh7XG4gICAgICAgICAgICBwdXJnZTogdHJ1ZSxcbiAgICAgICAgICAgIHJvdXRlOiByb3V0ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyTGFiZWxWYWx1ZSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgdGhpcy52aXNpYmxlRmlsdGVyQm94ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VGVtcGxhdGVGaWx0ZXIoaXRlbTogRmlsdGVyVGVtcGxhdGVNb2RlbCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5ncmlkLmZpbHRlci5maWx0ZXJzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmluZEVsID0gdGhpcy5fY29sdW1uLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZWwuZmllbGQgfHwgaXRlbS5zZWFyY2hGaWVsZCA9PSBlbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRFbCAmJiB0aGlzLmNvbHVtbkRlZnMuZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBmaW5kRWwuZmllbGQgJiYgaXRlbS5maWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRDb2x1bW5GaWx0ZXJNb2RlbChmaW5kRWwuZmllbGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLmxvZ2ljLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zW2luZGV4XS52YWx1ZSA9IGVsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5ncmlkSWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlRmlsdGVyVGVtcGxhdGVCb3ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckxhYmVsVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIGhhbmRsZUZpbHRlckxhYmVsVmFsdWUoKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbmQoKGZpKSA9PiBmaS5maWVsZCA9PSBlbC5maWVsZCk7XG4gICAgICAgICAgICBpZiAoIWZpbmRFbCkge1xuICAgICAgICAgICAgICAgIGlmIChlbC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWUgPT0gbnVsbCB8fCBlbC52YWx1ZSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbHRlcigoZmkpID0+IGZpLmZpZWxkICE9IGVsLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaW5kRWwudmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsdGVyKGl0ZW06IEZpbHRlckl0ZW1zVmFsdWVzTW9kZWwpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maWx0ZXJCb3hJdGVtcy5maW5kSW5kZXgoKGVsKSA9PiBlbC5maWVsZCA9PSBpdGVtLmZpZWxkKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zW2luZGV4XS52YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Q29sdW1uRmlsdGVyTW9kZWwoaXRlbS5maWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyA9IHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMuZmlsdGVyKChlbCkgPT4gZWwuZmllbGQgIT0gaXRlbS5maWVsZCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlcnZlclNpZGVEYXRhc291cmNlKCk6IElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRSb3dzOiAocGFyYW1zOiBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyOiBGaWx0ZXJHcmlkSXRlbXNNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgZmlsdGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgPyB0aGlzLl90cmVlR3JvdXBDb2x1bW4gOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuZXF1YWxzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZUNhc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChlbCkgPT4gZWwuZmllbGQgPT0ga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IHRoaXMuX3RyZWVHcm91cENvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRFbC5zZWFyY2hGaWVsZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gZmluZEVsLnNlYXJjaEZpZWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmZpbHRlclR5cGUgPT0gJ2N1c3RvbS1kYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVGcm9tICYmIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuYmV0d2VlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSwgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLnRydW5jR3JlYXRlclRoYW5FcXVhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVGcm9tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG8gJiYgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG8gIT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLnRydW5jTGVzc1RoYW5PckVxdWFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXJUeXBlID09ICdjdXN0b20tdGltZScgJiYgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50aW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmVxdWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGAke3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZS5zdWJzdHIoMCwgMil9OiR7cGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50aW1lLnN1YnN0cigyLCAyKX06JHtwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnRpbWUuc3Vic3RyKDQsIDIpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGaWx0ZXJPcGVyYXRvcltwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3JbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmZpbHRlciA/IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyIDogcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwgJiYgZmluZEVsLnR5cGUgPT0gJ2VudW0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRmlsdGVySXRlbXNFbCA9IHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMuZmluZCgoZmkpID0+IGZpLmZpZWxkID09IGZpbmRFbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmRGaWx0ZXJJdGVtc0VsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpbmRFbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZpbmRFbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRGaWx0ZXJJdGVtc0VsLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpbHRlckl0ZW1zVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNvcnRzOiBTb3J0TW9kZWxbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChlbCkgPT4gZWwuZmllbGQgPT0gcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLmNvbElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRFbC5zZWFyY2hGaWVsZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0cyA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uc29ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmluZEVsLnNlYXJjaEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI6IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5zb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uY29sSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRGaWx0ZXI6IEdyaWRJbnB1dE1vZGVsID0ge1xuICAgICAgICAgICAgICAgICAgICB0YWtlOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbXM6IEdyaWRSZXF1ZXN0UGFyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGU6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwucG9zaXRpb24gPT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuY29udGFpbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6IGNhc2UgJ2RhdGUtdGltZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmJldHdlZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWVbMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlWzBdID0gbmV3IERhdGUoJzE5OTctMDEtMDEnKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC52YWx1ZVsxXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWVbMV0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuZXF1YWxzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRGaWx0ZXIuZmlsdGVyLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEZpbHRlci5kYXRhW2VsLmZpZWxkXSA9IGVsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZUZpbHRlck9yRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVGaWx0ZXJPckRhdGEgJiYgKChncmlkRmlsdGVyLmRhdGEgPT0gbnVsbCB8fCBPYmplY3Qua2V5cyhncmlkRmlsdGVyLmRhdGEpLmxlbmd0aCA9PSAwKSAmJiAoZ3JpZEZpbHRlci5maWx0ZXIuZmlsdGVycyA9PSBudWxsIHx8IGdyaWRGaWx0ZXIuZmlsdGVyLmZpbHRlcnMubGVuZ3RoID09IDApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9hc3Quc2hvdygn2KjYsdin24wg2YbZhdin24zYtCDYp9i32YTYp9i52KfYqiDYjCDYp9mG2KrYrtin2Kgg24zaqSDZgduM2YTYqtixINin2YTYstin2YXbjCDYp9iz2KonLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnN1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRNb2RlbCA9IGdyaWRGaWx0ZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEoZ3JpZEZpbHRlciwgcmVxdWVzdFBhcmFtcykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnN1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogZGF0YS5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50OiBkYXRhLnRvdGFsQ291bnQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnICYmIHRoaXMuZ3JpZEFwaS5nZXRTZXJ2ZXJTaWRlU2VsZWN0aW9uU3RhdGUoKVsnc2VsZWN0QWxsJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZmV0Y2hUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgZGIuZ3JpZEZpbHRlckl0ZW1zLmZpbHRlcigoZWwpID0+IGVsLnRhYmxlSWQgPT0gdGhpcy5pZCkudG9BcnJheSgpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGVtcGxhdGVJdGVtcyA9IHJlcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmV0Y2hUZW1wbGF0ZSgpO1xuICAgIH1cbn0iLCI8IS0tIDxidXR0b24gKGNsaWNrKT1cImVuYWJsZUFkdmFuY2VkRmlsdGVyPSFlbmFibGVBZHZhbmNlZEZpbHRlclwiPmFkdmFuY2VkPC9idXR0b24+IC0tPlxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBweS00IGJvcmRlci1iIGJvcmRlci1iLXNsYXRlLTIwMCBteC00XCIgKm5nSWY9XCJpc1Rvb2xiYXJcIj5cbiAgICA8ZGl2PlxuICAgICAgICA8aDQgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtMnhsXCI+e3sgbGFiZWwgfX08L2g0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdG9vbGJhckl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gW256TG9hZGluZ109XCJpdGVtLmxvYWRpbmcgPyBpdGVtLmxvYWRpbmcgOiBmYWxzZVwiIChjbGljayk9XCJoYW5kbGVDbGljayhpdGVtKVwiIFtuelR5cGVdPVwiaXRlbS50eXBlXCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIFtuelR5cGVdPVwiaXRlbS5pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG56LWJ1dHRvblxuICAgICAgICAgICAgbnpUeXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgICBuelBvcG92ZXJUaXRsZT1cIlwiXG4gICAgICAgICAgICBbKG56UG9wb3ZlclZpc2libGUpXT1cInZpc2libGVGaWx0ZXJCb3hcIlxuICAgICAgICAgICAgbnpQb3BvdmVyVHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgICAgIFtuelBvcG92ZXJDb250ZW50XT1cImNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICBuelBvcG92ZXJPdmVybGF5Q2xhc3NOYW1lPVwiZmlsdGVyLXBvcG92ZXJcIlxuICAgICAgICAgICAgbnpQb3BvdmVyUGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX2ZpbHRlckJveEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiZmlsdGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAg2YHbjNmE2KrYsVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgICBuelR5cGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgbnotcG9wb3ZlclxuICAgICAgICAgICAgbnpQb3BvdmVyVGl0bGU9XCJcIlxuICAgICAgICAgICAgWyhuelBvcG92ZXJWaXNpYmxlKV09XCJ2aXNpYmxlRmlsdGVyVGVtcGxhdGVCb3hcIlxuICAgICAgICAgICAgbnpQb3BvdmVyVHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgICAgIFtuelBvcG92ZXJDb250ZW50XT1cImNvbnRlbnRGaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBuelBvcG92ZXJPdmVybGF5Q2xhc3NOYW1lPVwiZmlsdGVyLXBvcG92ZXItc21cIlxuICAgICAgICAgICAgbnpQb3BvdmVyUGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaWQgIT0gbnVsbFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJsYXlvdXRcIj48L3NwYW4+XG4gICAgICAgICAgICDZgduM2YTYqtixINmH2KfbjCDYsNiu24zYsdmHINi02K/Zh1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gKGNsaWNrKT1cInJlZnJlc2goKVwiIG56VHlwZT1cImRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwic3luY1wiPjwvc3Bhbj5cbiAgICAgICAgICAgINio2LHZiNiy2LHYs9in2YbbjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwiYWR2YW5jZWRGaWx0ZXIoKVwiICpuZ0lmPVwic2hvd0FkdmFuY2VkQnV0dG9uXCIgbnpUeXBlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJmaWx0ZXJcIj48L3NwYW4+XG4gICAgICAgICAgICDYrNiz2KrYrNmI24wg2b7bjNi02LHZgdiq2YdcbiAgICAgICAgPC9idXR0b24+IC0tPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZSBjbGFzcz1cInctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC14LTQgcHQtNFwiIFtuZ0NsYXNzXT1cInsgJ2dyaWQtY29scy0xJzogX2ZpbHRlckJveEl0ZW1zLmxlbmd0aCA9PSAxLCAnZ3JpZC1jb2xzLTInOiBfZmlsdGVyQm94SXRlbXMubGVuZ3RoID4gMSB9XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2ZpbHRlckJveEl0ZW1zXCIgW25nQ2xhc3NdPVwieyAnY29sLXNwYW4tMic6IGl0ZW0udHlwZSA9PSAnZGF0ZScgfHwgaXRlbS50eXBlID09ICdkYXRlLXRpbWUnIHx8IGl0ZW0uY29sU3BhbiA9PSAyfVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZScgfHwgaXRlbS50eXBlID09ICdkYXRlLXRpbWUnXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7Yp9iyINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVswXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7YqtinINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVsxXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZW51bScgfHwgaXRlbS50eXBlID09ICdzZWxlY3QnIHx8IGl0ZW0udHlwZSA9PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIiBuelNob3dTZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtMiBvZiBpdGVtLml0ZW1zXCIgW256VmFsdWVdPVwiaXRlbTIudmFsdWVcIiBbbnpMYWJlbF09XCJpdGVtMi5sYWJlbFwiPjwvbnotb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAndHJlZS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPG56LWZvcm0taXRlbSBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD57eyBpdGVtLmxhYmVsIH19PC9uei1mb3JtLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbbnpOb2Rlc109XCJpdGVtLm5vZGVzXCIgbnpWaXJ0dWFsSGVpZ2h0PVwiMzIwcHhcIiBuelNob3dTZWFyY2ggWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCI+PC9uei10cmVlLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnc3RyaW5nJyB8fCBpdGVtLnR5cGUgPT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxuei1mb3JtLWl0ZW0gY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG56LWZvcm0tbGFiZWw+e3sgaXRlbS5sYWJlbCB9fTwvbnotZm9ybS1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCIgLz5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBwdC00IG10LTQgYm9yZGVyLXQgYm9yZGVyLXQtc2xhdGUtMjAwXCI+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwiZmlsdGVyKClcIj7Yp9i52YXYp9mEPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cImRlZmF1bHRcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPtm+2Kfaqdiz2KfYstuMINmIINio2LPYqtmGPC9idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSB0ZW1wbGF0ZSBpdGVtcyBib3ggIC0tPlxuPG5nLXRlbXBsYXRlICNjb250ZW50RmlsdGVyVGVtcGxhdGUgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8dWwgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1heC1oLVszMDBweF1cIj5cbiAgICAgICAgPGxpIGNsYXNzPVwicC0yIHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDBcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJUZW1wbGF0ZUl0ZW1zXCIgKGNsaWNrKT1cInNldFRlbXBsYXRlRmlsdGVyKGl0ZW0pXCI+e3sgaXRlbS50aXRsZSB9fTwvbGk+XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTQgcHktMiBoLTE0XCIgKm5nSWY9XCJpc1Rvb2xiYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIj7ZgduM2YTYqtix2YfYp9uMINin2LnZhdin2YQg2LTYr9mHOjwvc3Bhbj5cbiAgICAgICAgPHVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImJnLXdoaXRlIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIHJvdW5kZWQtbWQgcHgtMiBweS0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGgtOFwiICpuZ0lmPVwiZmlsdGVySXRlbXNWYWx1ZXMubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2xhdGUtODAwIGZvbnQtbWVkaXVtIHRleHQtc21cIj7YqNiv2YjZhiDZgduM2YTYqtixPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImJnLXdoaXRlIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIHJvdW5kZWQtbWQgcHgtMiBweS0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGgtOFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlckl0ZW1zVmFsdWVzXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbGF0ZS01MDAgdGV4dC1zbVwiPnt7IGl0ZW0ubGFiZWwgfX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2xhdGUtODAwIGZvbnQtbWVkaXVtIHRleHQtc21cIj57eyBpdGVtLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS10aW1lcyBjdXJzb3ItcG9pbnRlciBwcy0yXCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpdGVtKVwiPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJpZCAhPSBudWxsXCI+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cImRlZmF1bHRcIiAqbmdJZj1cImZpbHRlckl0ZW1zVmFsdWVzLmxlbmd0aCA+IDAgfHwgZ3JpZElkICE9IG51bGxcIiAoY2xpY2spPVwic2F2ZUZpbHRlckdyaWQoKVwiPlxuICAgICAgICAgICAge3sgZ3JpZElkID09IG51bGwgPyAn2LDYrtuM2LHZhyDZgduM2YTYqtixJyA6ICfYp9i52YXYp9mEINiq2LrbjNuM2LHYp9iqINmB24zZhNiq2LEnIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKm5nSWY9XCJncmlkSWQgIT0gbnVsbFwiIChjbGljayk9XCJjbGVhckZpbHRlcigpOyBncmlkSWQgPSBudWxsXCI+2YTYutmIPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG56LW1vZGFsIFsobnpWaXNpYmxlKV09XCJpc1Zpc2libGVNb2RhbFwiIG56VGl0bGU9XCLYp9mB2LLZiNiv2YYg2YLYp9mE2Kgg2KzYr9uM2K9cIiAobnpPbkNhbmNlbCk9XCJoYW5kbGVDYW5jZWxNb2RhbCgpXCIgKG56T25Payk9XCJoYW5kbGVPa01vZGFsKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuek1vZGFsQ29udGVudD5cbiAgICAgICAgPG56LWZvcm0taXRlbSBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPG56LWZvcm0tbGFiZWw+2LnZhtmI2KfZhiDZgtin2YTYqDwvbnotZm9ybS1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG56LWlucHV0IFsobmdNb2RlbCldPVwidGVtcGxhdGVOYW1lXCIgLz5cbiAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG48L256LW1vZGFsPlxuXG48YWctZ3JpZC1hbmd1bGFyXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgW3N0eWxlXT1cImlzVG9vbGJhciA/ICdoZWlnaHQ6IGNhbGMoMTAwJSAtIDFyZW0gLSAxMjRweCk7JyA6ICdoZWlnaHQ6IDEwMCU7J1wiXG4gICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXG4gICAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiXG4gICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxuICAgIFtwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3Rvcl09XCJwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvclwiXG4gICAgW2NsYXNzXT1cInRoZW1lQ2xhc3NcIlxuICAgIFtyb3dIZWlnaHRdPVwiNDhcIlxuICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxuICAgIFtlbmFibGVBZHZhbmNlZEZpbHRlcl09XCJlbmFibGVBZHZhbmNlZEZpbHRlclwiXG4gICAgW2VuYWJsZVJ0bF09XCJydGxcIlxuICAgIFt0cmVlRGF0YV09XCJ0cmVlTW9kZWxcIlxuICAgIFthdXRvR3JvdXBDb2x1bW5EZWZdPVwiYXV0b0dyb3VwQ29sdW1uRGVmXCJcbiAgICBbaXNTZXJ2ZXJTaWRlR3JvdXBdPVwiaXNTZXJ2ZXJTaWRlR3JvdXBcIlxuICAgIFtnZXRTZXJ2ZXJTaWRlR3JvdXBLZXldPVwiZ2V0U2VydmVyU2lkZUdyb3VwS2V5XCJcbiAgICBbcm93TW9kZWxUeXBlXT1cInJvd01vZGVsVHlwZVwiXG4gICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgW3NlcnZlclNpZGVEYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXG4gICAgW2NhY2hlQmxvY2tTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXG4gICAgW21heEJsb2Nrc0luQ2FjaGVdPVwiMlwiXG4gICAgW2NvbnRleHRdPVwieyBhY3Rpb25JdGVtczogYWN0aW9uSXRlbXMgfVwiXG4gICAgKGNlbGxEb3VibGVDbGlja2VkKT1cImNlbGxEb3VibGVDbGlja2VkKCRldmVudClcIlxuICAgIFthdXRvU2l6ZVN0cmF0ZWd5XT1cIl9hdXRvQ29sdW1uU2l6ZVwiXG4gICAgW3Jvd1NlbGVjdGlvbl09XCJfcm93U2VsZWN0aW9uXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgIFt0aGVtZV09XCJcIlxuICAgIFtnZXRSb3dDbGFzc109XCJnZXRSb3dDbGFzc1wiXG4gICAgI2dyaWQgLz5cbiJdfQ==