@sachin9822/reports-lib 0.0.225 → 0.0.226
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +2 -2
- package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +29 -23
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +7 -4
- package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +5 -1
- package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +3 -1
- package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +5 -3
- package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +26 -5
- package/esm2020/lib/shared/search-filter/search-filter.component.mjs +18 -5
- package/fesm2015/sachin9822-reports-lib.mjs +90 -37
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
- package/fesm2020/sachin9822-reports-lib.mjs +87 -36
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
- package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +1 -0
- package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +28 -0
- package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -44,28 +44,30 @@ export class AccountingReportComponent {
|
|
|
44
44
|
autoHeight: true
|
|
45
45
|
};
|
|
46
46
|
this.columnDefs = [
|
|
47
|
-
{ headerName: 'BusinessDate', field: 'businessDate', tooltipField: 'businessDate' },
|
|
47
|
+
{ headerName: 'BusinessDate', field: 'businessDate', minWidth: 95, tooltipField: 'businessDate' },
|
|
48
48
|
{ headerName: 'TxnDate&Time', field: 'transactionDateAndTime', tooltipField: 'transactionDateAndTime', minWidth: 110, },
|
|
49
|
-
{ headerName: 'Transaction Number', field: 'transactionNumber', tooltipField: 'transactionNumber' },
|
|
50
|
-
{ headerName: 'SendClient', field: 'sendClient', tooltipField: 'sendClient' },
|
|
51
|
-
{ headerName: 'Principle SendClient (If Applicable)', field: 'principleSendClient', tooltipField: 'principleSendClient',
|
|
52
|
-
{ headerName: 'ReceiveClient', field: 'receiveClient', tooltipField: 'receiveClient' },
|
|
53
|
-
{ headerName: 'Principle ReceiveClient (If Applicable)', field: 'principleReceiveClient', tooltipField: 'principleReceiveClient',
|
|
54
|
-
{ headerName: '
|
|
55
|
-
{ headerName: '
|
|
56
|
-
{ headerName: '
|
|
57
|
-
{ headerName: '
|
|
58
|
-
{ headerName: '
|
|
59
|
-
{ headerName: '
|
|
60
|
-
{ headerName: '
|
|
61
|
-
{ headerName: '
|
|
62
|
-
{ headerName: '
|
|
63
|
-
{ headerName: '
|
|
64
|
-
{ headerName: '
|
|
65
|
-
{ headerName: '
|
|
66
|
-
{ headerName: '
|
|
67
|
-
{ headerName: '
|
|
68
|
-
{ headerName: '
|
|
49
|
+
{ headerName: 'Transaction Number', field: 'transactionNumber', minWidth: 100, tooltipField: 'transactionNumber' },
|
|
50
|
+
{ headerName: 'SendClient', field: 'sendClient', minWidth: 80, tooltipField: 'sendClient' },
|
|
51
|
+
{ headerName: 'Principle SendClient (If Applicable)', field: 'principleSendClient', tooltipField: 'principleSendClient', minWidth: 90, },
|
|
52
|
+
{ headerName: 'ReceiveClient', field: 'receiveClient', minWidth: 90, tooltipField: 'receiveClient' },
|
|
53
|
+
{ headerName: 'Principle ReceiveClient (If Applicable)', field: 'principleReceiveClient', tooltipField: 'principleReceiveClient', minWidth: 90 },
|
|
54
|
+
{ headerName: 'Is Sender Corporate', field: 'isSenderCorporate', minWidth: 80 },
|
|
55
|
+
{ headerName: 'Is Beneficiary Corporate', field: 'isBeneficiaryCorporate', minWidth: 80 },
|
|
56
|
+
{ headerName: 'ReceiveCcy', field: 'receiveCurrency', minWidth: 80, tooltipField: 'receiveCurrency' },
|
|
57
|
+
{ headerName: 'AmountPaid', field: 'amountPaid', minWidth: 85, tooltipField: 'amountPaid', cellClass: 'ag-right-aligned-cell' },
|
|
58
|
+
{ headerName: 'SendCcy', field: 'sendCurrency', minWidth: 80, tooltipField: 'sendCurrency', },
|
|
59
|
+
{ headerName: 'ServiceFee', field: 'serviceFee', minWidth: 80, tooltipField: 'serviceFee', cellClass: 'ag-right-aligned-cell' },
|
|
60
|
+
{ headerName: 'Tax', field: 'tax', minWidth: 70, tooltipField: 'tax', cellClass: 'ag-right-aligned-cell' },
|
|
61
|
+
{ headerName: 'PrincipleSend Amount', field: 'principleSendAmount', minWidth: 90, tooltipField: 'principleSendAmount', cellClass: 'ag-right-aligned-cell' },
|
|
62
|
+
{ headerName: 'Transaction Status', field: 'transactionStatus', minWidth: 90, tooltipField: 'transactionStatus' },
|
|
63
|
+
{ headerName: 'SettlementCcy', field: 'settlementCurrency', minWidth: 90, tooltipField: 'settlementCurrency', cellClass: 'ag-right-aligned-cell' },
|
|
64
|
+
{ headerName: 'ClientSettl (in SCcy)', field: 'clientSettlementInSCcy', minWidth: 80, tooltipField: 'clientSettlementInSCcy', cellClass: 'ag-right-aligned-cell' },
|
|
65
|
+
{ headerName: 'ClientSettl (in USD)', field: 'clientSettlementInUSD', minWidth: 80, tooltipField: 'clientSettlementInUSD', cellClass: 'ag-right-aligned-cell' },
|
|
66
|
+
{ headerName: 'ShareType', field: 'shareType', minWidth: 85, tooltipField: 'shareType' },
|
|
67
|
+
{ headerName: 'ShareValue', field: 'shareValue', minWidth: 85, tooltipField: 'shareValue', cellClass: 'ag-right-aligned-cell' },
|
|
68
|
+
{ headerName: 'Send/Receive FeeCcy', field: 'sendReceiveFeeCcy', minWidth: 85, tooltipField: 'sendReceiveFeeCcy' },
|
|
69
|
+
{ headerName: 'ShareAmt (in USD)', field: 'shareAmountInUSD', minWidth: 80, tooltipField: 'shareAmountInUSD', cellClass: 'ag-right-aligned-cell' },
|
|
70
|
+
{ headerName: 'Settlement Rate', field: 'settlementRate', minWidth: 85, tooltipField: 'settlementRate', cellClass: 'ag-right-aligned-cell' },
|
|
69
71
|
];
|
|
70
72
|
this.gridApis = [];
|
|
71
73
|
this.gridColumnApis = [];
|
|
@@ -185,11 +187,15 @@ export class AccountingReportComponent {
|
|
|
185
187
|
const columnApi = this.gridColumnApis[id];
|
|
186
188
|
if (!columnApi)
|
|
187
189
|
return;
|
|
190
|
+
const columns = columnApi.getColumns();
|
|
191
|
+
// prevent undefined error
|
|
192
|
+
if (!columns?.length)
|
|
193
|
+
return;
|
|
188
194
|
const allColumnIds = [];
|
|
189
195
|
columnApi.getColumns().forEach((column) => {
|
|
190
196
|
allColumnIds.push(column.getId());
|
|
191
197
|
});
|
|
192
|
-
columnApi.autoSizeColumns(allColumnIds,
|
|
198
|
+
columnApi.autoSizeColumns(allColumnIds, true);
|
|
193
199
|
}
|
|
194
200
|
formatNumber(params) {
|
|
195
201
|
if (params.value == null)
|
|
@@ -593,4 +599,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
593
599
|
type: Component,
|
|
594
600
|
args: [{ selector: 'lib-accounting-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\" (formValid)=\"handleFormValid($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && loadingState == ComponentLoadingState.Complete && !noDataFound && isFormValid\"\r\n style=\"margin-bottom: 30px;\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <div *ngIf=\"accountingReportModel.accountingReportByBranchGroups?.length\">\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"group.receiveTransactions.entries\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\r\n [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event, i * 2 + 1)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n </div>\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".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}.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}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#16181e!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"] }]
|
|
595
601
|
}], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.ExportService }]; } });
|
|
596
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBMkVwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF6RXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBTTdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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QUFlLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLO1lBQ3ZDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUs7WUFDakMsV0FBVyxFQUFFLEtBQUssQ0FBQywrQ0FBK0M7U0FDbkUsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUU3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDOztzSEExckJVLHlCQUF5QjswR0FBekIseUJBQXlCLDZEQ3JDdEMsaW5IQStETTsyRkQxQk8seUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY2NvdW50aW5nUmVwb3J0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3VudGluZy1yZXBvcnQvYWNjb3VudGluZy1yZXBvcnQtbW9kZWwnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbkFwaSwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlcyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQtbG9hZGluZy1zdGF0ZXMnO1xyXG5pbXBvcnQgeyBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXAgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3VudGluZy1yZXBvcnQvYWNjb3VudGluZy1yZXBvcnQtYnJhbmNoLWdyb3VwJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcclxuICBpbnRlcmZhY2UganNQREYge1xyXG4gICAgYXV0b1RhYmxlOiAob3B0aW9uczogYW55KSA9PiBqc1BERjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudGluZ1JlcG9ydFJlcXVlc3Qge1xyXG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIGVuZERhdGU6IHN0cmluZztcclxuICBzZW5kQ291bnRyeUNvZGU6IHN0cmluZztcclxuICByZWN2Q291bnRyeUNvZGU6IHN0cmluZztcclxuICBidXNpbmVzc1BhcnRuZXJDb3JyZWxhdGlvbklEOiBzdHJpbmc7XHJcbiAgdHJhbnNhY3Rpb25TdGF0dXM6IHN0cmluZztcclxuICBwYXlvdXRDdXJyZW5jeTogc3RyaW5nO1xyXG4gIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nO1xyXG4gIGJyYW5jaENvZGU6IHN0cmluZztcclxuICBjb21wYW55Q29kZTogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hY2NvdW50aW5nLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudGluZ1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIFJlcG9ydE5hbWU6IHN0cmluZyA9IFwiQWNjb3VudGluZ1wiO1xyXG4gIHJlcG9ydFVzZXI6IGFueTtcclxuICByZXBvcnRUaW1lOiBhbnk7XHJcbiAgcmVwb3J0UGVyaW9kOiBhbnk7XHJcbiAgYnJhbmNoTmFtZUFuZENvZGU6IGFueTtcclxuICBzdWJHcm91cENvbHVtbjogYW55O1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBub0RhdGFGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsZWZ0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICByaWdodERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGFjY291bnRpbmdSZXBvcnRNb2RlbDogQWNjb3VudGluZ1JlcG9ydE1vZGVsO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZyA9ICdleGNlbCc7XHJcbiAgZXhwb3J0Rm9ybWF0cyA9IFt7IGZvcm1hdE5hbWU6IFwiRXhjZWxcIiwgY29kZTogJ2V4Y2VsJyB9LCB7IGZvcm1hdE5hbWU6IFwiUERGXCIsIGNvZGU6ICdwZGYnIH0sIHsgZm9ybWF0TmFtZTogXCJDU1ZcIiwgY29kZTogJ2NzdicgfV1cclxuICBpc0Zvcm1WYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbldpZHRoOiA0MCxcclxuICAgIHN1cHByZXNzU2l6ZVRvRml0OiBmYWxzZSxcclxuICAgIGNlbGxTdHlsZTogeyB1c2VyU2VsZWN0OiAndGV4dCcsICdsaW5lLWhlaWdodCc6ICcxLjInLCAnd2hpdGUtc3BhY2UnOiAnbm9ybWFsJywgJ3dvcmQtYnJlYWsnOiAnbm9ybWFsJywgJ292ZXJmbG93LXdyYXAnOiAnYnJlYWstd29yZCcgfSxcclxuXHJcbiAgICAvLyAgSGVhZGVyIHdyYXBwaW5nXHJcbiAgICB3cmFwSGVhZGVyVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWFkZXJIZWlnaHQ6IHRydWUsXHJcblxyXG4gICAgLy8gIENlbGwgd3JhcHBpbmdcclxuICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlaWdodDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbHVtbkRlZnM6IENvbERlZltdID0gW1xyXG4gICAgeyBoZWFkZXJOYW1lOiAnQnVzaW5lc3NEYXRlJywgZmllbGQ6ICdidXNpbmVzc0RhdGUnLCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUeG5EYXRlJlRpbWUnLCBmaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkRhdGVBbmRUaW1lJywgbWluV2lkdGg6IDExMCwgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIE51bWJlcicsIGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmRDbGllbnQnLCBmaWVsZDogJ3NlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdzZW5kQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlIFNlbmRDbGllbnQgKElmIEFwcGxpY2FibGUpJywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZENsaWVudCcsIHdpZHRoOiA5MCwgbWluV2lkdGg6IDgwLCBtYXhXaWR0aDogMTEwIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdSZWNlaXZlQ2xpZW50JywgZmllbGQ6ICdyZWNlaXZlQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUNsaWVudCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZSBSZWNlaXZlQ2xpZW50IChJZiBBcHBsaWNhYmxlKScsIGZpZWxkOiAncHJpbmNpcGxlUmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnLCB3aWR0aDogMTAwLCBtaW5XaWR0aDogOTAsIG1heFdpZHRoOiAxMjAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDY3knLCBmaWVsZDogJ3JlY2VpdmVDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVDdXJyZW5jeScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Ftb3VudFBhaWQnLCBmaWVsZDogJ2Ftb3VudFBhaWQnLCB0b29sdGlwRmllbGQ6ICdhbW91bnRQYWlkJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENjeScsIGZpZWxkOiAnc2VuZEN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAnc2VuZEN1cnJlbmN5JywgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlcnZpY2VGZWUnLCBmaWVsZDogJ3NlcnZpY2VGZWUnLCB0b29sdGlwRmllbGQ6ICdzZXJ2aWNlRmVlJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVGF4JywgZmllbGQ6ICd0YXgnLCB0b29sdGlwRmllbGQ6ICd0YXgnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGVTZW5kIEFtb3VudCcsIGZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVNlbmRBbW91bnQnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUcmFuc2FjdGlvbiBTdGF0dXMnLCBmaWVsZDogJ3RyYW5zYWN0aW9uU3RhdHVzJywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50Q2N5JywgZmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gU0NjeSknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCB0b29sdGlwRmllbGQ6ICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5JywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQ2xpZW50U2V0dGwgKGluIFVTRCknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblVTRCcsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblVTRCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlVHlwZScsIGZpZWxkOiAnc2hhcmVUeXBlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVUeXBlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVWYWx1ZScsIGZpZWxkOiAnc2hhcmVWYWx1ZScsIHRvb2x0aXBGaWVsZDogJ3NoYXJlVmFsdWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kL1JlY2VpdmUgRmVlQ2N5JywgZmllbGQ6ICdzZW5kUmVjZWl2ZUZlZUNjeScsIHRvb2x0aXBGaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVBbXQgKGluIFVTRCknLCBmaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCB0b29sdGlwRmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxlbWVudCBSYXRlJywgZmllbGQ6ICdzZXR0bGVtZW50UmF0ZScsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gIF07XHJcblxyXG5cclxuICBncmlkQXBpczogR3JpZEFwaVtdID0gW107XHJcbiAgZ3JpZENvbHVtbkFwaXM6IENvbHVtbkFwaVtdID0gW107XHJcblxyXG4gIHBhZ2luYXRpb25BcnJheTogYW55W107XHJcbiAgZXpyZW1pdFVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmlnaW5hbEdyb3VwRW50cmllczogQWNjb3VudGluZ1JlcG9ydEJyYW5jaEdyb3VwW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLCBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV6cmVtaXR1c2VybmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2V6cmVtaXR1c2VybmFtZScpO1xyXG4gICAgaWYgKGV6cmVtaXR1c2VybmFtZSkge1xyXG4gICAgICB0aGlzLmV6cmVtaXRVc2VyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBY2NvdW50aW5nUmVwb3J0KHJlcXVlc3Q/OiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYnJhbmNoTmFtZUFuZENvZGUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnN1Ykdyb3VwQ29sdW1uID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZmluYWxSZXEgPSByZXF1ZXN0O1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRBY2NvdW50aW5nUmVwb3J0KGZpbmFsUmVxKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gZGF0YTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICB0aGlzLm5vRGF0YUZvdW5kID0gT2JqZWN0LmtleXModGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzKS5sZW5ndGggPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgY29uc3QgYnJhbmNoQ291bnQgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMubGVuZ3RoO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcnJheSA9IG5ldyBBcnJheShicmFuY2hDb3VudCAqIDIpLmZpbGwoMTUpO1xyXG5cclxuICAgICAgdGhpcy5yZXBvcnRVc2VyID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwucmVwb3J0VXNlcjtcclxuICAgICAgdGhpcy5yZXBvcnRUaW1lID0gZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XHJcbiAgICAgIHRoaXMucmVwb3J0UGVyaW9kID0gYCR7Zm9ybWF0RGF0ZShmaW5hbFJlcS5zdGFydERhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9IC0gJHtmb3JtYXREYXRlKGZpbmFsUmVxLmVuZERhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9YDtcclxuXHJcbiAgICAgIHRoaXMubGVmdERhdGEgPSB7XHJcbiAgICAgICAgJ1JlcG9ydCBQZXJpb2QnOiBgJHt0aGlzLnJlcG9ydFBlcmlvZH1gLFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJpZ2h0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFVzZXIgJiBUaW1lJzogYCR7dGhpcy5yZXBvcnRVc2VyfSBAICR7dGhpcy5yZXBvcnRUaW1lfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERlZXAgY29weSB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBkYXRhIGZvciBzZWFyY2hcclxuICAgICAgdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcyA9IHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBzZW5kVHJhbnNhY3Rpb25zOiB7XHJcbiAgICAgICAgICAuLi5ncm91cC5zZW5kVHJhbnNhY3Rpb25zLFxyXG4gICAgICAgICAgZW50cmllczogWy4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllc11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlY2VpdmVUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG5cclxuXHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uID0gb3B0aW9uO1xyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncGRmJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvUGRmKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Nzdic6XHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0NzdigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGFuIGV4cG9ydCBmb3JtYXQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChzdHI6IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICBzdHI/LnRvU3RyaW5nKClcclxuICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcclxuICAgICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKVxyXG4gICAgICAgIC50cmltKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcclxuICAgIGNvbnN0IHNlYXJjaCA9IG5vcm1hbGl6ZSh0ZXh0KTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3JpZ2luYWxHcm91cEVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEJ1aWxkIGZpbHRlcmVkIGJyYW5jaCBncm91cHNcclxuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcy5tYXAoZ3JvdXAgPT4ge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbFNlbmRFbnRyaWVzID0gZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG4gICAgICBjb25zdCBvcmlnaW5hbFJlY2VpdmVFbnRyaWVzID0gZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWRTZW5kID0gc2VhcmNoXHJcbiAgICAgICAgPyBvcmlnaW5hbFNlbmRFbnRyaWVzLmZpbHRlcihlbnRyeSA9PlxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZSh2YWx1ZSA9PiBub3JtYWxpemUodmFsdWUpLmluY2x1ZGVzKHNlYXJjaCkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogWy4uLm9yaWdpbmFsU2VuZEVudHJpZXNdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWRSZWNlaXZlID0gc2VhcmNoXHJcbiAgICAgICAgPyBvcmlnaW5hbFJlY2VpdmVFbnRyaWVzLmZpbHRlcihlbnRyeSA9PlxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZSh2YWx1ZSA9PiBub3JtYWxpemUodmFsdWUpLmluY2x1ZGVzKHNlYXJjaCkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogWy4uLm9yaWdpbmFsUmVjZWl2ZUVudHJpZXNdO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBzZW5kVHJhbnNhY3Rpb25zOiB7IC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGVudHJpZXM6IGZpbHRlcmVkU2VuZCB9LFxyXG4gICAgICAgIHJlY2VpdmVUcmFuc2FjdGlvbnM6IHsgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucywgZW50cmllczogZmlsdGVyZWRSZWNlaXZlIH1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIPCflLkgS2VlcCBvbmx5IGJyYW5jaGVzIHRoYXQgaGF2ZSBhbnkgbWF0Y2hpbmcgZW50cmllc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzID1cclxuICAgICAgZmlsdGVyZWRHcm91cHMuZmlsdGVyKGcgPT5cclxuICAgICAgICBnLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGggPiAwIHx8IGcucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aCA+IDBcclxuICAgICAgKTtcclxuXHJcbiAgICAvLyBSZXNldCBncmlkcyBmb3IgdmlzaWJsZSBicmFuY2hlc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdLmZvckVhY2goKGVudHJpZXMsIGlkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRBcGkgPSB0aGlzLmdyaWRBcGlzW2luZGV4ICogMiArIGlkeF07XHJcbiAgICAgICAgaWYgKGdyaWRBcGkpIHtcclxuICAgICAgICAgIGdyaWRBcGkuc2V0Um93RGF0YShlbnRyaWVzKTtcclxuICAgICAgICAgIGlmIChncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKSBncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQsIGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ3JpZEFwaXNbaWRdID0gcGFyYW1zLmFwaTtcclxuICAgIHRoaXMuZ3JpZENvbHVtbkFwaXNbaWRdID0gcGFyYW1zLmNvbHVtbkFwaTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b1NpemVBbGxDb2x1bW5zKGlkKSwgMTAwKTtcclxuICB9XHJcblxyXG5cclxuICBvbkdyaWRTaXplQ2hhbmdlZChwYXJhbXM6IGFueSwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hdXRvU2l6ZUFsbENvbHVtbnMoaWQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGF1dG9TaXplQWxsQ29sdW1ucyhpZDogbnVtYmVyLCBza2lwSGVhZGVyOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGNvbHVtbkFwaSA9IHRoaXMuZ3JpZENvbHVtbkFwaXNbaWRdO1xyXG4gICAgaWYgKCFjb2x1bW5BcGkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbGxDb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb2x1bW5BcGkuZ2V0Q29sdW1ucygpLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGFsbENvbHVtbklkcy5wdXNoKGNvbHVtbi5nZXRJZCgpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtbkFwaS5hdXRvU2l6ZUNvbHVtbnMoYWxsQ29sdW1uSWRzLCBza2lwSGVhZGVyKTtcclxuICB9XHJcblxyXG5cclxuICBmb3JtYXROdW1iZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XHJcblxyXG4gICAgY29uc3QgZmllbGQgPSBwYXJhbXMuY29sRGVmLmZpZWxkO1xyXG5cclxuICAgIGlmIChmaWVsZCA9PT0gJ3NldHRsZW1lbnRSYXRlJykge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCg4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCgzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9QZGYoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCB0aXRsZSA9ICdBY2NvdW50aW5nIFJlcG9ydCc7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC5wZGYnO1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgJiBUaW1lIDogJywgYCR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gXSxcclxuICAgIF07XHJcbiAgICAvLyAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLnNlYXJjaENyaXRlcmlhO1xyXG5cclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNzAwLCAyMTBdIH0pO1xyXG5cclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDg7XHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XHJcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcclxuXHJcbiAgICAvLyBMb2dvXHJcbiAgICBpZiAodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10pIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZVsnbG9nb0Jhc2U2NCddLCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgcGFnZVdpZHRoIC8gMiwgdGl0bGVZLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiA3O1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnRleHQobGFiZWwsIDE1LCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSA/PyAnJywgMTUgKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogNyArIDU7XHJcblxyXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnRleHQoJ1NlYXJjaCBDcml0ZXJpYTotJywgbWFyZ2luTGVmdCwgY3VycmVudFkpO1xyXG4gICAgY3VycmVudFkgKz0gODtcclxuXHJcbiAgICBjb25zdCByb3dIZWlnaHRQZXJMaW5lID0gNjtcclxuICAgIGNvbnN0IG1pbkdhcCA9IDI7IC8vIGdhcCBiZXR3ZWVuIGtleSBhbmQgdmFsdWVcclxuICAgIGNvbnN0IGJldHdlZW5Db2x1bW5zR2FwID0gMTU7IC8vIGdhcCBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGNvbHVtbnMgKHlvdSBjYW4gdHVuZSB0aGlzKVxyXG4gICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgIC8vIC0tLSBoZWxwZXIgZnVuY3Rpb24gdG8gbWVhc3VyZSB0b3RhbCB3aWR0aCBvZiBhIGtleS12YWx1ZSBwYWlyIC0tLVxyXG4gICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyAtLS0gY2FsY3VsYXRlIG1heCB3aWR0aCBvZiBsZWZ0IGNvbHVtbiBwYWlycyBkeW5hbWljYWxseSAtLS1cclxuICAgIGxldCBtYXhMZWZ0UGFpcldpZHRoID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2ldKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSBtZWFzdXJlUGFpcldpZHRoKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIGlmICh3aWR0aCA+IG1heExlZnRQYWlyV2lkdGgpIG1heExlZnRQYWlyV2lkdGggPSB3aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBjb21wdXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzaG91bGQgc3RhcnQgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgY29uc3QgcmlnaHRDb2x1bW5TdGFydCA9IGxlZnRDb2x1bW5TdGFydCArIG1heExlZnRQYWlyV2lkdGggKyBiZXR3ZWVuQ29sdW1uc0dhcDtcclxuXHJcbiAgICAvLyAtLS0gcHJpbnQgc2VhcmNoIGNyaXRlcmlhIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICBsZXQgbWF4TGluZUNvdW50ID0gMTtcclxuXHJcbiAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50WSArPSByb3dIZWlnaHRQZXJMaW5lO1xyXG4gICAgfVxyXG4gICAgY3VycmVudFkgKz0gODtcclxuICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIC8vIEJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG5cclxuICAgICAgY29uc3QgYnJhbmNoVGV4dCA9IGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gO1xyXG4gICAgICBkb2MudGV4dChicmFuY2hUZXh0LCAxNSwgY3VycmVudFkpO1xyXG4gICAgICBjdXJyZW50WSArPSA3O1xyXG5cclxuICAgICAgLy8gTG9vcCBzdWJncm91cHMgKFNlbmQgKyBSZWNlaXZlKVxyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJHcm91cC5lbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQoYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCwgMTUsIGN1cnJlbnRZKTtcclxuICAgICAgICBjdXJyZW50WSArPSA1O1xyXG5cclxuICAgICAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMucHJlcGFyZUFjY291bnRpbmdUYWJsZShzdWJHcm91cC5lbnRyaWVzKTtcclxuXHJcbiAgICAgICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XHJcbiAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICBib2R5OiByb3dzLFxyXG4gICAgICAgICAgc3RhcnRZOiBjdXJyZW50WSxcclxuICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLCB0ZXh0Q29sb3I6IDAsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLCBmb250U2l6ZTogOSwgaGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5U3R5bGVzOiB7IGZvbnRTaXplOiA4LCBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSwgdGV4dENvbG9yOiBbMCwgMCwgMF0gfSxcclxuICAgICAgICAgIHN0eWxlczogeyBjZWxsUGFkZGluZzogMiwgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLCBtaW5DZWxsSGVpZ2h0OiA2IH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZID0gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZICsgMTA7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcGFnZUNvdW50ID0gKGRvYyBhcyBhbnkpLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhZ2VDb3VudDsgaSsrKSB7XHJcbiAgICAgIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwiYm9sZFwiKTtcclxuICAgICAgZG9jLnNldFBhZ2UoaSk7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcclxuICAgICAgZG9jLnNldFRleHRDb2xvcigxMDApO1xyXG5cclxuICAgICAgY29uc3QgZm9vdGVyWSA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSA2O1xyXG5cclxuICAgICAgZG9jLnRleHQoXHJcbiAgICAgICAgYFBhZ2UgJHtpfSBvZiAke3BhZ2VDb3VudH1gLFxyXG4gICAgICAgIHBhZ2VXaWR0aCAtIDE1LFxyXG4gICAgICAgIGZvb3RlclksXHJcbiAgICAgICAgeyBhbGlnbjogJ3JpZ2h0JyB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0V4Y2VsKCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGl0bGUgPSAnQWNjb3VudGluZyBSZXBvcnQnO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQueGxzeCc7XHJcblxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdBY2NvdW50aW5nIFJlcG9ydCcpO1xyXG4gICAgbGV0IGN1cnJlbnRSb3cgPSAxO1xyXG5cclxuICAgIC8vIExvZ29cclxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NCkge1xyXG4gICAgICBjb25zdCBiYXNlNjREYXRhID0gdGhpcy5leHBvcnRTZXJ2aWNlLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgIH0pO1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwgeyB0bDogeyBjb2w6IDAsIHJvdzogMCB9LCBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9LCBlZGl0QXM6ICdvbmVDZWxsJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaXRsZVxyXG4gICAgY29uc3QgdGl0bGVSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3cpO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS52YWx1ZSA9IHRpdGxlO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2xlZnQnIH07XHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgRiR7Y3VycmVudFJvd306SiR7Y3VycmVudFJvd31gKTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMztcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxyXG4gICAgICBbJ1JlcG9ydCBVc2VyICYgVGltZSA6ICcsIGAke3RoaXMucmVwb3J0VXNlcn1AJHt0aGlzLnJlcG9ydFRpbWV9YF0sXHJcbiAgICBdO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiBgJHtsYWJlbH06IGAsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIC8vIC0tLSBIZWFkaW5nIC0tLVxyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoY3VycmVudFJvdywgMSwgY3VycmVudFJvdywgOCk7XHJcbiAgICBjb25zdCBoZWFkaW5nQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpO1xyXG4gICAgaGVhZGluZ0NlbGwudmFsdWUgPSAnU2VhcmNoIENyaXRlcmlhOi0nO1xyXG4gICAgaGVhZGluZ0NlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTIgfTtcclxuICAgIGhlYWRpbmdDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMjtcclxuXHJcbiAgICAvLyAtLS0gRHJhdyBwYWlycyBkeW5hbWljYWxseSAodHdvIHBlciByb3cpIC0tLVxyXG4gICAgY29uc3QgbGVmdENvbEVuZCA9IDQ7IC8vIGNvbHVtbnMgMeKAkzQgZm9yIGxlZnQgcGFpclxyXG4gICAgY29uc3QgcmlnaHRDb2xTdGFydCA9IDU7IC8vIGNvbHVtbnMgNeKAkzggZm9yIHJpZ2h0IHBhaXJcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuXHJcbiAgICAgIC8vIExlZnQgcGFpclxyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaV0pIHtcclxuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCAxLCByb3cubnVtYmVyLCBsZWZ0Q29sRW5kKTtcclxuICAgICAgICBjb25zdCBsZWZ0Q2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgICAgIGxlZnRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgbGVmdENlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJpZ2h0IHBhaXJcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCByaWdodENvbFN0YXJ0LCByb3cubnVtYmVyLCByaWdodENvbFN0YXJ0ICsgMyk7XHJcbiAgICAgICAgY29uc3QgcmlnaHRDZWxsID0gcm93LmdldENlbGwocmlnaHRDb2xTdGFydCk7XHJcbiAgICAgICAgcmlnaHRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgcmlnaHRDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gQnJhbmNoZXNcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgYnJhbmNoUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICBicmFuY2hSb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiAnQnJhbmNoIChOYW1lICYgQ29kZSk6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IGdyb3VwLmJyYW5jaE5hbWVBbmRDb2RlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgIC8vIExvb3Agc3ViZ3JvdXBzXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJHcm91cFJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICBzdWJHcm91cFJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiAnU3ViIEdyb3VwOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IHN1Ykdyb3VwLnN1Ykdyb3VwTmFtZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgICAvLyBIZWFkZXJzXHJcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLnByZXBhcmVBY2NvdW50aW5nVGFibGUoc3ViR3JvdXAuZW50cmllcyk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgICAgICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgICAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgICAgICAgIGNlbGwuYm9yZGVyID0geyB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9IH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJvd3NcclxuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgICByLmZvckVhY2goKHZhbCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICBjZWxsLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXV0by1hZGp1c3QgY29sdW1uIHdpZHRocyAoaW5jbHVkaW5nIFNyIE5vKVxyXG4gICAgY29uc3QgYWxsSGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcbiAgICBhbGxIZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyLmxlbmd0aDsgLy8gc3RhcnQgd2l0aCBoZWFkZXIgbGVuZ3RoXHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgLy8gU3IgTm8gY29sdW1uIChpID0gMCkgaXMganVzdCBudW1iZXJzXHJcbiAgICAgICAgICAgIGxldCB2YWwgPSBpID09PSAwID8gKHN1Ykdyb3VwLmVudHJpZXMuaW5kZXhPZihlbnRyeSkgKyAxKS50b1N0cmluZygpIDogKGVudHJ5W3RoaXMuY29sdW1uRGVmc1tpIC0gMV0/LmZpZWxkXSA/PyAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHZhbC50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgbWF4TGVuZ3RoID0gbGVuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPSBtYXhMZW5ndGggKyA1OyAvLyBwYWRkaW5nXHJcbiAgICB9KTtcclxuXHJcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFjY291bnRpbmdUYWJsZShkYXRhOiBhbnlbXSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjID0+IGMuaGVhZGVyTmFtZSldO1xyXG5cclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzOiBbXSB9OyAvLyByZXR1cm4gaGVhZGVycyBvbmx5LCBlbXB0eSByb3dzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyb3csIGkpID0+IHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICBpICsgMSxcclxuICAgICAgICAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICBsZXQgdmFsID0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgICAgICBpZiAodmFsID09IG51bGwpIHJldHVybiAnJztcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvQ3N2KCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQuY3N2JztcclxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcm93cy5wdXNoKCdSZXBvcnQgVGl0bGU6IEFjY291bnRpbmcgUmVwb3J0Jyk7XHJcbiAgICByb3dzLnB1c2goJycpO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgUGVyaW9kOiAke3RoaXMucmVwb3J0UGVyaW9kfWApO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgVXNlciAmIFRpbWU6ICR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcblxyXG4gICAgLy8gLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ3JpdGVyaWE/Lmxlbmd0aCkge1xyXG4gICAgICByb3dzLnB1c2goJ1NlYXJjaCBDcml0ZXJpYTotJyk7XHJcblxyXG4gICAgICAvLyBjYWxjdWxhdGUgbWF4IGxlbmd0aCBvZiBsZWZ0IGtleS12YWx1ZSBwYWlycyBmb3IgcGFkZGluZ1xyXG4gICAgICBjb25zdCBtYXhMZWZ0TGVuZ3RoID0gTWF0aC5tYXgoLi4uc2VhcmNoQ3JpdGVyaWEubWFwKChbaywgdl0pID0+IChrICsgJyAnICsgdikubGVuZ3RoKSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG5cclxuICAgICAgICBjb25zdCBsZWZ0VGV4dCA9IGxlZnQgPyBgJHtsZWZ0WzBdfSAke2xlZnRbMV19YC5wYWRFbmQobWF4TGVmdExlbmd0aCArIDUsICcgJykgOiAnJztcclxuICAgICAgICBjb25zdCByaWdodFRleHQgPSByaWdodCA/IGAke3JpZ2h0WzBdfSAke3JpZ2h0WzFdfWAgOiAnJztcclxuXHJcbiAgICAgICAgLy8gIEVhY2ggcm93IGluIHNpbmdsZSBDU1Ygcm93OyBmaXJzdCBhbmQgc2Vjb25kIHBhaXIgc2VwYXJhdGVkIGJ5IGEgY29sdW1uXHJcbiAgICAgICAgcm93cy5wdXNoKGBcIiR7bGVmdFRleHR9JHtyaWdodFRleHR9XCJgKTtcclxuICAgICAgfVxyXG4gICAgICByb3dzLnB1c2goJycpOyAvLyBibGFuayBsaW5lIGFmdGVyIHNlYXJjaCBjcml0ZXJpYVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgcm93cy5wdXNoKGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gKTtcclxuXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCk7XHJcblxyXG4gICAgICAgIC8vICBBZGQgXCJTciBOb1wiIGF0IHRoZSBiZWdpbm5pbmcgb2YgaGVhZGVyc1xyXG4gICAgICAgIHJvd3MucHVzaChbJ1wiU3IgTm9cIicsIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IGBcIiR7Y29sLmhlYWRlck5hbWV9XCJgKV0uam9pbignLCcpKTtcclxuXHJcbiAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAvLyAgQWRkIHNlcmlhbCBudW1iZXIgYXQgc3RhcnQgb2YgZWFjaCByb3dcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IFtcclxuICAgICAgICAgICAgKGlkeCArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBlbnRyeVtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIGlmIChbJ2Ftb3VudFBhaWQnLCAnc2VydmljZUZlZScsICd0YXgnLCAncHJpbmNpcGxlU2VuZEFtb3VudCcsICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5J10uaW5jbHVkZXMoY29sLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbH1cImA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdLmpvaW4oJywnKTtcclxuICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goJycpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcm93cy5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBwYXlsb2FkPy5tb2RhbCB8fCBwYXlsb2FkO1xyXG5cclxuICAgIGNvbnN0IHJlcTogQWNjb3VudGluZ1JlcG9ydFJlcXVlc3QgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9kYWwuZnJvbURhdGUsIC8vIHl5eXktTU0tZGQgZnJvbSB0aGUgZmlsdGVyXHJcbiAgICAgIGVuZERhdGU6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgc2VuZENvdW50cnlDb2RlOiBtb2RhbC5zZW5kQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgcmVjdkNvdW50cnlDb2RlOiBtb2RhbC5yZWNlaXZlQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogbW9kYWwuY2xpZW50ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIiksXHJcbiAgICAgIHBheW91dEN1cnJlbmN5OiBtb2RhbC5jdXJyZW5jeSA/PyAnQUxMJyxcclxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiBtb2RhbC5wcm9kdWN0ID8/ICdBTEwnLFxyXG4gICAgICBicmFuY2hDb2RlOiBtb2RhbC5icmFuY2ggPz8gJ0FMTCcsXHJcbiAgICAgIGNvbXBhbnlDb2RlOiAnQUxMJyAvLyBvciAnQkgnIGlmIHlvdXIgQVBJIHJlcXVpcmVzIGl0IHNwZWNpZmljYWxseVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhID0gcGF5bG9hZC5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICB0aGlzLmdldEFjY291bnRpbmdSZXBvcnQocmVxKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZvcm1WYWxpZChpc1ZhbGlkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gaXNWYWxpZDtcclxuICB9XHJcblxyXG59XHJcbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIiAoZm9ybVZhbGlkKT1cImhhbmRsZUZvcm1WYWxpZCgkZXZlbnQpXCI+PC9saWItc2VhcmNoLWZpbHRlcj5cclxuXHJcbjxhcHAtbG9hZGVyIGNsYXNzPVwiXCIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsIT11bmRlZmluZWQgJiYgbG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZSAmJiAhbm9EYXRhRm91bmQgJiYgaXNGb3JtVmFsaWRcIlxyXG4gIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMzBweDtcIj5cclxuXHJcbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCIgW21ldGFEYXRhT25lXT1cImxlZnREYXRhXCJcclxuICAgIFttZXRhRGF0YVR3b109XCJyaWdodERhdGFcIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIiAoc2VhcmNoRXZlbnQpPVwib25TZWFyY2goJGV2ZW50KVwiPjwvbGliLW1ldGFkYXRhPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoXCI+XHJcbiAgICA8bmdiLWFjY29yZGlvbiAjYWNjPVwibmdiQWNjb3JkaW9uXCIgW2Nsb3NlT3RoZXJzXT1cImZhbHNlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFjY291bnRpbmdSZXBvcnRNb2RlbD8uYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPG5nYi1wYW5lbCBbaWRdPVwiJ3BhbmVsLScgKyBpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGFuZWwtY2xzXCI+XHJcbiAgICAgICAgICAgICAge3sgZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgICAgPCEtLSBTZW5kIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgW2RlZmF1bHRTaXplXT1cIicxNSdcIlxyXG4gICAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMl1cIj5cclxuICAgICAgICAgICAgICAgIDwvbGliLXBhZ2Utc2l6ZS1zZWxlY3Rvcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWQgZ3JpZC1zaXplXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQsIGkgKiAyKVwiIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmVjZWl2ZSBUcmFuc2FjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ViZ3JvdXBjb2x1bW5cIj57eyBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLnN1Ykdyb3VwTmFtZSB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcclxuICAgICAgICAgICAgICAgICAgW2dyaWRBcGldPVwiZ3JpZEFwaXNbaSAqIDIgKyAxXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZCBncmlkLXNpemVcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXCIgW3Jvd0hlaWdodF09XCIyMFwiIFtoZWFkZXJIZWlnaHRdPVwiMjRcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudCwgaSAqIDIgKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZ2ItcGFuZWw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJub0RhdGFGb3VuZCAmJiBsb2FkaW5nU3RhdGUhPUNvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+XHJcbiAgTm8gRGF0YSBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cclxuPC9kaXY+Il19
|
|
602
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBNkVwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUEzRXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBTTdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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ckMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWNjb3VudGluZ1JlcG9ydE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LW1vZGVsJztcclxuaW1wb3J0IHsgQ29sRGVmLCBDb2x1bW5BcGksIEdyaWRBcGksIEdyaWRSZWFkeUV2ZW50IH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcclxuaW1wb3J0IHsgQWNjb3VudGluZ1JlcG9ydEJyYW5jaEdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LWJyYW5jaC1ncm91cCc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XHJcbiAgaW50ZXJmYWNlIGpzUERGIHtcclxuICAgIGF1dG9UYWJsZTogKG9wdGlvbnM6IGFueSkgPT4ganNQREY7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0IHtcclxuICBzdGFydERhdGU6IHN0cmluZztcclxuICBlbmREYXRlOiBzdHJpbmc7XHJcbiAgc2VuZENvdW50cnlDb2RlOiBzdHJpbmc7XHJcbiAgcmVjdkNvdW50cnlDb2RlOiBzdHJpbmc7XHJcbiAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogc3RyaW5nO1xyXG4gIHRyYW5zYWN0aW9uU3RhdHVzOiBzdHJpbmc7XHJcbiAgcGF5b3V0Q3VycmVuY3k6IHN0cmluZztcclxuICB0cmFuc2FjdGlvblR5cGU6IHN0cmluZztcclxuICBicmFuY2hDb2RlOiBzdHJpbmc7XHJcbiAgY29tcGFueUNvZGU6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWNjb3VudGluZy1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRpbmdSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBSZXBvcnROYW1lOiBzdHJpbmcgPSBcIkFjY291bnRpbmdcIjtcclxuICByZXBvcnRVc2VyOiBhbnk7XHJcbiAgcmVwb3J0VGltZTogYW55O1xyXG4gIHJlcG9ydFBlcmlvZDogYW55O1xyXG4gIGJyYW5jaE5hbWVBbmRDb2RlOiBhbnk7XHJcbiAgc3ViR3JvdXBDb2x1bW46IGFueTtcclxuICBDb21wb25lbnRMb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzO1xyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlcyA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgbm9EYXRhRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGVmdERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcmlnaHREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcblxyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHJvd0RhdGEgPSBbXTtcclxuICBhY2NvdW50aW5nUmVwb3J0TW9kZWw6IEFjY291bnRpbmdSZXBvcnRNb2RlbDtcclxuICBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmcgPSAnZXhjZWwnO1xyXG4gIGV4cG9ydEZvcm1hdHMgPSBbeyBmb3JtYXROYW1lOiBcIkV4Y2VsXCIsIGNvZGU6ICdleGNlbCcgfSwgeyBmb3JtYXROYW1lOiBcIlBERlwiLCBjb2RlOiAncGRmJyB9LCB7IGZvcm1hdE5hbWU6IFwiQ1NWXCIsIGNvZGU6ICdjc3YnIH1dXHJcbiAgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5XaWR0aDogNDAsXHJcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogZmFsc2UsXHJcbiAgICBjZWxsU3R5bGU6IHsgdXNlclNlbGVjdDogJ3RleHQnLCAnbGluZS1oZWlnaHQnOiAnMS4yJywgJ3doaXRlLXNwYWNlJzogJ25vcm1hbCcsICd3b3JkLWJyZWFrJzogJ25vcm1hbCcsICdvdmVyZmxvdy13cmFwJzogJ2JyZWFrLXdvcmQnIH0sXHJcblxyXG4gICAgLy8gIEhlYWRlciB3cmFwcGluZ1xyXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVhZGVySGVpZ2h0OiB0cnVlLFxyXG5cclxuICAgIC8vICBDZWxsIHdyYXBwaW5nXHJcbiAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWlnaHQ6IHRydWVcclxuICB9O1xyXG5cclxuICBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtcclxuICAgIHsgaGVhZGVyTmFtZTogJ0J1c2luZXNzRGF0ZScsIGZpZWxkOiAnYnVzaW5lc3NEYXRlJywgbWluV2lkdGg6IDk1LCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUeG5EYXRlJlRpbWUnLCBmaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkRhdGVBbmRUaW1lJywgbWluV2lkdGg6IDExMCwgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIE51bWJlcicsIGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCBtaW5XaWR0aDogMTAwLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmRDbGllbnQnLCBmaWVsZDogJ3NlbmRDbGllbnQnLCBtaW5XaWR0aDogODAsIHRvb2x0aXBGaWVsZDogJ3NlbmRDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgU2VuZENsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JywgbWluV2lkdGg6IDkwLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNsaWVudCcsIGZpZWxkOiAncmVjZWl2ZUNsaWVudCcsIG1pbldpZHRoOiA5MCwgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUNsaWVudCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZSBSZWNlaXZlQ2xpZW50IChJZiBBcHBsaWNhYmxlKScsIGZpZWxkOiAncHJpbmNpcGxlUmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnLCBtaW5XaWR0aDogOTAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0lzIFNlbmRlciBDb3Jwb3JhdGUnLCBmaWVsZDogJ2lzU2VuZGVyQ29ycG9yYXRlJywgbWluV2lkdGg6IDgwfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0lzIEJlbmVmaWNpYXJ5IENvcnBvcmF0ZScsIGZpZWxkOiAnaXNCZW5lZmljaWFyeUNvcnBvcmF0ZScsIG1pbldpZHRoOiA4MCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeScsIGZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQ3VycmVuY3knIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdBbW91bnRQYWlkJywgZmllbGQ6ICdhbW91bnRQYWlkJywgbWluV2lkdGg6IDg1LCB0b29sdGlwRmllbGQ6ICdhbW91bnRQYWlkJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENjeScsIGZpZWxkOiAnc2VuZEN1cnJlbmN5JywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdzZW5kQ3VycmVuY3knLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VydmljZUZlZScsIGZpZWxkOiAnc2VydmljZUZlZScsIG1pbldpZHRoOiA4MCwgdG9vbHRpcEZpZWxkOiAnc2VydmljZUZlZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RheCcsIGZpZWxkOiAndGF4JywgbWluV2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICd0YXgnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGVTZW5kIEFtb3VudCcsIGZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIG1pbldpZHRoOiA5MCwgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnLCBtaW5XaWR0aDogOTAsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uU3RhdHVzJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxlbWVudENjeScsIGZpZWxkOiAnc2V0dGxlbWVudEN1cnJlbmN5JywgbWluV2lkdGg6IDkwLCB0b29sdGlwRmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gU0NjeSknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBtaW5XaWR0aDogODAsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gVVNEKScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdjbGllbnRTZXR0bGVtZW50SW5VU0QnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZVR5cGUnLCBmaWVsZDogJ3NoYXJlVHlwZScsIG1pbldpZHRoOiA4NSwgdG9vbHRpcEZpZWxkOiAnc2hhcmVUeXBlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVWYWx1ZScsIGZpZWxkOiAnc2hhcmVWYWx1ZScsIG1pbldpZHRoOiA4NSwgdG9vbHRpcEZpZWxkOiAnc2hhcmVWYWx1ZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmQvUmVjZWl2ZSBGZWVDY3knLCBmaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JywgbWluV2lkdGg6IDg1LCB0b29sdGlwRmllbGQ6ICdzZW5kUmVjZWl2ZUZlZUNjeScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlQW10IChpbiBVU0QpJywgZmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxlbWVudCBSYXRlJywgZmllbGQ6ICdzZXR0bGVtZW50UmF0ZScsIG1pbldpZHRoOiA4NSwgdG9vbHRpcEZpZWxkOiAnc2V0dGxlbWVudFJhdGUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgXTtcclxuXHJcblxyXG4gIGdyaWRBcGlzOiBHcmlkQXBpW10gPSBbXTtcclxuICBncmlkQ29sdW1uQXBpczogQ29sdW1uQXBpW10gPSBbXTtcclxuXHJcbiAgcGFnaW5hdGlvbkFycmF5OiBhbnlbXTtcclxuICBlenJlbWl0VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yaWdpbmFsR3JvdXBFbnRyaWVzOiBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXBbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXpyZW1pdHVzZXJuYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICBpZiAoZXpyZW1pdHVzZXJuYW1lKSB7XHJcbiAgICAgIHRoaXMuZXpyZW1pdFVzZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY291bnRpbmdSZXBvcnQocmVxdWVzdD86IEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0KSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5icmFuY2hOYW1lQW5kQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc3ViR3JvdXBDb2x1bW4gPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBmaW5hbFJlcSA9IHJlcXVlc3Q7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFjY291bnRpbmdSZXBvcnQoZmluYWxSZXEpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwgPSBkYXRhO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBPYmplY3Qua2V5cyh0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMpLmxlbmd0aCA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBjb25zdCBicmFuY2hDb3VudCA9IHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkFycmF5ID0gbmV3IEFycmF5KGJyYW5jaENvdW50ICogMikuZmlsbCgxNSk7XHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFVzZXIgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5yZXBvcnRVc2VyO1xyXG4gICAgICB0aGlzLnJlcG9ydFRpbWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgICAgdGhpcy5yZXBvcnRQZXJpb2QgPSBgJHtmb3JtYXREYXRlKGZpbmFsUmVxLnN0YXJ0RGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX0gLSAke2Zvcm1hdERhdGUoZmluYWxSZXEuZW5kRGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX1gO1xyXG5cclxuICAgICAgdGhpcy5sZWZ0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFBlcmlvZCc6IGAke3RoaXMucmVwb3J0UGVyaW9kfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmlnaHREYXRhID0ge1xyXG4gICAgICAgICdSZXBvcnQgVXNlciAmIFRpbWUnOiBgJHt0aGlzLnJlcG9ydFVzZXJ9IEAgJHt0aGlzLnJlcG9ydFRpbWV9YCxcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsIGRhdGEgZm9yIHNlYXJjaFxyXG4gICAgICB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczoge1xyXG4gICAgICAgICAgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucyxcclxuICAgICAgICAgIGVudHJpZXM6IFsuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcblxyXG5cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVFeHBvcnQob3B0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcclxuICAgICAgY2FzZSAnZXhjZWwnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIHN0cj8udG9TdHJpbmcoKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xyXG4gICAgY29uc3Qgc2VhcmNoID0gbm9ybWFsaXplKHRleHQpO1xyXG5cclxuICAgIGlmICghdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gQnVpbGQgZmlsdGVyZWQgYnJhbmNoIGdyb3Vwc1xyXG4gICAgY29uc3QgZmlsdGVyZWRHcm91cHMgPSB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzLm1hcChncm91cCA9PiB7XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2VuZEVudHJpZXMgPSBncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMgPSBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZFNlbmQgPSBzZWFyY2hcclxuICAgICAgICA/IG9yaWdpbmFsU2VuZEVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApXHJcbiAgICAgICAgOiBbLi4ub3JpZ2luYWxTZW5kRW50cmllc107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZFJlY2VpdmUgPSBzZWFyY2hcclxuICAgICAgICA/IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApXHJcbiAgICAgICAgOiBbLi4ub3JpZ2luYWxSZWNlaXZlRW50cmllc107XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHsgLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZW50cmllczogZmlsdGVyZWRTZW5kIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczogeyAuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLCBlbnRyaWVzOiBmaWx0ZXJlZFJlY2VpdmUgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g8J+UuSBLZWVwIG9ubHkgYnJhbmNoZXMgdGhhdCBoYXZlIGFueSBtYXRjaGluZyBlbnRyaWVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMgPVxyXG4gICAgICBmaWx0ZXJlZEdyb3Vwcy5maWx0ZXIoZyA9PlxyXG4gICAgICAgIGcuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aCA+IDAgfHwgZy5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIFJlc2V0IGdyaWRzIGZvciB2aXNpYmxlIGJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaCgoZ3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuZW50cmllc10uZm9yRWFjaCgoZW50cmllcywgaWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEFwaSA9IHRoaXMuZ3JpZEFwaXNbaW5kZXggKiAyICsgaWR4XTtcclxuICAgICAgICBpZiAoZ3JpZEFwaSkge1xyXG4gICAgICAgICAgZ3JpZEFwaS5zZXRSb3dEYXRhKGVudHJpZXMpO1xyXG4gICAgICAgICAgaWYgKGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UpIGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5ncmlkQXBpc1tpZF0gPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF0gPSBwYXJhbXMuY29sdW1uQXBpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvU2l6ZUFsbENvbHVtbnMoaWQpLCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKHBhcmFtczogYW55LCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmF1dG9TaXplQWxsQ29sdW1ucyhpZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXV0b1NpemVBbGxDb2x1bW5zKGlkOiBudW1iZXIsIHNraXBIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY29sdW1uQXBpID0gdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF07XHJcbiAgICBpZiAoIWNvbHVtbkFwaSkgcmV0dXJuO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkFwaS5nZXRDb2x1bW5zKCk7XHJcbiAgICAvLyBwcmV2ZW50IHVuZGVmaW5lZCBlcnJvclxyXG4gICAgaWYgKCFjb2x1bW5zPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbGxDb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb2x1bW5BcGkuZ2V0Q29sdW1ucygpLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGFsbENvbHVtbklkcy5wdXNoKGNvbHVtbi5nZXRJZCgpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtbkFwaS5hdXRvU2l6ZUNvbHVtbnMoYWxsQ29sdW1uSWRzLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmb3JtYXROdW1iZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XHJcblxyXG4gICAgY29uc3QgZmllbGQgPSBwYXJhbXMuY29sRGVmLmZpZWxkO1xyXG5cclxuICAgIGlmIChmaWVsZCA9PT0gJ3NldHRsZW1lbnRSYXRlJykge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCg4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCgzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9QZGYoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCB0aXRsZSA9ICdBY2NvdW50aW5nIFJlcG9ydCc7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC5wZGYnO1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgJiBUaW1lIDogJywgYCR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gXSxcclxuICAgIF07XHJcbiAgICAvLyAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLnNlYXJjaENyaXRlcmlhO1xyXG5cclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNzAwLCAyMTBdIH0pO1xyXG5cclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDg7XHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XHJcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcclxuXHJcbiAgICAvLyBMb2dvXHJcbiAgICBpZiAodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10pIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZVsnbG9nb0Jhc2U2NCddLCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgcGFnZVdpZHRoIC8gMiwgdGl0bGVZLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiA3O1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnRleHQobGFiZWwsIDE1LCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSA/PyAnJywgMTUgKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogNyArIDU7XHJcblxyXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnRleHQoJ1NlYXJjaCBDcml0ZXJpYTotJywgbWFyZ2luTGVmdCwgY3VycmVudFkpO1xyXG4gICAgY3VycmVudFkgKz0gODtcclxuXHJcbiAgICBjb25zdCByb3dIZWlnaHRQZXJMaW5lID0gNjtcclxuICAgIGNvbnN0IG1pbkdhcCA9IDI7IC8vIGdhcCBiZXR3ZWVuIGtleSBhbmQgdmFsdWVcclxuICAgIGNvbnN0IGJldHdlZW5Db2x1bW5zR2FwID0gMTU7IC8vIGdhcCBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGNvbHVtbnMgKHlvdSBjYW4gdHVuZSB0aGlzKVxyXG4gICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgIC8vIC0tLSBoZWxwZXIgZnVuY3Rpb24gdG8gbWVhc3VyZSB0b3RhbCB3aWR0aCBvZiBhIGtleS12YWx1ZSBwYWlyIC0tLVxyXG4gICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyAtLS0gY2FsY3VsYXRlIG1heCB3aWR0aCBvZiBsZWZ0IGNvbHVtbiBwYWlycyBkeW5hbWljYWxseSAtLS1cclxuICAgIGxldCBtYXhMZWZ0UGFpcldpZHRoID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2ldKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSBtZWFzdXJlUGFpcldpZHRoKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIGlmICh3aWR0aCA+IG1heExlZnRQYWlyV2lkdGgpIG1heExlZnRQYWlyV2lkdGggPSB3aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBjb21wdXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzaG91bGQgc3RhcnQgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgY29uc3QgcmlnaHRDb2x1bW5TdGFydCA9IGxlZnRDb2x1bW5TdGFydCArIG1heExlZnRQYWlyV2lkdGggKyBiZXR3ZWVuQ29sdW1uc0dhcDtcclxuXHJcbiAgICAvLyAtLS0gcHJpbnQgc2VhcmNoIGNyaXRlcmlhIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICBsZXQgbWF4TGluZUNvdW50ID0gMTtcclxuXHJcbiAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50WSArPSByb3dIZWlnaHRQZXJMaW5lO1xyXG4gICAgfVxyXG4gICAgY3VycmVudFkgKz0gODtcclxuICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIC8vIEJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG5cclxuICAgICAgY29uc3QgYnJhbmNoVGV4dCA9IGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gO1xyXG4gICAgICBkb2MudGV4dChicmFuY2hUZXh0LCAxNSwgY3VycmVudFkpO1xyXG4gICAgICBjdXJyZW50WSArPSA3O1xyXG5cclxuICAgICAgLy8gTG9vcCBzdWJncm91cHMgKFNlbmQgKyBSZWNlaXZlKVxyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJHcm91cC5lbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQoYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCwgMTUsIGN1cnJlbnRZKTtcclxuICAgICAgICBjdXJyZW50WSArPSA1O1xyXG5cclxuICAgICAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMucHJlcGFyZUFjY291bnRpbmdUYWJsZShzdWJHcm91cC5lbnRyaWVzKTtcclxuXHJcbiAgICAgICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XHJcbiAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICBib2R5OiByb3dzLFxyXG4gICAgICAgICAgc3RhcnRZOiBjdXJyZW50WSxcclxuICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLCB0ZXh0Q29sb3I6IDAsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLCBmb250U2l6ZTogOSwgaGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5U3R5bGVzOiB7IGZvbnRTaXplOiA4LCBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSwgdGV4dENvbG9yOiBbMCwgMCwgMF0gfSxcclxuICAgICAgICAgIHN0eWxlczogeyBjZWxsUGFkZGluZzogMiwgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLCBtaW5DZWxsSGVpZ2h0OiA2IH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZID0gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZICsgMTA7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcGFnZUNvdW50ID0gKGRvYyBhcyBhbnkpLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhZ2VDb3VudDsgaSsrKSB7XHJcbiAgICAgIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwiYm9sZFwiKTtcclxuICAgICAgZG9jLnNldFBhZ2UoaSk7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcclxuICAgICAgZG9jLnNldFRleHRDb2xvcigxMDApO1xyXG5cclxuICAgICAgY29uc3QgZm9vdGVyWSA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSA2O1xyXG5cclxuICAgICAgZG9jLnRleHQoXHJcbiAgICAgICAgYFBhZ2UgJHtpfSBvZiAke3BhZ2VDb3VudH1gLFxyXG4gICAgICAgIHBhZ2VXaWR0aCAtIDE1LFxyXG4gICAgICAgIGZvb3RlclksXHJcbiAgICAgICAgeyBhbGlnbjogJ3JpZ2h0JyB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0V4Y2VsKCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGl0bGUgPSAnQWNjb3VudGluZyBSZXBvcnQnO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQueGxzeCc7XHJcblxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdBY2NvdW50aW5nIFJlcG9ydCcpO1xyXG4gICAgbGV0IGN1cnJlbnRSb3cgPSAxO1xyXG5cclxuICAgIC8vIExvZ29cclxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NCkge1xyXG4gICAgICBjb25zdCBiYXNlNjREYXRhID0gdGhpcy5leHBvcnRTZXJ2aWNlLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgIH0pO1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwgeyB0bDogeyBjb2w6IDAsIHJvdzogMCB9LCBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9LCBlZGl0QXM6ICdvbmVDZWxsJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaXRsZVxyXG4gICAgY29uc3QgdGl0bGVSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3cpO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS52YWx1ZSA9IHRpdGxlO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2xlZnQnIH07XHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgRiR7Y3VycmVudFJvd306SiR7Y3VycmVudFJvd31gKTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMztcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxyXG4gICAgICBbJ1JlcG9ydCBVc2VyICYgVGltZSA6ICcsIGAke3RoaXMucmVwb3J0VXNlcn1AJHt0aGlzLnJlcG9ydFRpbWV9YF0sXHJcbiAgICBdO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiBgJHtsYWJlbH06IGAsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIC8vIC0tLSBIZWFkaW5nIC0tLVxyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoY3VycmVudFJvdywgMSwgY3VycmVudFJvdywgOCk7XHJcbiAgICBjb25zdCBoZWFkaW5nQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpO1xyXG4gICAgaGVhZGluZ0NlbGwudmFsdWUgPSAnU2VhcmNoIENyaXRlcmlhOi0nO1xyXG4gICAgaGVhZGluZ0NlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTIgfTtcclxuICAgIGhlYWRpbmdDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMjtcclxuXHJcbiAgICAvLyAtLS0gRHJhdyBwYWlycyBkeW5hbWljYWxseSAodHdvIHBlciByb3cpIC0tLVxyXG4gICAgY29uc3QgbGVmdENvbEVuZCA9IDQ7IC8vIGNvbHVtbnMgMeKAkzQgZm9yIGxlZnQgcGFpclxyXG4gICAgY29uc3QgcmlnaHRDb2xTdGFydCA9IDU7IC8vIGNvbHVtbnMgNeKAkzggZm9yIHJpZ2h0IHBhaXJcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuXHJcbiAgICAgIC8vIExlZnQgcGFpclxyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaV0pIHtcclxuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCAxLCByb3cubnVtYmVyLCBsZWZ0Q29sRW5kKTtcclxuICAgICAgICBjb25zdCBsZWZ0Q2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgICAgIGxlZnRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgbGVmdENlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJpZ2h0IHBhaXJcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCByaWdodENvbFN0YXJ0LCByb3cubnVtYmVyLCByaWdodENvbFN0YXJ0ICsgMyk7XHJcbiAgICAgICAgY29uc3QgcmlnaHRDZWxsID0gcm93LmdldENlbGwocmlnaHRDb2xTdGFydCk7XHJcbiAgICAgICAgcmlnaHRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgcmlnaHRDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gQnJhbmNoZXNcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgYnJhbmNoUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICBicmFuY2hSb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiAnQnJhbmNoIChOYW1lICYgQ29kZSk6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IGdyb3VwLmJyYW5jaE5hbWVBbmRDb2RlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgIC8vIExvb3Agc3ViZ3JvdXBzXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJHcm91cFJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICBzdWJHcm91cFJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiAnU3ViIEdyb3VwOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IHN1Ykdyb3VwLnN1Ykdyb3VwTmFtZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgICAvLyBIZWFkZXJzXHJcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLnByZXBhcmVBY2NvdW50aW5nVGFibGUoc3ViR3JvdXAuZW50cmllcyk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgICAgICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgICAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgICAgICAgIGNlbGwuYm9yZGVyID0geyB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9IH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJvd3NcclxuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgICByLmZvckVhY2goKHZhbCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICBjZWxsLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXV0by1hZGp1c3QgY29sdW1uIHdpZHRocyAoaW5jbHVkaW5nIFNyIE5vKVxyXG4gICAgY29uc3QgYWxsSGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcbiAgICBhbGxIZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyLmxlbmd0aDsgLy8gc3RhcnQgd2l0aCBoZWFkZXIgbGVuZ3RoXHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgLy8gU3IgTm8gY29sdW1uIChpID0gMCkgaXMganVzdCBudW1iZXJzXHJcbiAgICAgICAgICAgIGxldCB2YWwgPSBpID09PSAwID8gKHN1Ykdyb3VwLmVudHJpZXMuaW5kZXhPZihlbnRyeSkgKyAxKS50b1N0cmluZygpIDogKGVudHJ5W3RoaXMuY29sdW1uRGVmc1tpIC0gMV0/LmZpZWxkXSA/PyAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHZhbC50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgbWF4TGVuZ3RoID0gbGVuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPSBtYXhMZW5ndGggKyA1OyAvLyBwYWRkaW5nXHJcbiAgICB9KTtcclxuXHJcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFjY291bnRpbmdUYWJsZShkYXRhOiBhbnlbXSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjID0+IGMuaGVhZGVyTmFtZSldO1xyXG5cclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzOiBbXSB9OyAvLyByZXR1cm4gaGVhZGVycyBvbmx5LCBlbXB0eSByb3dzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyb3csIGkpID0+IHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICBpICsgMSxcclxuICAgICAgICAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICBsZXQgdmFsID0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgICAgICBpZiAodmFsID09IG51bGwpIHJldHVybiAnJztcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvQ3N2KCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQuY3N2JztcclxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcm93cy5wdXNoKCdSZXBvcnQgVGl0bGU6IEFjY291bnRpbmcgUmVwb3J0Jyk7XHJcbiAgICByb3dzLnB1c2goJycpO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgUGVyaW9kOiAke3RoaXMucmVwb3J0UGVyaW9kfWApO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgVXNlciAmIFRpbWU6ICR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcblxyXG4gICAgLy8gLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ3JpdGVyaWE/Lmxlbmd0aCkge1xyXG4gICAgICByb3dzLnB1c2goJ1NlYXJjaCBDcml0ZXJpYTotJyk7XHJcblxyXG4gICAgICAvLyBjYWxjdWxhdGUgbWF4IGxlbmd0aCBvZiBsZWZ0IGtleS12YWx1ZSBwYWlycyBmb3IgcGFkZGluZ1xyXG4gICAgICBjb25zdCBtYXhMZWZ0TGVuZ3RoID0gTWF0aC5tYXgoLi4uc2VhcmNoQ3JpdGVyaWEubWFwKChbaywgdl0pID0+IChrICsgJyAnICsgdikubGVuZ3RoKSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG5cclxuICAgICAgICBjb25zdCBsZWZ0VGV4dCA9IGxlZnQgPyBgJHtsZWZ0WzBdfSAke2xlZnRbMV19YC5wYWRFbmQobWF4TGVmdExlbmd0aCArIDUsICcgJykgOiAnJztcclxuICAgICAgICBjb25zdCByaWdodFRleHQgPSByaWdodCA/IGAke3JpZ2h0WzBdfSAke3JpZ2h0WzFdfWAgOiAnJztcclxuXHJcbiAgICAgICAgLy8gIEVhY2ggcm93IGluIHNpbmdsZSBDU1Ygcm93OyBmaXJzdCBhbmQgc2Vjb25kIHBhaXIgc2VwYXJhdGVkIGJ5IGEgY29sdW1uXHJcbiAgICAgICAgcm93cy5wdXNoKGBcIiR7bGVmdFRleHR9JHtyaWdodFRleHR9XCJgKTtcclxuICAgICAgfVxyXG4gICAgICByb3dzLnB1c2goJycpOyAvLyBibGFuayBsaW5lIGFmdGVyIHNlYXJjaCBjcml0ZXJpYVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgcm93cy5wdXNoKGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gKTtcclxuXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCk7XHJcblxyXG4gICAgICAgIC8vICBBZGQgXCJTciBOb1wiIGF0IHRoZSBiZWdpbm5pbmcgb2YgaGVhZGVyc1xyXG4gICAgICAgIHJvd3MucHVzaChbJ1wiU3IgTm9cIicsIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IGBcIiR7Y29sLmhlYWRlck5hbWV9XCJgKV0uam9pbignLCcpKTtcclxuXHJcbiAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAvLyAgQWRkIHNlcmlhbCBudW1iZXIgYXQgc3RhcnQgb2YgZWFjaCByb3dcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IFtcclxuICAgICAgICAgICAgKGlkeCArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBlbnRyeVtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIGlmIChbJ2Ftb3VudFBhaWQnLCAnc2VydmljZUZlZScsICd0YXgnLCAncHJpbmNpcGxlU2VuZEFtb3VudCcsICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5J10uaW5jbHVkZXMoY29sLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbH1cImA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdLmpvaW4oJywnKTtcclxuICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goJycpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcm93cy5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBwYXlsb2FkPy5tb2RhbCB8fCBwYXlsb2FkO1xyXG5cclxuICAgIGNvbnN0IHJlcTogQWNjb3VudGluZ1JlcG9ydFJlcXVlc3QgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9kYWwuZnJvbURhdGUsIC8vIHl5eXktTU0tZGQgZnJvbSB0aGUgZmlsdGVyXHJcbiAgICAgIGVuZERhdGU6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgc2VuZENvdW50cnlDb2RlOiBtb2RhbC5zZW5kQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgcmVjdkNvdW50cnlDb2RlOiBtb2RhbC5yZWNlaXZlQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogbW9kYWwuY2xpZW50ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIiksXHJcbiAgICAgIHBheW91dEN1cnJlbmN5OiBtb2RhbC5jdXJyZW5jeSA/PyAnQUxMJyxcclxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiBtb2RhbC5wcm9kdWN0ID8/ICdBTEwnLFxyXG4gICAgICBicmFuY2hDb2RlOiBtb2RhbC5icmFuY2ggPz8gJ0FMTCcsXHJcbiAgICAgIGNvbXBhbnlDb2RlOiAnQUxMJyAvLyBvciAnQkgnIGlmIHlvdXIgQVBJIHJlcXVpcmVzIGl0IHNwZWNpZmljYWxseVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhID0gcGF5bG9hZC5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICB0aGlzLmdldEFjY291bnRpbmdSZXBvcnQocmVxKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZvcm1WYWxpZChpc1ZhbGlkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gaXNWYWxpZDtcclxuICB9XHJcblxyXG59XHJcbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIiAoZm9ybVZhbGlkKT1cImhhbmRsZUZvcm1WYWxpZCgkZXZlbnQpXCI+PC9saWItc2VhcmNoLWZpbHRlcj5cclxuXHJcbjxhcHAtbG9hZGVyIGNsYXNzPVwiXCIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsIT11bmRlZmluZWQgJiYgbG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZSAmJiAhbm9EYXRhRm91bmQgJiYgaXNGb3JtVmFsaWRcIlxyXG4gIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMzBweDtcIj5cclxuXHJcbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCIgW21ldGFEYXRhT25lXT1cImxlZnREYXRhXCJcclxuICAgIFttZXRhRGF0YVR3b109XCJyaWdodERhdGFcIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIiAoc2VhcmNoRXZlbnQpPVwib25TZWFyY2goJGV2ZW50KVwiPjwvbGliLW1ldGFkYXRhPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoXCI+XHJcbiAgICA8bmdiLWFjY29yZGlvbiAjYWNjPVwibmdiQWNjb3JkaW9uXCIgW2Nsb3NlT3RoZXJzXT1cImZhbHNlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFjY291bnRpbmdSZXBvcnRNb2RlbD8uYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPG5nYi1wYW5lbCBbaWRdPVwiJ3BhbmVsLScgKyBpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGFuZWwtY2xzXCI+XHJcbiAgICAgICAgICAgICAge3sgZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgICAgPCEtLSBTZW5kIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgW2RlZmF1bHRTaXplXT1cIicxNSdcIlxyXG4gICAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMl1cIj5cclxuICAgICAgICAgICAgICAgIDwvbGliLXBhZ2Utc2l6ZS1zZWxlY3Rvcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWQgZ3JpZC1zaXplXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQsIGkgKiAyKVwiIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmVjZWl2ZSBUcmFuc2FjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ViZ3JvdXBjb2x1bW5cIj57eyBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLnN1Ykdyb3VwTmFtZSB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcclxuICAgICAgICAgICAgICAgICAgW2dyaWRBcGldPVwiZ3JpZEFwaXNbaSAqIDIgKyAxXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZCBncmlkLXNpemVcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXCIgW3Jvd0hlaWdodF09XCIyMFwiIFtoZWFkZXJIZWlnaHRdPVwiMjRcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudCwgaSAqIDIgKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZ2ItcGFuZWw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJub0RhdGFGb3VuZCAmJiBsb2FkaW5nU3RhdGUhPUNvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+XHJcbiAgTm8gRGF0YSBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cclxuPC9kaXY+Il19
|