imm-element-ui 1.2.8 → 1.3.0
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.
|
@@ -428,6 +428,10 @@ export class GridComponent {
|
|
|
428
428
|
});
|
|
429
429
|
// console.log('lastIndex',lastIndex)
|
|
430
430
|
});
|
|
431
|
+
this.grid.api.refreshCells({
|
|
432
|
+
force: true, // 强制刷新
|
|
433
|
+
suppressFlash: true // 避免闪烁
|
|
434
|
+
});
|
|
431
435
|
// this.upsert()!.subsert[this.subIndex]['logtmp'] = log
|
|
432
436
|
}
|
|
433
437
|
else {
|
|
@@ -705,11 +709,11 @@ export class GridComponent {
|
|
|
705
709
|
console.log('dragUpsert----', this.upsert());
|
|
706
710
|
}
|
|
707
711
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridComponent, deps: [{ token: i1.ActionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
708
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GridComponent, isStandalone: true, selector: "custom-grid", inputs: { gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, upsert: { classPropertyName: "upsert", publicName: "upsert", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, addType: { classPropertyName: "addType", publicName: "addType", isSignal: true, isRequired: false, transformFunction: null }, selectData: { classPropertyName: "selectData", publicName: "selectData", isSignal: true, isRequired: false, transformFunction: null }, showAct: { classPropertyName: "showAct", publicName: "showAct", isSignal: true, isRequired: false, transformFunction: null }, actPos: { classPropertyName: "actPos", publicName: "actPos", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, gridDisable: { classPropertyName: "gridDisable", publicName: "gridDisable", isSignal: true, isRequired: false, transformFunction: null }, addSort: { classPropertyName: "addSort", publicName: "addSort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteEmit: "deleteEmit", addEmit: "addEmit" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "grid", first: true, predicate: AgGridAngular, descendants: true }, { propertyName: "gridRef", first: true, predicate: AgGridAngular, descendants: true, read: ElementRef }, { propertyName: "containerRef", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\" />\n\t\t@if (showAct() && authLevel() >= 3 && (addType() != 'none' || showDelete())) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (addType() != 'none') {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}:host ::ng-deep .ag-cell{display:flex!important;align-items:center!important;justify-content:start!important}\n"], dependencies: [{ kind: "component", type: 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", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "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", "alwaysPassFilter", "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", "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", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "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: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
|
|
712
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GridComponent, isStandalone: true, selector: "custom-grid", inputs: { gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, upsert: { classPropertyName: "upsert", publicName: "upsert", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, addType: { classPropertyName: "addType", publicName: "addType", isSignal: true, isRequired: false, transformFunction: null }, selectData: { classPropertyName: "selectData", publicName: "selectData", isSignal: true, isRequired: false, transformFunction: null }, showAct: { classPropertyName: "showAct", publicName: "showAct", isSignal: true, isRequired: false, transformFunction: null }, actPos: { classPropertyName: "actPos", publicName: "actPos", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, gridDisable: { classPropertyName: "gridDisable", publicName: "gridDisable", isSignal: true, isRequired: false, transformFunction: null }, addSort: { classPropertyName: "addSort", publicName: "addSort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteEmit: "deleteEmit", addEmit: "addEmit" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "grid", first: true, predicate: AgGridAngular, descendants: true }, { propertyName: "gridRef", first: true, predicate: AgGridAngular, descendants: true, read: ElementRef }, { propertyName: "containerRef", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\" />\n\t\t@if (showAct() && authLevel() >= 3 && (addType() != 'none' || showDelete())) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (addType() != 'none') {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}\n"], dependencies: [{ kind: "component", type: 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", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "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", "alwaysPassFilter", "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", "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", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "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: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
|
|
709
713
|
}
|
|
710
714
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridComponent, decorators: [{
|
|
711
715
|
type: Component,
|
|
712
|
-
args: [{ selector: 'custom-grid', standalone: true, imports: [AgGridAngular, ButtonModule], template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\" />\n\t\t@if (showAct() && authLevel() >= 3 && (addType() != 'none' || showDelete())) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (addType() != 'none') {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}
|
|
716
|
+
args: [{ selector: 'custom-grid', standalone: true, imports: [AgGridAngular, ButtonModule], template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\" />\n\t\t@if (showAct() && authLevel() >= 3 && (addType() != 'none' || showDelete())) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (addType() != 'none') {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}\n"] }]
|
|
713
717
|
}], ctorParameters: () => [{ type: i1.ActionService }], propDecorators: { grid: [{
|
|
714
718
|
type: ViewChild,
|
|
715
719
|
args: [AgGridAngular]
|
|
@@ -723,4 +727,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
723
727
|
type: HostListener,
|
|
724
728
|
args: ['window:resize', ['$event']]
|
|
725
729
|
}] } });
|
|
726
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBc0IxRCxNQUFNLGFBQWEsR0FBZ0I7SUFDbEMsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtRQUNkLElBQUksRUFBRSxD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QUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNILElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFDaEYsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7K0dBN3NCVyxhQUFhO21HQUFiLGFBQWEsMDVEQUNkLGFBQWEsMEVBQ2IsYUFBYSwyQkFBVSxVQUFVLDZIQ3hGN0MsMm1EQStDQSxpN0JEbUNXLGFBQWEsODRSQUFFLFlBQVk7OzRGQUl6QixhQUFhO2tCQVB6QixTQUFTOytCQUNDLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO2tGQUtaLElBQUk7c0JBQTdCLFNBQVM7dUJBQUMsYUFBYTtnQkFDd0IsT0FBTztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNsQixZQUFZO3NCQUF2QyxTQUFTO3VCQUFDLGVBQWU7Z0JBZ0QxQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0Y29tcHV0ZWQsXG5cdHVudHJhY2tlZCxcblx0b3V0cHV0LFxuXHROZ1pvbmUsXG5cdFJlbmRlcmVyMixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdEhvc3RMaXN0ZW5lcixcblx0c2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGxWYWx1ZUNoYW5nZWRFdmVudCwgQ29sRGVmLCBHcmlkT3B0aW9ucyBhcyBSYXdHcmlkT3B0aW9ucywgUm93RHJhZ0VuZEV2ZW50IH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XG5pbXBvcnQgeyBUaGVtZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3RoZW1lQ29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICcuLi8uLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ3JpZFV0aWxzIH0gZnJvbSAnLi4vZ3JpZC11dGlscyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNvbXBvbmVudHMsIENMSUVOVExJTUlUIH0gZnJvbSAnLi4vbW9jay1kYXRhJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuZXhwb3J0IGludGVyZmFjZSBHcmlkT3B0aW9ucyBleHRlbmRzIFJhd0dyaWRPcHRpb25zIHtcblx0c2VydmVyRnVuYz86IChzZWFyY2g6IFNlYXJjaCkgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuXHRjbGllbnRGdW5jPzogKHNlYXJjaDogU2VhcmNoKSA9PiBPYnNlcnZhYmxlPGFueT47XG5cdHNob3dTZWFyY2g/OiBib29sZWFuO1xuXHRwcmVTZWFyY2g/OiBTZWFyY2g7XG5cdHRyZWVEYXRhRmllbGQ/OiBzdHJpbmc7XG5cdHRyZWVMZXZlbD86IG51bWJlcjtcblx0aGVhZGVySGVpZ2h0PzogbnVtYmVyO1xuXHRzY3JvbGxIZWlnaHQ/OiBzdHJpbmc7XG5cdHNob3dJbmRleD86IGJvb2xlYW47XG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmc/OiBib29sZWFuO1xuXHR1bmRvUmVkb0NlbGxFZGl0aW5nTGltaXQ/OiBudW1iZXI7XG5cdG1haW5GaWVsZD86IHN0cmluZztcblx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRmaz86IHN0cmluZztcblx0ZHJhZ1NvcnQ/OiBzdHJpbmc7XG5cdHNlbGVjdGlvbk1vZGU/OiAnbm9uZScgfCAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5cdGRhdGFLZXk/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb246IEdyaWRPcHRpb25zID0ge1xuXHQvLyBwb3B1cFBhcmVudDogZG9jdW1lbnQuYm9keSxcblx0ZGVmYXVsdENvbERlZjoge1xuXHRcdGZsZXg6IDEsXG5cdFx0bWluV2lkdGg6IDEwMCxcblx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0fSxcblx0cm93U2VsZWN0aW9uOiB7IG1vZGU6ICdtdWx0aVJvdycgfSxcblx0cm93TW9kZWxUeXBlOiAnc2VydmVyU2lkZScsXG5cdGNlbGxTZWxlY3Rpb246IHtcblx0XHRoYW5kbGU6IHtcblx0XHRcdG1vZGU6ICdyYW5nZScsXG5cdFx0fSxcblx0fSxcblx0ZW5hYmxlQ2hhcnRzOiB0cnVlLFxuXHR1bmRvUmVkb0NlbGxFZGl0aW5nOiB0cnVlLFxuXHR1bmRvUmVkb0NlbGxFZGl0aW5nTGltaXQ6IDIwLFxufTtcblxuY29uc3QgZGVmYXVsdFNvcnRzID0gW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBpc0FzYzogZmFsc2UgfV07XG5mdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5OmFueVtdLCBwcmVkaWNhdGU6YW55LCB0aGlzQXJnOmFueSkge1xuICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnY3VzdG9tLWdyaWQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQWdHcmlkQW5ndWxhciwgQnV0dG9uTW9kdWxlXSxcblx0dGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vZ3JpZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQge1xuXHRAVmlld0NoaWxkKEFnR3JpZEFuZ3VsYXIpIGdyaWQhOiBBZ0dyaWRBbmd1bGFyO1xuXHRAVmlld0NoaWxkKEFnR3JpZEFuZ3VsYXIsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBncmlkUmVmITogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY7XG5cdGdyaWRPcHRpb25zID0gaW5wdXQ8R3JpZE9wdGlvbnM+KHt9KTtcblx0c2VsZWN0aW9uS2V5cyA9IGlucHV0PGFueVtdPihbXSk7XG5cdHRvT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG5cdFx0Z3JpZFV0aWxzLm1lcmdlT3B0aW9ucyh7IC4uLmRlZmF1bHRPcHRpb24sIC4uLnRoaXMuZ3JpZE9wdGlvbnMoKSB9LCB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zZWFyY2hQcm0oKSkubGltaXQsIHRoaXMuYWN0aW9uKSxcblx0KTtcblx0dGhlbWVDb25maWcgPSBpbmplY3QoVGhlbWVDb25maWdTZXJ2aWNlKTtcblx0bG9jYWxlVGV4dDogYW55O1xuXHRpMThuU2VydmljZSA9IGluamVjdChJMThuU2VydmljZSk7XG5cdG15VGhlbWUgPSBjb21wdXRlZCgoKSA9PiBncmlkVXRpbHMuZ2V0VGhlbWUodGhpcy50aGVtZUNvbmZpZykpO1xuXHRjb21wb25lbnRzID0gY29tcG9uZW50cztcblx0Y29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcblx0aW5pdEdyaWQgPSB0cnVlO1xuXHRjb250ZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdG1haW5GaWVsZCE6IHN0cmluZztcblx0bW9kZWxOYW1lITogc3RyaW5nO1xuXHR1cHNlcnQgPSBpbnB1dDxhbnk+KCk7XG5cdHN1YkluZGV4ITogbnVtYmVyO1xuXHRyb3dEYXRhID0gaW5wdXQ8YW55Pih1bmRlZmluZWQpO1xuXHRzZWFyY2hQcm0gPSBpbnB1dDxTZWFyY2g+KHt9KTtcblx0cmF3UHJtPzogU2VhcmNoO1xuXHRkZWxldGVFbWl0ID0gb3V0cHV0PG51bWJlcltdPigpO1xuXHRhZGRFbWl0ID0gb3V0cHV0KCk7XG5cdGFkZFR5cGUgPSBpbnB1dDwnaGFuZGxlJyB8ICdzZWxlY3QnIHwgJ25vbmUnPigpO1xuXHRzZWxlY3REYXRhID0gaW5wdXQ8YW55W10+KCk7XG5cdHNob3dBY3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblx0YWN0UG9zID0gaW5wdXQ8J3RvcCcgfCAnYm90dG9tJz4oJ2JvdHRvbScpO1xuXHRhdXRoTGV2ZWwgPSBpbnB1dDxudW1iZXI+KC0xKTtcblx0aHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblx0cmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblx0bmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHNob3dEZWxldGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblx0Z3JpZERpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdGFkZFNvcnQgPSBpbnB1dDxzdHJpbmc+KClcblxuXHRyaWNoTXVsdE1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXI6IGFueTtcblx0aG9yaXpvbnRhbFNjcm9sbEJhckhlaWdodCA9IDA7XG5cdHZlcnRpY2FsU2Nyb2xsQmFyT2JzZXJ2ZXI6IGFueTtcblx0dmVydGljYWxTY3JvbGxCYXJXaWR0aCA9IDA7XG5cdGdyaWRIZWlnaHQgPSAwO1xuXHRzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcblx0bm9Sb3dzID0gdHJ1ZTtcblx0c2hvd0hvcml6b250YWwgPSBmYWxzZTtcblx0ZHJhZ0JlZm9yZUluZGV4ID0gLTE7XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuc2V0U2Nyb2xsSGVpZ2h0KCk7XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGlvbjogQWN0aW9uU2VydmljZSkge1xuXHRcdGNvbnN0IHNlYXJjaFBybSQgPSB0b09ic2VydmFibGUodGhpcy5zZWFyY2hQcm0pLnN1YnNjcmliZSgoc2VhcmNoUHJtKSA9PiB7XG5cdFx0XHRpZiAoc2VhcmNoUHJtLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMucmF3UHJtID0gc2VhcmNoUHJtO1xuXHRcdFx0XHRzZWFyY2hQcm0kLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbHVtbkRlZnMgPSBhd2FpdCB0aGlzLnNldFJpY2hWYWx1ZSgpO1xuXHRcdFx0XHR0aGlzLmNvbHVtbkRlZnMgPSBncmlkVXRpbHMuaGFuZGxlSTE4bktleSh0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnMhIHx8IFtdLCB0aGlzLmkxOG5TZXJ2aWNlKTtcblx0XHRcdFx0dGhpcy5tYWluRmllbGQgPSB0aGlzLnRvT3B0aW9ucygpLm1haW5GaWVsZCE7XG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lID0gdGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUhO1xuXHRcdFx0XHRpZiAoIXRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LmZpbmQoKHY6IGFueSkgPT4gdi5zdWJNb2RlbE5hbWUgPT09IHRoaXMubW9kZWxOYW1lKSkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LnB1c2goe1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lOiB0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZrOiB0aGlzLnRvT3B0aW9ucygpLmZrLFxuXHRcdFx0XHRcdFx0c3ViRGF0YTogW10sXG5cdFx0XHRcdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0XHRcdGxvZ3RtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc3ViSW5kZXggPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0Py5maW5kSW5kZXgoKHY6IGFueSkgPT4gdi5zdWJNb2RlbE5hbWUgPT09IHRoaXMubW9kZWxOYW1lKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hY3Rpb24uc2VhcmNoTW9uaXRvcih0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnJvd0RhdGEoKSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnRvT3B0aW9ucygpLmNsaWVudEZ1bmMgPSAoKSA9PiBvZih7IGRhdGE6IHRoaXMucm93RGF0YSgpLCB0b3RhbE51bTogdGhpcy5yb3dEYXRhKCk/Lmxlbmd0aCB9KTtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5nZXRDbGllbnREYXRhKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0sIDEwMCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdERhdGEoKSAmJiB0aGlzLnNlbGVjdERhdGEoKSEubGVuZ3RoID4gMCAmJiB0aGlzLmdyaWQpIHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUFkZGVkUm93cyh0aGlzLnNlbGVjdERhdGEoKSEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLnRvT3B0aW9ucygpLnByZVNlYXJjaCAmJlxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLnNldFNlYXJjaCh7IGNvbHVtbkZpbHRlcnM6IHRoaXMudG9PcHRpb25zKCkucHJlU2VhcmNoIS5jb2x1bW5GaWx0ZXJzIH0sIHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHR0aGlzLmVkaXRpbmdGaXgoKTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaTE4blNlcnZpY2UuY2hhbmdlLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHR0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmFwaS5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmluaXRHcmlkID0gZmFsc2U7XG5cdFx0XHR0aGlzLmxvY2FsZVRleHQgPSBncmlkVXRpbHMuZ2V0TG9jYWxUZXh0KHJlcyk7XG5cdFx0XHR0aGlzLmNvbHVtbkRlZnMgPSBncmlkVXRpbHMuaGFuZGxlSTE4bktleSh0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnMhLCB0aGlzLmkxOG5TZXJ2aWNlKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRHcmlkID0gdHJ1ZTtcblx0XHRcdH0sIDEwMCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5sb2NhbGVUZXh0ID0gZ3JpZFV0aWxzLmdldExvY2FsVGV4dCh0aGlzLmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5nKTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHt9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyKSB7XG5cdFx0XHR0aGlzLmhvcml6b250YWxTY3JvbGxCYXJPYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnZlcnRpY2FsU2Nyb2xsQmFyT2JzZXJ2ZXIpIHtcblx0XHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0R3JpZCgpOiBBZ0dyaWRBbmd1bGFyIHtcblx0XHRyZXR1cm4gdGhpcy5ncmlkO1xuXHR9XG5cblx0b25HcmlkUmVhZHkoZTogYW55KSB7XG5cdFx0dGhpcy5pbml0R3JpZEhlaWdodCgpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5nZXREYXRhKCk7XG5cdFx0fSwgMTAwKTtcblx0fVxuXG5cdG9uU2VsZWN0aW9uQ2hhbmdlZChldmVudDogYW55KTogYW55IHtcblx0XHR0aGlzLnNlbGVjdGVkUm93cy5zZXQoZ3JpZFV0aWxzLmNhbGNSb3dJZHMoZXZlbnQuYXBpLCB0aGlzLnRvT3B0aW9ucygpPy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnKSk7XG5cdH1cblxuXHRvblJvd0dyb3VwT3BlbmVkKCkge1xuXHRcdHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHNldFJpY2hWYWx1ZSgpIHtcblx0XHRsZXQgY29sID0gdGhpcy50b09wdGlvbnMoKS5jb2x1bW5EZWZzISB8fCBbXTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcHJvY2Vzc2VkQ29scyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRjb2wubWFwKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZmllbGRJZCcpICYmIChpdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InIHx8IGl0ZW0uY2VsbEVkaXRvciA9PSAnYWdTZWxlY3RDZWxsRWRpdG9yJykpIHtcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXM6IGFueSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKCFpdGVtLmNlbGxFZGl0b3JQYXJhbXMgfHwgIWl0ZW0uY2VsbEVkaXRvclBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVzJykpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ3NlbGVjdERhdGEnKSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcyA9IGF3YWl0IGl0ZW0uc2VsZWN0RGF0YSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2VsbEVkaXRvclBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5pdGVtLmNlbGxFZGl0b3JQYXJhbXMsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0TWF4SGVpZ2h0OiAyMDAsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uY2VsbEVkaXRvclBhcmFtcyAmJiBpdGVtLmNlbGxFZGl0b3JQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlcycpKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlcyA9IGl0ZW0uY2VsbEVkaXRvclBhcmFtcy52YWx1ZXM7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2VsbEVkaXRvclBhcmFtcy52YWx1ZUxpc3RNYXhIZWlnaHQgPSAyMDA7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2VsbEVkaXRvclBhcmFtcy5zdXBwcmVzc011bHRpU2VsZWN0UGlsbFJlbmRlcmVyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCBpc1N0cmluZyA9IHZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xuXHRcdFx0XHRcdFx0aWYgKCFpc1N0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyA9IHZhbHVlcztcblx0XHRcdFx0XHRcdFx0aXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlcyA9IHZhbHVlcy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdGl0ZW0udmFsdWVGb3JtYXR0ZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb25zID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLnJhd09wdGlvbnMgYXMgYW55W107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMudmFsdWUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb25zID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLnJhd09wdGlvbnMgYXMgYW55W107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LnZhbHVlID09IHBhcmFtcy52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uID8gb3B0aW9uLmxhYmVsIDogcGFyYW1zLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgdmFsdWVzOiBhbnkgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgcGFyYW1zLnZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMgPSBwYXJhbXMudmFsdWUuc3BsaXQoJywnKS5tYXAoKHY6IGFueSkgPT4gKCFpc05hTih2KSA/IE51bWJlcih2KSA6IHYpKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzID0gcGFyYW1zLnZhbHVlIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gdmFsdWVzLmluY2x1ZGVzKG9wdC52YWx1ZSkpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdGlvbi5sZW5ndGggPiAwID8gb3B0aW9uLm1hcCgodikgPT4gdi5sYWJlbCkgOiBwYXJhbXMudmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpdGVtLnZhbHVlR2V0dGVyID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3BhbXJhbXMtLS0tJyxwYXJhbXMsaXRlbS5maWVsZClcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5jZWxsRWRpdG9yID09ICdhZ1JpY2hTZWxlY3RDZWxsRWRpdG9yJyAmJiBwYXJhbXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShpdGVtLmZpZWxkKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBwYXJhbXMuZGF0YVtpdGVtLmZpZWxkXSA9PSAnc3RyaW5nJyA/IHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdLnNwbGl0KCcsJykgOiBwYXJhbXMuZGF0YVtpdGVtLmZpZWxkXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpdGVtLnZhbHVlUGFyc2VyID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3BhcmFtcy0tLS0nLHBhcmFtcylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb25zID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLnJhd09wdGlvbnMgYXMgYW55W107XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC5sYWJlbCA9PT0gcGFyYW1zLm5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uID8gb3B0aW9uLnZhbHVlIDogcGFyYW1zLm5ld1ZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlcyA9IHZhbHVlcztcblx0XHRcdFx0XHRcdFx0aXRlbS52YWx1ZUdldHRlciA9IChwYXJhbXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InICYmIHBhcmFtcy5kYXRhLmhhc093blByb3BlcnR5KGl0ZW0uZmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdID09ICdzdHJpbmcnID8gcGFyYW1zLmRhdGFbaXRlbS5maWVsZF0uc3BsaXQoJywnKSA6IHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyYW1zLmRhdGFbaXRlbS5maWVsZF07XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBpdGVtO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcHJvY2Vzc2VkQ29scztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBjb2x1bW5zOicsIGVycm9yKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxuXG5cdGdldEVudW1zKGlkOiBudW1iZXIpIHtcblx0XHRyZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdCgnZ2V0JywgeyBpZDogTnVtYmVyKGlkKSwgbW9kZWxOYW1lOiAnTW9kZWxGaWVsZCcsIHByZWxvYWRzOiBbJ0VudW0nXSB9KSk7XG5cdH1cblxuXHRoYW5kbGVTZWxlY3Rpb25zKHN0YXJ0Um93OiBudW1iZXIpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGlvbktleXMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdGdyaWRVdGlscy5zZWxlY3Rpb25IYW5kbGVyKHRoaXMuZ3JpZC5hcGksIHRoaXMuc2VsZWN0aW9uS2V5cygpLCBzdGFydFJvdywgdGhpcy50b09wdGlvbnMoKT8uZGF0YUtleSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXREYXRhKCkge1xuXHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2VhcmNoUHJtKCkubW9kZWxOYW1lKSByZXR1cm47XG5cdFx0XHR0aGlzLmNhbmNlbFNlbGVjdCgpO1xuXHRcdFx0Y29uc3Qgc2VhcmNoID0gdGhpcy5hY3Rpb24uZ2V0U2VhcmNoKHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lKTtcblx0XHRcdHRoaXMudG9PcHRpb25zKCk/LnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScgPyB0aGlzLmdldFNlcnZlckRhdGEoc2VhcmNoKSA6IHRoaXMuZ2V0Q2xpZW50RGF0YShzZWFyY2gpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0U2VydmVyRGF0YShzZWFyY2g/OiBTZWFyY2gpIHtcblx0XHR0aGlzLmdyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKCdzZXJ2ZXJTaWRlRGF0YXNvdXJjZScsIHtcblx0XHRcdGdldFJvd3M6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2VhcmNoUHJtOiBTZWFyY2ggPSB7XG5cdFx0XHRcdFx0Li4udGhpcy5zZWFyY2hQcm0oKSxcblx0XHRcdFx0XHRvZmZzZXQ6IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93LFxuXHRcdFx0XHRcdGNvbHVtbkZpbHRlcnM6IFsuLi4odGhpcy5yYXdQcm0/LmNvbHVtbkZpbHRlcnMgfHwgW10pLCAuLi4oc2VhcmNoPy5jb2x1bW5GaWx0ZXJzIHx8IFtdKV0sXG5cdFx0XHRcdFx0c29ydHM6IHNlYXJjaD8uc29ydHM/Lmxlbmd0aCA/IHNlYXJjaC5zb3J0cyA6IHRoaXMucmF3UHJtPy5zb3J0cz8ubGVuZ3RoID8gdGhpcy5yYXdQcm0uc29ydHMgOiBkZWZhdWx0U29ydHMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMuaGFuZGxlU2VydmVyVHJlZShwYXJhbXMsIHNlYXJjaFBybSk7XG5cdFx0XHRcdHRoaXMudG9PcHRpb25zKClcblx0XHRcdFx0XHQuc2VydmVyRnVuYz8uKHNlYXJjaFBybSlcblx0XHRcdFx0XHQuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uc2V0UGFnZSh7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0Um93OiBwYXJhbXMucmVxdWVzdC5zdGFydFJvdyxcblx0XHRcdFx0XHRcdFx0ZW5kUm93OiBwYXJhbXMucmVxdWVzdC5lbmRSb3chIDwgcmVzLnRvdGFsTnVtID8gcGFyYW1zLnJlcXVlc3QuZW5kUm93IDogcmVzLnRvdGFsTnVtLFxuXHRcdFx0XHRcdFx0XHR0b3RhbDogcmVzLnRvdGFsTnVtLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRwYXJhbXMuc3VjY2Vzcyh7IHJvd0RhdGE6IHJlcy5kYXRhIH0pO1xuXHRcdFx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlU2VsZWN0aW9ucyhwYXJhbXMucmVxdWVzdC5zdGFydFJvdyB8fCAwKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVTZXJ2ZXJUcmVlKHBhcmFtczogYW55LCBzZWFyY2hQcm06IFNlYXJjaCkge1xuXHRcdGlmICghdGhpcy50b09wdGlvbnMoKS50cmVlRGF0YSkgcmV0dXJuO1xuXHRcdGlmIChwYXJhbXMucmVxdWVzdC5ncm91cEtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgPSBzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZmlsdGVyKChjb2x1bW5GaWx0ZXIpID0+IGNvbHVtbkZpbHRlci5jb2x1bW5GaWVsZCAhPT0gJ3BpZCcpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgPSBbXG5cdFx0XHRcdC8vIC4uLihzZWFyY2hQcm0uY29sdW1uRmlsdGVycyB8fCBbXSksXG5cdFx0XHRcdHsgY29sdW1uRmllbGQ6ICdwaWQnLCB0eXBlOiAnZXEnLCBmaXRlcjogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzW3BhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cy5sZW5ndGggLSAxXSB9LFxuXHRcdFx0XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCFzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZmluZCgoY29sdW1uRmlsdGVyKSA9PiBjb2x1bW5GaWx0ZXIuY29sdW1uRmllbGQgPT09ICdwaWQnKSkge1xuXHRcdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IFsuLi4oc2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgfHwgW10pLCB7IGNvbHVtbkZpZWxkOiAncGlkJywgdHlwZTogJ2VxJywgZml0ZXI6IDAgfV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNlYXJjaFBybS5wcmVsb2FkcyA9IFsnY2hpbGRyZW4nXTtcblx0fVxuXG5cdGdldENsaWVudERhdGEoc2VhcmNoPzogU2VhcmNoKSB7XG5cdFx0Y29uc3Qgc2VhcmNoUHJtOiBTZWFyY2ggPSB7XG5cdFx0XHQuLi50aGlzLnNlYXJjaFBybSgpLFxuXHRcdFx0bGltaXQ6IENMSUVOVExJTUlULFxuXHRcdFx0Y29sdW1uRmlsdGVyczogWy4uLih0aGlzLnJhd1BybT8uY29sdW1uRmlsdGVycyB8fCBbXSksIC4uLihzZWFyY2g/LmNvbHVtbkZpbHRlcnMgfHwgW10pXSxcblx0XHRcdHNvcnRzOiBzZWFyY2g/LnNvcnRzPy5sZW5ndGggPyBzZWFyY2guc29ydHMgOiBkZWZhdWx0U29ydHMsXG5cdFx0fTtcblx0XHR0aGlzLmhhbmRsZUNsaWVudFRyZWUoc2VhcmNoUHJtKTtcblx0XHR0aGlzLnRvT3B0aW9ucygpXG5cdFx0XHQuY2xpZW50RnVuYz8uKHNlYXJjaFBybSlcblx0XHRcdC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uLnNldFBhZ2Uoe1xuXHRcdFx0XHRcdHRvdGFsOiByZXMudG90YWxOdW0sXG5cdFx0XHRcdFx0bW9kZTogJ2NsaWVudCcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmdyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKCdyb3dEYXRhJywgcmVzLmRhdGEpO1xuXHRcdFx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHRcdFx0XHR0aGlzLmhhbmRsZVNlbGVjdGlvbnMoMCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZUNsaWVudFRyZWUoc2VhcmNoUHJtOiBTZWFyY2gpIHtcblx0XHRpZiAoIXRoaXMudG9PcHRpb25zKCkudHJlZURhdGEpIHJldHVybjtcblx0XHRjb25zdCBwcmVsb2FkczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMudG9PcHRpb25zKCkudHJlZUxldmVsITsgaSsrKSB7XG5cdFx0XHRwcmVsb2Fkcy5wdXNoKEFycmF5KGkpLmZpbGwoJ2NoaWxkcmVuJykuam9pbignLicpKTtcblx0XHR9XG5cdFx0c2VhcmNoUHJtLnByZWxvYWRzID0gcHJlbG9hZHM7XG5cdH1cblxuXHRjZWxsVmFsdWVDaGFuZ2VkKGU6IENlbGxWYWx1ZUNoYW5nZWRFdmVudCkge1xuXHRcdGxldCB7XG5cdFx0XHRjb2xEZWY6IHsgZmllbGQsIGhlYWRlck5hbWUsIGNlbGxFZGl0b3IsIGNlbGxFZGl0b3JQYXJhbXMgfSxcblx0XHRcdG5ld1ZhbHVlLFxuXHRcdFx0b2xkVmFsdWUsXG5cdFx0XHRyb3dJbmRleCxcblx0XHRcdGRhdGE6IHsgaWQgfSxcblx0XHR9ID0gZTtcblx0XHRjb25zb2xlLmxvZygnZS0tLS0tLScsIGUpO1xuXHRcdGlmIChjZWxsRWRpdG9yID09ICdhZ1JpY2hTZWxlY3RDZWxsRWRpdG9yJyAmJiBjZWxsRWRpdG9yUGFyYW1zICYmIGNlbGxFZGl0b3JQYXJhbXMubXVsdGlTZWxlY3QpIHtcblx0XHRcdG5ld1ZhbHVlID0gbmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gMCA/IG5ld1ZhbHVlLmpvaW4oJywnKSA6ICcnO1xuXHRcdFx0dGhpcy5yaWNoTXVsdE1hcFtmaWVsZCFdID0gbmV3VmFsdWU7XG5cdFx0fVxuXHRcdGlmICghaWQpIHtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIE9iamVjdC5hc3NpZ24oeyAuLi5lLmRhdGEgfSwgdGhpcy5yaWNoTXVsdE1hcCkpO1xuXHRcdFx0aWYgKGZpZWxkID09IHRoaXMubWFpbkZpZWxkKSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyBmaWVsZCEsIHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBpZDogMCwgbGFiZWw6IGhlYWRlck5hbWUgfSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpZCkge1xuXHRcdFx0Y29uc3QgZmllbGRzdHIgPSBgJHtmaWVsZH1gO1xuXHRcdFx0bGV0IG86IGFueTtcblx0XHRcdGlmICh0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5oYXMocm93SW5kZXghKSkge1xuXHRcdFx0XHRvID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZ2V0KHJvd0luZGV4ISk7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbZmllbGRzdHJdOiBuZXdWYWx1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gPSB7IGlkOiBpZCwgW2ZpZWxkc3RyXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIG8pO1xuXHRcdFx0bGV0IG9sZCA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmdldChyb3dJbmRleCEgKyBmaWVsZCEpO1xuXHRcdFx0aWYgKG9sZCkge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRcdG9sZFZhbHVlOiBvbGQub2xkVmFsdWUsXG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0XHRuZXdWYWx1ZTogbmV3VmFsdWUsXG5cdFx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXG5cdGhhbmRsZUFkZGVkUm93cyhhZGRlZFJvd3M6IGFueVtdKSB7XG5cdFx0bGV0IGhlYWRlck5hbWUgPSAnJztcblx0XHR0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0uZmllbGQgPT0gdGhpcy5tYWluRmllbGQpIHtcblx0XHRcdFx0aGVhZGVyTmFtZSA9IGl0ZW0uaGVhZGVyTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZih0aGlzLmFkZFNvcnQoKSl7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnYWRkLS0tLS0nLHRoaXMuYWRkU29ydCgpKVxuXHRcdFx0Ly8gbGV0IGxvZyA9IG5ldyBNYXAoKVxuXHRcdFx0dGhpcy5zZWxlY3REYXRhKCkhLmZvckVhY2goKGl0ZW06YW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRcdGxldCBsYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4KHJvd0RhdGEsKHY6YW55KSA9PiB2W3RoaXMuYWRkU29ydCgpIV0gPT0gaXRlbVt0aGlzLmFkZFNvcnQoKSFdLHRoaXMpO1xuXHRcdFx0XHRsYXN0SW5kZXggPSBsYXN0SW5kZXggPT0gLTEgPyByb3dEYXRhLmxlbmd0aCAtMSA6IGxhc3RJbmRleDtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5ncmlkLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkSW5kZXg6IGxhc3RJbmRleCArIDEsYWRkOiBbaXRlbV0gfSk7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmZvckVhY2goKHZhbHVlOmFueSxrZXk6YW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IGluZGV4ID0ga2V5Lm1hdGNoKC9eXFxkKy8pWzBdO1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdpbmRleC0tLS0nLGluZGV4KVxuXHRcdFx0XHRcdGNvbnN0IGluc2VydEluZGV4ID0gbGFzdEluZGV4ICsgMTtcblx0XHRcdFx0XHRpZihpbmRleCA9PSBpbnNlcnRJbmRleCl7XG5cdFx0XHRcdFx0XHRjb25zdCByZXBsYWNlSW5kZXggPSBpbnNlcnRJbmRleCArIDE7XG5cdFx0XHRcdFx0XHRsZXQgbmV3S2V5ID0ga2V5LnJlcGxhY2UoL15cXGQrLyxyZXBsYWNlSW5kZXgpO1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KG5ld0tleSx2YWx1ZSlcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRsZXQgbWFwRGF0YSA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmdldChsYXN0SW5kZXgrMSk7XG5cdFx0XHRcdGlmKG1hcERhdGEpe1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShsYXN0SW5kZXgrMSlcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQobGFzdEluZGV4KzIsbWFwRGF0YSlcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHQhLmFkZC5mb3JFYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbm9kZS0tLS0nLG5vZGUpXG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KG5vZGUucm93SW5kZXgsIG5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KG5vZGUucm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogbm9kZS5kYXRhW3RoaXMubWFpbkZpZWxkXSxcblx0XHRcdFx0XHRcdGlkOiAwLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbGFzdEluZGV4JyxsYXN0SW5kZXgpXG5cdFx0XHR9KVxuXHRcdFx0Ly8gdGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10gPSBsb2dcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5ncmlkLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBhZGRlZFJvd3MgfSk7XG5cdFx0XHRyZXN1bHQhLmFkZC5mb3JFYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgcm93SW5kZXggPSB0aGlzLmdyaWQuYXBpLmdldFJvd05vZGUobm9kZS5pZCk/LnJvd0luZGV4O1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBub2RlLmRhdGEpO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5vZGUuZGF0YVt0aGlzLm1haW5GaWVsZF0sXG5cdFx0XHRcdFx0aWQ6IDAsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVx0XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHQvLyBjb25zb2xlLmxvZygndXBzZXJ0LS0tLS0nLHRoaXMudXBzZXJ0KCkpXG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHR9XG5cblx0aGFuZGxlRGVsZXRlZFJvd3MoZGVsZXRlZFJvd3M6IGFueVtdKSB7XG5cdFx0Y29uc3QgcmVtb3ZlSW5kZXhlcyA9IHRoaXMuZ3JpZC5hcGkuZ2V0U2VsZWN0ZWROb2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZS5yb3dJbmRleCk7XG5cdFx0cmVtb3ZlSW5kZXhlcy5mb3JFYWNoKChyb3dJbmRleDogYW55KSA9PiB7XG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5kZWxldGUocm93SW5kZXghKTtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShyb3dJbmRleCEgKyB0aGlzLm1haW5GaWVsZCEpO1xuXHRcdH0pO1xuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmdyaWQuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IGRlbGV0ZWRSb3dzIH0pO1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRzZWxlY3RSb3dzRGVsZXRlZChkZWxldGVkUm93czphbnlbXSl7XG5cdFx0bGV0IGhlYWRlck5hbWUgPSAnJztcblx0XHR0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0uZmllbGQgPT0gdGhpcy5tYWluRmllbGQpIHtcblx0XHRcdFx0aGVhZGVyTmFtZSA9IGl0ZW0uaGVhZGVyTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdyaWQuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IGRlbGV0ZWRSb3dzIH0pO1xuXHRcdHJlc3VsdD8ucmVtb3ZlLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdub2RlLS0tJyxub2RlLnNvdXJjZVJvd0luZGV4KTtcblx0XHRcdGxldCBrZXkgPSBub2RlLnNvdXJjZVJvd0luZGV4ICsgdGhpcy5tYWluRmllbGQhXG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KVxuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKG5vZGUuc291cmNlUm93SW5kZXgpXG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTphbnksa2V5OmFueSkgPT4ge1xuXHRcdFx0XHRpZighdmFsdWUuaWQgJiYga2V5ID4gbm9kZS5zb3VyY2VSb3dJbmRleCl7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGtleSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmZvckVhY2goKHZhbHVlOmFueSxrZXk6YW55KSA9PiB7XG5cdFx0XHRcdGxldCBpbmRleCA9IGtleS5tYXRjaCgvXlxcZCsvKVswXTtcblx0XHRcdFx0aWYoIXZhbHVlLmlkICYmIGluZGV4ID4gbm9kZS5zb3VyY2VSb3dJbmRleCl7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKGtleSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9KVxuXHRcdHRoaXMuZ3JpZC5hcGkuZm9yRWFjaE5vZGUoKG5vZGU6YW55KSA9PiB7XG5cdFx0XHRjb25zdCByb3dJbmRleCA9IG5vZGUucm93SW5kZXg7XG5cdFx0XHRpZighbm9kZS5kYXRhLmlkKXtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4ISwgbm9kZS5kYXRhKTtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KHJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISwge1xuXHRcdFx0XHRcdG5ld1ZhbHVlOiBub2RlLmRhdGFbdGhpcy5tYWluRmllbGRdLFxuXHRcdFx0XHRcdGlkOiAwLFxuXHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOmFueSxrZXk6YW55KSA9PiB7XG5cdFx0XHRcdFx0aWYodmFsdWUuaWQgPT09IG5vZGUuZGF0YS5pZCAmJiBrZXkgIT0gcm93SW5kZXgpe1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGtleSlcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCx2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmZvckVhY2goKHZhbHVlOmFueSxrZXk6YW55KSA9PiB7XG5cdFx0XHRcdFx0aWYodmFsdWUuaWQgPT0gbm9kZS5kYXRhLmlkKXtcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGtleS5tYXRjaCgvXlxcZCsvKVswXTtcblx0XHRcdFx0XHRcdGlmKGluZGV4ICE9IHJvd0luZGV4KXtcblx0XHRcdFx0XHRcdFx0bGV0IG5ld0tleSA9IGtleS5yZXBsYWNlKC9eXFxkKy8scm93SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KVxuXHRcdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQobmV3S2V5LHZhbHVlKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHR9KVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHRcdC8vIGNvbnNvbGUubG9nKCdyZXN1bHQtLS0tLScsIHRoaXMudXBzZXJ0KCkpXG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmdyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKCdyb3dEYXRhJywgW10pO1xuXHRcdHRoaXMudXBzZXJ0KCkhLnN1YnNlcnQgPSBbXTtcblx0fVxuXG5cdGFkZFJvdygpIHtcblx0XHRpZiAodGhpcy5hZGRUeXBlKCkgPT0gJ2hhbmRsZScpIHtcblx0XHRcdGxldCBpdGVtID0gdHlwZW9mIHRoaXMudG9PcHRpb25zKCkuYWRkRGF0YUNiID09ICdmdW5jdGlvbicgPyB0aGlzLnRvT3B0aW9ucygpLmFkZERhdGFDYigpIDoge307XG5cdFx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0KSB7XG5cdFx0XHRcdGxldCB0b3RhbENvdW50ID0gdGhpcy5ncmlkLmFwaS5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuXHRcdFx0XHRpdGVtW3RoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCFdID0gdG90YWxDb3VudCArIDE7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdyaWQuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtpdGVtXSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZGRFbWl0LmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0fVxuXG5cdGRlbFJvd3MoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ3JpZC5hcGkuZ2V0U2VsZWN0ZWROb2RlcygpO1xuXHRcdGNvbnN0IHNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkTm9kZXMubWFwKChub2RlKSA9PiBub2RlLmRhdGEpIHx8IFtdO1xuXHRcdGxldCBpZHMgPSBzZWxlY3RlZERhdGEubWFwKChkYXRhKSA9PiBkYXRhLmlkKS5maWx0ZXIoKHYpID0+IHYpIHx8IFtdO1xuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5kZWxldGVFbWl0LmVtaXQoaWRzKTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkRGF0YS5sZW5ndGggPiAwICYmIGlkcy5sZW5ndGggPT0gMCkge1xuXHRcdFx0dGhpcy5oYW5kbGVEZWxldGVkUm93cyhzZWxlY3RlZERhdGEpO1xuXHRcdH1cblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHR9XG5cblx0c2V0U2Nyb2xsSGVpZ2h0KGhlaWdodD86IHN0cmluZykge1xuXHRcdGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCwgJ21heC1oZWlnaHQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aGVpZ2h0ID0gaGVpZ2h0IHx8IHRoaXMudG9PcHRpb25zKCkuc2Nyb2xsSGVpZ2h0O1xuXHRcdGlmIChoZWlnaHQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCwgJ21heC1oZWlnaHQnLCBoZWlnaHQpO1xuXHRcdH1cblx0fVxuXG5cdGluaXRHcmlkSGVpZ2h0KCkge1xuXHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0XHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhckhlaWdodCA9IGVudHJ5LnRhcmdldC5jbGllbnRIZWlnaHQ7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLmhvcml6b250YWxTY3JvbGxCYXJPYnNlcnZlci5vYnNlcnZlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1ib2R5LWhvcml6b250YWwtc2Nyb2xsJykpO1xuXHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdFx0ZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdFx0XHR0aGlzLnZlcnRpY2FsU2Nyb2xsQmFyV2lkdGggPSBlbnRyeS50YXJnZXQuY2xpZW50V2lkdGg7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLnZlcnRpY2FsU2Nyb2xsQmFyT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctYm9keS12ZXJ0aWNhbC1zY3JvbGwnKSk7XG5cdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgJzEwMCUnKTtcblx0XHR0aGlzLnNldFNjcm9sbEhlaWdodCgpO1xuXHR9XG5cblx0Y2FsY0dyaWRNYXJnaW4oKSB7XG5cdFx0Y29uc3QgbWFyZ2luID0gdGhpcy5zaG93QWN0KCkgJiYgdGhpcy5hdXRoTGV2ZWwoKSA+PSAzICYmICh0aGlzLmFkZFR5cGUoKSAhPSAnbm9uZScgfHwgdGhpcy5zaG93RGVsZXRlKCkpID8gMiA6IDE7XG5cdFx0Y29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1yb290LXdyYXBwZXInKSkuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpLFxuXHRcdCk7XG5cdFx0cmV0dXJuIE1hdGgubWluKDIsIG1hcmdpbiArIGJvcmRlckJvdHRvbSk7XG5cdH1cblxuXHRnZXRDb250YWluZXJIZWlnaHQoKSB7XG5cdFx0bGV0IGNvbnRhaW5lciA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctY2VudGVyLWNvbHMtY29udGFpbmVyJykpLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpLFxuXHRcdCk7XG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcblx0fVxuXG5cdGFqdXN0R3JpZEhlaWdodCgpIHtcblx0XHRsZXQgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXJIZWlnaHQoKTtcblx0XHRsZXQgaGVhZGVySGVpZ2h0ID0gdGhpcy5ncmlkT3B0aW9ucygpLmhlYWRlckhlaWdodCA/PyA0OTtcblx0XHRsZXQgbWFyZ2luID0gdGhpcy5jYWxjR3JpZE1hcmdpbigpO1xuXHRcdGxldCB0b3RhbCA9IGNvbnRhaW5lciArIG1hcmdpbiArIGhlYWRlckhlaWdodDtcblx0XHRjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0b3RhbCwgaGVhZGVySGVpZ2h0ICsgNDIgKyBtYXJnaW4pO1xuXHRcdHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7aGVpZ2h0ICsgdGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFySGVpZ2h0fXB4YCk7XG5cdFx0XHR0aGlzLmFqdXN0R3JpZFN0YXRlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhanVzdEdyaWRTdGF0ZSgpIHtcblx0XHR0aGlzLm5vUm93cyA9IHRoaXMuZ3JpZC5hcGkuZ2V0RGlzcGxheWVkUm93Q291bnQoKSA9PT0gMDtcblx0XHR0aGlzLm5vUm93cyA/IHRoaXMuZ3JpZC5hcGkuc2hvd05vUm93c092ZXJsYXkoKSA6IHRoaXMuZ3JpZC5hcGkuaGlkZU92ZXJsYXkoKTtcblx0XHR0aGlzLnNob3dIb3Jpem9udGFsID0gdGhpcy5hY3RQb3MoKSA9PSAnYm90dG9tJyAmJiAodGhpcy5ub1Jvd3MgfHwgISF0aGlzLnZlcnRpY2FsU2Nyb2xsQmFyV2lkdGgpO1xuXHR9XG5cblx0Y2FuY2VsU2VsZWN0KCkge1xuXHRcdHRoaXMuZ2V0R3JpZCgpLmFwaS5kZXNlbGVjdEFsbCgpO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbXSk7XG5cdH1cblxuXHRlZGl0aW5nRml4KCkge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcblx0XHRcdGlmICghdGhpcy5ncmlkPy5hcGk/LmdldEVkaXRpbmdDZWxscygpPy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZ3JpZEVsZW1lbnQ6IGFueSA9IHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1yb290LXdyYXBwZXInKTtcblx0XHRcdGlmICghZ3JpZEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0XHR0aGlzLmdyaWQuYXBpLnN0b3BFZGl0aW5nKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cm93RHJhZ0VudGVyKGV2ZW50OiBhbnkpIHtcblx0XHRjb25zb2xlLmxvZygnZXZlbnQtLS0nLCBldmVudCk7XG5cdFx0dGhpcy5kcmFnQmVmb3JlSW5kZXggPSBldmVudC5vdmVySW5kZXg7XG5cdH1cblxuXHRvblJvd0RyYWdFbmQoZXZlbnQ6IFJvd0RyYWdFbmRFdmVudCkge1xuXHRcdC8vIGNvbnNvbGUubG9nKCdldmVudC0tLS0nLCBldmVudC5ub2RlLGV2ZW50Lm92ZXJOb2RlKVxuXHRcdC8vIGNvbnNvbGUubG9nKCfljp/lp4vntKLlvJUtLS0tJywgdGhpcy5kcmFnQmVmb3JlSW5kZXgpXG5cdFx0Ly8gY29uc29sZS5sb2coJ+aLluaLveS5i+WQjue0ouW8lS0tLS0nLGV2ZW50Lm92ZXJJbmRleClcblx0XHRpZiAoIXRoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCkgcmV0dXJuO1xuXHRcdGlmICh0aGlzLmRyYWdCZWZvcmVJbmRleCA9PSBldmVudC5vdmVySW5kZXgpIHJldHVybjtcblx0XHRsZXQgY29sID0gZXZlbnQuYXBpLmdldENvbHVtbkRlZnMoKTtcblx0XHRsZXQgY29sSXRlbTogYW55ID0gY29sPy5maW5kKCh2OiBhbnkpID0+IHYuZmllbGQgPT09IHRoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCEpIHx8IHt9O1xuXHRcdC8vIGNvbnNvbGUubG9nKFwicm93RGF0YS0tLVwiLHRoaXMucm93RGF0YSgpKVxuXHRcdGxldCBtYXAgPSBuZXcgTWFwKCk7XG5cdFx0bGV0IGxvZ01hcCA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLmdyaWQ/LmFwaS5mb3JFYWNoTm9kZSgobm9kZSwgaW5kZXgpID0+IHtcblx0XHRcdGxldCBpZCA9IG5vZGUuZGF0YS5pZDtcblx0XHRcdGxldCBpc01vdmluZ0Rvd24gPSBldmVudC5vdmVySW5kZXggPiB0aGlzLmRyYWdCZWZvcmVJbmRleDtcblx0XHRcdGlmIChcblx0XHRcdFx0KGlzTW92aW5nRG93biAmJiBpbmRleCA+PSB0aGlzLmRyYWdCZWZvcmVJbmRleCAmJiBpbmRleCA8PSBldmVudC5vdmVySW5kZXgpIHx8XG5cdFx0XHRcdCghaXNNb3ZpbmdEb3duICYmIGluZGV4IDw9IHRoaXMuZHJhZ0JlZm9yZUluZGV4ICYmIGluZGV4ID49IGV2ZW50Lm92ZXJJbmRleClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbm9kZS0tLS0nLG5vZGUuZGF0YSxldmVudC5vdmVySW5kZXgpXG5cdFx0XHRcdGxldCBvbGRWYWx1ZTtcblx0XHRcdFx0aWYgKGluZGV4ID09IGV2ZW50Lm92ZXJJbmRleCkge1xuXHRcdFx0XHRcdG9sZFZhbHVlID0gdGhpcy5kcmFnQmVmb3JlSW5kZXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b2xkVmFsdWUgPSBpc01vdmluZ0Rvd24gPyBpbmRleCArIDEgOiBpbmRleCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ29sZEluZGV4LS0tLScsb2xkVmFsdWUpXG5cdFx0XHRcdGlmICghaWQpIHtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQoXG5cdFx0XHRcdFx0XHRpbmRleCEsXG5cdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG5vZGUuZGF0YSwge1xuXHRcdFx0XHRcdFx0XHRbdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0IV06IGluZGV4ICsgMSxcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV0IG86IGFueTtcblx0XHRcdFx0XHRpZiAodGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uaGFzKG9sZFZhbHVlISkpIHtcblx0XHRcdFx0XHRcdG8gPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5nZXQob2xkVmFsdWUhKTtcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0IV06IGluZGV4ICsgMSB9KTtcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShvbGRWYWx1ZSEpO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ28tLS0tJywgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvID0geyBpZDogaWQsIFt0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhXTogaW5kZXggKyAxIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1hcC5zZXQoaW5kZXghLCBvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgb2xkID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZ2V0KG9sZFZhbHVlISArIHRoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCEpO1xuXHRcdFx0XHRpZiAob2xkKSB7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChpbmRleCEgKyB0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhLCB7XG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogaW5kZXggKyAxLFxuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IG9sZC5vbGRWYWx1ZSxcblx0XHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRcdGxhYmVsOiBjb2xJdGVtWydoZWFkZXJOYW1lJ10gfHwgJ+aOkuW6jycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKG9sZFZhbHVlISArIHRoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxvZ01hcC5zZXQoaW5kZXghICsgdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0ISEsIHtcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBpbmRleCArIDEsXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkVmFsdWUgKyAxLFxuXHRcdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGNvbEl0ZW1bJ2hlYWRlck5hbWUnXSB8fCAn5o6S5bqPJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGxldCBkdDogYW55ID0gW107XG5cdFx0aWYgKHRoaXMudXBzZXJ0KCkpIHtcblx0XHRcdHRoaXMudXBzZXJ0KCkhLnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddID0gbmV3IE1hcChbLi4udGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJyFdLCAuLi5tYXBdKTtcblx0XHRcdHRoaXMudXBzZXJ0KCkhLnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddID0gbmV3IE1hcChbLi4udGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10sIC4uLmxvZ01hcF0pO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0KClbJ3N1YnNlcnQnXVt0aGlzLnN1YkluZGV4XVsnc3ViRGF0YSddID0gZHQ7XG5cdFx0fVxuXG5cdFx0Y29uc29sZS5sb2coJ2RyYWdVcHNlcnQtLS0tJywgdGhpcy51cHNlcnQoKSk7XG5cdH1cbn1cbiIsIkBpZiAoaW5pdEdyaWQpIHtcblx0PGRpdlxuXHRcdCNncmlkQ29udGFpbmVyXG5cdFx0W2NsYXNzXT1cIlxuXHRcdFx0KHRvT3B0aW9ucygpLnRyZWVEYXRhRmllbGQgPyAndHJlZS1ncmlkICcgOiAnJykgK1xuXHRcdFx0J2dyaWQtY29udGFpbmVyIHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiAnICtcblx0XHRcdChhY3RQb3MoKSA9PSAnYm90dG9tJyA/ICdmbGV4LWNvbCcgOiAnZmxleC1jb2wtcmV2ZXJzZScpXG5cdFx0XCI+XG5cdFx0PGFnLWdyaWQtYW5ndWxhclxuXHRcdFx0W3RoZW1lXT1cIm15VGhlbWUoKVwiXG5cdFx0XHRbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcblx0XHRcdFtncmlkT3B0aW9uc109XCJ0b09wdGlvbnMoKVwiXG5cdFx0XHRbbG9jYWxlVGV4dF09XCJsb2NhbGVUZXh0XCJcblx0XHRcdFtjb21wb25lbnRzXT1cImNvbXBvbmVudHNcIlxuXHRcdFx0W3VuZG9SZWRvQ2VsbEVkaXRpbmddPVwidG9PcHRpb25zKCkudW5kb1JlZG9DZWxsRWRpdGluZ1wiXG5cdFx0XHRbdW5kb1JlZG9DZWxsRWRpdGluZ0xpbWl0XT1cInRvT3B0aW9ucygpLnVuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdFwiXG5cdFx0XHQoY2VsbFZhbHVlQ2hhbmdlZCk9XCJjZWxsVmFsdWVDaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHJvd0dyb3VwT3BlbmVkKT1cIm9uUm93R3JvdXBPcGVuZWQoKVwiXG5cdFx0XHQoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbmQpPVwib25Sb3dEcmFnRW5kKCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbnRlcik9XCJyb3dEcmFnRW50ZXIoJGV2ZW50KVwiIC8+XG5cdFx0QGlmIChzaG93QWN0KCkgJiYgYXV0aExldmVsKCkgPj0gMyAmJiAoYWRkVHlwZSgpICE9ICdub25lJyB8fCBzaG93RGVsZXRlKCkpKSB7XG5cdFx0XHRAaWYgKHNob3dIb3Jpem9udGFsKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLWdyYXktMzAwXCI+PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBweS1bNXB4XSBwci1bOHB4XVwiPlxuXHRcdFx0XHRAaWYgKGFkZFR5cGUoKSAhPSAnbm9uZScpIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdGljb249XCJwaSBwaS1wbHVzXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJzdWNjZXNzXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZSgpXCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImFkZFJvdygpXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0XHRAaWYgKHNob3dEZWxldGUoKSkge1xuXHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj1cInBpIHBpLXRyYXNoXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImdyaWREaXNhYmxlKClcIlxuXHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiZGVsUm93cygpXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXHQ8L2Rpdj5cbn1cbiJdfQ==
|
|
730
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBc0IxRCxNQUFNLGFBQWEsR0FBZ0I7SUFDbEMsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtRQUNkLElBQUksRUFBRSxD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Q0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRjb21wdXRlZCxcblx0dW50cmFja2VkLFxuXHRvdXRwdXQsXG5cdE5nWm9uZSxcblx0UmVuZGVyZXIyLFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbFZhbHVlQ2hhbmdlZEV2ZW50LCBDb2xEZWYsIEdyaWRPcHRpb25zIGFzIFJhd0dyaWRPcHRpb25zLCBSb3dEcmFnRW5kRXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IFRoZW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGhlbWVDb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uLy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBncmlkVXRpbHMgfSBmcm9tICcuLi9ncmlkLXV0aWxzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY29tcG9uZW50cywgQ0xJRU5UTElNSVQgfSBmcm9tICcuLi9tb2NrLWRhdGEnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zIGV4dGVuZHMgUmF3R3JpZE9wdGlvbnMge1xuXHRzZXJ2ZXJGdW5jPzogKHNlYXJjaDogU2VhcmNoKSA9PiBPYnNlcnZhYmxlPGFueT47XG5cdGNsaWVudEZ1bmM/OiAoc2VhcmNoOiBTZWFyY2gpID0+IE9ic2VydmFibGU8YW55Pjtcblx0c2hvd1NlYXJjaD86IGJvb2xlYW47XG5cdHByZVNlYXJjaD86IFNlYXJjaDtcblx0dHJlZURhdGFGaWVsZD86IHN0cmluZztcblx0dHJlZUxldmVsPzogbnVtYmVyO1xuXHRoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG5cdHNjcm9sbEhlaWdodD86IHN0cmluZztcblx0c2hvd0luZGV4PzogYm9vbGVhbjtcblx0dW5kb1JlZG9DZWxsRWRpdGluZz86IGJvb2xlYW47XG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdD86IG51bWJlcjtcblx0bWFpbkZpZWxkPzogc3RyaW5nO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdGZrPzogc3RyaW5nO1xuXHRkcmFnU29ydD86IHN0cmluZztcblx0c2VsZWN0aW9uTW9kZT86ICdub25lJyB8ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblx0ZGF0YUtleT86IHN0cmluZztcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbjogR3JpZE9wdGlvbnMgPSB7XG5cdC8vIHBvcHVwUGFyZW50OiBkb2N1bWVudC5ib2R5LFxuXHRkZWZhdWx0Q29sRGVmOiB7XG5cdFx0ZmxleDogMSxcblx0XHRtaW5XaWR0aDogMTAwLFxuXHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHR9LFxuXHRyb3dTZWxlY3Rpb246IHsgbW9kZTogJ211bHRpUm93JyB9LFxuXHRyb3dNb2RlbFR5cGU6ICdzZXJ2ZXJTaWRlJyxcblx0Y2VsbFNlbGVjdGlvbjoge1xuXHRcdGhhbmRsZToge1xuXHRcdFx0bW9kZTogJ3JhbmdlJyxcblx0XHR9LFxuXHR9LFxuXHRlbmFibGVDaGFydHM6IHRydWUsXG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmc6IHRydWUsXG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdDogMjAsXG59O1xuXG5jb25zdCBkZWZhdWx0U29ydHMgPSBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGlzQXNjOiBmYWxzZSB9XTtcbmZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXk6YW55W10sIHByZWRpY2F0ZTphbnksIHRoaXNBcmc6YW55KSB7XG4gIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdjdXN0b20tZ3JpZCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtBZ0dyaWRBbmd1bGFyLCBCdXR0b25Nb2R1bGVdLFxuXHR0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCB7XG5cdEBWaWV3Q2hpbGQoQWdHcmlkQW5ndWxhcikgZ3JpZCE6IEFnR3JpZEFuZ3VsYXI7XG5cdEBWaWV3Q2hpbGQoQWdHcmlkQW5ndWxhciwgeyByZWFkOiBFbGVtZW50UmVmIH0pIGdyaWRSZWYhOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJykgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjtcblx0Z3JpZE9wdGlvbnMgPSBpbnB1dDxHcmlkT3B0aW9ucz4oe30pO1xuXHRzZWxlY3Rpb25LZXlzID0gaW5wdXQ8YW55W10+KFtdKTtcblx0dG9PcHRpb25zID0gY29tcHV0ZWQoKCkgPT5cblx0XHRncmlkVXRpbHMubWVyZ2VPcHRpb25zKHsgLi4uZGVmYXVsdE9wdGlvbiwgLi4udGhpcy5ncmlkT3B0aW9ucygpIH0sIHVudHJhY2tlZCgoKSA9PiB0aGlzLnNlYXJjaFBybSgpKS5saW1pdCwgdGhpcy5hY3Rpb24pLFxuXHQpO1xuXHR0aGVtZUNvbmZpZyA9IGluamVjdChUaGVtZUNvbmZpZ1NlcnZpY2UpO1xuXHRsb2NhbGVUZXh0OiBhbnk7XG5cdGkxOG5TZXJ2aWNlID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblx0bXlUaGVtZSA9IGNvbXB1dGVkKCgpID0+IGdyaWRVdGlscy5nZXRUaGVtZSh0aGlzLnRoZW1lQ29uZmlnKSk7XG5cdGNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuXHRjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtdO1xuXHRpbml0R3JpZCA9IHRydWU7XG5cdGNvbnRlbnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0bWFpbkZpZWxkITogc3RyaW5nO1xuXHRtb2RlbE5hbWUhOiBzdHJpbmc7XG5cdHVwc2VydCA9IGlucHV0PGFueT4oKTtcblx0c3ViSW5kZXghOiBudW1iZXI7XG5cdHJvd0RhdGEgPSBpbnB1dDxhbnk+KHVuZGVmaW5lZCk7XG5cdHNlYXJjaFBybSA9IGlucHV0PFNlYXJjaD4oe30pO1xuXHRyYXdQcm0/OiBTZWFyY2g7XG5cdGRlbGV0ZUVtaXQgPSBvdXRwdXQ8bnVtYmVyW10+KCk7XG5cdGFkZEVtaXQgPSBvdXRwdXQoKTtcblx0YWRkVHlwZSA9IGlucHV0PCdoYW5kbGUnIHwgJ3NlbGVjdCcgfCAnbm9uZSc+KCk7XG5cdHNlbGVjdERhdGEgPSBpbnB1dDxhbnlbXT4oKTtcblx0c2hvd0FjdCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRhY3RQb3MgPSBpbnB1dDwndG9wJyB8ICdib3R0b20nPignYm90dG9tJyk7XG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xuXHRodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXHRyZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXHRuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblx0Y2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblx0c2hvd0RlbGV0ZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRncmlkRGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0YWRkU29ydCA9IGlucHV0PHN0cmluZz4oKVxuXG5cdHJpY2hNdWx0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cdGhvcml6b250YWxTY3JvbGxCYXJPYnNlcnZlcjogYW55O1xuXHRob3Jpem9udGFsU2Nyb2xsQmFySGVpZ2h0ID0gMDtcblx0dmVydGljYWxTY3JvbGxCYXJPYnNlcnZlcjogYW55O1xuXHR2ZXJ0aWNhbFNjcm9sbEJhcldpZHRoID0gMDtcblx0Z3JpZEhlaWdodCA9IDA7XG5cdHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXHRub1Jvd3MgPSB0cnVlO1xuXHRzaG93SG9yaXpvbnRhbCA9IGZhbHNlO1xuXHRkcmFnQmVmb3JlSW5kZXggPSAtMTtcblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcblx0b25SZXNpemUoKSB7XG5cdFx0dGhpcy5zZXRTY3JvbGxIZWlnaHQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlKSB7XG5cdFx0Y29uc3Qgc2VhcmNoUHJtJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlYXJjaFBybSkuc3Vic2NyaWJlKChzZWFyY2hQcm0pID0+IHtcblx0XHRcdGlmIChzZWFyY2hQcm0ubW9kZWxOYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5yYXdQcm0gPSBzZWFyY2hQcm07XG5cdFx0XHRcdHNlYXJjaFBybSQudW5zdWJzY3JpYmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHRhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29sdW1uRGVmcyA9IGF3YWl0IHRoaXMuc2V0UmljaFZhbHVlKCk7XG5cdFx0XHRcdHRoaXMuY29sdW1uRGVmcyA9IGdyaWRVdGlscy5oYW5kbGVJMThuS2V5KHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcyEgfHwgW10sIHRoaXMuaTE4blNlcnZpY2UpO1xuXHRcdFx0XHR0aGlzLm1haW5GaWVsZCA9IHRoaXMudG9PcHRpb25zKCkubWFpbkZpZWxkITtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSE7XG5cdFx0XHRcdGlmICghdGhpcy51cHNlcnQoKT8uc3Vic2VydD8uZmluZCgodjogYW55KSA9PiB2LnN1Yk1vZGVsTmFtZSA9PT0gdGhpcy5tb2RlbE5hbWUpKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydD8ucHVzaCh7XG5cdFx0XHRcdFx0XHRzdWJNb2RlbE5hbWU6IHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IHRoaXMudG9PcHRpb25zKCkuZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zdWJJbmRleCA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LmZpbmRJbmRleCgodjogYW55KSA9PiB2LnN1Yk1vZGVsTmFtZSA9PT0gdGhpcy5tb2RlbE5hbWUpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmFjdGlvbi5zZWFyY2hNb25pdG9yKHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdldERhdGEoKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMucm93RGF0YSgpID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9PcHRpb25zKCkuY2xpZW50RnVuYyA9ICgpID0+IG9mKHsgZGF0YTogdGhpcy5yb3dEYXRhKCksIHRvdGFsTnVtOiB0aGlzLnJvd0RhdGEoKT8ubGVuZ3RoIH0pO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmdldENsaWVudERhdGEodW5kZWZpbmVkKTtcblx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0RGF0YSgpICYmIHRoaXMuc2VsZWN0RGF0YSgpIS5sZW5ndGggPiAwICYmIHRoaXMuZ3JpZCkge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlQWRkZWRSb3dzKHRoaXMuc2VsZWN0RGF0YSgpISk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9PcHRpb25zKCkucHJlU2VhcmNoICYmXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24uc2V0U2VhcmNoKHsgY29sdW1uRmlsdGVyczogdGhpcy50b09wdGlvbnMoKS5wcmVTZWFyY2ghLmNvbHVtbkZpbHRlcnMgfSwgdGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdHRoaXMuZWRpdGluZ0ZpeCgpO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuU2VydmljZS5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQuYXBpLmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuaW5pdEdyaWQgPSBmYWxzZTtcblx0XHRcdHRoaXMubG9jYWxlVGV4dCA9IGdyaWRVdGlscy5nZXRMb2NhbFRleHQocmVzKTtcblx0XHRcdHRoaXMuY29sdW1uRGVmcyA9IGdyaWRVdGlscy5oYW5kbGVJMThuS2V5KHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcyEsIHRoaXMuaTE4blNlcnZpY2UpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5pdEdyaWQgPSB0cnVlO1xuXHRcdFx0fSwgMTAwKTtcblx0XHR9KTtcblx0XHR0aGlzLmxvY2FsZVRleHQgPSBncmlkVXRpbHMuZ2V0TG9jYWxUZXh0KHRoaXMuaTE4blNlcnZpY2UuY3VycmVudExhbmcpO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge31cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIpIHtcblx0XHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlcikge1xuXHRcdFx0dGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRHcmlkKCk6IEFnR3JpZEFuZ3VsYXIge1xuXHRcdHJldHVybiB0aGlzLmdyaWQ7XG5cdH1cblxuXHRvbkdyaWRSZWFkeShlOiBhbnkpIHtcblx0XHR0aGlzLmluaXRHcmlkSGVpZ2h0KCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmdldERhdGEoKTtcblx0XHR9LCAxMDApO1xuXHR9XG5cblx0b25TZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBhbnkpOiBhbnkge1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnNldChncmlkVXRpbHMuY2FsY1Jvd0lkcyhldmVudC5hcGksIHRoaXMudG9PcHRpb25zKCk/LnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScpKTtcblx0fVxuXG5cdG9uUm93R3JvdXBPcGVuZWQoKSB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgc2V0UmljaFZhbHVlKCkge1xuXHRcdGxldCBjb2wgPSB0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnMhIHx8IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwcm9jZXNzZWRDb2xzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGNvbC5tYXAoYXN5bmMgKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCdmaWVsZElkJykgJiYgKGl0ZW0uY2VsbEVkaXRvciA9PSAnYWdSaWNoU2VsZWN0Q2VsbEVkaXRvcicgfHwgaXRlbS5jZWxsRWRpdG9yID09ICdhZ1NlbGVjdENlbGxFZGl0b3InKSkge1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlczogYW55ID0gW107XG5cdFx0XHRcdFx0XHRpZiAoIWl0ZW0uY2VsbEVkaXRvclBhcmFtcyB8fCAhaXRlbS5jZWxsRWRpdG9yUGFyYW1zLmhhc093blByb3BlcnR5KCd2YWx1ZXMnKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0RGF0YScpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzID0gYXdhaXQgaXRlbS5zZWxlY3REYXRhKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aXRlbS5jZWxsRWRpdG9yUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0XHRcdC4uLml0ZW0uY2VsbEVkaXRvclBhcmFtcyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RNYXhIZWlnaHQ6IDIwMCxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5jZWxsRWRpdG9yUGFyYW1zICYmIGl0ZW0uY2VsbEVkaXRvclBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVzJykpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVzID0gaXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlcztcblx0XHRcdFx0XHRcdFx0aXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlTGlzdE1heEhlaWdodCA9IDIwMDtcblx0XHRcdFx0XHRcdFx0aXRlbS5jZWxsRWRpdG9yUGFyYW1zLnN1cHByZXNzTXVsdGlTZWxlY3RQaWxsUmVuZGVyZXIgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IGlzU3RyaW5nID0gdmFsdWVzLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG5cdFx0XHRcdFx0XHRpZiAoIWlzU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2VsbEVkaXRvclBhcmFtcy5yYXdPcHRpb25zID0gdmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRpdGVtLmNlbGxFZGl0b3JQYXJhbXMudmFsdWVzID0gdmFsdWVzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0aXRlbS52YWx1ZUZvcm1hdHRlciA9IChwYXJhbXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtcy52YWx1ZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQudmFsdWUgPT0gcGFyYW1zLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiBwYXJhbXMudmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB2YWx1ZXM6IGFueSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMudmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlcyA9IHBhcmFtcy52YWx1ZS5zcGxpdCgnLCcpLm1hcCgodjogYW55KSA9PiAoIWlzTmFOKHYpID8gTnVtYmVyKHYpIDogdikpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMgPSBwYXJhbXMudmFsdWUgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbHRlcigob3B0KSA9PiB2YWx1ZXMuaW5jbHVkZXMob3B0LnZhbHVlKSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uLmxlbmd0aCA+IDAgPyBvcHRpb24ubWFwKCh2KSA9PiB2LmxhYmVsKSA6IHBhcmFtcy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGl0ZW0udmFsdWVHZXR0ZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygncGFtcmFtcy0tLS0nLHBhcmFtcyxpdGVtLmZpZWxkKVxuXHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InICYmIHBhcmFtcy5kYXRhLmhhc093blByb3BlcnR5KGl0ZW0uZmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdID09ICdzdHJpbmcnID8gcGFyYW1zLmRhdGFbaXRlbS5maWVsZF0uc3BsaXQoJywnKSA6IHBhcmFtcy5kYXRhW2l0ZW0uZmllbGRdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyYW1zLmRhdGFbaXRlbS5maWVsZF07XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGl0ZW0udmFsdWVQYXJzZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygncGFyYW1zLS0tLScscGFyYW1zKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LmxhYmVsID09PSBwYXJhbXMubmV3VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHRpb24gPyBvcHRpb24udmFsdWUgOiBwYXJhbXMubmV3VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmNlbGxFZGl0b3JQYXJhbXMudmFsdWVzID0gdmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRpdGVtLnZhbHVlR2V0dGVyID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uY2VsbEVkaXRvciA9PSAnYWdSaWNoU2VsZWN0Q2VsbEVkaXRvcicgJiYgcGFyYW1zLmRhdGEuaGFzT3duUHJvcGVydHkoaXRlbS5maWVsZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgcGFyYW1zLmRhdGFbaXRlbS5maWVsZF0gPT0gJ3N0cmluZycgPyBwYXJhbXMuZGF0YVtpdGVtLmZpZWxkXS5zcGxpdCgnLCcpIDogcGFyYW1zLmRhdGFbaXRlbS5maWVsZF07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJhbXMuZGF0YVtpdGVtLmZpZWxkXTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcm9jZXNzZWRDb2xzO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGNvbHVtbnM6JywgZXJyb3IpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RW51bXMoaWQ6IG51bWJlcikge1xuXHRcdHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0KCdnZXQnLCB7IGlkOiBOdW1iZXIoaWQpLCBtb2RlbE5hbWU6ICdNb2RlbEZpZWxkJywgcHJlbG9hZHM6IFsnRW51bSddIH0pKTtcblx0fVxuXG5cdGhhbmRsZVNlbGVjdGlvbnMoc3RhcnRSb3c6IG51bWJlcikge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0aW9uS2V5cygpPy5sZW5ndGgpIHtcblx0XHRcdFx0Z3JpZFV0aWxzLnNlbGVjdGlvbkhhbmRsZXIodGhpcy5ncmlkLmFwaSwgdGhpcy5zZWxlY3Rpb25LZXlzKCksIHN0YXJ0Um93LCB0aGlzLnRvT3B0aW9ucygpPy5kYXRhS2V5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldERhdGEoKSB7XG5cdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdGlmICghdGhpcy5zZWFyY2hQcm0oKS5tb2RlbE5hbWUpIHJldHVybjtcblx0XHRcdHRoaXMuY2FuY2VsU2VsZWN0KCk7XG5cdFx0XHRjb25zdCBzZWFyY2ggPSB0aGlzLmFjdGlvbi5nZXRTZWFyY2godGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUpO1xuXHRcdFx0dGhpcy50b09wdGlvbnMoKT8ucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJyA/IHRoaXMuZ2V0U2VydmVyRGF0YShzZWFyY2gpIDogdGhpcy5nZXRDbGllbnREYXRhKHNlYXJjaCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRTZXJ2ZXJEYXRhKHNlYXJjaD86IFNlYXJjaCkge1xuXHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3NlcnZlclNpZGVEYXRhc291cmNlJywge1xuXHRcdFx0Z2V0Um93czogKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRjb25zdCBzZWFyY2hQcm06IFNlYXJjaCA9IHtcblx0XHRcdFx0XHQuLi50aGlzLnNlYXJjaFBybSgpLFxuXHRcdFx0XHRcdG9mZnNldDogcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3csXG5cdFx0XHRcdFx0Y29sdW1uRmlsdGVyczogWy4uLih0aGlzLnJhd1BybT8uY29sdW1uRmlsdGVycyB8fCBbXSksIC4uLihzZWFyY2g/LmNvbHVtbkZpbHRlcnMgfHwgW10pXSxcblx0XHRcdFx0XHRzb3J0czogc2VhcmNoPy5zb3J0cz8ubGVuZ3RoID8gc2VhcmNoLnNvcnRzIDogdGhpcy5yYXdQcm0/LnNvcnRzPy5sZW5ndGggPyB0aGlzLnJhd1BybS5zb3J0cyA6IGRlZmF1bHRTb3J0cyxcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5oYW5kbGVTZXJ2ZXJUcmVlKHBhcmFtcywgc2VhcmNoUHJtKTtcblx0XHRcdFx0dGhpcy50b09wdGlvbnMoKVxuXHRcdFx0XHRcdC5zZXJ2ZXJGdW5jPy4oc2VhcmNoUHJtKVxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5zZXRQYWdlKHtcblx0XHRcdFx0XHRcdFx0c3RhcnRSb3c6IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93LFxuXHRcdFx0XHRcdFx0XHRlbmRSb3c6IHBhcmFtcy5yZXF1ZXN0LmVuZFJvdyEgPCByZXMudG90YWxOdW0gPyBwYXJhbXMucmVxdWVzdC5lbmRSb3cgOiByZXMudG90YWxOdW0sXG5cdFx0XHRcdFx0XHRcdHRvdGFsOiByZXMudG90YWxOdW0sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBhcmFtcy5zdWNjZXNzKHsgcm93RGF0YTogcmVzLmRhdGEgfSk7XG5cdFx0XHRcdFx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVTZWxlY3Rpb25zKHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93IHx8IDApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZVNlcnZlclRyZWUocGFyYW1zOiBhbnksIHNlYXJjaFBybTogU2VhcmNoKSB7XG5cdFx0aWYgKCF0aGlzLnRvT3B0aW9ucygpLnRyZWVEYXRhKSByZXR1cm47XG5cdFx0aWYgKHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzPy5maWx0ZXIoKGNvbHVtbkZpbHRlcikgPT4gY29sdW1uRmlsdGVyLmNvbHVtbkZpZWxkICE9PSAncGlkJyk7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IFtcblx0XHRcdFx0Ly8gLi4uKHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzIHx8IFtdKSxcblx0XHRcdFx0eyBjb2x1bW5GaWVsZDogJ3BpZCcsIHR5cGU6ICdlcScsIGZpdGVyOiBwYXJhbXMucmVxdWVzdC5ncm91cEtleXNbcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLmxlbmd0aCAtIDFdIH0sXG5cdFx0XHRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzPy5maW5kKChjb2x1bW5GaWx0ZXIpID0+IGNvbHVtbkZpbHRlci5jb2x1bW5GaWVsZCA9PT0gJ3BpZCcpKSB7XG5cdFx0XHRcdHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzID0gWy4uLihzZWFyY2hQcm0uY29sdW1uRmlsdGVycyB8fCBbXSksIHsgY29sdW1uRmllbGQ6ICdwaWQnLCB0eXBlOiAnZXEnLCBmaXRlcjogMCB9XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0c2VhcmNoUHJtLnByZWxvYWRzID0gWydjaGlsZHJlbiddO1xuXHR9XG5cblx0Z2V0Q2xpZW50RGF0YShzZWFyY2g/OiBTZWFyY2gpIHtcblx0XHRjb25zdCBzZWFyY2hQcm06IFNlYXJjaCA9IHtcblx0XHRcdC4uLnRoaXMuc2VhcmNoUHJtKCksXG5cdFx0XHRsaW1pdDogQ0xJRU5UTElNSVQsXG5cdFx0XHRjb2x1bW5GaWx0ZXJzOiBbLi4uKHRoaXMucmF3UHJtPy5jb2x1bW5GaWx0ZXJzIHx8IFtdKSwgLi4uKHNlYXJjaD8uY29sdW1uRmlsdGVycyB8fCBbXSldLFxuXHRcdFx0c29ydHM6IHNlYXJjaD8uc29ydHM/Lmxlbmd0aCA/IHNlYXJjaC5zb3J0cyA6IGRlZmF1bHRTb3J0cyxcblx0XHR9O1xuXHRcdHRoaXMuaGFuZGxlQ2xpZW50VHJlZShzZWFyY2hQcm0pO1xuXHRcdHRoaXMudG9PcHRpb25zKClcblx0XHRcdC5jbGllbnRGdW5jPy4oc2VhcmNoUHJtKVxuXHRcdFx0LnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5hY3Rpb24uc2V0UGFnZSh7XG5cdFx0XHRcdFx0dG90YWw6IHJlcy50b3RhbE51bSxcblx0XHRcdFx0XHRtb2RlOiAnY2xpZW50Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3Jvd0RhdGEnLCByZXMuZGF0YSk7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHRcdHRoaXMuaGFuZGxlU2VsZWN0aW9ucygwKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0aGFuZGxlQ2xpZW50VHJlZShzZWFyY2hQcm06IFNlYXJjaCkge1xuXHRcdGlmICghdGhpcy50b09wdGlvbnMoKS50cmVlRGF0YSkgcmV0dXJuO1xuXHRcdGNvbnN0IHByZWxvYWRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy50b09wdGlvbnMoKS50cmVlTGV2ZWwhOyBpKyspIHtcblx0XHRcdHByZWxvYWRzLnB1c2goQXJyYXkoaSkuZmlsbCgnY2hpbGRyZW4nKS5qb2luKCcuJykpO1xuXHRcdH1cblx0XHRzZWFyY2hQcm0ucHJlbG9hZHMgPSBwcmVsb2Fkcztcblx0fVxuXG5cdGNlbGxWYWx1ZUNoYW5nZWQoZTogQ2VsbFZhbHVlQ2hhbmdlZEV2ZW50KSB7XG5cdFx0bGV0IHtcblx0XHRcdGNvbERlZjogeyBmaWVsZCwgaGVhZGVyTmFtZSwgY2VsbEVkaXRvciwgY2VsbEVkaXRvclBhcmFtcyB9LFxuXHRcdFx0bmV3VmFsdWUsXG5cdFx0XHRvbGRWYWx1ZSxcblx0XHRcdHJvd0luZGV4LFxuXHRcdFx0ZGF0YTogeyBpZCB9LFxuXHRcdH0gPSBlO1xuXHRcdGNvbnNvbGUubG9nKCdlLS0tLS0tJywgZSk7XG5cdFx0aWYgKGNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InICYmIGNlbGxFZGl0b3JQYXJhbXMgJiYgY2VsbEVkaXRvclBhcmFtcy5tdWx0aVNlbGVjdCkge1xuXHRcdFx0bmV3VmFsdWUgPSBuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwID8gbmV3VmFsdWUuam9pbignLCcpIDogJyc7XG5cdFx0XHR0aGlzLnJpY2hNdWx0TWFwW2ZpZWxkIV0gPSBuZXdWYWx1ZTtcblx0XHR9XG5cdFx0aWYgKCFpZCkge1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4ISwgT2JqZWN0LmFzc2lnbih7IC4uLmUuZGF0YSB9LCB0aGlzLnJpY2hNdWx0TWFwKSk7XG5cdFx0XHRpZiAoZmllbGQgPT0gdGhpcy5tYWluRmllbGQpIHtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KHJvd0luZGV4ISArIGZpZWxkISwgeyBuZXdWYWx1ZTogbmV3VmFsdWUsIGlkOiAwLCBsYWJlbDogaGVhZGVyTmFtZSB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlkKSB7XG5cdFx0XHRjb25zdCBmaWVsZHN0ciA9IGAke2ZpZWxkfWA7XG5cdFx0XHRsZXQgbzogYW55O1xuXHRcdFx0aWYgKHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmhhcyhyb3dJbmRleCEpKSB7XG5cdFx0XHRcdG8gPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5nZXQocm93SW5kZXghKTtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihvLCB7IFtmaWVsZHN0cl06IG5ld1ZhbHVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0byA9IHsgaWQ6IGlkLCBbZmllbGRzdHJdOiBuZXdWYWx1ZSB9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4ISwgbyk7XG5cdFx0XHRsZXQgb2xkID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZ2V0KHJvd0luZGV4ISArIGZpZWxkISk7XG5cdFx0XHRpZiAob2xkKSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0XHRuZXdWYWx1ZTogbmV3VmFsdWUsXG5cdFx0XHRcdFx0b2xkVmFsdWU6IG9sZC5vbGRWYWx1ZSxcblx0XHRcdFx0XHRpZDogaWQsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KHJvd0luZGV4ISArIGZpZWxkISwge1xuXHRcdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkVmFsdWUsXG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHR9XG5cblx0aGFuZGxlQWRkZWRSb3dzKGFkZGVkUm93czogYW55W10pIHtcblx0XHRsZXQgaGVhZGVyTmFtZSA9ICcnO1xuXHRcdHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5maWVsZCA9PSB0aGlzLm1haW5GaWVsZCkge1xuXHRcdFx0XHRoZWFkZXJOYW1lID0gaXRlbS5oZWFkZXJOYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmKHRoaXMuYWRkU29ydCgpKXtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdhZGQtLS0tLScsdGhpcy5hZGRTb3J0KCkpXG5cdFx0XHQvLyBsZXQgbG9nID0gbmV3IE1hcCgpXG5cdFx0XHR0aGlzLnNlbGVjdERhdGEoKSEuZm9yRWFjaCgoaXRlbTphbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuZ3JpZC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdFx0bGV0IGxhc3RJbmRleCA9IGZpbmRMYXN0SW5kZXgocm93RGF0YSwodjphbnkpID0+IHZbdGhpcy5hZGRTb3J0KCkhXSA9PSBpdGVtW3RoaXMuYWRkU29ydCgpIV0sdGhpcyk7XG5cdFx0XHRcdGxhc3RJbmRleCA9IGxhc3RJbmRleCA9PSAtMSA/IHJvd0RhdGEubGVuZ3RoIC0xIDogbGFzdEluZGV4O1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdyaWQuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGRJbmRleDogbGFzdEluZGV4ICsgMSxhZGQ6IFtpdGVtXSB9KTtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6YW55LGtleTphbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgaW5kZXggPSBrZXkubWF0Y2goL15cXGQrLylbMF07XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2luZGV4LS0tLScsaW5kZXgpXG5cdFx0XHRcdFx0Y29uc3QgaW5zZXJ0SW5kZXggPSBsYXN0SW5kZXggKyAxO1xuXHRcdFx0XHRcdGlmKGluZGV4ID09IGluc2VydEluZGV4KXtcblx0XHRcdFx0XHRcdGNvbnN0IHJlcGxhY2VJbmRleCA9IGluc2VydEluZGV4ICsgMTtcblx0XHRcdFx0XHRcdGxldCBuZXdLZXkgPSBrZXkucmVwbGFjZSgvXlxcZCsvLHJlcGxhY2VJbmRleCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQobmV3S2V5LHZhbHVlKVxuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKGtleSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdGxldCBtYXBEYXRhID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZ2V0KGxhc3RJbmRleCsxKTtcblx0XHRcdFx0aWYobWFwRGF0YSl7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGxhc3RJbmRleCsxKVxuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChsYXN0SW5kZXgrMixtYXBEYXRhKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdCEuYWRkLmZvckVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdub2RlLS0tLScsbm9kZSlcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQobm9kZS5yb3dJbmRleCwgbm9kZS5kYXRhKTtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQobm9kZS5yb3dJbmRleCEgKyB0aGlzLm1haW5GaWVsZCEsIHtcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBub2RlLmRhdGFbdGhpcy5tYWluRmllbGRdLFxuXHRcdFx0XHRcdFx0aWQ6IDAsXG5cdFx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdsYXN0SW5kZXgnLGxhc3RJbmRleClcblx0XHRcdH0pXG5cdFx0XHR0aGlzLmdyaWQuYXBpLnJlZnJlc2hDZWxscyh7XG5cdFx0XHRcdGZvcmNlOiB0cnVlLCAgLy8g5by65Yi25Yi35pawXG5cdFx0XHRcdHN1cHByZXNzRmxhc2g6IHRydWUgIC8vIOmBv+WFjemXqueDgVxuXHRcdFx0fSk7XG5cdFx0XHQvLyB0aGlzLnVwc2VydCgpIS5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXSA9IGxvZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdyaWQuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IGFkZGVkUm93cyB9KTtcblx0XHRcdHJlc3VsdCEuYWRkLmZvckVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCByb3dJbmRleCA9IHRoaXMuZ3JpZC5hcGkuZ2V0Um93Tm9kZShub2RlLmlkKT8ucm93SW5kZXg7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIG5vZGUuZGF0YSk7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyB0aGlzLm1haW5GaWVsZCEsIHtcblx0XHRcdFx0XHRuZXdWYWx1ZTogbm9kZS5kYXRhW3RoaXMubWFpbkZpZWxkXSxcblx0XHRcdFx0XHRpZDogMCxcblx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XHRcblx0XHRsZXQgZHQ6IGFueVtdID0gW107XG5cdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdGR0LnB1c2godmFsdWUpO1xuXHRcdH0pO1xuXHRcdC8vIGNvbnNvbGUubG9nKCd1cHNlcnQtLS0tLScsdGhpcy51cHNlcnQoKSlcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRoYW5kbGVEZWxldGVkUm93cyhkZWxldGVkUm93czogYW55W10pIHtcblx0XHRjb25zdCByZW1vdmVJbmRleGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLnJvd0luZGV4KTtcblx0XHRyZW1vdmVJbmRleGVzLmZvckVhY2goKHJvd0luZGV4OiBhbnkpID0+IHtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShyb3dJbmRleCEpO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKHJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISk7XG5cdFx0fSk7XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogZGVsZXRlZFJvd3MgfSk7XG5cdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0fVxuXG5cdHNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZWRSb3dzOmFueVtdKXtcblx0XHRsZXQgaGVhZGVyTmFtZSA9ICcnO1xuXHRcdHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5maWVsZCA9PSB0aGlzLm1haW5GaWVsZCkge1xuXHRcdFx0XHRoZWFkZXJOYW1lID0gaXRlbS5oZWFkZXJOYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogZGVsZXRlZFJvd3MgfSk7XG5cdFx0cmVzdWx0Py5yZW1vdmUuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ25vZGUtLS0nLG5vZGUuc291cmNlUm93SW5kZXgpO1xuXHRcdFx0bGV0IGtleSA9IG5vZGUuc291cmNlUm93SW5kZXggKyB0aGlzLm1haW5GaWVsZCFcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpXG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5kZWxldGUobm9kZS5zb3VyY2VSb3dJbmRleClcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOmFueSxrZXk6YW55KSA9PiB7XG5cdFx0XHRcdGlmKCF2YWx1ZS5pZCAmJiBrZXkgPiBub2RlLnNvdXJjZVJvd0luZGV4KXtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5kZWxldGUoa2V5KVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6YW55LGtleTphbnkpID0+IHtcblx0XHRcdFx0bGV0IGluZGV4ID0ga2V5Lm1hdGNoKC9eXFxkKy8pWzBdO1xuXHRcdFx0XHRpZighdmFsdWUuaWQgJiYgaW5kZXggPiBub2RlLnNvdXJjZVJvd0luZGV4KXtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0pXG5cdFx0dGhpcy5ncmlkLmFwaS5mb3JFYWNoTm9kZSgobm9kZTphbnkpID0+IHtcblx0XHRcdGNvbnN0IHJvd0luZGV4ID0gbm9kZS5yb3dJbmRleDtcblx0XHRcdGlmKCFub2RlLmRhdGEuaWQpe1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBub2RlLmRhdGEpO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5vZGUuZGF0YVt0aGlzLm1haW5GaWVsZF0sXG5cdFx0XHRcdFx0aWQ6IDAsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6YW55LGtleTphbnkpID0+IHtcblx0XHRcdFx0XHRpZih2YWx1ZS5pZCA9PT0gbm9kZS5kYXRhLmlkICYmIGtleSAhPSByb3dJbmRleCl7XG5cdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5kZWxldGUoa2V5KVxuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4LHZhbHVlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6YW55LGtleTphbnkpID0+IHtcblx0XHRcdFx0XHRpZih2YWx1ZS5pZCA9PSBub2RlLmRhdGEuaWQpe1xuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0ga2V5Lm1hdGNoKC9eXFxkKy8pWzBdO1xuXHRcdFx0XHRcdFx0aWYoaW5kZXggIT0gcm93SW5kZXgpe1xuXHRcdFx0XHRcdFx0XHRsZXQgbmV3S2V5ID0ga2V5LnJlcGxhY2UoL15cXGQrLyxyb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChuZXdLZXksdmFsdWUpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdH0pXG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0Ly8gY29uc29sZS5sb2coJ3Jlc3VsdC0tLS0tJywgdGhpcy51cHNlcnQoKSlcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3Jvd0RhdGEnLCBbXSk7XG5cdFx0dGhpcy51cHNlcnQoKSEuc3Vic2VydCA9IFtdO1xuXHR9XG5cblx0YWRkUm93KCkge1xuXHRcdGlmICh0aGlzLmFkZFR5cGUoKSA9PSAnaGFuZGxlJykge1xuXHRcdFx0bGV0IGl0ZW0gPSB0eXBlb2YgdGhpcy50b09wdGlvbnMoKS5hZGREYXRhQ2IgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMudG9PcHRpb25zKCkuYWRkRGF0YUNiKCkgOiB7fTtcblx0XHRcdGlmICh0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQpIHtcblx0XHRcdFx0bGV0IHRvdGFsQ291bnQgPSB0aGlzLmdyaWQuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG5cdFx0XHRcdGl0ZW1bdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0IV0gPSB0b3RhbENvdW50ICsgMTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2l0ZW1dIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZEVtaXQuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHR9XG5cblx0ZGVsUm93cygpIHtcblx0XHRjb25zdCBzZWxlY3RlZE5vZGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWREYXRhID0gc2VsZWN0ZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSkgfHwgW107XG5cdFx0bGV0IGlkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGRhdGEpID0+IGRhdGEuaWQpLmZpbHRlcigodikgPT4gdikgfHwgW107XG5cdFx0aWYgKGlkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmRlbGV0ZUVtaXQuZW1pdChpZHMpO1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDAgJiYgaWRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aGlzLmhhbmRsZURlbGV0ZWRSb3dzKHNlbGVjdGVkRGF0YSk7XG5cdFx0fVxuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRzZXRTY3JvbGxIZWlnaHQoaGVpZ2h0Pzogc3RyaW5nKSB7XG5cdFx0aWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRoZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy50b09wdGlvbnMoKS5zY3JvbGxIZWlnaHQ7XG5cdFx0aWYgKGhlaWdodCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcsIGhlaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdEdyaWRIZWlnaHQoKSB7XG5cdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRcdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFySGVpZ2h0ID0gZW50cnkudGFyZ2V0LmNsaWVudEhlaWdodDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLWJvZHktaG9yaXpvbnRhbC1zY3JvbGwnKSk7XG5cdFx0dGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0XHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJXaWR0aCA9IGVudHJ5LnRhcmdldC5jbGllbnRXaWR0aDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlci5vYnNlcnZlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1ib2R5LXZlcnRpY2FsLXNjcm9sbCcpKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCAnMTAwJScpO1xuXHRcdHRoaXMuc2V0U2Nyb2xsSGVpZ2h0KCk7XG5cdH1cblxuXHRjYWxjR3JpZE1hcmdpbigpIHtcblx0XHRjb25zdCBtYXJnaW4gPSB0aGlzLnNob3dBY3QoKSAmJiB0aGlzLmF1dGhMZXZlbCgpID49IDMgJiYgKHRoaXMuYWRkVHlwZSgpICE9ICdub25lJyB8fCB0aGlzLnNob3dEZWxldGUoKSkgPyAyIDogMTtcblx0XHRjb25zdCBib3JkZXJCb3R0b20gPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXJvb3Qtd3JhcHBlcicpKS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLXdpZHRoJyksXG5cdFx0KTtcblx0XHRyZXR1cm4gTWF0aC5taW4oMiwgbWFyZ2luICsgYm9yZGVyQm90dG9tKTtcblx0fVxuXG5cdGdldENvbnRhaW5lckhlaWdodCgpIHtcblx0XHRsZXQgY29udGFpbmVyID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1jZW50ZXItY29scy1jb250YWluZXInKSkuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JyksXG5cdFx0KTtcblx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHR9XG5cblx0YWp1c3RHcmlkSGVpZ2h0KCkge1xuXHRcdGxldCBjb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lckhlaWdodCgpO1xuXHRcdGxldCBoZWFkZXJIZWlnaHQgPSB0aGlzLmdyaWRPcHRpb25zKCkuaGVhZGVySGVpZ2h0ID8/IDQ5O1xuXHRcdGxldCBtYXJnaW4gPSB0aGlzLmNhbGNHcmlkTWFyZ2luKCk7XG5cdFx0bGV0IHRvdGFsID0gY29udGFpbmVyICsgbWFyZ2luICsgaGVhZGVySGVpZ2h0O1xuXHRcdGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KHRvdGFsLCBoZWFkZXJIZWlnaHQgKyA0MiArIG1hcmdpbik7XG5cdFx0dGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcblx0XHRcdHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBgJHtoZWlnaHQgKyB0aGlzLmhvcml6b250YWxTY3JvbGxCYXJIZWlnaHR9cHhgKTtcblx0XHRcdHRoaXMuYWp1c3RHcmlkU3RhdGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdGFqdXN0R3JpZFN0YXRlKCkge1xuXHRcdHRoaXMubm9Sb3dzID0gdGhpcy5ncmlkLmFwaS5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID09PSAwO1xuXHRcdHRoaXMubm9Sb3dzID8gdGhpcy5ncmlkLmFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpIDogdGhpcy5ncmlkLmFwaS5oaWRlT3ZlcmxheSgpO1xuXHRcdHRoaXMuc2hvd0hvcml6b250YWwgPSB0aGlzLmFjdFBvcygpID09ICdib3R0b20nICYmICh0aGlzLm5vUm93cyB8fCAhIXRoaXMudmVydGljYWxTY3JvbGxCYXJXaWR0aCk7XG5cdH1cblxuXHRjYW5jZWxTZWxlY3QoKSB7XG5cdFx0dGhpcy5nZXRHcmlkKCkuYXBpLmRlc2VsZWN0QWxsKCk7XG5cdFx0dGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtdKTtcblx0fVxuXG5cdGVkaXRpbmdGaXgoKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLmdyaWQ/LmFwaT8uZ2V0RWRpdGluZ0NlbGxzKCk/Lmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBncmlkRWxlbWVudDogYW55ID0gdGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXJvb3Qtd3JhcHBlcicpO1xuXHRcdFx0aWYgKCFncmlkRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZC5hcGkuc3RvcEVkaXRpbmcoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyb3dEcmFnRW50ZXIoZXZlbnQ6IGFueSkge1xuXHRcdGNvbnNvbGUubG9nKCdldmVudC0tLScsIGV2ZW50KTtcblx0XHR0aGlzLmRyYWdCZWZvcmVJbmRleCA9IGV2ZW50Lm92ZXJJbmRleDtcblx0fVxuXG5cdG9uUm93RHJhZ0VuZChldmVudDogUm93RHJhZ0VuZEV2ZW50KSB7XG5cdFx0Ly8gY29uc29sZS5sb2coJ2V2ZW50LS0tLScsIGV2ZW50Lm5vZGUsZXZlbnQub3Zlck5vZGUpXG5cdFx0Ly8gY29uc29sZS5sb2coJ+WOn+Wni+e0ouW8lS0tLS0nLCB0aGlzLmRyYWdCZWZvcmVJbmRleClcblx0XHQvLyBjb25zb2xlLmxvZygn5ouW5ou95LmL5ZCO57Si5byVLS0tLScsZXZlbnQub3ZlckluZGV4KVxuXHRcdGlmICghdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0KSByZXR1cm47XG5cdFx0aWYgKHRoaXMuZHJhZ0JlZm9yZUluZGV4ID09IGV2ZW50Lm92ZXJJbmRleCkgcmV0dXJuO1xuXHRcdGxldCBjb2wgPSBldmVudC5hcGkuZ2V0Q29sdW1uRGVmcygpO1xuXHRcdGxldCBjb2xJdGVtOiBhbnkgPSBjb2w/LmZpbmQoKHY6IGFueSkgPT4gdi5maWVsZCA9PT0gdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0ISkgfHwge307XG5cdFx0Ly8gY29uc29sZS5sb2coXCJyb3dEYXRhLS0tXCIsdGhpcy5yb3dEYXRhKCkpXG5cdFx0bGV0IG1hcCA9IG5ldyBNYXAoKTtcblx0XHRsZXQgbG9nTWFwID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMuZ3JpZD8uYXBpLmZvckVhY2hOb2RlKChub2RlLCBpbmRleCkgPT4ge1xuXHRcdFx0bGV0IGlkID0gbm9kZS5kYXRhLmlkO1xuXHRcdFx0bGV0IGlzTW92aW5nRG93biA9IGV2ZW50Lm92ZXJJbmRleCA+IHRoaXMuZHJhZ0JlZm9yZUluZGV4O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaXNNb3ZpbmdEb3duICYmIGluZGV4ID49IHRoaXMuZHJhZ0JlZm9yZUluZGV4ICYmIGluZGV4IDw9IGV2ZW50Lm92ZXJJbmRleCkgfHxcblx0XHRcdFx0KCFpc01vdmluZ0Rvd24gJiYgaW5kZXggPD0gdGhpcy5kcmFnQmVmb3JlSW5kZXggJiYgaW5kZXggPj0gZXZlbnQub3ZlckluZGV4KVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdub2RlLS0tLScsbm9kZS5kYXRhLGV2ZW50Lm92ZXJJbmRleClcblx0XHRcdFx0bGV0IG9sZFZhbHVlO1xuXHRcdFx0XHRpZiAoaW5kZXggPT0gZXZlbnQub3ZlckluZGV4KSB7XG5cdFx0XHRcdFx0b2xkVmFsdWUgPSB0aGlzLmRyYWdCZWZvcmVJbmRleDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvbGRWYWx1ZSA9IGlzTW92aW5nRG93biA/IGluZGV4ICsgMSA6IGluZGV4IC0gMTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnb2xkSW5kZXgtLS0tJyxvbGRWYWx1ZSlcblx0XHRcdFx0aWYgKCFpZCkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChcblx0XHRcdFx0XHRcdGluZGV4ISxcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24obm9kZS5kYXRhLCB7XG5cdFx0XHRcdFx0XHRcdFt0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhXTogaW5kZXggKyAxLFxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgbzogYW55O1xuXHRcdFx0XHRcdGlmICh0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5oYXMob2xkVmFsdWUhKSkge1xuXHRcdFx0XHRcdFx0byA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmdldChvbGRWYWx1ZSEpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvLCB7IFt0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhXTogaW5kZXggKyAxIH0pO1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKG9sZFZhbHVlISk7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnby0tLS0nLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG8gPSB7IGlkOiBpZCwgW3RoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCFdOiBpbmRleCArIDEgfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWFwLnNldChpbmRleCEsIG8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBvbGQgPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5nZXQob2xkVmFsdWUhICsgdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0ISk7XG5cdFx0XHRcdGlmIChvbGQpIHtcblx0XHRcdFx0XHRsb2dNYXAuc2V0KGluZGV4ISArIHRoaXMuZ3JpZE9wdGlvbnMoKS5kcmFnU29ydCEsIHtcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBpbmRleCArIDEsXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkLm9sZFZhbHVlLFxuXHRcdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGNvbEl0ZW1bJ2hlYWRlck5hbWUnXSB8fCAn5o6S5bqPJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUob2xkVmFsdWUhICsgdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0ISk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChpbmRleCEgKyB0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhISwge1xuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IGluZGV4ICsgMSxcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBvbGRWYWx1ZSArIDEsXG5cdFx0XHRcdFx0XHRpZDogaWQsXG5cdFx0XHRcdFx0XHRsYWJlbDogY29sSXRlbVsnaGVhZGVyTmFtZSddIHx8ICfmjpLluo8nLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bGV0IGR0OiBhbnkgPSBbXTtcblx0XHRpZiAodGhpcy51cHNlcnQoKSkge1xuXHRcdFx0dGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10gPSBuZXcgTWFwKFsuLi50aGlzLnVwc2VydCgpIS5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnIV0sIC4uLm1hcF0pO1xuXHRcdFx0dGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10gPSBuZXcgTWFwKFsuLi50aGlzLnVwc2VydCgpIS5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXSwgLi4ubG9nTWFwXSk7XG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR9XG5cblx0XHRjb25zb2xlLmxvZygnZHJhZ1Vwc2VydC0tLS0nLCB0aGlzLnVwc2VydCgpKTtcblx0fVxufVxuIiwiQGlmIChpbml0R3JpZCkge1xuXHQ8ZGl2XG5cdFx0I2dyaWRDb250YWluZXJcblx0XHRbY2xhc3NdPVwiXG5cdFx0XHQodG9PcHRpb25zKCkudHJlZURhdGFGaWVsZCA/ICd0cmVlLWdyaWQgJyA6ICcnKSArXG5cdFx0XHQnZ3JpZC1jb250YWluZXIgdy1mdWxsIGZsZXgganVzdGlmeS1iZXR3ZWVuICcgK1xuXHRcdFx0KGFjdFBvcygpID09ICdib3R0b20nID8gJ2ZsZXgtY29sJyA6ICdmbGV4LWNvbC1yZXZlcnNlJylcblx0XHRcIj5cblx0XHQ8YWctZ3JpZC1hbmd1bGFyXG5cdFx0XHRbdGhlbWVdPVwibXlUaGVtZSgpXCJcblx0XHRcdFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxuXHRcdFx0W2dyaWRPcHRpb25zXT1cInRvT3B0aW9ucygpXCJcblx0XHRcdFtsb2NhbGVUZXh0XT1cImxvY2FsZVRleHRcIlxuXHRcdFx0W2NvbXBvbmVudHNdPVwiY29tcG9uZW50c1wiXG5cdFx0XHRbdW5kb1JlZG9DZWxsRWRpdGluZ109XCJ0b09wdGlvbnMoKS51bmRvUmVkb0NlbGxFZGl0aW5nXCJcblx0XHRcdFt1bmRvUmVkb0NlbGxFZGl0aW5nTGltaXRdPVwidG9PcHRpb25zKCkudW5kb1JlZG9DZWxsRWRpdGluZ0xpbWl0XCJcblx0XHRcdChjZWxsVmFsdWVDaGFuZ2VkKT1cImNlbGxWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG5cdFx0XHQoc2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG5cdFx0XHQocm93R3JvdXBPcGVuZWQpPVwib25Sb3dHcm91cE9wZW5lZCgpXCJcblx0XHRcdChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXG5cdFx0XHQocm93RHJhZ0VuZCk9XCJvblJvd0RyYWdFbmQoJGV2ZW50KVwiXG5cdFx0XHQocm93RHJhZ0VudGVyKT1cInJvd0RyYWdFbnRlcigkZXZlbnQpXCIgLz5cblx0XHRAaWYgKHNob3dBY3QoKSAmJiBhdXRoTGV2ZWwoKSA+PSAzICYmIChhZGRUeXBlKCkgIT0gJ25vbmUnIHx8IHNob3dEZWxldGUoKSkpIHtcblx0XHRcdEBpZiAoc2hvd0hvcml6b250YWwpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItdCBib3JkZXItZ3JheS0zMDBcIj48L2Rpdj5cblx0XHRcdH1cblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdXCI+XG5cdFx0XHRcdEBpZiAoYWRkVHlwZSgpICE9ICdub25lJykge1xuXHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj1cInBpIHBpLXBsdXNcIlxuXHRcdFx0XHRcdFx0W3RleHRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRzZXZlcml0eT1cInN1Y2Nlc3NcIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImdyaWREaXNhYmxlKClcIlxuXHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiYWRkUm93KClcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHRcdEBpZiAoc2hvd0RlbGV0ZSgpKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPVwicGkgcGktdHJhc2hcIlxuXHRcdFx0XHRcdFx0W3RleHRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRzZXZlcml0eT1cImRhbmdlclwiXG5cdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZ3JpZERpc2FibGUoKVwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJkZWxSb3dzKClcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHR9XG5cdDwvZGl2PlxufVxuIl19
|