gamma-app-controller 4.0.0 → 4.0.2
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/application-controller/support-components/heat-map/heat-map.component.mjs +33 -3
- package/esm2020/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.mjs +70 -17
- package/esm2020/lib/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +37 -35
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +4 -3
- package/fesm2015/gamma-app-controller.mjs +1942 -1856
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +1940 -1855
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/support-components/heat-map/heat-map.component.d.ts +5 -0
- package/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -45,10 +45,10 @@ export class GammaHeatChartComponent {
|
|
|
45
45
|
else {
|
|
46
46
|
this.isLoader = true;
|
|
47
47
|
this.page_config = value;
|
|
48
|
-
|
|
48
|
+
debugger;
|
|
49
49
|
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
50
50
|
this.heatmapChartConfig = value.kpiConfig.dataConfig;
|
|
51
|
-
this.colorArray = value.kpiConfig.dataConfig.color;
|
|
51
|
+
this.colorArray = value.kpiConfig.dataConfig.color || ["rgba(45, 110, 18,1)", "rgba(255, 204, 0,1)"];
|
|
52
52
|
this.getHeatmapData(value.kpiConfig.dataSource);
|
|
53
53
|
setTimeout(() => {
|
|
54
54
|
this.isLoader = false;
|
|
@@ -58,7 +58,7 @@ export class GammaHeatChartComponent {
|
|
|
58
58
|
setTimeout(() => {
|
|
59
59
|
this.dataSourseForTable = [];
|
|
60
60
|
this.tableDataConfig['columns'] = [];
|
|
61
|
-
this.isLoader =
|
|
61
|
+
this.isLoader = true;
|
|
62
62
|
}, 200);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -107,7 +107,9 @@ export class GammaHeatChartComponent {
|
|
|
107
107
|
const allEntries = [];
|
|
108
108
|
const topArg = this.heatmapChartConfig.topArgument;
|
|
109
109
|
const leftArg = this.heatmapChartConfig.leftArgument;
|
|
110
|
-
const
|
|
110
|
+
const mapColumn = this.heatmapChartConfig.columns.filter(col => col.displayFor === 'map' && col.visible);
|
|
111
|
+
const tooltipColumns = this.heatmapChartConfig.columns.filter(col => col.displayFor === 'tooltip' && col.visible);
|
|
112
|
+
const valueField = mapColumn.length > 0 ? mapColumn[0].dataField : null;
|
|
111
113
|
data.forEach(entry => {
|
|
112
114
|
const formattedDate = (moment(entry[topArg]).format('YYYY-MM-DD')) ? moment(entry[topArg]).format('YYYY-MM-DD') : topArg;
|
|
113
115
|
uniqueDates.add(formattedDate);
|
|
@@ -135,7 +137,14 @@ export class GammaHeatChartComponent {
|
|
|
135
137
|
if (!dateMap[date]) {
|
|
136
138
|
dateMap[date] = [];
|
|
137
139
|
}
|
|
138
|
-
let toolTip =
|
|
140
|
+
let toolTip = '';
|
|
141
|
+
if (valueField) {
|
|
142
|
+
toolTip += `${this.commonService.convertString(valueField)} : ${item[valueField]}\n`;
|
|
143
|
+
}
|
|
144
|
+
tooltipColumns.forEach(col => {
|
|
145
|
+
const value = item[col.dataField];
|
|
146
|
+
toolTip += `${col.caption} : ${value}\n`;
|
|
147
|
+
});
|
|
139
148
|
dateMap[date].push({
|
|
140
149
|
[leftArg]: item[leftArg],
|
|
141
150
|
[valueField]: item[valueField],
|
|
@@ -162,7 +171,9 @@ export class GammaHeatChartComponent {
|
|
|
162
171
|
const dataSourceMap = {};
|
|
163
172
|
const topArg = this.heatmapChartConfig.topArgument;
|
|
164
173
|
const leftArg = this.heatmapChartConfig.leftArgument;
|
|
165
|
-
const
|
|
174
|
+
const mapColumn = this.heatmapChartConfig.columns.filter(col => col.displayFor === 'map' && col.visible);
|
|
175
|
+
const tooltipColumns = this.heatmapChartConfig.columns.filter(col => col.displayFor === 'tooltip' && col.visible);
|
|
176
|
+
const valueField = mapColumn.length > 0 ? mapColumn[0].dataField : null;
|
|
166
177
|
data.forEach(item => {
|
|
167
178
|
const rowKey = item[leftArg];
|
|
168
179
|
const columnKey = moment(item[topArg]).format('YYYY-MM-DD');
|
|
@@ -172,7 +183,14 @@ export class GammaHeatChartComponent {
|
|
|
172
183
|
dataset: []
|
|
173
184
|
};
|
|
174
185
|
}
|
|
175
|
-
let toolTip =
|
|
186
|
+
let toolTip = '';
|
|
187
|
+
if (valueField) {
|
|
188
|
+
toolTip += `${this.commonService.convertString(valueField)} : ${item[valueField]} | `;
|
|
189
|
+
}
|
|
190
|
+
tooltipColumns.forEach(col => {
|
|
191
|
+
const value = item[col.dataField];
|
|
192
|
+
toolTip += `${col.caption} : ${value} | `;
|
|
193
|
+
});
|
|
176
194
|
dataSourceMap[rowKey].dataset.push({
|
|
177
195
|
...item,
|
|
178
196
|
toolTip: toolTip,
|
|
@@ -298,26 +316,61 @@ export class GammaHeatChartComponent {
|
|
|
298
316
|
getObjectKeys(obj) {
|
|
299
317
|
return Object.keys(obj);
|
|
300
318
|
}
|
|
301
|
-
callServiceFunction(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
319
|
+
callServiceFunction(data) {
|
|
320
|
+
const mapColumn = this.heatmapChartConfig.columns.find(col => col.displayFor === 'map' && col.visible);
|
|
321
|
+
const functionName = mapColumn ? mapColumn.enrichName : null;
|
|
322
|
+
const valueField = mapColumn ? mapColumn.dataField : null;
|
|
323
|
+
if (functionName != "") {
|
|
324
|
+
if (data[valueField] !== undefined) {
|
|
325
|
+
if (typeof this.commonService[functionName] === "function") {
|
|
326
|
+
return this.commonService[functionName](data[valueField]);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
console.error(`Function ${functionName} not found in CommonService`);
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
305
332
|
}
|
|
306
333
|
else {
|
|
307
|
-
|
|
308
|
-
return null;
|
|
334
|
+
return "No Data";
|
|
309
335
|
}
|
|
310
336
|
}
|
|
311
337
|
else {
|
|
312
|
-
return
|
|
338
|
+
return data[valueField];
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
onRowClick(data) {
|
|
342
|
+
const title_params = data[this.page_config.kpiConfig.dataConfig.commonConfig['dataField']];
|
|
343
|
+
let title = this.getParamsTitle(data);
|
|
344
|
+
let obj = {
|
|
345
|
+
data: data,
|
|
346
|
+
keyToPass: this.page_config.kpiConfig.keyToPass,
|
|
347
|
+
tableTitle: (this.page_parms) ? this.page_parms + title : title,
|
|
348
|
+
viewId: this.page_config.viewId,
|
|
349
|
+
drillDownType: "natural",
|
|
350
|
+
drilldownFrom: this.page_config.viewId,
|
|
351
|
+
drilldownTo: "",
|
|
352
|
+
};
|
|
353
|
+
this.oRowClick.emit(obj);
|
|
354
|
+
}
|
|
355
|
+
getParamsTitle(data) {
|
|
356
|
+
const config = this.page_config.kpiConfig.dataConfig.commonConfig;
|
|
357
|
+
const titleTemplate = config['title'];
|
|
358
|
+
const hasParams = /\$P\{.*?\}/.test(titleTemplate);
|
|
359
|
+
if (!hasParams) {
|
|
360
|
+
const title_params = data[config['dataField']];
|
|
361
|
+
return titleTemplate + (title_params ?? '');
|
|
313
362
|
}
|
|
363
|
+
let result = titleTemplate.replace(/\$P\{(.*?)\}/g, (_, key) => {
|
|
364
|
+
return data[key] ?? '';
|
|
365
|
+
});
|
|
366
|
+
return result;
|
|
314
367
|
}
|
|
315
368
|
}
|
|
316
369
|
GammaHeatChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaHeatChartComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
317
|
-
GammaHeatChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaHeatChartComponent, selector: "app-gamma-heatmap", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'simple'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-center\">\n <div class=\"flex-shrink-0 w-48 h-10 flex items-center justify-center\"></div>\n <div *ngFor=\"let item of heatChartDataSource.argumentValue\"\n class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 text-sm flex items-center justify-center\">\n {{item}}\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let item of heatChartDataSource.dataSet\">\n <div class=\"flex flex-row\">\n <div class=\"h-8 flex text-sm items-center min-w-48 justify-end px-2 inline\">\n {{ item.datasource }}\n </div>\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-start\">\n <ng-container *ngFor=\"let box of item.dataset\">\n <div class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800\"\n [ngStyle]=\"{ 'background-color': box.color }\" [matTooltip]=\"box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ callServiceFunction(
|
|
370
|
+
GammaHeatChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaHeatChartComponent, selector: "app-gamma-heatmap", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'simple'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-center\">\n <div class=\"flex-shrink-0 w-48 h-10 flex items-center justify-center\"></div>\n <div *ngFor=\"let item of heatChartDataSource.argumentValue\"\n class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 text-sm flex items-center justify-center\">\n {{item}}\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let item of heatChartDataSource.dataSet\">\n <div class=\"flex flex-row\">\n <div class=\"h-8 flex text-sm items-center min-w-48 justify-end px-2 inline\">\n {{ item.datasource }}\n </div>\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-start\">\n <ng-container *ngFor=\"let box of item.dataset\">\n <div (click)=\"onRowClick(box)\" class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800\"\n [ngStyle]=\"{ 'background-color': box.color }\" [matTooltip]=\"box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ callServiceFunction(box) }}\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'topx'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"flex flex-row\">\n <ng-container *ngFor=\"let header of heatChartDataSource.argumentValue\">\n <div class=\"min-w-32 text-sm font-medium text-center mb-2\">\n {{ header }}\n </div>\n </ng-container>\n </div>\n\n <div *ngFor=\"let row of heatChartDataSource.dataSet\" class=\"flex flex-row\">\n <ng-container *ngFor=\"let cell of row\">\n <div *ngIf=\"cell.box\" (click)=\"onRowClick(cell.box)\"\n class=\"h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800 min-w-32 cursor-pointer\"\n [ngStyle]=\"{ 'background-color': cell.box.color }\" [matTooltip]=\"cell.box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ cell.box[heatmapChartConfig.leftArgument] }}\n ({{callServiceFunction(cell.box) }})\n </div>\n <div *ngIf=\"!cell.box\" class=\"h-8 min-w-32\"></div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.LoaderComponent, selector: "app-loader" }] });
|
|
318
371
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaHeatChartComponent, decorators: [{
|
|
319
372
|
type: Component,
|
|
320
|
-
args: [{ selector: 'app-gamma-heatmap', template: "<div class=\"mx-2 bg-gray-800\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'simple'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-center\">\n <div class=\"flex-shrink-0 w-48 h-10 flex items-center justify-center\"></div>\n <div *ngFor=\"let item of heatChartDataSource.argumentValue\"\n class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 text-sm flex items-center justify-center\">\n {{item}}\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let item of heatChartDataSource.dataSet\">\n <div class=\"flex flex-row\">\n <div class=\"h-8 flex text-sm items-center min-w-48 justify-end px-2 inline\">\n {{ item.datasource }}\n </div>\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-start\">\n <ng-container *ngFor=\"let box of item.dataset\">\n <div class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800\"\n [ngStyle]=\"{ 'background-color': box.color }\" [matTooltip]=\"box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ callServiceFunction(
|
|
373
|
+
args: [{ selector: 'app-gamma-heatmap', template: "<div class=\"mx-2 bg-gray-800\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'simple'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-center\">\n <div class=\"flex-shrink-0 w-48 h-10 flex items-center justify-center\"></div>\n <div *ngFor=\"let item of heatChartDataSource.argumentValue\"\n class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 text-sm flex items-center justify-center\">\n {{item}}\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let item of heatChartDataSource.dataSet\">\n <div class=\"flex flex-row\">\n <div class=\"h-8 flex text-sm items-center min-w-48 justify-end px-2 inline\">\n {{ item.datasource }}\n </div>\n <div class=\"inline-block\">\n <div class=\"flex flex-nowrap justify-start\">\n <ng-container *ngFor=\"let box of item.dataset\">\n <div (click)=\"onRowClick(box)\" class=\"flex-shrink-0 min-w-22 max-w-[20%] h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800\"\n [ngStyle]=\"{ 'background-color': box.color }\" [matTooltip]=\"box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ callServiceFunction(box) }}\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"heatmapChartConfig.chartFormat == 'topx'\">\n <div class=\"p-3 h-auto overflow-x-auto\">\n <div class=\"flex flex-row\">\n <ng-container *ngFor=\"let header of heatChartDataSource.argumentValue\">\n <div class=\"min-w-32 text-sm font-medium text-center mb-2\">\n {{ header }}\n </div>\n </ng-container>\n </div>\n\n <div *ngFor=\"let row of heatChartDataSource.dataSet\" class=\"flex flex-row\">\n <ng-container *ngFor=\"let cell of row\">\n <div *ngIf=\"cell.box\" (click)=\"onRowClick(cell.box)\"\n class=\"h-8 border-2 text-sm cursor-pointer flex items-center justify-center text-gray-800 min-w-32 cursor-pointer\"\n [ngStyle]=\"{ 'background-color': cell.box.color }\" [matTooltip]=\"cell.box.toolTip\"\n matTooltipClass=\"custom-tooltip\">\n {{ cell.box[heatmapChartConfig.leftArgument] }}\n ({{callServiceFunction(cell.box) }})\n </div>\n <div *ngIf=\"!cell.box\" class=\"h-8 min-w-32\"></div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>" }]
|
|
321
374
|
}], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { getTableConfigOutPut: [{
|
|
322
375
|
type: Output
|
|
323
376
|
}], oRowClick: [{
|
|
@@ -330,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
330
383
|
type: Input,
|
|
331
384
|
args: ['chartDataSource']
|
|
332
385
|
}] } });
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtaGVhdG1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtaGVhdG1hcC9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1oZWF0bWFwL2dhbW1hLWhlYXRtYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLE1BQU0sTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7O0FBT25FLE1BQU0sT0FBTyx1QkFBdUI7SUEyRWxDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBekUvQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFHN0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVDQUF1QyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBSTlILGNBQVMsR0FBVyxPQUFPLENBQUM7UUFLNUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBQzlCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUk5Qix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFHL0IsbUJBQWMsR0FBUTtZQUNwQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsaUJBQWlCLEVBQUU7Z0JBQ2pCLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTthQUNkO1NBQ0YsQ0FBQztRQUNGLCtCQUEwQixHQUFRLEVBQUUsQ0FBQztRQUdyQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQixlQUFVLEdBQUcsc0JBQXNCLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxzQkFBc0IsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLHNCQUFzQixDQUFDO1FBRXJDLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUNaLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUEyQlMsQ0FBQztJQXpCcEQsSUFDSSxlQUFlLENBQUMsS0FBSztRQUN2QixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsT0FBTztTQUNSO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDcEMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN6RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNUO2lCQUFNO2dCQUNMLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUlELFFBQVE7SUFDUixDQUFDO0lBRUQsY0FBYyxDQUFDLFdBQVc7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLElBQUksTUFBTSxFQUFFO2dCQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFakYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUM7YUFDekQ7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLEVBQUU7Z0JBQzVELE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsQ0FBQzthQUN6RDtZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1NBQzdCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUM3QjtJQWdCSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsT0FBYztRQUNyQyxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFdkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEdBQUcsR0FBVSxFQUFFLENBQUM7WUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ1AsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJO29CQUNoQixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7aUJBQzdCLENBQUMsQ0FBQzthQUNKO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxJQUFXO1FBQ3hDLE1BQU0sTUFBTSxHQUFVLEVBQUUsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztRQUU3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDckQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pILFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFL0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhO29CQUN2QixDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO29CQUM3QixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO2lCQUNwQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUMvQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNqRjthQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDckY7YUFBTTtZQUNMLFdBQVcsR0FBRyxJQUFJLENBQUMsMkNBQTJDLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3hGO1FBRUQsTUFBTSxPQUFPLEdBQThCLEVBQUUsQ0FBQztRQUU5QyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxPQUFPLEdBQUcsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDMUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDakIsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN4QixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEYsS0FBSyxNQUFNLElBQUksSUFBSSxXQUF1QixFQUFFO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTthQUM3QixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU87WUFDTCxNQUFNO1lBQ04sV0FBVyxFQUFFLFdBQVc7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBSTtRQUNmLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDckQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMxQixhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQ3RCLFVBQVUsRUFBRSxNQUFNO29CQUNsQixPQUFPLEVBQUUsRUFBRTtpQkFDWixDQUFDO2FBQ0g7WUFDRCxJQUFJLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLFNBQVMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFFek8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLEdBQUcsSUFBSTtnQkFDTixPQUFPLEVBQUUsT0FBTztnQkFDakIsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO2FBRXBCLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxJQUFJLGdCQUFnQixDQUFDO1lBRXJCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7Z0JBQzlDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNySDtpQkFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFO2dCQUNyRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0NBQXdDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekg7aUJBQU07Z0JBQ0wsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBRTVIO1lBRUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdkIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO3FCQUFNO29CQUNMLE9BQU87d0JBQ0wsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJO3dCQUNkLE9BQU8sRUFBRSxTQUFTO3dCQUNsQixTQUFTLEVBQUUsQ0FBQzt3QkFDWixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxLQUFLLEVBQUUsb0JBQW9CO3FCQUM1QixDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLFVBQVUsRUFBRSxHQUFHO2dCQUNmLE9BQU8sRUFBRSxlQUFlO2FBQ3pCLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTztZQUNMLE1BQU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLGdCQUFnQjtTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUlELG9DQUFvQyxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQ25ELFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5FLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDckcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTdDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCx3Q0FBd0MsQ0FBQyxRQUFRLEVBQUUsTUFBTTtRQUN2RCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3QyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUMzQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQzNDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsMkNBQTJDLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDMUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFN0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU87WUFDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2QsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDZCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRO1FBQ2hFLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRTtZQUM1QixJQUFJLFFBQVEsR0FBRyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNsRSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNsQzthQUFNO1lBQ0wsT0FBTyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtTQUNwQztJQUVILENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxPQUFZO1FBQzNCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixTQUFTLEVBQUUsR0FBRztnQkFDZCxPQUFPLEVBQUUsR0FBRzthQUNiLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJRCxhQUFhLENBQUMsR0FBUTtRQUNwQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUdELG1CQUFtQixDQUFDLFlBQW9CLEVBQUUsS0FBSztRQUU3QyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUMxRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLFlBQVksNkJBQTZCLENBQUMsQ0FBQztnQkFDckUsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQTtTQUNqQjtJQUVILENBQUM7O29IQW5ZVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixnU0NYcEMsdW5IQTZETTsyRkRsRE8sdUJBQXVCO2tCQUpuQyxTQUFTOytCQUNFLG1CQUFtQjtvR0FnRFosb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsNEJBQTRCO3NCQUE1QyxNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS1oZWF0bWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbW1hLWhlYXRtYXAuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBHYW1tYUhlYXRDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gaXNKc29uUHJldmlldzogYm9vbGVhblxuICBkYXRhU291cnNlRm9yVGFibGU6IGFueSA9IFtdO1xuICBqc2FvbkRhdGFzb3VyY2U6IGFueTtcbiAgY29uZmlnQ29sdW1lOiBhbnk7XG4gIGlzTG9hZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgdGFibGVEYXRhQ29uZmlnOiBhbnkgPSB7fTtcbiAgZW5yaWNoTmFtZUxpc3QgPSBbXCJmb3JtYXRCeXRlc1wiLCBcImZvcm1hdEJ5dHNUb0tiXCIsIFwiZm9ybWF0Qnl0c1RvR2JcIiwgXCJyZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzXCIsIFwiZm9ybWF0Qnl0ZXN2MlwiXVxuICBwYWdlX2NvbmZpZzogYW55O1xuICBwYWdlX3Bhcm1zOiBhbnk7XG4gIHBhZ2Vfc2VsZWN0ZWRfb3BlcmF0b3I6IGFueTtcbiAgYWN0aXZlVGFiOiBzdHJpbmcgPSAnYmFzaWMnO1xuXG4gIHRhYmxlSGVpZ2h0OiBhbnk7XG5cblxuICBpc0FkdmFuY2VGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNIZWF0TWFwQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoZWF0Q2hhcnREYXRhU291cmNlOiBhbnkgPSB7fTtcbiAgY2hhcnREYXRhRm9yVG9vbHRpcDogYW55ID0ge307XG5cblxuXG4gIGRhdGFTb3Vyc2VGb3JIZWF0TWFwOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRWaWV3Q29uZmlnczogYW55O1xuXG4gIHZpZXdQcm9wZXJ0aWVzOiBhbnkgPSB7XG4gICAgZW5hYmxlQ2xpY2tFdmVudDogZmFsc2UsXG4gICAgZW5hYmxlUmlnaHRDbGlja0V2ZW50OiB0cnVlLFxuICAgIGNsaWNrRXZlbnRPcHRpb25zOiB7XG4gICAgICBhc3NvY2lhdGVkVmlld3M6IFtdLFxuICAgICAgZXZlbnRUeXBlOiBcIlwiXG4gICAgfVxuICB9O1xuICBvcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZTogYW55ID0gW107XG4gIHNlbGVjdGVkVGFibGVWaWV3VHlwZTogYW55O1xuXG4gIGFsbENvbmZpZ3VyZWRWaWV3czogYW55ID0gW107XG4gIGNvbG9yQXJyYXk6IGFueSA9IFtdO1xuICBmaXJzdENvbG9yID0gXCJyZ2JhKDQ1LCAxMTAsIDE4LCAxKVwiO1xuICBzZWNvbmRDb2xvciA9IFwicmdiYSgyNTUsIDIwNCwgMCwgMSlcIjtcbiAgc2luZ2xlQ29sb3IgPSBcInJnYmEoMjU1LCAyMDQsIDAsIDEpXCI7XG5cbiAgaGVhdG1hcENoYXJ0Q29uZmlnOiBhbnkgPSB7fTtcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUYWJsZUNvbmZpZ091dFB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb1Jvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcmlnaHRDbGlja0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCdjaGFydERhdGFTb3VyY2UnKVxuICBzZXQgY2hhcnREYXRhU291cmNlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG4gICAgICAgIHRoaXMuY29sb3JBcnJheSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbG9yO1xuICAgICAgICB0aGlzLmdldEhlYXRtYXBEYXRhKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cnNlRm9yVGFibGUgPSBbXTtcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YUNvbmZpZ1snY29sdW1ucyddID0gW107XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIGdldEhlYXRtYXBEYXRhKGhlYXRNYXBEYXRhKSB7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlID0ge307XG4gICAgdGhpcy5pc0FkdmFuY2VGaWx0ZXIgPSBmYWxzZTtcbiAgICBpZiAoaGVhdE1hcERhdGEgJiYgaGVhdE1hcERhdGEubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpZiAodGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY2hhcnRGb3JtYXQgPT0gXCJ0b3B4XCIpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0ZVdpc2VDb2xvckNvZGVkRGF0YShoZWF0TWFwRGF0YSk7XG4gICAgICAgIC8vIHVuaXF1ZURhdGVzLnNvcnQoKTtcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlLmRhdGFTZXQgPSB0aGlzLmdldFRyYW5zcG9zZWRIZWF0bWFwRGF0YShyZXN1bHQpO1xuICAgICAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gICAgICB9IGVsc2UgaWYgKCh0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5jaGFydEZvcm1hdCA9PSBcInNpbXBsZVwiKSkge1xuICAgICAgICBjb25zdCB7IHJlc3VsdCwgdW5pcXVlRGF0ZXMgfSA9IHRoaXMuZ2VuZXJhdGVEYXRhKGhlYXRNYXBEYXRhKTtcbiAgICAgICAgLy8gdW5pcXVlRGF0ZXMuc29ydCgpO1xuICAgICAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJkYXRhU2V0XCJdID0gcmVzdWx0O1xuICAgICAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNIZWF0TWFwQ2xpY2sgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0hlYXRNYXBDbGljayA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZSA9IHt9O1xuICAgIC8vIHRoaXMuaXNBZHZhbmNlRmlsdGVyID0gZmFsc2U7XG5cbiAgICAvLyBpZiAoaGVhdE1hcERhdGEgJiYgaGVhdE1hcERhdGEubGVuZ3RoICE9PSAwKSB7XG4gICAgLy8gICBjb25zdCB7IHJlc3VsdCwgdW5pcXVlRGF0ZXMgfSA9IHRoaXMuZ2VuZXJhdGVEYXRhKGhlYXRNYXBEYXRhKVxuICAgIC8vICAgdW5pcXVlRGF0ZXMuc29ydCgpO1xuICAgIC8vICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiZGF0YVNldFwiXSA9IHJlc3VsdDtcbiAgICAvLyAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImFyZ3VtZW50VmFsdWVcIl0gPSB1bmlxdWVEYXRlcztcbiAgICAvLyAgIHRoaXMuaXNIZWF0TWFwQ2xpY2sgPSBmYWxzZTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgdGhpcy5pc0hlYXRNYXBDbGljayA9IGZhbHNlO1xuICAgIC8vIH1cblxuXG4gIH1cblxuICBnZXRUcmFuc3Bvc2VkSGVhdG1hcERhdGEoZGF0YVNldDogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgdHJhbnNwb3NlZDogYW55W10gPSBbXTtcbiAgICBjb25zdCBtYXhCb3hlcyA9IE1hdGgubWF4KC4uLmRhdGFTZXQubWFwKGl0ZW0gPT4gaXRlbS5kYXRhc2V0Lmxlbmd0aCkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhCb3hlczsgaSsrKSB7XG4gICAgICBjb25zdCByb3c6IGFueVtdID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGFTZXQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgYm94ID0gZGF0YVNldFtqXS5kYXRhc2V0W2ldO1xuICAgICAgICByb3cucHVzaCh7XG4gICAgICAgICAgYm94OiBib3ggfHwgbnVsbCxcbiAgICAgICAgICBkYXRlOiBkYXRhU2V0W2pdLnJlY29yZF9kYXRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdHJhbnNwb3NlZC5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zcG9zZWQ7XG4gIH1cblxuICBnZW5lcmF0ZURhdGVXaXNlQ29sb3JDb2RlZERhdGEoZGF0YTogYW55W10pIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgY29uc3QgdW5pcXVlRGF0ZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgYWxsRW50cmllczogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IHRvcEFyZyA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnRvcEFyZ3VtZW50O1xuICAgIGNvbnN0IGxlZnRBcmcgPSB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5sZWZ0QXJndW1lbnQ7XG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLmNvbHVtbnNbMF0uZGF0YUZpZWxkO1xuXG4gICAgZGF0YS5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSAobW9tZW50KGVudHJ5W3RvcEFyZ10pLmZvcm1hdCgnWVlZWS1NTS1ERCcpKSA/IG1vbWVudChlbnRyeVt0b3BBcmddKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IHRvcEFyZztcbiAgICAgIHVuaXF1ZURhdGVzLmFkZChmb3JtYXR0ZWREYXRlKTtcblxuICAgICAgZW50cnkucmVzdWx0RGF0YXNldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBhbGxFbnRyaWVzLnB1c2goe1xuICAgICAgICAgIFt0b3BBcmddOiBmb3JtYXR0ZWREYXRlLFxuICAgICAgICAgIFtsZWZ0QXJnXTogaXRlbVtgJHtsZWZ0QXJnfWBdLFxuICAgICAgICAgIFt2YWx1ZUZpZWxkXTogaXRlbVtgJHt2YWx1ZUZpZWxkfWBdXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgY29sb3JlZERhdGE7XG4gICAgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT09ICdncmFkaWVudCcpIHtcbiAgICAgIGNvbG9yZWREYXRhID0gdGhpcy5nZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlRm9yR3JhZGllbnQoYWxsRW50cmllcywgdmFsdWVGaWVsZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhlYXRtYXBDaGFydENvbmZpZy50eXBlID09PSAndHdvQ29sb3InKSB7XG4gICAgICBjb2xvcmVkRGF0YSA9IHRoaXMuZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhUd29Db2xvcihhbGxFbnRyaWVzLCB2YWx1ZUZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sb3JlZERhdGEgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JXaXRoU2luZ2xlQ29sb3IoYWxsRW50cmllcywgdmFsdWVGaWVsZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZU1hcDogeyBbZGF0ZTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuXG4gICAgY29sb3JlZERhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGRhdGU6IGFueSA9IGl0ZW1bdG9wQXJnXTtcblxuICAgICAgaWYgKCFkYXRlTWFwW2RhdGVdKSB7XG4gICAgICAgIGRhdGVNYXBbZGF0ZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGxldCB0b29sVGlwID0gYFJlY29yZCBEYXRlIDogJHtpdGVtW3RvcEFyZ119IFxcbiR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRTdHJpbmcodmFsdWVGaWVsZCl9IDogJHt0aGlzLmNvbW1vblNlcnZpY2UuVGhvdXNhbmRTZXBhcmF0b3JXaXRoVHdvRGVjaW1hbHMoaXRlbVt2YWx1ZUZpZWxkXSl9YFxuICAgICAgZGF0ZU1hcFtkYXRlXS5wdXNoKHtcbiAgICAgICAgW2xlZnRBcmddOiBpdGVtW2xlZnRBcmddLFxuICAgICAgICBbdmFsdWVGaWVsZF06IGl0ZW1bdmFsdWVGaWVsZF0sXG4gICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICB0b29sVGlwOiB0b29sVGlwLFxuICAgICAgICBbdG9wQXJnXTogZGF0ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGNvbnN0IHNvcnRlZERhdGVzID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcykuc29ydCgoYSwgYikgPT4gbW9tZW50KGIpLmRpZmYobW9tZW50KGEpKSk7XG5cbiAgICBmb3IgKGNvbnN0IGRhdGUgb2Ygc29ydGVkRGF0ZXMgYXMgc3RyaW5nW10pIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgcmVjb3JkX2RhdGU6IGRhdGUsXG4gICAgICAgIGRhdGFzZXQ6IGRhdGVNYXBbZGF0ZV0gfHwgW11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQsXG4gICAgICB1bmlxdWVEYXRlczogc29ydGVkRGF0ZXNcbiAgICB9O1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhKGRhdGEpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB1bmlxdWVEYXRlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBkYXRhU291cmNlTWFwID0ge307XG4gICAgY29uc3QgdG9wQXJnID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcudG9wQXJndW1lbnQ7XG4gICAgY29uc3QgbGVmdEFyZyA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLmxlZnRBcmd1bWVudDtcbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1uc1swXS5kYXRhRmllbGQ7XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCByb3dLZXkgPSBpdGVtW2xlZnRBcmddO1xuICAgICAgY29uc3QgY29sdW1uS2V5ID0gbW9tZW50KGl0ZW1bdG9wQXJnXSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cbiAgICAgIGlmICghZGF0YVNvdXJjZU1hcFtyb3dLZXldKSB7XG4gICAgICAgIGRhdGFTb3VyY2VNYXBbcm93S2V5XSA9IHtcbiAgICAgICAgICBkYXRhc291cmNlOiByb3dLZXksXG4gICAgICAgICAgZGF0YXNldDogW11cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGxldCB0b29sVGlwID0gYCR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRTdHJpbmcobGVmdEFyZyl9IDogJHtpdGVtW2xlZnRBcmddfSBcXG5SZWNvcmQgRGF0ZSA6ICR7Y29sdW1uS2V5fSBcXG4ke3RoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0U3RyaW5nKHZhbHVlRmllbGQpfSA6ICR7dGhpcy5jb21tb25TZXJ2aWNlLlRob3VzYW5kU2VwYXJhdG9yV2l0aFR3b0RlY2ltYWxzKGl0ZW1bdmFsdWVGaWVsZF0pfWBcblxuICAgICAgZGF0YVNvdXJjZU1hcFtyb3dLZXldLmRhdGFzZXQucHVzaCh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgICB0b29sVGlwOiB0b29sVGlwLFxuICAgICAgICBbdG9wQXJnXTogY29sdW1uS2V5LFxuXG4gICAgICB9KTtcblxuICAgICAgdW5pcXVlRGF0ZXMuYWRkKGNvbHVtbktleSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVEYXRlc0FycmF5ID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhU291cmNlTWFwKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YVNvdXJjZU1hcFtrZXldLmRhdGFzZXQ7XG4gICAgICBsZXQgZm9ybWF0dGVkRGF0YXNldDtcblxuICAgICAgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT0gXCJncmFkaWVudFwiKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JHcmFkaWVudChkYXRhc2V0LCB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5jb2x1bW5zWzBdLmRhdGFGaWVsZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT0gXCJ0d29Db2xvclwiKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JXaXRoVHdvQ29sb3IoZGF0YXNldCwgdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1uc1swXS5kYXRhRmllbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0YXNldCA9IHRoaXMuZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhTaW5nbGVDb2xvcihkYXRhc2V0LCB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5jb2x1bW5zWzBdLmRhdGFGaWVsZCk7XG5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0ZVRvSXRlbU1hcCA9IHt9O1xuICAgICAgZm9ybWF0dGVkRGF0YXNldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBkYXRlVG9JdGVtTWFwW2l0ZW1bdG9wQXJnXV0gPSBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlRGF0YXNldCA9IHVuaXF1ZURhdGVzQXJyYXkubWFwKChkYXRlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGVUb0l0ZW1NYXBbZGF0ZV0pIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVRvSXRlbU1hcFtkYXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RvcEFyZ106IGRhdGUsXG4gICAgICAgICAgICBhdmdTaXplOiBcIk5vIERhdGFcIixcbiAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgIGZpbGVTaXplOiAwLFxuICAgICAgICAgICAgY29sb3I6IFwicmdiKDI0MiwgMTE4LCAxMDkpXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRhc291cmNlOiBrZXksXG4gICAgICAgIGRhdGFzZXQ6IGNvbXBsZXRlRGF0YXNldFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgdW5pcXVlRGF0ZXM6IHVuaXF1ZURhdGVzQXJyYXlcbiAgICB9O1xuICB9XG5cblxuXG4gIGdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JHcmFkaWVudChmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW0uYXZnU2l6ZSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG1heEF2Z1NpemUgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW2NvbHVtbl0pKTtcbiAgICBjb25zdCBtaW5BdmdTaXplID0gTWF0aC5taW4oLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVtjb2x1bW5dKSk7XG5cbiAgICBjb25zdCBbbWluQ29sb3JTdHIsIG1heENvbG9yU3RyXSA9IHRoaXMuY29sb3JBcnJheSB8fCBbXCJyZ2JhKDQ1LCAxMTAsIDE4LDEpXCIsIFwicmdiYSgyNTUsIDIwNCwgMCwxKVwiXTtcbiAgICBjb25zdCBtaW5Db2xvciA9IHRoaXMucGFyc2VSR0JBKG1pbkNvbG9yU3RyKTtcbiAgICBjb25zdCBtYXhDb2xvciA9IHRoaXMucGFyc2VSR0JBKG1heENvbG9yU3RyKTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmNvbG9yID0gdGhpcy5jYWxjdWxhdGVDb2xvcihpdGVtW2NvbHVtbl0sIG1pbkF2Z1NpemUsIG1heEF2Z1NpemUsIG1pbkNvbG9yLCBtYXhDb2xvcik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhUd29Db2xvcihmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bY29sdW1uXSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IFttaW5Db2xvclN0ciwgbWF4Q29sb3JTdHJdID0gdGhpcy5jb2xvckFycmF5IHx8IFtcInJnYmEoNDUsIDExMCwgMTgsMSlcIiwgXCJyZ2JhKDI1NSwgMjA0LCAwLDEpXCJdO1xuICAgIGNvbnN0IG1pbkNvbG9yID0gdGhpcy5wYXJzZVJHQkEobWluQ29sb3JTdHIpO1xuICAgIGNvbnN0IG1heENvbG9yID0gdGhpcy5wYXJzZVJHQkEobWF4Q29sb3JTdHIpO1xuXG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtW2NvbHVtbl0gPT0gMCkge1xuICAgICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWF4Q29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhTaW5nbGVDb2xvcihmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bY29sdW1uXSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IFtzaW5nbGVDb2xvcl0gPSB0aGlzLmNvbG9yQXJyYXkgfHwgW1wicmdiYSgyNTUsIDIwNCwgMCwxKVwiXTtcbiAgICBjb25zdCBtaW5Db2xvciA9IHRoaXMucGFyc2VSR0JBKHNpbmdsZUNvbG9yKTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWxlZGF0YTtcbiAgfVxuXG4gIHBhcnNlUkdCQShjb2xvclN0cjogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbG9yU3RyLm1hdGNoKC9bXFxkLl0rL2cpPy5tYXAoTnVtYmVyKSB8fCBbXTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMykgdmFsdWVzLnB1c2goMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHZhbHVlc1swXSA/PyAwLFxuICAgICAgdmFsdWVzWzFdID8/IDAsXG4gICAgICB2YWx1ZXNbMl0gPz8gMCxcbiAgICAgIHZhbHVlc1szXSA/PyAxXG4gICAgXTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUNvbG9yKGF2Z1NpemUsIG1pbkF2Z1NpemUsIG1heEF2Z1NpemUsIG1pbkNvbG9yLCBtYXhDb2xvcikge1xuICAgIGlmIChtaW5BdmdTaXplICE9IG1heEF2Z1NpemUpIHtcbiAgICAgIGxldCBncmFkaWVudCA9IChhdmdTaXplIC0gbWluQXZnU2l6ZSkgLyAobWF4QXZnU2l6ZSAtIG1pbkF2Z1NpemUpO1xuICAgICAgbGV0IGNvbG9yID0gbWluQ29sb3IubWFwKChjaGFubmVsLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChjaGFubmVsICsgZ3JhZGllbnQgKiAobWF4Q29sb3JbaW5kZXhdIC0gY2hhbm5lbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYHJnYigke2NvbG9yLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGByZ2IoJHttaW5Db2xvci5qb2luKCcsJyl9KWBcbiAgICB9XG5cbiAgfVxuXG5cblxuICB0cmFuc2Zvcm1Db2x1bW5zKG1haW5vYmo6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWFpbm9iaikubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBkYXRhRmllbGQ6IGtleSxcbiAgICAgICAgY2FwdGlvbjoga2V5XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cblxuXG4gIGdldE9iamVjdEtleXMob2JqOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gIH1cblxuXG4gIGNhbGxTZXJ2aWNlRnVuY3Rpb24oZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHZhbHVlKTogYW55IHtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBub3QgZm91bmQgaW4gQ29tbW9uU2VydmljZWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiTm8gRGF0YVwiXG4gICAgfVxuXG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibXgtMiBiZy1ncmF5LTgwMFwiPlxuICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwiaXNMb2FkZXJcIj48L2FwcC1sb2FkZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhdG1hcENoYXJ0Q29uZmlnLmNoYXJ0Rm9ybWF0ID09ICdzaW1wbGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIGgtYXV0byBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCB3LTQ4IGgtMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5hcmd1bWVudFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtc2hyaW5rLTAgbWluLXctMjIgbWF4LXctWzIwJV0gaC04IHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC04IGZsZXggdGV4dC1zbSBpdGVtcy1jZW50ZXIgbWluLXctNDgganVzdGlmeS1lbmQgcHgtMiBpbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGFzb3VyY2UgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYm94IG9mIGl0ZW0uZGF0YXNldFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgbWluLXctMjIgbWF4LXctWzIwJV0gaC04IGJvcmRlci0yIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGJveC5jb2xvciB9XCIgW21hdFRvb2x0aXBdPVwiYm94LnRvb2xUaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FsbFNlcnZpY2VGdW5jdGlvbihoZWF0bWFwQ2hhcnRDb25maWcuY29sdW1uc1swXS5lbnJpY2hOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFtoZWF0bWFwQ2hhcnRDb25maWcuY29sdW1uc1swXS5kYXRhRmllbGRdKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhdG1hcENoYXJ0Q29uZmlnLmNoYXJ0Rm9ybWF0ID09ICd0b3B4J1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBoLWF1dG8gb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LTMyIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIGhlYXRDaGFydERhdGFTb3VyY2UuZGF0YVNldFwiIGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNlbGwuYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtOCBib3JkZXItMiB0ZXh0LXNtIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ3JheS04MDAgbWluLXctMzIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBjZWxsLmJveC5jb2xvciB9XCIgW21hdFRvb2x0aXBdPVwiY2VsbC5ib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLmJveFtoZWF0bWFwQ2hhcnRDb25maWcubGVmdEFyZ3VtZW50XSB9fSAoe3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsU2VydmljZUZ1bmN0aW9uKGhlYXRtYXBDaGFydENvbmZpZy5jb2x1bW5zWzBdLmVucmljaE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5ib3hbaGVhdG1hcENoYXJ0Q29uZmlnLmNvbHVtbnNbMF0uZGF0YUZpZWxkXSkgfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY2VsbC5ib3hcIiBjbGFzcz1cImgtOCBtaW4tdy0zMlwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtaGVhdG1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtaGVhdG1hcC9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1oZWF0bWFwL2dhbW1hLWhlYXRtYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLE1BQU0sTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7O0FBT25FLE1BQU0sT0FBTyx1QkFBdUI7SUE0RWxDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBMUUvQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFHN0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVDQUF1QyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBSTlILGNBQVMsR0FBVyxPQUFPLENBQUM7UUFLNUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBQzlCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUk5Qix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFHL0IsbUJBQWMsR0FBUTtZQUNwQixnQkFBZ0IsRUFBRSxL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Q0FBQyxPQUFPLENBQUMsQ0FBQztRQUd0QyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBR25ELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsT0FBTyxhQUFhLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7U0FDN0M7UUFHRCxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztvSEE5Y1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsZ1NDWHBDLHc4R0EyRE07MkZEaERPLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSxtQkFBbUI7b0dBZ0RaLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtaGVhdG1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFIZWF0Q2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBpc0pzb25QcmV2aWV3OiBib29sZWFuXG4gIGRhdGFTb3Vyc2VGb3JUYWJsZTogYW55ID0gW107XG4gIGpzYW9uRGF0YXNvdXJjZTogYW55O1xuICBjb25maWdDb2x1bWU6IGFueTtcbiAgaXNMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICB0YWJsZURhdGFDb25maWc6IGFueSA9IHt9O1xuICBlbnJpY2hOYW1lTGlzdCA9IFtcImZvcm1hdEJ5dGVzXCIsIFwiZm9ybWF0Qnl0c1RvS2JcIiwgXCJmb3JtYXRCeXRzVG9HYlwiLCBcInJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjNcIiwgXCJmb3JtYXRCeXRlc3YyXCJdXG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgcGFnZV9zZWxlY3RlZF9vcGVyYXRvcjogYW55O1xuICBhY3RpdmVUYWI6IHN0cmluZyA9ICdiYXNpYyc7XG5cbiAgdGFibGVIZWlnaHQ6IGFueTtcblxuXG4gIGlzQWR2YW5jZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0hlYXRNYXBDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGhlYXRDaGFydERhdGFTb3VyY2U6IGFueSA9IHt9O1xuICBjaGFydERhdGFGb3JUb29sdGlwOiBhbnkgPSB7fTtcblxuXG5cbiAgZGF0YVNvdXJzZUZvckhlYXRNYXA6IGFueSA9IFtdO1xuICBzZWxlY3RlZFZpZXdDb25maWdzOiBhbnk7XG5cbiAgdmlld1Byb3BlcnRpZXM6IGFueSA9IHtcbiAgICBlbmFibGVDbGlja0V2ZW50OiBmYWxzZSxcbiAgICBlbmFibGVSaWdodENsaWNrRXZlbnQ6IHRydWUsXG4gICAgY2xpY2tFdmVudE9wdGlvbnM6IHtcbiAgICAgIGFzc29jaWF0ZWRWaWV3czogW10sXG4gICAgICBldmVudFR5cGU6IFwiXCJcbiAgICB9XG4gIH07XG4gIG9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRUYWJsZVZpZXdUeXBlOiBhbnk7XG5cbiAgYWxsQ29uZmlndXJlZFZpZXdzOiBhbnkgPSBbXTtcbiAgY29sb3JBcnJheTogYW55ID0gW107XG4gIGZpcnN0Q29sb3IgPSBcInJnYmEoNDUsIDExMCwgMTgsIDEpXCI7XG4gIHNlY29uZENvbG9yID0gXCJyZ2JhKDI1NSwgMjA0LCAwLCAxKVwiO1xuICBzaW5nbGVDb2xvciA9IFwicmdiYSgyNTUsIDIwNCwgMCwgMSlcIjtcblxuICBoZWF0bWFwQ2hhcnRDb25maWc6IGFueSA9IHt9O1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnID0gdmFsdWU7XG4gICAgICBkZWJ1Z2dlclxuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmhlYXRtYXBDaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICB0aGlzLmNvbG9yQXJyYXkgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2xvciB8fCBbXCJyZ2JhKDQ1LCAxMTAsIDE4LDEpXCIsIFwicmdiYSgyNTUsIDIwNCwgMCwxKVwiXTtcbiAgICAgICAgdGhpcy5nZXRIZWF0bWFwRGF0YSh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gW107XG4gICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWdbJ2NvbHVtbnMnXSA9IFtdO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIGdldEhlYXRtYXBEYXRhKGhlYXRNYXBEYXRhKSB7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlID0ge307XG4gICAgdGhpcy5pc0FkdmFuY2VGaWx0ZXIgPSBmYWxzZTtcbiAgICBpZiAoaGVhdE1hcERhdGEgJiYgaGVhdE1hcERhdGEubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpZiAodGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY2hhcnRGb3JtYXQgPT0gXCJ0b3B4XCIpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0ZVdpc2VDb2xvckNvZGVkRGF0YShoZWF0TWFwRGF0YSk7XG4gICAgICAgIC8vIHVuaXF1ZURhdGVzLnNvcnQoKTtcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlLmRhdGFTZXQgPSB0aGlzLmdldFRyYW5zcG9zZWRIZWF0bWFwRGF0YShyZXN1bHQpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiYXJndW1lbnRWYWx1ZVwiXSA9IHVuaXF1ZURhdGVzO1xuICAgICAgfSBlbHNlIGlmICgodGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY2hhcnRGb3JtYXQgPT0gXCJzaW1wbGVcIikpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0YShoZWF0TWFwRGF0YSk7XG4gICAgICAgIC8vIHVuaXF1ZURhdGVzLnNvcnQoKTtcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiZGF0YVNldFwiXSA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiYXJndW1lbnRWYWx1ZVwiXSA9IHVuaXF1ZURhdGVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzSGVhdE1hcENsaWNrID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNIZWF0TWFwQ2xpY2sgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2UgPSB7fTtcbiAgICAvLyB0aGlzLmlzQWR2YW5jZUZpbHRlciA9IGZhbHNlO1xuXG4gICAgLy8gaWYgKGhlYXRNYXBEYXRhICYmIGhlYXRNYXBEYXRhLmxlbmd0aCAhPT0gMCkge1xuICAgIC8vICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0YShoZWF0TWFwRGF0YSlcbiAgICAvLyAgIHVuaXF1ZURhdGVzLnNvcnQoKTtcbiAgICAvLyAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImRhdGFTZXRcIl0gPSByZXN1bHQ7XG4gICAgLy8gICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gICAgLy8gICB0aGlzLmlzSGVhdE1hcENsaWNrID0gZmFsc2U7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHRoaXMuaXNIZWF0TWFwQ2xpY2sgPSBmYWxzZTtcbiAgICAvLyB9XG5cblxuICB9XG5cbiAgZ2V0VHJhbnNwb3NlZEhlYXRtYXBEYXRhKGRhdGFTZXQ6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHRyYW5zcG9zZWQ6IGFueVtdID0gW107XG4gICAgY29uc3QgbWF4Qm94ZXMgPSBNYXRoLm1heCguLi5kYXRhU2V0Lm1hcChpdGVtID0+IGl0ZW0uZGF0YXNldC5sZW5ndGgpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4Qm94ZXM7IGkrKykge1xuICAgICAgY29uc3Qgcm93OiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhU2V0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IGRhdGFTZXRbal0uZGF0YXNldFtpXTtcbiAgICAgICAgcm93LnB1c2goe1xuICAgICAgICAgIGJveDogYm94IHx8IG51bGwsXG4gICAgICAgICAgZGF0ZTogZGF0YVNldFtqXS5yZWNvcmRfZGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRyYW5zcG9zZWQucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc3Bvc2VkO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRlV2lzZUNvbG9yQ29kZWREYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHVuaXF1ZURhdGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGFsbEVudHJpZXM6IGFueVtdID0gW107XG5cbiAgICBjb25zdCB0b3BBcmcgPSB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy50b3BBcmd1bWVudDtcbiAgICBjb25zdCBsZWZ0QXJnID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcubGVmdEFyZ3VtZW50O1xuICAgIGNvbnN0IG1hcENvbHVtbiA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGlzcGxheUZvciA9PT0gJ21hcCcgJiYgY29sLnZpc2libGUpO1xuICAgIGNvbnN0IHRvb2x0aXBDb2x1bW5zID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kaXNwbGF5Rm9yID09PSAndG9vbHRpcCcgJiYgY29sLnZpc2libGUpO1xuXG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IG1hcENvbHVtbi5sZW5ndGggPiAwID8gbWFwQ29sdW1uWzBdLmRhdGFGaWVsZCA6IG51bGw7XG5cbiAgICBkYXRhLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IChtb21lbnQoZW50cnlbdG9wQXJnXSkuZm9ybWF0KCdZWVlZLU1NLUREJykpID8gbW9tZW50KGVudHJ5W3RvcEFyZ10pLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogdG9wQXJnO1xuICAgICAgdW5pcXVlRGF0ZXMuYWRkKGZvcm1hdHRlZERhdGUpO1xuXG4gICAgICBlbnRyeS5yZXN1bHREYXRhc2V0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGFsbEVudHJpZXMucHVzaCh7XG4gICAgICAgICAgW3RvcEFyZ106IGZvcm1hdHRlZERhdGUsXG4gICAgICAgICAgW2xlZnRBcmddOiBpdGVtW2Ake2xlZnRBcmd9YF0sXG4gICAgICAgICAgW3ZhbHVlRmllbGRdOiBpdGVtW2Ake3ZhbHVlRmllbGR9YF1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBjb2xvcmVkRGF0YTtcbiAgICBpZiAodGhpcy5oZWF0bWFwQ2hhcnRDb25maWcudHlwZSA9PT0gJ2dyYWRpZW50Jykge1xuICAgICAgY29sb3JlZERhdGEgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JHcmFkaWVudChhbGxFbnRyaWVzLCB2YWx1ZUZpZWxkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT09ICd0d29Db2xvcicpIHtcbiAgICAgIGNvbG9yZWREYXRhID0gdGhpcy5nZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlRm9yV2l0aFR3b0NvbG9yKGFsbEVudHJpZXMsIHZhbHVlRmllbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2xvcmVkRGF0YSA9IHRoaXMuZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhTaW5nbGVDb2xvcihhbGxFbnRyaWVzLCB2YWx1ZUZpZWxkKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlTWFwOiB7IFtkYXRlOiBzdHJpbmddOiBhbnlbXSB9ID0ge307XG5cbiAgICBjb2xvcmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgZGF0ZTogYW55ID0gaXRlbVt0b3BBcmddO1xuXG4gICAgICBpZiAoIWRhdGVNYXBbZGF0ZV0pIHtcbiAgICAgICAgZGF0ZU1hcFtkYXRlXSA9IFtdO1xuICAgICAgfVxuICAgICAgbGV0IHRvb2xUaXAgPSAnJztcblxuICAgICAgaWYgKHZhbHVlRmllbGQpIHtcbiAgICAgICAgdG9vbFRpcCArPSBgJHt0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFN0cmluZyh2YWx1ZUZpZWxkKX0gOiAke2l0ZW1bdmFsdWVGaWVsZF19XFxuYDtcbiAgICAgIH1cbiAgICAgIHRvb2x0aXBDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbC5kYXRhRmllbGRdO1xuXG4gICAgICAgIHRvb2xUaXAgKz0gYCR7Y29sLmNhcHRpb259IDogJHt2YWx1ZX1cXG5gO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGVNYXBbZGF0ZV0ucHVzaCh7XG4gICAgICAgIFtsZWZ0QXJnXTogaXRlbVtsZWZ0QXJnXSxcbiAgICAgICAgW3ZhbHVlRmllbGRdOiBpdGVtW3ZhbHVlRmllbGRdLFxuICAgICAgICBjb2xvcjogaXRlbS5jb2xvcixcbiAgICAgICAgdG9vbFRpcDogdG9vbFRpcCxcbiAgICAgICAgW3RvcEFyZ106IGRhdGUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNvcnRlZERhdGVzID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcykuc29ydCgoYSwgYikgPT4gbW9tZW50KGIpLmRpZmYobW9tZW50KGEpKSk7XG5cbiAgICBmb3IgKGNvbnN0IGRhdGUgb2Ygc29ydGVkRGF0ZXMgYXMgc3RyaW5nW10pIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgcmVjb3JkX2RhdGU6IGRhdGUsXG4gICAgICAgIGRhdGFzZXQ6IGRhdGVNYXBbZGF0ZV0gfHwgW11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQsXG4gICAgICB1bmlxdWVEYXRlczogc29ydGVkRGF0ZXNcbiAgICB9O1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhKGRhdGEpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB1bmlxdWVEYXRlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBkYXRhU291cmNlTWFwID0ge307XG4gICAgY29uc3QgdG9wQXJnID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcudG9wQXJndW1lbnQ7XG4gICAgY29uc3QgbGVmdEFyZyA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLmxlZnRBcmd1bWVudDtcblxuICAgIGNvbnN0IG1hcENvbHVtbiA9IHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGlzcGxheUZvciA9PT0gJ21hcCcgJiYgY29sLnZpc2libGUpO1xuICAgIGNvbnN0IHRvb2x0aXBDb2x1bW5zID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kaXNwbGF5Rm9yID09PSAndG9vbHRpcCcgJiYgY29sLnZpc2libGUpO1xuXG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IG1hcENvbHVtbi5sZW5ndGggPiAwID8gbWFwQ29sdW1uWzBdLmRhdGFGaWVsZCA6IG51bGw7XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCByb3dLZXkgPSBpdGVtW2xlZnRBcmddO1xuICAgICAgY29uc3QgY29sdW1uS2V5ID0gbW9tZW50KGl0ZW1bdG9wQXJnXSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cbiAgICAgIGlmICghZGF0YVNvdXJjZU1hcFtyb3dLZXldKSB7XG4gICAgICAgIGRhdGFTb3VyY2VNYXBbcm93S2V5XSA9IHtcbiAgICAgICAgICBkYXRhc291cmNlOiByb3dLZXksXG4gICAgICAgICAgZGF0YXNldDogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbGV0IHRvb2xUaXAgPSAnJztcblxuICAgICAgaWYgKHZhbHVlRmllbGQpIHtcbiAgICAgICAgdG9vbFRpcCArPSBgJHt0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFN0cmluZyh2YWx1ZUZpZWxkKX0gOiAke2l0ZW1bdmFsdWVGaWVsZF19IHwgYDtcbiAgICAgIH1cbiAgICAgIHRvb2x0aXBDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbC5kYXRhRmllbGRdO1xuXG4gICAgICAgIHRvb2xUaXAgKz0gYCR7Y29sLmNhcHRpb259IDogJHt2YWx1ZX0gfCBgO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGFTb3VyY2VNYXBbcm93S2V5XS5kYXRhc2V0LnB1c2goe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0b29sVGlwOiB0b29sVGlwLFxuICAgICAgICBbdG9wQXJnXTogY29sdW1uS2V5LFxuXG4gICAgICB9KTtcblxuICAgICAgdW5pcXVlRGF0ZXMuYWRkKGNvbHVtbktleSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVEYXRlc0FycmF5ID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhU291cmNlTWFwKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YVNvdXJjZU1hcFtrZXldLmRhdGFzZXQ7XG4gICAgICBsZXQgZm9ybWF0dGVkRGF0YXNldDtcblxuICAgICAgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT0gXCJncmFkaWVudFwiKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JHcmFkaWVudChkYXRhc2V0LCB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5jb2x1bW5zWzBdLmRhdGFGaWVsZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGVhdG1hcENoYXJ0Q29uZmlnLnR5cGUgPT0gXCJ0d29Db2xvclwiKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JXaXRoVHdvQ29sb3IoZGF0YXNldCwgdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1uc1swXS5kYXRhRmllbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0YXNldCA9IHRoaXMuZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhTaW5nbGVDb2xvcihkYXRhc2V0LCB0aGlzLmhlYXRtYXBDaGFydENvbmZpZy5jb2x1bW5zWzBdLmRhdGFGaWVsZCk7XG5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0ZVRvSXRlbU1hcCA9IHt9O1xuICAgICAgZm9ybWF0dGVkRGF0YXNldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBkYXRlVG9JdGVtTWFwW2l0ZW1bdG9wQXJnXV0gPSBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlRGF0YXNldCA9IHVuaXF1ZURhdGVzQXJyYXkubWFwKChkYXRlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGVUb0l0ZW1NYXBbZGF0ZV0pIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVRvSXRlbU1hcFtkYXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RvcEFyZ106IGRhdGUsXG4gICAgICAgICAgICBhdmdTaXplOiBcIk5vIERhdGFcIixcbiAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgIGZpbGVTaXplOiAwLFxuICAgICAgICAgICAgY29sb3I6IFwicmdiKDI0MiwgMTE4LCAxMDkpXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRhc291cmNlOiBrZXksXG4gICAgICAgIGRhdGFzZXQ6IGNvbXBsZXRlRGF0YXNldFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgdW5pcXVlRGF0ZXM6IHVuaXF1ZURhdGVzQXJyYXlcbiAgICB9O1xuICB9XG5cblxuXG4gIGdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGVGb3JHcmFkaWVudChmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW0uYXZnU2l6ZSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG1heEF2Z1NpemUgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW2NvbHVtbl0pKTtcbiAgICBjb25zdCBtaW5BdmdTaXplID0gTWF0aC5taW4oLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVtjb2x1bW5dKSk7XG5cbiAgICBjb25zdCBbbWluQ29sb3JTdHIsIG1heENvbG9yU3RyXSA9IHRoaXMuY29sb3JBcnJheSB8fCBbXCJyZ2JhKDQ1LCAxMTAsIDE4LDEpXCIsIFwicmdiYSgyNTUsIDIwNCwgMCwxKVwiXTtcbiAgICBjb25zdCBtaW5Db2xvciA9IHRoaXMucGFyc2VSR0JBKG1pbkNvbG9yU3RyKTtcbiAgICBjb25zdCBtYXhDb2xvciA9IHRoaXMucGFyc2VSR0JBKG1heENvbG9yU3RyKTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmNvbG9yID0gdGhpcy5jYWxjdWxhdGVDb2xvcihpdGVtW2NvbHVtbl0sIG1pbkF2Z1NpemUsIG1heEF2Z1NpemUsIG1pbkNvbG9yLCBtYXhDb2xvcik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhUd29Db2xvcihmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bY29sdW1uXSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IFttaW5Db2xvclN0ciwgbWF4Q29sb3JTdHJdID0gdGhpcy5jb2xvckFycmF5IHx8IFtcInJnYmEoNDUsIDExMCwgMTgsMSlcIiwgXCJyZ2JhKDI1NSwgMjA0LCAwLDEpXCJdO1xuICAgIGNvbnN0IG1pbkNvbG9yID0gdGhpcy5wYXJzZVJHQkEobWluQ29sb3JTdHIpO1xuICAgIGNvbnN0IG1heENvbG9yID0gdGhpcy5wYXJzZVJHQkEobWF4Q29sb3JTdHIpO1xuXG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtW2NvbHVtbl0gPT0gMCkge1xuICAgICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWF4Q29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZUZvcldpdGhTaW5nbGVDb2xvcihmaWxlZGF0YSwgY29sdW1uKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bY29sdW1uXSA9IHBhcnNlRmxvYXQoaXRlbVtjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IFtzaW5nbGVDb2xvcl0gPSB0aGlzLmNvbG9yQXJyYXkgfHwgW1wicmdiYSgyNTUsIDIwNCwgMCwxKVwiXTtcbiAgICBjb25zdCBtaW5Db2xvciA9IHRoaXMucGFyc2VSR0JBKHNpbmdsZUNvbG9yKTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWxlZGF0YTtcbiAgfVxuXG4gIHBhcnNlUkdCQShjb2xvclN0cjogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbG9yU3RyLm1hdGNoKC9bXFxkLl0rL2cpPy5tYXAoTnVtYmVyKSB8fCBbXTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMykgdmFsdWVzLnB1c2goMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHZhbHVlc1swXSA/PyAwLFxuICAgICAgdmFsdWVzWzFdID8/IDAsXG4gICAgICB2YWx1ZXNbMl0gPz8gMCxcbiAgICAgIHZhbHVlc1szXSA/PyAxXG4gICAgXTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUNvbG9yKGF2Z1NpemUsIG1pbkF2Z1NpemUsIG1heEF2Z1NpemUsIG1pbkNvbG9yLCBtYXhDb2xvcikge1xuICAgIGlmIChtaW5BdmdTaXplICE9IG1heEF2Z1NpemUpIHtcbiAgICAgIGxldCBncmFkaWVudCA9IChhdmdTaXplIC0gbWluQXZnU2l6ZSkgLyAobWF4QXZnU2l6ZSAtIG1pbkF2Z1NpemUpO1xuICAgICAgbGV0IGNvbG9yID0gbWluQ29sb3IubWFwKChjaGFubmVsLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChjaGFubmVsICsgZ3JhZGllbnQgKiAobWF4Q29sb3JbaW5kZXhdIC0gY2hhbm5lbCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYHJnYigke2NvbG9yLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGByZ2IoJHttaW5Db2xvci5qb2luKCcsJyl9KWBcbiAgICB9XG5cbiAgfVxuXG5cblxuICB0cmFuc2Zvcm1Db2x1bW5zKG1haW5vYmo6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWFpbm9iaikubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBkYXRhRmllbGQ6IGtleSxcbiAgICAgICAgY2FwdGlvbjoga2V5XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cblxuXG4gIGdldE9iamVjdEtleXMob2JqOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gIH1cblxuXG4gIGNhbGxTZXJ2aWNlRnVuY3Rpb24oZGF0YSk6IGFueSB7XG4gICAgY29uc3QgbWFwQ29sdW1uID0gdGhpcy5oZWF0bWFwQ2hhcnRDb25maWcuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZGlzcGxheUZvciA9PT0gJ21hcCcgJiYgY29sLnZpc2libGUpO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IG1hcENvbHVtbiA/IG1hcENvbHVtbi5lbnJpY2hOYW1lIDogbnVsbDtcbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gbWFwQ29sdW1uID8gbWFwQ29sdW1uLmRhdGFGaWVsZCA6IG51bGw7XG5cbiAgICBpZiAoZnVuY3Rpb25OYW1lICE9IFwiXCIpIHtcbiAgICAgIGlmIChkYXRhW3ZhbHVlRmllbGRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1vblNlcnZpY2VbZnVuY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdKGRhdGFbdmFsdWVGaWVsZF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBub3QgZm91bmQgaW4gQ29tbW9uU2VydmljZWApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJObyBEYXRhXCJcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGFbdmFsdWVGaWVsZF07XG4gICAgfVxuXG5cbiAgfVxuXG5cbiAgb25Sb3dDbGljayhkYXRhKSB7XG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4gICAgbGV0IHRpdGxlID0gdGhpcy5nZXRQYXJhbXNUaXRsZShkYXRhKTtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB0aXRsZSA6IHRpdGxlLFxuICAgICAgdmlld0lkOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsRG93blR5cGU6IFwibmF0dXJhbFwiLFxuICAgICAgZHJpbGxkb3duRnJvbTogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbGRvd25UbzogXCJcIixcbiAgICB9XG4gICAgdGhpcy5vUm93Q2xpY2suZW1pdChvYmopO1xuICB9XG5cbiAgZ2V0UGFyYW1zVGl0bGUoZGF0YSkge1xuICAgIFxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnO1xuICAgIGNvbnN0IHRpdGxlVGVtcGxhdGUgPSBjb25maWdbJ3RpdGxlJ107XG5cbiAgICAvLyDwn5SOIENoZWNrIGlmIHRlbXBsYXRlIGNvbnRhaW5zICRQey4uLn1cbiAgICBjb25zdCBoYXNQYXJhbXMgPSAvXFwkUFxcey4qP1xcfS8udGVzdCh0aXRsZVRlbXBsYXRlKTtcblxuICAgIC8vIPCfn6IgQ0FTRSAxOiBObyAkUHt9IOKGkiB1c2Ugb2xkIGxvZ2ljXG4gICAgaWYgKCFoYXNQYXJhbXMpIHtcbiAgICAgIGNvbnN0IHRpdGxlX3BhcmFtcyA9IGRhdGFbY29uZmlnWydkYXRhRmllbGQnXV07XG4gICAgICByZXR1cm4gdGl0bGVUZW1wbGF0ZSArICh0aXRsZV9wYXJhbXMgPz8gJycpO1xuICAgIH1cblxuICAgIC8vIPCflLUgQ0FTRSAyOiBIYXMgJFB7fSDihpIgcmVwbGFjZSBkeW5hbWljYWxseVxuICAgIGxldCByZXN1bHQgPSB0aXRsZVRlbXBsYXRlLnJlcGxhY2UoL1xcJFBcXHsoLio/KVxcfS9nLCAoXywga2V5KSA9PiB7XG4gICAgICByZXR1cm4gZGF0YVtrZXldID8/ICcnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWF0bWFwQ2hhcnRDb25maWcuY2hhcnRGb3JtYXQgPT0gJ3NpbXBsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgaC1hdXRvIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctNDggaC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBoZWF0Q2hhcnREYXRhU291cmNlLmFyZ3VtZW50VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0yMiBtYXgtdy1bMjAlXSBoLTggdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBoZWF0Q2hhcnREYXRhU291cmNlLmRhdGFTZXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTggZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy00OCBqdXN0aWZ5LWVuZCBweC0yIGlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGF0YXNvdXJjZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvblJvd0NsaWNrKGJveClcIiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgbWluLXctMjIgbWF4LXctWzIwJV0gaC04IGJvcmRlci0yIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGJveC5jb2xvciB9XCIgW21hdFRvb2x0aXBdPVwiYm94LnRvb2xUaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FsbFNlcnZpY2VGdW5jdGlvbihib3gpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWF0bWFwQ2hhcnRDb25maWcuY2hhcnRGb3JtYXQgPT0gJ3RvcHgnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIGgtYXV0byBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5hcmd1bWVudFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctMzIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCIgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2VsbC5ib3hcIiAoY2xpY2spPVwib25Sb3dDbGljayhjZWxsLmJveClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC04IGJvcmRlci0yIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMCBtaW4tdy0zMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGNlbGwuYm94LmNvbG9yIH1cIiBbbWF0VG9vbHRpcF09XCJjZWxsLmJveC50b29sVGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNlbGwuYm94W2hlYXRtYXBDaGFydENvbmZpZy5sZWZ0QXJndW1lbnRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e2NhbGxTZXJ2aWNlRnVuY3Rpb24oY2VsbC5ib3gpIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNlbGwuYm94XCIgY2xhc3M9XCJoLTggbWluLXctMzJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=
|
|
@@ -88,48 +88,50 @@ export class BreadCrumbsComponent {
|
|
|
88
88
|
const kpiId = this.activatedRoute.snapshot.queryParams['pageId'];
|
|
89
89
|
const kpiTid = this.kpi_names[kpiId];
|
|
90
90
|
const props = this.kpi_structures[kpiTid];
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
if (props) {
|
|
92
|
+
const propsList = props["relativePath"] + "/" + props["name"];
|
|
93
|
+
this.breadcrumbList = propsList.split("/");
|
|
94
|
+
if (this.location.path() !== "") {
|
|
95
|
+
let link = {};
|
|
96
|
+
this.breadcrumbLinksList = [];
|
|
97
|
+
for (let i = 0; i < this.breadcrumbList.length; i++) {
|
|
98
|
+
if (i == 0) {
|
|
99
|
+
if (!this.kpiBrowserName) {
|
|
100
|
+
link = {
|
|
101
|
+
name: this.breadcrumbList[i],
|
|
102
|
+
url: "/apps/raKpi/rakpiBrowser",
|
|
103
|
+
kpiName: "RA KPI Browser",
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
link = {
|
|
108
|
+
name: this.breadcrumbList[i],
|
|
109
|
+
url: "/apps/fmsKpi",
|
|
110
|
+
kpiName: "FMS KPI Browser",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
104
113
|
}
|
|
105
114
|
else {
|
|
115
|
+
let returnId = "";
|
|
116
|
+
for (let j = 0; j <= i; j++) {
|
|
117
|
+
if (j != 0) {
|
|
118
|
+
returnId += "/";
|
|
119
|
+
}
|
|
120
|
+
returnId += this.breadcrumbList[j];
|
|
121
|
+
}
|
|
106
122
|
link = {
|
|
107
123
|
name: this.breadcrumbList[i],
|
|
108
|
-
url: "
|
|
109
|
-
|
|
124
|
+
url: this.breadcrumbLinksList[i - 1]["url"],
|
|
125
|
+
id: this.breadcrumbList[i],
|
|
126
|
+
kpiName: this.breadcrumbList[i],
|
|
127
|
+
returnId: returnId,
|
|
110
128
|
};
|
|
129
|
+
this.commonService.global_kpi_name = this.breadcrumbList[i];
|
|
111
130
|
}
|
|
131
|
+
this.breadcrumbLinksList.push(link);
|
|
112
132
|
}
|
|
113
|
-
|
|
114
|
-
let returnId = "";
|
|
115
|
-
for (let j = 0; j <= i; j++) {
|
|
116
|
-
if (j != 0) {
|
|
117
|
-
returnId += "/";
|
|
118
|
-
}
|
|
119
|
-
returnId += this.breadcrumbList[j];
|
|
120
|
-
}
|
|
121
|
-
link = {
|
|
122
|
-
name: this.breadcrumbList[i],
|
|
123
|
-
url: this.breadcrumbLinksList[i - 1]["url"],
|
|
124
|
-
id: this.breadcrumbList[i],
|
|
125
|
-
kpiName: this.breadcrumbList[i],
|
|
126
|
-
returnId: returnId,
|
|
127
|
-
};
|
|
128
|
-
this.commonService.global_kpi_name = this.breadcrumbList[i];
|
|
129
|
-
}
|
|
130
|
-
this.breadcrumbLinksList.push(link);
|
|
133
|
+
this.count = this.breadcrumbList.length;
|
|
131
134
|
}
|
|
132
|
-
this.count = this.breadcrumbList.length;
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
}
|
|
@@ -142,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
142
144
|
type: Input,
|
|
143
145
|
args: ['kpi_data_container']
|
|
144
146
|
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2dhbW1hLWJyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvZ2FtbWEtYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWXpELE1BQU0sT0FBTyxvQkFBb0I7SUFpQy9CLFlBQ1UsUUFBa0IsRUFDbEIsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGNBQThCLEVBQzlCLGFBQTRCO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBaEN0QyxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQTZCTixDQUFDO0lBeEJMLElBQ0ksa0JBQWtCLENBQUMsS0FBSztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsT0FBTztTQUNSO2FBQU07WUFHTCxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUM7WUFDbEMsSUFBSSxD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QUMsQ0FBQyxDQUFDO3dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLFFBQVEsRUFBRSxRQUFRO3FCQUNuQixDQUFDO29CQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzdEO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQzs7aUhBbEtVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdIQ1pqQyx5aENBZU07MkZESE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG9CQUFvQjtzTUFvQjFCLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb25cIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZ2FtbWEtYnJlYWQtY3J1bWJzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9icmVhZC1jcnVtYnMuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkQ3J1bWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuYnJlYWRjcnVtYkxpc3Q7XG4gIGJyZWFkY3J1bWJMaW5rc0xpc3Q7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIGtwaUxpc3REYXRhOiBhbnkgPSBbXTtcbiAga3BpX3N0cnVjdHVyZXMgPSB7fTtcbiAga3BpX25hbWVzID0ge307XG4gIGtwaVVybElEO1xuICBkYXRhID0gW107XG5cbiAga3BpQnJvd3Nlck5hbWU6IEJvb2xlYW47XG4gIGlzQnJlYWRDcnVtYnM6IEJvb2xlYW47XG5cbiAgQElucHV0KCdrcGlfZGF0YV9jb250YWluZXInKVxuICBzZXQga3BpX2RhdGFfY29udGFpbmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlzQnJlYWRDcnVtYnMgPSBmYWxzZTtcbiAgICAgIC8vIHRoaXMuYWRkUm9sZUNvbnRhaW5lciA9IFt7IFwidHlwZVwiOiBcInRleHRcIiwgXCJ2YWx1ZVwiOiAnJywgXCJyb2xlaWRcIjogXCJyb3dJZDBcIiB9XTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyB0aGlzLmtwaUxpc3REYXRhID0gdmFsdWU7XG4gICAgICBsZXQgcmVsYXRpdmVQYXRoID0gJ3Jha3BpQnJvd3Nlcic7XG4gICAgICB0aGlzLmdldEtwaU5hbWUodmFsdWUsIHJlbGF0aXZlUGF0aCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkQnJlYWRDcnVtYnMoKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgICB0aGlzLmlzQnJlYWRDcnVtYnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuXG4gIH1cblxuICBnZXRLcGlOYW1lKGRhdGEsIHJlbGF0aXZlUGF0aCkge1xuXG4gICAgZGF0YS5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBpdGVtID0ge307XG4gICAgICBsZXQgb2JqO1xuICAgICAgaXRlbVsncmVsYXRpdmVQYXRoJ10gPSByZWxhdGl2ZVBhdGg7XG5cbiAgICAgIGlmIChyZXN1bHRbJ25vZGVzJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgY2hpbGRSZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVBhdGggKyAnLycgKyByZXN1bHRbJ25hbWUnXTtcbiAgICAgICAgdGhpcy5nZXRLcGlOYW1lKHJlc3VsdFsnbm9kZXMnXSwgY2hpbGRSZWxhdGl2ZVBhdGgpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdFsnaWQnXSkge1xuICAgICAgICBvYmogPSB7XG4gICAgICAgICAgJ25hbWUnOiByZXN1bHRbJ25hbWUnXSxcbiAgICAgICAgICAnZGVzYyc6IHJlc3VsdFsnZGVzYyddLFxuICAgICAgICAgICdyZWxhdGl2ZVBhdGgnOiByZXN1bHRbJ3JlbGF0aXZlUGF0aCddLFxuICAgICAgICAgICdrcGlJZCc6IHJlc3VsdFsnaWQnXSxcbiAgICAgICAgICAncGFnZUlkJzogcmVzdWx0WydwYWdlSWQnXSxcbiAgICAgICAgICAnaXNCb29rbWFya2VkJzogcmVzdWx0Wydpc0Jvb2ttYXJrZWQnXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGl0ZW1bJ2V4dGVybmFsTGluayddID0gcmVsYXRpdmVQYXRoICsgJy8nICsgcmVzdWx0WyduYW1lJ11cbiAgICAgIGl0ZW1bJ3RpZCddID0gcmVzdWx0Wyd0aWQnXTtcbiAgICAgIGl0ZW1bJ2lkJ10gPSByZXN1bHRbJ2lkJ107XG4gICAgICBpdGVtWydwYWdlSWQnXSA9IHJlc3VsdFsncGFnZUlkJ107XG4gICAgICBpdGVtWyduYW1lJ10gPSByZXN1bHRbJ25hbWUnXTtcblxuICAgICAgdGhpcy5rcGlMaXN0RGF0YS5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuXG4gIH1cblxuXG4gIGdldEJyZWFkQ3J1bWJzRGF0YShkYXRhKSB7XG4gICAgbGV0IHN0cnVjdHVyZXMgPSB7fTtcbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW06IG9iamVjdCA9IHt9O1xuICAgICAgaXRlbVtcInJlbGF0aXZlUGF0aFwiXSA9IHJlc3VsdC5yZWxhdGl2ZVBhdGg7XG4gICAgICBpdGVtW1wibmFtZVwiXSA9IHJlc3VsdFtcIm5hbWVcIl07XG4gICAgICBpdGVtW1wicGFnZUlkXCJdID0gcmVzdWx0W1wicGFnZUlkXCJdO1xuICAgICAgaXRlbVtcInRpZFwiXSA9IHJlc3VsdFtcInRpZFwiXS50cmltKCk7XG4gICAgICBpZiAocmVzdWx0W1wibm9kZXNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdGVtW1wibm9kZXNcIl0gPSB0aGlzLmdldEJyZWFkQ3J1bWJzRGF0YShcbiAgICAgICAgICByZXN1bHRbXCJub2Rlc1wiXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmtwaV9uYW1lc1tyZXN1bHRbXCJwYWdlSWRcIl1dID0gaXRlbVtcInRpZFwiXTtcblxuICAgICAgc3RydWN0dXJlc1tyZXN1bHRbXCJ0aWRcIl1dID0gaXRlbTtcbiAgICAgIHRoaXMua3BpX3N0cnVjdHVyZXNbcmVzdWx0W1widGlkXCJdXSA9IGl0ZW07XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZXM7XG4gIH1cblxuICBsb2FkQnJlYWRDcnVtYnMoKSB7XG5cbiAgICBsZXQga3BpUm9vdCA9IHRoaXMua3BpQnJvd3Nlck5hbWUgPyBcImZtc2twaVwiIDogXCJyYWtwaVwiO1xuICAgIGxldCBrcGlDb250YWluZXI7XG4gICAgLy8gY29uc3QgbmF2dXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiP1wiKTtcbiAgICAvLyBsZXQgdXJsID0gbmF2dXJsWzBdLnNwbGl0KFwiL1wiKTtcbiAgICAvLyB0aGlzLmtwaVVybElEID0gdXJsLnNsaWNlKC0xKS5wb3AoKTtcblxuICAgIGlmICh0aGlzLmtwaUxpc3REYXRhLmxlbmd0aCA+IDAgfHwgdGhpcy5rcGlMaXN0RGF0YSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGtwaUNvbnRhaW5lciA9IHRoaXMuZ2V0QnJlYWRDcnVtYnNEYXRhKHRoaXMua3BpTGlzdERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrcGlDb250YWluZXIgPSB0aGlzLmdldEJyZWFkQ3J1bWJzRGF0YShcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLmFsbEtwaWJyb3dzZXJEZXRhaWxDb250YWluZXIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBrcGlJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgIGNvbnN0IGtwaVRpZCA9IHRoaXMua3BpX25hbWVzW2twaUlkXTtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMua3BpX3N0cnVjdHVyZXNba3BpVGlkXTtcbiAgICBjb25zdCBwcm9wc0xpc3QgPSBwcm9wc1tcInJlbGF0aXZlUGF0aFwiXSArIFwiL1wiICsgcHJvcHNbXCJuYW1lXCJdO1xuICAgIHRoaXMuYnJlYWRjcnVtYkxpc3QgPSBwcm9wc0xpc3Quc3BsaXQoXCIvXCIpO1xuXG4gICAgaWYgKHRoaXMubG9jYXRpb24ucGF0aCgpICE9PSBcIlwiKSB7XG4gICAgICBsZXQgbGluayA9IHt9O1xuICAgICAgdGhpcy5icmVhZGNydW1iTGlua3NMaXN0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5icmVhZGNydW1iTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmtwaUJyb3dzZXJOYW1lKSB7XG4gICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvcmFLcGkvcmFrcGlCcm93c2VyXCIsXG4gICAgICAgICAgICAgIGtwaU5hbWU6IFwiUkEgS1BJIEJyb3dzZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmsgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgICAgIHVybDogXCIvYXBwcy9mbXNLcGlcIixcbiAgICAgICAgICAgICAga3BpTmFtZTogXCJGTVMgS1BJIEJyb3dzZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCByZXR1cm5JZCA9IFwiXCI7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gaTsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaiAhPSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybklkICs9IFwiL1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuSWQgKz0gdGhpcy5icmVhZGNydW1iTGlzdFtqXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGluayA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgICB1cmw6IHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdFtpIC0gMV1bXCJ1cmxcIl0sXG4gICAgICAgICAgICBpZDogdGhpcy5icmVhZGNydW1iTGlzdFtpXSxcbiAgICAgICAgICAgIGtwaU5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgICByZXR1cm5JZDogcmV0dXJuSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2xvYmFsX2twaV9uYW1lID0gdGhpcy5icmVhZGNydW1iTGlzdFtpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJMaW5rc0xpc3QucHVzaChsaW5rKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY291bnQgPSB0aGlzLmJyZWFkY3J1bWJMaXN0Lmxlbmd0aDtcbiAgICB9XG4gIH1cbn1cbiIsIjxuYXYgY2xhc3M9XCJmbGV4IG10LTFcIiBhcmlhLWxhYmVsPVwiQnJlYWRjcnVtYlwiICpuZ0lmPVwiaXNCcmVhZENydW1ic1wiPlxuICAgIDxvbCBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEgbWQ6c3BhY2UteC0zXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiICpuZ0Zvcj1cImxldCBicmVhZGNydW1iTGFiZWwgb2YgYnJlYWRjcnVtYkxpbmtzTGlzdDtcIj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImJyZWFkY3J1bWJMYWJlbC51cmxcIiBbcXVlcnlQYXJhbXNdPVwie3JldHVybklkOiBicmVhZGNydW1iTGFiZWwucmV0dXJuSWQgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3LTYgaC02IHRleHQtZ3JheS00MDBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuMjkzIDE0LjcwN2ExIDEgMCAwMTAtMS40MTRMMTAuNTg2IDEwIDcuMjkzIDYuNzA3YTEgMSAwIDAxMS40MTQtMS40MTRsNCA0YTEgMSAwIDAxMCAxLjQxNGwtNCA0YTEgMSAwIDAxLTEuNDE0IDB6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAge3ticmVhZGNydW1iTGFiZWwua3BpTmFtZX19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbjwvbmF2PiJdfQ==
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2dhbW1hLWJyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvZ2FtbWEtYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWXpELE1BQU0sT0FBTyxvQkFBb0I7SUFpQy9CLFlBQ1UsUUFBa0IsRUFDbEIsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGNBQThCLEVBQzlCLGFBQTRCO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBaEN0QyxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQTZCTixDQUFDO0lBeEJMLElBQ0ksa0JBQWtCLENBQUMsS0FBSztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsT0FBTztTQUNSO2FBQU07WUFHTCxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBVUQsUUFBUTtJQUdSLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVk7UUFFM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxHQUFHLENBQUM7WUFDUixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBRXBDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDakMsSUFBSSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzthQUNyRDtZQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQixHQUFHLEdBQUc7b0JBQ0osTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUN0QixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUMxQixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQztpQkFDdkMsQ0FBQzthQUNIO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsSUFBSTtRQUNyQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQixNQUFNLElBQUksR0FBVyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQ2hCLENBQUM7YUFDSDtZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRS9DLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZTtRQUViLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO1lBQ2hFLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDTCxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUNoRCxDQUFDO1NBQ0g7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTNDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO2dCQUU5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTs0QkFDeEIsSUFBSSxHQUFHO2dDQUNMLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQ0FDNUIsR0FBRyxFQUFFLDBCQUEwQjtnQ0FDL0IsT0FBTyxFQUFFLGdCQUFnQjs2QkFDMUIsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTCxJQUFJLEdBQUc7Z0NBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dDQUM1QixHQUFHLEVBQUUsY0FBYztnQ0FDbkIsT0FBTyxFQUFFLGlCQUFpQjs2QkFDM0IsQ0FBQzt5QkFDSDtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDVixRQUFRLElBQUksR0FBRyxDQUFDOzZCQUNqQjs0QkFDRCxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDcEM7d0JBQ0QsSUFBSSxHQUFHOzRCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs0QkFDNUIsR0FBRyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDOzRCQUMzQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs0QkFDL0IsUUFBUSxFQUFFLFFBQVE7eUJBQ25CLENBQUM7d0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDN0Q7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN6QztTQUNGO0lBRUgsQ0FBQzs7aUhBaktVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdIQ1pqQyx5aENBZU07MkZESE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG9CQUFvQjtzTUFvQjFCLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb25cIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZ2FtbWEtYnJlYWQtY3J1bWJzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9icmVhZC1jcnVtYnMuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkQ3J1bWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBicmVhZGNydW1iTGlzdDtcbiAgYnJlYWRjcnVtYkxpbmtzTGlzdDtcbiAgcm91dGU6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAga3BpTGlzdERhdGE6IGFueSA9IFtdO1xuICBrcGlfc3RydWN0dXJlcyA9IHt9O1xuICBrcGlfbmFtZXMgPSB7fTtcbiAga3BpVXJsSUQ7XG4gIGRhdGEgPSBbXTtcblxuICBrcGlCcm93c2VyTmFtZTogQm9vbGVhbjtcbiAgaXNCcmVhZENydW1iczogQm9vbGVhbjtcblxuICBASW5wdXQoJ2twaV9kYXRhX2NvbnRhaW5lcicpXG4gIHNldCBrcGlfZGF0YV9jb250YWluZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNCcmVhZENydW1icyA9IGZhbHNlO1xuICAgICAgLy8gdGhpcy5hZGRSb2xlQ29udGFpbmVyID0gW3sgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInZhbHVlXCI6ICcnLCBcInJvbGVpZFwiOiBcInJvd0lkMFwiIH1dO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHRoaXMua3BpTGlzdERhdGEgPSB2YWx1ZTtcbiAgICAgIGxldCByZWxhdGl2ZVBhdGggPSAncmFrcGlCcm93c2VyJztcbiAgICAgIHRoaXMuZ2V0S3BpTmFtZSh2YWx1ZSwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRCcmVhZENydW1icygpO1xuICAgICAgfSwgNTAwKTtcbiAgICAgIHRoaXMuaXNCcmVhZENydW1icyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG5cbiAgfVxuXG4gIGdldEtwaU5hbWUoZGF0YSwgcmVsYXRpdmVQYXRoKSB7XG5cbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB7fTtcbiAgICAgIGxldCBvYmo7XG4gICAgICBpdGVtWydyZWxhdGl2ZVBhdGgnXSA9IHJlbGF0aXZlUGF0aDtcblxuICAgICAgaWYgKHJlc3VsdFsnbm9kZXMnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBjaGlsZFJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aCArICcvJyArIHJlc3VsdFsnbmFtZSddO1xuICAgICAgICB0aGlzLmdldEtwaU5hbWUocmVzdWx0Wydub2RlcyddLCBjaGlsZFJlbGF0aXZlUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0WydpZCddKSB7XG4gICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAnbmFtZSc6IHJlc3VsdFsnbmFtZSddLFxuICAgICAgICAgICdkZXNjJzogcmVzdWx0WydkZXNjJ10sXG4gICAgICAgICAgJ3JlbGF0aXZlUGF0aCc6IHJlc3VsdFsncmVsYXRpdmVQYXRoJ10sXG4gICAgICAgICAgJ2twaUlkJzogcmVzdWx0WydpZCddLFxuICAgICAgICAgICdwYWdlSWQnOiByZXN1bHRbJ3BhZ2VJZCddLFxuICAgICAgICAgICdpc0Jvb2ttYXJrZWQnOiByZXN1bHRbJ2lzQm9va21hcmtlZCddLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaXRlbVsnZXh0ZXJuYWxMaW5rJ10gPSByZWxhdGl2ZVBhdGggKyAnLycgKyByZXN1bHRbJ25hbWUnXVxuICAgICAgaXRlbVsndGlkJ10gPSByZXN1bHRbJ3RpZCddO1xuICAgICAgaXRlbVsnaWQnXSA9IHJlc3VsdFsnaWQnXTtcbiAgICAgIGl0ZW1bJ3BhZ2VJZCddID0gcmVzdWx0WydwYWdlSWQnXTtcbiAgICAgIGl0ZW1bJ25hbWUnXSA9IHJlc3VsdFsnbmFtZSddO1xuXG4gICAgICB0aGlzLmtwaUxpc3REYXRhLnB1c2goaXRlbSk7XG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgZ2V0QnJlYWRDcnVtYnNEYXRhKGRhdGEpIHtcbiAgICBsZXQgc3RydWN0dXJlcyA9IHt9O1xuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgaXRlbTogb2JqZWN0ID0ge307XG4gICAgICBpdGVtW1wicmVsYXRpdmVQYXRoXCJdID0gcmVzdWx0LnJlbGF0aXZlUGF0aDtcbiAgICAgIGl0ZW1bXCJuYW1lXCJdID0gcmVzdWx0W1wibmFtZVwiXTtcbiAgICAgIGl0ZW1bXCJwYWdlSWRcIl0gPSByZXN1bHRbXCJwYWdlSWRcIl07XG4gICAgICBpdGVtW1widGlkXCJdID0gcmVzdWx0W1widGlkXCJdLnRyaW0oKTtcbiAgICAgIGlmIChyZXN1bHRbXCJub2Rlc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW1bXCJub2Rlc1wiXSA9IHRoaXMuZ2V0QnJlYWRDcnVtYnNEYXRhKFxuICAgICAgICAgIHJlc3VsdFtcIm5vZGVzXCJdXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMua3BpX25hbWVzW3Jlc3VsdFtcInBhZ2VJZFwiXV0gPSBpdGVtW1widGlkXCJdO1xuXG4gICAgICBzdHJ1Y3R1cmVzW3Jlc3VsdFtcInRpZFwiXV0gPSBpdGVtO1xuICAgICAgdGhpcy5rcGlfc3RydWN0dXJlc1tyZXN1bHRbXCJ0aWRcIl1dID0gaXRlbTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RydWN0dXJlcztcbiAgfVxuXG4gIGxvYWRCcmVhZENydW1icygpIHtcblxuICAgIGxldCBrcGlSb290ID0gdGhpcy5rcGlCcm93c2VyTmFtZSA/IFwiZm1za3BpXCIgOiBcInJha3BpXCI7XG4gICAgbGV0IGtwaUNvbnRhaW5lcjtcbiAgICBpZiAodGhpcy5rcGlMaXN0RGF0YS5sZW5ndGggPiAwIHx8IHRoaXMua3BpTGlzdERhdGEgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBrcGlDb250YWluZXIgPSB0aGlzLmdldEJyZWFkQ3J1bWJzRGF0YSh0aGlzLmtwaUxpc3REYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3BpQ29udGFpbmVyID0gdGhpcy5nZXRCcmVhZENydW1ic0RhdGEoXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5hbGxLcGlicm93c2VyRGV0YWlsQ29udGFpbmVyLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qga3BpSWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBjb25zdCBrcGlUaWQgPSB0aGlzLmtwaV9uYW1lc1trcGlJZF07XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmtwaV9zdHJ1Y3R1cmVzW2twaVRpZF07XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBjb25zdCBwcm9wc0xpc3QgPSBwcm9wc1tcInJlbGF0aXZlUGF0aFwiXSArIFwiL1wiICsgcHJvcHNbXCJuYW1lXCJdO1xuICAgICAgdGhpcy5icmVhZGNydW1iTGlzdCA9IHByb3BzTGlzdC5zcGxpdChcIi9cIik7XG5cbiAgICAgIGlmICh0aGlzLmxvY2F0aW9uLnBhdGgoKSAhPT0gXCJcIikge1xuICAgICAgICBsZXQgbGluayA9IHt9O1xuICAgICAgICB0aGlzLmJyZWFkY3J1bWJMaW5rc0xpc3QgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnJlYWRjcnVtYkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua3BpQnJvd3Nlck5hbWUpIHtcbiAgICAgICAgICAgICAgbGluayA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICAgIHVybDogXCIvYXBwcy9yYUtwaS9yYWtwaUJyb3dzZXJcIixcbiAgICAgICAgICAgICAgICBrcGlOYW1lOiBcIlJBIEtQSSBCcm93c2VyXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2Ztc0twaVwiLFxuICAgICAgICAgICAgICAgIGtwaU5hbWU6IFwiRk1TIEtQSSBCcm93c2VyXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5JZCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICAgICAgaWYgKGogIT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybklkICs9IFwiL1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybklkICs9IHRoaXMuYnJlYWRjcnVtYkxpc3Rbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICB1cmw6IHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdFtpIC0gMV1bXCJ1cmxcIl0sXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICBrcGlOYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICByZXR1cm5JZDogcmV0dXJuSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLmdsb2JhbF9rcGlfbmFtZSA9IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdC5wdXNoKGxpbmspO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmJyZWFkY3J1bWJMaXN0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIiwiPG5hdiBjbGFzcz1cImZsZXggbXQtMVwiIGFyaWEtbGFiZWw9XCJCcmVhZGNydW1iXCIgKm5nSWY9XCJpc0JyZWFkQ3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSBtZDpzcGFjZS14LTNcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKm5nRm9yPVwibGV0IGJyZWFkY3J1bWJMYWJlbCBvZiBicmVhZGNydW1iTGlua3NMaXN0O1wiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiYnJlYWRjcnVtYkxhYmVsLnVybFwiIFtxdWVyeVBhcmFtc109XCJ7cmV0dXJuSWQ6IGJyZWFkY3J1bWJMYWJlbC5yZXR1cm5JZCB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInctNiBoLTYgdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4yOTMgMTQuNzA3YTEgMSAwIDAxMC0xLjQxNEwxMC41ODYgMTAgNy4yOTMgNi43MDdhMSAxIDAgMDExLjQxNC0xLjQxNGw0IDRhMSAxIDAgMDEwIDEuNDE0bC00IDRhMSAxIDAgMDEtMS40MTQgMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICB7e2JyZWFkY3J1bWJMYWJlbC5rcGlOYW1lfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuPC9uYXY+Il19
|