@sachin9822/reports-lib 0.0.196 → 0.0.198

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.
@@ -982,12 +982,12 @@ export class TrialBalanceAccountsReportComponent {
982
982
  }
983
983
  }
984
984
  TrialBalanceAccountsReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TrialBalanceAccountsReportComponent, deps: [{ token: i1.ReportService }, { token: i2.ExportService }], target: i0.ɵɵFactoryTarget.Component });
985
- TrialBalanceAccountsReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TrialBalanceAccountsReportComponent, selector: "lib-trial-balance-accounts-report", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\n\n<div *ngIf=\"dataReady && trialBalanceReport?.mainCOAGroups?.length > 0\">\n <lib-metadata [reportName]=\"'Xpress Money - MI Accounts'\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\"\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"metaDataTwo\" (exportEvent)=\"handleExport($event)\"\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n <div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"rowData?.length\" [defaultSize]=\"'15'\"\n [gridApi]=\"gridApi\"></lib-page-size-selector>\n\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"height: 400px;\" [domLayout]=\"'normal'\"\n [rowData]=\"rowData\" [defaultColDef]=\"defaultColDef\" [columnDefs]=\"columnDefs\" [rowClassRules]=\"rowClassRules\"\n [pagination]=\"true\" (gridReady)=\"onGridReady($event)\" [paginationPageSize]=\"pageSize\"></ag-grid-angular>\n\n </div>\n\n</div>\n\n<div class=\"alert alert-warning mt-3\" *ngIf=\"trialBalanceReport?.mainCOAGroups?.length==0\">\n No Data found matching your search criteria.\n</div>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.transaction-grid ::ng-deep .ag-row.total-row .ag-cell{font-weight:700!important}.transaction-grid ::ng-deep .ag-cell.total-positive{font-weight:700!important;color:#000!important}.transaction-grid ::ng-deep .ag-cell.total-negative{font-weight:700!important;color:red!important}.transaction-grid ::ng-deep .ag-cell.positive-value{color:#000!important}.transaction-grid ::ng-deep .ag-cell.negative-value{color:red!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i8.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
985
+ TrialBalanceAccountsReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TrialBalanceAccountsReportComponent, selector: "lib-trial-balance-accounts-report", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\n\n<div *ngIf=\"dataReady && trialBalanceReport?.mainCOAGroups?.length > 0\">\n <lib-metadata [reportName]=\"'Xpress Money - MI Accounts'\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\"\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"metaDataTwo\" (exportEvent)=\"handleExport($event)\"\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n <div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"rowData?.length\" [defaultSize]=\"'15'\"\n [gridApi]=\"gridApi\"></lib-page-size-selector>\n\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"height: 400px;\" [domLayout]=\"'normal'\"\n [rowData]=\"rowData\" [defaultColDef]=\"defaultColDef\" [columnDefs]=\"columnDefs\" [rowClassRules]=\"rowClassRules\"\n [pagination]=\"true\" (gridReady)=\"onGridReady($event)\" [paginationPageSize]=\"pageSize\" [rowHeight]=\"20\"\n [headerHeight]=\"22\" (paginationChanged)=\"onResize()\"></ag-grid-angular>\n\n </div>\n\n</div>\n\n<div class=\"alert alert-warning mt-3\" *ngIf=\"trialBalanceReport?.mainCOAGroups?.length==0\">\n No Data found matching your search criteria.\n</div>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.transaction-grid ::ng-deep .ag-row.total-row .ag-cell{font-weight:700!important}.transaction-grid ::ng-deep .ag-cell.total-positive{font-weight:700!important;color:#000!important}.transaction-grid ::ng-deep .ag-cell.total-negative{font-weight:700!important;color:red!important}.transaction-grid ::ng-deep .ag-cell.positive-value{color:#000!important}.transaction-grid ::ng-deep .ag-cell.negative-value{color:red!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i8.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
986
986
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TrialBalanceAccountsReportComponent, decorators: [{
987
987
  type: Component,
988
- args: [{ selector: 'lib-trial-balance-accounts-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\n\n<div *ngIf=\"dataReady && trialBalanceReport?.mainCOAGroups?.length > 0\">\n <lib-metadata [reportName]=\"'Xpress Money - MI Accounts'\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\"\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"metaDataTwo\" (exportEvent)=\"handleExport($event)\"\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n <div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"rowData?.length\" [defaultSize]=\"'15'\"\n [gridApi]=\"gridApi\"></lib-page-size-selector>\n\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"height: 400px;\" [domLayout]=\"'normal'\"\n [rowData]=\"rowData\" [defaultColDef]=\"defaultColDef\" [columnDefs]=\"columnDefs\" [rowClassRules]=\"rowClassRules\"\n [pagination]=\"true\" (gridReady)=\"onGridReady($event)\" [paginationPageSize]=\"pageSize\"></ag-grid-angular>\n\n </div>\n\n</div>\n\n<div class=\"alert alert-warning mt-3\" *ngIf=\"trialBalanceReport?.mainCOAGroups?.length==0\">\n No Data found matching your search criteria.\n</div>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.transaction-grid ::ng-deep .ag-row.total-row .ag-cell{font-weight:700!important}.transaction-grid ::ng-deep .ag-cell.total-positive{font-weight:700!important;color:#000!important}.transaction-grid ::ng-deep .ag-cell.total-negative{font-weight:700!important;color:red!important}.transaction-grid ::ng-deep .ag-cell.positive-value{color:#000!important}.transaction-grid ::ng-deep .ag-cell.negative-value{color:red!important}\n"] }]
988
+ args: [{ selector: 'lib-trial-balance-accounts-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\n\n<div *ngIf=\"dataReady && trialBalanceReport?.mainCOAGroups?.length > 0\">\n <lib-metadata [reportName]=\"'Xpress Money - MI Accounts'\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\"\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"metaDataTwo\" (exportEvent)=\"handleExport($event)\"\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n <div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"rowData?.length\" [defaultSize]=\"'15'\"\n [gridApi]=\"gridApi\"></lib-page-size-selector>\n\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"height: 400px;\" [domLayout]=\"'normal'\"\n [rowData]=\"rowData\" [defaultColDef]=\"defaultColDef\" [columnDefs]=\"columnDefs\" [rowClassRules]=\"rowClassRules\"\n [pagination]=\"true\" (gridReady)=\"onGridReady($event)\" [paginationPageSize]=\"pageSize\" [rowHeight]=\"20\"\n [headerHeight]=\"22\" (paginationChanged)=\"onResize()\"></ag-grid-angular>\n\n </div>\n\n</div>\n\n<div class=\"alert alert-warning mt-3\" *ngIf=\"trialBalanceReport?.mainCOAGroups?.length==0\">\n No Data found matching your search criteria.\n</div>", styles: [".transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.transaction-grid ::ng-deep .ag-row.total-row .ag-cell{font-weight:700!important}.transaction-grid ::ng-deep .ag-cell.total-positive{font-weight:700!important;color:#000!important}.transaction-grid ::ng-deep .ag-cell.total-negative{font-weight:700!important;color:red!important}.transaction-grid ::ng-deep .ag-cell.positive-value{color:#000!important}.transaction-grid ::ng-deep .ag-cell.negative-value{color:red!important}\n"] }]
989
989
  }], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.ExportService }]; }, propDecorators: { onResize: [{
990
990
  type: HostListener,
991
991
  args: ['window:resize', ['$event']]
992
992
  }] } });
