@sachin9822/reports-lib 0.0.209 → 0.0.210

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.
Files changed (38) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +13 -12
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +4 -3
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +1 -1
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +1 -1
  5. package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +700 -0
  6. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +1 -1
  7. package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +3 -3
  8. package/esm2020/lib/components/funding-report/funding-report.component.mjs +3 -3
  9. package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +4 -3
  10. package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +3 -3
  11. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +1 -1
  12. package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +311 -0
  13. package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +6 -5
  14. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report.mjs +1 -1
  15. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.mjs +6 -0
  16. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report.mjs +5 -0
  17. package/esm2020/lib/reports-lib.module.mjs +15 -5
  18. package/esm2020/lib/services/report.service.mjs +62 -4
  19. package/esm2020/lib/shared/export-generic.service.mjs +10 -1
  20. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +525 -189
  21. package/esm2020/public-api.mjs +5 -1
  22. package/fesm2015/sachin9822-reports-lib.mjs +1714 -329
  23. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
  24. package/fesm2020/sachin9822-reports-lib.mjs +1720 -328
  25. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
  26. package/lib/assets/images/Search.svg +9 -9
  27. package/lib/assets/svg-loaders/blue-tail-spin.svg +31 -31
  28. package/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.d.ts +78 -0
  29. package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +68 -0
  30. package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +1 -1
  31. package/lib/models/branch-activity-report/branch-activity-send-report.d.ts +4 -0
  32. package/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.d.ts +13 -0
  33. package/lib/models/transaction-monitoring-report/transaction-monitoring-report.d.ts +23 -0
  34. package/lib/reports-lib.module.d.ts +12 -10
  35. package/lib/services/report.service.d.ts +11 -1
  36. package/lib/shared/search-filter/search-filter.component.d.ts +7 -5
  37. package/package.json +1 -1
  38. package/public-api.d.ts +4 -0
@@ -768,9 +768,9 @@ export class StatementOfAccountsReportComponent {
768
768
  }
769
769
  }
770
770
  StatementOfAccountsReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatementOfAccountsReportComponent, deps: [{ token: i1.ReportService }], target: i0.ɵɵFactoryTarget.Component });