993
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpYWwtYmFsYW5jZS1hY2NvdW50cy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0L3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7QUEyQnhDLE1BQU0sT0FBTyxtQ0FBbUM7SUFxRTlDLFlBQW9CLGFBQTRCLEVBQVUsYUFBNEI7UUFBbEUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWxFdEYsZUFBVSxHQUFXLDBCQUEwQixDQUFBO1FBSS9DLDBCQUFxQixHQUFHLHNCQUFzQixDQUFDO1FBQy9DLGlCQUFZLEdBQTJCLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztRQUV2RSx5QkFBb0IsR0FBVyxPQUFPLENBQUM7UUFDdkMsYUFB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LENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU5RCxNQUFNLEdBQUcsR0FBeUM7WUFDaEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDNUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1NBQzFILENBQUM7UUFFRixJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7Z0lBNWxDVSxtQ0FBbUM7b0hBQW5DLG1DQUFtQyx1SUNwQ2hELDR2Q0FzQk07MkZEY08sbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNFLG1DQUFtQztnSUFrUTdDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uQXBpLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcbmltcG9ydCB7IEFjY291bnREZXRhaWwsIFRyaWFsQmFsYW5jZVJlcG9ydCB9IGZyb20gJy4uLy4uL21vZGVscy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLm1vZGVscyc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcblxuXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcbiAgaW50ZXJmYWNlIGpzUERGIHtcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnRSZXF1ZXN0RFRPIHtcbiAgeWVhcjogbnVtYmVyO1xuICBkYXRlVHlwZTogc3RyaW5nO1xuICBmcm9tRGF0ZTogc3RyaW5nO1xuICB0b0RhdGU6IHN0cmluZztcbiAgYWNjb3VudFN0YXR1czogc3RyaW5nO1xuICBidXNpbmVzc0xpbmU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbiAgY29tcGFueUNvZGU6IHN0cmluZztcbiAgcmVwb3J0UGVyaW9kOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgUmVwb3J0TmFtZTogc3RyaW5nID0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIlxuICBncmlkQXBpOiBHcmlkQXBpO1xuICBtZXRhRGF0YU9uZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbWV0YURhdGFUd286IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlcyA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XG4gIHRyaWFsQmFsYW5jZVJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0O1xuICBzZWxlY3RlZEV4cG9ydE9wdGlvbjogc3RyaW5nID0gJ2V4Y2VsJztcbiAgcGFnZVNpemU6IG51bWJlciA9IDE1O1xuICBkYXRhUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBhY2NvdW50U3RhdHVzOiBzdHJpbmcgPSAnJztcbiAgY3VycmVuY3k6IHN0cmluZyA9ICcnO1xuICBkYXRlVHlwZTogc3RyaW5nID0gJyc7XG4gIGZyb21EYXRlOiBzdHJpbmcgPSAnJztcbiAgdG9EYXRlOiBzdHJpbmcgPSAnJztcbiAgYnVzaW5lc3NMaW5lOiBzdHJpbmcgPSAnJztcblxuICByZXBvcnRVc2VyOiBzdHJpbmcgPSAnJztcbiAgcmVwb3J0VGltZTogc3RyaW5nID0gJyc7XG4gIHJlcG9ydFBlcmlvZDogc3RyaW5nID0gJyc7XG5cbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xuICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxuICAgIGNlbGxTdHlsZToge1xuICAgICAgdXNlclNlbGVjdDogJ3RleHQnLFxuICAgICAgJ2xpbmUtaGVpZ2h0JzogJzEuMicsXG4gICAgICAnd2hpdGUtc3BhY2UnOiAnbm9ybWFsJyxcbiAgICAgICd3b3JkLWJyZWFrJzogJ25vcm1hbCcsXG4gICAgICAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyxcbiAgICB9LFxuXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcbiAgICB3cmFwVGV4dDogdHJ1ZSxcbiAgICBhdXRvSGVpZ2h0OiB0cnVlLFxuXG4gICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICd0b3RhbC1wb3NpdGl2ZSc6IHBhcmFtcyA9PiBwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPj0gMCxcbiAgICAgICd0b3RhbC1uZWdhdGl2ZSc6IHBhcmFtcyA9PiBwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPCAwLFxuICAgICAgJ3Bvc2l0aXZlLXZhbHVlJzogcGFyYW1zID0+ICFwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPj0gMCxcbiAgICAgICduZWdhdGl2ZS12YWx1ZSc6IHBhcmFtcyA9PiAhcGFyYW1zLmRhdGE/LmlzVG90YWxSb3cgJiYgcGFyYW1zLnZhbHVlIDwgMCxcbiAgICB9XG4gIH07XG5cbiAgcm93Q2xhc3NSdWxlcyA9IHtcbiAgICAndG90YWwtcm93JzogcGFyYW1zID0+IHBhcmFtcy5kYXRhPy5pc1RvdGFsUm93XG4gIH07XG5cbiAgY29sdW1uRGVmczogQ29sRGVmW10gPVxuICAgIFtcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0NPQSBDb2RlJywgZmllbGQ6ICdjb2FDb2RlJywgdG9vbHRpcEZpZWxkOiAnY29hQ29kZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0FjY291bnQgQ29kZScsIGZpZWxkOiAnYWNjb3VudENvZGUnLCB0b29sdGlwRmllbGQ6ICdhY2NvdW50Q29kZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0FjY291bnQgRGVzY3JpcHRpb24nLCBmaWVsZDogJ2FjY291bnREZXNjcmlwdGlvbicsIHRvb2x0aXBGaWVsZDogJ2FjY291bnREZXNjcmlwdGlvbicgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ29wZW5pbmdCYWxhbmNlJywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdvcGVuaW5nQmFsYW5jZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0RlYml0cyBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ2RlYml0JywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdkZWJpdCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0NyZWRpdHMgTG9jYWwgQW1vdW50JywgZmllbGQ6ICdjcmVkaXQnLCB0eXBlOiAnbnVtZXJpY0NvbHVtbicsIHRvb2x0aXBGaWVsZDogJ2NyZWRpdCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ05ldCBNb3ZlbWVudCBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ25ldE1vdmVtZW50JywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICduZXRNb3ZlbWVudCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0Nsb3NpbmcgQmFsYW5jZSBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ2Nsb3NpbmdCYWxhbmNlJywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdjbG9zaW5nQmFsYW5jZScgfVxuICAgIF07XG5cbiAgcm93RGF0YTogQWNjb3VudERldGFpbFtdID0gW107XG4gIGdyaWRDb2x1bW5BcGk6IENvbHVtbkFwaTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gY29uc3QgcGFyYW1zID0ge1xuXG4gICAgLy8gICB5ZWFyOiAyMDI0LFxuICAgIC8vICAgZGF0ZVR5cGU6IFwiVkRcIixcbiAgICAvLyAgIGZyb21EYXRlOiBcIjIwMjQtMDQtMDFUMDA6MDA6MDBcIixcbiAgICAvLyAgIHRvRGF0ZTogXCIyMDI0LTA0LTAxVDAwOjAwOjAwXCIsXG4gICAgLy8gICBhY2NvdW50U3RhdHVzOiBcIkFjdGl2ZVwiLFxuICAgIC8vICAgYnVzaW5lc3NMaW5lOiBcIkFsbFwiLFxuICAgIC8vICAgY3VycmVuY3k6IFwiQWxsXCIsXG4gICAgLy8gICBjb21wYW55Q29kZTogXCJCSFwiXG5cblxuICAgIC8vIH07XG5cbiAgICAvLyB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgIC8vICAgbmV4dDogKHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KSA9PiB7XG4gICAgLy8gICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xuICAgIC8vICAgICB0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydCA9IHJlcG9ydDtcbiAgICAvLyAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHJlcG9ydCk7XG5cbiAgICAvLyAgICAgdGhpcy5tZXRhRGF0YU9uZSA9IHtcbiAgICAvLyAgICAgICAnUmVwb3J0IFVzZXInOiByZXBvcnQucmVwb3J0VXNlcixcbiAgICAvLyAgICAgICAnUmVwb3J0IFRpbWUnOiBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKSxcbiAgICAvLyAgICAgfTtcblxuICAgIC8vICAgICAvLyB0aGlzLm1ldGFEYXRhT25lID0ge1xuICAgIC8vICAgICAvLyAnUmVwb3J0IFVzZXInOiByZXBvcnQucmVwb3J0VXNlcixcbiAgICAvLyAgICAgLy8gJ0FjY291bnQgU3RhdHVzJzogJ0FjdGl2ZScsXG4gICAgLy8gICAgIC8vICdEYXRlIFR5cGUnOiAnVmFsdWUgRGF0ZScsXG4gICAgLy8gICAgIC8vICdCdXNpbmVzcyBMaW5lJzogJ0FsbCcsXG4gICAgLy8gICAgIC8vIH07XG5cbiAgICAvLyAgICAgLy8gdGhpcy5tZXRhRGF0YVR3byA9IHtcbiAgICAvLyAgICAgLy8gJ1JlcG9ydCBUaW1lJzogZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyksXG4gICAgLy8gICAgIC8vICdDdXJyZW5jeSc6ICdBbGwnLFxuICAgIC8vICAgICAvLyAnRnJvbSBEYXRlJzogJzAxLzA0LzIwMjQnLFxuICAgIC8vICAgICAvLyAnVG8gRGF0ZSc6ICcwMS8wNC8yMDI0JyxcbiAgICAvLyAgICAgLy8gfTtcblxuICAgIC8vICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XG4gICAgLy8gICB9LFxuICAgIC8vICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdHJpYWwgYmFsYW5jZSByZXBvcnQ6JywgZXJyKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldFRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHJlcTogYW55KSB7XG5cbiAgICB0aGlzLmRhdGFSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0ID0gbnVsbDtcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcbiAgICBjb25zb2xlLmxvZygnaW4gZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQgOiAnKVxuICAgIGNvbnNvbGUubG9nKHJlcSk7XG5cbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KSA9PiB7XG4gICAgICAgIHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICB0aGlzLmRhdGFSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwb3J0VXNlciA9IHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0LnJlcG9ydFVzZXI7XG4gICAgICAgIHRoaXMucmVwb3J0VGltZSA9IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgICB0aGlzLnJlcG9ydFBlcmlvZCA9IHJlcS5yZXBvcnRQZXJpb2Q7XG5cbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzID0gcmVxLmFjY291bnRTdGF0dXM7XG4gICAgICAgIHRoaXMuY3VycmVuY3kgPSByZXEuY3VycmVuY3k7XG4gICAgICAgIHRoaXMuZGF0ZVR5cGUgPSByZXEuZGF0ZVR5cGUgPT0gXCJWRFwiID8gXCJWYWx1ZSBEYXRlXCIgOiBcIlBvc3RpbmcgRGF0ZVwiO1xuICAgICAgICB0aGlzLmJ1c2luZXNzTGluZSA9IHJlcS5idXNpbmVzc0xpbmU7XG5cbiAgICAgICAgLy8gdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuZmxhdHRlblJlcG9ydChyZXBvcnQpLm1hcChhY2MgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgY3JlZGl0OiBOdW1iZXIoYWNjLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKVxuICAgICAgICB9KSk7XG5cblxuICAgICAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xuICAgICAgICAgICdSZXBvcnQgVXNlcic6IHJlcG9ydC5yZXBvcnRVc2VyLFxuICAgICAgICAgICdSZXBvcnQgVGltZSc6IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpLFxuICAgICAgICAgICdSZXBvcnQgUGVyaW9kJzogdGhpcy5yZXBvcnRQZXJpb2QsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGhpcy5tZXRhRGF0YU9uZSA9IHtcbiAgICAgICAgLy8gJ1JlcG9ydCBVc2VyJzogcmVwb3J0LnJlcG9ydFVzZXIsXG4gICAgICAgIC8vICdBY2NvdW50IFN0YXR1cyc6ICdBY3RpdmUnLFxuICAgICAgICAvLyAnRGF0ZSBUeXBlJzogJ1ZhbHVlIERhdGUnLFxuICAgICAgICAvLyAnQnVzaW5lc3MgTGluZSc6ICdBbGwnLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIHRoaXMubWV0YURhdGFUd28gPSB7XG4gICAgICAgIC8vICdSZXBvcnQgVGltZSc6IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpLFxuICAgICAgICAvLyAnQ3VycmVuY3knOiAnQWxsJyxcbiAgICAgICAgLy8gJ0Zyb20gRGF0ZSc6ICcwMS8wNC8yMDI0JyxcbiAgICAgICAgLy8gJ1RvIERhdGUnOiAnMDEvMDQvMjAyNCcsXG4gICAgICAgIC8vIH07XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHRyaWFsIGJhbGFuY2UgcmVwb3J0OicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmbGF0dGVuUmVwb3J0KHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KTogQWNjb3VudERldGFpbFtdIHtcbiAgICBjb25zdCByb3dzOiBBY2NvdW50RGV0YWlsW10gPSBbXTtcblxuICAgIHJlcG9ydC5tYWluQ09BR3JvdXBzLmZvckVhY2gobWFpbiA9PiB7XG4gICAgICBtYWluLnN1YkNPQUdyb3Vwcy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgIHN1Yi5jb2FHcm91cHMuZm9yRWFjaChjb2EgPT4ge1xuICAgICAgICAgIGNvYS5hY2NvdW50cy5mb3JFYWNoKGFjY291bnQgPT4gcm93cy5wdXNoKGFjY291bnQpKTtcblxuICAgICAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgICAgIGFjY291bnRDb2RlOiAnVG90YWw6JyxcbiAgICAgICAgICAgIGFjY291bnREZXNjcmlwdGlvbjogYCR7Y29hLmNvYURlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKGNvYS50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgICBkZWJpdDogTnVtYmVyKGNvYS50b3RhbHMuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgICBjcmVkaXQ6IE51bWJlcihjb2EudG90YWxzLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoY29hLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIGNsb3NpbmdCYWxhbmNlOiBOdW1iZXIoY29hLnRvdGFscy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgICBhY2NvdW50Q29kZTogJ1RvdGFsOicsXG4gICAgICAgICAgYWNjb3VudERlc2NyaXB0aW9uOiBgJHtzdWIuc3ViQ09BRGVzY3JpcHRpb259YCxcbiAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKHN1Yi50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihzdWIudG90YWxzLmRlYml0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIGNyZWRpdDogTnVtYmVyKHN1Yi50b3RhbHMuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoc3ViLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKHN1Yi50b3RhbHMuY2xvc2luZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgYWNjb3VudENvZGU6ICdUb3RhbDonLFxuICAgICAgICBhY2NvdW50RGVzY3JpcHRpb246IGAke21haW4ubWFpbkNPQURlc2NyaXB0aW9ufWAsXG4gICAgICAgIG9wZW5pbmdCYWxhbmNlOiBOdW1iZXIobWFpbi50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgIGRlYml0OiBOdW1iZXIobWFpbi50b3RhbHMuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgIGNyZWRpdDogTnVtYmVyKG1haW4udG90YWxzLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgbmV0TW92ZW1lbnQ6IE51bWJlcihtYWluLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgY2xvc2luZ0JhbGFuY2U6IE51bWJlcihtYWluLnRvdGFscy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByb3dzLnB1c2goe1xuICAgICAgY29hQ29kZTogJ1RPVEFMOicsXG4gICAgICBhY2NvdW50Q29kZTogJycsXG4gICAgICBhY2NvdW50RGVzY3JpcHRpb246ICcnLFxuICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgIGRlYml0OiBOdW1iZXIocmVwb3J0LmdyYW5kVG90YWwuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICBjcmVkaXQ6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5jcmVkaXQpLnRvRml4ZWQoMyksXG4gICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKHJlcG9ydC5ncmFuZFRvdGFsLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpLFxuICAgICAgY2xvc2luZ0JhbGFuY2U6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCkge1xuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpID0gcGFyYW1zLmNvbHVtbkFwaTtcblxuICAgIGNvbnN0IGFsbENvbHVtbklkczogc3RyaW5nW10gPSBbXTtcbiAgICBwYXJhbXMuY29sdW1uQXBpLmdldENvbHVtbnMoKS5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmdldENvbElkKCkpO1xuICAgIH0pO1xuICAgIHBhcmFtcy5jb2x1bW5BcGkuYXV0b1NpemVDb2x1bW5zKGFsbENvbHVtbklkcyk7XG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKCkge1xuICAgIGlmICh0aGlzLmdyaWRBcGkgJiYgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gb25TZWFyY2godGV4dDogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XG4gIC8vICAgICBzdHJcbiAgLy8gICAgICAgPy50b1N0cmluZygpXG4gIC8vICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxuICAvLyAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gIC8vICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXG4gIC8vICAgICAgIC50cmltKCk7XG5cbiAgLy8gICBjb25zdCBzZWFyY2ggPSBub3JtYWxpemUodGV4dCk7XG5cbiAgLy8gICBpZiAoc2VhcmNoKSB7XG4gIC8vICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmZsYXR0ZW5SZXBvcnQodGhpcy50cmlhbEJhbGFuY2VSZXBvcnQpLmZpbHRlcigoaXRlbSkgPT5cbiAgLy8gICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKCh2YWx1ZSkgPT4gbm9ybWFsaXplKHZhbHVlKS5pbmNsdWRlcyhzZWFyY2gpKVxuICAvLyAgICAgKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemUgPSAoc3RyOiBhbnkpOiBzdHJpbmcgPT5cbiAgICAgIHN0clxuICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUyMDBCLVxcdTIwMERcXHVGRUZGXS9nLCAnJylcbiAgICAgICAgLnRyaW0oKTtcblxuICAgIGNvbnN0IHNlYXJjaCA9IG5vcm1hbGl6ZSh0ZXh0KTtcblxuICAgIGlmIChzZWFyY2gpIHtcbiAgICAgIC8vIGZpbHRlciBmcm9tIGFscmVhZHkgZm9ybWF0dGVkIHJvd0RhdGFcbiAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuZmxhdHRlblJlcG9ydCh0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydClcbiAgICAgICAgLm1hcChhY2MgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgY3JlZGl0OiBOdW1iZXIoYWNjLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKVxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KVxuICAgICAgICAubWFwKGFjYyA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgICBkZWJpdDogTnVtYmVyKGFjYy5kZWJpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjcmVkaXQ6IE51bWJlcihhY2MuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIGNsb3NpbmdCYWxhbmNlOiBOdW1iZXIoYWNjLmNsb3NpbmdCYWxhbmNlKS50b0ZpeGVkKDMpXG4gICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IG9wdGlvbjtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgdGhpcy5leHBvcnRUb1BkZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICAgIHRoaXMuZXhwb3J0VG9Dc3YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydCgnUGxlYXNlIHNlbGVjdCBhbiBleHBvcnQgZm9ybWF0LicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydFRvUGRmKCk6IHZvaWQge1xuICAvLyAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIC8vICAgY29uc3QgdGl0bGUgPSAnWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnO1xuICAvLyAgIGNvbnN0IGZpbGVOYW1lID0gJ1RyaWFsLUJhbGFuY2UtQWNjb3VudHMtUmF3LnBkZic7XG5cbiAgLy8gICAvLyAtLS0gcGFnZSAmIGxheW91dCAtLS1cbiAgLy8gICBjb25zdCBkb2MgPSBuZXcganNQREYoeyBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScsIHVuaXQ6ICdtbScsIGZvcm1hdDogWzMxMiwgMjEwXSB9KTtcbiAgLy8gICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgLy8gICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XG4gIC8vICAgY29uc3QgbG9nb1dpZHRoID0gMzguNCwgbG9nb0hlaWdodCA9IDE3LjUsIGxvZ29YID0gbWFyZ2luTGVmdCwgbG9nb1kgPSA4O1xuICAvLyAgIGNvbnN0IHRpdGxlWSA9IDE4O1xuICAvLyAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xuXG4gIC8vICAgY29uc3QgbGFiZWxWYWx1ZUdhcCA9IDI7IC8vIG1tIGdhcCBiZXR3ZWVuIGxhYmVsIGFuZCB2YWx1ZVxuICAvLyAgIGNvbnN0IHBhaXJHYXAgPSAxNTsgICAgICAvLyBtbSBnYXAgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCBwYWlyc1xuXG4gIC8vICAgLy8gLS0tIG1ldGFkYXRhIC0tLVxuICAvLyAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ1JlcG9ydCBVc2VyOicsIHRoaXMucmVwb3J0VXNlcl0sXG4gIC8vICAgICBbJ1JlcG9ydCBUaW1lOicsIHRoaXMucmVwb3J0VGltZV0sXG4gIC8vICAgICBbJ1JlcG9ydCBQZXJpb2Q6JywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAvLyAgIF07XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxuICAvLyAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ0FjY291bnQgU3RhdHVzOicsIHRoaXMuYWNjb3VudFN0YXR1c10sXG4gIC8vICAgICBbJ0N1cnJlbmN5OicsIHRoaXMuY3VycmVuY3ldLFxuICAvLyAgICAgWydEYXRlIFR5cGU6JywgdGhpcy5kYXRlVHlwZV0sXG4gIC8vICAgICBbJ0Zyb20gRGF0ZTonLCB0aGlzLmZyb21EYXRlXSxcbiAgLy8gICAgIFsnQnVzaW5lc3MgTGluZTonLCB0aGlzLmJ1c2luZXNzTGluZV0sXG4gIC8vICAgICBbJ1RvIERhdGU6JywgdGhpcy50b0RhdGVdLFxuICAvLyAgIF07XG5cbiAgLy8gICAvLyAtLS0gZHJhdyBsb2dvICsgdGl0bGUgLS0tXG4gIC8vICAgaWYgKHRoaXMuZXhwb3J0U2VydmljZT8ubG9nb0Jhc2U2NCkge1xuICAvLyAgICAgdHJ5IHsgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZS5sb2dvQmFzZTY0LCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpOyB9IGNhdGNoIHsgfVxuICAvLyAgIH1cbiAgLy8gICBkb2Muc2V0Rm9udFNpemUoMTUpO1xuICAvLyAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAvLyAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgbWV0YWRhdGEgLS0tXG4gIC8vICAgZG9jLnNldEZvbnRTaXplKDEwKTtcbiAgLy8gICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaSkgPT4ge1xuICAvLyAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIDY7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgLy8gICAgIGRvYy50ZXh0KGxhYmVsLCBtYXJnaW5MZWZ0LCB5KTtcbiAgLy8gICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gIC8vICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XG4gIC8vICAgICBkb2MudGV4dCh2YWx1ZSwgbWFyZ2luTGVmdCArIGxhYmVsV2lkdGggKyBsYWJlbFZhbHVlR2FwLCB5KTtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50WSArPSBtZXRhZGF0YS5sZW5ndGggKiA2ICsgNjtcblxuICAvLyAgIC8vIC0tLSBkcmF3IHNlYXJjaCBjcml0ZXJpYSBoZWFkaW5nIC0tLVxuICAvLyAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAvLyAgIGRvYy50ZXh0KCdTZWFyY2ggQ3JpdGVyaWE6LScsIG1hcmdpbkxlZnQsIGN1cnJlbnRZKTtcbiAgLy8gICBjdXJyZW50WSArPSA4OyAvLyBnYXAgYmVsb3cgaGVhZGluZ1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgc2VhcmNoIGNyaXRlcmlhIHBhaXJzICgyIHBlciByb3cpIC0tLVxuICAvLyAgIGNvbnN0IHBhaXJSb3dzOiBbbnVtYmVyLCBudW1iZXJdW10gPSBbXG4gIC8vICAgICBbMCwgMV0sXG4gIC8vICAgICBbMiwgM10sXG4gIC8vICAgICBbNCwgNV0sXG4gIC8vICAgXTtcblxuICAvLyAgIHBhaXJSb3dzLmZvckVhY2gocm93UGFpciA9PiB7XG4gIC8vICAgICBjb25zdCBsZWZ0SW5kZXggPSByb3dQYWlyWzBdO1xuICAvLyAgICAgY29uc3QgcmlnaHRJbmRleCA9IHJvd1BhaXJbMV07XG5cbiAgLy8gICAgIC8vIExlZnQgcGFpclxuICAvLyAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gIC8vICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtsZWZ0SW5kZXhdWzBdLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAvLyAgICAgY29uc3QgbGVmdExhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHNlYXJjaENyaXRlcmlhW2xlZnRJbmRleF1bMF0gKyAnICcpO1xuICAvLyAgICAgZG9jLnRleHQoc2VhcmNoQ3JpdGVyaWFbbGVmdEluZGV4XVsxXSwgbWFyZ2luTGVmdCArIGxlZnRMYWJlbFdpZHRoICsgbGFiZWxWYWx1ZUdhcCwgY3VycmVudFkpO1xuXG4gIC8vICAgICAvLyBSaWdodCBwYWlyXG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgLy8gICAgIGRvYy50ZXh0KHNlYXJjaENyaXRlcmlhW3JpZ2h0SW5kZXhdWzBdLCBwYWdlV2lkdGggLyAyLCBjdXJyZW50WSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAvLyAgICAgY29uc3QgcmlnaHRMYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVswXSArICcgJyk7XG4gIC8vICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVsxXSwgcGFnZVdpZHRoIC8gMiArIHJpZ2h0TGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIGN1cnJlbnRZKTtcblxuICAvLyAgICAgY3VycmVudFkgKz0gNjtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50WSArPSA0O1xuXG4gIC8vICAgLy8gLS0tIHByZXBhcmUgaGVhZGVycyAmIHJvd3MgLS0tXG4gIC8vICAgY29uc3QgaGVhZGVycyA9IFtcbiAgLy8gICAgICdTciBObycsXG4gIC8vICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAvLyAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gIC8vICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAvLyAgIF07XG5cbiAgLy8gICBjb25zdCBmbGF0UmVwb3J0ID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcblxuICAvLyAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBmbGF0UmVwb3J0Lm1hcCgoYWNjLCBpKSA9PiBbXG4gIC8vICAgICBpICsgMSxcbiAgLy8gICAgIGFjYy5jb2FDb2RlLFxuICAvLyAgICAgYWNjLmFjY291bnRDb2RlLFxuICAvLyAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgLy8gICAgIE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLCAvLyBoZXJlIGRvIE51bWJlcihhY2Mub3BlbmluZ2JhbGFuY2UpIHRvbW9ycm93XG4gIC8vICAgICBOdW1iZXIoYWNjLmRlYml0KSxcbiAgLy8gICAgIE51bWJlcihhY2MuY3JlZGl0KSxcbiAgLy8gICAgIE51bWJlcihhY2MubmV0TW92ZW1lbnQpLFxuICAvLyAgICAgTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSlcbiAgLy8gICBdKTtcblxuICAvLyAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAvLyAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHtcbiAgLy8gICAgIDA6IHsgY2VsbFdpZHRoOiAxNSB9LCAvLyBTciBOb1xuICAvLyAgICAgMTogeyBjZWxsV2lkdGg6IDI1IH0sXG4gIC8vICAgICAyOiB7IGNlbGxXaWR0aDogMjUgfSxcbiAgLy8gICAgIDM6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAvLyAgICAgNDogeyBjZWxsV2lkdGg6IDMwIH0sXG4gIC8vICAgICA1OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgLy8gICAgIDY6IHsgY2VsbFdpZHRoOiAzMCB9LFxuICAvLyAgICAgNzogeyBjZWxsV2lkdGg6IDMwIH0sXG4gIC8vICAgICA4OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgLy8gICB9O1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgdGFibGUgLS0tXG4gIC8vICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gIC8vICAgICBoZWFkOiBbaGVhZGVyc10sXG4gIC8vICAgICBib2R5OiByb3dzLFxuICAvLyAgICAgc3RhcnRZOiBjdXJyZW50WSxcbiAgLy8gICAgIHRoZW1lOiAnZ3JpZCcsXG4gIC8vICAgICBoZWFkU3R5bGVzOiB7XG4gIC8vICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxuICAvLyAgICAgICB0ZXh0Q29sb3I6IDAsXG4gIC8vICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxuICAvLyAgICAgICBmb250U2l6ZTogOSxcbiAgLy8gICAgICAgaGFsaWduOiAnY2VudGVyJyxcbiAgLy8gICAgICAgY2VsbFdpZHRoOiAnd3JhcCcsXG4gIC8vICAgICAgIG1pbkNlbGxIZWlnaHQ6IDEwXG4gIC8vICAgICB9LFxuICAvLyAgICAgYm9keVN0eWxlczoge1xuICAvLyAgICAgICBmb250U2l6ZTogOCxcbiAgLy8gICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gIC8vICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXG4gIC8vICAgICB9LFxuICAvLyAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcbiAgLy8gICAgIGNvbHVtblN0eWxlcyxcbiAgLy8gICAgIGRpZFBhcnNlQ2VsbDogKGRhdGE6IGFueSkgPT4ge1xuICAvLyAgICAgICBjb25zdCByb3dJbmRleCA9IGRhdGEucm93LmluZGV4O1xuICAvLyAgICAgICBjb25zdCByb3dEYXRhID0gZmxhdFJlcG9ydFtyb3dJbmRleF07XG4gIC8vICAgICAgIGNvbnN0IGlzVG90YWxSb3cgPSByb3dEYXRhLmlzVG90YWxSb3c7XG5cbiAgLy8gICAgICAgaWYgKGlzVG90YWxSb3cpIGRhdGEuY2VsbC5zdHlsZXMuZm9udFN0eWxlID0gJ2JvbGQnO1xuXG4gIC8vICAgICAgIGlmIChkYXRhLmNvbHVtbi5pbmRleCA+IDMpIHtcbiAgLy8gICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEuY2VsbC5yYXc7XG4gIC8vICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPCAwKSBkYXRhLmNlbGwuc3R5bGVzLnRleHRDb2xvciA9IFsyNTUsIDAsIDBdO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG5cbiAgLy8gICAvLyAtLS0gcGFnZSBudW1iZXJzIC0tLVxuICAvLyAgIGNvbnN0IHRvdGFsUGFnZXMgPSAoZG9jIGFzIGFueSkuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuICAvLyAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsUGFnZXM7IGkrKykge1xuICAvLyAgICAgZG9jLnNldFBhZ2UoaSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gIC8vICAgICBjb25zdCBmb290ZXJZID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIDY7XG4gIC8vICAgICBkb2MudGV4dChgUGFnZSAke2l9IG9mICR7dG90YWxQYWdlc31gLCBwYWdlV2lkdGggLSAxNSwgZm9vdGVyWSwgeyBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyAtLS0gc2F2ZSBQREYgLS0tXG4gIC8vICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xuICAvLyB9XG5cblxuICBleHBvcnRUb1BkZigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpYWxCYWxhbmNlUmVwb3J0Py5tYWluQ09BR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gJ1hwcmVzcyBNb25leSAtIE1JIEFjY291bnRzJztcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdUcmlhbC1CYWxhbmNlLUFjY291bnRzLVJhdy5wZGYnO1xuXG4gICAgLy8gLS0tIHBhZ2UgJiBsYXlvdXQgLS0tXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFszMTIsIDIxMF0gfSk7XG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XG4gICAgY29uc3QgbWFyZ2luTGVmdCA9IDE1O1xuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IG1hcmdpbkxlZnQsIGxvZ29ZID0gODtcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcblxuICAgIGNvbnN0IGxhYmVsVmFsdWVHYXAgPSAyO1xuICAgIGNvbnN0IHBhaXJHYXAgPSAxNTtcblxuICAgIC8vIC0tLSBtZXRhZGF0YSAtLS1cbiAgICBjb25zdCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydSZXBvcnQgVXNlcjonLCB0aGlzLnJlcG9ydFVzZXJdLFxuICAgICAgWydSZXBvcnQgVGltZTonLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydBY2NvdW50IFN0YXR1czonLCB0aGlzLmFjY291bnRTdGF0dXNdLFxuICAgICAgWydDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmN5XSxcbiAgICAgIFsnRGF0ZSBUeXBlOicsIHRoaXMuZGF0ZVR5cGVdLFxuICAgICAgWydGcm9tIERhdGU6JywgdGhpcy5mcm9tRGF0ZV0sXG4gICAgICBbJ0J1c2luZXNzIExpbmU6JywgdGhpcy5idXNpbmVzc0xpbmVdLFxuICAgICAgWydUbyBEYXRlOicsIHRoaXMudG9EYXRlXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIGRyYXcgbG9nbyArIHRpdGxlIC0tLVxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NCwgJ1BORycsIGxvZ29YLCBsb2dvWSwgbG9nb1dpZHRoLCBsb2dvSGVpZ2h0KTtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnRleHQodGl0bGUsIHBhZ2VXaWR0aCAvIDIsIHRpdGxlWSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG5cbiAgICAvLyAtLS0gZHJhdyBtZXRhZGF0YSAtLS1cbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XG4gICAgICBjb25zdCB5ID0gY3VycmVudFkgKyBpICogNjtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgICAgZG9jLnRleHQobGFiZWwsIG1hcmdpbkxlZnQsIHkpO1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsICsgJyAnKTtcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCBtYXJnaW5MZWZ0ICsgbGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIHkpO1xuICAgIH0pO1xuICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIDYgKyA2O1xuXG4gICAgLy8gLS0tIGRyYXcgc2VhcmNoIGNyaXRlcmlhIGhlYWRpbmcgLS0tXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnRleHQoJ1NlYXJjaCBDcml0ZXJpYTotJywgbWFyZ2luTGVmdCwgY3VycmVudFkpO1xuICAgIGN1cnJlbnRZICs9IDg7XG5cbiAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgcGFpcnMgLS0tXG4gICAgY29uc3QgcGFpclJvd3M6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtcbiAgICAgIFswLCAxXSxcbiAgICAgIFsyLCAzXSxcbiAgICAgIFs0LCA1XSxcbiAgICBdO1xuXG4gICAgcGFpclJvd3MuZm9yRWFjaChyb3dQYWlyID0+IHtcbiAgICAgIGNvbnN0IGxlZnRJbmRleCA9IHJvd1BhaXJbMF07XG4gICAgICBjb25zdCByaWdodEluZGV4ID0gcm93UGFpclsxXTtcblxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtsZWZ0SW5kZXhdWzBdLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgY29uc3QgbGVmdExhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHNlYXJjaENyaXRlcmlhW2xlZnRJbmRleF1bMF0gKyAnICcpO1xuICAgICAgZG9jLnRleHQoc2VhcmNoQ3JpdGVyaWFbbGVmdEluZGV4XVsxXSwgbWFyZ2luTGVmdCArIGxlZnRMYWJlbFdpZHRoICsgbGFiZWxWYWx1ZUdhcCwgY3VycmVudFkpO1xuXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICAgIGRvYy50ZXh0KHNlYXJjaENyaXRlcmlhW3JpZ2h0SW5kZXhdWzBdLCBwYWdlV2lkdGggLyAyLCBjdXJyZW50WSk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgY29uc3QgcmlnaHRMYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVswXSArICcgJyk7XG4gICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVsxXSwgcGFnZVdpZHRoIC8gMiArIHJpZ2h0TGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIGN1cnJlbnRZKTtcblxuICAgICAgY3VycmVudFkgKz0gNjtcbiAgICB9KTtcbiAgICBjdXJyZW50WSArPSA0O1xuXG4gICAgLy8gLS0tIGhlYWRlcnMgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG5cbiAgICBjb25zdCBmbGF0UmVwb3J0ID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcblxuICAgIC8vIC0tLSByb3dzIC0tLVxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBmbGF0UmVwb3J0Lm1hcCgoYWNjLCBpKSA9PiBbXG4gICAgICBpICsgMSxcbiAgICAgIGFjYy5jb2FDb2RlLFxuICAgICAgYWNjLmFjY291bnRDb2RlLFxuICAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgICAgIGFjYy5vcGVuaW5nQmFsYW5jZSAhPSBudWxsID8gTnVtYmVyKGFjYy5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSA6IFwiXCIsXG4gICAgICBhY2MuZGViaXQgIT0gbnVsbCA/IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMykgOiBcIlwiLFxuICAgICAgYWNjLmNyZWRpdCAhPSBudWxsID8gTnVtYmVyKGFjYy5jcmVkaXQpLnRvRml4ZWQoMykgOiBcIlwiLFxuICAgICAgYWNjLm5ldE1vdmVtZW50ICE9IG51bGwgPyBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpIDogXCJcIixcbiAgICAgIGFjYy5jbG9zaW5nQmFsYW5jZSAhPSBudWxsID8gTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSA6IFwiXCJcbiAgICBdKTtcblxuICAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHtcbiAgICAgIDA6IHsgY2VsbFdpZHRoOiAxNSB9LFxuICAgICAgMTogeyBjZWxsV2lkdGg6IDI1IH0sXG4gICAgICAyOiB7IGNlbGxXaWR0aDogMjUgfSxcbiAgICAgIDM6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAgICAgNDogeyBjZWxsV2lkdGg6IDMwIH0sXG4gICAgICA1OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgICAgIDY6IHsgY2VsbFdpZHRoOiAzMCB9LFxuICAgICAgNzogeyBjZWxsV2lkdGg6IDMwIH0sXG4gICAgICA4OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgICB9O1xuXG4gICAgLy8gLS0tIGRyYXcgdGFibGUgLS0tXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBoZWFkOiBbaGVhZGVyc10sXG4gICAgICBib2R5OiByb3dzLFxuICAgICAgc3RhcnRZOiBjdXJyZW50WSxcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBoZWFkU3R5bGVzOiB7XG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxuICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxuICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgaGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgY2VsbFdpZHRoOiAnd3JhcCcsXG4gICAgICAgIG1pbkNlbGxIZWlnaHQ6IDEwXG4gICAgICB9LFxuICAgICAgYm9keVN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogOCxcbiAgICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcbiAgICAgIGNvbHVtblN0eWxlcyxcbiAgICAgIGRpZFBhcnNlQ2VsbDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IGRhdGEucm93LmluZGV4O1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZmxhdFJlcG9ydFtyb3dJbmRleF07XG4gICAgICAgIGNvbnN0IGlzVG90YWxSb3cgPSByb3dEYXRhLmlzVG90YWxSb3c7XG5cbiAgICAgICAgaWYgKGlzVG90YWxSb3cpIGRhdGEuY2VsbC5zdHlsZXMuZm9udFN0eWxlID0gJ2JvbGQnO1xuXG4gICAgICAgIC8vIGhpZ2hsaWdodCBuZWdhdGl2ZXMgaW4gcmVkXG4gICAgICAgIGlmIChkYXRhLmNvbHVtbi5pbmRleCA+IDMpIHtcbiAgICAgICAgICBjb25zdCBrZXlNYXAgPSBbXCJvcGVuaW5nQmFsYW5jZVwiLCBcImRlYml0XCIsIFwiY3JlZGl0XCIsIFwibmV0TW92ZW1lbnRcIiwgXCJjbG9zaW5nQmFsYW5jZVwiXTtcbiAgICAgICAgICBjb25zdCBrZXkgPSBrZXlNYXBbZGF0YS5jb2x1bW4uaW5kZXggLSA0XTtcbiAgICAgICAgICBjb25zdCByYXcgPSByb3dEYXRhW2tleV07XG4gICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gICAgICAgICAgaWYgKCFpc05hTihudW0pICYmIG51bSA8IDApIHtcbiAgICAgICAgICAgIGRhdGEuY2VsbC5zdHlsZXMudGV4dENvbG9yID0gWzI1NSwgMCwgMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAtLS0gcGFnZSBudW1iZXJzIC0tLVxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSAoZG9jIGFzIGFueSkuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsUGFnZXM7IGkrKykge1xuICAgICAgZG9jLnNldFBhZ2UoaSk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgICBjb25zdCBmb290ZXJZID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIDY7XG4gICAgICBkb2MudGV4dChgUGFnZSAke2l9IG9mICR7dG90YWxQYWdlc31gLCBwYWdlV2lkdGggLSAxNSwgZm9vdGVyWSwgeyBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0gc2F2ZSBQREYgLS0tXG4gICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xuICB9XG5cblxuICAvLyBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xuICAvLyAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIC8vICAgY29uc3QgZmlsZU5hbWUgPSAnVHJpYWwtQmFsYW5jZS1BY2NvdW50cy1SYXcueGxzeCc7XG4gIC8vICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAvLyAgIGNvbnN0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdUcmlhbCBCYWxhbmNlJyk7XG5cbiAgLy8gICBsZXQgY3VycmVudFJvdyA9IDE7XG5cbiAgLy8gICAvLyAtLS0gYWRkIGxvZ28gaWYgYXZhaWxhYmxlIC0tLVxuICAvLyAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgLy8gICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcbiAgLy8gICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XG4gIC8vICAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcbiAgLy8gICAgICAgZXh0ZW5zaW9uOiAncG5nJ1xuICAvLyAgICAgfSk7XG4gIC8vICAgICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gIC8vICAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXG4gIC8vICAgICAgIGV4dDogeyB3aWR0aDogMTIwLCBoZWlnaHQ6IDYwIH0sXG4gIC8vICAgICAgIGVkaXRBczogJ29uZUNlbGwnXG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyAtLS0gdGl0bGUgLS0tXG4gIC8vICAgY29uc3QgdGl0bGUgPSAnWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnO1xuICAvLyAgIHNoZWV0Lm1lcmdlQ2VsbHMoMSwgMywgMSwgOSk7XG4gIC8vICAgY29uc3QgdGl0bGVDZWxsID0gc2hlZXQuZ2V0Q2VsbCgnQzEnKTtcbiAgLy8gICB0aXRsZUNlbGwudmFsdWUgPSB0aXRsZTtcbiAgLy8gICB0aXRsZUNlbGwuZm9udCA9IHsgc2l6ZTogMTUsIGJvbGQ6IHRydWUgfTtcbiAgLy8gICB0aXRsZUNlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICdtaWRkbGUnIH07XG4gIC8vICAgY3VycmVudFJvdyA9IDQ7XG5cbiAgLy8gICAvLyAtLS0gbWV0YWRhdGEgKGxhYmVsIGJvbGQsIHZhbHVlIG5vcm1hbCkgLS0tXG4gIC8vICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgLy8gICAgIFsnUmVwb3J0IFVzZXI6JywgdGhpcy5yZXBvcnRVc2VyXSxcbiAgLy8gICAgIFsnUmVwb3J0IFRpbWU6JywgdGhpcy5yZXBvcnRUaW1lXSxcbiAgLy8gICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXG4gIC8vICAgXTtcbiAgLy8gICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xuICAvLyAgICAgc2hlZXQubWVyZ2VDZWxscyhjdXJyZW50Um93LCAxLCBjdXJyZW50Um93LCA2KTsgLy8gbWVyZ2Ugd2lkZSByYW5nZVxuICAvLyAgICAgY29uc3Qgcm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG4gIC8vICAgICAvLyBVc2luZyByaWNoVGV4dCB0byBzdHlsZSBsYWJlbCBib2xkIGFuZCB2YWx1ZSBub3JtYWxcbiAgLy8gICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xuICAvLyAgICAgICByaWNoVGV4dDogW1xuICAvLyAgICAgICAgIHsgdGV4dDogbGFiZWwgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXG4gIC8vICAgICAgICAgeyB0ZXh0OiB2YWx1ZSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCgxKS5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgd3JhcFRleHQ6IHRydWUgfTtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50Um93Kys7XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIGhlYWRpbmcgLS0tXG4gIC8vICAgc2hlZXQubWVyZ2VDZWxscyhjdXJyZW50Um93LCAxLCBjdXJyZW50Um93LCA2KTtcbiAgLy8gICBzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLnZhbHVlID0gJ1NlYXJjaCBDcml0ZXJpYTotJztcbiAgLy8gICBzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgLy8gICBjdXJyZW50Um93ICs9IDI7XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIChsYWJlbCBib2xkLCB2YWx1ZSBub3JtYWwpIC0tLVxuICAvLyAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ0FjY291bnQgU3RhdHVzOicsIHRoaXMuYWNjb3VudFN0YXR1c10sXG4gIC8vICAgICBbJ0N1cnJlbmN5OicsIHRoaXMuY3VycmVuY3ldLFxuICAvLyAgICAgWydEYXRlIFR5cGU6JywgdGhpcy5kYXRlVHlwZV0sXG4gIC8vICAgICBbJ0Zyb20gRGF0ZTonLCB0aGlzLmZyb21EYXRlXSxcbiAgLy8gICAgIFsnQnVzaW5lc3MgTGluZTonLCB0aGlzLmJ1c2luZXNzTGluZV0sXG4gIC8vICAgICBbJ1RvIERhdGU6JywgdGhpcy50b0RhdGVdLFxuICAvLyAgIF07XG5cbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XG4gIC8vICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XG4gIC8vICAgICBjb25zdCByaWdodCA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcbiAgLy8gICAgIGNvbnN0IHJvdyA9IHNoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xuXG4gIC8vICAgICBzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIDMpO1xuICAvLyAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XG4gIC8vICAgICAgIHJpY2hUZXh0OiBbXG4gIC8vICAgICAgICAgeyB0ZXh0OiBsZWZ0WzBdICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxuICAvLyAgICAgICAgIHsgdGV4dDogbGVmdFsxXSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCgxKS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcblxuICAvLyAgICAgc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCA0LCByb3cubnVtYmVyLCA2KTtcbiAgLy8gICAgIHJvdy5nZXRDZWxsKDQpLnZhbHVlID0ge1xuICAvLyAgICAgICByaWNoVGV4dDogW1xuICAvLyAgICAgICAgIHsgdGV4dDogcmlnaHRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXG4gIC8vICAgICAgICAgeyB0ZXh0OiByaWdodFsxXSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCg0KS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcbiAgLy8gICB9XG4gIC8vICAgY3VycmVudFJvdysrO1xuXG4gIC8vICAgLy8gLS0tIGhlYWRlcnMgKGFkZGVkIFNyIE5vIGF0IHN0YXJ0KSAtLS1cbiAgLy8gICBjb25zdCBoZWFkZXJzID0gW1xuICAvLyAgICAgJ1NyIE5vJyxcbiAgLy8gICAgICdDT0EgQ29kZScsICdBY2NvdW50IENvZGUnLCAnQWNjb3VudCBEZXNjcmlwdGlvbicsXG4gIC8vICAgICAnT3BlbmluZyBCYWxhbmNlIExvY2FsIEFtdCcsICdEZWJpdHMgTG9jYWwgQW10JywgJ0NyZWRpdHMgTG9jYWwgQW10JyxcbiAgLy8gICAgICdOZXQgTW92ZW1lbnQgTG9jYWwgQW10JywgJ0Nsb3NpbmcgQmFsYW5jZSBMb2NhbCBBbXQnXG4gIC8vICAgXTtcbiAgLy8gICBjb25zdCBoZWFkZXJSb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgLy8gICBoZWFkZXJzLmZvckVhY2goKGgsIGkpID0+IHtcbiAgLy8gICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpICsgMSk7XG4gIC8vICAgICBjZWxsLnZhbHVlID0gaDtcbiAgLy8gICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuICAvLyAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IGhvcml6b250YWw6ICdjZW50ZXInLCB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XG4gIC8vICAgICBjZWxsLmZpbGwgPSB7IHR5cGU6ICdwYXR0ZXJuJywgcGF0dGVybjogJ3NvbGlkJywgZmdDb2xvcjogeyBhcmdiOiAnRENEQ0RDJyB9IH07XG4gIC8vICAgICBjZWxsLmJvcmRlciA9IHtcbiAgLy8gICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgLy8gICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxuICAvLyAgICAgfTtcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSByb3dzIChwcmVwZW5kIFNyIE5vKSAtLS1cbiAgLy8gICBjb25zdCByb3dzID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KS5tYXAoKGFjYywgaWR4KSA9PiBbXG4gIC8vICAgICBpZHggKyAxLFxuICAvLyAgICAgYWNjLmNvYUNvZGUsXG4gIC8vICAgICBhY2MuYWNjb3VudENvZGUsXG4gIC8vICAgICBhY2MuYWNjb3VudERlc2NyaXB0aW9uLFxuICAvLyAgICAgcGFyc2VGbG9hdChhY2Mub3BlbmluZ0JhbGFuY2UudG9TdHJpbmcoKSkudG9GaXhlZCgzKSxcbiAgLy8gICAgIHBhcnNlRmxvYXQoYWNjLmRlYml0LnRvU3RyaW5nKCkpLnRvRml4ZWQoMyksXG4gIC8vICAgICBOdW1iZXIoYWNjLmNyZWRpdCksXG4gIC8vICAgICBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KSxcbiAgLy8gICAgIE51bWJlcihhY2MuY2xvc2luZ0JhbGFuY2UpLFxuICAvLyAgICAgYWNjLmlzVG90YWxSb3cgfHwgZmFsc2VcbiAgLy8gICBdKTtcblxuICAvLyAgIHJvd3MuZm9yRWFjaChyID0+IHtcbiAgLy8gICAgIGNvbnN0IHJvdyA9IHNoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xuICAvLyAgICAgci5zbGljZSgwLCA5KS5mb3JFYWNoKCh2YWwsIGkpID0+IHtcbiAgLy8gICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcbiAgLy8gICAgICAgY2VsbC52YWx1ZSA9IHZhbDtcblxuICAvLyAgICAgICAvLyBib3JkZXJzXG4gIC8vICAgICAgIGNlbGwuYm9yZGVyID0ge1xuICAvLyAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgLy8gICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cbiAgLy8gICAgICAgfTtcblxuICAvLyAgICAgICAvLyBib2xkIHRvdGFsIHJvd3NcbiAgLy8gICAgICAgaWYgKHJbOV0pIHtcbiAgLy8gICAgICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlcnMgcmVkXG4gIC8vICAgICAgIGlmIChpID4gMyAmJiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPCAwKSB7XG4gIC8vICAgICAgICAgY2VsbC5mb250ID0geyBjb2xvcjogeyBhcmdiOiAnRkYwMDAwJyB9LCBib2xkOiByWzldID8gdHJ1ZSA6IHVuZGVmaW5lZCB9O1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIChhZGRlZCBTciBObyBjb2x1bW4pIC0tLVxuICAvLyAgIGNvbnN0IHdpZHRocyA9IFs4LCAxNSwgMTUsIDQwLCAyMCwgMjAsIDIwLCAyMCwgMjBdO1xuICAvLyAgIHdpZHRocy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gIC8vICAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID0gdztcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSBzYXZlIGZpbGUgLS0tXG4gIC8vICAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oYnVmZmVyID0+IHtcbiAgLy8gICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAvLyAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gIC8vICAgICB9KTtcbiAgLy8gICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cblxuICBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnVHJpYWwtQmFsYW5jZS1BY2NvdW50cy1SYXcueGxzeCc7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdUcmlhbCBCYWxhbmNlJyk7XG5cbiAgICBsZXQgY3VycmVudFJvdyA9IDE7XG5cbiAgICAvLyAtLS0gYWRkIGxvZ28gaWYgYXZhaWxhYmxlIC0tLVxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7IGJhc2U2NDogYmFzZTY0RGF0YSwgZXh0ZW5zaW9uOiAncG5nJyB9KTtcbiAgICAgIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHsgdGw6IHsgY29sOiAwLCByb3c6IDAgfSwgZXh0OiB7IHdpZHRoOiAxMjAsIGhlaWdodDogNjAgfSwgZWRpdEFzOiAnb25lQ2VsbCcgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tIHRpdGxlIC0tLVxuICAgIGNvbnN0IHRpdGxlID0gJ1hwcmVzcyBNb25leSAtIE1JIEFjY291bnRzJztcbiAgICBzaGVldC5tZXJnZUNlbGxzKDEsIDMsIDEsIDkpO1xuICAgIGNvbnN0IHRpdGxlQ2VsbCA9IHNoZWV0LmdldENlbGwoJ0MxJyk7XG4gICAgdGl0bGVDZWxsLnZhbHVlID0gdGl0bGU7XG4gICAgdGl0bGVDZWxsLmZvbnQgPSB7IHNpemU6IDE1LCBib2xkOiB0cnVlIH07XG4gICAgdGl0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xuICAgIGN1cnJlbnRSb3cgPSA0O1xuXG4gICAgLy8gLS0tIG1ldGFkYXRhIC0tLVxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gICAgICBbJ1JlcG9ydCBVc2VyOicsIHRoaXMucmVwb3J0VXNlcl0sXG4gICAgICBbJ1JlcG9ydCBUaW1lOicsIHRoaXMucmVwb3J0VGltZV0sXG4gICAgICBbJ1JlcG9ydCBQZXJpb2Q6JywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAgIF07XG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMoY3VycmVudFJvdywgMSwgY3VycmVudFJvdywgNik7XG4gICAgICBjb25zdCByb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDogbGFiZWwgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogdmFsdWUgfV0gfTtcbiAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xuICAgIH0pO1xuICAgIGN1cnJlbnRSb3crKztcblxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cbiAgICBzaGVldC5tZXJnZUNlbGxzKGN1cnJlbnRSb3csIDEsIGN1cnJlbnRSb3csIDYpO1xuICAgIHNoZWV0LmdldENlbGwoY3VycmVudFJvdywgMSkudmFsdWUgPSAnU2VhcmNoIENyaXRlcmlhOi0nO1xuICAgIHNoZWV0LmdldENlbGwoY3VycmVudFJvdywgMSkuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuICAgIGN1cnJlbnRSb3cgKz0gMjtcblxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgICAgIFsnQWNjb3VudCBTdGF0dXM6JywgdGhpcy5hY2NvdW50U3RhdHVzXSxcbiAgICAgIFsnQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jeV0sXG4gICAgICBbJ0RhdGUgVHlwZTonLCB0aGlzLmRhdGVUeXBlXSxcbiAgICAgIFsnRnJvbSBEYXRlOicsIHRoaXMuZnJvbURhdGVdLFxuICAgICAgWydCdXNpbmVzcyBMaW5lOicsIHRoaXMuYnVzaW5lc3NMaW5lXSxcbiAgICAgIFsnVG8gRGF0ZTonLCB0aGlzLnRvRGF0ZV0sXG4gICAgXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xuICAgICAgY29uc3Qgcm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG5cbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMyk7XG4gICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHsgcmljaFRleHQ6IFt7IHRleHQ6IGxlZnRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogbGVmdFsxXSB9XSB9O1xuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogdHJ1ZSwgdmVydGljYWw6ICdtaWRkbGUnIH07XG5cbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgNCwgcm93Lm51bWJlciwgNik7XG4gICAgICByb3cuZ2V0Q2VsbCg0KS52YWx1ZSA9IHsgcmljaFRleHQ6IFt7IHRleHQ6IHJpZ2h0WzBdICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHJpZ2h0WzFdIH1dIH07XG4gICAgICByb3cuZ2V0Q2VsbCg0KS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcbiAgICB9XG4gICAgY3VycmVudFJvdysrO1xuXG4gICAgLy8gLS0tIGhlYWRlcnMgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG4gICAgY29uc3QgaGVhZGVyUm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG4gICAgaGVhZGVycy5mb3JFYWNoKChoLCBpKSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xuICAgICAgY2VsbC52YWx1ZSA9IGg7XG4gICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgICAgIGNlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xuICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0RDRENEQycgfSB9O1xuICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcbiAgICB9KTtcblxuICAgIC8vIC0tLSByb3dzIHdpdGggMyBkZWNpbWFscyBmb3IgbnVtZXJpYyBjb2x1bW5zIC0tLVxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmZsYXR0ZW5SZXBvcnQodGhpcy50cmlhbEJhbGFuY2VSZXBvcnQpLm1hcCgoYWNjLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IG51bWVyaWNDb2x1bW5zID0gWydvcGVuaW5nQmFsYW5jZScsICdkZWJpdCcsICdjcmVkaXQnLCAnbmV0TW92ZW1lbnQnLCAnY2xvc2luZ0JhbGFuY2UnXTtcbiAgICAgIGNvbnN0IHJvd0RhdGEgPSBudW1lcmljQ29sdW1ucy5tYXAoY29sID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gTnVtYmVyKGFjY1tjb2xdKTtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWwpID8gdmFsLnRvRml4ZWQoMykgOiAnJztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgaWR4ICsgMSxcbiAgICAgICAgYWNjLmNvYUNvZGUsXG4gICAgICAgIGFjYy5hY2NvdW50Q29kZSxcbiAgICAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgICAgICAgLi4ucm93RGF0YSxcbiAgICAgICAgYWNjLmlzVG90YWxSb3cgfHwgZmFsc2VcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICByb3dzLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCByb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgICAgIHIuc2xpY2UoMCwgOSkuZm9yRWFjaCgodmFsLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XG4gICAgICAgIC8vIGNvbnZlcnQgYmFjayB0byBudW1iZXIgZm9yIEV4Y2VsIG1hdGggYnV0IHNob3cgMyBkZWNpbWFsc1xuICAgICAgICBpZiAoaSA+IDMgJiYgdmFsICE9PSAnJykgY2VsbC52YWx1ZSA9IHBhcnNlRmxvYXQodmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICBlbHNlIGNlbGwudmFsdWUgPSB2YWw7XG5cbiAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcblxuICAgICAgICAvLyBib2xkIHRvdGFsIHJvd3NcbiAgICAgICAgaWYgKHJbOV0pIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlcnMgcmVkXG4gICAgICAgIGlmIChpID4gMyAmJiB0eXBlb2YgY2VsbC52YWx1ZSA9PT0gJ251bWJlcicgJiYgY2VsbC52YWx1ZSA8IDApIHtcbiAgICAgICAgICBjZWxsLmZvbnQgPSB7IGNvbG9yOiB7IGFyZ2I6ICdGRjAwMDAnIH0sIGJvbGQ6IHJbOV0gPyB0cnVlIDogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgbnVtYmVyIGZvcm1hdCB0byBzaG93IDMgZGVjaW1hbHNcbiAgICAgICAgaWYgKGkgPiAzKSBjZWxsLm51bUZtdCA9ICcwLjAwMCc7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAgIGNvbnN0IHdpZHRocyA9IFs4LCAxNSwgMTUsIDQwLCAyMCwgMjAsIDIwLCAyMCwgMjBdO1xuICAgIHdpZHRocy5mb3JFYWNoKCh3LCBpKSA9PiBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID0gdyk7XG5cbiAgICAvLyAtLS0gc2F2ZSBmaWxlIC0tLVxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KTtcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xuICAgIH0pO1xuICB9XG5cblxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpYWxCYWxhbmNlUmVwb3J0Py5tYWluQ09BR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ1RyaWFsLUJhbGFuY2UtQWNjb3VudHMtUmF3LmNzdic7XG5cbiAgICAvLyAtLS0gbWV0YWRhdGEgLS0tXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgICAgIFsnUmVwb3J0IFRpdGxlOicsICdYcHJlc3MgTW9uZXkgLSBNSSBBY2NvdW50cyddLFxuICAgICAgWydSZXBvcnQgVXNlcjonLCB0aGlzLnJlcG9ydFVzZXJdLFxuICAgICAgWydSZXBvcnQgVGltZTonLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydBY2NvdW50IFN0YXR1czonLCB0aGlzLmFjY291bnRTdGF0dXNdLFxuICAgICAgWydDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmN5XSxcbiAgICAgIFsnRGF0ZSBUeXBlOicsIHRoaXMuZGF0ZVR5cGVdLFxuICAgICAgWydGcm9tIERhdGU6JywgdGhpcy5mcm9tRGF0ZV0sXG4gICAgICBbJ0J1c2luZXNzIExpbmU6JywgdGhpcy5idXNpbmVzc0xpbmVdLFxuICAgICAgWydUbyBEYXRlOicsIHRoaXMudG9EYXRlXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHRhYmxlIGhlYWRlcnMgKGFkZCBTciBObyBhdCBzdGFydCkgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG5cbiAgICAvLyAtLS0gdGFibGUgcm93cyAocHJlcGVuZCBTciBObykgLS0tXG4gICAgY29uc3Qgcm93czogYW55W11bXSA9IHRoaXMuZmxhdHRlblJlcG9ydCh0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydCkubWFwKChhY2MsIGluZGV4KSA9PiBbXG4gICAgICBpbmRleCArIDEsIC8vIFNyIE5vXG4gICAgICBhY2MuY29hQ29kZSxcbiAgICAgIGFjYy5hY2NvdW50Q29kZSxcbiAgICAgIGFjYy5hY2NvdW50RGVzY3JpcHRpb24sXG4gICAgICBOdW1iZXIoYWNjLm9wZW5pbmdCYWxhbmNlKS50b0ZpeGVkKDMpLFxuICAgICAgTnVtYmVyKGFjYy5kZWJpdCkudG9GaXhlZCgzKSxcbiAgICAgIE51bWJlcihhY2MuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgIE51bWJlcihhY2MuY2xvc2luZ0JhbGFuY2UpLnRvRml4ZWQoMylcbiAgICBdKTtcblxuICAgIC8vIC0tLSBoZWxwZXIgdG8gZXNjYXBlIENTViB2YWx1ZXMgLS0tXG4gICAgY29uc3QgZXNjYXBlQ3N2ID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgICBjb25zdCBzdHIgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcygnLCcpIHx8IHN0ci5pbmNsdWRlcygnXCInKSB8fCBzdHIuaW5jbHVkZXMoJ1xcbicpXG4gICAgICAgID8gYFwiJHtzdHIucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImBcbiAgICAgICAgOiBzdHI7XG4gICAgfTtcblxuICAgIC8vIC0tLSBidWlsZCBDU1YgY29udGVudCAtLS1cbiAgICBsZXQgY3N2Q29udGVudCA9ICcnO1xuXG4gICAgLy8gbWV0YWRhdGFcbiAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xuICAgICAgY3N2Q29udGVudCArPSBgJHtlc2NhcGVDc3YobGFiZWwpfSR7ZXNjYXBlQ3N2KHZhbHVlKX0sXFxuYDtcbiAgICB9KTtcbiAgICBjc3ZDb250ZW50ICs9ICdcXG4nOyAvLyBnYXBcblxuICAgIC8vIHNlYXJjaCBjcml0ZXJpYSAoMiBwZXIgcm93KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xuICAgICAgY3N2Q29udGVudCArPSBgJHtlc2NhcGVDc3YobGVmdFswXSl9JHtlc2NhcGVDc3YobGVmdFsxXSl9LCBgO1xuICAgICAgaWYgKHJpZ2h0KSBjc3ZDb250ZW50ICs9IGAke2VzY2FwZUNzdihyaWdodFswXSl9JHtlc2NhcGVDc3YocmlnaHRbMV0pfSwgYDtcbiAgICAgIGNzdkNvbnRlbnQgKz0gJ1xcbic7XG4gICAgfVxuICAgIGNzdkNvbnRlbnQgKz0gJ1xcbic7IC8vIGdhcFxuXG4gICAgLy8gdGFibGUgaGVhZGVyc1xuICAgIGNzdkNvbnRlbnQgKz0gaGVhZGVycy5tYXAoaCA9PiBlc2NhcGVDc3YoaCkpLmpvaW4oJywnKSArICdcXG4nO1xuXG4gICAgLy8gdGFibGUgcm93c1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgY3N2Q29udGVudCArPSByb3cubWFwKGNlbGwgPT4gZXNjYXBlQ3N2KGNlbGwpKS5qb2luKCcsJykgKyAnXFxuJztcbiAgICB9KTtcblxuICAgIC8vIC0tLSB0cmlnZ2VyIGRvd25sb2FkIC0tLVxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lKTtcbiAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICB9XG5cbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsID0gcGF5bG9hZD8ubW9kYWwgfHwgcGF5bG9hZDtcblxuICAgIGNvbnNvbGUubG9nKFwiaW4gZ2V0IHJlcG9ydCBvZiB0cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydCA6IC0gXCIpO1xuICAgIGNvbnNvbGUubG9nKG1vZGFsKTtcblxuICAgIHRoaXMuZnJvbURhdGUgPSBmb3JtYXREYXRlKG1vZGFsLmZyb21EYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpO1xuICAgIHRoaXMudG9EYXRlID0gZm9ybWF0RGF0ZShtb2RhbC50b0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XG5cbiAgICBjb25zdCByZXE6IFRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0UmVxdWVzdERUTyA9IHtcbiAgICAgIHllYXI6IE51bWJlcihtb2RhbC5maW5hbmNpYWxZZWFyKSxcbiAgICAgIGRhdGVUeXBlOiBtb2RhbC5kYXRlVHlwZSxcbiAgICAgIGZyb21EYXRlOiBtb2RhbC5mcm9tRGF5LFxuICAgICAgdG9EYXRlOiBtb2RhbC50b0RheSxcbiAgICAgIGFjY291bnRTdGF0dXM6IG1vZGFsLmFjY291bnRTdGF0dXMuam9pbignLCcpLFxuICAgICAgYnVzaW5lc3NMaW5lOiBtb2RhbC5idXNpbmVzc0xpbmUsXG4gICAgICBjdXJyZW5jeTogbW9kYWwuY3VycmVuY3ksXG4gICAgICBjb21wYW55Q29kZTogXCJCSFwiLFxuICAgICAgcmVwb3J0UGVyaW9kOiBgJHtmb3JtYXREYXRlKG1vZGFsLmZyb21EYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpfSAtICR7Zm9ybWF0RGF0ZShtb2RhbC50b0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9YCxcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChyZXEpO1xuICB9XG5cbn1cbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIj48L2xpYi1zZWFyY2gtZmlsdGVyPlxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cblxuPGRpdiAqbmdJZj1cImRhdGFSZWFkeSAmJiB0cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCA+IDBcIj5cbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCInWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCJcbiAgICBbbWV0YURhdGFPbmVdPVwibWV0YURhdGFPbmVcIiBbbWV0YURhdGFUd29dPVwibWV0YURhdGFUd29cIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIlxuICAgIChzZWFyY2hFdmVudCk9XCJvblNlYXJjaCgkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XG5cbiAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cInJvd0RhdGE/Lmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcbiAgICAgIFtncmlkQXBpXT1cImdyaWRBcGlcIj48L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XG5cbiAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWRcIiBzdHlsZT1cImhlaWdodDogNDAwcHg7XCIgW2RvbUxheW91dF09XCInbm9ybWFsJ1wiXG4gICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbcm93Q2xhc3NSdWxlc109XCJyb3dDbGFzc1J1bGVzXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIiBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2VTaXplXCI+PC9hZy1ncmlkLWFuZ3VsYXI+XG5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJ0cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aD09MFwiPlxuICBObyBEYXRhIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxuPC9kaXY+Il19
993
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpYWwtYmFsYW5jZS1hY2NvdW50cy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0L3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7QUEyQnhDLE1BQU0sT0FBTyxtQ0FBbUM7SUFxRTlDLFlBQW9CLGFBQTRCLEVBQVUsYUFBNEI7UUFBbEUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWxFdEYsZUFBVSxHQUFXLDBCQUEwQixDQUFBO1FBSS9DLDBCQUFxQixHQUFHLHNCQUFzQixDQUFDO1FBQy9DLGlCQUFZLEdBQTJCLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztRQUV2RSx5QkFBb0IsR0FBVyxPQUFPLENBQUM7UUFDdkMsYUFB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LENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU5RCxNQUFNLEdBQUcsR0FBeUM7WUFDaEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDNUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1NBQzFILENBQUM7UUFFRixJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7Z0lBNWxDVSxtQ0FBbUM7b0hBQW5DLG1DQUFtQyx1SUNwQ2hELCswQ0F1Qk07MkZEYU8sbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNFLG1DQUFtQztnSUFrUTdDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uQXBpLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcbmltcG9ydCB7IEFjY291bnREZXRhaWwsIFRyaWFsQmFsYW5jZVJlcG9ydCB9IGZyb20gJy4uLy4uL21vZGVscy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLm1vZGVscyc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcblxuXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcbiAgaW50ZXJmYWNlIGpzUERGIHtcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnRSZXF1ZXN0RFRPIHtcbiAgeWVhcjogbnVtYmVyO1xuICBkYXRlVHlwZTogc3RyaW5nO1xuICBmcm9tRGF0ZTogc3RyaW5nO1xuICB0b0RhdGU6IHN0cmluZztcbiAgYWNjb3VudFN0YXR1czogc3RyaW5nO1xuICBidXNpbmVzc0xpbmU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbiAgY29tcGFueUNvZGU6IHN0cmluZztcbiAgcmVwb3J0UGVyaW9kOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyaWFsLWJhbGFuY2UtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgUmVwb3J0TmFtZTogc3RyaW5nID0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIlxuICBncmlkQXBpOiBHcmlkQXBpO1xuICBtZXRhRGF0YU9uZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbWV0YURhdGFUd286IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlcyA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XG4gIHRyaWFsQmFsYW5jZVJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0O1xuICBzZWxlY3RlZEV4cG9ydE9wdGlvbjogc3RyaW5nID0gJ2V4Y2VsJztcbiAgcGFnZVNpemU6IG51bWJlciA9IDE1O1xuICBkYXRhUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBhY2NvdW50U3RhdHVzOiBzdHJpbmcgPSAnJztcbiAgY3VycmVuY3k6IHN0cmluZyA9ICcnO1xuICBkYXRlVHlwZTogc3RyaW5nID0gJyc7XG4gIGZyb21EYXRlOiBzdHJpbmcgPSAnJztcbiAgdG9EYXRlOiBzdHJpbmcgPSAnJztcbiAgYnVzaW5lc3NMaW5lOiBzdHJpbmcgPSAnJztcblxuICByZXBvcnRVc2VyOiBzdHJpbmcgPSAnJztcbiAgcmVwb3J0VGltZTogc3RyaW5nID0gJyc7XG4gIHJlcG9ydFBlcmlvZDogc3RyaW5nID0gJyc7XG5cbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xuICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxuICAgIGNlbGxTdHlsZToge1xuICAgICAgdXNlclNlbGVjdDogJ3RleHQnLFxuICAgICAgJ2xpbmUtaGVpZ2h0JzogJzEuMicsXG4gICAgICAnd2hpdGUtc3BhY2UnOiAnbm9ybWFsJyxcbiAgICAgICd3b3JkLWJyZWFrJzogJ25vcm1hbCcsXG4gICAgICAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyxcbiAgICB9LFxuXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcbiAgICB3cmFwVGV4dDogdHJ1ZSxcbiAgICBhdXRvSGVpZ2h0OiB0cnVlLFxuXG4gICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICd0b3RhbC1wb3NpdGl2ZSc6IHBhcmFtcyA9PiBwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPj0gMCxcbiAgICAgICd0b3RhbC1uZWdhdGl2ZSc6IHBhcmFtcyA9PiBwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPCAwLFxuICAgICAgJ3Bvc2l0aXZlLXZhbHVlJzogcGFyYW1zID0+ICFwYXJhbXMuZGF0YT8uaXNUb3RhbFJvdyAmJiBwYXJhbXMudmFsdWUgPj0gMCxcbiAgICAgICduZWdhdGl2ZS12YWx1ZSc6IHBhcmFtcyA9PiAhcGFyYW1zLmRhdGE/LmlzVG90YWxSb3cgJiYgcGFyYW1zLnZhbHVlIDwgMCxcbiAgICB9XG4gIH07XG5cbiAgcm93Q2xhc3NSdWxlcyA9IHtcbiAgICAndG90YWwtcm93JzogcGFyYW1zID0+IHBhcmFtcy5kYXRhPy5pc1RvdGFsUm93XG4gIH07XG5cbiAgY29sdW1uRGVmczogQ29sRGVmW10gPVxuICAgIFtcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0NPQSBDb2RlJywgZmllbGQ6ICdjb2FDb2RlJywgdG9vbHRpcEZpZWxkOiAnY29hQ29kZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0FjY291bnQgQ29kZScsIGZpZWxkOiAnYWNjb3VudENvZGUnLCB0b29sdGlwRmllbGQ6ICdhY2NvdW50Q29kZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0FjY291bnQgRGVzY3JpcHRpb24nLCBmaWVsZDogJ2FjY291bnREZXNjcmlwdGlvbicsIHRvb2x0aXBGaWVsZDogJ2FjY291bnREZXNjcmlwdGlvbicgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ29wZW5pbmdCYWxhbmNlJywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdvcGVuaW5nQmFsYW5jZScgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0RlYml0cyBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ2RlYml0JywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdkZWJpdCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0NyZWRpdHMgTG9jYWwgQW1vdW50JywgZmllbGQ6ICdjcmVkaXQnLCB0eXBlOiAnbnVtZXJpY0NvbHVtbicsIHRvb2x0aXBGaWVsZDogJ2NyZWRpdCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ05ldCBNb3ZlbWVudCBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ25ldE1vdmVtZW50JywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICduZXRNb3ZlbWVudCcgfSxcbiAgICAgIHsgaGVhZGVyTmFtZTogJ0Nsb3NpbmcgQmFsYW5jZSBMb2NhbCBBbW91bnQnLCBmaWVsZDogJ2Nsb3NpbmdCYWxhbmNlJywgdHlwZTogJ251bWVyaWNDb2x1bW4nLCB0b29sdGlwRmllbGQ6ICdjbG9zaW5nQmFsYW5jZScgfVxuICAgIF07XG5cbiAgcm93RGF0YTogQWNjb3VudERldGFpbFtdID0gW107XG4gIGdyaWRDb2x1bW5BcGk6IENvbHVtbkFwaTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gY29uc3QgcGFyYW1zID0ge1xuXG4gICAgLy8gICB5ZWFyOiAyMDI0LFxuICAgIC8vICAgZGF0ZVR5cGU6IFwiVkRcIixcbiAgICAvLyAgIGZyb21EYXRlOiBcIjIwMjQtMDQtMDFUMDA6MDA6MDBcIixcbiAgICAvLyAgIHRvRGF0ZTogXCIyMDI0LTA0LTAxVDAwOjAwOjAwXCIsXG4gICAgLy8gICBhY2NvdW50U3RhdHVzOiBcIkFjdGl2ZVwiLFxuICAgIC8vICAgYnVzaW5lc3NMaW5lOiBcIkFsbFwiLFxuICAgIC8vICAgY3VycmVuY3k6IFwiQWxsXCIsXG4gICAgLy8gICBjb21wYW55Q29kZTogXCJCSFwiXG5cblxuICAgIC8vIH07XG5cbiAgICAvLyB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgIC8vICAgbmV4dDogKHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KSA9PiB7XG4gICAgLy8gICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xuICAgIC8vICAgICB0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydCA9IHJlcG9ydDtcbiAgICAvLyAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHJlcG9ydCk7XG5cbiAgICAvLyAgICAgdGhpcy5tZXRhRGF0YU9uZSA9IHtcbiAgICAvLyAgICAgICAnUmVwb3J0IFVzZXInOiByZXBvcnQucmVwb3J0VXNlcixcbiAgICAvLyAgICAgICAnUmVwb3J0IFRpbWUnOiBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKSxcbiAgICAvLyAgICAgfTtcblxuICAgIC8vICAgICAvLyB0aGlzLm1ldGFEYXRhT25lID0ge1xuICAgIC8vICAgICAvLyAnUmVwb3J0IFVzZXInOiByZXBvcnQucmVwb3J0VXNlcixcbiAgICAvLyAgICAgLy8gJ0FjY291bnQgU3RhdHVzJzogJ0FjdGl2ZScsXG4gICAgLy8gICAgIC8vICdEYXRlIFR5cGUnOiAnVmFsdWUgRGF0ZScsXG4gICAgLy8gICAgIC8vICdCdXNpbmVzcyBMaW5lJzogJ0FsbCcsXG4gICAgLy8gICAgIC8vIH07XG5cbiAgICAvLyAgICAgLy8gdGhpcy5tZXRhRGF0YVR3byA9IHtcbiAgICAvLyAgICAgLy8gJ1JlcG9ydCBUaW1lJzogZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyksXG4gICAgLy8gICAgIC8vICdDdXJyZW5jeSc6ICdBbGwnLFxuICAgIC8vICAgICAvLyAnRnJvbSBEYXRlJzogJzAxLzA0LzIwMjQnLFxuICAgIC8vICAgICAvLyAnVG8gRGF0ZSc6ICcwMS8wNC8yMDI0JyxcbiAgICAvLyAgICAgLy8gfTtcblxuICAgIC8vICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XG4gICAgLy8gICB9LFxuICAgIC8vICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdHJpYWwgYmFsYW5jZSByZXBvcnQ6JywgZXJyKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldFRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHJlcTogYW55KSB7XG5cbiAgICB0aGlzLmRhdGFSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0ID0gbnVsbDtcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcbiAgICBjb25zb2xlLmxvZygnaW4gZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQgOiAnKVxuICAgIGNvbnNvbGUubG9nKHJlcSk7XG5cbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KSA9PiB7XG4gICAgICAgIHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0ID0gcmVwb3J0O1xuICAgICAgICB0aGlzLmRhdGFSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwb3J0VXNlciA9IHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0LnJlcG9ydFVzZXI7XG4gICAgICAgIHRoaXMucmVwb3J0VGltZSA9IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgICB0aGlzLnJlcG9ydFBlcmlvZCA9IHJlcS5yZXBvcnRQZXJpb2Q7XG5cbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzID0gcmVxLmFjY291bnRTdGF0dXM7XG4gICAgICAgIHRoaXMuY3VycmVuY3kgPSByZXEuY3VycmVuY3k7XG4gICAgICAgIHRoaXMuZGF0ZVR5cGUgPSByZXEuZGF0ZVR5cGUgPT0gXCJWRFwiID8gXCJWYWx1ZSBEYXRlXCIgOiBcIlBvc3RpbmcgRGF0ZVwiO1xuICAgICAgICB0aGlzLmJ1c2luZXNzTGluZSA9IHJlcS5idXNpbmVzc0xpbmU7XG5cbiAgICAgICAgLy8gdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuZmxhdHRlblJlcG9ydChyZXBvcnQpLm1hcChhY2MgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgY3JlZGl0OiBOdW1iZXIoYWNjLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKVxuICAgICAgICB9KSk7XG5cblxuICAgICAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xuICAgICAgICAgICdSZXBvcnQgVXNlcic6IHJlcG9ydC5yZXBvcnRVc2VyLFxuICAgICAgICAgICdSZXBvcnQgVGltZSc6IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpLFxuICAgICAgICAgICdSZXBvcnQgUGVyaW9kJzogdGhpcy5yZXBvcnRQZXJpb2QsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGhpcy5tZXRhRGF0YU9uZSA9IHtcbiAgICAgICAgLy8gJ1JlcG9ydCBVc2VyJzogcmVwb3J0LnJlcG9ydFVzZXIsXG4gICAgICAgIC8vICdBY2NvdW50IFN0YXR1cyc6ICdBY3RpdmUnLFxuICAgICAgICAvLyAnRGF0ZSBUeXBlJzogJ1ZhbHVlIERhdGUnLFxuICAgICAgICAvLyAnQnVzaW5lc3MgTGluZSc6ICdBbGwnLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIHRoaXMubWV0YURhdGFUd28gPSB7XG4gICAgICAgIC8vICdSZXBvcnQgVGltZSc6IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpLFxuICAgICAgICAvLyAnQ3VycmVuY3knOiAnQWxsJyxcbiAgICAgICAgLy8gJ0Zyb20gRGF0ZSc6ICcwMS8wNC8yMDI0JyxcbiAgICAgICAgLy8gJ1RvIERhdGUnOiAnMDEvMDQvMjAyNCcsXG4gICAgICAgIC8vIH07XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHRyaWFsIGJhbGFuY2UgcmVwb3J0OicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmbGF0dGVuUmVwb3J0KHJlcG9ydDogVHJpYWxCYWxhbmNlUmVwb3J0KTogQWNjb3VudERldGFpbFtdIHtcbiAgICBjb25zdCByb3dzOiBBY2NvdW50RGV0YWlsW10gPSBbXTtcblxuICAgIHJlcG9ydC5tYWluQ09BR3JvdXBzLmZvckVhY2gobWFpbiA9PiB7XG4gICAgICBtYWluLnN1YkNPQUdyb3Vwcy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgIHN1Yi5jb2FHcm91cHMuZm9yRWFjaChjb2EgPT4ge1xuICAgICAgICAgIGNvYS5hY2NvdW50cy5mb3JFYWNoKGFjY291bnQgPT4gcm93cy5wdXNoKGFjY291bnQpKTtcblxuICAgICAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgICAgIGFjY291bnRDb2RlOiAnVG90YWw6JyxcbiAgICAgICAgICAgIGFjY291bnREZXNjcmlwdGlvbjogYCR7Y29hLmNvYURlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKGNvYS50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgICBkZWJpdDogTnVtYmVyKGNvYS50b3RhbHMuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgICBjcmVkaXQ6IE51bWJlcihjb2EudG90YWxzLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoY29hLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIGNsb3NpbmdCYWxhbmNlOiBOdW1iZXIoY29hLnRvdGFscy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgICBhY2NvdW50Q29kZTogJ1RvdGFsOicsXG4gICAgICAgICAgYWNjb3VudERlc2NyaXB0aW9uOiBgJHtzdWIuc3ViQ09BRGVzY3JpcHRpb259YCxcbiAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKHN1Yi50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihzdWIudG90YWxzLmRlYml0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIGNyZWRpdDogTnVtYmVyKHN1Yi50b3RhbHMuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoc3ViLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKHN1Yi50b3RhbHMuY2xvc2luZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBjb2FDb2RlOiAnJyxcbiAgICAgICAgYWNjb3VudENvZGU6ICdUb3RhbDonLFxuICAgICAgICBhY2NvdW50RGVzY3JpcHRpb246IGAke21haW4ubWFpbkNPQURlc2NyaXB0aW9ufWAsXG4gICAgICAgIG9wZW5pbmdCYWxhbmNlOiBOdW1iZXIobWFpbi50b3RhbHMub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgIGRlYml0OiBOdW1iZXIobWFpbi50b3RhbHMuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgIGNyZWRpdDogTnVtYmVyKG1haW4udG90YWxzLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgbmV0TW92ZW1lbnQ6IE51bWJlcihtYWluLnRvdGFscy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgY2xvc2luZ0JhbGFuY2U6IE51bWJlcihtYWluLnRvdGFscy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByb3dzLnB1c2goe1xuICAgICAgY29hQ29kZTogJ1RPVEFMOicsXG4gICAgICBhY2NvdW50Q29kZTogJycsXG4gICAgICBhY2NvdW50RGVzY3JpcHRpb246ICcnLFxuICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgIGRlYml0OiBOdW1iZXIocmVwb3J0LmdyYW5kVG90YWwuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICBjcmVkaXQ6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5jcmVkaXQpLnRvRml4ZWQoMyksXG4gICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKHJlcG9ydC5ncmFuZFRvdGFsLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpLFxuICAgICAgY2xvc2luZ0JhbGFuY2U6IE51bWJlcihyZXBvcnQuZ3JhbmRUb3RhbC5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCkge1xuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpID0gcGFyYW1zLmNvbHVtbkFwaTtcblxuICAgIGNvbnN0IGFsbENvbHVtbklkczogc3RyaW5nW10gPSBbXTtcbiAgICBwYXJhbXMuY29sdW1uQXBpLmdldENvbHVtbnMoKS5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmdldENvbElkKCkpO1xuICAgIH0pO1xuICAgIHBhcmFtcy5jb2x1bW5BcGkuYXV0b1NpemVDb2x1bW5zKGFsbENvbHVtbklkcyk7XG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKCkge1xuICAgIGlmICh0aGlzLmdyaWRBcGkgJiYgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gb25TZWFyY2godGV4dDogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XG4gIC8vICAgICBzdHJcbiAgLy8gICAgICAgPy50b1N0cmluZygpXG4gIC8vICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxuICAvLyAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gIC8vICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXG4gIC8vICAgICAgIC50cmltKCk7XG5cbiAgLy8gICBjb25zdCBzZWFyY2ggPSBub3JtYWxpemUodGV4dCk7XG5cbiAgLy8gICBpZiAoc2VhcmNoKSB7XG4gIC8vICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmZsYXR0ZW5SZXBvcnQodGhpcy50cmlhbEJhbGFuY2VSZXBvcnQpLmZpbHRlcigoaXRlbSkgPT5cbiAgLy8gICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKCh2YWx1ZSkgPT4gbm9ybWFsaXplKHZhbHVlKS5pbmNsdWRlcyhzZWFyY2gpKVxuICAvLyAgICAgKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemUgPSAoc3RyOiBhbnkpOiBzdHJpbmcgPT5cbiAgICAgIHN0clxuICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUyMDBCLVxcdTIwMERcXHVGRUZGXS9nLCAnJylcbiAgICAgICAgLnRyaW0oKTtcblxuICAgIGNvbnN0IHNlYXJjaCA9IG5vcm1hbGl6ZSh0ZXh0KTtcblxuICAgIGlmIChzZWFyY2gpIHtcbiAgICAgIC8vIGZpbHRlciBmcm9tIGFscmVhZHkgZm9ybWF0dGVkIHJvd0RhdGFcbiAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuZmxhdHRlblJlcG9ydCh0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydClcbiAgICAgICAgLm1hcChhY2MgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgb3BlbmluZ0JhbGFuY2U6IE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLnRvRml4ZWQoMyksXG4gICAgICAgICAgZGViaXQ6IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMyksXG4gICAgICAgICAgY3JlZGl0OiBOdW1iZXIoYWNjLmNyZWRpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBuZXRNb3ZlbWVudDogTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjbG9zaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKVxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KVxuICAgICAgICAubWFwKGFjYyA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBvcGVuaW5nQmFsYW5jZTogTnVtYmVyKGFjYy5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSxcbiAgICAgICAgICBkZWJpdDogTnVtYmVyKGFjYy5kZWJpdCkudG9GaXhlZCgzKSxcbiAgICAgICAgICBjcmVkaXQ6IE51bWJlcihhY2MuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIG5ldE1vdmVtZW50OiBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpLFxuICAgICAgICAgIGNsb3NpbmdCYWxhbmNlOiBOdW1iZXIoYWNjLmNsb3NpbmdCYWxhbmNlKS50b0ZpeGVkKDMpXG4gICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IG9wdGlvbjtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgdGhpcy5leHBvcnRUb1BkZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICAgIHRoaXMuZXhwb3J0VG9Dc3YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydCgnUGxlYXNlIHNlbGVjdCBhbiBleHBvcnQgZm9ybWF0LicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydFRvUGRmKCk6IHZvaWQge1xuICAvLyAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIC8vICAgY29uc3QgdGl0bGUgPSAnWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnO1xuICAvLyAgIGNvbnN0IGZpbGVOYW1lID0gJ1RyaWFsLUJhbGFuY2UtQWNjb3VudHMtUmF3LnBkZic7XG5cbiAgLy8gICAvLyAtLS0gcGFnZSAmIGxheW91dCAtLS1cbiAgLy8gICBjb25zdCBkb2MgPSBuZXcganNQREYoeyBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScsIHVuaXQ6ICdtbScsIGZvcm1hdDogWzMxMiwgMjEwXSB9KTtcbiAgLy8gICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgLy8gICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XG4gIC8vICAgY29uc3QgbG9nb1dpZHRoID0gMzguNCwgbG9nb0hlaWdodCA9IDE3LjUsIGxvZ29YID0gbWFyZ2luTGVmdCwgbG9nb1kgPSA4O1xuICAvLyAgIGNvbnN0IHRpdGxlWSA9IDE4O1xuICAvLyAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xuXG4gIC8vICAgY29uc3QgbGFiZWxWYWx1ZUdhcCA9IDI7IC8vIG1tIGdhcCBiZXR3ZWVuIGxhYmVsIGFuZCB2YWx1ZVxuICAvLyAgIGNvbnN0IHBhaXJHYXAgPSAxNTsgICAgICAvLyBtbSBnYXAgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCBwYWlyc1xuXG4gIC8vICAgLy8gLS0tIG1ldGFkYXRhIC0tLVxuICAvLyAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ1JlcG9ydCBVc2VyOicsIHRoaXMucmVwb3J0VXNlcl0sXG4gIC8vICAgICBbJ1JlcG9ydCBUaW1lOicsIHRoaXMucmVwb3J0VGltZV0sXG4gIC8vICAgICBbJ1JlcG9ydCBQZXJpb2Q6JywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAvLyAgIF07XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxuICAvLyAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ0FjY291bnQgU3RhdHVzOicsIHRoaXMuYWNjb3VudFN0YXR1c10sXG4gIC8vICAgICBbJ0N1cnJlbmN5OicsIHRoaXMuY3VycmVuY3ldLFxuICAvLyAgICAgWydEYXRlIFR5cGU6JywgdGhpcy5kYXRlVHlwZV0sXG4gIC8vICAgICBbJ0Zyb20gRGF0ZTonLCB0aGlzLmZyb21EYXRlXSxcbiAgLy8gICAgIFsnQnVzaW5lc3MgTGluZTonLCB0aGlzLmJ1c2luZXNzTGluZV0sXG4gIC8vICAgICBbJ1RvIERhdGU6JywgdGhpcy50b0RhdGVdLFxuICAvLyAgIF07XG5cbiAgLy8gICAvLyAtLS0gZHJhdyBsb2dvICsgdGl0bGUgLS0tXG4gIC8vICAgaWYgKHRoaXMuZXhwb3J0U2VydmljZT8ubG9nb0Jhc2U2NCkge1xuICAvLyAgICAgdHJ5IHsgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZS5sb2dvQmFzZTY0LCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpOyB9IGNhdGNoIHsgfVxuICAvLyAgIH1cbiAgLy8gICBkb2Muc2V0Rm9udFNpemUoMTUpO1xuICAvLyAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAvLyAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgbWV0YWRhdGEgLS0tXG4gIC8vICAgZG9jLnNldEZvbnRTaXplKDEwKTtcbiAgLy8gICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaSkgPT4ge1xuICAvLyAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIDY7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgLy8gICAgIGRvYy50ZXh0KGxhYmVsLCBtYXJnaW5MZWZ0LCB5KTtcbiAgLy8gICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gIC8vICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XG4gIC8vICAgICBkb2MudGV4dCh2YWx1ZSwgbWFyZ2luTGVmdCArIGxhYmVsV2lkdGggKyBsYWJlbFZhbHVlR2FwLCB5KTtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50WSArPSBtZXRhZGF0YS5sZW5ndGggKiA2ICsgNjtcblxuICAvLyAgIC8vIC0tLSBkcmF3IHNlYXJjaCBjcml0ZXJpYSBoZWFkaW5nIC0tLVxuICAvLyAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAvLyAgIGRvYy50ZXh0KCdTZWFyY2ggQ3JpdGVyaWE6LScsIG1hcmdpbkxlZnQsIGN1cnJlbnRZKTtcbiAgLy8gICBjdXJyZW50WSArPSA4OyAvLyBnYXAgYmVsb3cgaGVhZGluZ1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgc2VhcmNoIGNyaXRlcmlhIHBhaXJzICgyIHBlciByb3cpIC0tLVxuICAvLyAgIGNvbnN0IHBhaXJSb3dzOiBbbnVtYmVyLCBudW1iZXJdW10gPSBbXG4gIC8vICAgICBbMCwgMV0sXG4gIC8vICAgICBbMiwgM10sXG4gIC8vICAgICBbNCwgNV0sXG4gIC8vICAgXTtcblxuICAvLyAgIHBhaXJSb3dzLmZvckVhY2gocm93UGFpciA9PiB7XG4gIC8vICAgICBjb25zdCBsZWZ0SW5kZXggPSByb3dQYWlyWzBdO1xuICAvLyAgICAgY29uc3QgcmlnaHRJbmRleCA9IHJvd1BhaXJbMV07XG5cbiAgLy8gICAgIC8vIExlZnQgcGFpclxuICAvLyAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gIC8vICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtsZWZ0SW5kZXhdWzBdLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAvLyAgICAgY29uc3QgbGVmdExhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHNlYXJjaENyaXRlcmlhW2xlZnRJbmRleF1bMF0gKyAnICcpO1xuICAvLyAgICAgZG9jLnRleHQoc2VhcmNoQ3JpdGVyaWFbbGVmdEluZGV4XVsxXSwgbWFyZ2luTGVmdCArIGxlZnRMYWJlbFdpZHRoICsgbGFiZWxWYWx1ZUdhcCwgY3VycmVudFkpO1xuXG4gIC8vICAgICAvLyBSaWdodCBwYWlyXG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgLy8gICAgIGRvYy50ZXh0KHNlYXJjaENyaXRlcmlhW3JpZ2h0SW5kZXhdWzBdLCBwYWdlV2lkdGggLyAyLCBjdXJyZW50WSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAvLyAgICAgY29uc3QgcmlnaHRMYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVswXSArICcgJyk7XG4gIC8vICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVsxXSwgcGFnZVdpZHRoIC8gMiArIHJpZ2h0TGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIGN1cnJlbnRZKTtcblxuICAvLyAgICAgY3VycmVudFkgKz0gNjtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50WSArPSA0O1xuXG4gIC8vICAgLy8gLS0tIHByZXBhcmUgaGVhZGVycyAmIHJvd3MgLS0tXG4gIC8vICAgY29uc3QgaGVhZGVycyA9IFtcbiAgLy8gICAgICdTciBObycsXG4gIC8vICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAvLyAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gIC8vICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAvLyAgIF07XG5cbiAgLy8gICBjb25zdCBmbGF0UmVwb3J0ID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcblxuICAvLyAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBmbGF0UmVwb3J0Lm1hcCgoYWNjLCBpKSA9PiBbXG4gIC8vICAgICBpICsgMSxcbiAgLy8gICAgIGFjYy5jb2FDb2RlLFxuICAvLyAgICAgYWNjLmFjY291bnRDb2RlLFxuICAvLyAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgLy8gICAgIE51bWJlcihhY2Mub3BlbmluZ0JhbGFuY2UpLCAvLyBoZXJlIGRvIE51bWJlcihhY2Mub3BlbmluZ2JhbGFuY2UpIHRvbW9ycm93XG4gIC8vICAgICBOdW1iZXIoYWNjLmRlYml0KSxcbiAgLy8gICAgIE51bWJlcihhY2MuY3JlZGl0KSxcbiAgLy8gICAgIE51bWJlcihhY2MubmV0TW92ZW1lbnQpLFxuICAvLyAgICAgTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSlcbiAgLy8gICBdKTtcblxuICAvLyAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAvLyAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHtcbiAgLy8gICAgIDA6IHsgY2VsbFdpZHRoOiAxNSB9LCAvLyBTciBOb1xuICAvLyAgICAgMTogeyBjZWxsV2lkdGg6IDI1IH0sXG4gIC8vICAgICAyOiB7IGNlbGxXaWR0aDogMjUgfSxcbiAgLy8gICAgIDM6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAvLyAgICAgNDogeyBjZWxsV2lkdGg6IDMwIH0sXG4gIC8vICAgICA1OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgLy8gICAgIDY6IHsgY2VsbFdpZHRoOiAzMCB9LFxuICAvLyAgICAgNzogeyBjZWxsV2lkdGg6IDMwIH0sXG4gIC8vICAgICA4OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgLy8gICB9O1xuXG4gIC8vICAgLy8gLS0tIGRyYXcgdGFibGUgLS0tXG4gIC8vICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gIC8vICAgICBoZWFkOiBbaGVhZGVyc10sXG4gIC8vICAgICBib2R5OiByb3dzLFxuICAvLyAgICAgc3RhcnRZOiBjdXJyZW50WSxcbiAgLy8gICAgIHRoZW1lOiAnZ3JpZCcsXG4gIC8vICAgICBoZWFkU3R5bGVzOiB7XG4gIC8vICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxuICAvLyAgICAgICB0ZXh0Q29sb3I6IDAsXG4gIC8vICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxuICAvLyAgICAgICBmb250U2l6ZTogOSxcbiAgLy8gICAgICAgaGFsaWduOiAnY2VudGVyJyxcbiAgLy8gICAgICAgY2VsbFdpZHRoOiAnd3JhcCcsXG4gIC8vICAgICAgIG1pbkNlbGxIZWlnaHQ6IDEwXG4gIC8vICAgICB9LFxuICAvLyAgICAgYm9keVN0eWxlczoge1xuICAvLyAgICAgICBmb250U2l6ZTogOCxcbiAgLy8gICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gIC8vICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXG4gIC8vICAgICB9LFxuICAvLyAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcbiAgLy8gICAgIGNvbHVtblN0eWxlcyxcbiAgLy8gICAgIGRpZFBhcnNlQ2VsbDogKGRhdGE6IGFueSkgPT4ge1xuICAvLyAgICAgICBjb25zdCByb3dJbmRleCA9IGRhdGEucm93LmluZGV4O1xuICAvLyAgICAgICBjb25zdCByb3dEYXRhID0gZmxhdFJlcG9ydFtyb3dJbmRleF07XG4gIC8vICAgICAgIGNvbnN0IGlzVG90YWxSb3cgPSByb3dEYXRhLmlzVG90YWxSb3c7XG5cbiAgLy8gICAgICAgaWYgKGlzVG90YWxSb3cpIGRhdGEuY2VsbC5zdHlsZXMuZm9udFN0eWxlID0gJ2JvbGQnO1xuXG4gIC8vICAgICAgIGlmIChkYXRhLmNvbHVtbi5pbmRleCA+IDMpIHtcbiAgLy8gICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEuY2VsbC5yYXc7XG4gIC8vICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPCAwKSBkYXRhLmNlbGwuc3R5bGVzLnRleHRDb2xvciA9IFsyNTUsIDAsIDBdO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG5cbiAgLy8gICAvLyAtLS0gcGFnZSBudW1iZXJzIC0tLVxuICAvLyAgIGNvbnN0IHRvdGFsUGFnZXMgPSAoZG9jIGFzIGFueSkuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuICAvLyAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsUGFnZXM7IGkrKykge1xuICAvLyAgICAgZG9jLnNldFBhZ2UoaSk7XG4gIC8vICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gIC8vICAgICBjb25zdCBmb290ZXJZID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIDY7XG4gIC8vICAgICBkb2MudGV4dChgUGFnZSAke2l9IG9mICR7dG90YWxQYWdlc31gLCBwYWdlV2lkdGggLSAxNSwgZm9vdGVyWSwgeyBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyAtLS0gc2F2ZSBQREYgLS0tXG4gIC8vICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xuICAvLyB9XG5cblxuICBleHBvcnRUb1BkZigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpYWxCYWxhbmNlUmVwb3J0Py5tYWluQ09BR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gJ1hwcmVzcyBNb25leSAtIE1JIEFjY291bnRzJztcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdUcmlhbC1CYWxhbmNlLUFjY291bnRzLVJhdy5wZGYnO1xuXG4gICAgLy8gLS0tIHBhZ2UgJiBsYXlvdXQgLS0tXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFszMTIsIDIxMF0gfSk7XG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCk7XG4gICAgY29uc3QgbWFyZ2luTGVmdCA9IDE1O1xuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IG1hcmdpbkxlZnQsIGxvZ29ZID0gODtcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcblxuICAgIGNvbnN0IGxhYmVsVmFsdWVHYXAgPSAyO1xuICAgIGNvbnN0IHBhaXJHYXAgPSAxNTtcblxuICAgIC8vIC0tLSBtZXRhZGF0YSAtLS1cbiAgICBjb25zdCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydSZXBvcnQgVXNlcjonLCB0aGlzLnJlcG9ydFVzZXJdLFxuICAgICAgWydSZXBvcnQgVGltZTonLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydBY2NvdW50IFN0YXR1czonLCB0aGlzLmFjY291bnRTdGF0dXNdLFxuICAgICAgWydDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmN5XSxcbiAgICAgIFsnRGF0ZSBUeXBlOicsIHRoaXMuZGF0ZVR5cGVdLFxuICAgICAgWydGcm9tIERhdGU6JywgdGhpcy5mcm9tRGF0ZV0sXG4gICAgICBbJ0J1c2luZXNzIExpbmU6JywgdGhpcy5idXNpbmVzc0xpbmVdLFxuICAgICAgWydUbyBEYXRlOicsIHRoaXMudG9EYXRlXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIGRyYXcgbG9nbyArIHRpdGxlIC0tLVxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NCwgJ1BORycsIGxvZ29YLCBsb2dvWSwgbG9nb1dpZHRoLCBsb2dvSGVpZ2h0KTtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnRleHQodGl0bGUsIHBhZ2VXaWR0aCAvIDIsIHRpdGxlWSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG5cbiAgICAvLyAtLS0gZHJhdyBtZXRhZGF0YSAtLS1cbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XG4gICAgICBjb25zdCB5ID0gY3VycmVudFkgKyBpICogNjtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgICAgZG9jLnRleHQobGFiZWwsIG1hcmdpbkxlZnQsIHkpO1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsICsgJyAnKTtcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCBtYXJnaW5MZWZ0ICsgbGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIHkpO1xuICAgIH0pO1xuICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIDYgKyA2O1xuXG4gICAgLy8gLS0tIGRyYXcgc2VhcmNoIGNyaXRlcmlhIGhlYWRpbmcgLS0tXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnRleHQoJ1NlYXJjaCBDcml0ZXJpYTotJywgbWFyZ2luTGVmdCwgY3VycmVudFkpO1xuICAgIGN1cnJlbnRZICs9IDg7XG5cbiAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgcGFpcnMgLS0tXG4gICAgY29uc3QgcGFpclJvd3M6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtcbiAgICAgIFswLCAxXSxcbiAgICAgIFsyLCAzXSxcbiAgICAgIFs0LCA1XSxcbiAgICBdO1xuXG4gICAgcGFpclJvd3MuZm9yRWFjaChyb3dQYWlyID0+IHtcbiAgICAgIGNvbnN0IGxlZnRJbmRleCA9IHJvd1BhaXJbMF07XG4gICAgICBjb25zdCByaWdodEluZGV4ID0gcm93UGFpclsxXTtcblxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtsZWZ0SW5kZXhdWzBdLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgY29uc3QgbGVmdExhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHNlYXJjaENyaXRlcmlhW2xlZnRJbmRleF1bMF0gKyAnICcpO1xuICAgICAgZG9jLnRleHQoc2VhcmNoQ3JpdGVyaWFbbGVmdEluZGV4XVsxXSwgbWFyZ2luTGVmdCArIGxlZnRMYWJlbFdpZHRoICsgbGFiZWxWYWx1ZUdhcCwgY3VycmVudFkpO1xuXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICAgIGRvYy50ZXh0KHNlYXJjaENyaXRlcmlhW3JpZ2h0SW5kZXhdWzBdLCBwYWdlV2lkdGggLyAyLCBjdXJyZW50WSk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgY29uc3QgcmlnaHRMYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVswXSArICcgJyk7XG4gICAgICBkb2MudGV4dChzZWFyY2hDcml0ZXJpYVtyaWdodEluZGV4XVsxXSwgcGFnZVdpZHRoIC8gMiArIHJpZ2h0TGFiZWxXaWR0aCArIGxhYmVsVmFsdWVHYXAsIGN1cnJlbnRZKTtcblxuICAgICAgY3VycmVudFkgKz0gNjtcbiAgICB9KTtcbiAgICBjdXJyZW50WSArPSA0O1xuXG4gICAgLy8gLS0tIGhlYWRlcnMgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG5cbiAgICBjb25zdCBmbGF0UmVwb3J0ID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KTtcblxuICAgIC8vIC0tLSByb3dzIC0tLVxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBmbGF0UmVwb3J0Lm1hcCgoYWNjLCBpKSA9PiBbXG4gICAgICBpICsgMSxcbiAgICAgIGFjYy5jb2FDb2RlLFxuICAgICAgYWNjLmFjY291bnRDb2RlLFxuICAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgICAgIGFjYy5vcGVuaW5nQmFsYW5jZSAhPSBudWxsID8gTnVtYmVyKGFjYy5vcGVuaW5nQmFsYW5jZSkudG9GaXhlZCgzKSA6IFwiXCIsXG4gICAgICBhY2MuZGViaXQgIT0gbnVsbCA/IE51bWJlcihhY2MuZGViaXQpLnRvRml4ZWQoMykgOiBcIlwiLFxuICAgICAgYWNjLmNyZWRpdCAhPSBudWxsID8gTnVtYmVyKGFjYy5jcmVkaXQpLnRvRml4ZWQoMykgOiBcIlwiLFxuICAgICAgYWNjLm5ldE1vdmVtZW50ICE9IG51bGwgPyBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KS50b0ZpeGVkKDMpIDogXCJcIixcbiAgICAgIGFjYy5jbG9zaW5nQmFsYW5jZSAhPSBudWxsID8gTnVtYmVyKGFjYy5jbG9zaW5nQmFsYW5jZSkudG9GaXhlZCgzKSA6IFwiXCJcbiAgICBdKTtcblxuICAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHtcbiAgICAgIDA6IHsgY2VsbFdpZHRoOiAxNSB9LFxuICAgICAgMTogeyBjZWxsV2lkdGg6IDI1IH0sXG4gICAgICAyOiB7IGNlbGxXaWR0aDogMjUgfSxcbiAgICAgIDM6IHsgY2VsbFdpZHRoOiA3MCB9LFxuICAgICAgNDogeyBjZWxsV2lkdGg6IDMwIH0sXG4gICAgICA1OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgICAgIDY6IHsgY2VsbFdpZHRoOiAzMCB9LFxuICAgICAgNzogeyBjZWxsV2lkdGg6IDMwIH0sXG4gICAgICA4OiB7IGNlbGxXaWR0aDogMzAgfSxcbiAgICB9O1xuXG4gICAgLy8gLS0tIGRyYXcgdGFibGUgLS0tXG4gICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XG4gICAgICBoZWFkOiBbaGVhZGVyc10sXG4gICAgICBib2R5OiByb3dzLFxuICAgICAgc3RhcnRZOiBjdXJyZW50WSxcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBoZWFkU3R5bGVzOiB7XG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxuICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxuICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgaGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgY2VsbFdpZHRoOiAnd3JhcCcsXG4gICAgICAgIG1pbkNlbGxIZWlnaHQ6IDEwXG4gICAgICB9LFxuICAgICAgYm9keVN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogOCxcbiAgICAgICAgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcbiAgICAgIGNvbHVtblN0eWxlcyxcbiAgICAgIGRpZFBhcnNlQ2VsbDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IGRhdGEucm93LmluZGV4O1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZmxhdFJlcG9ydFtyb3dJbmRleF07XG4gICAgICAgIGNvbnN0IGlzVG90YWxSb3cgPSByb3dEYXRhLmlzVG90YWxSb3c7XG5cbiAgICAgICAgaWYgKGlzVG90YWxSb3cpIGRhdGEuY2VsbC5zdHlsZXMuZm9udFN0eWxlID0gJ2JvbGQnO1xuXG4gICAgICAgIC8vIGhpZ2hsaWdodCBuZWdhdGl2ZXMgaW4gcmVkXG4gICAgICAgIGlmIChkYXRhLmNvbHVtbi5pbmRleCA+IDMpIHtcbiAgICAgICAgICBjb25zdCBrZXlNYXAgPSBbXCJvcGVuaW5nQmFsYW5jZVwiLCBcImRlYml0XCIsIFwiY3JlZGl0XCIsIFwibmV0TW92ZW1lbnRcIiwgXCJjbG9zaW5nQmFsYW5jZVwiXTtcbiAgICAgICAgICBjb25zdCBrZXkgPSBrZXlNYXBbZGF0YS5jb2x1bW4uaW5kZXggLSA0XTtcbiAgICAgICAgICBjb25zdCByYXcgPSByb3dEYXRhW2tleV07XG4gICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gICAgICAgICAgaWYgKCFpc05hTihudW0pICYmIG51bSA8IDApIHtcbiAgICAgICAgICAgIGRhdGEuY2VsbC5zdHlsZXMudGV4dENvbG9yID0gWzI1NSwgMCwgMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAtLS0gcGFnZSBudW1iZXJzIC0tLVxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSAoZG9jIGFzIGFueSkuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsUGFnZXM7IGkrKykge1xuICAgICAgZG9jLnNldFBhZ2UoaSk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgICBjb25zdCBmb290ZXJZID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIDY7XG4gICAgICBkb2MudGV4dChgUGFnZSAke2l9IG9mICR7dG90YWxQYWdlc31gLCBwYWdlV2lkdGggLSAxNSwgZm9vdGVyWSwgeyBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0gc2F2ZSBQREYgLS0tXG4gICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xuICB9XG5cblxuICAvLyBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xuICAvLyAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIC8vICAgY29uc3QgZmlsZU5hbWUgPSAnVHJpYWwtQmFsYW5jZS1BY2NvdW50cy1SYXcueGxzeCc7XG4gIC8vICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAvLyAgIGNvbnN0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdUcmlhbCBCYWxhbmNlJyk7XG5cbiAgLy8gICBsZXQgY3VycmVudFJvdyA9IDE7XG5cbiAgLy8gICAvLyAtLS0gYWRkIGxvZ28gaWYgYXZhaWxhYmxlIC0tLVxuICAvLyAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgLy8gICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcbiAgLy8gICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XG4gIC8vICAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcbiAgLy8gICAgICAgZXh0ZW5zaW9uOiAncG5nJ1xuICAvLyAgICAgfSk7XG4gIC8vICAgICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gIC8vICAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXG4gIC8vICAgICAgIGV4dDogeyB3aWR0aDogMTIwLCBoZWlnaHQ6IDYwIH0sXG4gIC8vICAgICAgIGVkaXRBczogJ29uZUNlbGwnXG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyAtLS0gdGl0bGUgLS0tXG4gIC8vICAgY29uc3QgdGl0bGUgPSAnWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnO1xuICAvLyAgIHNoZWV0Lm1lcmdlQ2VsbHMoMSwgMywgMSwgOSk7XG4gIC8vICAgY29uc3QgdGl0bGVDZWxsID0gc2hlZXQuZ2V0Q2VsbCgnQzEnKTtcbiAgLy8gICB0aXRsZUNlbGwudmFsdWUgPSB0aXRsZTtcbiAgLy8gICB0aXRsZUNlbGwuZm9udCA9IHsgc2l6ZTogMTUsIGJvbGQ6IHRydWUgfTtcbiAgLy8gICB0aXRsZUNlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICdtaWRkbGUnIH07XG4gIC8vICAgY3VycmVudFJvdyA9IDQ7XG5cbiAgLy8gICAvLyAtLS0gbWV0YWRhdGEgKGxhYmVsIGJvbGQsIHZhbHVlIG5vcm1hbCkgLS0tXG4gIC8vICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgLy8gICAgIFsnUmVwb3J0IFVzZXI6JywgdGhpcy5yZXBvcnRVc2VyXSxcbiAgLy8gICAgIFsnUmVwb3J0IFRpbWU6JywgdGhpcy5yZXBvcnRUaW1lXSxcbiAgLy8gICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXG4gIC8vICAgXTtcbiAgLy8gICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xuICAvLyAgICAgc2hlZXQubWVyZ2VDZWxscyhjdXJyZW50Um93LCAxLCBjdXJyZW50Um93LCA2KTsgLy8gbWVyZ2Ugd2lkZSByYW5nZVxuICAvLyAgICAgY29uc3Qgcm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG4gIC8vICAgICAvLyBVc2luZyByaWNoVGV4dCB0byBzdHlsZSBsYWJlbCBib2xkIGFuZCB2YWx1ZSBub3JtYWxcbiAgLy8gICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xuICAvLyAgICAgICByaWNoVGV4dDogW1xuICAvLyAgICAgICAgIHsgdGV4dDogbGFiZWwgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXG4gIC8vICAgICAgICAgeyB0ZXh0OiB2YWx1ZSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCgxKS5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgd3JhcFRleHQ6IHRydWUgfTtcbiAgLy8gICB9KTtcbiAgLy8gICBjdXJyZW50Um93Kys7XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIGhlYWRpbmcgLS0tXG4gIC8vICAgc2hlZXQubWVyZ2VDZWxscyhjdXJyZW50Um93LCAxLCBjdXJyZW50Um93LCA2KTtcbiAgLy8gICBzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLnZhbHVlID0gJ1NlYXJjaCBDcml0ZXJpYTotJztcbiAgLy8gICBzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgLy8gICBjdXJyZW50Um93ICs9IDI7XG5cbiAgLy8gICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIChsYWJlbCBib2xkLCB2YWx1ZSBub3JtYWwpIC0tLVxuICAvLyAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gIC8vICAgICBbJ0FjY291bnQgU3RhdHVzOicsIHRoaXMuYWNjb3VudFN0YXR1c10sXG4gIC8vICAgICBbJ0N1cnJlbmN5OicsIHRoaXMuY3VycmVuY3ldLFxuICAvLyAgICAgWydEYXRlIFR5cGU6JywgdGhpcy5kYXRlVHlwZV0sXG4gIC8vICAgICBbJ0Zyb20gRGF0ZTonLCB0aGlzLmZyb21EYXRlXSxcbiAgLy8gICAgIFsnQnVzaW5lc3MgTGluZTonLCB0aGlzLmJ1c2luZXNzTGluZV0sXG4gIC8vICAgICBbJ1RvIERhdGU6JywgdGhpcy50b0RhdGVdLFxuICAvLyAgIF07XG5cbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XG4gIC8vICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XG4gIC8vICAgICBjb25zdCByaWdodCA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcbiAgLy8gICAgIGNvbnN0IHJvdyA9IHNoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xuXG4gIC8vICAgICBzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIDMpO1xuICAvLyAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XG4gIC8vICAgICAgIHJpY2hUZXh0OiBbXG4gIC8vICAgICAgICAgeyB0ZXh0OiBsZWZ0WzBdICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxuICAvLyAgICAgICAgIHsgdGV4dDogbGVmdFsxXSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCgxKS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcblxuICAvLyAgICAgc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCA0LCByb3cubnVtYmVyLCA2KTtcbiAgLy8gICAgIHJvdy5nZXRDZWxsKDQpLnZhbHVlID0ge1xuICAvLyAgICAgICByaWNoVGV4dDogW1xuICAvLyAgICAgICAgIHsgdGV4dDogcmlnaHRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXG4gIC8vICAgICAgICAgeyB0ZXh0OiByaWdodFsxXSB9XG4gIC8vICAgICAgIF1cbiAgLy8gICAgIH07XG4gIC8vICAgICByb3cuZ2V0Q2VsbCg0KS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcbiAgLy8gICB9XG4gIC8vICAgY3VycmVudFJvdysrO1xuXG4gIC8vICAgLy8gLS0tIGhlYWRlcnMgKGFkZGVkIFNyIE5vIGF0IHN0YXJ0KSAtLS1cbiAgLy8gICBjb25zdCBoZWFkZXJzID0gW1xuICAvLyAgICAgJ1NyIE5vJyxcbiAgLy8gICAgICdDT0EgQ29kZScsICdBY2NvdW50IENvZGUnLCAnQWNjb3VudCBEZXNjcmlwdGlvbicsXG4gIC8vICAgICAnT3BlbmluZyBCYWxhbmNlIExvY2FsIEFtdCcsICdEZWJpdHMgTG9jYWwgQW10JywgJ0NyZWRpdHMgTG9jYWwgQW10JyxcbiAgLy8gICAgICdOZXQgTW92ZW1lbnQgTG9jYWwgQW10JywgJ0Nsb3NpbmcgQmFsYW5jZSBMb2NhbCBBbXQnXG4gIC8vICAgXTtcbiAgLy8gICBjb25zdCBoZWFkZXJSb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgLy8gICBoZWFkZXJzLmZvckVhY2goKGgsIGkpID0+IHtcbiAgLy8gICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpICsgMSk7XG4gIC8vICAgICBjZWxsLnZhbHVlID0gaDtcbiAgLy8gICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuICAvLyAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IGhvcml6b250YWw6ICdjZW50ZXInLCB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XG4gIC8vICAgICBjZWxsLmZpbGwgPSB7IHR5cGU6ICdwYXR0ZXJuJywgcGF0dGVybjogJ3NvbGlkJywgZmdDb2xvcjogeyBhcmdiOiAnRENEQ0RDJyB9IH07XG4gIC8vICAgICBjZWxsLmJvcmRlciA9IHtcbiAgLy8gICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgLy8gICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxuICAvLyAgICAgfTtcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSByb3dzIChwcmVwZW5kIFNyIE5vKSAtLS1cbiAgLy8gICBjb25zdCByb3dzID0gdGhpcy5mbGF0dGVuUmVwb3J0KHRoaXMudHJpYWxCYWxhbmNlUmVwb3J0KS5tYXAoKGFjYywgaWR4KSA9PiBbXG4gIC8vICAgICBpZHggKyAxLFxuICAvLyAgICAgYWNjLmNvYUNvZGUsXG4gIC8vICAgICBhY2MuYWNjb3VudENvZGUsXG4gIC8vICAgICBhY2MuYWNjb3VudERlc2NyaXB0aW9uLFxuICAvLyAgICAgcGFyc2VGbG9hdChhY2Mub3BlbmluZ0JhbGFuY2UudG9TdHJpbmcoKSkudG9GaXhlZCgzKSxcbiAgLy8gICAgIHBhcnNlRmxvYXQoYWNjLmRlYml0LnRvU3RyaW5nKCkpLnRvRml4ZWQoMyksXG4gIC8vICAgICBOdW1iZXIoYWNjLmNyZWRpdCksXG4gIC8vICAgICBOdW1iZXIoYWNjLm5ldE1vdmVtZW50KSxcbiAgLy8gICAgIE51bWJlcihhY2MuY2xvc2luZ0JhbGFuY2UpLFxuICAvLyAgICAgYWNjLmlzVG90YWxSb3cgfHwgZmFsc2VcbiAgLy8gICBdKTtcblxuICAvLyAgIHJvd3MuZm9yRWFjaChyID0+IHtcbiAgLy8gICAgIGNvbnN0IHJvdyA9IHNoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xuICAvLyAgICAgci5zbGljZSgwLCA5KS5mb3JFYWNoKCh2YWwsIGkpID0+IHtcbiAgLy8gICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcbiAgLy8gICAgICAgY2VsbC52YWx1ZSA9IHZhbDtcblxuICAvLyAgICAgICAvLyBib3JkZXJzXG4gIC8vICAgICAgIGNlbGwuYm9yZGVyID0ge1xuICAvLyAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gIC8vICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgLy8gICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cbiAgLy8gICAgICAgfTtcblxuICAvLyAgICAgICAvLyBib2xkIHRvdGFsIHJvd3NcbiAgLy8gICAgICAgaWYgKHJbOV0pIHtcbiAgLy8gICAgICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlcnMgcmVkXG4gIC8vICAgICAgIGlmIChpID4gMyAmJiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPCAwKSB7XG4gIC8vICAgICAgICAgY2VsbC5mb250ID0geyBjb2xvcjogeyBhcmdiOiAnRkYwMDAwJyB9LCBib2xkOiByWzldID8gdHJ1ZSA6IHVuZGVmaW5lZCB9O1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIChhZGRlZCBTciBObyBjb2x1bW4pIC0tLVxuICAvLyAgIGNvbnN0IHdpZHRocyA9IFs4LCAxNSwgMTUsIDQwLCAyMCwgMjAsIDIwLCAyMCwgMjBdO1xuICAvLyAgIHdpZHRocy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gIC8vICAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID0gdztcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLSBzYXZlIGZpbGUgLS0tXG4gIC8vICAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oYnVmZmVyID0+IHtcbiAgLy8gICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAvLyAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gIC8vICAgICB9KTtcbiAgLy8gICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cblxuICBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnVHJpYWwtQmFsYW5jZS1BY2NvdW50cy1SYXcueGxzeCc7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdUcmlhbCBCYWxhbmNlJyk7XG5cbiAgICBsZXQgY3VycmVudFJvdyA9IDE7XG5cbiAgICAvLyAtLS0gYWRkIGxvZ28gaWYgYXZhaWxhYmxlIC0tLVxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2U/LmxvZ29CYXNlNjQpIHtcbiAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7IGJhc2U2NDogYmFzZTY0RGF0YSwgZXh0ZW5zaW9uOiAncG5nJyB9KTtcbiAgICAgIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHsgdGw6IHsgY29sOiAwLCByb3c6IDAgfSwgZXh0OiB7IHdpZHRoOiAxMjAsIGhlaWdodDogNjAgfSwgZWRpdEFzOiAnb25lQ2VsbCcgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tIHRpdGxlIC0tLVxuICAgIGNvbnN0IHRpdGxlID0gJ1hwcmVzcyBNb25leSAtIE1JIEFjY291bnRzJztcbiAgICBzaGVldC5tZXJnZUNlbGxzKDEsIDMsIDEsIDkpO1xuICAgIGNvbnN0IHRpdGxlQ2VsbCA9IHNoZWV0LmdldENlbGwoJ0MxJyk7XG4gICAgdGl0bGVDZWxsLnZhbHVlID0gdGl0bGU7XG4gICAgdGl0bGVDZWxsLmZvbnQgPSB7IHNpemU6IDE1LCBib2xkOiB0cnVlIH07XG4gICAgdGl0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xuICAgIGN1cnJlbnRSb3cgPSA0O1xuXG4gICAgLy8gLS0tIG1ldGFkYXRhIC0tLVxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXG4gICAgICBbJ1JlcG9ydCBVc2VyOicsIHRoaXMucmVwb3J0VXNlcl0sXG4gICAgICBbJ1JlcG9ydCBUaW1lOicsIHRoaXMucmVwb3J0VGltZV0sXG4gICAgICBbJ1JlcG9ydCBQZXJpb2Q6JywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAgIF07XG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMoY3VycmVudFJvdywgMSwgY3VycmVudFJvdywgNik7XG4gICAgICBjb25zdCByb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDogbGFiZWwgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogdmFsdWUgfV0gfTtcbiAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xuICAgIH0pO1xuICAgIGN1cnJlbnRSb3crKztcblxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cbiAgICBzaGVldC5tZXJnZUNlbGxzKGN1cnJlbnRSb3csIDEsIGN1cnJlbnRSb3csIDYpO1xuICAgIHNoZWV0LmdldENlbGwoY3VycmVudFJvdywgMSkudmFsdWUgPSAnU2VhcmNoIENyaXRlcmlhOi0nO1xuICAgIHNoZWV0LmdldENlbGwoY3VycmVudFJvdywgMSkuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuICAgIGN1cnJlbnRSb3cgKz0gMjtcblxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgICAgIFsnQWNjb3VudCBTdGF0dXM6JywgdGhpcy5hY2NvdW50U3RhdHVzXSxcbiAgICAgIFsnQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jeV0sXG4gICAgICBbJ0RhdGUgVHlwZTonLCB0aGlzLmRhdGVUeXBlXSxcbiAgICAgIFsnRnJvbSBEYXRlOicsIHRoaXMuZnJvbURhdGVdLFxuICAgICAgWydCdXNpbmVzcyBMaW5lOicsIHRoaXMuYnVzaW5lc3NMaW5lXSxcbiAgICAgIFsnVG8gRGF0ZTonLCB0aGlzLnRvRGF0ZV0sXG4gICAgXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xuICAgICAgY29uc3Qgcm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG5cbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMyk7XG4gICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHsgcmljaFRleHQ6IFt7IHRleHQ6IGxlZnRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogbGVmdFsxXSB9XSB9O1xuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogdHJ1ZSwgdmVydGljYWw6ICdtaWRkbGUnIH07XG5cbiAgICAgIHNoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgNCwgcm93Lm51bWJlciwgNik7XG4gICAgICByb3cuZ2V0Q2VsbCg0KS52YWx1ZSA9IHsgcmljaFRleHQ6IFt7IHRleHQ6IHJpZ2h0WzBdICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHJpZ2h0WzFdIH1dIH07XG4gICAgICByb3cuZ2V0Q2VsbCg0KS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcbiAgICB9XG4gICAgY3VycmVudFJvdysrO1xuXG4gICAgLy8gLS0tIGhlYWRlcnMgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG4gICAgY29uc3QgaGVhZGVyUm93ID0gc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XG4gICAgaGVhZGVycy5mb3JFYWNoKChoLCBpKSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xuICAgICAgY2VsbC52YWx1ZSA9IGg7XG4gICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcbiAgICAgIGNlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xuICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0RDRENEQycgfSB9O1xuICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcbiAgICB9KTtcblxuICAgIC8vIC0tLSByb3dzIHdpdGggMyBkZWNpbWFscyBmb3IgbnVtZXJpYyBjb2x1bW5zIC0tLVxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmZsYXR0ZW5SZXBvcnQodGhpcy50cmlhbEJhbGFuY2VSZXBvcnQpLm1hcCgoYWNjLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IG51bWVyaWNDb2x1bW5zID0gWydvcGVuaW5nQmFsYW5jZScsICdkZWJpdCcsICdjcmVkaXQnLCAnbmV0TW92ZW1lbnQnLCAnY2xvc2luZ0JhbGFuY2UnXTtcbiAgICAgIGNvbnN0IHJvd0RhdGEgPSBudW1lcmljQ29sdW1ucy5tYXAoY29sID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gTnVtYmVyKGFjY1tjb2xdKTtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWwpID8gdmFsLnRvRml4ZWQoMykgOiAnJztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgaWR4ICsgMSxcbiAgICAgICAgYWNjLmNvYUNvZGUsXG4gICAgICAgIGFjYy5hY2NvdW50Q29kZSxcbiAgICAgICAgYWNjLmFjY291bnREZXNjcmlwdGlvbixcbiAgICAgICAgLi4ucm93RGF0YSxcbiAgICAgICAgYWNjLmlzVG90YWxSb3cgfHwgZmFsc2VcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICByb3dzLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCByb3cgPSBzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcbiAgICAgIHIuc2xpY2UoMCwgOSkuZm9yRWFjaCgodmFsLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XG4gICAgICAgIC8vIGNvbnZlcnQgYmFjayB0byBudW1iZXIgZm9yIEV4Y2VsIG1hdGggYnV0IHNob3cgMyBkZWNpbWFsc1xuICAgICAgICBpZiAoaSA+IDMgJiYgdmFsICE9PSAnJykgY2VsbC52YWx1ZSA9IHBhcnNlRmxvYXQodmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICBlbHNlIGNlbGwudmFsdWUgPSB2YWw7XG5cbiAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcblxuICAgICAgICAvLyBib2xkIHRvdGFsIHJvd3NcbiAgICAgICAgaWYgKHJbOV0pIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xuXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlcnMgcmVkXG4gICAgICAgIGlmIChpID4gMyAmJiB0eXBlb2YgY2VsbC52YWx1ZSA9PT0gJ251bWJlcicgJiYgY2VsbC52YWx1ZSA8IDApIHtcbiAgICAgICAgICBjZWxsLmZvbnQgPSB7IGNvbG9yOiB7IGFyZ2I6ICdGRjAwMDAnIH0sIGJvbGQ6IHJbOV0gPyB0cnVlIDogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgbnVtYmVyIGZvcm1hdCB0byBzaG93IDMgZGVjaW1hbHNcbiAgICAgICAgaWYgKGkgPiAzKSBjZWxsLm51bUZtdCA9ICcwLjAwMCc7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLSBjb2x1bW4gd2lkdGhzIC0tLVxuICAgIGNvbnN0IHdpZHRocyA9IFs4LCAxNSwgMTUsIDQwLCAyMCwgMjAsIDIwLCAyMCwgMjBdO1xuICAgIHdpZHRocy5mb3JFYWNoKCh3LCBpKSA9PiBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID0gdyk7XG5cbiAgICAvLyAtLS0gc2F2ZSBmaWxlIC0tLVxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KTtcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xuICAgIH0pO1xuICB9XG5cblxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpYWxCYWxhbmNlUmVwb3J0Py5tYWluQ09BR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ1RyaWFsLUJhbGFuY2UtQWNjb3VudHMtUmF3LmNzdic7XG5cbiAgICAvLyAtLS0gbWV0YWRhdGEgLS0tXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcbiAgICAgIFsnUmVwb3J0IFRpdGxlOicsICdYcHJlc3MgTW9uZXkgLSBNSSBBY2NvdW50cyddLFxuICAgICAgWydSZXBvcnQgVXNlcjonLCB0aGlzLnJlcG9ydFVzZXJdLFxuICAgICAgWydSZXBvcnQgVGltZTonLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICAgICAgWydBY2NvdW50IFN0YXR1czonLCB0aGlzLmFjY291bnRTdGF0dXNdLFxuICAgICAgWydDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmN5XSxcbiAgICAgIFsnRGF0ZSBUeXBlOicsIHRoaXMuZGF0ZVR5cGVdLFxuICAgICAgWydGcm9tIERhdGU6JywgdGhpcy5mcm9tRGF0ZV0sXG4gICAgICBbJ0J1c2luZXNzIExpbmU6JywgdGhpcy5idXNpbmVzc0xpbmVdLFxuICAgICAgWydUbyBEYXRlOicsIHRoaXMudG9EYXRlXSxcbiAgICBdO1xuXG4gICAgLy8gLS0tIHRhYmxlIGhlYWRlcnMgKGFkZCBTciBObyBhdCBzdGFydCkgLS0tXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICdTciBObycsXG4gICAgICAnQ09BIENvZGUnLCAnQWNjb3VudCBDb2RlJywgJ0FjY291bnQgRGVzY3JpcHRpb24nLFxuICAgICAgJ09wZW5pbmcgQmFsYW5jZSBMb2NhbCBBbXQnLCAnRGViaXRzIExvY2FsIEFtdCcsICdDcmVkaXRzIExvY2FsIEFtdCcsXG4gICAgICAnTmV0IE1vdmVtZW50IExvY2FsIEFtdCcsICdDbG9zaW5nIEJhbGFuY2UgTG9jYWwgQW10J1xuICAgIF07XG5cbiAgICAvLyAtLS0gdGFibGUgcm93cyAocHJlcGVuZCBTciBObykgLS0tXG4gICAgY29uc3Qgcm93czogYW55W11bXSA9IHRoaXMuZmxhdHRlblJlcG9ydCh0aGlzLnRyaWFsQmFsYW5jZVJlcG9ydCkubWFwKChhY2MsIGluZGV4KSA9PiBbXG4gICAgICBpbmRleCArIDEsIC8vIFNyIE5vXG4gICAgICBhY2MuY29hQ29kZSxcbiAgICAgIGFjYy5hY2NvdW50Q29kZSxcbiAgICAgIGFjYy5hY2NvdW50RGVzY3JpcHRpb24sXG4gICAgICBOdW1iZXIoYWNjLm9wZW5pbmdCYWxhbmNlKS50b0ZpeGVkKDMpLFxuICAgICAgTnVtYmVyKGFjYy5kZWJpdCkudG9GaXhlZCgzKSxcbiAgICAgIE51bWJlcihhY2MuY3JlZGl0KS50b0ZpeGVkKDMpLFxuICAgICAgTnVtYmVyKGFjYy5uZXRNb3ZlbWVudCkudG9GaXhlZCgzKSxcbiAgICAgIE51bWJlcihhY2MuY2xvc2luZ0JhbGFuY2UpLnRvRml4ZWQoMylcbiAgICBdKTtcblxuICAgIC8vIC0tLSBoZWxwZXIgdG8gZXNjYXBlIENTViB2YWx1ZXMgLS0tXG4gICAgY29uc3QgZXNjYXBlQ3N2ID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgICBjb25zdCBzdHIgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcygnLCcpIHx8IHN0ci5pbmNsdWRlcygnXCInKSB8fCBzdHIuaW5jbHVkZXMoJ1xcbicpXG4gICAgICAgID8gYFwiJHtzdHIucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImBcbiAgICAgICAgOiBzdHI7XG4gICAgfTtcblxuICAgIC8vIC0tLSBidWlsZCBDU1YgY29udGVudCAtLS1cbiAgICBsZXQgY3N2Q29udGVudCA9ICcnO1xuXG4gICAgLy8gbWV0YWRhdGFcbiAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xuICAgICAgY3N2Q29udGVudCArPSBgJHtlc2NhcGVDc3YobGFiZWwpfSR7ZXNjYXBlQ3N2KHZhbHVlKX0sXFxuYDtcbiAgICB9KTtcbiAgICBjc3ZDb250ZW50ICs9ICdcXG4nOyAvLyBnYXBcblxuICAgIC8vIHNlYXJjaCBjcml0ZXJpYSAoMiBwZXIgcm93KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xuICAgICAgY3N2Q29udGVudCArPSBgJHtlc2NhcGVDc3YobGVmdFswXSl9JHtlc2NhcGVDc3YobGVmdFsxXSl9LCBgO1xuICAgICAgaWYgKHJpZ2h0KSBjc3ZDb250ZW50ICs9IGAke2VzY2FwZUNzdihyaWdodFswXSl9JHtlc2NhcGVDc3YocmlnaHRbMV0pfSwgYDtcbiAgICAgIGNzdkNvbnRlbnQgKz0gJ1xcbic7XG4gICAgfVxuICAgIGNzdkNvbnRlbnQgKz0gJ1xcbic7IC8vIGdhcFxuXG4gICAgLy8gdGFibGUgaGVhZGVyc1xuICAgIGNzdkNvbnRlbnQgKz0gaGVhZGVycy5tYXAoaCA9PiBlc2NhcGVDc3YoaCkpLmpvaW4oJywnKSArICdcXG4nO1xuXG4gICAgLy8gdGFibGUgcm93c1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgY3N2Q29udGVudCArPSByb3cubWFwKGNlbGwgPT4gZXNjYXBlQ3N2KGNlbGwpKS5qb2luKCcsJykgKyAnXFxuJztcbiAgICB9KTtcblxuICAgIC8vIC0tLSB0cmlnZ2VyIGRvd25sb2FkIC0tLVxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lKTtcbiAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICB9XG5cbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsID0gcGF5bG9hZD8ubW9kYWwgfHwgcGF5bG9hZDtcblxuICAgIGNvbnNvbGUubG9nKFwiaW4gZ2V0IHJlcG9ydCBvZiB0cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydCA6IC0gXCIpO1xuICAgIGNvbnNvbGUubG9nKG1vZGFsKTtcblxuICAgIHRoaXMuZnJvbURhdGUgPSBmb3JtYXREYXRlKG1vZGFsLmZyb21EYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpO1xuICAgIHRoaXMudG9EYXRlID0gZm9ybWF0RGF0ZShtb2RhbC50b0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XG5cbiAgICBjb25zdCByZXE6IFRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0UmVxdWVzdERUTyA9IHtcbiAgICAgIHllYXI6IE51bWJlcihtb2RhbC5maW5hbmNpYWxZZWFyKSxcbiAgICAgIGRhdGVUeXBlOiBtb2RhbC5kYXRlVHlwZSxcbiAgICAgIGZyb21EYXRlOiBtb2RhbC5mcm9tRGF5LFxuICAgICAgdG9EYXRlOiBtb2RhbC50b0RheSxcbiAgICAgIGFjY291bnRTdGF0dXM6IG1vZGFsLmFjY291bnRTdGF0dXMuam9pbignLCcpLFxuICAgICAgYnVzaW5lc3NMaW5lOiBtb2RhbC5idXNpbmVzc0xpbmUsXG4gICAgICBjdXJyZW5jeTogbW9kYWwuY3VycmVuY3ksXG4gICAgICBjb21wYW55Q29kZTogXCJCSFwiLFxuICAgICAgcmVwb3J0UGVyaW9kOiBgJHtmb3JtYXREYXRlKG1vZGFsLmZyb21EYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpfSAtICR7Zm9ybWF0RGF0ZShtb2RhbC50b0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9YCxcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChyZXEpO1xuICB9XG5cbn1cbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIj48L2xpYi1zZWFyY2gtZmlsdGVyPlxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cblxuPGRpdiAqbmdJZj1cImRhdGFSZWFkeSAmJiB0cmlhbEJhbGFuY2VSZXBvcnQ/Lm1haW5DT0FHcm91cHM/Lmxlbmd0aCA+IDBcIj5cbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCInWHByZXNzIE1vbmV5IC0gTUkgQWNjb3VudHMnXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCJcbiAgICBbbWV0YURhdGFPbmVdPVwibWV0YURhdGFPbmVcIiBbbWV0YURhdGFUd29dPVwibWV0YURhdGFUd29cIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIlxuICAgIChzZWFyY2hFdmVudCk9XCJvblNlYXJjaCgkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XG5cbiAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cInJvd0RhdGE/Lmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcbiAgICAgIFtncmlkQXBpXT1cImdyaWRBcGlcIj48L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XG5cbiAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWRcIiBzdHlsZT1cImhlaWdodDogNDAwcHg7XCIgW2RvbUxheW91dF09XCInbm9ybWFsJ1wiXG4gICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbcm93Q2xhc3NSdWxlc109XCJyb3dDbGFzc1J1bGVzXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIiBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3Jvd0hlaWdodF09XCIyMFwiXG4gICAgICBbaGVhZGVySGVpZ2h0XT1cIjIyXCIgKHBhZ2luYXRpb25DaGFuZ2VkKT1cIm9uUmVzaXplKClcIj48L2FnLWdyaWQtYW5ndWxhcj5cblxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIG10LTNcIiAqbmdJZj1cInRyaWFsQmFsYW5jZVJlcG9ydD8ubWFpbkNPQUdyb3Vwcz8ubGVuZ3RoPT0wXCI+XG4gIE5vIERhdGEgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXG48L2Rpdj4iXX0=