771
- StatementOfAccountsReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StatementOfAccountsReportComponent, selector: "lib-statement-of-accounts-report", ngImport: i0, template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\"\r\n (formValid)=\"handleFormValid($event)\"\r\n >\r\n</lib-search-filter>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<span *ngIf=\"loadingState === ComponentLoadingState.Error\">{{ errorMessage }}</span>\r\n<div *ngIf=\"showTables && isFormValid\">\r\n<lib-metadata \r\n [reportName]=\"ReportName\" \r\n [showmetaDataOne]=\"true\" \r\n [showmetaDataTwo]=\"true\" \r\n [metaDataOne]=\"metaDataOne\"\r\n [metaDataTwo]=\"metaDataTwo\" \r\n (exportEvent)=\"handleExport($event)\" \r\n (searchEvent)=\"filter($event)\">\r\n </lib-metadata>\r\n\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"openingBalAndFunding\"\r\n [columnDefs]=\"columnDefs\"\r\n [pinnedBottomRowData]=\"[]\"\r\n [headerHeight]=\"32\" \r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n (gridReady)=\"onOpeningGridReady($event)\"\r\n style=\"width: 100%; height: 91px;\">\r\n</ag-grid-angular>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayIn' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Send Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"sendDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"sendPinnedBottomRow\"\r\n (gridReady)=\"onSendGridReady($event)\" \r\n style=\"width: 100%; height: 204px;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayOut' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Receive Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"receiveDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"receivePinnedBottomRow\"\r\n (gridReady)=\"onReceiveGridReady($event)\" \r\n style=\"width: 100%; height: 204px;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n\r\n<!-- Closing balance row -->\r\n<div class=\"closing-balance-row\">\r\n <div class=\"label\" title=\"Closing Balance\">\r\n Closing Balance\r\n </div>\r\n\r\n <div class=\"settlement\" \r\n [title]=\"closingBalanceSettlmentFormatted\">\r\n {{ closingBalanceSettlmentFormatted }}\r\n </div>\r\n\r\n <div class=\"value\" [title]=\"closingBalanceInUsdFormatted\">\r\n {{ closingBalanceInUsdFormatted }}\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- settlement currency words row -->\r\n<div class=\"closing-balance-row closing-balance-words\"\r\n *ngIf=\"closingBalanceSettlmentInWords\">\r\n <div class=\"label\"\r\n [title]=\"closingBalanceSettlmentCurrency + ' - ' + closingBalanceSettlmentInWords\">\r\n {{ closingBalanceSettlmentCurrency }} - {{ closingBalanceSettlmentInWords }}\r\n </div>\r\n</div>\r\n\r\n<!-- existing USD words row (keep as-is) -->\r\n<div class=\"closing-balance-row closing-balance-words\">\r\n <div class=\"label\" [title]=\"closingBalanceCurrency + ' - ' + closingBalanceUSDInWords\">\r\n {{ closingBalanceCurrency }} - {{ closingBalanceUSDInWords }}\r\n </div>\r\n</div>\r\n", 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}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}::ng-deep .ag-theme-alpine .pinned-total-cell{font-weight:700!important}.details-table{background-color:#d3d3d3;margin-bottom:0;height:32px;align-content:center}.closing-balance-row{display:flex;border:1px solid #ccc;border-top:none;font-size:10px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-weight:700;height:28px;align-items:center}.closing-balance-row .label{flex:4.9;padding:6px;text-align:left;border-right:1px solid #ccc}.closing-balance-row .settlement{flex:2;padding:6px;text-align:right;border-right:1px solid #ccc}.closing-balance-row .value{flex:2;padding:6px;text-align:right}\n"], dependencies: [{ kind: "component", type: i2.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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i5.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i6.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked", "formValid"] }] });
771
+ StatementOfAccountsReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StatementOfAccountsReportComponent, selector: "lib-statement-of-accounts-report", ngImport: i0, template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\"\r\n (formValid)=\"handleFormValid($event)\"\r\n >\r\n</lib-search-filter>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<span *ngIf=\"loadingState === ComponentLoadingState.Error\">{{ errorMessage }}</span>\r\n<div *ngIf=\"showTables && isFormValid\">\r\n<lib-metadata \r\n [reportName]=\"ReportName\" \r\n [showmetaDataOne]=\"true\" \r\n [showmetaDataTwo]=\"true\" \r\n [metaDataOne]=\"metaDataOne\"\r\n [metaDataTwo]=\"metaDataTwo\" \r\n (exportEvent)=\"handleExport($event)\" \r\n (searchEvent)=\"filter($event)\">\r\n </lib-metadata>\r\n\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"openingBalAndFunding\"\r\n [columnDefs]=\"columnDefs\"\r\n [pinnedBottomRowData]=\"[]\"\r\n [headerHeight]=\"32\" \r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n (gridReady)=\"onOpeningGridReady($event)\"\r\n style=\"width: 80%; height: 91px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayIn' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Send Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"sendDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"sendPinnedBottomRow\"\r\n (gridReady)=\"onSendGridReady($event)\" \r\n style=\"width: 80%; height: 204px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayOut' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Receive Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"receiveDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"receivePinnedBottomRow\"\r\n (gridReady)=\"onReceiveGridReady($event)\" \r\n style=\"width: 80%; height: 204px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n\r\n<!-- Closing balance row -->\r\n<div class=\"closing-balance-row\">\r\n <div class=\"label\" title=\"Closing Balance\">\r\n Closing Balance\r\n </div>\r\n\r\n <div class=\"settlement\" \r\n [title]=\"closingBalanceSettlmentFormatted\">\r\n {{ closingBalanceSettlmentFormatted }}\r\n </div>\r\n\r\n <div class=\"value\" [title]=\"closingBalanceInUsdFormatted\">\r\n {{ closingBalanceInUsdFormatted }}\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- settlement currency words row -->\r\n<div class=\"closing-balance-row closing-balance-words\"\r\n *ngIf=\"closingBalanceSettlmentInWords\">\r\n <div class=\"label\"\r\n [title]=\"closingBalanceSettlmentCurrency + ' - ' + closingBalanceSettlmentInWords\">\r\n {{ closingBalanceSettlmentCurrency }} - {{ closingBalanceSettlmentInWords }}\r\n </div>\r\n</div>\r\n\r\n<!-- existing USD words row (keep as-is) -->\r\n<div class=\"closing-balance-row closing-balance-words\">\r\n <div class=\"label\" [title]=\"closingBalanceCurrency + ' - ' + closingBalanceUSDInWords\">\r\n {{ closingBalanceCurrency }} - {{ closingBalanceUSDInWords }}\r\n </div>\r\n</div>\r\n", 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}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}::ng-deep .ag-theme-alpine .pinned-total-cell{font-weight:700!important}.details-table{background-color:#d3d3d3;margin:0 auto;height:32px;align-content:center;width:80%;text-align:left}.transaction-grid{display:block;margin:0 auto;width:80%}.closing-balance-row{display:flex;border:1px solid #ccc;border-top:none;font-size:10px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-weight:700;height:28px;align-items:center;width:80%;margin:0 auto}.closing-balance-row .label{flex:4.9;padding:6px;text-align:left;border-right:1px solid #ccc}.closing-balance-row .settlement{flex:2;padding:6px;text-align:right;border-right:1px solid #ccc}.closing-balance-row .value{flex:2;padding:6px;text-align:right}\n"], dependencies: [{ kind: "component", type: i2.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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i5.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i6.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName", "initialFilters"], outputs: ["searchClicked", "formValid"] }] });
772
772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatementOfAccountsReportComponent, decorators: [{
773
773
  type: Component,
774
- args: [{ selector: 'lib-statement-of-accounts-report', template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\"\r\n (formValid)=\"handleFormValid($event)\"\r\n >\r\n</lib-search-filter>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<span *ngIf=\"loadingState === ComponentLoadingState.Error\">{{ errorMessage }}</span>\r\n<div *ngIf=\"showTables && isFormValid\">\r\n<lib-metadata \r\n [reportName]=\"ReportName\" \r\n [showmetaDataOne]=\"true\" \r\n [showmetaDataTwo]=\"true\" \r\n [metaDataOne]=\"metaDataOne\"\r\n [metaDataTwo]=\"metaDataTwo\" \r\n (exportEvent)=\"handleExport($event)\" \r\n (searchEvent)=\"filter($event)\">\r\n </lib-metadata>\r\n\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"openingBalAndFunding\"\r\n [columnDefs]=\"columnDefs\"\r\n [pinnedBottomRowData]=\"[]\"\r\n [headerHeight]=\"32\" \r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n (gridReady)=\"onOpeningGridReady($event)\"\r\n style=\"width: 100%; height: 91px;\">\r\n</ag-grid-angular>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayIn' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Send Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"sendDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"sendPinnedBottomRow\"\r\n (gridReady)=\"onSendGridReady($event)\" \r\n style=\"width: 100%; height: 204px;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayOut' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Receive Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"receiveDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"receivePinnedBottomRow\"\r\n (gridReady)=\"onReceiveGridReady($event)\" \r\n style=\"width: 100%; height: 204px;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n\r\n<!-- Closing balance row -->\r\n<div class=\"closing-balance-row\">\r\n <div class=\"label\" title=\"Closing Balance\">\r\n Closing Balance\r\n </div>\r\n\r\n <div class=\"settlement\" \r\n [title]=\"closingBalanceSettlmentFormatted\">\r\n {{ closingBalanceSettlmentFormatted }}\r\n </div>\r\n\r\n <div class=\"value\" [title]=\"closingBalanceInUsdFormatted\">\r\n {{ closingBalanceInUsdFormatted }}\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- settlement currency words row -->\r\n<div class=\"closing-balance-row closing-balance-words\"\r\n *ngIf=\"closingBalanceSettlmentInWords\">\r\n <div class=\"label\"\r\n [title]=\"closingBalanceSettlmentCurrency + ' - ' + closingBalanceSettlmentInWords\">\r\n {{ closingBalanceSettlmentCurrency }} - {{ closingBalanceSettlmentInWords }}\r\n </div>\r\n</div>\r\n\r\n<!-- existing USD words row (keep as-is) -->\r\n<div class=\"closing-balance-row closing-balance-words\">\r\n <div class=\"label\" [title]=\"closingBalanceCurrency + ' - ' + closingBalanceUSDInWords\">\r\n {{ closingBalanceCurrency }} - {{ closingBalanceUSDInWords }}\r\n </div>\r\n</div>\r\n", 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}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}::ng-deep .ag-theme-alpine .pinned-total-cell{font-weight:700!important}.details-table{background-color:#d3d3d3;margin-bottom:0;height:32px;align-content:center}.closing-balance-row{display:flex;border:1px solid #ccc;border-top:none;font-size:10px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-weight:700;height:28px;align-items:center}.closing-balance-row .label{flex:4.9;padding:6px;text-align:left;border-right:1px solid #ccc}.closing-balance-row .settlement{flex:2;padding:6px;text-align:right;border-right:1px solid #ccc}.closing-balance-row .value{flex:2;padding:6px;text-align:right}\n"] }]
774
+ args: [{ selector: 'lib-statement-of-accounts-report', template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\"\r\n (formValid)=\"handleFormValid($event)\"\r\n >\r\n</lib-search-filter>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<span *ngIf=\"loadingState === ComponentLoadingState.Error\">{{ errorMessage }}</span>\r\n<div *ngIf=\"showTables && isFormValid\">\r\n<lib-metadata \r\n [reportName]=\"ReportName\" \r\n [showmetaDataOne]=\"true\" \r\n [showmetaDataTwo]=\"true\" \r\n [metaDataOne]=\"metaDataOne\"\r\n [metaDataTwo]=\"metaDataTwo\" \r\n (exportEvent)=\"handleExport($event)\" \r\n (searchEvent)=\"filter($event)\">\r\n </lib-metadata>\r\n\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"openingBalAndFunding\"\r\n [columnDefs]=\"columnDefs\"\r\n [pinnedBottomRowData]=\"[]\"\r\n [headerHeight]=\"32\" \r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n (gridReady)=\"onOpeningGridReady($event)\"\r\n style=\"width: 80%; height: 91px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayIn' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Send Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"sendDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"sendPinnedBottomRow\"\r\n (gridReady)=\"onSendGridReady($event)\" \r\n style=\"width: 80%; height: 204px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n<div *ngIf=\"(selectedClientType === 'PayOut' || selectedClientType === 'Both')\">\r\n<h3 class=\"details-table\"><span style=\"margin-left: 3px;\">Receive Details</span></h3>\r\n<ag-grid-angular\r\n class=\"ag-theme-alpine transaction-grid\"\r\n [rowData]=\"receiveDetails\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowHeight]=\"28\"\r\n [headerHeight]=\"32\" \r\n [pinnedBottomRowData]=\"receivePinnedBottomRow\"\r\n (gridReady)=\"onReceiveGridReady($event)\" \r\n style=\"width: 80%; height: 204px; margin: 0 auto; display: block;\">\r\n</ag-grid-angular>\r\n</div>\r\n\r\n\r\n<!-- Closing balance row -->\r\n<div class=\"closing-balance-row\">\r\n <div class=\"label\" title=\"Closing Balance\">\r\n Closing Balance\r\n </div>\r\n\r\n <div class=\"settlement\" \r\n [title]=\"closingBalanceSettlmentFormatted\">\r\n {{ closingBalanceSettlmentFormatted }}\r\n </div>\r\n\r\n <div class=\"value\" [title]=\"closingBalanceInUsdFormatted\">\r\n {{ closingBalanceInUsdFormatted }}\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- settlement currency words row -->\r\n<div class=\"closing-balance-row closing-balance-words\"\r\n *ngIf=\"closingBalanceSettlmentInWords\">\r\n <div class=\"label\"\r\n [title]=\"closingBalanceSettlmentCurrency + ' - ' + closingBalanceSettlmentInWords\">\r\n {{ closingBalanceSettlmentCurrency }} - {{ closingBalanceSettlmentInWords }}\r\n </div>\r\n</div>\r\n\r\n<!-- existing USD words row (keep as-is) -->\r\n<div class=\"closing-balance-row closing-balance-words\">\r\n <div class=\"label\" [title]=\"closingBalanceCurrency + ' - ' + closingBalanceUSDInWords\">\r\n {{ closingBalanceCurrency }} - {{ closingBalanceUSDInWords }}\r\n </div>\r\n</div>\r\n", 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}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}::ng-deep .ag-theme-alpine .pinned-total-cell{font-weight:700!important}.details-table{background-color:#d3d3d3;margin:0 auto;height:32px;align-content:center;width:80%;text-align:left}.transaction-grid{display:block;margin:0 auto;width:80%}.closing-balance-row{display:flex;border:1px solid #ccc;border-top:none;font-size:10px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-weight:700;height:28px;align-items:center;width:80%;margin:0 auto}.closing-balance-row .label{flex:4.9;padding:6px;text-align:left;border-right:1px solid #ccc}.closing-balance-row .settlement{flex:2;padding:6px;text-align:right;border-right:1px solid #ccc}.closing-balance-row .value{flex:2;padding:6px;text-align:right}\n"] }]
775
775
  }], ctorParameters: function () { return [{ type: i1.ReportService }]; } });
776
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC9zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0L3N0YXRlbWVudC1vZi1hY2NvdW50cy1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7Ozs7OztBQVF4QyxNQUFNLE9BQU8sa0NBQWtDO0lBeUM3QyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXZDaEQsZUFBVSxHQUFHLHVCQUF1QixDQUFDO1FBQ3JDLDBCQUFxQixHQUFHLHNCQUFzQixDQUFDO1FBQy9DLGlCQUFZLEdBQTJCLHNCQUFzQixDQUFDLFFBQVEsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLEdBQUcsR0FBdUMsRUFBRSxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtZQUM3RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtZQUM5RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDOzsrSEFsM0JVLGtDQUFrQzttSEFBbEMsa0NBQWtDLHdFQ25CL0MsMDBHQStGQTsyRkQ1RWEsa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRBcGkgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlcyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQtbG9hZGluZy1zdGF0ZXMnO1xyXG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU3RhdGVtZW50T2ZBY2NvdW50SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9zdGF0ZW1lbnQtb2YtYWNjb3VudC1yZXBvcnQvc3RhdGVtZW50LW9mLWFjY291bnRzLm1vZGVsJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdGVtZW50T2ZBY2NvdW50c1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIFJlcG9ydE5hbWUgPSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBvcGVuaW5nQmFsQW5kRnVuZGluZzogU3RhdGVtZW50T2ZBY2NvdW50SXRlbVtdID0gW107XHJcbiAgc2VuZERldGFpbHM6IFN0YXRlbWVudE9mQWNjb3VudEl0ZW1bXSA9IFtdO1xyXG4gIHJlY2VpdmVEZXRhaWxzOiBTdGF0ZW1lbnRPZkFjY291bnRJdGVtW10gPSBbXTtcclxuICBub0RhdGFGcm9tQXBpOiBib29sZWFuO1xyXG4gIG1ldGFEYXRhT25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIG1ldGFEYXRhVHdvOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHVzZXI6IGFueTtcclxuICBjdXJyZW50RGF0ZVRpbWU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIHNlbmRQaW5uZWRCb3R0b21Sb3c6IGFueVtdID0gW107XHJcbiAgcmVjZWl2ZVBpbm5lZEJvdHRvbVJvdzogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHNlbmRHcmlkQXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIHJlY2VpdmVHcmlkQXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIG9wZW5pbmdHcmlkQXBpITogR3JpZEFwaTtcclxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XHJcbiAgY2xvc2luZ0JhbGFuY2U6IG51bWJlciA9IDA7XHJcblxyXG4gIGNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgPSAnVVNEJztcclxuICBjbG9zaW5nQmFsYW5jZVVTREluV29yZHM6IHN0cmluZyA9ICcnO1xyXG5cclxuICBzZWxlY3RlZENsaWVudFR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dUYWJsZXMgPSBmYWxzZTtcclxuICBwcml2YXRlIGxvZ29CYXNlNjQ/OiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZztcclxuXHJcbiAgY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudDogbnVtYmVyID0gMDtcclxuICBjbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5OiBzdHJpbmcgPSAnJztcclxuICBjbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHM6IHN0cmluZyA9ICcnO1xyXG4gIGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Rm9ybWF0dGVkOiBzdHJpbmcgPSAnMC4wMDAnO1xyXG4gIGNsb3NpbmdCYWxhbmNlSW5Vc2RGb3JtYXR0ZWQ6IHN0cmluZyA9ICcwLjAwMCc7XHJcbiAgcmVwb3J0VXNlcmFuZFRpbWU6IHN0cmluZztcclxuICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gIGlzRm9ybVZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVwb3J0U2VydmljZTogUmVwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5sb2dvQmFzZTY0ID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnYXNzZXRzL3JlcG9ydHMtbGliL2Fzc2V0cy9pbWFnZXMvWE1Mb2dvLnBuZycpO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uRGVmcyA9IFtcclxuICAgIC8vIHsgaGVhZGVyTmFtZTogJ0lEJywgZmllbGQ6ICdpZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Rlc2NyaXB0aW9uJywgZmllbGQ6ICdkZXNjcmlwdGlvbicsIGZsZXg6IDQsIHRvb2x0aXBGaWVsZDogJ2Rlc2NyaXB0aW9uJywgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxtZW50IENjeScsIGZpZWxkOiAnc2V0dGxtZW50Q2N5JywgZmxleDogMSwgdG9vbHRpcEZpZWxkOiAnc2V0dGxtZW50Q2N5JywgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50IEluIFNldHRsbWVudCBDY3knLCBmaWVsZDogJ2Ftb3VudEluU2V0dGxtZW50Q2N5JywgZmxleDogMi4xLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jdXJyZW5jeUZvcm1hdHRlciwgdG9vbHRpcFZhbHVlR2V0dGVyOiAocGFyYW1zOiBhbnkpID0+IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIocGFyYW1zKSwgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50IEluIFVTRCcsIGZpZWxkOiAnYW1vdW50SW5VU0QnLCBmbGV4OiAyLjEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLCB0b29sdGlwVmFsdWVHZXR0ZXI6IChwYXJhbXM6IGFueSkgPT4gdGhpcy5jdXJyZW5jeUZvcm1hdHRlcihwYXJhbXMpLCBjZWxsQ2xhc3NSdWxlczogeyAncGlubmVkLXRvdGFsLWNlbGwnOiBwYXJhbXMgPT4gcGFyYW1zLm5vZGUucm93UGlubmVkID09PSAnYm90dG9tJyB9IH1cclxuICBdO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBtaW53aWR0aDogNDAsXHJcbiAgICB3cmFwSGVhZGVyVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWFkZXJIZWlnaHQ6IHRydWUsXHJcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogZmFsc2UsXHJcbiAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWlnaHQ6IHRydWVcclxuICB9O1xyXG5cclxuICBjdXJyZW5jeUZvcm1hdHRlcihwYXJhbXM6IGFueSkge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSByZXR1cm4gJzAuMDAwJztcclxuICAgIGNvbnN0IG51bSA9IE51bWJlcihwYXJhbXMudmFsdWUpO1xyXG4gICAgcmV0dXJuIG51bS50b0ZpeGVkKDMpOyAvLyByb3VuZHMgdG8gMyBkZWNpbWFsc1xyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIGhhbmRsZVNlYXJjaChjcml0ZXJpYTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhID0gY3JpdGVyaWEuc2VhcmNoQ3JpdGVyaWE7XHJcbiAgICBjb25zdCBtb2RhbCA9IGNyaXRlcmlhLm1vZGFsO1xyXG4gICAgdGhpcy5yZXBvcnRVc2VyYW5kVGltZSA9IGAke2NyaXRlcmlhLnN5c1VzZXJJRH0gQCAke2Zvcm1hdERhdGUodGhpcy5jdXJyZW50RGF0ZVRpbWUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKX1gO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVySUQ6IE51bWJlcihtb2RhbC5jbGllbnQpLFxyXG4gICAgICBmcm9tRGF0ZTogbmV3IERhdGUobW9kYWwuZnJvbURhdGUpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgIHRvRGF0ZTogbmV3IERhdGUobW9kYWwudG9EYXRlKS50b0lTT1N0cmluZygpLFxyXG4gICAgICBjbGllbnRUeXBlOiBjcml0ZXJpYS5jbGllbnRUeXBlXHJcbiAgICB9O1xyXG4gICAgdGhpcy51c2VyID0gY3JpdGVyaWEuc3lzVXNlcklEXHJcbiAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xyXG4gICAgICAnUmVwb3J0IFBlcmlvZCAnOiBjcml0ZXJpYS5yZXBvcnRQZXJpb2RcclxuICAgIH1cclxuICAgIHRoaXMubWV0YURhdGFUd28gPSB7XHJcbiAgICAgICdSZXBvcnQgVXNlciAmIFRpbWUgJzogdGhpcy5yZXBvcnRVc2VyYW5kVGltZVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc2RhdGUgPSBuZXcgRGF0ZShwYXlsb2FkPy5mcm9tRGF0ZSk7XHJcbiAgICAgIGNvbnN0IGVkYXRlID0gbmV3IERhdGUocGF5bG9hZD8udG9EYXRlKTtcclxuICAgICAgcGF5bG9hZC5mcm9tRGF0ZSA9IHNkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xyXG4gICAgICBwYXlsb2FkLnRvRGF0ZSA9IGVkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgRGF0ZVwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEgPSBjcml0ZXJpYS5zZWFyY2hDcml0ZXJpYTtcclxuICAgIGNvbnNvbGUubG9nKGNyaXRlcmlhLmNsaWVudE5hbWUpXHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICB0aGlzLnNob3dUYWJsZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID0gY3JpdGVyaWEuY2xpZW50VHlwZTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0U3RhdGVtZW50T2ZBY2NvdW50KHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGVzID0gdHJ1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuICAgICAgICAgIHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcgPSBkYXRhLm9wZW5pbmdCYWxBbmRGdW5kaW5nID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZW5kRGV0YWlscyA9IGRhdGEuc2VuZERldGFpbHMgPz8gW107XHJcbiAgICAgICAgICB0aGlzLnJlY2VpdmVEZXRhaWxzID0gZGF0YS5yZWNlaXZlRGV0YWlscyA/PyBbXTtcclxuXHJcbiAgICAgICAgICAvLyBhZGQgcGlubmVkIHRvdGFsc1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09IFwiUGF5SW5cIikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbdGhpcy5idWlsZFRvdGFsUm93KHRoaXMuc2VuZERldGFpbHMpXTtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93ID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2xpZW50VHlwZSA9PSBcIlBheU91dFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdyA9IFt0aGlzLmJ1aWxkVG90YWxSb3codGhpcy5yZWNlaXZlRGV0YWlscyldO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09PSBcIkJvdGhcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbdGhpcy5idWlsZFRvdGFsUm93KHRoaXMuc2VuZERldGFpbHMpXTtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93ID0gW3RoaXMuYnVpbGRUb3RhbFJvdyh0aGlzLnJlY2VpdmVEZXRhaWxzKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kUGlubmVkQm90dG9tUm93ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdyA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zaW5nQmFsYW5jZSgpO1xyXG5cclxuICAgICAgICAgIHRoaXMubm9EYXRhRnJvbUFwaSA9XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZERldGFpbHMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgICghdGhpcy5yZWNlaXZlRGV0YWlscyB8fCB0aGlzLnJlY2VpdmVEZXRhaWxzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgU3RhdGVtZW50IG9mIEFjY291bnRzOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdGYWlsZWQgdG8gbG9hZCBTdGF0ZW1lbnQgb2YgQWNjb3VudHMnO1xyXG4gICAgICAgICAgdGhpcy5vcGVuaW5nQmFsQW5kRnVuZGluZyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZW5kRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZWNlaXZlRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGVzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRUb3RhbFJvdyhyb3dzOiB7IGFtb3VudEluU2V0dGxtZW50Q2N5OiBudW1iZXI7IGFtb3VudEluVVNEOiBudW1iZXIgfVtdKSB7XHJcbiAgICBjb25zdCB0b3RhbFNldHRsZSA9IChyb3dzIHx8IFtdKS5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluU2V0dGxtZW50Q2N5KSB8fCAwKSwgMCk7XHJcbiAgICBjb25zdCB0b3RhbFVzZCA9IChyb3dzIHx8IFtdKS5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluVVNEKSB8fCAwKSwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IG51bGwsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwnLFxyXG4gICAgICBzZXR0bG1lbnRDY3k6ICcnLFxyXG4gICAgICBhbW91bnRJblNldHRsbWVudENjeTogTnVtYmVyKHRvdGFsU2V0dGxlLnRvRml4ZWQoMykpLFxyXG4gICAgICBhbW91bnRJblVTRDogTnVtYmVyKHRvdGFsVXNkLnRvRml4ZWQoMykpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25PcGVuaW5nR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5pbmdHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcbiAgb25TZW5kR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnNlbmRHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcbiAgb25SZWNlaXZlR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnJlY2VpdmVHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcblxyXG4gIGZpbHRlcih0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XHJcbiAgICBpZiAodGhpcy5vcGVuaW5nR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLm9wZW5pbmdHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZW5kR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLnNlbmRHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZWNlaXZlR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLnJlY2VpdmVHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUNsb3NpbmdCYWxhbmNlKCk6IHZvaWQge1xyXG4gICAgLy8gVVNEIHRvdGFscyAoZXhpc3RpbmcgbG9naWMpXHJcbiAgICBjb25zdCBvcGVuaW5nQmFsVG90YWxVc2QgPSAodGhpcy5vcGVuaW5nQmFsQW5kRnVuZGluZyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCBzZW5kVG90YWxVc2QgPSAodGhpcy5zZW5kRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByZWNlaXZlVG90YWxVc2QgPSAodGhpcy5yZWNlaXZlRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByYXdDbG9zaW5nVXNkID0gb3BlbmluZ0JhbFRvdGFsVXNkICsgc2VuZFRvdGFsVXNkICsgcmVjZWl2ZVRvdGFsVXNkO1xyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZSA9IE51bWJlcihyYXdDbG9zaW5nVXNkLnRvRml4ZWQoMykpOyAvLyBudW1lcmljIFVTRFxyXG5cclxuICAgIC8vIFNldHRsZW1lbnQgY3VycmVuY3kgdG90YWxzIChuZXcpXHJcbiAgICBjb25zdCBvcGVuaW5nU2V0dGxlID0gKHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcgfHwgW10pLnJlZHVjZShcclxuICAgICAgKHN1bSwgcjogYW55KSA9PiBzdW0gKyAoTnVtYmVyKHIuYW1vdW50SW5TZXR0bG1lbnRDY3kpIHx8IDApLCAwXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VuZFNldHRsZSA9ICh0aGlzLnNlbmREZXRhaWxzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChzdW0sIHI6IGFueSkgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluU2V0dGxtZW50Q2N5KSB8fCAwKSwgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlY2VpdmVTZXR0bGUgPSAodGhpcy5yZWNlaXZlRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblNldHRsbWVudENjeSkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByYXdDbG9zaW5nU2V0dGxlID0gb3BlbmluZ1NldHRsZSArIHNlbmRTZXR0bGUgKyByZWNlaXZlU2V0dGxlO1xyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ID0gTnVtYmVyKHJhd0Nsb3NpbmdTZXR0bGUudG9GaXhlZCgzKSk7XHJcblxyXG4gICAgLy8gcGljayBhIHNldHRsZW1lbnQgY3VycmVuY3kgdG8gZGlzcGxheSAoZmlyc3Qgbm9uLWVtcHR5KVxyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5ID0gdGhpcy5nZXRGaXJzdFNldHRsZW1lbnRDdXJyZW5jeSgpO1xyXG5cclxuICAgIC8vIGZvcm1hdHRlZCBzdHJpbmdzIChuby10aG91c2FuZC1jb21tYSwgMyBkZWNpbWFscylcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VJblVzZEZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0Tm9Db21tYSh0aGlzLmNsb3NpbmdCYWxhbmNlKTtcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdE5vQ29tbWEodGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50KTtcclxuXHJcbiAgICB0aGlzLmNsb3NpbmdCYWxhbmNlVVNESW5Xb3JkcyA9IHRoaXMubnVtYmVyVG9Xb3Jkcyh0aGlzLmNsb3NpbmdCYWxhbmNlKTtcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRJbldvcmRzID1cclxuICAgICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ICE9PSBudWxsICYmXHJcbiAgICAgICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAhaXNOYU4oTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudCkpXHJcbiAgICAgICAgPyB0aGlzLm51bWJlclRvV29yZHModGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50KVxyXG4gICAgICAgIDogJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE5vQ29tbWEodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHJldHVybiAnMC4wMDAnO1xyXG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIGNvbnN0IHRydW5jYXRlZCA9IE1hdGgudHJ1bmMobnVtICogMTAwMCkgLyAxMDAwO1xyXG4gICAgcmV0dXJuIHRydW5jYXRlZC50b0ZpeGVkKDMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0Rmlyc3RTZXR0bGVtZW50Q3VycmVuY3koKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRyeUdldCA9IChhcnI6IGFueVtdKSA9PiB7XHJcbiAgICAgIGlmICghYXJyIHx8IGFyci5sZW5ndGggPT09IDApIHJldHVybiAnJztcclxuICAgICAgZm9yIChjb25zdCByIG9mIGFycikge1xyXG4gICAgICAgIGlmIChyICYmIHIuc2V0dGxtZW50Q2N5KSByZXR1cm4gci5zZXR0bG1lbnRDY3k7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdHJ5R2V0KHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcpIHx8IHRyeUdldCh0aGlzLnNlbmREZXRhaWxzKSB8fCB0cnlHZXQodGhpcy5yZWNlaXZlRGV0YWlscykgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBudW1iZXJUb1dvcmRzKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChudW0gPT09IDApIHJldHVybiBcIlplcm8gUG9pbnQgWmVybyBaZXJvIFplcm8gT25seVwiO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG5cclxuICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzXHJcbiAgICBpZiAobnVtIDwgMCkge1xyXG4gICAgICByZXN1bHQgPSBcIk5lZ2F0aXZlIFwiO1xyXG4gICAgICBudW0gPSBNYXRoLmFicyhudW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNwbGl0IGludGVnZXIgYW5kIGRlY2ltYWwgcGFydHNcclxuICAgIGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgY29uc3QgZGVjaW1hbFBhcnQgPSBNYXRoLnJvdW5kKChudW0gLSBpbnRlZ2VyUGFydCkgKiAxMDAwKTsgLy8gdXAgdG8gMyBkZWNpbWFsIHBsYWNlc1xyXG5cclxuICAgIHJlc3VsdCArPSB0aGlzLmNvbnZlcnROdW1iZXIoaW50ZWdlclBhcnQpO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGFydCA+IDApIHtcclxuICAgICAgcmVzdWx0ICs9IFwiIFBvaW50XCI7XHJcbiAgICAgIGNvbnN0IGRlY2ltYWxTdHIgPSBkZWNpbWFsUGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDMsIFwiMFwiKTsgLy8ga2VlcCAzIGRpZ2l0c1xyXG4gICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGRlY2ltYWxTdHIpIHtcclxuICAgICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLm9uZXNbK2RpZ2l0XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQgKyBcIiBPbmx5XCI7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgYXJyYXlzXHJcbiAgcHJpdmF0ZSBvbmVzID0gW1wiWmVyb1wiLCBcIk9uZVwiLCBcIlR3b1wiLCBcIlRocmVlXCIsIFwiRm91clwiLCBcIkZpdmVcIiwgXCJTaXhcIiwgXCJTZXZlblwiLCBcIkVpZ2h0XCIsIFwiTmluZVwiXTtcclxuICBwcml2YXRlIHRlZW5zID0gW1wiVGVuXCIsIFwiRWxldmVuXCIsIFwiVHdlbHZlXCIsIFwiVGhpcnRlZW5cIiwgXCJGb3VydGVlblwiLCBcIkZpZnRlZW5cIiwgXCJTaXh0ZWVuXCIsIFwiU2V2ZW50ZWVuXCIsIFwiRWlnaHRlZW5cIiwgXCJOaW5ldGVlblwiXTtcclxuICBwcml2YXRlIHRlbnMgPSBbXCJcIiwgXCJcIiwgXCJUd2VudHlcIiwgXCJUaGlydHlcIiwgXCJGb3J0eVwiLCBcIkZpZnR5XCIsIFwiU2l4dHlcIiwgXCJTZXZlbnR5XCIsIFwiRWlnaHR5XCIsIFwiTmluZXR5XCJdO1xyXG5cclxuICAvLyBDb252ZXJ0IHdob2xlIG51bWJlcnMgKEluZGlhbi9JbnRlcm5hdGlvbmFsIHN5c3RlbSlcclxuICBwcml2YXRlIGNvbnZlcnROdW1iZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKG51bSA9PT0gMCkgcmV0dXJuIFwiXCI7XHJcbiAgICBpZiAobnVtIDwgMTApIHJldHVybiB0aGlzLm9uZXNbbnVtXTtcclxuICAgIGlmIChudW0gPCAyMCkgcmV0dXJuIHRoaXMudGVlbnNbbnVtIC0gMTBdO1xyXG4gICAgaWYgKG51bSA8IDEwMCkgcmV0dXJuIHRoaXMudGVuc1tNYXRoLmZsb29yKG51bSAvIDEwKV0gKyAobnVtICUgMTAgIT09IDAgPyBcIiBcIiArIHRoaXMub25lc1tudW0gJSAxMF0gOiBcIlwiKTtcclxuICAgIGlmIChudW0gPCAxMDAwKSByZXR1cm4gdGhpcy5jb252ZXJ0TnVtYmVyKE1hdGguZmxvb3IobnVtIC8gMTAwKSkgKyBcIiBIdW5kcmVkXCIgKyAobnVtICUgMTAwICE9PSAwID8gXCIgXCIgKyB0aGlzLmNvbnZlcnROdW1iZXIobnVtICUgMTAwKSA6IFwiXCIpO1xyXG4gICAgaWYgKG51bSA8IDEwMDAwMDApIHJldHVybiB0aGlzLmNvbnZlcnROdW1iZXIoTWF0aC5mbG9vcihudW0gLyAxMDAwKSkgKyBcIiBUaG91c2FuZFwiICsgKG51bSAlIDEwMDAgIT09IDAgPyBcIiBcIiArIHRoaXMuY29udmVydE51bWJlcihudW0gJSAxMDAwKSA6IFwiXCIpO1xyXG4gICAgaWYgKG51bSA8IDEwMDAwMDAwMDApIHJldHVybiB0aGlzLmNvbnZlcnROdW1iZXIoTWF0aC5mbG9vcihudW0gLyAxMDAwMDAwKSkgKyBcIiBNaWxsaW9uXCIgKyAobnVtICUgMTAwMDAwMCAhPT0gMCA/IFwiIFwiICsgdGhpcy5jb252ZXJ0TnVtYmVyKG51bSAlIDEwMDAwMDApIDogXCJcIik7XHJcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0TnVtYmVyKE1hdGguZmxvb3IobnVtIC8gMTAwMDAwMDAwMCkpICsgXCIgQmlsbGlvblwiICsgKG51bSAlIDEwMDAwMDAwMDAgIT09IDAgPyBcIiBcIiArIHRoaXMuY29udmVydE51bWJlcihudW0gJSAxMDAwMDAwMDAwKSA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uID0gb3B0aW9uO1xyXG4gICAgc3dpdGNoICgodGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiB8fCAnJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdwZGYnOiB0aGlzLmV4cG9ydFRvUERGKCk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdleGNlbCc6IHRoaXMuZXhwb3J0VG9FeGNlbCgpOyBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzogdGhpcy5leHBvcnRUb0NTVigpOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogY29uc29sZS53YXJuKCdVbmtub3duIGV4cG9ydCB0eXBlOicsIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9QREYoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZUdyaWRzKClcclxuICAgICAgLm1hcChzID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXREaXNwbGF5ZWREYXRhKHMuYXBpKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICAgICAgbGV0IHJvd3MgPSB0aGlzLmJ1aWxkUm93cyhkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKHMudGl0bGUgPT09ICdTZW5kIERldGFpbHMnICYmIHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByb3dzID0gcm93cy5jb25jYXQodGhpcy5idWlsZFJvd3ModGhpcy5zZW5kUGlubmVkQm90dG9tUm93KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnUmVjZWl2ZSBEZXRhaWxzJyAmJiB0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJvd3MubGVuZ3RoID8geyB0aXRsZTogcy50aXRsZSwgaGVhZGVycywgcm93cyB9IDogbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyB7IHRpdGxlOiBzdHJpbmc7IGhlYWRlcnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH1bXTtcclxuICAgIGlmICghc2VjdGlvbnMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6ICdhNCcgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgICBkb2MuYWRkSW1hZ2UodGhpcy5sb2dvQmFzZTY0LCAnUE5HJywgMTUsIDEwLCAzOCwgMTgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy50ZXh0KHRoaXMuUmVwb3J0TmFtZSwgcGFnZVdpZHRoIC8gMiwgMTgsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIGxldCB5ID0gMzQ7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YU9uZSB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChgJHtrfTogYCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCB3ID0gZG9jLmdldFRleHRXaWR0aChgJHtrfTogYCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KFN0cmluZyh2ID8/ICcnKSwgMTUgKyB3LCB5KTtcclxuICAgICAgeSArPSA2O1xyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YVR3byB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChgJHtrfTogYCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCB3ID0gZG9jLmdldFRleHRXaWR0aChgJHtrfTogYCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KFN0cmluZyh2ID8/ICcnKSwgMTUgKyB3LCB5KTtcclxuICAgICAgeSArPSA2O1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gdGhpcy5zZWFyY2hDcml0ZXJpYSB8fCBbXTtcclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0gU2VhcmNoIENyaXRlcmlhIFNlY3Rpb24gPT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgLy8gU3RhcnQganVzdCBiZWxvdyBtZXRhZGF0YVxyXG4gICAgbGV0IG1hcmdpbkxlZnQgPSAxNTtcclxuICAgIGxldCBjdXJyZW50WSA9IHkgKyA1OyAvLyBjb250aW51ZSBiZWxvdyBtZXRhZGF0YVxyXG5cclxuICAgIC8vIC0tLSBoZWFkaW5nIC0tLVxyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCgnU2VhcmNoIENyaXRlcmlhOi0nLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XHJcbiAgICBjdXJyZW50WSArPSA4O1xyXG5cclxuICAgIGNvbnN0IHJvd0hlaWdodFBlckxpbmUgPSA2O1xyXG4gICAgY29uc3QgbWluR2FwID0gMjsgLy8gZ2FwIGJldHdlZW4ga2V5IGFuZCB2YWx1ZVxyXG4gICAgY29uc3QgYmV0d2VlbkNvbHVtbnNHYXAgPSAxNTsgLy8gZ2FwIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgY29sdW1uc1xyXG4gICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgIC8vIC0tLSBoZWxwZXIgdG8gbWVhc3VyZSBwYWlyIHdpZHRoIC0tLVxyXG4gICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyAtLS0gY29tcHV0ZSBtYXggd2lkdGggb2YgbGVmdCBjb2x1bW4gLS0tXHJcbiAgICBsZXQgbWF4TGVmdFBhaXJXaWR0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gbWVhc3VyZVBhaXJXaWR0aChrZXksIHZhbHVlKTtcclxuICAgICAgICBpZiAod2lkdGggPiBtYXhMZWZ0UGFpcldpZHRoKSBtYXhMZWZ0UGFpcldpZHRoID0gd2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gY2FsY3VsYXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzdGFydHMgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgY29uc3QgcmlnaHRDb2x1bW5TdGFydCA9IGxlZnRDb2x1bW5TdGFydCArIG1heExlZnRQYWlyV2lkdGggKyBiZXR3ZWVuQ29sdW1uc0dhcDtcclxuXHJcbiAgICAvLyAtLS0gcHJpbnQgcGFpcnMgZHluYW1pY2FsbHkgLS0tXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50WSArPSByb3dIZWlnaHRQZXJMaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBZIHBvc2l0aW9uIGZvciBuZXh0IHNlY3Rpb25zXHJcbiAgICB5ID0gY3VycmVudFkgKyA0O1xyXG5cclxuICAgIGNvbnN0IEhFQUQgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuXHJcbiAgICBjb25zdCBtYXJnaW4gPSB7IGxlZnQ6IDE1LCByaWdodDogMTUgfTtcclxuICAgIGNvbnN0IGF2YWlsID0gcGFnZVdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICBjb25zdCB3ZWlnaHRzID0gWzQsIDEsIDIsIDJdO1xyXG4gICAgY29uc3Qgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcclxuICAgIGNvbnN0IHdpZHRocyA9IHdlaWdodHMubWFwKHcgPT4gKHcgLyBzdW0pICogYXZhaWwpO1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZENvbHVtblN0eWxlcyA9IHtcclxuICAgICAgMDogeyBjZWxsV2lkdGg6IHdpZHRoc1swXSB9LFxyXG4gICAgICAxOiB7IGNlbGxXaWR0aDogd2lkdGhzWzFdIH0sXHJcbiAgICAgIDI6IHsgY2VsbFdpZHRoOiB3aWR0aHNbMl0sIGhhbGlnbjogJ3JpZ2h0JyB9LFxyXG4gICAgICAzOiB7IGNlbGxXaWR0aDogd2lkdGhzWzNdLCBoYWxpZ246ICdyaWdodCcgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB0aXRsZUdhcEFib3ZlRmlyc3QgPSAwO1xyXG4gICAgY29uc3QgdGl0bGVHYXBBYm92ZURlZmF1bHQgPSA0O1xyXG4gICAgY29uc3QgdGl0bGVHYXBBYm92ZUJpZyA9IDY7XHJcbiAgICBjb25zdCB0aXRsZVRvVGFibGVHYXAgPSAyO1xyXG4gICAgY29uc3QgdG9wU3RhcnRZID0gMjA7XHJcbiAgICBjb25zdCBib3R0b21SZXNlcnZlID0gMjA7XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgocywgaWR4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzRmlyc3QgPSBpZHggPT09IDA7XHJcbiAgICAgIGNvbnN0IGlzU2VuZE9yUmVjZWl2ZSA9IHMudGl0bGUgPT09ICdTZW5kIERldGFpbHMnIHx8IHMudGl0bGUgPT09ICdSZWNlaXZlIERldGFpbHMnO1xyXG4gICAgICBjb25zdCBwcmVUaXRsZUdhcCA9IGlzRmlyc3QgPyAwIDogKGlzU2VuZE9yUmVjZWl2ZSA/IHRpdGxlR2FwQWJvdmVCaWcgOiB0aXRsZUdhcEFib3ZlRGVmYXVsdCk7XHJcblxyXG4gICAgICBpZiAoeSArIHByZVRpdGxlR2FwICsgdGl0bGVUb1RhYmxlR2FwID4gcGFnZUhlaWdodCAtIGJvdHRvbVJlc2VydmUpIHtcclxuICAgICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICAgIHkgPSB0b3BTdGFydFk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeSArPSBwcmVUaXRsZUdhcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XHJcbiAgICAgIGRvYy50ZXh0KHMudGl0bGUsIG1hcmdpbi5sZWZ0LCB5KTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0WUZvclRhYmxlID0geSArIChpc0ZpcnN0ID8gMCA6IHRpdGxlVG9UYWJsZUdhcCk7XHJcblxyXG4gICAgICBkb2MuYXV0b1RhYmxlKHtcclxuICAgICAgICBoZWFkOiBbSEVBRF0sXHJcbiAgICAgICAgYm9keTogcy5yb3dzLFxyXG4gICAgICAgIHN0YXJ0WTogc3RhcnRZRm9yVGFibGUsXHJcbiAgICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgICBtYXJnaW4sXHJcbiAgICAgICAgdGFibGVXaWR0aDogYXZhaWwsXHJcbiAgICAgICAgY29sdW1uU3R5bGVzOiBzaGFyZWRDb2x1bW5TdHlsZXMsXHJcbiAgICAgICAgaGVhZFN0eWxlczogeyBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSwgdGV4dENvbG9yOiAwLCBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDksIGhhbGlnbjogJ2NlbnRlcicgfSxcclxuICAgICAgICBib2R5U3R5bGVzOiB7IGZvbnRTaXplOiA4IH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHkgPSAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XHJcbiAgICB9KTtcclxuICAgIGlmICh5ICsgMzAgPiBwYWdlSGVpZ2h0IC0gYm90dG9tUmVzZXJ2ZSkge1xyXG4gICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICB5ID0gdG9wU3RhcnRZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNsb3NpbmdCb2R5ID0gW1xyXG4gICAgICBbXHJcbiAgICAgICAgeyBjb250ZW50OiAnQ2xvc2luZyBCYWxhbmNlJywgY29sU3BhbjogMiwgc3R5bGVzOiB7IGhhbGlnbjogJ2xlZnQnLCBmb250U3R5bGU6ICdib2xkJyB9IH0sXHJcbiAgICAgICAgeyBjb250ZW50OiBOdW1iZXIodGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50IHx8IDApLnRvRml4ZWQoMyksIHN0eWxlczogeyBoYWxpZ246ICdyaWdodCcgfSB9LFxyXG4gICAgICAgIHsgY29udGVudDogTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgfHwgMCkudG9GaXhlZCgzKSwgc3R5bGVzOiB7IGhhbGlnbjogJ3JpZ2h0JyB9IH1cclxuICAgICAgXSxcclxuICAgICAgW1xyXG4gICAgICAgIHsgY29udGVudDogYCR7dGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5IHx8ICcnfSAtICR7dGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHMgfHwgJyd9YCwgY29sU3BhbjogNCwgc3R5bGVzOiB7IGhhbGlnbjogJ2xlZnQnIH0gfVxyXG4gICAgICBdLFxyXG4gICAgICBbXHJcbiAgICAgICAgeyBjb250ZW50OiBgJHt0aGlzLmNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgfHwgJyd9IC0gJHt0aGlzLmNsb3NpbmdCYWxhbmNlVVNESW5Xb3JkcyB8fCAnJ31gLCBjb2xTcGFuOiA0LCBzdHlsZXM6IHsgaGFsaWduOiAnbGVmdCcgfSB9XHJcbiAgICAgIF1cclxuICAgIF07XHJcblxyXG4gICAgZG9jLmF1dG9UYWJsZSh7XHJcbiAgICAgIGJvZHk6IGNsb3NpbmdCb2R5LFxyXG4gICAgICBzdGFydFk6IHksXHJcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgdGFibGVXaWR0aDogYXZhaWwsXHJcbiAgICAgIGNvbHVtblN0eWxlczogc2hhcmVkQ29sdW1uU3R5bGVzLFxyXG4gICAgICBzdHlsZXM6IHsgY2VsbFBhZGRpbmc6IDIsIGZvbnRTaXplOiA5IH1cclxuICAgIH0pO1xyXG5cclxuICAgIGRvYy5zYXZlKCdTdGF0ZW1lbnRfb2ZfQWNjb3VudHMucGRmJyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLmdldFZpc2libGVHcmlkcygpXHJcbiAgICAgIC5tYXAocyA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGlzcGxheWVkRGF0YShzLmFwaSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgICAgIGxldCByb3dzID0gdGhpcy5idWlsZFJvd3MoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnU2VuZCBEZXRhaWxzJyAmJiB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocy50aXRsZSA9PT0gJ1JlY2VpdmUgRGV0YWlscycgJiYgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MgPSByb3dzLmNvbmNhdCh0aGlzLmJ1aWxkUm93cyh0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3cpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3dzLmxlbmd0aCA/IHsgdGl0bGU6IHMudGl0bGUsIGhlYWRlcnMsIHJvd3MgfSA6IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgeyB0aXRsZTogc3RyaW5nOyBoZWFkZXJzOiBzdHJpbmdbXTsgcm93czogYW55W11bXSB9W107XHJcblxyXG4gICAgaWYgKCFzZWN0aW9ucy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB3YiA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICBjb25zdCB3cyA9IHdiLmFkZFdvcmtzaGVldCgnU3RhdGVtZW50IG9mIEFjY291bnRzJyk7XHJcbiAgICBsZXQgciA9IDE7XHJcblxyXG4gICAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgICBjb25zdCBpbWdJZCA9IHdiLmFkZEltYWdlKHsgYmFzZTY0OiB0aGlzLmxvZ29CYXNlNjQsIGV4dGVuc2lvbjogJ3BuZycgfSk7XHJcbiAgICAgIHdzLmFkZEltYWdlKGltZ0lkLCB7IHRsOiB7IGNvbDogMCwgcm93OiAwIH0sIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sIGVkaXRBczogJ29uZUNlbGwnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdzLmdldFJvdyhyKS5nZXRDZWxsKDIpLnZhbHVlID0gdGhpcy5SZXBvcnROYW1lO1xyXG4gICAgd3MuZ2V0Um93KHIpLmdldENlbGwoMikuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICAgIHIgKz0gMztcclxuXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLm1ldGFEYXRhT25lIHx8IHt9KS5mb3JFYWNoKChbaywgdl0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd3MuZ2V0Um93KHIrKyk7XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGsgKyAnOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCAvLyBrZXkgYm9sZFxyXG4gICAgICAgICAgeyB0ZXh0OiB2ID8/ICcnIH0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBub3JtYWxcclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IGZhbHNlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMubWV0YURhdGFUd28gfHwge30pLmZvckVhY2goKFtrLCB2XSkgPT4ge1xyXG4gICAgICBjb25zdCByb3cgPSB3cy5nZXRSb3cocisrKTtcclxuICAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgIHsgdGV4dDogayArICc6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIC8vIGtleSBib2xkXHJcbiAgICAgICAgICB7IHRleHQ6IHYgPz8gJycgfSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIG5vcm1hbFxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogZmFsc2UsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcisrO1xyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSB0aGlzLnNlYXJjaENyaXRlcmlhIHx8IFtdO1xyXG5cclxuICAgIHdzLm1lcmdlQ2VsbHMociwgMSwgciwgNCk7IC8vIHByZXZpb3VzbHkgMS4uNlxyXG4gICAgd3MuZ2V0Q2VsbChyLCAxKS52YWx1ZSA9ICdTZWFyY2ggQ3JpdGVyaWE6LSc7XHJcbiAgICB3cy5nZXRDZWxsKHIsIDEpLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIHIgKz0gMjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG5cclxuICAgICAgLy8gTGVmdCBjb2x1bW4gKHJlZHVjZWQgbWVyZ2UpXHJcbiAgICAgIHdzLm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMSk7IC8vIHdhcyAxLi4zXHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGxlZnRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IGxlZnRbMV0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogdHJ1ZSwgdmVydGljYWw6ICdtaWRkbGUnIH07XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW4gKHN0YXJ0IGNsb3NlciB0byBsZWZ0KVxyXG4gICAgICBpZiAocmlnaHQpIHtcclxuICAgICAgICB3cy5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDIsIHJvdy5udW1iZXIsIDMpOyAvLyB3YXMgNC4uNlxyXG4gICAgICAgIHJvdy5nZXRDZWxsKDMpLnZhbHVlID0ge1xyXG4gICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiByaWdodFswXSArICcgJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiByaWdodFsxXSB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICByb3cuZ2V0Q2VsbCgzKS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHIrKztcclxuXHJcbiAgICBjb25zdCB3cml0ZVNlY3Rpb24gPSAoc2VjOiB7IHRpdGxlOiBzdHJpbmc7IGhlYWRlcnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH0pID0+IHtcclxuICAgICAgY29uc3QgdGl0bGVSb3cgPSB3cy5nZXRSb3cocisrKTtcclxuICAgICAgY29uc3QgdGl0bGVDZWxsID0gdGl0bGVSb3cuZ2V0Q2VsbCgxKTtcclxuICAgICAgdGl0bGVDZWxsLnZhbHVlID0gc2VjLnRpdGxlO1xyXG4gICAgICB0aXRsZUNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTIgfTtcclxuICAgICAgdGl0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2xlZnQnLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuXHJcbiAgICAgIGNvbnN0IGhlYWRlclJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgICBzZWMuaGVhZGVycy5mb3JFYWNoKChoLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYyA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICBjLnZhbHVlID0gaDtcclxuICAgICAgICBjLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICBjLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgIGMuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgICAgICBjLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGFTdGFydCA9IHI7XHJcblxyXG4gICAgICBzZWMucm93cy5mb3JFYWNoKHJvd0RhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgICAgIHJvd0RhdGEuZm9yRWFjaCgodiwgaSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYyA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgIGlmIChzZWMuaGVhZGVyc1tpXSA9PT0gJ0Ftb3VudCBJbiBTZXR0bG1lbnQgQ2N5JyB8fCBzZWMuaGVhZGVyc1tpXSA9PT0gJ0Ftb3VudCBJbiBVU0QnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IE51bWJlcih2LnJlcGxhY2UoL1ssIF0rL2csICcnKSkgOiBOdW1iZXIodik7XHJcbiAgICAgICAgICAgIGMudmFsdWUgPSBpc05hTihudW0pID8gKHYgPz8gJycpIDogbnVtO1xyXG4gICAgICAgICAgICBjLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JyB9O1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKG51bSkpIGMubnVtRm10ID0gJzAuMDAwJztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGMudmFsdWUgPSB2ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYy5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBjb2wgPSAxOyBjb2wgPD0gc2VjLmhlYWRlcnMubGVuZ3RoOyBjb2wrKykge1xyXG4gICAgICAgIGxldCBtYXggPSAoc2VjLmhlYWRlcnNbY29sIC0gMV0gfHwgJycpLnRvU3RyaW5nKCkubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IHJyID0gZGF0YVN0YXJ0IC0gMTsgcnIgPCByOyBycisrKSB7XHJcbiAgICAgICAgICBjb25zdCB2YWwgPSAod3MuZ2V0Um93KHJyKS5nZXRDZWxsKGNvbCkudmFsdWUgPz8gJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAodmFsKSBtYXggPSBNYXRoLm1heChtYXgsIHZhbC5sZW5ndGggKyAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd3MuZ2V0Q29sdW1uKGNvbCkud2lkdGggPSBNYXRoLm1pbihNYXRoLm1heChtYXgsIDgpLCA2MCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjLCBpZHgpID0+IHtcclxuICAgICAgd3JpdGVTZWN0aW9uKHNlYyk7XHJcbiAgICAgIGlmIChpZHggPCBzZWN0aW9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgcisrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3RhbENvbHMgPSBzZWN0aW9ucy5sZW5ndGhcclxuICAgICAgPyBNYXRoLm1heCguLi5zZWN0aW9ucy5tYXAocyA9PiBzLmhlYWRlcnMubGVuZ3RoKSlcclxuICAgICAgOiB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoO1xyXG4gICAgY29uc3QgY29scyA9IE1hdGgubWF4KHRvdGFsQ29scywgNCk7XHJcbiAgICBjb25zdCBsYWJlbENvbHNFbmQgPSAyO1xyXG4gICAgY29uc3Qgc2V0dGxlQ29sID0gMztcclxuICAgIGNvbnN0IHVzZENvbCA9IDQ7XHJcblxyXG4gICAgY29uc3Qgcm93MSA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgd3MubWVyZ2VDZWxscyhyb3cxLm51bWJlciwgMSwgcm93MS5udW1iZXIsIGxhYmVsQ29sc0VuZCk7XHJcbiAgICByb3cxLmdldENlbGwoMSkudmFsdWUgPSAnQ2xvc2luZyBCYWxhbmNlJztcclxuICAgIHJvdzEuZ2V0Q2VsbCgxKS5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICByb3cxLmdldENlbGwoMSkuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnbGVmdCcsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIGNvbnN0IHNldHRsZVZhbHVlID0gTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudCA/PyAwKTtcclxuICAgIGNvbnN0IHVzZFZhbHVlID0gTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgPz8gMCk7XHJcblxyXG4gICAgY29uc3Qgc2V0dGxlQ2VsbCA9IHJvdzEuZ2V0Q2VsbChzZXR0bGVDb2wpO1xyXG4gICAgc2V0dGxlQ2VsbC52YWx1ZSA9IGlzTmFOKHNldHRsZVZhbHVlKSA/ICcnIDogc2V0dGxlVmFsdWU7XHJcbiAgICBzZXR0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JyB9O1xyXG4gICAgaWYgKCFpc05hTihzZXR0bGVWYWx1ZSkpIHNldHRsZUNlbGwubnVtRm10ID0gJzAuMDAwJztcclxuXHJcbiAgICBjb25zdCB1c2RDZWxsID0gcm93MS5nZXRDZWxsKHVzZENvbCk7XHJcbiAgICB1c2RDZWxsLnZhbHVlID0gaXNOYU4odXNkVmFsdWUpID8gJycgOiB1c2RWYWx1ZTtcclxuICAgIHVzZENlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAncmlnaHQnIH07XHJcbiAgICBpZiAoIWlzTmFOKHVzZFZhbHVlKSkgdXNkQ2VsbC5udW1GbXQgPSAnMC4wMDAnO1xyXG5cclxuICAgIGZvciAobGV0IGMgPSAxOyBjIDw9IGNvbHM7IGMrKykge1xyXG4gICAgICByb3cxLmdldENlbGwoYykuYm9yZGVyID0ge1xyXG4gICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByb3cyID0gd3MuZ2V0Um93KHIrKyk7XHJcbiAgICB3cy5tZXJnZUNlbGxzKHJvdzIubnVtYmVyLCAxLCByb3cyLm51bWJlciwgY29scyk7XHJcbiAgICByb3cyLmdldENlbGwoMSkudmFsdWUgPSBgJHt0aGlzLmNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Q3VycmVuY3kgfHwgJyd9IC0gJHt0aGlzLmNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3JkcyB8fCAnJ31gO1xyXG4gICAgcm93Mi5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2xlZnQnLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgIHJvdzIuZ2V0Q2VsbCgxKS5mb250ID0geyBpdGFsaWM6IGZhbHNlIH07XHJcblxyXG4gICAgZm9yIChsZXQgYyA9IDE7IGMgPD0gY29sczsgYysrKSB7XHJcbiAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICBpZiAoYyA9PT0gMSkgZWRnZS5sZWZ0ID0geyBzdHlsZTogJ3RoaW4nIH07XHJcbiAgICAgIGlmIChjID09PSBjb2xzKSBlZGdlLnJpZ2h0ID0geyBzdHlsZTogJ3RoaW4nIH07XHJcbiAgICAgIHJvdzIuZ2V0Q2VsbChjKS5ib3JkZXIgPSBlZGdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJvdzMgPSB3cy5nZXRSb3cocisrKTtcclxuICAgIHdzLm1lcmdlQ2VsbHMocm93My5udW1iZXIsIDEsIHJvdzMubnVtYmVyLCBjb2xzKTtcclxuICAgIHJvdzMuZ2V0Q2VsbCgxKS52YWx1ZSA9IGAke3RoaXMuY2xvc2luZ0JhbGFuY2VDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VVU0RJbldvcmRzIHx8ICcnfWA7XHJcbiAgICByb3czLmdldENlbGwoMSkuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnbGVmdCcsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIGZvciAobGV0IGMgPSAxOyBjIDw9IGNvbHM7IGMrKykge1xyXG4gICAgICBjb25zdCBlZGdlOiBhbnkgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgaWYgKGMgPT09IDEpIGVkZ2UubGVmdCA9IHsgc3R5bGU6ICd0aGluJyB9O1xyXG4gICAgICBpZiAoYyA9PT0gY29scykgZWRnZS5yaWdodCA9IHsgc3R5bGU6ICd0aGluJyB9O1xyXG4gICAgICByb3czLmdldENlbGwoYykuYm9yZGVyID0gZWRnZTtcclxuICAgIH1cclxuXHJcbiAgICB3Yi54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWYgPT4ge1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICAgIG5ldyBCbG9iKFtidWZdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSksXHJcbiAgICAgICAgJ1N0YXRlbWVudF9vZl9BY2NvdW50cy54bHN4J1xyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0NTVigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5nZXRWaXNpYmxlR3JpZHMoKVxyXG4gICAgICAubWFwKHMgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldERpc3BsYXllZERhdGEocy5hcGkpO1xyXG4gICAgICAgIGxldCByb3dzID0gdGhpcy5idWlsZFJvd3MoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnU2VuZCBEZXRhaWxzJyAmJiB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocy50aXRsZSA9PT0gJ1JlY2VpdmUgRGV0YWlscycgJiYgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MgPSByb3dzLmNvbmNhdCh0aGlzLmJ1aWxkUm93cyh0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3cpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3dzLmxlbmd0aCA/IHsgdGl0bGU6IHMudGl0bGUsIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCByb3dzIH0gOiBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHsgdGl0bGU6IHN0cmluZzsgaGVhZGVyczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfVtdO1xyXG5cclxuICAgIGlmICghc2VjdGlvbnMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsaW5lcy5wdXNoKHRoaXMuUmVwb3J0TmFtZSk7XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YU9uZSB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiBsaW5lcy5wdXNoKGAke2t9OiAke3YgPz8gJyd9YCkpO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YVR3byB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiBsaW5lcy5wdXNoKGAke2t9OiAke3YgPz8gJyd9YCkpO1xyXG5cclxuICAgIC8vIC0tLSBTRUFSQ0ggQ1JJVEVSSUEgQkxPQ0sgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gdGhpcy5zZWFyY2hDcml0ZXJpYSB8fCBbXTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ3JpdGVyaWE/Lmxlbmd0aCkge1xyXG4gICAgICBsaW5lcy5wdXNoKCcnKTtcclxuICAgICAgbGluZXMucHVzaCgnU2VhcmNoIENyaXRlcmlhOi0nKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBtYXggbGVuZ3RoIG9mIGxlZnQgY29sdW1uIGZvciBwYWRkaW5nXHJcbiAgICAgIGNvbnN0IG1heExlZnRMZW5ndGggPSBNYXRoLm1heCguLi5zZWFyY2hDcml0ZXJpYS5tYXAoKFtrLCB2XSkgPT4gKGsgKyAnICcgKyB2KS5sZW5ndGgpKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcblxyXG4gICAgICAgIGNvbnN0IGxlZnRUZXh0ID0gbGVmdCA/IGAke2xlZnRbMF19ICR7bGVmdFsxXX1gLnBhZEVuZChtYXhMZWZ0TGVuZ3RoICsgNSwgJyAnKSA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHJpZ2h0ID8gYCR7cmlnaHRbMF19ICR7cmlnaHRbMV19YCA6ICcnO1xyXG5cclxuICAgICAgICAvLyBFYWNoIHBhaXIgc3RheXMgaW4gaXRzIG93biBjb2x1bW5cclxuICAgICAgICBsaW5lcy5wdXNoKGBcIiR7bGVmdFRleHR9JHtyaWdodFRleHR9XCJgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGluZXMucHVzaCgnJyk7IC8vIGJsYW5rIGxpbmUgYWZ0ZXIgc2VhcmNoIGNyaXRlcmlhXHJcbiAgICB9XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjLCBpZHgpID0+IHtcclxuICAgICAgbGluZXMucHVzaChzZWMudGl0bGUpO1xyXG4gICAgICBsaW5lcy5wdXNoKHNlYy5oZWFkZXJzLmpvaW4oJywnKSk7XHJcbiAgICAgIHNlYy5yb3dzLmZvckVhY2gociA9PiBsaW5lcy5wdXNoKHIubWFwKHYgPT4gYFwiJHt2ID8/ICcnfVwiYCkuam9pbignLCcpKSk7XHJcblxyXG4gICAgICBpZiAoaWR4IDwgc2VjdGlvbnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxpbmVzLnB1c2goJycpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsaW5lcy5wdXNoKFxyXG4gICAgICBgXCJDbG9zaW5nIEJhbGFuY2VcIiwsXCIke051bWJlcih0aGlzLmNsb3NpbmdCYWxhbmNlSW5TZXR0bG1lbnQgfHwgMCkudG9GaXhlZCgzKX1cIixcIiR7TnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgfHwgMCkudG9GaXhlZCgzKX1cImBcclxuICAgICk7XHJcblxyXG4gICAgbGluZXMucHVzaChgXCIke3RoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRJbldvcmRzIHx8ICcnfVwiYCk7XHJcblxyXG4gICAgbGluZXMucHVzaChgXCIke3RoaXMuY2xvc2luZ0JhbGFuY2VDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VVU0RJbldvcmRzIHx8ICcnfVwiYCk7XHJcblxyXG4gICAgY29uc3QgY3N2ID0gbGluZXMuam9pbignXFxuJyk7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICBuZXcgQmxvYihbY3N2XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCcgfSksXHJcbiAgICAgICdTdGF0ZW1lbnRfb2ZfQWNjb3VudHMuY3N2J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgaW1nLnNyYyA9IHNyYztcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgaWYgKCFjdHgpIHJldHVybiByZWplY3QoJ0NhbnZhcyBjb250ZXh0IGZhaWxlZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICByZXNvbHZlKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcclxuICAgICAgfTtcclxuICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoJ0ZhaWxlZCB0byBsb2FkIGltYWdlOiAnICsgc3JjKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaXNwbGF5ZWREYXRhKGFwaT86IEdyaWRBcGkpOiBhbnlbXSB7XHJcbiAgICBpZiAoIWFwaSkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3Qgcm93czogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvdW50ID0gYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KGkpO1xyXG4gICAgICBpZiAobm9kZSAmJiAhbm9kZS5ncm91cCAmJiAhbm9kZS5yb3dQaW5uZWQpIHJvd3MucHVzaChub2RlLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmcy5tYXAoYyA9PiBjLmhlYWRlck5hbWUgfHwgYy5maWVsZCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZm9ybWF0MyhuOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG4gPT0gbnVsbCB8fCBuID09PSAnJykgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgbnVtID0gTnVtYmVyKG4pO1xyXG4gICAgcmV0dXJuIG51bS50b0ZpeGVkKDMpO1xyXG4gIH1cclxuICBwcml2YXRlIGJ1aWxkUm93cyhkYXRhOiBhbnlbXSk6IGFueVtdW10ge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKHJvdyA9PlxyXG4gICAgICB0aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgY29uc3QgZiA9IGNvbC5maWVsZDtcclxuICAgICAgICBpZiAoZiA9PT0gJ2Ftb3VudEluU2V0dGxtZW50Q2N5JyB8fCBmID09PSAnYW1vdW50SW5VU0QnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQzKHJvd1tmXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3dbZl0gPz8gJyc7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWaXNpYmxlR3JpZHMoKTogeyB0aXRsZTogc3RyaW5nOyBhcGk/OiBHcmlkQXBpIH1bXSB7XHJcbiAgICBjb25zdCBvdXQ6IHsgdGl0bGU6IHN0cmluZzsgYXBpPzogR3JpZEFwaSB9W10gPSBbXTtcclxuICAgIG91dC5wdXNoKHsgdGl0bGU6ICcnLCBhcGk6IHRoaXMub3BlbmluZ0dyaWRBcGkgfSk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENsaWVudFR5cGUgPT09ICdQYXlJbicgfHwgdGhpcy5zZWxlY3RlZENsaWVudFR5cGUgPT09ICdCb3RoJykge1xyXG4gICAgICBvdXQucHVzaCh7IHRpdGxlOiAnU2VuZCBEZXRhaWxzJywgYXBpOiB0aGlzLnNlbmRHcmlkQXBpIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09PSAnUGF5T3V0JyB8fCB0aGlzLnNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ0JvdGgnKSB7XHJcbiAgICAgIG91dC5wdXNoKHsgdGl0bGU6ICdSZWNlaXZlIERldGFpbHMnLCBhcGk6IHRoaXMucmVjZWl2ZUdyaWRBcGkgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRm9ybVZhbGlkKGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1zZWFyY2gtZmlsdGVyIFxyXG4gIFtSZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBcclxuICAoc2VhcmNoQ2xpY2tlZCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiXHJcbiAgKGZvcm1WYWxpZCk9XCJoYW5kbGVGb3JtVmFsaWQoJGV2ZW50KVwiXHJcbiAgPlxyXG48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG48c3BhbiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG48ZGl2ICpuZ0lmPVwic2hvd1RhYmxlcyAmJiBpc0Zvcm1WYWxpZFwiPlxyXG48bGliLW1ldGFkYXRhIFxyXG4gICAgW3JlcG9ydE5hbWVdPVwiUmVwb3J0TmFtZVwiIFxyXG4gICAgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgXHJcbiAgICBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIiBcclxuICAgIFttZXRhRGF0YU9uZV09XCJtZXRhRGF0YU9uZVwiXHJcbiAgICBbbWV0YURhdGFUd29dPVwibWV0YURhdGFUd29cIiBcclxuICAgIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiIFxyXG4gICAgKHNlYXJjaEV2ZW50KT1cImZpbHRlcigkZXZlbnQpXCI+XHJcbiAgPC9saWItbWV0YWRhdGE+XHJcblxyXG48YWctZ3JpZC1hbmd1bGFyXHJcbiAgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiXHJcbiAgW3Jvd0RhdGFdPVwib3BlbmluZ0JhbEFuZEZ1bmRpbmdcIlxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gIFtwaW5uZWRCb3R0b21Sb3dEYXRhXT1cIltdXCJcclxuICBbaGVhZGVySGVpZ2h0XT1cIjMyXCIgXHJcbiAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgW3Jvd0hlaWdodF09XCIyOFwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbk9wZW5pbmdHcmlkUmVhZHkoJGV2ZW50KVwiXHJcbiAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiA5MXB4O1wiPlxyXG48L2FnLWdyaWQtYW5ndWxhcj5cclxuXHJcbjxkaXYgKm5nSWY9XCIoc2VsZWN0ZWRDbGllbnRUeXBlID09PSAnUGF5SW4nIHx8IHNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ0JvdGgnKVwiPlxyXG48aDMgY2xhc3M9XCJkZXRhaWxzLXRhYmxlXCI+PHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogM3B4O1wiPlNlbmQgRGV0YWlsczwvc3Bhbj48L2gzPlxyXG48YWctZ3JpZC1hbmd1bGFyXHJcbiAgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiXHJcbiAgW3Jvd0RhdGFdPVwic2VuZERldGFpbHNcIlxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gIFtyb3dIZWlnaHRdPVwiMjhcIlxyXG4gIFtoZWFkZXJIZWlnaHRdPVwiMzJcIiBcclxuICBbcGlubmVkQm90dG9tUm93RGF0YV09XCJzZW5kUGlubmVkQm90dG9tUm93XCJcclxuICAoZ3JpZFJlYWR5KT1cIm9uU2VuZEdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyMDRweDtcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIihzZWxlY3RlZENsaWVudFR5cGUgPT09ICdQYXlPdXQnIHx8IHNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ0JvdGgnKVwiPlxyXG48aDMgY2xhc3M9XCJkZXRhaWxzLXRhYmxlXCI+PHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogM3B4O1wiPlJlY2VpdmUgRGV0YWlsczwvc3Bhbj48L2gzPlxyXG48YWctZ3JpZC1hbmd1bGFyXHJcbiAgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiXHJcbiAgW3Jvd0RhdGFdPVwicmVjZWl2ZURldGFpbHNcIlxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gIFtyb3dIZWlnaHRdPVwiMjhcIlxyXG4gIFtoZWFkZXJIZWlnaHRdPVwiMzJcIiBcclxuICBbcGlubmVkQm90dG9tUm93RGF0YV09XCJyZWNlaXZlUGlubmVkQm90dG9tUm93XCJcclxuICAoZ3JpZFJlYWR5KT1cIm9uUmVjZWl2ZUdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyMDRweDtcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS0gQ2xvc2luZyBiYWxhbmNlIHJvdyAtLT5cclxuPGRpdiBjbGFzcz1cImNsb3NpbmctYmFsYW5jZS1yb3dcIj5cclxuICA8ZGl2IGNsYXNzPVwibGFiZWxcIiB0aXRsZT1cIkNsb3NpbmcgQmFsYW5jZVwiPlxyXG4gICAgQ2xvc2luZyBCYWxhbmNlXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzZXR0bGVtZW50XCIgXHJcbiAgICAgICBbdGl0bGVdPVwiY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRGb3JtYXR0ZWRcIj5cclxuICAgIHt7IGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Rm9ybWF0dGVkIH19XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiIFt0aXRsZV09XCJjbG9zaW5nQmFsYW5jZUluVXNkRm9ybWF0dGVkXCI+XHJcbiAgICB7eyBjbG9zaW5nQmFsYW5jZUluVXNkRm9ybWF0dGVkIH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS0gc2V0dGxlbWVudCBjdXJyZW5jeSB3b3JkcyByb3cgLS0+XHJcbjxkaXYgY2xhc3M9XCJjbG9zaW5nLWJhbGFuY2Utcm93IGNsb3NpbmctYmFsYW5jZS13b3Jkc1wiXHJcbiAgICAgKm5nSWY9XCJjbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHNcIj5cclxuICA8ZGl2IGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgW3RpdGxlXT1cImNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Q3VycmVuY3kgKyAnIC0gJyArIGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3Jkc1wiPlxyXG4gICAge3sgY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRDdXJyZW5jeSB9fSAtIHt7IGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3JkcyB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gZXhpc3RpbmcgVVNEIHdvcmRzIHJvdyAoa2VlcCBhcy1pcykgLS0+XHJcbjxkaXYgY2xhc3M9XCJjbG9zaW5nLWJhbGFuY2Utcm93IGNsb3NpbmctYmFsYW5jZS13b3Jkc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFt0aXRsZV09XCJjbG9zaW5nQmFsYW5jZUN1cnJlbmN5ICsgJyAtICcgKyBjbG9zaW5nQmFsYW5jZVVTREluV29yZHNcIj5cclxuICAgIHt7IGNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgfX0gLSB7eyBjbG9zaW5nQmFsYW5jZVVTREluV29yZHMgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
776
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC9zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0L3N0YXRlbWVudC1vZi1hY2NvdW50cy1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7Ozs7OztBQVF4QyxNQUFNLE9BQU8sa0NBQWtDO0lBeUM3QyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXZDaEQsZUFBVSxHQUFHLHVCQUF1QixDQUFDO1FBQ3JDLDBCQUFxQixHQUFHLHNCQUFzQixDQUFDO1FBQy9DLGlCQUFZLEdBQTJCLHNCQUFzQixDQUFDLFFBQVEsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLEdBQUcsR0FBdUMsRUFBRSxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtZQUM3RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtZQUM5RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDOzsrSEFsM0JVLGtDQUFrQzttSEFBbEMsa0NBQWtDLHdFQ25CL0MsdTZHQStGQTsyRkQ1RWEsa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRBcGkgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlcyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQtbG9hZGluZy1zdGF0ZXMnO1xyXG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU3RhdGVtZW50T2ZBY2NvdW50SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9zdGF0ZW1lbnQtb2YtYWNjb3VudC1yZXBvcnQvc3RhdGVtZW50LW9mLWFjY291bnRzLm1vZGVsJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdGF0ZW1lbnQtb2YtYWNjb3VudHMtcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3RhdGVtZW50LW9mLWFjY291bnRzLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdGVtZW50T2ZBY2NvdW50c1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIFJlcG9ydE5hbWUgPSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBvcGVuaW5nQmFsQW5kRnVuZGluZzogU3RhdGVtZW50T2ZBY2NvdW50SXRlbVtdID0gW107XHJcbiAgc2VuZERldGFpbHM6IFN0YXRlbWVudE9mQWNjb3VudEl0ZW1bXSA9IFtdO1xyXG4gIHJlY2VpdmVEZXRhaWxzOiBTdGF0ZW1lbnRPZkFjY291bnRJdGVtW10gPSBbXTtcclxuICBub0RhdGFGcm9tQXBpOiBib29sZWFuO1xyXG4gIG1ldGFEYXRhT25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIG1ldGFEYXRhVHdvOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHVzZXI6IGFueTtcclxuICBjdXJyZW50RGF0ZVRpbWU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIHNlbmRQaW5uZWRCb3R0b21Sb3c6IGFueVtdID0gW107XHJcbiAgcmVjZWl2ZVBpbm5lZEJvdHRvbVJvdzogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHNlbmRHcmlkQXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIHJlY2VpdmVHcmlkQXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIG9wZW5pbmdHcmlkQXBpITogR3JpZEFwaTtcclxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XHJcbiAgY2xvc2luZ0JhbGFuY2U6IG51bWJlciA9IDA7XHJcblxyXG4gIGNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgPSAnVVNEJztcclxuICBjbG9zaW5nQmFsYW5jZVVTREluV29yZHM6IHN0cmluZyA9ICcnO1xyXG5cclxuICBzZWxlY3RlZENsaWVudFR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dUYWJsZXMgPSBmYWxzZTtcclxuICBwcml2YXRlIGxvZ29CYXNlNjQ/OiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZztcclxuXHJcbiAgY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudDogbnVtYmVyID0gMDtcclxuICBjbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5OiBzdHJpbmcgPSAnJztcclxuICBjbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHM6IHN0cmluZyA9ICcnO1xyXG4gIGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Rm9ybWF0dGVkOiBzdHJpbmcgPSAnMC4wMDAnO1xyXG4gIGNsb3NpbmdCYWxhbmNlSW5Vc2RGb3JtYXR0ZWQ6IHN0cmluZyA9ICcwLjAwMCc7XHJcbiAgcmVwb3J0VXNlcmFuZFRpbWU6IHN0cmluZztcclxuICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG4gIGlzRm9ybVZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVwb3J0U2VydmljZTogUmVwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5sb2dvQmFzZTY0ID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnYXNzZXRzL3JlcG9ydHMtbGliL2Fzc2V0cy9pbWFnZXMvWE1Mb2dvLnBuZycpO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uRGVmcyA9IFtcclxuICAgIC8vIHsgaGVhZGVyTmFtZTogJ0lEJywgZmllbGQ6ICdpZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Rlc2NyaXB0aW9uJywgZmllbGQ6ICdkZXNjcmlwdGlvbicsIGZsZXg6IDQsIHRvb2x0aXBGaWVsZDogJ2Rlc2NyaXB0aW9uJywgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxtZW50IENjeScsIGZpZWxkOiAnc2V0dGxtZW50Q2N5JywgZmxleDogMSwgdG9vbHRpcEZpZWxkOiAnc2V0dGxtZW50Q2N5JywgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50IEluIFNldHRsbWVudCBDY3knLCBmaWVsZDogJ2Ftb3VudEluU2V0dGxtZW50Q2N5JywgZmxleDogMi4xLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jdXJyZW5jeUZvcm1hdHRlciwgdG9vbHRpcFZhbHVlR2V0dGVyOiAocGFyYW1zOiBhbnkpID0+IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIocGFyYW1zKSwgY2VsbENsYXNzUnVsZXM6IHsgJ3Bpbm5lZC10b3RhbC1jZWxsJzogcGFyYW1zID0+IHBhcmFtcy5ub2RlLnJvd1Bpbm5lZCA9PT0gJ2JvdHRvbScgfSB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50IEluIFVTRCcsIGZpZWxkOiAnYW1vdW50SW5VU0QnLCBmbGV4OiAyLjEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLCB0b29sdGlwVmFsdWVHZXR0ZXI6IChwYXJhbXM6IGFueSkgPT4gdGhpcy5jdXJyZW5jeUZvcm1hdHRlcihwYXJhbXMpLCBjZWxsQ2xhc3NSdWxlczogeyAncGlubmVkLXRvdGFsLWNlbGwnOiBwYXJhbXMgPT4gcGFyYW1zLm5vZGUucm93UGlubmVkID09PSAnYm90dG9tJyB9IH1cclxuICBdO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBtaW53aWR0aDogNDAsXHJcbiAgICB3cmFwSGVhZGVyVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWFkZXJIZWlnaHQ6IHRydWUsXHJcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogZmFsc2UsXHJcbiAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWlnaHQ6IHRydWVcclxuICB9O1xyXG5cclxuICBjdXJyZW5jeUZvcm1hdHRlcihwYXJhbXM6IGFueSkge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSByZXR1cm4gJzAuMDAwJztcclxuICAgIGNvbnN0IG51bSA9IE51bWJlcihwYXJhbXMudmFsdWUpO1xyXG4gICAgcmV0dXJuIG51bS50b0ZpeGVkKDMpOyAvLyByb3VuZHMgdG8gMyBkZWNpbWFsc1xyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIGhhbmRsZVNlYXJjaChjcml0ZXJpYTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhID0gY3JpdGVyaWEuc2VhcmNoQ3JpdGVyaWE7XHJcbiAgICBjb25zdCBtb2RhbCA9IGNyaXRlcmlhLm1vZGFsO1xyXG4gICAgdGhpcy5yZXBvcnRVc2VyYW5kVGltZSA9IGAke2NyaXRlcmlhLnN5c1VzZXJJRH0gQCAke2Zvcm1hdERhdGUodGhpcy5jdXJyZW50RGF0ZVRpbWUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKX1gO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVySUQ6IE51bWJlcihtb2RhbC5jbGllbnQpLFxyXG4gICAgICBmcm9tRGF0ZTogbmV3IERhdGUobW9kYWwuZnJvbURhdGUpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgIHRvRGF0ZTogbmV3IERhdGUobW9kYWwudG9EYXRlKS50b0lTT1N0cmluZygpLFxyXG4gICAgICBjbGllbnRUeXBlOiBjcml0ZXJpYS5jbGllbnRUeXBlXHJcbiAgICB9O1xyXG4gICAgdGhpcy51c2VyID0gY3JpdGVyaWEuc3lzVXNlcklEXHJcbiAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xyXG4gICAgICAnUmVwb3J0IFBlcmlvZCAnOiBjcml0ZXJpYS5yZXBvcnRQZXJpb2RcclxuICAgIH1cclxuICAgIHRoaXMubWV0YURhdGFUd28gPSB7XHJcbiAgICAgICdSZXBvcnQgVXNlciAmIFRpbWUgJzogdGhpcy5yZXBvcnRVc2VyYW5kVGltZVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc2RhdGUgPSBuZXcgRGF0ZShwYXlsb2FkPy5mcm9tRGF0ZSk7XHJcbiAgICAgIGNvbnN0IGVkYXRlID0gbmV3IERhdGUocGF5bG9hZD8udG9EYXRlKTtcclxuICAgICAgcGF5bG9hZC5mcm9tRGF0ZSA9IHNkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xyXG4gICAgICBwYXlsb2FkLnRvRGF0ZSA9IGVkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgRGF0ZVwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEgPSBjcml0ZXJpYS5zZWFyY2hDcml0ZXJpYTtcclxuICAgIGNvbnNvbGUubG9nKGNyaXRlcmlhLmNsaWVudE5hbWUpXHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICB0aGlzLnNob3dUYWJsZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID0gY3JpdGVyaWEuY2xpZW50VHlwZTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0U3RhdGVtZW50T2ZBY2NvdW50KHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGVzID0gdHJ1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuICAgICAgICAgIHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcgPSBkYXRhLm9wZW5pbmdCYWxBbmRGdW5kaW5nID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZW5kRGV0YWlscyA9IGRhdGEuc2VuZERldGFpbHMgPz8gW107XHJcbiAgICAgICAgICB0aGlzLnJlY2VpdmVEZXRhaWxzID0gZGF0YS5yZWNlaXZlRGV0YWlscyA/PyBbXTtcclxuXHJcbiAgICAgICAgICAvLyBhZGQgcGlubmVkIHRvdGFsc1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09IFwiUGF5SW5cIikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbdGhpcy5idWlsZFRvdGFsUm93KHRoaXMuc2VuZERldGFpbHMpXTtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93ID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2xpZW50VHlwZSA9PSBcIlBheU91dFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdyA9IFt0aGlzLmJ1aWxkVG90YWxSb3codGhpcy5yZWNlaXZlRGV0YWlscyldO1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09PSBcIkJvdGhcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3cgPSBbdGhpcy5idWlsZFRvdGFsUm93KHRoaXMuc2VuZERldGFpbHMpXTtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93ID0gW3RoaXMuYnVpbGRUb3RhbFJvdyh0aGlzLnJlY2VpdmVEZXRhaWxzKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kUGlubmVkQm90dG9tUm93ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdyA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zaW5nQmFsYW5jZSgpO1xyXG5cclxuICAgICAgICAgIHRoaXMubm9EYXRhRnJvbUFwaSA9XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZERldGFpbHMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgICghdGhpcy5yZWNlaXZlRGV0YWlscyB8fCB0aGlzLnJlY2VpdmVEZXRhaWxzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgU3RhdGVtZW50IG9mIEFjY291bnRzOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdGYWlsZWQgdG8gbG9hZCBTdGF0ZW1lbnQgb2YgQWNjb3VudHMnO1xyXG4gICAgICAgICAgdGhpcy5vcGVuaW5nQmFsQW5kRnVuZGluZyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZW5kRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZWNlaXZlRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5zaG93VGFibGVzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRUb3RhbFJvdyhyb3dzOiB7IGFtb3VudEluU2V0dGxtZW50Q2N5OiBudW1iZXI7IGFtb3VudEluVVNEOiBudW1iZXIgfVtdKSB7XHJcbiAgICBjb25zdCB0b3RhbFNldHRsZSA9IChyb3dzIHx8IFtdKS5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluU2V0dGxtZW50Q2N5KSB8fCAwKSwgMCk7XHJcbiAgICBjb25zdCB0b3RhbFVzZCA9IChyb3dzIHx8IFtdKS5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluVVNEKSB8fCAwKSwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IG51bGwsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwnLFxyXG4gICAgICBzZXR0bG1lbnRDY3k6ICcnLFxyXG4gICAgICBhbW91bnRJblNldHRsbWVudENjeTogTnVtYmVyKHRvdGFsU2V0dGxlLnRvRml4ZWQoMykpLFxyXG4gICAgICBhbW91bnRJblVTRDogTnVtYmVyKHRvdGFsVXNkLnRvRml4ZWQoMykpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25PcGVuaW5nR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5pbmdHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcbiAgb25TZW5kR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnNlbmRHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcbiAgb25SZWNlaXZlR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnJlY2VpdmVHcmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICB9XHJcblxyXG4gIGZpbHRlcih0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XHJcbiAgICBpZiAodGhpcy5vcGVuaW5nR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLm9wZW5pbmdHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZW5kR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLnNlbmRHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZWNlaXZlR3JpZEFwaSkge1xyXG4gICAgICB0aGlzLnJlY2VpdmVHcmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUNsb3NpbmdCYWxhbmNlKCk6IHZvaWQge1xyXG4gICAgLy8gVVNEIHRvdGFscyAoZXhpc3RpbmcgbG9naWMpXHJcbiAgICBjb25zdCBvcGVuaW5nQmFsVG90YWxVc2QgPSAodGhpcy5vcGVuaW5nQmFsQW5kRnVuZGluZyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCBzZW5kVG90YWxVc2QgPSAodGhpcy5zZW5kRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByZWNlaXZlVG90YWxVc2QgPSAodGhpcy5yZWNlaXZlRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblVTRCkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByYXdDbG9zaW5nVXNkID0gb3BlbmluZ0JhbFRvdGFsVXNkICsgc2VuZFRvdGFsVXNkICsgcmVjZWl2ZVRvdGFsVXNkO1xyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZSA9IE51bWJlcihyYXdDbG9zaW5nVXNkLnRvRml4ZWQoMykpOyAvLyBudW1lcmljIFVTRFxyXG5cclxuICAgIC8vIFNldHRsZW1lbnQgY3VycmVuY3kgdG90YWxzIChuZXcpXHJcbiAgICBjb25zdCBvcGVuaW5nU2V0dGxlID0gKHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcgfHwgW10pLnJlZHVjZShcclxuICAgICAgKHN1bSwgcjogYW55KSA9PiBzdW0gKyAoTnVtYmVyKHIuYW1vdW50SW5TZXR0bG1lbnRDY3kpIHx8IDApLCAwXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VuZFNldHRsZSA9ICh0aGlzLnNlbmREZXRhaWxzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChzdW0sIHI6IGFueSkgPT4gc3VtICsgKE51bWJlcihyLmFtb3VudEluU2V0dGxtZW50Q2N5KSB8fCAwKSwgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlY2VpdmVTZXR0bGUgPSAodGhpcy5yZWNlaXZlRGV0YWlscyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoc3VtLCByOiBhbnkpID0+IHN1bSArIChOdW1iZXIoci5hbW91bnRJblNldHRsbWVudENjeSkgfHwgMCksIDBcclxuICAgICk7XHJcbiAgICBjb25zdCByYXdDbG9zaW5nU2V0dGxlID0gb3BlbmluZ1NldHRsZSArIHNlbmRTZXR0bGUgKyByZWNlaXZlU2V0dGxlO1xyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ID0gTnVtYmVyKHJhd0Nsb3NpbmdTZXR0bGUudG9GaXhlZCgzKSk7XHJcblxyXG4gICAgLy8gcGljayBhIHNldHRsZW1lbnQgY3VycmVuY3kgdG8gZGlzcGxheSAoZmlyc3Qgbm9uLWVtcHR5KVxyXG4gICAgdGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5ID0gdGhpcy5nZXRGaXJzdFNldHRsZW1lbnRDdXJyZW5jeSgpO1xyXG5cclxuICAgIC8vIGZvcm1hdHRlZCBzdHJpbmdzIChuby10aG91c2FuZC1jb21tYSwgMyBkZWNpbWFscylcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VJblVzZEZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0Tm9Db21tYSh0aGlzLmNsb3NpbmdCYWxhbmNlKTtcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdE5vQ29tbWEodGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50KTtcclxuXHJcbiAgICB0aGlzLmNsb3NpbmdCYWxhbmNlVVNESW5Xb3JkcyA9IHRoaXMubnVtYmVyVG9Xb3Jkcyh0aGlzLmNsb3NpbmdCYWxhbmNlKTtcclxuICAgIHRoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRJbldvcmRzID1cclxuICAgICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ICE9PSBudWxsICYmXHJcbiAgICAgICAgdGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAhaXNOYU4oTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudCkpXHJcbiAgICAgICAgPyB0aGlzLm51bWJlclRvV29yZHModGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50KVxyXG4gICAgICAgIDogJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE5vQ29tbWEodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHJldHVybiAnMC4wMDAnO1xyXG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIGNvbnN0IHRydW5jYXRlZCA9IE1hdGgudHJ1bmMobnVtICogMTAwMCkgLyAxMDAwO1xyXG4gICAgcmV0dXJuIHRydW5jYXRlZC50b0ZpeGVkKDMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0Rmlyc3RTZXR0bGVtZW50Q3VycmVuY3koKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRyeUdldCA9IChhcnI6IGFueVtdKSA9PiB7XHJcbiAgICAgIGlmICghYXJyIHx8IGFyci5sZW5ndGggPT09IDApIHJldHVybiAnJztcclxuICAgICAgZm9yIChjb25zdCByIG9mIGFycikge1xyXG4gICAgICAgIGlmIChyICYmIHIuc2V0dGxtZW50Q2N5KSByZXR1cm4gci5zZXR0bG1lbnRDY3k7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdHJ5R2V0KHRoaXMub3BlbmluZ0JhbEFuZEZ1bmRpbmcpIHx8IHRyeUdldCh0aGlzLnNlbmREZXRhaWxzKSB8fCB0cnlHZXQodGhpcy5yZWNlaXZlRGV0YWlscykgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBudW1iZXJUb1dvcmRzKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChudW0gPT09IDApIHJldHVybiBcIlplcm8gUG9pbnQgWmVybyBaZXJvIFplcm8gT25seVwiO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG5cclxuICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzXHJcbiAgICBpZiAobnVtIDwgMCkge1xyXG4gICAgICByZXN1bHQgPSBcIk5lZ2F0aXZlIFwiO1xyXG4gICAgICBudW0gPSBNYXRoLmFicyhudW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNwbGl0IGludGVnZXIgYW5kIGRlY2ltYWwgcGFydHNcclxuICAgIGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgY29uc3QgZGVjaW1hbFBhcnQgPSBNYXRoLnJvdW5kKChudW0gLSBpbnRlZ2VyUGFydCkgKiAxMDAwKTsgLy8gdXAgdG8gMyBkZWNpbWFsIHBsYWNlc1xyXG5cclxuICAgIHJlc3VsdCArPSB0aGlzLmNvbnZlcnROdW1iZXIoaW50ZWdlclBhcnQpO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGFydCA+IDApIHtcclxuICAgICAgcmVzdWx0ICs9IFwiIFBvaW50XCI7XHJcbiAgICAgIGNvbnN0IGRlY2ltYWxTdHIgPSBkZWNpbWFsUGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDMsIFwiMFwiKTsgLy8ga2VlcCAzIGRpZ2l0c1xyXG4gICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGRlY2ltYWxTdHIpIHtcclxuICAgICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLm9uZXNbK2RpZ2l0XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQgKyBcIiBPbmx5XCI7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgYXJyYXlzXHJcbiAgcHJpdmF0ZSBvbmVzID0gW1wiWmVyb1wiLCBcIk9uZVwiLCBcIlR3b1wiLCBcIlRocmVlXCIsIFwiRm91clwiLCBcIkZpdmVcIiwgXCJTaXhcIiwgXCJTZXZlblwiLCBcIkVpZ2h0XCIsIFwiTmluZVwiXTtcclxuICBwcml2YXRlIHRlZW5zID0gW1wiVGVuXCIsIFwiRWxldmVuXCIsIFwiVHdlbHZlXCIsIFwiVGhpcnRlZW5cIiwgXCJGb3VydGVlblwiLCBcIkZpZnRlZW5cIiwgXCJTaXh0ZWVuXCIsIFwiU2V2ZW50ZWVuXCIsIFwiRWlnaHRlZW5cIiwgXCJOaW5ldGVlblwiXTtcclxuICBwcml2YXRlIHRlbnMgPSBbXCJcIiwgXCJcIiwgXCJUd2VudHlcIiwgXCJUaGlydHlcIiwgXCJGb3J0eVwiLCBcIkZpZnR5XCIsIFwiU2l4dHlcIiwgXCJTZXZlbnR5XCIsIFwiRWlnaHR5XCIsIFwiTmluZXR5XCJdO1xyXG5cclxuICAvLyBDb252ZXJ0IHdob2xlIG51bWJlcnMgKEluZGlhbi9JbnRlcm5hdGlvbmFsIHN5c3RlbSlcclxuICBwcml2YXRlIGNvbnZlcnROdW1iZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKG51bSA9PT0gMCkgcmV0dXJuIFwiXCI7XHJcbiAgICBpZiAobnVtIDwgMTApIHJldHVybiB0aGlzLm9uZXNbbnVtXTtcclxuICAgIGlmIChudW0gPCAyMCkgcmV0dXJuIHRoaXMudGVlbnNbbnVtIC0gMTBdO1xyXG4gICAgaWYgKG51bSA8IDEwMCkgcmV0dXJuIHRoaXMudGVuc1tNYXRoLmZsb29yKG51bSAvIDEwKV0gKyAobnVtICUgMTAgIT09IDAgPyBcIiBcIiArIHRoaXMub25lc1tudW0gJSAxMF0gOiBcIlwiKTtcclxuICAgIGlmIChudW0gPCAxMDAwKSByZXR1cm4gdGhpcy5jb252ZXJ0TnVtYmVyKE1hdGguZmxvb3IobnVtIC8gMTAwKSkgKyBcIiBIdW5kcmVkXCIgKyAobnVtICUgMTAwICE9PSAwID8gXCIgXCIgKyB0aGlzLmNvbnZlcnROdW1iZXIobnVtICUgMTAwKSA6IFwiXCIpO1xyXG4gICAgaWYgKG51bSA8IDEwMDAwMDApIHJldHVybiB0aGlzLmNvbnZlcnROdW1iZXIoTWF0aC5mbG9vcihudW0gLyAxMDAwKSkgKyBcIiBUaG91c2FuZFwiICsgKG51bSAlIDEwMDAgIT09IDAgPyBcIiBcIiArIHRoaXMuY29udmVydE51bWJlcihudW0gJSAxMDAwKSA6IFwiXCIpO1xyXG4gICAgaWYgKG51bSA8IDEwMDAwMDAwMDApIHJldHVybiB0aGlzLmNvbnZlcnROdW1iZXIoTWF0aC5mbG9vcihudW0gLyAxMDAwMDAwKSkgKyBcIiBNaWxsaW9uXCIgKyAobnVtICUgMTAwMDAwMCAhPT0gMCA/IFwiIFwiICsgdGhpcy5jb252ZXJ0TnVtYmVyKG51bSAlIDEwMDAwMDApIDogXCJcIik7XHJcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0TnVtYmVyKE1hdGguZmxvb3IobnVtIC8gMTAwMDAwMDAwMCkpICsgXCIgQmlsbGlvblwiICsgKG51bSAlIDEwMDAwMDAwMDAgIT09IDAgPyBcIiBcIiArIHRoaXMuY29udmVydE51bWJlcihudW0gJSAxMDAwMDAwMDAwKSA6IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uID0gb3B0aW9uO1xyXG4gICAgc3dpdGNoICgodGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiB8fCAnJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdwZGYnOiB0aGlzLmV4cG9ydFRvUERGKCk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdleGNlbCc6IHRoaXMuZXhwb3J0VG9FeGNlbCgpOyBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzogdGhpcy5leHBvcnRUb0NTVigpOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogY29uc29sZS53YXJuKCdVbmtub3duIGV4cG9ydCB0eXBlOicsIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9QREYoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZUdyaWRzKClcclxuICAgICAgLm1hcChzID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXREaXNwbGF5ZWREYXRhKHMuYXBpKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICAgICAgbGV0IHJvd3MgPSB0aGlzLmJ1aWxkUm93cyhkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKHMudGl0bGUgPT09ICdTZW5kIERldGFpbHMnICYmIHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByb3dzID0gcm93cy5jb25jYXQodGhpcy5idWlsZFJvd3ModGhpcy5zZW5kUGlubmVkQm90dG9tUm93KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnUmVjZWl2ZSBEZXRhaWxzJyAmJiB0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMucmVjZWl2ZVBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJvd3MubGVuZ3RoID8geyB0aXRsZTogcy50aXRsZSwgaGVhZGVycywgcm93cyB9IDogbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyB7IHRpdGxlOiBzdHJpbmc7IGhlYWRlcnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH1bXTtcclxuICAgIGlmICghc2VjdGlvbnMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6ICdhNCcgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgICBkb2MuYWRkSW1hZ2UodGhpcy5sb2dvQmFzZTY0LCAnUE5HJywgMTUsIDEwLCAzOCwgMTgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy50ZXh0KHRoaXMuUmVwb3J0TmFtZSwgcGFnZVdpZHRoIC8gMiwgMTgsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIGxldCB5ID0gMzQ7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YU9uZSB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChgJHtrfTogYCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCB3ID0gZG9jLmdldFRleHRXaWR0aChgJHtrfTogYCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KFN0cmluZyh2ID8/ICcnKSwgMTUgKyB3LCB5KTtcclxuICAgICAgeSArPSA2O1xyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YVR3byB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChgJHtrfTogYCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCB3ID0gZG9jLmdldFRleHRXaWR0aChgJHtrfTogYCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KFN0cmluZyh2ID8/ICcnKSwgMTUgKyB3LCB5KTtcclxuICAgICAgeSArPSA2O1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gdGhpcy5zZWFyY2hDcml0ZXJpYSB8fCBbXTtcclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0gU2VhcmNoIENyaXRlcmlhIFNlY3Rpb24gPT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgLy8gU3RhcnQganVzdCBiZWxvdyBtZXRhZGF0YVxyXG4gICAgbGV0IG1hcmdpbkxlZnQgPSAxNTtcclxuICAgIGxldCBjdXJyZW50WSA9IHkgKyA1OyAvLyBjb250aW51ZSBiZWxvdyBtZXRhZGF0YVxyXG5cclxuICAgIC8vIC0tLSBoZWFkaW5nIC0tLVxyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCgnU2VhcmNoIENyaXRlcmlhOi0nLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XHJcbiAgICBjdXJyZW50WSArPSA4O1xyXG5cclxuICAgIGNvbnN0IHJvd0hlaWdodFBlckxpbmUgPSA2O1xyXG4gICAgY29uc3QgbWluR2FwID0gMjsgLy8gZ2FwIGJldHdlZW4ga2V5IGFuZCB2YWx1ZVxyXG4gICAgY29uc3QgYmV0d2VlbkNvbHVtbnNHYXAgPSAxNTsgLy8gZ2FwIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgY29sdW1uc1xyXG4gICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgIC8vIC0tLSBoZWxwZXIgdG8gbWVhc3VyZSBwYWlyIHdpZHRoIC0tLVxyXG4gICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyAtLS0gY29tcHV0ZSBtYXggd2lkdGggb2YgbGVmdCBjb2x1bW4gLS0tXHJcbiAgICBsZXQgbWF4TGVmdFBhaXJXaWR0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gbWVhc3VyZVBhaXJXaWR0aChrZXksIHZhbHVlKTtcclxuICAgICAgICBpZiAod2lkdGggPiBtYXhMZWZ0UGFpcldpZHRoKSBtYXhMZWZ0UGFpcldpZHRoID0gd2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gY2FsY3VsYXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzdGFydHMgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgY29uc3QgcmlnaHRDb2x1bW5TdGFydCA9IGxlZnRDb2x1bW5TdGFydCArIG1heExlZnRQYWlyV2lkdGggKyBiZXR3ZWVuQ29sdW1uc0dhcDtcclxuXHJcbiAgICAvLyAtLS0gcHJpbnQgcGFpcnMgZHluYW1pY2FsbHkgLS0tXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50WSArPSByb3dIZWlnaHRQZXJMaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBZIHBvc2l0aW9uIGZvciBuZXh0IHNlY3Rpb25zXHJcbiAgICB5ID0gY3VycmVudFkgKyA0O1xyXG5cclxuICAgIGNvbnN0IEhFQUQgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuXHJcbiAgICBjb25zdCBtYXJnaW4gPSB7IGxlZnQ6IDE1LCByaWdodDogMTUgfTtcclxuICAgIGNvbnN0IGF2YWlsID0gcGFnZVdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICBjb25zdCB3ZWlnaHRzID0gWzQsIDEsIDIsIDJdO1xyXG4gICAgY29uc3Qgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcclxuICAgIGNvbnN0IHdpZHRocyA9IHdlaWdodHMubWFwKHcgPT4gKHcgLyBzdW0pICogYXZhaWwpO1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZENvbHVtblN0eWxlcyA9IHtcclxuICAgICAgMDogeyBjZWxsV2lkdGg6IHdpZHRoc1swXSB9LFxyXG4gICAgICAxOiB7IGNlbGxXaWR0aDogd2lkdGhzWzFdIH0sXHJcbiAgICAgIDI6IHsgY2VsbFdpZHRoOiB3aWR0aHNbMl0sIGhhbGlnbjogJ3JpZ2h0JyB9LFxyXG4gICAgICAzOiB7IGNlbGxXaWR0aDogd2lkdGhzWzNdLCBoYWxpZ246ICdyaWdodCcgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB0aXRsZUdhcEFib3ZlRmlyc3QgPSAwO1xyXG4gICAgY29uc3QgdGl0bGVHYXBBYm92ZURlZmF1bHQgPSA0O1xyXG4gICAgY29uc3QgdGl0bGVHYXBBYm92ZUJpZyA9IDY7XHJcbiAgICBjb25zdCB0aXRsZVRvVGFibGVHYXAgPSAyO1xyXG4gICAgY29uc3QgdG9wU3RhcnRZID0gMjA7XHJcbiAgICBjb25zdCBib3R0b21SZXNlcnZlID0gMjA7XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgocywgaWR4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzRmlyc3QgPSBpZHggPT09IDA7XHJcbiAgICAgIGNvbnN0IGlzU2VuZE9yUmVjZWl2ZSA9IHMudGl0bGUgPT09ICdTZW5kIERldGFpbHMnIHx8IHMudGl0bGUgPT09ICdSZWNlaXZlIERldGFpbHMnO1xyXG4gICAgICBjb25zdCBwcmVUaXRsZUdhcCA9IGlzRmlyc3QgPyAwIDogKGlzU2VuZE9yUmVjZWl2ZSA/IHRpdGxlR2FwQWJvdmVCaWcgOiB0aXRsZUdhcEFib3ZlRGVmYXVsdCk7XHJcblxyXG4gICAgICBpZiAoeSArIHByZVRpdGxlR2FwICsgdGl0bGVUb1RhYmxlR2FwID4gcGFnZUhlaWdodCAtIGJvdHRvbVJlc2VydmUpIHtcclxuICAgICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICAgIHkgPSB0b3BTdGFydFk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeSArPSBwcmVUaXRsZUdhcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMSk7XHJcbiAgICAgIGRvYy50ZXh0KHMudGl0bGUsIG1hcmdpbi5sZWZ0LCB5KTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0WUZvclRhYmxlID0geSArIChpc0ZpcnN0ID8gMCA6IHRpdGxlVG9UYWJsZUdhcCk7XHJcblxyXG4gICAgICBkb2MuYXV0b1RhYmxlKHtcclxuICAgICAgICBoZWFkOiBbSEVBRF0sXHJcbiAgICAgICAgYm9keTogcy5yb3dzLFxyXG4gICAgICAgIHN0YXJ0WTogc3RhcnRZRm9yVGFibGUsXHJcbiAgICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgICBtYXJnaW4sXHJcbiAgICAgICAgdGFibGVXaWR0aDogYXZhaWwsXHJcbiAgICAgICAgY29sdW1uU3R5bGVzOiBzaGFyZWRDb2x1bW5TdHlsZXMsXHJcbiAgICAgICAgaGVhZFN0eWxlczogeyBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSwgdGV4dENvbG9yOiAwLCBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDksIGhhbGlnbjogJ2NlbnRlcicgfSxcclxuICAgICAgICBib2R5U3R5bGVzOiB7IGZvbnRTaXplOiA4IH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHkgPSAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XHJcbiAgICB9KTtcclxuICAgIGlmICh5ICsgMzAgPiBwYWdlSGVpZ2h0IC0gYm90dG9tUmVzZXJ2ZSkge1xyXG4gICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICB5ID0gdG9wU3RhcnRZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNsb3NpbmdCb2R5ID0gW1xyXG4gICAgICBbXHJcbiAgICAgICAgeyBjb250ZW50OiAnQ2xvc2luZyBCYWxhbmNlJywgY29sU3BhbjogMiwgc3R5bGVzOiB7IGhhbGlnbjogJ2xlZnQnLCBmb250U3R5bGU6ICdib2xkJyB9IH0sXHJcbiAgICAgICAgeyBjb250ZW50OiBOdW1iZXIodGhpcy5jbG9zaW5nQmFsYW5jZUluU2V0dGxtZW50IHx8IDApLnRvRml4ZWQoMyksIHN0eWxlczogeyBoYWxpZ246ICdyaWdodCcgfSB9LFxyXG4gICAgICAgIHsgY29udGVudDogTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgfHwgMCkudG9GaXhlZCgzKSwgc3R5bGVzOiB7IGhhbGlnbjogJ3JpZ2h0JyB9IH1cclxuICAgICAgXSxcclxuICAgICAgW1xyXG4gICAgICAgIHsgY29udGVudDogYCR7dGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEN1cnJlbmN5IHx8ICcnfSAtICR7dGhpcy5jbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHMgfHwgJyd9YCwgY29sU3BhbjogNCwgc3R5bGVzOiB7IGhhbGlnbjogJ2xlZnQnIH0gfVxyXG4gICAgICBdLFxyXG4gICAgICBbXHJcbiAgICAgICAgeyBjb250ZW50OiBgJHt0aGlzLmNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgfHwgJyd9IC0gJHt0aGlzLmNsb3NpbmdCYWxhbmNlVVNESW5Xb3JkcyB8fCAnJ31gLCBjb2xTcGFuOiA0LCBzdHlsZXM6IHsgaGFsaWduOiAnbGVmdCcgfSB9XHJcbiAgICAgIF1cclxuICAgIF07XHJcblxyXG4gICAgZG9jLmF1dG9UYWJsZSh7XHJcbiAgICAgIGJvZHk6IGNsb3NpbmdCb2R5LFxyXG4gICAgICBzdGFydFk6IHksXHJcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgdGFibGVXaWR0aDogYXZhaWwsXHJcbiAgICAgIGNvbHVtblN0eWxlczogc2hhcmVkQ29sdW1uU3R5bGVzLFxyXG4gICAgICBzdHlsZXM6IHsgY2VsbFBhZGRpbmc6IDIsIGZvbnRTaXplOiA5IH1cclxuICAgIH0pO1xyXG5cclxuICAgIGRvYy5zYXZlKCdTdGF0ZW1lbnRfb2ZfQWNjb3VudHMucGRmJyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLmdldFZpc2libGVHcmlkcygpXHJcbiAgICAgIC5tYXAocyA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGlzcGxheWVkRGF0YShzLmFwaSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgICAgIGxldCByb3dzID0gdGhpcy5idWlsZFJvd3MoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnU2VuZCBEZXRhaWxzJyAmJiB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocy50aXRsZSA9PT0gJ1JlY2VpdmUgRGV0YWlscycgJiYgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MgPSByb3dzLmNvbmNhdCh0aGlzLmJ1aWxkUm93cyh0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3cpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3dzLmxlbmd0aCA/IHsgdGl0bGU6IHMudGl0bGUsIGhlYWRlcnMsIHJvd3MgfSA6IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgeyB0aXRsZTogc3RyaW5nOyBoZWFkZXJzOiBzdHJpbmdbXTsgcm93czogYW55W11bXSB9W107XHJcblxyXG4gICAgaWYgKCFzZWN0aW9ucy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB3YiA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICBjb25zdCB3cyA9IHdiLmFkZFdvcmtzaGVldCgnU3RhdGVtZW50IG9mIEFjY291bnRzJyk7XHJcbiAgICBsZXQgciA9IDE7XHJcblxyXG4gICAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgICBjb25zdCBpbWdJZCA9IHdiLmFkZEltYWdlKHsgYmFzZTY0OiB0aGlzLmxvZ29CYXNlNjQsIGV4dGVuc2lvbjogJ3BuZycgfSk7XHJcbiAgICAgIHdzLmFkZEltYWdlKGltZ0lkLCB7IHRsOiB7IGNvbDogMCwgcm93OiAwIH0sIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sIGVkaXRBczogJ29uZUNlbGwnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdzLmdldFJvdyhyKS5nZXRDZWxsKDIpLnZhbHVlID0gdGhpcy5SZXBvcnROYW1lO1xyXG4gICAgd3MuZ2V0Um93KHIpLmdldENlbGwoMikuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICAgIHIgKz0gMztcclxuXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLm1ldGFEYXRhT25lIHx8IHt9KS5mb3JFYWNoKChbaywgdl0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd3MuZ2V0Um93KHIrKyk7XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGsgKyAnOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCAvLyBrZXkgYm9sZFxyXG4gICAgICAgICAgeyB0ZXh0OiB2ID8/ICcnIH0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBub3JtYWxcclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgd3JhcFRleHQ6IGZhbHNlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMubWV0YURhdGFUd28gfHwge30pLmZvckVhY2goKFtrLCB2XSkgPT4ge1xyXG4gICAgICBjb25zdCByb3cgPSB3cy5nZXRSb3cocisrKTtcclxuICAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgIHsgdGV4dDogayArICc6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIC8vIGtleSBib2xkXHJcbiAgICAgICAgICB7IHRleHQ6IHYgPz8gJycgfSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIG5vcm1hbFxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogZmFsc2UsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcisrO1xyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSB0aGlzLnNlYXJjaENyaXRlcmlhIHx8IFtdO1xyXG5cclxuICAgIHdzLm1lcmdlQ2VsbHMociwgMSwgciwgNCk7IC8vIHByZXZpb3VzbHkgMS4uNlxyXG4gICAgd3MuZ2V0Q2VsbChyLCAxKS52YWx1ZSA9ICdTZWFyY2ggQ3JpdGVyaWE6LSc7XHJcbiAgICB3cy5nZXRDZWxsKHIsIDEpLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIHIgKz0gMjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGNvbnN0IGxlZnQgPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG5cclxuICAgICAgLy8gTGVmdCBjb2x1bW4gKHJlZHVjZWQgbWVyZ2UpXHJcbiAgICAgIHdzLm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMSk7IC8vIHdhcyAxLi4zXHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGxlZnRbMF0gKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IGxlZnRbMV0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgcm93LmdldENlbGwoMSkuYWxpZ25tZW50ID0geyB3cmFwVGV4dDogdHJ1ZSwgdmVydGljYWw6ICdtaWRkbGUnIH07XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW4gKHN0YXJ0IGNsb3NlciB0byBsZWZ0KVxyXG4gICAgICBpZiAocmlnaHQpIHtcclxuICAgICAgICB3cy5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDIsIHJvdy5udW1iZXIsIDMpOyAvLyB3YXMgNC4uNlxyXG4gICAgICAgIHJvdy5nZXRDZWxsKDMpLnZhbHVlID0ge1xyXG4gICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiByaWdodFswXSArICcgJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiByaWdodFsxXSB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICByb3cuZ2V0Q2VsbCgzKS5hbGlnbm1lbnQgPSB7IHdyYXBUZXh0OiB0cnVlLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHIrKztcclxuXHJcbiAgICBjb25zdCB3cml0ZVNlY3Rpb24gPSAoc2VjOiB7IHRpdGxlOiBzdHJpbmc7IGhlYWRlcnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH0pID0+IHtcclxuICAgICAgY29uc3QgdGl0bGVSb3cgPSB3cy5nZXRSb3cocisrKTtcclxuICAgICAgY29uc3QgdGl0bGVDZWxsID0gdGl0bGVSb3cuZ2V0Q2VsbCgxKTtcclxuICAgICAgdGl0bGVDZWxsLnZhbHVlID0gc2VjLnRpdGxlO1xyXG4gICAgICB0aXRsZUNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTIgfTtcclxuICAgICAgdGl0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2xlZnQnLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuXHJcbiAgICAgIGNvbnN0IGhlYWRlclJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgICBzZWMuaGVhZGVycy5mb3JFYWNoKChoLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYyA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICBjLnZhbHVlID0gaDtcclxuICAgICAgICBjLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICBjLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgIGMuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgICAgICBjLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGFTdGFydCA9IHI7XHJcblxyXG4gICAgICBzZWMucm93cy5mb3JFYWNoKHJvd0RhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgICAgIHJvd0RhdGEuZm9yRWFjaCgodiwgaSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYyA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgIGlmIChzZWMuaGVhZGVyc1tpXSA9PT0gJ0Ftb3VudCBJbiBTZXR0bG1lbnQgQ2N5JyB8fCBzZWMuaGVhZGVyc1tpXSA9PT0gJ0Ftb3VudCBJbiBVU0QnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IE51bWJlcih2LnJlcGxhY2UoL1ssIF0rL2csICcnKSkgOiBOdW1iZXIodik7XHJcbiAgICAgICAgICAgIGMudmFsdWUgPSBpc05hTihudW0pID8gKHYgPz8gJycpIDogbnVtO1xyXG4gICAgICAgICAgICBjLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JyB9O1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKG51bSkpIGMubnVtRm10ID0gJzAuMDAwJztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGMudmFsdWUgPSB2ID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYy5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBjb2wgPSAxOyBjb2wgPD0gc2VjLmhlYWRlcnMubGVuZ3RoOyBjb2wrKykge1xyXG4gICAgICAgIGxldCBtYXggPSAoc2VjLmhlYWRlcnNbY29sIC0gMV0gfHwgJycpLnRvU3RyaW5nKCkubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IHJyID0gZGF0YVN0YXJ0IC0gMTsgcnIgPCByOyBycisrKSB7XHJcbiAgICAgICAgICBjb25zdCB2YWwgPSAod3MuZ2V0Um93KHJyKS5nZXRDZWxsKGNvbCkudmFsdWUgPz8gJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAodmFsKSBtYXggPSBNYXRoLm1heChtYXgsIHZhbC5sZW5ndGggKyAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd3MuZ2V0Q29sdW1uKGNvbCkud2lkdGggPSBNYXRoLm1pbihNYXRoLm1heChtYXgsIDgpLCA2MCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjLCBpZHgpID0+IHtcclxuICAgICAgd3JpdGVTZWN0aW9uKHNlYyk7XHJcbiAgICAgIGlmIChpZHggPCBzZWN0aW9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgcisrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3RhbENvbHMgPSBzZWN0aW9ucy5sZW5ndGhcclxuICAgICAgPyBNYXRoLm1heCguLi5zZWN0aW9ucy5tYXAocyA9PiBzLmhlYWRlcnMubGVuZ3RoKSlcclxuICAgICAgOiB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoO1xyXG4gICAgY29uc3QgY29scyA9IE1hdGgubWF4KHRvdGFsQ29scywgNCk7XHJcbiAgICBjb25zdCBsYWJlbENvbHNFbmQgPSAyO1xyXG4gICAgY29uc3Qgc2V0dGxlQ29sID0gMztcclxuICAgIGNvbnN0IHVzZENvbCA9IDQ7XHJcblxyXG4gICAgY29uc3Qgcm93MSA9IHdzLmdldFJvdyhyKyspO1xyXG4gICAgd3MubWVyZ2VDZWxscyhyb3cxLm51bWJlciwgMSwgcm93MS5udW1iZXIsIGxhYmVsQ29sc0VuZCk7XHJcbiAgICByb3cxLmdldENlbGwoMSkudmFsdWUgPSAnQ2xvc2luZyBCYWxhbmNlJztcclxuICAgIHJvdzEuZ2V0Q2VsbCgxKS5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICByb3cxLmdldENlbGwoMSkuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnbGVmdCcsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIGNvbnN0IHNldHRsZVZhbHVlID0gTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2VJblNldHRsbWVudCA/PyAwKTtcclxuICAgIGNvbnN0IHVzZFZhbHVlID0gTnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgPz8gMCk7XHJcblxyXG4gICAgY29uc3Qgc2V0dGxlQ2VsbCA9IHJvdzEuZ2V0Q2VsbChzZXR0bGVDb2wpO1xyXG4gICAgc2V0dGxlQ2VsbC52YWx1ZSA9IGlzTmFOKHNldHRsZVZhbHVlKSA/ICcnIDogc2V0dGxlVmFsdWU7XHJcbiAgICBzZXR0bGVDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JyB9O1xyXG4gICAgaWYgKCFpc05hTihzZXR0bGVWYWx1ZSkpIHNldHRsZUNlbGwubnVtRm10ID0gJzAuMDAwJztcclxuXHJcbiAgICBjb25zdCB1c2RDZWxsID0gcm93MS5nZXRDZWxsKHVzZENvbCk7XHJcbiAgICB1c2RDZWxsLnZhbHVlID0gaXNOYU4odXNkVmFsdWUpID8gJycgOiB1c2RWYWx1ZTtcclxuICAgIHVzZENlbGwuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAncmlnaHQnIH07XHJcbiAgICBpZiAoIWlzTmFOKHVzZFZhbHVlKSkgdXNkQ2VsbC5udW1GbXQgPSAnMC4wMDAnO1xyXG5cclxuICAgIGZvciAobGV0IGMgPSAxOyBjIDw9IGNvbHM7IGMrKykge1xyXG4gICAgICByb3cxLmdldENlbGwoYykuYm9yZGVyID0ge1xyXG4gICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByb3cyID0gd3MuZ2V0Um93KHIrKyk7XHJcbiAgICB3cy5tZXJnZUNlbGxzKHJvdzIubnVtYmVyLCAxLCByb3cyLm51bWJlciwgY29scyk7XHJcbiAgICByb3cyLmdldENlbGwoMSkudmFsdWUgPSBgJHt0aGlzLmNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Q3VycmVuY3kgfHwgJyd9IC0gJHt0aGlzLmNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3JkcyB8fCAnJ31gO1xyXG4gICAgcm93Mi5nZXRDZWxsKDEpLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2xlZnQnLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuICAgIHJvdzIuZ2V0Q2VsbCgxKS5mb250ID0geyBpdGFsaWM6IGZhbHNlIH07XHJcblxyXG4gICAgZm9yIChsZXQgYyA9IDE7IGMgPD0gY29sczsgYysrKSB7XHJcbiAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICBpZiAoYyA9PT0gMSkgZWRnZS5sZWZ0ID0geyBzdHlsZTogJ3RoaW4nIH07XHJcbiAgICAgIGlmIChjID09PSBjb2xzKSBlZGdlLnJpZ2h0ID0geyBzdHlsZTogJ3RoaW4nIH07XHJcbiAgICAgIHJvdzIuZ2V0Q2VsbChjKS5ib3JkZXIgPSBlZGdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJvdzMgPSB3cy5nZXRSb3cocisrKTtcclxuICAgIHdzLm1lcmdlQ2VsbHMocm93My5udW1iZXIsIDEsIHJvdzMubnVtYmVyLCBjb2xzKTtcclxuICAgIHJvdzMuZ2V0Q2VsbCgxKS52YWx1ZSA9IGAke3RoaXMuY2xvc2luZ0JhbGFuY2VDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VVU0RJbldvcmRzIHx8ICcnfWA7XHJcbiAgICByb3czLmdldENlbGwoMSkuYWxpZ25tZW50ID0geyBob3Jpem9udGFsOiAnbGVmdCcsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIGZvciAobGV0IGMgPSAxOyBjIDw9IGNvbHM7IGMrKykge1xyXG4gICAgICBjb25zdCBlZGdlOiBhbnkgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgaWYgKGMgPT09IDEpIGVkZ2UubGVmdCA9IHsgc3R5bGU6ICd0aGluJyB9O1xyXG4gICAgICBpZiAoYyA9PT0gY29scykgZWRnZS5yaWdodCA9IHsgc3R5bGU6ICd0aGluJyB9O1xyXG4gICAgICByb3czLmdldENlbGwoYykuYm9yZGVyID0gZWRnZTtcclxuICAgIH1cclxuXHJcbiAgICB3Yi54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWYgPT4ge1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICAgIG5ldyBCbG9iKFtidWZdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSksXHJcbiAgICAgICAgJ1N0YXRlbWVudF9vZl9BY2NvdW50cy54bHN4J1xyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0NTVigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5nZXRWaXNpYmxlR3JpZHMoKVxyXG4gICAgICAubWFwKHMgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldERpc3BsYXllZERhdGEocy5hcGkpO1xyXG4gICAgICAgIGxldCByb3dzID0gdGhpcy5idWlsZFJvd3MoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChzLnRpdGxlID09PSAnU2VuZCBEZXRhaWxzJyAmJiB0aGlzLnNlbmRQaW5uZWRCb3R0b21Sb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcm93cyA9IHJvd3MuY29uY2F0KHRoaXMuYnVpbGRSb3dzKHRoaXMuc2VuZFBpbm5lZEJvdHRvbVJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocy50aXRsZSA9PT0gJ1JlY2VpdmUgRGV0YWlscycgJiYgdGhpcy5yZWNlaXZlUGlubmVkQm90dG9tUm93Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHJvd3MgPSByb3dzLmNvbmNhdCh0aGlzLmJ1aWxkUm93cyh0aGlzLnJlY2VpdmVQaW5uZWRCb3R0b21Sb3cpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3dzLmxlbmd0aCA/IHsgdGl0bGU6IHMudGl0bGUsIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCByb3dzIH0gOiBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHsgdGl0bGU6IHN0cmluZzsgaGVhZGVyczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfVtdO1xyXG5cclxuICAgIGlmICghc2VjdGlvbnMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsaW5lcy5wdXNoKHRoaXMuUmVwb3J0TmFtZSk7XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YU9uZSB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiBsaW5lcy5wdXNoKGAke2t9OiAke3YgPz8gJyd9YCkpO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5tZXRhRGF0YVR3byB8fCB7fSkuZm9yRWFjaCgoW2ssIHZdKSA9PiBsaW5lcy5wdXNoKGAke2t9OiAke3YgPz8gJyd9YCkpO1xyXG5cclxuICAgIC8vIC0tLSBTRUFSQ0ggQ1JJVEVSSUEgQkxPQ0sgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gdGhpcy5zZWFyY2hDcml0ZXJpYSB8fCBbXTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ3JpdGVyaWE/Lmxlbmd0aCkge1xyXG4gICAgICBsaW5lcy5wdXNoKCcnKTtcclxuICAgICAgbGluZXMucHVzaCgnU2VhcmNoIENyaXRlcmlhOi0nKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBtYXggbGVuZ3RoIG9mIGxlZnQgY29sdW1uIGZvciBwYWRkaW5nXHJcbiAgICAgIGNvbnN0IG1heExlZnRMZW5ndGggPSBNYXRoLm1heCguLi5zZWFyY2hDcml0ZXJpYS5tYXAoKFtrLCB2XSkgPT4gKGsgKyAnICcgKyB2KS5sZW5ndGgpKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcblxyXG4gICAgICAgIGNvbnN0IGxlZnRUZXh0ID0gbGVmdCA/IGAke2xlZnRbMF19ICR7bGVmdFsxXX1gLnBhZEVuZChtYXhMZWZ0TGVuZ3RoICsgNSwgJyAnKSA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHJpZ2h0ID8gYCR7cmlnaHRbMF19ICR7cmlnaHRbMV19YCA6ICcnO1xyXG5cclxuICAgICAgICAvLyBFYWNoIHBhaXIgc3RheXMgaW4gaXRzIG93biBjb2x1bW5cclxuICAgICAgICBsaW5lcy5wdXNoKGBcIiR7bGVmdFRleHR9JHtyaWdodFRleHR9XCJgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGluZXMucHVzaCgnJyk7IC8vIGJsYW5rIGxpbmUgYWZ0ZXIgc2VhcmNoIGNyaXRlcmlhXHJcbiAgICB9XHJcblxyXG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjLCBpZHgpID0+IHtcclxuICAgICAgbGluZXMucHVzaChzZWMudGl0bGUpO1xyXG4gICAgICBsaW5lcy5wdXNoKHNlYy5oZWFkZXJzLmpvaW4oJywnKSk7XHJcbiAgICAgIHNlYy5yb3dzLmZvckVhY2gociA9PiBsaW5lcy5wdXNoKHIubWFwKHYgPT4gYFwiJHt2ID8/ICcnfVwiYCkuam9pbignLCcpKSk7XHJcblxyXG4gICAgICBpZiAoaWR4IDwgc2VjdGlvbnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxpbmVzLnB1c2goJycpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsaW5lcy5wdXNoKFxyXG4gICAgICBgXCJDbG9zaW5nIEJhbGFuY2VcIiwsXCIke051bWJlcih0aGlzLmNsb3NpbmdCYWxhbmNlSW5TZXR0bG1lbnQgfHwgMCkudG9GaXhlZCgzKX1cIixcIiR7TnVtYmVyKHRoaXMuY2xvc2luZ0JhbGFuY2UgfHwgMCkudG9GaXhlZCgzKX1cImBcclxuICAgICk7XHJcblxyXG4gICAgbGluZXMucHVzaChgXCIke3RoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRJbldvcmRzIHx8ICcnfVwiYCk7XHJcblxyXG4gICAgbGluZXMucHVzaChgXCIke3RoaXMuY2xvc2luZ0JhbGFuY2VDdXJyZW5jeSB8fCAnJ30gLSAke3RoaXMuY2xvc2luZ0JhbGFuY2VVU0RJbldvcmRzIHx8ICcnfVwiYCk7XHJcblxyXG4gICAgY29uc3QgY3N2ID0gbGluZXMuam9pbignXFxuJyk7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICBuZXcgQmxvYihbY3N2XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCcgfSksXHJcbiAgICAgICdTdGF0ZW1lbnRfb2ZfQWNjb3VudHMuY3N2J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgaW1nLnNyYyA9IHNyYztcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgaWYgKCFjdHgpIHJldHVybiByZWplY3QoJ0NhbnZhcyBjb250ZXh0IGZhaWxlZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICByZXNvbHZlKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcclxuICAgICAgfTtcclxuICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoJ0ZhaWxlZCB0byBsb2FkIGltYWdlOiAnICsgc3JjKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaXNwbGF5ZWREYXRhKGFwaT86IEdyaWRBcGkpOiBhbnlbXSB7XHJcbiAgICBpZiAoIWFwaSkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3Qgcm93czogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvdW50ID0gYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KGkpO1xyXG4gICAgICBpZiAobm9kZSAmJiAhbm9kZS5ncm91cCAmJiAhbm9kZS5yb3dQaW5uZWQpIHJvd3MucHVzaChub2RlLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmcy5tYXAoYyA9PiBjLmhlYWRlck5hbWUgfHwgYy5maWVsZCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZm9ybWF0MyhuOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG4gPT0gbnVsbCB8fCBuID09PSAnJykgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgbnVtID0gTnVtYmVyKG4pO1xyXG4gICAgcmV0dXJuIG51bS50b0ZpeGVkKDMpO1xyXG4gIH1cclxuICBwcml2YXRlIGJ1aWxkUm93cyhkYXRhOiBhbnlbXSk6IGFueVtdW10ge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKHJvdyA9PlxyXG4gICAgICB0aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgY29uc3QgZiA9IGNvbC5maWVsZDtcclxuICAgICAgICBpZiAoZiA9PT0gJ2Ftb3VudEluU2V0dGxtZW50Q2N5JyB8fCBmID09PSAnYW1vdW50SW5VU0QnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQzKHJvd1tmXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3dbZl0gPz8gJyc7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWaXNpYmxlR3JpZHMoKTogeyB0aXRsZTogc3RyaW5nOyBhcGk/OiBHcmlkQXBpIH1bXSB7XHJcbiAgICBjb25zdCBvdXQ6IHsgdGl0bGU6IHN0cmluZzsgYXBpPzogR3JpZEFwaSB9W10gPSBbXTtcclxuICAgIG91dC5wdXNoKHsgdGl0bGU6ICcnLCBhcGk6IHRoaXMub3BlbmluZ0dyaWRBcGkgfSk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENsaWVudFR5cGUgPT09ICdQYXlJbicgfHwgdGhpcy5zZWxlY3RlZENsaWVudFR5cGUgPT09ICdCb3RoJykge1xyXG4gICAgICBvdXQucHVzaCh7IHRpdGxlOiAnU2VuZCBEZXRhaWxzJywgYXBpOiB0aGlzLnNlbmRHcmlkQXBpIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGllbnRUeXBlID09PSAnUGF5T3V0JyB8fCB0aGlzLnNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ0JvdGgnKSB7XHJcbiAgICAgIG91dC5wdXNoKHsgdGl0bGU6ICdSZWNlaXZlIERldGFpbHMnLCBhcGk6IHRoaXMucmVjZWl2ZUdyaWRBcGkgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRm9ybVZhbGlkKGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1zZWFyY2gtZmlsdGVyIFxyXG4gIFtSZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBcclxuICAoc2VhcmNoQ2xpY2tlZCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiXHJcbiAgKGZvcm1WYWxpZCk9XCJoYW5kbGVGb3JtVmFsaWQoJGV2ZW50KVwiXHJcbiAgPlxyXG48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG48c3BhbiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG48ZGl2ICpuZ0lmPVwic2hvd1RhYmxlcyAmJiBpc0Zvcm1WYWxpZFwiPlxyXG48bGliLW1ldGFkYXRhIFxyXG4gICAgW3JlcG9ydE5hbWVdPVwiUmVwb3J0TmFtZVwiIFxyXG4gICAgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgXHJcbiAgICBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIiBcclxuICAgIFttZXRhRGF0YU9uZV09XCJtZXRhRGF0YU9uZVwiXHJcbiAgICBbbWV0YURhdGFUd29dPVwibWV0YURhdGFUd29cIiBcclxuICAgIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiIFxyXG4gICAgKHNlYXJjaEV2ZW50KT1cImZpbHRlcigkZXZlbnQpXCI+XHJcbiAgPC9saWItbWV0YWRhdGE+XHJcblxyXG48YWctZ3JpZC1hbmd1bGFyXHJcbiAgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiXHJcbiAgW3Jvd0RhdGFdPVwib3BlbmluZ0JhbEFuZEZ1bmRpbmdcIlxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gIFtwaW5uZWRCb3R0b21Sb3dEYXRhXT1cIltdXCJcclxuICBbaGVhZGVySGVpZ2h0XT1cIjMyXCIgXHJcbiAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgW3Jvd0hlaWdodF09XCIyOFwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbk9wZW5pbmdHcmlkUmVhZHkoJGV2ZW50KVwiXHJcbiAgc3R5bGU9XCJ3aWR0aDogODAlOyBoZWlnaHQ6IDkxcHg7IG1hcmdpbjogMCBhdXRvOyBkaXNwbGF5OiBibG9jaztcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiKHNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ1BheUluJyB8fCBzZWxlY3RlZENsaWVudFR5cGUgPT09ICdCb3RoJylcIj5cclxuPGgzIGNsYXNzPVwiZGV0YWlscy10YWJsZVwiPjxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDNweDtcIj5TZW5kIERldGFpbHM8L3NwYW4+PC9oMz5cclxuPGFnLWdyaWQtYW5ndWxhclxyXG4gIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWRcIlxyXG4gIFtyb3dEYXRhXT1cInNlbmREZXRhaWxzXCJcclxuICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcclxuICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICBbcm93SGVpZ2h0XT1cIjI4XCJcclxuICBbaGVhZGVySGVpZ2h0XT1cIjMyXCIgXHJcbiAgW3Bpbm5lZEJvdHRvbVJvd0RhdGFdPVwic2VuZFBpbm5lZEJvdHRvbVJvd1wiXHJcbiAgKGdyaWRSZWFkeSk9XCJvblNlbmRHcmlkUmVhZHkoJGV2ZW50KVwiIFxyXG4gIHN0eWxlPVwid2lkdGg6IDgwJTsgaGVpZ2h0OiAyMDRweDsgbWFyZ2luOiAwIGF1dG87IGRpc3BsYXk6IGJsb2NrO1wiPlxyXG48L2FnLWdyaWQtYW5ndWxhcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiKHNlbGVjdGVkQ2xpZW50VHlwZSA9PT0gJ1BheU91dCcgfHwgc2VsZWN0ZWRDbGllbnRUeXBlID09PSAnQm90aCcpXCI+XHJcbjxoMyBjbGFzcz1cImRldGFpbHMtdGFibGVcIj48c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAzcHg7XCI+UmVjZWl2ZSBEZXRhaWxzPC9zcGFuPjwvaDM+XHJcbjxhZy1ncmlkLWFuZ3VsYXJcclxuICBjbGFzcz1cImFnLXRoZW1lLWFscGluZSB0cmFuc2FjdGlvbi1ncmlkXCJcclxuICBbcm93RGF0YV09XCJyZWNlaXZlRGV0YWlsc1wiXHJcbiAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXHJcbiAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgW3Jvd0hlaWdodF09XCIyOFwiXHJcbiAgW2hlYWRlckhlaWdodF09XCIzMlwiIFxyXG4gIFtwaW5uZWRCb3R0b21Sb3dEYXRhXT1cInJlY2VpdmVQaW5uZWRCb3R0b21Sb3dcIlxyXG4gIChncmlkUmVhZHkpPVwib25SZWNlaXZlR3JpZFJlYWR5KCRldmVudClcIiBcclxuICBzdHlsZT1cIndpZHRoOiA4MCU7IGhlaWdodDogMjA0cHg7IG1hcmdpbjogMCBhdXRvOyBkaXNwbGF5OiBibG9jaztcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS0gQ2xvc2luZyBiYWxhbmNlIHJvdyAtLT5cclxuPGRpdiBjbGFzcz1cImNsb3NpbmctYmFsYW5jZS1yb3dcIj5cclxuICA8ZGl2IGNsYXNzPVwibGFiZWxcIiB0aXRsZT1cIkNsb3NpbmcgQmFsYW5jZVwiPlxyXG4gICAgQ2xvc2luZyBCYWxhbmNlXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzZXR0bGVtZW50XCIgXHJcbiAgICAgICBbdGl0bGVdPVwiY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRGb3JtYXR0ZWRcIj5cclxuICAgIHt7IGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Rm9ybWF0dGVkIH19XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiIFt0aXRsZV09XCJjbG9zaW5nQmFsYW5jZUluVXNkRm9ybWF0dGVkXCI+XHJcbiAgICB7eyBjbG9zaW5nQmFsYW5jZUluVXNkRm9ybWF0dGVkIH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS0gc2V0dGxlbWVudCBjdXJyZW5jeSB3b3JkcyByb3cgLS0+XHJcbjxkaXYgY2xhc3M9XCJjbG9zaW5nLWJhbGFuY2Utcm93IGNsb3NpbmctYmFsYW5jZS13b3Jkc1wiXHJcbiAgICAgKm5nSWY9XCJjbG9zaW5nQmFsYW5jZVNldHRsbWVudEluV29yZHNcIj5cclxuICA8ZGl2IGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgW3RpdGxlXT1cImNsb3NpbmdCYWxhbmNlU2V0dGxtZW50Q3VycmVuY3kgKyAnIC0gJyArIGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3Jkc1wiPlxyXG4gICAge3sgY2xvc2luZ0JhbGFuY2VTZXR0bG1lbnRDdXJyZW5jeSB9fSAtIHt7IGNsb3NpbmdCYWxhbmNlU2V0dGxtZW50SW5Xb3JkcyB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gZXhpc3RpbmcgVVNEIHdvcmRzIHJvdyAoa2VlcCBhcy1pcykgLS0+XHJcbjxkaXYgY2xhc3M9XCJjbG9zaW5nLWJhbGFuY2Utcm93IGNsb3NpbmctYmFsYW5jZS13b3Jkc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFt0aXRsZV09XCJjbG9zaW5nQmFsYW5jZUN1cnJlbmN5ICsgJyAtICcgKyBjbG9zaW5nQmFsYW5jZVVTREluV29yZHNcIj5cclxuICAgIHt7IGNsb3NpbmdCYWxhbmNlQ3VycmVuY3kgfX0gLSB7eyBjbG9zaW5nQmFsYW5jZVVTREluV29yZHMgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==