nuxeo-development-framework 4.2.1 → 4.2.3
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/bundles/nuxeo-development-framework.umd.js +1868 -1453
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/charts/chart.const.js +3 -0
- package/esm2015/lib/components/charts/chart.token.js +3 -0
- package/esm2015/lib/components/charts/charts.module.js +19 -0
- package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
- package/esm2015/lib/components/charts/components/chart.component.js +131 -0
- package/esm2015/lib/components/charts/components/data-chart.component.js +164 -0
- package/esm2015/lib/components/charts/components/index.js +4 -0
- package/esm2015/lib/components/charts/defaults/bar.js +18 -0
- package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
- package/esm2015/lib/components/charts/defaults/index.js +5 -0
- package/esm2015/lib/components/charts/defaults/line.js +36 -0
- package/esm2015/lib/components/charts/defaults/pie.js +20 -0
- package/esm2015/lib/components/charts/index.js +9 -0
- package/esm2015/lib/components/charts/models/index.js +5 -0
- package/esm2015/lib/components/charts/models/options.js +2 -0
- package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
- package/esm2015/lib/components/charts/models/response.js +2 -0
- package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
- package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +21 -0
- package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +30 -0
- package/esm2015/lib/components/charts/plugins/index.js +3 -0
- package/esm2015/lib/components/charts/services/index.js +2 -0
- package/esm2015/lib/components/charts/services/statistic.service.js +17 -0
- package/esm2015/lib/components/charts/utility/colors.js +79 -0
- package/esm2015/lib/components/charts/utility/common.js +7 -0
- package/esm2015/lib/components/charts/utility/index.js +3 -0
- package/esm2015/lib/components/comments/comments.module.js +9 -5
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +28 -34
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +31 -35
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +41 -41
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +30 -34
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +9 -5
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +32 -24
- package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +11 -9
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +30 -29
- package/esm2015/lib/components/documents/documents.module.js +2 -6
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +45 -40
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +21 -17
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +98 -92
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +14 -12
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +62 -36
- package/esm2015/lib/components/file-manger/components/move/move.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +15 -11
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +53 -23
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +269 -267
- package/esm2015/lib/components/notifications/components/base-notifications.component.js +2 -16
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +2 -2
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
- package/esm2015/lib/shared-services/dialog-mangment.service.js +27 -23
- package/esm2015/lib/shared-services/shared-docs.service.js +22 -27
- package/esm2015/public-api.js +4 -5
- package/fesm2015/nuxeo-development-framework.js +1636 -1216
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/charts/chart.const.d.ts +2 -0
- package/lib/components/charts/chart.token.d.ts +8 -0
- package/lib/components/charts/charts.module.d.ts +9 -0
- package/lib/components/charts/components/base-chart.component.d.ts +21 -0
- package/lib/components/charts/components/chart.component.d.ts +28 -0
- package/lib/components/charts/components/data-chart.component.d.ts +32 -0
- package/lib/components/charts/components/index.d.ts +3 -0
- package/lib/components/charts/defaults/bar.d.ts +2 -0
- package/lib/components/charts/defaults/doughnut.d.ts +2 -0
- package/lib/components/charts/defaults/index.d.ts +4 -0
- package/lib/components/charts/defaults/line.d.ts +2 -0
- package/lib/components/charts/defaults/pie.d.ts +2 -0
- package/lib/components/charts/index.d.ts +8 -0
- package/lib/components/charts/models/index.d.ts +4 -0
- package/lib/components/charts/models/options.d.ts +11 -0
- package/lib/components/charts/models/plugins-options.d.ts +15 -0
- package/lib/components/charts/models/response.d.ts +5 -0
- package/lib/components/charts/models/statistic-request-config.d.ts +28 -0
- package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
- package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
- package/lib/components/charts/plugins/index.d.ts +2 -0
- package/lib/components/charts/services/index.d.ts +1 -0
- package/lib/components/charts/services/statistic.service.d.ts +9 -0
- package/lib/components/charts/utility/colors.d.ts +11 -0
- package/lib/components/charts/utility/common.d.ts +4 -0
- package/lib/components/charts/utility/index.d.ts +2 -0
- package/lib/components/comments/comments.module.d.ts +2 -1
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
- package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +8 -5
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +4 -2
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +6 -4
- package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +4 -2
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +2 -1
- package/lib/components/documents/components/document-list/documents-list.component.d.ts +3 -1
- package/lib/components/documents/documents.module.d.ts +13 -14
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +11 -10
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +5 -6
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +6 -4
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +11 -5
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +4 -3
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +11 -4
- package/lib/components/file-manger/file-manager.abstract.d.ts +25 -23
- package/lib/components/notifications/components/base-notifications.component.d.ts +2 -8
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
- package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
- package/lib/shared-services/dialog-mangment.service.d.ts +3 -3
- package/lib/shared-services/shared-docs.service.d.ts +4 -2
- package/package.json +3 -4
- package/public-api.d.ts +3 -4
- package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +0 -77
- package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +0 -28
- package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +0 -29
- package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +0 -164
- package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +0 -46
- package/lib/components/confirm-caller/confirm-caller.module.d.ts +0 -17
- package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +0 -12
- package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +0 -33
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, Input, ViewChild, } from
|
|
3
|
-
import { Chart } from
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { Chart } from 'chart.js/auto';
|
|
4
|
+
// import 'chartjs-plugin-labels';
|
|
5
|
+
import 'chartjs-adapter-moment';
|
|
6
6
|
import * as _ from 'lodash';
|
|
7
|
-
import '
|
|
8
|
-
import '
|
|
7
|
+
import { Subject, forkJoin, fromEvent } from 'rxjs';
|
|
8
|
+
import { debounceTime, map, takeUntil } from 'rxjs/operators';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@ngx-translate/core";
|
|
11
11
|
import * as i2 from "../../../core/services/callApi/call-api.service";
|
|
@@ -17,7 +17,7 @@ import * as i7 from "../../../shared/components/spinner/spinner.component";
|
|
|
17
17
|
import * as i8 from "@angular/common";
|
|
18
18
|
/** @ignore */
|
|
19
19
|
export class DynamicChartComponent {
|
|
20
|
-
constructor(translate, changeDetector, callApi, router, chartData, translationService, departmentApiService) {
|
|
20
|
+
constructor(translate, changeDetector, callApi, router, chartData, translationService, departmentApiService, ngZone) {
|
|
21
21
|
this.translate = translate;
|
|
22
22
|
this.changeDetector = changeDetector;
|
|
23
23
|
this.callApi = callApi;
|
|
@@ -25,13 +25,14 @@ export class DynamicChartComponent {
|
|
|
25
25
|
this.chartData = chartData;
|
|
26
26
|
this.translationService = translationService;
|
|
27
27
|
this.departmentApiService = departmentApiService;
|
|
28
|
+
this.ngZone = ngZone;
|
|
28
29
|
this.prefix = 'STATS.'; // for translation
|
|
29
30
|
this.randomColors = false;
|
|
30
31
|
this.onDestroy$ = new Subject();
|
|
31
32
|
this.creatChart = new Subject();
|
|
32
33
|
this.headers = {}; // headers in constants
|
|
33
34
|
this.range = '["from_now-7d_to_now"]';
|
|
34
|
-
this.selectedRange =
|
|
35
|
+
this.selectedRange = 'week'; // range to be filterd on
|
|
35
36
|
this.colors = {
|
|
36
37
|
inProgress: '#3c3cf0',
|
|
37
38
|
registered: '#5a1496',
|
|
@@ -50,14 +51,23 @@ export class DynamicChartComponent {
|
|
|
50
51
|
this.cardTitle = '';
|
|
51
52
|
this.noFetchedKey = false;
|
|
52
53
|
this.isInternalActive = false; // used to control on showing results of internal coresp results in charts
|
|
53
|
-
Chart.defaults.
|
|
54
|
-
Chart.defaults.
|
|
55
|
-
this.translate.onLangChange
|
|
56
|
-
.pipe(takeUntil(this.onDestroy$))
|
|
57
|
-
.subscribe((data) => {
|
|
54
|
+
Chart.defaults.font.family = 'FS Albert Arabic Web';
|
|
55
|
+
Chart.defaults.font.size = 13;
|
|
56
|
+
this.translate.onLangChange.pipe(takeUntil(this.onDestroy$)).subscribe((data) => {
|
|
58
57
|
this.creatChart.next();
|
|
59
58
|
});
|
|
60
59
|
}
|
|
60
|
+
listenToWindowResize() {
|
|
61
|
+
this.ngZone.runOutsideAngular(() => {
|
|
62
|
+
fromEvent(window, 'resize')
|
|
63
|
+
.pipe(debounceTime(300), takeUntil(this.onDestroy$))
|
|
64
|
+
.subscribe(() => {
|
|
65
|
+
if (this.chartObj) {
|
|
66
|
+
this.chartObj.resize();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
61
71
|
createChart() {
|
|
62
72
|
this.creatChart.pipe(debounceTime(500)).subscribe((res) => {
|
|
63
73
|
this.getData().subscribe((data) => {
|
|
@@ -156,7 +166,7 @@ export class DynamicChartComponent {
|
|
|
156
166
|
}
|
|
157
167
|
ngOnInit() {
|
|
158
168
|
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
-
this.translationService.isArabic.subscribe(res => {
|
|
169
|
+
this.translationService.isArabic.subscribe((res) => {
|
|
160
170
|
this.isArabic = res;
|
|
161
171
|
});
|
|
162
172
|
setTimeout(() => {
|
|
@@ -223,10 +233,9 @@ export class DynamicChartComponent {
|
|
|
223
233
|
? data.aggregations[this.aggregations].buckets.map((item) => ({
|
|
224
234
|
label: this.fetchedKey
|
|
225
235
|
? _.get(item, this.fetchedKey)
|
|
226
|
-
: this.noFetchedKey
|
|
227
|
-
this.consturctChartLabel(item)
|
|
228
|
-
:
|
|
229
|
-
item.key,
|
|
236
|
+
: this.noFetchedKey
|
|
237
|
+
? this.consturctChartLabel(item)
|
|
238
|
+
: item.key,
|
|
230
239
|
count: item.docCount,
|
|
231
240
|
}))
|
|
232
241
|
: [];
|
|
@@ -255,7 +264,7 @@ export class DynamicChartComponent {
|
|
|
255
264
|
depCode = groupSplit[groupSplit.length - 3];
|
|
256
265
|
let dirExtracted = groupSplit[0];
|
|
257
266
|
direction = this.translationService.instant(dirExtracted[0].toUpperCase() + dirExtracted.substr(1).toLowerCase());
|
|
258
|
-
this.departmentApiService.getDepartmentDetails(depCode).subscribe(res => {
|
|
267
|
+
this.departmentApiService.getDepartmentDetails(depCode).subscribe((res) => {
|
|
259
268
|
var _a, _b;
|
|
260
269
|
departmentName = this.isArabic
|
|
261
270
|
? (_a = res === null || res === void 0 ? void 0 : res.entries[0]) === null || _a === void 0 ? void 0 : _a.properties['dept:arabicName']
|
|
@@ -267,14 +276,17 @@ export class DynamicChartComponent {
|
|
|
267
276
|
depCode = groupSplit[groupSplit.length - 2];
|
|
268
277
|
let dirExtracted = groupSplit[0];
|
|
269
278
|
direction = this.translationService.instant(dirExtracted[0].toUpperCase() + dirExtracted.substr(1).toLowerCase());
|
|
270
|
-
this.departmentApiService.getDepartmentDetails(depCode).subscribe(res => {
|
|
279
|
+
this.departmentApiService.getDepartmentDetails(depCode).subscribe((res) => {
|
|
271
280
|
var _a, _b;
|
|
272
281
|
departmentName = this.isArabic
|
|
273
282
|
? (_a = res === null || res === void 0 ? void 0 : res.entries[0]) === null || _a === void 0 ? void 0 : _a.properties['dept:arabicName']
|
|
274
283
|
: (_b = res === null || res === void 0 ? void 0 : res.entries[0]) === null || _b === void 0 ? void 0 : _b.properties['dept:englishName'];
|
|
275
284
|
});
|
|
276
285
|
}
|
|
277
|
-
label =
|
|
286
|
+
label =
|
|
287
|
+
this.aggregations == 'assignment_department_agg'
|
|
288
|
+
? departmentName + '-' + secrecy
|
|
289
|
+
: departmentName + ' ' + direction + '-' + secrecy;
|
|
278
290
|
}
|
|
279
291
|
else {
|
|
280
292
|
label = item.fetchedKey.fullName;
|
|
@@ -304,9 +316,7 @@ export class DynamicChartComponent {
|
|
|
304
316
|
.pipe(map((data) => {
|
|
305
317
|
const items = data.aggregations[this.aggregations].buckets
|
|
306
318
|
? data.aggregations[this.aggregations].buckets.map((item) => ({
|
|
307
|
-
label: this.fetchedKey
|
|
308
|
-
? _.get(item, this.fetchedKey)
|
|
309
|
-
: item.key,
|
|
319
|
+
label: this.fetchedKey ? _.get(item, this.fetchedKey) : item.key,
|
|
310
320
|
count: item.docCount,
|
|
311
321
|
id: item.key,
|
|
312
322
|
status: statusOne,
|
|
@@ -340,9 +350,7 @@ export class DynamicChartComponent {
|
|
|
340
350
|
.pipe(map((data) => {
|
|
341
351
|
const items = data.aggregations[this.aggregations].buckets
|
|
342
352
|
? data.aggregations[this.aggregations].buckets.map((item) => ({
|
|
343
|
-
label: this.fetchedKey
|
|
344
|
-
? _.get(item, this.fetchedKey)
|
|
345
|
-
: item.key,
|
|
353
|
+
label: this.fetchedKey ? _.get(item, this.fetchedKey) : item.key,
|
|
346
354
|
count: item.docCount,
|
|
347
355
|
id: item.key,
|
|
348
356
|
status: statusTwo,
|
|
@@ -376,9 +384,7 @@ export class DynamicChartComponent {
|
|
|
376
384
|
.pipe(map((data) => {
|
|
377
385
|
const items = data.aggregations[this.aggregations].buckets
|
|
378
386
|
? data.aggregations[this.aggregations].buckets.map((item) => ({
|
|
379
|
-
label: this.fetchedKey
|
|
380
|
-
? _.get(item, this.fetchedKey)
|
|
381
|
-
: item.key,
|
|
387
|
+
label: this.fetchedKey ? _.get(item, this.fetchedKey) : item.key,
|
|
382
388
|
count: item.docCount,
|
|
383
389
|
id: item.key,
|
|
384
390
|
status: statusThree,
|
|
@@ -406,7 +412,6 @@ export class DynamicChartComponent {
|
|
|
406
412
|
}
|
|
407
413
|
}
|
|
408
414
|
previewCorrespondences() {
|
|
409
|
-
console.log("params", this.systemCurrentLifeCycleState);
|
|
410
415
|
let queryParams;
|
|
411
416
|
if (this.combinedData) {
|
|
412
417
|
queryParams = {
|
|
@@ -424,7 +429,7 @@ export class DynamicChartComponent {
|
|
|
424
429
|
statusThree: this.statusThree,
|
|
425
430
|
min: this.min,
|
|
426
431
|
max: this.max,
|
|
427
|
-
chartTitle: this.cardTitle
|
|
432
|
+
chartTitle: this.cardTitle,
|
|
428
433
|
};
|
|
429
434
|
}
|
|
430
435
|
else {
|
|
@@ -438,7 +443,7 @@ export class DynamicChartComponent {
|
|
|
438
443
|
systemCurrentLifeCycleState: this.systemCurrentLifeCycleState,
|
|
439
444
|
min: this.min,
|
|
440
445
|
max: this.max,
|
|
441
|
-
chartTitle: this.cardTitle
|
|
446
|
+
chartTitle: this.cardTitle,
|
|
442
447
|
};
|
|
443
448
|
}
|
|
444
449
|
// if there tenant id sent from outside then add it to the params
|
|
@@ -458,16 +463,16 @@ export class DynamicChartComponent {
|
|
|
458
463
|
return 'hsl(' + h + ', ' + s + '%, ' + l + '%)';
|
|
459
464
|
}
|
|
460
465
|
}
|
|
461
|
-
DynamicChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i2.CallApiService }, { token: i3.Router }, { token: i4.ChartDataService }, { token: i5.TranslationService }, { token: i6.DepartmentApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
462
|
-
DynamicChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicChartComponent, selector: "cts-dynamic-chart", inputs: { prefix: "prefix", chartType: "chartType", randomColors: "randomColors", pageProvider: "pageProvider", headers: "headers", observable: "observable", aggregations: "aggregations", quickFilters: "quickFilters", systemCurrentLifeCycleState: "systemCurrentLifeCycleState", range: "range", label: "label", selectedRange: "selectedRange", tenantId: "tenantId", colors: "colors", randomColor: "randomColor", fetchedKey: "fetchedKey", pageProviderTwo: "pageProviderTwo", quickFilterTwo: "quickFilterTwo", quickFilterThree: "quickFilterThree", combinedData: "combinedData", statusOne: "statusOne", statusTwo: "statusTwo", statusThree: "statusThree", min: "min", max: "max", width: "width", height: "height", card: "card", cardTitle: "cardTitle", inputChartData: "inputChartData", asigneeDepartments: "asigneeDepartments", noFetchedKey: "noFetchedKey", isInternalActive: "isInternalActive" }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["revenueLineChart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"card-continer\" *ngIf=\"card; else test\">\r\n <div class=\"chart-card-header\">\r\n <div class=\"chart-card-title\">{{ cardTitle | translate }}</div>\r\n <button class=\"chart-card-button\" (click)=\"previewCorrespondences()\">\r\n {{ \"report.Preview\" | translate }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"isFetching\">\r\n <cts-spinner></cts-spinner>\r\n </ng-container>\r\n <div class=\"stat\" [style.height.px]=\"height\">\r\n <div [hidden]=\"data.data?.length == 0 || data.length == 0\">\r\n <canvas #revenueLineChart [height]=\"height\" [width]=\"width\"></canvas>\r\n </div>\r\n <div class=\"no-stats\" *ngIf=\"data.data?.length == 0 || data.length == 0\">\r\n <span>{{ \"STATS.noData\" | translate }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #test>\r\n <div class=\"stat\">\r\n <canvas #revenueLineChart [height]=\"height\" [width]=\"width\"></canvas>\r\n </div>\r\n</ng-template>\r\n\r\n", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.no-stats{width:100%;height:100%;display:grid;place-items:center}.card-continer{background:#ffffff;border-radius:5px;width:100%;padding:16px 20px;box-shadow:0 1px 1px #00000017}.card-continer .chart-card-header{display:flex;justify-content:space-between;align-items:center}.card-continer .chart-card-header .chart-card-title{font-weight:500}.card-continer .chart-card-header .chart-card-button{all:unset;background:#3341551a;color:#465573;padding:6px 18px;border-radius:24px;font-size:16px;cursor:pointer}.card-continer .chart-card-header .chart-card-button:hover{background:#8f98aa;color:#fff}\n"], components: [{ type: i7.SpinnerComponent, selector: "cts-spinner" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe } });
|
|
466
|
+
DynamicChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i2.CallApiService }, { token: i3.Router }, { token: i4.ChartDataService }, { token: i5.TranslationService }, { token: i6.DepartmentApiService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
467
|
+
DynamicChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicChartComponent, selector: "cts-dynamic-chart", inputs: { prefix: "prefix", chartType: "chartType", randomColors: "randomColors", pageProvider: "pageProvider", headers: "headers", observable: "observable", aggregations: "aggregations", quickFilters: "quickFilters", systemCurrentLifeCycleState: "systemCurrentLifeCycleState", range: "range", label: "label", selectedRange: "selectedRange", tenantId: "tenantId", colors: "colors", randomColor: "randomColor", fetchedKey: "fetchedKey", pageProviderTwo: "pageProviderTwo", quickFilterTwo: "quickFilterTwo", quickFilterThree: "quickFilterThree", combinedData: "combinedData", statusOne: "statusOne", statusTwo: "statusTwo", statusThree: "statusThree", min: "min", max: "max", width: "width", height: "height", card: "card", cardTitle: "cardTitle", inputChartData: "inputChartData", asigneeDepartments: "asigneeDepartments", noFetchedKey: "noFetchedKey", isInternalActive: "isInternalActive" }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["revenueLineChart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"card-continer\" *ngIf=\"card; else test\">\r\n <div class=\"chart-card-header\">\r\n <div class=\"chart-card-title\">{{ cardTitle | translate }}</div>\r\n <button class=\"chart-card-button\" (click)=\"previewCorrespondences()\">\r\n {{ 'report.Preview' | translate }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"isFetching\">\r\n <cts-spinner></cts-spinner>\r\n </ng-container>\r\n <div class=\"stat chart-canvas\" [style.height.px]=\"height\">\r\n <div [hidden]=\"data.data?.length == 0 || data.length == 0\">\r\n <canvas #revenueLineChart [height]=\"height\" [width]=\"width\"></canvas>\r\n </div>\r\n <div class=\"no-stats\" *ngIf=\"data.data?.length == 0 || data.length == 0\">\r\n <span>{{ 'STATS.noData' | translate }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #test>\r\n <div class=\"stat\">\r\n <canvas #revenueLineChart [height]=\"height\" [width]=\"width\"></canvas>\r\n </div>\r\n</ng-template>\r\n", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.no-stats{width:100%;height:100%;display:grid;place-items:center}.card-continer{background:#ffffff;border-radius:5px;width:100%;padding:16px 20px;box-shadow:0 1px 1px #00000017}.card-continer .chart-card-header{display:flex;justify-content:space-between;align-items:center}.card-continer .chart-card-header .chart-card-title{font-weight:500}.card-continer .chart-card-header .chart-card-button{all:unset;background:#3341551a;color:#465573;padding:6px 18px;border-radius:24px;font-size:16px;cursor:pointer}.card-continer .chart-card-header .chart-card-button:hover{background:#8f98aa;color:#fff}.chart-canvas{position:relative;width:100%}\n"], components: [{ type: i7.SpinnerComponent, selector: "cts-spinner" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe } });
|
|
463
468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartComponent, decorators: [{
|
|
464
469
|
type: Component,
|
|
465
470
|
args: [{
|
|
466
|
-
selector:
|
|
467
|
-
templateUrl:
|
|
468
|
-
styleUrls: [
|
|
471
|
+
selector: 'cts-dynamic-chart',
|
|
472
|
+
templateUrl: './dynamic-chart.component.html',
|
|
473
|
+
styleUrls: ['./dynamic-chart.component.scss'],
|
|
469
474
|
}]
|
|
470
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i2.CallApiService }, { type: i3.Router }, { type: i4.ChartDataService }, { type: i5.TranslationService }, { type: i6.DepartmentApiService }]; }, propDecorators: { chart: [{
|
|
475
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i2.CallApiService }, { type: i3.Router }, { type: i4.ChartDataService }, { type: i5.TranslationService }, { type: i6.DepartmentApiService }, { type: i0.NgZone }]; }, propDecorators: { chart: [{
|
|
471
476
|
type: ViewChild,
|
|
472
477
|
args: ['revenueLineChart', { static: false }]
|
|
473
478
|
}], prefix: [{
|
|
@@ -537,4 +542,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
537
542
|
}], isInternalActive: [{
|
|
538
543
|
type: Input
|
|
539
544
|
}] } });
|
|
540
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtY2hhcnQvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0L2R5bmFtaWMtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQUtMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFHL0IsY0FBYztBQU1kLE1BQU0sT0FBTyxxQkFBcUI7SUEwRWhDLFlBQ1MsU0FBMkIsRUFDM0IsY0FBaUMsRUFDaEMsT0FBdUIsRUFBVSxNQUFjLEVBQ2hELFNBQTJCLEVBQzFCLGtCQUFzQyxFQUN0QyxvQkFBMEM7UUFMM0MsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVUsV0FBTSxHQUFOLE1B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Z0JBR04sY0FBYztzQkFEYixLQUFLO2dCQUdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBR04sR0FBRztzQkFERixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGFydCB9IGZyb20gXCJjaGFydC5qc1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwsIGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBDYWxsQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2NhbGxBcGkvY2FsbC1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDaGFydERhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NoYXJ0LWRhdGEuc2VydmljZVwiO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCAnY2hhcnRqcy1wbHVnaW4tcGllY2hhcnQtb3V0bGFiZWxzJztcclxuaW1wb3J0ICdjaGFydGpzLXBsdWdpbi1sYWJlbHMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERlcGFydG1lbnRBcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1kZXBhcnRtZW50L3NlcnZpY2VzL2RlcGFydG1lbnQtYXBpLnNlcnZpY2VcIjtcclxuLyoqIEBpZ25vcmUgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiY3RzLWR5bmFtaWMtY2hhcnRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtY2hhcnQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vZHluYW1pYy1jaGFydC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ3JldmVudWVMaW5lQ2hhcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnQ6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KClcclxuICBwcmVmaXggPSAnU1RBVFMuJzsgLy8gZm9yIHRyYW5zbGF0aW9uXHJcbiAgQElucHV0KClcclxuICBjaGFydFR5cGU7IC8vIGZ1bmN0aW9ucyBleGlzdCBpbnNpZGUgQ2hhcnREYXRhU2VydmljZVxyXG4gIEBJbnB1dCgpIHJhbmRvbUNvbG9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY2hhcnRPYmo7XHJcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBjcmVhdENoYXJ0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIEBJbnB1dCgpIHBhZ2VQcm92aWRlcjsgLy8gZGVmaW5lIGFwaSB0byBnZXQgdGhlIGRhdGEgZnJvbVxyXG4gIEBJbnB1dCgpIGhlYWRlcnMgPSB7fTsgLy8gaGVhZGVycyBpbiBjb25zdGFudHNcclxuICBASW5wdXQoKSBvYnNlcnZhYmxlOyAvLyBvYnNlcnZhYmxlIGluIGNhc2Ugb2YgY2FsbCBhcGkgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50XHJcbiAgQElucHV0KCkgYWdncmVnYXRpb25zO1xyXG4gIEBJbnB1dCgpIHF1aWNrRmlsdGVycztcclxuICBASW5wdXQoKSBzeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGU7XHJcbiAgQElucHV0KCkgcmFuZ2UgPSAnW1wiZnJvbV9ub3ctN2RfdG9fbm93XCJdJztcclxuICBASW5wdXQoKSBsYWJlbDtcclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGVkUmFuZ2UgPSBcIndlZWtcIjsgLy8gcmFuZ2UgdG8gYmUgZmlsdGVyZCBvblxyXG4gIEBJbnB1dCgpIHRlbmFudElkOyAvLyB3aWxsIGJlIHNlbnQgb25seSBpbiBjYXNlIG9mIG11bHRpIHRlbmFudFxyXG4gIEBJbnB1dCgpIGNvbG9yczogYW55ID0ge1xyXG4gICAgaW5Qcm9ncmVzczogJyMzYzNjZjAnLFxyXG4gICAgcmVnaXN0ZXJlZDogJyM1YTE0OTYnLFxyXG4gICAgZHJhZnQ6ICcjNTk2OTczJyxcclxuICAgIGFyY2hpdmVkOiAnI2ZiYjYyYycsXHJcbiAgICBjbG9zZWQ6ICcjMDBkY2E1JyxcclxuICAgIGFzc2lnbmVkOiAnI2ZkNjY3MCcsXHJcbiAgICB1bmRlZmluZWQ6ICcjZjdmOGY5JyxcclxuICAgIG90aGVyOiAnI2YxNzIwNScsXHJcbiAgfTtcclxuICBkYXRhOiBhbnkgPSBbXTtcclxuICBpc0ZldGNoaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRzOiBbXTtcclxuICBASW5wdXQoKVxyXG4gIHJhbmRvbUNvbG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBmZXRjaGVkS2V5O1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnZVByb3ZpZGVyVHdvO1xyXG4gIEBJbnB1dCgpXHJcbiAgcXVpY2tGaWx0ZXJUd287XHJcbiAgQElucHV0KClcclxuICBxdWlja0ZpbHRlclRocmVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgY29tYmluZWREYXRhID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBzdGF0dXNPbmU7XHJcbiAgQElucHV0KClcclxuICBzdGF0dXNUd287XHJcbiAgQElucHV0KClcclxuICBzdGF0dXNUaHJlZTtcclxuICBASW5wdXQoKVxyXG4gIG1pbjtcclxuICBASW5wdXQoKVxyXG4gIG1heDtcclxuICBASW5wdXQoKVxyXG4gIHdpZHRoO1xyXG4gIEBJbnB1dCgpXHJcbiAgaGVpZ2h0O1xyXG4gIEBJbnB1dCgpXHJcbiAgY2FyZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgY2FyZFRpdGxlID0gJyc7XHJcbiAgQElucHV0KClcclxuICBpbnB1dENoYXJ0RGF0YTtcclxuICBASW5wdXQoKVxyXG4gIGFzaWduZWVEZXBhcnRtZW50cztcclxuICBASW5wdXQoKVxyXG4gIG5vRmV0Y2hlZEtleSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBpc0ludGVybmFsQWN0aXZlID0gZmFsc2U7IC8vIHVzZWQgdG8gY29udHJvbCBvbiBzaG93aW5nIHJlc3VsdHMgb2YgaW50ZXJuYWwgY29yZXNwIHJlc3VsdHMgaW4gY2hhcnRzXHJcbiAgbXlEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgaXNBcmFiaWM7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgY2FsbEFwaTogQ2FsbEFwaVNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgY2hhcnREYXRhOiBDaGFydERhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGVwYXJ0bWVudEFwaVNlcnZpY2U6IERlcGFydG1lbnRBcGlTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgQ2hhcnQuZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250RmFtaWx5ID0gXCJGUyBBbGJlcnQgQXJhYmljIFdlYlwiO1xyXG4gICAgQ2hhcnQuZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSA9IDEzO1xyXG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdENoYXJ0Lm5leHQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gIH1cclxuICBjcmVhdGVDaGFydCgpIHtcclxuICAgIHRoaXMuY3JlYXRDaGFydC5waXBlKGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmdldERhdGEoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGxldCByYW5kb21Db2xvcnMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yYW5kb21Db2xvcnMpIHtcclxuICAgICAgICAgIGRhdGEuZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJhbmRvbUNvbG9yc1tpdGVtLmxhYmVsXSA9IHRoaXMuc3RyaW5nVG9Ic2xDb2xvcihcclxuICAgICAgICAgICAgICBgJHtpdGVtLmxhYmVsfWAsXHJcbiAgICAgICAgICAgICAgNDAsXHJcbiAgICAgICAgICAgICAgNzBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbG9ycyA9IHRoaXMucmFuZG9tQ29sb3JzID8gcmFuZG9tQ29sb3JzIDogdGhpcy5jb2xvcnM7XHJcbiAgICAgICAgY29uc3QgeyBvcHRpb25zLCBjaGFydERhdGEgfSA9IHRoaXMuY2hhcnREYXRhW3RoaXMuY2hhcnRUeXBlXSh7XHJcbiAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgY29sb3JzOiB0aGlzLmNvbG9ycyxcclxuICAgICAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRhdGEuZGF0YT8ubGVuZ3RoIHx8IGRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnRPYmopIHtcclxuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jaGFydC5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRPYmogPSBuZXcgQ2hhcnQoY3R4LCBvcHRpb25zKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRPYmouY2hhcnQuZGF0YSA9IGNoYXJ0RGF0YTtcclxuICAgICAgICAgICAgdGhpcy5jaGFydE9iai51cGRhdGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY29uc3QgY3R4ID0gdGhpcy5jaGFydC5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAvLyBsZXQgbm9PcHRpb25zID0ge1xyXG4gICAgICAgICAgLy8gICB0eXBlOiBvcHRpb25zLnR5cGUsXHJcbiAgICAgICAgICAvLyAgIGRhdGE6IHtcclxuICAgICAgICAgIC8vICAgICBkYXRhc2V0czogW10sXHJcbiAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAvLyAgIG9wdGlvbnM6IHt9LFxyXG4gICAgICAgICAgLy8gfTtcclxuICAgICAgICAgIC8vIHRoaXMuY2hhcnRPYmogPSBuZXcgQ2hhcnQoY3R4LCBub09wdGlvbnMpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jaGFydE9iai5jaGFydC5kYXRhID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBjcmVhdGVDaGFydFdpdGhvdXRQUCgpIHtcclxuICAgIHRoaXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNyZWF0Q2hhcnQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5pbnB1dENoYXJ0RGF0YTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGxldCByYW5kb21Db2xvcnMgPSB7fTtcclxuICAgICAgaWYgKHRoaXMucmFuZG9tQ29sb3JzKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmFuZG9tQ29sb3JzW2l0ZW0ubGFiZWxdID0gdGhpcy5zdHJpbmdUb0hzbENvbG9yKFxyXG4gICAgICAgICAgICBgJHtpdGVtLmxhYmVsfWAsXHJcbiAgICAgICAgICAgIDQwLFxyXG4gICAgICAgICAgICA3MFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbG9ycyA9IHRoaXMucmFuZG9tQ29sb3JzID8gcmFuZG9tQ29sb3JzIDogdGhpcy5jb2xvcnM7XHJcbiAgICAgIGNvbnN0IHsgb3B0aW9ucywgY2hhcnREYXRhIH0gPSB0aGlzLmNoYXJ0RGF0YVt0aGlzLmNoYXJ0VHlwZV0oe1xyXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcclxuICAgICAgICBjb2xvcnM6IHRoaXMuY29sb3JzLFxyXG4gICAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLmRhdGE/Lmxlbmd0aCB8fCB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0T2JqKSB7XHJcbiAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmNoYXJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgIHRoaXMuY2hhcnRPYmogPSBuZXcgQ2hhcnQoY3R4LCBvcHRpb25zKTtcclxuICAgICAgICAgIHRoaXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoYXJ0T2JqLmNoYXJ0LmRhdGEgPSBjaGFydERhdGE7XHJcbiAgICAgICAgICB0aGlzLmNoYXJ0T2JqLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgdGhpcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyBjb25zdCBjdHggPSB0aGlzLmNoYXJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAvLyBsZXQgbm9PcHRpb25zID0ge1xyXG4gICAgICAgIC8vICAgdHlwZTogb3B0aW9ucy50eXBlLFxyXG4gICAgICAgIC8vICAgZGF0YToge1xyXG4gICAgICAgIC8vICAgICBkYXRhc2V0czogW10sXHJcbiAgICAgICAgLy8gICB9LFxyXG4gICAgICAgIC8vICAgb3B0aW9uczoge30sXHJcbiAgICAgICAgLy8gfTtcclxuICAgICAgICAvLyB0aGlzLmNoYXJ0T2JqID0gbmV3IENoYXJ0KGN0eCwgbm9PcHRpb25zKTtcclxuICAgICAgICAvLyB0aGlzLmNoYXJ0T2JqLmNoYXJ0LmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0cygpIHtcclxuICAgIGlmICh0aGlzLmlucHV0Q2hhcnREYXRhKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnRXaXRob3V0UFAoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmlzQXJhYmljLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID0gcmVzO1xyXG4gICAgfSlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dENoYXJ0RGF0YSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnRXaXRob3V0UFAoKTtcclxuICAgICAgICB0aGlzLmNyZWF0Q2hhcnQubmV4dCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuICAgICAgICB0aGlzLmNyZWF0Q2hhcnQubmV4dCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy5pc0ZldGNoaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IG1pbkNoYW5nZWQgPSBjaGFuZ2VzLm1pbiAmJiAhY2hhbmdlcy5taW4/LmZpcnN0Q2hhbmdlO1xyXG4gICAgY29uc3QgbWF4Q2hhbmdlZCA9IGNoYW5nZXMubWF4ICYmICFjaGFuZ2VzLm1heD8uZmlyc3RDaGFuZ2U7XHJcbiAgICBjb25zdCByYW5nZUNoYW5nZWQgPSBjaGFuZ2VzLnJhbmdlICYmICFjaGFuZ2VzLnJhbmdlPy5maXJzdENoYW5nZTtcclxuICAgIGlmIChtaW5DaGFuZ2VkIHx8IG1heENoYW5nZWQgfHwgcmFuZ2VDaGFuZ2VkKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRDaGFydC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubXlEYXRhU3Vic2NyaXB0aW9uID8gdGhpcy5teURhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY3JlYXRDaGFydC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuICBnZXREYXRhKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY29tYmluZWREYXRhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldENvbWJpbmVkRGF0YShcclxuICAgICAgICB0aGlzLnBhZ2VQcm92aWRlcixcclxuICAgICAgICB0aGlzLnF1aWNrRmlsdGVycyxcclxuICAgICAgICB0aGlzLnJhbmdlLFxyXG4gICAgICAgIHRoaXMucGFnZVByb3ZpZGVyVHdvLFxyXG4gICAgICAgIHRoaXMucXVpY2tGaWx0ZXJUd28sXHJcbiAgICAgICAgdGhpcy5xdWlja0ZpbHRlclRocmVlLFxyXG4gICAgICAgIHRoaXMuc3RhdHVzT25lLFxyXG4gICAgICAgIHRoaXMuc3RhdHVzVHdvLFxyXG4gICAgICAgIHRoaXMuc3RhdHVzVGhyZWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgICAgcGFnZVByb3ZpZGVyOiB0aGlzLnBhZ2VQcm92aWRlcixcclxuICAgICAgICBjdXJyZW50UGFnZUluZGV4OiAwLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfYWdnOiB0aGlzLnJhbmdlLFxyXG4gICAgICAgIHF1aWNrRmlsdGVyczogdGhpcy5xdWlja0ZpbHRlcnMsXHJcbiAgICAgICAgZHVibGluY29yZV9jcmVhdGVkX21pbjogdGhpcy5taW4sXHJcbiAgICAgICAgZHVibGluY29yZV9jcmVhdGVkX21heDogdGhpcy5tYXgsXHJcbiAgICAgICAgc3lzdGVtX2N1cnJlbnRMaWZlQ3ljbGVTdGF0ZV8zOiBKU09OLnN0cmluZ2lmeShcclxuICAgICAgICAgIHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlXHJcbiAgICAgICAgKSxcclxuICAgICAgfVxyXG4gICAgICAvLyBpZiB0aGVyZSB0ZW5hbnQgaWQgc2VudCBmcm9tIG91dHNpZGUgdGhlbiBhZGQgaXQgdG8gdGhlIHBhcmFtc1xyXG4gICAgICBpZiAodGhpcy50ZW5hbnRJZCkge1xyXG4gICAgICAgIHBhcmFtc1sncXVlcnlQYXJhbXMnXSA9IGAke3RoaXMudGVuYW50SWR9YFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFzaWduZWVEZXBhcnRtZW50cykge1xyXG4gICAgICAgIHBhcmFtc1snYXNzaWdubWVudF9kZXBhcnRtZW50XzEnXSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYXNpZ25lZURlcGFydG1lbnRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYWxsQXBpXHJcbiAgICAgICAgLnF1ZXJ5KFxyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5hZ2dyZWdhdGlvbnNbdGhpcy5hZ2dyZWdhdGlvbnNdLmJ1Y2tldHNcclxuICAgICAgICAgICAgICA/IGRhdGEuYWdncmVnYXRpb25zW3RoaXMuYWdncmVnYXRpb25zXS5idWNrZXRzLm1hcCgoaXRlbSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZldGNoZWRLZXlcclxuICAgICAgICAgICAgICAgICAgPyBfLmdldChpdGVtLCB0aGlzLmZldGNoZWRLZXkpXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5ub0ZldGNoZWRLZXkgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3R1cmN0Q2hhcnRMYWJlbChpdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIGNvdW50OiBpdGVtLmRvY0NvdW50LFxyXG4gICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxyXG4gICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3R1cmN0Q2hhcnRMYWJlbChpdGVtKSB7XHJcbiAgICBsZXQgbGFiZWw7XHJcbiAgICBsZXQgZ3JvdXBTcGxpdDtcclxuICAgIGxldCBzZWNyZWN5O1xyXG4gICAgbGV0IGRlcENvZGU7XHJcbiAgICBsZXQgZGVwYXJ0bWVudE5hbWU7XHJcbiAgICBsZXQgZGlyZWN0aW9uO1xyXG4gICAgbGV0IHJlc3RQcmVmaXg7XHJcbiAgICBsZXQgbXlQcmlmeCA9IGB0ZW5hbnRfJHt0aGlzLnRlbmFudElkfV9jdHNfYDtcclxuXHJcbiAgICBpZiAoaXRlbS5mZXRjaGVkS2V5WydlbnRpdHktdHlwZSddID09ICdncm91cCcpIHtcclxuICAgICAgcmVzdFByZWZpeCA9IGl0ZW0ua2V5LnJlcGxhY2UobXlQcmlmeCwgJycpO1xyXG4gICAgICBncm91cFNwbGl0ID0gcmVzdFByZWZpeC5zcGxpdCgnXycpO1xyXG4gICAgICBpZiAocmVzdFByZWZpeC5pbmNsdWRlcygnVG9wX1NlY3JldCcpKSB7XHJcbiAgICAgICAgc2VjcmVjeSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmluc3RhbnQoJ3ZvY2FidWxhcnkuVk9DX1NlY3JlY3lMZXZlbC5Ub3BfU2VjcmV0Jyk7XHJcbiAgICAgICAgZGVwQ29kZSA9IGdyb3VwU3BsaXRbZ3JvdXBTcGxpdC5sZW5ndGggLSAzXTtcclxuICAgICAgICBsZXQgZGlyRXh0cmFjdGVkID0gZ3JvdXBTcGxpdFswXTtcclxuICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pbnN0YW50KGRpckV4dHJhY3RlZFswXS50b1VwcGVyQ2FzZSgpICsgZGlyRXh0cmFjdGVkLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRBcGlTZXJ2aWNlLmdldERlcGFydG1lbnREZXRhaWxzKGRlcENvZGUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmlzQXJhYmljXHJcbiAgICAgICAgICAgID8gcmVzPy5lbnRyaWVzWzBdPy5wcm9wZXJ0aWVzWydkZXB0OmFyYWJpY05hbWUnXVxyXG4gICAgICAgICAgICA6IHJlcz8uZW50cmllc1swXT8ucHJvcGVydGllc1snZGVwdDplbmdsaXNoTmFtZSddO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlY3JlY3kgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pbnN0YW50KCd2b2NhYnVsYXJ5LlZPQ19TZWNyZWN5TGV2ZWwuJyArIGdyb3VwU3BsaXRbZ3JvdXBTcGxpdC5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgZGVwQ29kZSA9IGdyb3VwU3BsaXRbZ3JvdXBTcGxpdC5sZW5ndGggLSAyXTtcclxuICAgICAgICBsZXQgZGlyRXh0cmFjdGVkID0gZ3JvdXBTcGxpdFswXTtcclxuICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pbnN0YW50KGRpckV4dHJhY3RlZFswXS50b1VwcGVyQ2FzZSgpICsgZGlyRXh0cmFjdGVkLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRBcGlTZXJ2aWNlLmdldERlcGFydG1lbnREZXRhaWxzKGRlcENvZGUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmlzQXJhYmljXHJcbiAgICAgICAgICAgID8gcmVzPy5lbnRyaWVzWzBdPy5wcm9wZXJ0aWVzWydkZXB0OmFyYWJpY05hbWUnXVxyXG4gICAgICAgICAgICA6IHJlcz8uZW50cmllc1swXT8ucHJvcGVydGllc1snZGVwdDplbmdsaXNoTmFtZSddO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgbGFiZWwgPSB0aGlzLmFnZ3JlZ2F0aW9ucyA9PSAnYXNzaWdubWVudF9kZXBhcnRtZW50X2FnZycgPyBkZXBhcnRtZW50TmFtZSArICctJyArIHNlY3JlY3kgOiBkZXBhcnRtZW50TmFtZSsgJyAnICsgZGlyZWN0aW9uICsgJy0nICsgc2VjcmVjeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxhYmVsID0gaXRlbS5mZXRjaGVkS2V5LmZ1bGxOYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuICBnZXRDb21iaW5lZERhdGEoXHJcbiAgICBwYWdlUHJvdmlkZXJPbmUsXHJcbiAgICBxdWlja0ZpbHRlck9uZSxcclxuICAgIHNlbGVjdGVkUmFuZ2UsXHJcbiAgICBwYWdlUHJvdmlkZXJUd28sXHJcbiAgICBxdWlja0ZpbHRlclR3byxcclxuICAgIHF1aWNrRmlsdGVyVGhyZWUsXHJcbiAgICBzdGF0dXNPbmUsXHJcbiAgICBzdGF0dXNUd28sXHJcbiAgICBzdGF0dXNUaHJlZVxyXG4gICkge1xyXG4gICAgbGV0IG91dGdvaW5nUGFyYW1zID0ge1xyXG4gICAgICBwYWdlUHJvdmlkZXI6IHBhZ2VQcm92aWRlck9uZSxcclxuICAgICAgY3VycmVudFBhZ2VJbmRleDogMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX2FnZzogc2VsZWN0ZWRSYW5nZSxcclxuICAgICAgcXVpY2tGaWx0ZXJzOiBxdWlja0ZpbHRlck9uZSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21pbjogdGhpcy5taW4sXHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9tYXg6IHRoaXMubWF4LFxyXG4gICAgICBzeXN0ZW1fY3VycmVudExpZmVDeWNsZVN0YXRlXzM6IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgICAvLyBpZiB0aGVyZSB0ZW5hbnQgaWQgc2VudCBmcm9tIG91dHNpZGUgdGhlbiBhZGQgaXQgdG8gdGhlIHBhcmFtc1xyXG4gICAgaWYgKHRoaXMudGVuYW50SWQpIHtcclxuICAgICAgb3V0Z29pbmdQYXJhbXNbJ3F1ZXJ5UGFyYW1zJ10gPSBgJHt0aGlzLnRlbmFudElkfWBcclxuICAgIH1cclxuICAgIGNvbnN0IGdldE91dGdvaW5nJCA9IHRoaXMuY2FsbEFwaVxyXG4gICAgICAucXVlcnkoXHJcbiAgICAgICAgb3V0Z29pbmdQYXJhbXMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5hZ2dyZWdhdGlvbnNbdGhpcy5hZ2dyZWdhdGlvbnNdLmJ1Y2tldHNcclxuICAgICAgICAgICAgPyBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0cy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZmV0Y2hlZEtleVxyXG4gICAgICAgICAgICAgICAgPyBfLmdldChpdGVtLCB0aGlzLmZldGNoZWRLZXkpXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgIGNvdW50OiBpdGVtLmRvY0NvdW50LFxyXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c09uZSxcclxuICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBkYXRhLnRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkYXRhOiBpdGVtcyxcclxuICAgICAgICAgICAgdG90YWxJdGVtczogZGF0YS50b3RhbFNpemUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICBsZXQgaW5jb21pbmdQYXJhbXMgPSB7XHJcbiAgICAgIHBhZ2VQcm92aWRlcjogcGFnZVByb3ZpZGVyVHdvLFxyXG4gICAgICBjdXJyZW50UGFnZUluZGV4OiAwLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxLFxyXG4gICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfYWdnOiBzZWxlY3RlZFJhbmdlLFxyXG4gICAgICBxdWlja0ZpbHRlcnM6IHF1aWNrRmlsdGVyVHdvLFxyXG4gICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfbWluOiB0aGlzLm1pbixcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21heDogdGhpcy5tYXgsXHJcbiAgICAgIHN5c3RlbV9jdXJyZW50TGlmZUN5Y2xlU3RhdGVfMzogSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGVcclxuICAgICAgKSxcclxuICAgIH1cclxuICAgIC8vIGlmIHRoZXJlIHRlbmFudCBpZCBzZW50IGZyb20gb3V0c2lkZSB0aGVuIGFkZCBpdCB0byB0aGUgcGFyYW1zXHJcbiAgICBpZiAodGhpcy50ZW5hbnRJZCkge1xyXG4gICAgICBpbmNvbWluZ1BhcmFtc1sncXVlcnlQYXJhbXMnXSA9IGAke3RoaXMudGVuYW50SWR9YFxyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0SW5jb21pbmckID0gdGhpcy5jYWxsQXBpXHJcbiAgICAgIC5xdWVyeShcclxuICAgICAgICBpbmNvbWluZ1BhcmFtcyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0c1xyXG4gICAgICAgICAgICA/IGRhdGEuYWdncmVnYXRpb25zW3RoaXMuYWdncmVnYXRpb25zXS5idWNrZXRzLm1hcCgoaXRlbSkgPT4gKHtcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mZXRjaGVkS2V5XHJcbiAgICAgICAgICAgICAgICA/IF8uZ2V0KGl0ZW0sIHRoaXMuZmV0Y2hlZEtleSlcclxuICAgICAgICAgICAgICAgIDogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uZG9jQ291bnQsXHJcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzVHdvLFxyXG4gICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiBkYXRhLnRvdGFsU2l6ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIGxldCBpbnRlcm5hbFBhcmFtcyA9IHtcclxuICAgICAgcGFnZVByb3ZpZGVyOiBwYWdlUHJvdmlkZXJUd28sXHJcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgcGFnZVNpemU6IDEsXHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9hZ2c6IHNlbGVjdGVkUmFuZ2UsXHJcbiAgICAgIHF1aWNrRmlsdGVyczogcXVpY2tGaWx0ZXJUaHJlZSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21pbjogdGhpcy5taW4sXHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9tYXg6IHRoaXMubWF4LFxyXG4gICAgICBzeXN0ZW1fY3VycmVudExpZmVDeWNsZVN0YXRlXzM6IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgICAvLyBpZiB0aGVyZSB0ZW5hbnQgaWQgc2VudCBmcm9tIG91dHNpZGUgdGhlbiBhZGQgaXQgdG8gdGhlIHBhcmFtc1xyXG4gICAgaWYgKHRoaXMudGVuYW50SWQpIHtcclxuICAgICAgaW50ZXJuYWxQYXJhbXNbJ3F1ZXJ5UGFyYW1zJ10gPSBgJHt0aGlzLnRlbmFudElkfWBcclxuICAgIH1cclxuICAgIGNvbnN0IGdldEludGVybmFsJCA9IHRoaXMuY2FsbEFwaVxyXG4gICAgICAucXVlcnkoXHJcbiAgICAgICAgaW50ZXJuYWxQYXJhbXMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5hZ2dyZWdhdGlvbnNbdGhpcy5hZ2dyZWdhdGlvbnNdLmJ1Y2tldHNcclxuICAgICAgICAgICAgPyBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0cy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZmV0Y2hlZEtleVxyXG4gICAgICAgICAgICAgICAgPyBfLmdldChpdGVtLCB0aGlzLmZldGNoZWRLZXkpXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgIGNvdW50OiBpdGVtLmRvY0NvdW50LFxyXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c1RocmVlLFxyXG4gICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiBkYXRhLnRvdGFsU2l6ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIGlmICh0aGlzLmlzSW50ZXJuYWxBY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIGZvcmtKb2luKFtnZXRPdXRnb2luZyQsIGdldEluY29taW5nJCwgZ2V0SW50ZXJuYWwkXSkucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGxldCBjb21iaW5lZERhdGEgPSBbLi4uZGF0YVswXS5kYXRhLCAuLi5kYXRhWzFdLmRhdGEsIC4uLmRhdGFbMl0uZGF0YV07XHJcbiAgICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBjb21iaW5lZERhdGE7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmb3JrSm9pbihbZ2V0T3V0Z29pbmckLCBnZXRJbmNvbWluZyRdKS5waXBlKFxyXG4gICAgICAgIG1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbWJpbmVkRGF0YSA9IFsuLi5kYXRhWzBdLmRhdGEsIC4uLmRhdGFbMV0uZGF0YV07XHJcbiAgICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBjb21iaW5lZERhdGE7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXZpZXdDb3JyZXNwb25kZW5jZXMoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcInBhcmFtc1wiLCB0aGlzLnN5c3RlbUN1cnJlbnRMaWZlQ3ljbGVTdGF0ZSlcclxuICAgIGxldCBxdWVyeVBhcmFtcztcclxuICAgIGlmICh0aGlzLmNvbWJpbmVkRGF0YSkge1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgICBjb21iaW5lZERhdGE6IHRoaXMuY29tYmluZWREYXRhLFxyXG4gICAgICAgIHBhZ2VQcm92aWRlcjogdGhpcy5wYWdlUHJvdmlkZXIsXHJcbiAgICAgICAgaGVhZGVyczogSlNPTi5zdHJpbmdpZnkodGhpcy5oZWFkZXJzKSxcclxuICAgICAgICByYW5nZTogdGhpcy5yYW5nZSxcclxuICAgICAgICBhZ2dyZWdhdGlvbnM6IHRoaXMuYWdncmVnYXRpb25zLFxyXG4gICAgICAgIHF1aWNrRmlsdGVyT25lOiB0aGlzLnF1aWNrRmlsdGVycyxcclxuICAgICAgICBxdWlja0ZpbHRlclR3bzogdGhpcy5xdWlja0ZpbHRlclR3byxcclxuICAgICAgICBxdWlja0ZpbHRlclRocmVlOiB0aGlzLnF1aWNrRmlsdGVyVGhyZWUsXHJcbiAgICAgICAgc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlOiB0aGlzLnN5c3RlbUN1cnJlbnRMaWZlQ3ljbGVTdGF0ZSxcclxuICAgICAgICBzdGF0dXNPbmU6IHRoaXMuc3RhdHVzT25lLFxyXG4gICAgICAgIHN0YXR1c1R3bzogdGhpcy5zdGF0dXNUd28sXHJcbiAgICAgICAgc3RhdHVzVGhyZWU6IHRoaXMuc3RhdHVzVGhyZWUsXHJcbiAgICAgICAgbWluOiB0aGlzLm1pbixcclxuICAgICAgICBtYXg6IHRoaXMubWF4LFxyXG4gICAgICAgIGNoYXJ0VGl0bGU6IHRoaXMuY2FyZFRpdGxlXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgICBjb21iaW5lZERhdGE6IHRoaXMuY29tYmluZWREYXRhLFxyXG4gICAgICAgIHBhZ2VQcm92aWRlcjogdGhpcy5wYWdlUHJvdmlkZXIsXHJcbiAgICAgICAgcXVpY2tGaWx0ZXJPbmU6IHRoaXMucXVpY2tGaWx0ZXJzLFxyXG4gICAgICAgIGhlYWRlcnM6IEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVycyksXHJcbiAgICAgICAgcmFuZ2U6IHRoaXMucmFuZ2UsXHJcbiAgICAgICAgYWdncmVnYXRpb25zOiB0aGlzLmFnZ3JlZ2F0aW9ucyxcclxuICAgICAgICBzeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGU6IHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlLFxyXG4gICAgICAgIG1pbjogdGhpcy5taW4sXHJcbiAgICAgICAgbWF4OiB0aGlzLm1heCxcclxuICAgICAgICBjaGFydFRpdGxlOiB0aGlzLmNhcmRUaXRsZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy8gaWYgdGhlcmUgdGVuYW50IGlkIHNlbnQgZnJvbSBvdXRzaWRlIHRoZW4gYWRkIGl0IHRvIHRoZSBwYXJhbXNcclxuICAgIGlmICh0aGlzLnRlbmFudElkKSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWydxdWVyeVBhcmFtcyddID0gYCR7dGhpcy50ZW5hbnRJZH1gXHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3JlcG9ydCcsICdjaGFydC1kZXRhaWxzJ10sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdHJpbmdUb0hzbENvbG9yKHN0ciwgcywgbCkge1xyXG4gICAgdmFyIGhhc2ggPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaGFzaCA9IHN0ci5jaGFyQ29kZUF0KGkpICsgKChoYXNoIDw8IDUpIC0gaGFzaCk7XHJcbiAgICB9XHJcbiAgICB2YXIgaCA9IGhhc2ggJSAzNjA7XHJcbiAgICByZXR1cm4gJ2hzbCgnICsgaCArICcsICcgKyBzICsgJyUsICcgKyBsICsgJyUpJztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQtY29udGluZXJcIiAqbmdJZj1cImNhcmQ7IGVsc2UgdGVzdFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjaGFydC1jYXJkLWhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNhcmQtdGl0bGVcIj57eyBjYXJkVGl0bGUgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJjaGFydC1jYXJkLWJ1dHRvblwiIChjbGljayk9XCJwcmV2aWV3Q29ycmVzcG9uZGVuY2VzKClcIj5cclxuICAgICAge3sgXCJyZXBvcnQuUHJldmlld1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGZXRjaGluZ1wiPlxyXG4gICAgPGN0cy1zcGlubmVyPjwvY3RzLXNwaW5uZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiBjbGFzcz1cInN0YXRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cImRhdGEuZGF0YT8ubGVuZ3RoID09IDAgfHwgZGF0YS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICA8Y2FudmFzICNyZXZlbnVlTGluZUNoYXJ0IFtoZWlnaHRdPVwiaGVpZ2h0XCIgW3dpZHRoXT1cIndpZHRoXCI+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuby1zdGF0c1wiICpuZ0lmPVwiZGF0YS5kYXRhPy5sZW5ndGggPT0gMCB8fCBkYXRhLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgIDxzcGFuPnt7IFwiU1RBVFMubm9EYXRhXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3Rlc3Q+XHJcbiAgPGRpdiBjbGFzcz1cInN0YXRcIj5cclxuICAgIDxjYW52YXMgI3JldmVudWVMaW5lQ2hhcnQgW2hlaWdodF09XCJoZWlnaHRcIiBbd2lkdGhdPVwid2lkdGhcIj48L2NhbnZhcz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtY2hhcnQvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0L2R5bmFtaWMtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQU1MLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLGtDQUFrQztBQUNsQyxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFLOUQsY0FBYztBQU1kLE1BQU0sT0FBTyxxQkFBcUI7SUEwRWhDLFlBQ1MsU0FBMkIsRUFDM0IsY0FBaUMsRUFDaEMsT0FBdUIsRUFDdkIsTUFBYyxFQUNmLFNBQTJCLEVBQzFCLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDMUMsTUFBYztRQVBmLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNoQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixX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RyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFTixhQUFhO3NCQURaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBY04sV0FBVztzQkFEVixLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sY0FBYztzQkFEYixLQUFLO2dCQUdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBR04sR0FBRztzQkFERixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJ2NoYXJ0LmpzL2F1dG8nO1xyXG4vLyBpbXBvcnQgJ2NoYXJ0anMtcGx1Z2luLWxhYmVscyc7XHJcbmltcG9ydCAnY2hhcnRqcy1hZGFwdGVyLW1vbWVudCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhbGxBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jYWxsQXBpL2NhbGwtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZXBhcnRtZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1kZXBhcnRtZW50L3NlcnZpY2VzL2RlcGFydG1lbnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2hhcnQtZGF0YS5zZXJ2aWNlJztcclxuLyoqIEBpZ25vcmUgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjdHMtZHluYW1pYy1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ3JldmVudWVMaW5lQ2hhcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnQ6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KClcclxuICBwcmVmaXggPSAnU1RBVFMuJzsgLy8gZm9yIHRyYW5zbGF0aW9uXHJcbiAgQElucHV0KClcclxuICBjaGFydFR5cGU7IC8vIGZ1bmN0aW9ucyBleGlzdCBpbnNpZGUgQ2hhcnREYXRhU2VydmljZVxyXG4gIEBJbnB1dCgpIHJhbmRvbUNvbG9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY2hhcnRPYmo7XHJcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBjcmVhdENoYXJ0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIEBJbnB1dCgpIHBhZ2VQcm92aWRlcjsgLy8gZGVmaW5lIGFwaSB0byBnZXQgdGhlIGRhdGEgZnJvbVxyXG4gIEBJbnB1dCgpIGhlYWRlcnMgPSB7fTsgLy8gaGVhZGVycyBpbiBjb25zdGFudHNcclxuICBASW5wdXQoKSBvYnNlcnZhYmxlOyAvLyBvYnNlcnZhYmxlIGluIGNhc2Ugb2YgY2FsbCBhcGkgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50XHJcbiAgQElucHV0KCkgYWdncmVnYXRpb25zO1xyXG4gIEBJbnB1dCgpIHF1aWNrRmlsdGVycztcclxuICBASW5wdXQoKSBzeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGU7XHJcbiAgQElucHV0KCkgcmFuZ2UgPSAnW1wiZnJvbV9ub3ctN2RfdG9fbm93XCJdJztcclxuICBASW5wdXQoKSBsYWJlbDtcclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGVkUmFuZ2UgPSAnd2Vlayc7IC8vIHJhbmdlIHRvIGJlIGZpbHRlcmQgb25cclxuICBASW5wdXQoKSB0ZW5hbnRJZDsgLy8gd2lsbCBiZSBzZW50IG9ubHkgaW4gY2FzZSBvZiBtdWx0aSB0ZW5hbnRcclxuICBASW5wdXQoKSBjb2xvcnM6IGFueSA9IHtcclxuICAgIGluUHJvZ3Jlc3M6ICcjM2MzY2YwJyxcclxuICAgIHJlZ2lzdGVyZWQ6ICcjNWExNDk2JyxcclxuICAgIGRyYWZ0OiAnIzU5Njk3MycsXHJcbiAgICBhcmNoaXZlZDogJyNmYmI2MmMnLFxyXG4gICAgY2xvc2VkOiAnIzAwZGNhNScsXHJcbiAgICBhc3NpZ25lZDogJyNmZDY2NzAnLFxyXG4gICAgdW5kZWZpbmVkOiAnI2Y3ZjhmOScsXHJcbiAgICBvdGhlcjogJyNmMTcyMDUnLFxyXG4gIH07XHJcbiAgZGF0YTogYW55ID0gW107XHJcbiAgaXNGZXRjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJ0czogW107XHJcbiAgQElucHV0KClcclxuICByYW5kb21Db2xvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZmV0Y2hlZEtleTtcclxuICBASW5wdXQoKVxyXG4gIHBhZ2VQcm92aWRlclR3bztcclxuICBASW5wdXQoKVxyXG4gIHF1aWNrRmlsdGVyVHdvO1xyXG4gIEBJbnB1dCgpXHJcbiAgcXVpY2tGaWx0ZXJUaHJlZTtcclxuICBASW5wdXQoKVxyXG4gIGNvbWJpbmVkRGF0YSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdHVzT25lO1xyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdHVzVHdvO1xyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdHVzVGhyZWU7XHJcbiAgQElucHV0KClcclxuICBtaW47XHJcbiAgQElucHV0KClcclxuICBtYXg7XHJcbiAgQElucHV0KClcclxuICB3aWR0aDtcclxuICBASW5wdXQoKVxyXG4gIGhlaWdodDtcclxuICBASW5wdXQoKVxyXG4gIGNhcmQgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGNhcmRUaXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5wdXRDaGFydERhdGE7XHJcbiAgQElucHV0KClcclxuICBhc2lnbmVlRGVwYXJ0bWVudHM7XHJcbiAgQElucHV0KClcclxuICBub0ZldGNoZWRLZXkgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgaXNJbnRlcm5hbEFjdGl2ZSA9IGZhbHNlOyAvLyB1c2VkIHRvIGNvbnRyb2wgb24gc2hvd2luZyByZXN1bHRzIG9mIGludGVybmFsIGNvcmVzcCByZXN1bHRzIGluIGNoYXJ0c1xyXG4gIG15RGF0YVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGlzQXJhYmljO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGNhbGxBcGk6IENhbGxBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBjaGFydERhdGE6IENoYXJ0RGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZXBhcnRtZW50QXBpU2VydmljZTogRGVwYXJ0bWVudEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXHJcbiAgKSB7XHJcbiAgICBDaGFydC5kZWZhdWx0cy5mb250LmZhbWlseSA9ICdGUyBBbGJlcnQgQXJhYmljIFdlYic7XHJcbiAgICBDaGFydC5kZWZhdWx0cy5mb250LnNpemUgPSAxMztcclxuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5jcmVhdENoYXJ0Lm5leHQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblRvV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaGFydE9iaikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0T2JqLnJlc2l6ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDaGFydCgpIHtcclxuICAgIHRoaXMuY3JlYXRDaGFydC5waXBlKGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmdldERhdGEoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGxldCByYW5kb21Db2xvcnMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5yYW5kb21Db2xvcnMpIHtcclxuICAgICAgICAgIGRhdGEuZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJhbmRvbUNvbG9yc1tpdGVtLmxhYmVsXSA9IHRoaXMuc3RyaW5nVG9Ic2xDb2xvcihgJHtpdGVtLmxhYmVsfWAsIDQwLCA3MCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xvcnMgPSB0aGlzLnJhbmRvbUNvbG9ycyA/IHJhbmRvbUNvbG9ycyA6IHRoaXMuY29sb3JzO1xyXG4gICAgICAgIGNvbnN0IHsgb3B0aW9ucywgY2hhcnREYXRhIH0gPSB0aGlzLmNoYXJ0RGF0YVt0aGlzLmNoYXJ0VHlwZV0oe1xyXG4gICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgIGNvbG9yczogdGhpcy5jb2xvcnMsXHJcbiAgICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkYXRhLmRhdGE/Lmxlbmd0aCB8fCBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoYXJ0T2JqKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2hhcnQubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0T2JqID0gbmV3IENoYXJ0KGN0eCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0T2JqLmNoYXJ0LmRhdGEgPSBjaGFydERhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRPYmoudXBkYXRlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNvbnN0IGN0eCA9IHRoaXMuY2hhcnQubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgLy8gbGV0IG5vT3B0aW9ucyA9IHtcclxuICAgICAgICAgIC8vICAgdHlwZTogb3B0aW9ucy50eXBlLFxyXG4gICAgICAgICAgLy8gICBkYXRhOiB7XHJcbiAgICAgICAgICAvLyAgICAgZGF0YXNldHM6IFtdLFxyXG4gICAgICAgICAgLy8gICB9LFxyXG4gICAgICAgICAgLy8gICBvcHRpb25zOiB7fSxcclxuICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXJ0T2JqID0gbmV3IENoYXJ0KGN0eCwgbm9PcHRpb25zKTtcclxuICAgICAgICAgIC8vIHRoaXMuY2hhcnRPYmouY2hhcnQuZGF0YSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY3JlYXRlQ2hhcnRXaXRob3V0UFAoKSB7XHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jcmVhdENoYXJ0LnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuaW5wdXRDaGFydERhdGE7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBsZXQgcmFuZG9tQ29sb3JzID0ge307XHJcbiAgICAgIGlmICh0aGlzLnJhbmRvbUNvbG9ycykge1xyXG4gICAgICAgIHRoaXMuZGF0YS5kYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJhbmRvbUNvbG9yc1tpdGVtLmxhYmVsXSA9IHRoaXMuc3RyaW5nVG9Ic2xDb2xvcihgJHtpdGVtLmxhYmVsfWAsIDQwLCA3MCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb2xvcnMgPSB0aGlzLnJhbmRvbUNvbG9ycyA/IHJhbmRvbUNvbG9ycyA6IHRoaXMuY29sb3JzO1xyXG4gICAgICBjb25zdCB7IG9wdGlvbnMsIGNoYXJ0RGF0YSB9ID0gdGhpcy5jaGFydERhdGFbdGhpcy5jaGFydFR5cGVdKHtcclxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgY29sb3JzOiB0aGlzLmNvbG9ycyxcclxuICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5kYXRhPy5sZW5ndGggfHwgdGhpcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGFydE9iaikge1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jaGFydC5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICB0aGlzLmNoYXJ0T2JqID0gbmV3IENoYXJ0KGN0eCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGFydE9iai5jaGFydC5kYXRhID0gY2hhcnREYXRhO1xyXG4gICAgICAgICAgdGhpcy5jaGFydE9iai51cGRhdGUoKTtcclxuICAgICAgICAgIHRoaXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyBjb25zdCBjdHggPSB0aGlzLmNoYXJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAvLyBsZXQgbm9PcHRpb25zID0ge1xyXG4gICAgICAgIC8vICAgdHlwZTogb3B0aW9ucy50eXBlLFxyXG4gICAgICAgIC8vICAgZGF0YToge1xyXG4gICAgICAgIC8vICAgICBkYXRhc2V0czogW10sXHJcbiAgICAgICAgLy8gICB9LFxyXG4gICAgICAgIC8vICAgb3B0aW9uczoge30sXHJcbiAgICAgICAgLy8gfTtcclxuICAgICAgICAvLyB0aGlzLmNoYXJ0T2JqID0gbmV3IENoYXJ0KGN0eCwgbm9PcHRpb25zKTtcclxuICAgICAgICAvLyB0aGlzLmNoYXJ0T2JqLmNoYXJ0LmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0cygpIHtcclxuICAgIGlmICh0aGlzLmlucHV0Q2hhcnREYXRhKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnRXaXRob3V0UFAoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaXNBcmFiaWMuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcztcclxuICAgIH0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlucHV0Q2hhcnREYXRhKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydFdpdGhvdXRQUCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRDaGFydC5uZXh0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRDaGFydC5uZXh0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgbWluQ2hhbmdlZCA9IGNoYW5nZXMubWluICYmICFjaGFuZ2VzLm1pbj8uZmlyc3RDaGFuZ2U7XHJcbiAgICBjb25zdCBtYXhDaGFuZ2VkID0gY2hhbmdlcy5tYXggJiYgIWNoYW5nZXMubWF4Py5maXJzdENoYW5nZTtcclxuICAgIGNvbnN0IHJhbmdlQ2hhbmdlZCA9IGNoYW5nZXMucmFuZ2UgJiYgIWNoYW5nZXMucmFuZ2U/LmZpcnN0Q2hhbmdlO1xyXG4gICAgaWYgKG1pbkNoYW5nZWQgfHwgbWF4Q2hhbmdlZCB8fCByYW5nZUNoYW5nZWQpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdENoYXJ0Lm5leHQoKTtcclxuICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5teURhdGFTdWJzY3JpcHRpb24gPyB0aGlzLm15RGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5jcmVhdENoYXJ0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG4gIGdldERhdGEoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jb21iaW5lZERhdGEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tYmluZWREYXRhKFxyXG4gICAgICAgIHRoaXMucGFnZVByb3ZpZGVyLFxyXG4gICAgICAgIHRoaXMucXVpY2tGaWx0ZXJzLFxyXG4gICAgICAgIHRoaXMucmFuZ2UsXHJcbiAgICAgICAgdGhpcy5wYWdlUHJvdmlkZXJUd28sXHJcbiAgICAgICAgdGhpcy5xdWlja0ZpbHRlclR3byxcclxuICAgICAgICB0aGlzLnF1aWNrRmlsdGVyVGhyZWUsXHJcbiAgICAgICAgdGhpcy5zdGF0dXNPbmUsXHJcbiAgICAgICAgdGhpcy5zdGF0dXNUd28sXHJcbiAgICAgICAgdGhpcy5zdGF0dXNUaHJlZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICBwYWdlUHJvdmlkZXI6IHRoaXMucGFnZVByb3ZpZGVyLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IDAsXHJcbiAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgIHBhZ2VTaXplOiAxLFxyXG4gICAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9hZ2c6IHRoaXMucmFuZ2UsXHJcbiAgICAgICAgcXVpY2tGaWx0ZXJzOiB0aGlzLnF1aWNrRmlsdGVycyxcclxuICAgICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfbWluOiB0aGlzLm1pbixcclxuICAgICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfbWF4OiB0aGlzLm1heCxcclxuICAgICAgICBzeXN0ZW1fY3VycmVudExpZmVDeWNsZVN0YXRlXzM6IEpTT04uc3RyaW5naWZ5KHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlKSxcclxuICAgICAgfTtcclxuICAgICAgLy8gaWYgdGhlcmUgdGVuYW50IGlkIHNlbnQgZnJvbSBvdXRzaWRlIHRoZW4gYWRkIGl0IHRvIHRoZSBwYXJhbXNcclxuICAgICAgaWYgKHRoaXMudGVuYW50SWQpIHtcclxuICAgICAgICBwYXJhbXNbJ3F1ZXJ5UGFyYW1zJ10gPSBgJHt0aGlzLnRlbmFudElkfWA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYXNpZ25lZURlcGFydG1lbnRzKSB7XHJcbiAgICAgICAgcGFyYW1zWydhc3NpZ25tZW50X2RlcGFydG1lbnRfMSddID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hc2lnbmVlRGVwYXJ0bWVudHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlcclxuICAgICAgICAucXVlcnkocGFyYW1zLCB7XHJcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIG1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGRhdGEuYWdncmVnYXRpb25zW3RoaXMuYWdncmVnYXRpb25zXS5idWNrZXRzXHJcbiAgICAgICAgICAgICAgPyBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0cy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZldGNoZWRLZXlcclxuICAgICAgICAgICAgICAgICAgICA/IF8uZ2V0KGl0ZW0sIHRoaXMuZmV0Y2hlZEtleSlcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubm9GZXRjaGVkS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbnN0dXJjdENoYXJ0TGFiZWwoaXRlbSlcclxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgICBjb3VudDogaXRlbS5kb2NDb3VudCxcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxyXG4gICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3R1cmN0Q2hhcnRMYWJlbChpdGVtKSB7XHJcbiAgICBsZXQgbGFiZWw7XHJcbiAgICBsZXQgZ3JvdXBTcGxpdDtcclxuICAgIGxldCBzZWNyZWN5O1xyXG4gICAgbGV0IGRlcENvZGU7XHJcbiAgICBsZXQgZGVwYXJ0bWVudE5hbWU7XHJcbiAgICBsZXQgZGlyZWN0aW9uO1xyXG4gICAgbGV0IHJlc3RQcmVmaXg7XHJcbiAgICBsZXQgbXlQcmlmeCA9IGB0ZW5hbnRfJHt0aGlzLnRlbmFudElkfV9jdHNfYDtcclxuXHJcbiAgICBpZiAoaXRlbS5mZXRjaGVkS2V5WydlbnRpdHktdHlwZSddID09ICdncm91cCcpIHtcclxuICAgICAgcmVzdFByZWZpeCA9IGl0ZW0ua2V5LnJlcGxhY2UobXlQcmlmeCwgJycpO1xyXG4gICAgICBncm91cFNwbGl0ID0gcmVzdFByZWZpeC5zcGxpdCgnXycpO1xyXG4gICAgICBpZiAocmVzdFByZWZpeC5pbmNsdWRlcygnVG9wX1NlY3JldCcpKSB7XHJcbiAgICAgICAgc2VjcmVjeSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICAndm9jYWJ1bGFyeS5WT0NfU2VjcmVjeUxldmVsLlRvcF9TZWNyZXQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkZXBDb2RlID0gZ3JvdXBTcGxpdFtncm91cFNwbGl0Lmxlbmd0aCAtIDNdO1xyXG4gICAgICAgIGxldCBkaXJFeHRyYWN0ZWQgPSBncm91cFNwbGl0WzBdO1xyXG4gICAgICAgIGRpcmVjdGlvbiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICBkaXJFeHRyYWN0ZWRbMF0udG9VcHBlckNhc2UoKSArIGRpckV4dHJhY3RlZC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50QXBpU2VydmljZS5nZXREZXBhcnRtZW50RGV0YWlscyhkZXBDb2RlKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmlzQXJhYmljXHJcbiAgICAgICAgICAgID8gcmVzPy5lbnRyaWVzWzBdPy5wcm9wZXJ0aWVzWydkZXB0OmFyYWJpY05hbWUnXVxyXG4gICAgICAgICAgICA6IHJlcz8uZW50cmllc1swXT8ucHJvcGVydGllc1snZGVwdDplbmdsaXNoTmFtZSddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlY3JlY3kgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ3ZvY2FidWxhcnkuVk9DX1NlY3JlY3lMZXZlbC4nICsgZ3JvdXBTcGxpdFtncm91cFNwbGl0Lmxlbmd0aCAtIDFdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkZXBDb2RlID0gZ3JvdXBTcGxpdFtncm91cFNwbGl0Lmxlbmd0aCAtIDJdO1xyXG4gICAgICAgIGxldCBkaXJFeHRyYWN0ZWQgPSBncm91cFNwbGl0WzBdO1xyXG4gICAgICAgIGRpcmVjdGlvbiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICBkaXJFeHRyYWN0ZWRbMF0udG9VcHBlckNhc2UoKSArIGRpckV4dHJhY3RlZC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50QXBpU2VydmljZS5nZXREZXBhcnRtZW50RGV0YWlscyhkZXBDb2RlKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgZGVwYXJ0bWVudE5hbWUgPSB0aGlzLmlzQXJhYmljXHJcbiAgICAgICAgICAgID8gcmVzPy5lbnRyaWVzWzBdPy5wcm9wZXJ0aWVzWydkZXB0OmFyYWJpY05hbWUnXVxyXG4gICAgICAgICAgICA6IHJlcz8uZW50cmllc1swXT8ucHJvcGVydGllc1snZGVwdDplbmdsaXNoTmFtZSddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxhYmVsID1cclxuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucyA9PSAnYXNzaWdubWVudF9kZXBhcnRtZW50X2FnZydcclxuICAgICAgICAgID8gZGVwYXJ0bWVudE5hbWUgKyAnLScgKyBzZWNyZWN5XHJcbiAgICAgICAgICA6IGRlcGFydG1lbnROYW1lICsgJyAnICsgZGlyZWN0aW9uICsgJy0nICsgc2VjcmVjeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxhYmVsID0gaXRlbS5mZXRjaGVkS2V5LmZ1bGxOYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuICBnZXRDb21iaW5lZERhdGEoXHJcbiAgICBwYWdlUHJvdmlkZXJPbmUsXHJcbiAgICBxdWlja0ZpbHRlck9uZSxcclxuICAgIHNlbGVjdGVkUmFuZ2UsXHJcbiAgICBwYWdlUHJvdmlkZXJUd28sXHJcbiAgICBxdWlja0ZpbHRlclR3byxcclxuICAgIHF1aWNrRmlsdGVyVGhyZWUsXHJcbiAgICBzdGF0dXNPbmUsXHJcbiAgICBzdGF0dXNUd28sXHJcbiAgICBzdGF0dXNUaHJlZVxyXG4gICkge1xyXG4gICAgbGV0IG91dGdvaW5nUGFyYW1zID0ge1xyXG4gICAgICBwYWdlUHJvdmlkZXI6IHBhZ2VQcm92aWRlck9uZSxcclxuICAgICAgY3VycmVudFBhZ2VJbmRleDogMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX2FnZzogc2VsZWN0ZWRSYW5nZSxcclxuICAgICAgcXVpY2tGaWx0ZXJzOiBxdWlja0ZpbHRlck9uZSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21pbjogdGhpcy5taW4sXHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9tYXg6IHRoaXMubWF4LFxyXG4gICAgICBzeXN0ZW1fY3VycmVudExpZmVDeWNsZVN0YXRlXzM6IEpTT04uc3RyaW5naWZ5KHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlKSxcclxuICAgIH07XHJcbiAgICAvLyBpZiB0aGVyZSB0ZW5hbnQgaWQgc2VudCBmcm9tIG91dHNpZGUgdGhlbiBhZGQgaXQgdG8gdGhlIHBhcmFtc1xyXG4gICAgaWYgKHRoaXMudGVuYW50SWQpIHtcclxuICAgICAgb3V0Z29pbmdQYXJhbXNbJ3F1ZXJ5UGFyYW1zJ10gPSBgJHt0aGlzLnRlbmFudElkfWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRPdXRnb2luZyQgPSB0aGlzLmNhbGxBcGlcclxuICAgICAgLnF1ZXJ5KG91dGdvaW5nUGFyYW1zLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5hZ2dyZWdhdGlvbnNbdGhpcy5hZ2dyZWdhdGlvbnNdLmJ1Y2tldHNcclxuICAgICAgICAgICAgPyBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0cy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mZXRjaGVkS2V5ID8gXy5nZXQoaXRlbSwgdGhpcy5mZXRjaGVkS2V5KSA6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uZG9jQ291bnQsXHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c09uZSxcclxuICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YTogaXRlbXMsXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgbGV0IGluY29taW5nUGFyYW1zID0ge1xyXG4gICAgICBwYWdlUHJvdmlkZXI6IHBhZ2VQcm92aWRlclR3byxcclxuICAgICAgY3VycmVudFBhZ2VJbmRleDogMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX2FnZzogc2VsZWN0ZWRSYW5nZSxcclxuICAgICAgcXVpY2tGaWx0ZXJzOiBxdWlja0ZpbHRlclR3byxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21pbjogdGhpcy5taW4sXHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9tYXg6IHRoaXMubWF4LFxyXG4gICAgICBzeXN0ZW1fY3VycmVudExpZmVDeWNsZVN0YXRlXzM6IEpTT04uc3RyaW5naWZ5KHRoaXMuc3lzdGVtQ3VycmVudExpZmVDeWNsZVN0YXRlKSxcclxuICAgIH07XHJcbiAgICAvLyBpZiB0aGVyZSB0ZW5hbnQgaWQgc2VudCBmcm9tIG91dHNpZGUgdGhlbiBhZGQgaXQgdG8gdGhlIHBhcmFtc1xyXG4gICAgaWYgKHRoaXMudGVuYW50SWQpIHtcclxuICAgICAgaW5jb21pbmdQYXJhbXNbJ3F1ZXJ5UGFyYW1zJ10gPSBgJHt0aGlzLnRlbmFudElkfWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRJbmNvbWluZyQgPSB0aGlzLmNhbGxBcGlcclxuICAgICAgLnF1ZXJ5KGluY29taW5nUGFyYW1zLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5hZ2dyZWdhdGlvbnNbdGhpcy5hZ2dyZWdhdGlvbnNdLmJ1Y2tldHNcclxuICAgICAgICAgICAgPyBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0cy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mZXRjaGVkS2V5ID8gXy5nZXQoaXRlbSwgdGhpcy5mZXRjaGVkS2V5KSA6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uZG9jQ291bnQsXHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c1R3byxcclxuICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YTogaXRlbXMsXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IGRhdGEudG90YWxTaXplLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgbGV0IGludGVybmFsUGFyYW1zID0ge1xyXG4gICAgICBwYWdlUHJvdmlkZXI6IHBhZ2VQcm92aWRlclR3byxcclxuICAgICAgY3VycmVudFBhZ2VJbmRleDogMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX2FnZzogc2VsZWN0ZWRSYW5nZSxcclxuICAgICAgcXVpY2tGaWx0ZXJzOiBxdWlja0ZpbHRlclRocmVlLFxyXG4gICAgICBkdWJsaW5jb3JlX2NyZWF0ZWRfbWluOiB0aGlzLm1pbixcclxuICAgICAgZHVibGluY29yZV9jcmVhdGVkX21heDogdGhpcy5tYXgsXHJcbiAgICAgIHN5c3RlbV9jdXJyZW50TGlmZUN5Y2xlU3RhdGVfMzogSlNPTi5zdHJpbmdpZnkodGhpcy5zeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGUpLFxyXG4gICAgfTtcclxuICAgIC8vIGlmIHRoZXJlIHRlbmFudCBpZCBzZW50IGZyb20gb3V0c2lkZSB0aGVuIGFkZCBpdCB0byB0aGUgcGFyYW1zXHJcbiAgICBpZiAodGhpcy50ZW5hbnRJZCkge1xyXG4gICAgICBpbnRlcm5hbFBhcmFtc1sncXVlcnlQYXJhbXMnXSA9IGAke3RoaXMudGVuYW50SWR9YDtcclxuICAgIH1cclxuICAgIGNvbnN0IGdldEludGVybmFsJCA9IHRoaXMuY2FsbEFwaVxyXG4gICAgICAucXVlcnkoaW50ZXJuYWxQYXJhbXMsIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBkYXRhLmFnZ3JlZ2F0aW9uc1t0aGlzLmFnZ3JlZ2F0aW9uc10uYnVja2V0c1xyXG4gICAgICAgICAgICA/IGRhdGEuYWdncmVnYXRpb25zW3RoaXMuYWdncmVnYXRpb25zXS5idWNrZXRzLm1hcCgoaXRlbSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZldGNoZWRLZXkgPyBfLmdldChpdGVtLCB0aGlzLmZldGNoZWRLZXkpIDogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbS5kb2NDb3VudCxcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzVGhyZWUsXHJcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBkYXRhLnRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiBkYXRhLnRvdGFsU2l6ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIGlmICh0aGlzLmlzSW50ZXJuYWxBY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIGZvcmtKb2luKFtnZXRPdXRnb2luZyQsIGdldEluY29taW5nJCwgZ2V0SW50ZXJuYWwkXSkucGlwZShcclxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGxldCBjb21iaW5lZERhdGEgPSBbLi4uZGF0YVswXS5kYXRhLCAuLi5kYXRhWzFdLmRhdGEsIC4uLmRhdGFbMl0uZGF0YV07XHJcbiAgICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBjb21iaW5lZERhdGE7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmb3JrSm9pbihbZ2V0T3V0Z29pbmckLCBnZXRJbmNvbWluZyRdKS5waXBlKFxyXG4gICAgICAgIG1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbWJpbmVkRGF0YSA9IFsuLi5kYXRhWzBdLmRhdGEsIC4uLmRhdGFbMV0uZGF0YV07XHJcbiAgICAgICAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBjb21iaW5lZERhdGE7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXZpZXdDb3JyZXNwb25kZW5jZXMoKSB7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM7XHJcbiAgICBpZiAodGhpcy5jb21iaW5lZERhdGEpIHtcclxuICAgICAgcXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgICAgY29tYmluZWREYXRhOiB0aGlzLmNvbWJpbmVkRGF0YSxcclxuICAgICAgICBwYWdlUHJvdmlkZXI6IHRoaXMucGFnZVByb3ZpZGVyLFxyXG4gICAgICAgIGhlYWRlcnM6IEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVycyksXHJcbiAgICAgICAgcmFuZ2U6IHRoaXMucmFuZ2UsXHJcbiAgICAgICAgYWdncmVnYXRpb25zOiB0aGlzLmFnZ3JlZ2F0aW9ucyxcclxuICAgICAgICBxdWlja0ZpbHRlck9uZTogdGhpcy5xdWlja0ZpbHRlcnMsXHJcbiAgICAgICAgcXVpY2tGaWx0ZXJUd286IHRoaXMucXVpY2tGaWx0ZXJUd28sXHJcbiAgICAgICAgcXVpY2tGaWx0ZXJUaHJlZTogdGhpcy5xdWlja0ZpbHRlclRocmVlLFxyXG4gICAgICAgIHN5c3RlbUN1cnJlbnRMaWZlQ3ljbGVTdGF0ZTogdGhpcy5zeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGUsXHJcbiAgICAgICAgc3RhdHVzT25lOiB0aGlzLnN0YXR1c09uZSxcclxuICAgICAgICBzdGF0dXNUd286IHRoaXMuc3RhdHVzVHdvLFxyXG4gICAgICAgIHN0YXR1c1RocmVlOiB0aGlzLnN0YXR1c1RocmVlLFxyXG4gICAgICAgIG1pbjogdGhpcy5taW4sXHJcbiAgICAgICAgbWF4OiB0aGlzLm1heCxcclxuICAgICAgICBjaGFydFRpdGxlOiB0aGlzLmNhcmRUaXRsZSxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zID0ge1xyXG4gICAgICAgIGNvbWJpbmVkRGF0YTogdGhpcy5jb21iaW5lZERhdGEsXHJcbiAgICAgICAgcGFnZVByb3ZpZGVyOiB0aGlzLnBhZ2VQcm92aWRlcixcclxuICAgICAgICBxdWlja0ZpbHRlck9uZTogdGhpcy5xdWlja0ZpbHRlcnMsXHJcbiAgICAgICAgaGVhZGVyczogSlNPTi5zdHJpbmdpZnkodGhpcy5oZWFkZXJzKSxcclxuICAgICAgICByYW5nZTogdGhpcy5yYW5nZSxcclxuICAgICAgICBhZ2dyZWdhdGlvbnM6IHRoaXMuYWdncmVnYXRpb25zLFxyXG4gICAgICAgIHN5c3RlbUN1cnJlbnRMaWZlQ3ljbGVTdGF0ZTogdGhpcy5zeXN0ZW1DdXJyZW50TGlmZUN5Y2xlU3RhdGUsXHJcbiAgICAgICAgbWluOiB0aGlzLm1pbixcclxuICAgICAgICBtYXg6IHRoaXMubWF4LFxyXG4gICAgICAgIGNoYXJ0VGl0bGU6IHRoaXMuY2FyZFRpdGxlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy8gaWYgdGhlcmUgdGVuYW50IGlkIHNlbnQgZnJvbSBvdXRzaWRlIHRoZW4gYWRkIGl0IHRvIHRoZSBwYXJhbXNcclxuICAgIGlmICh0aGlzLnRlbmFudElkKSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWydxdWVyeVBhcmFtcyddID0gYCR7dGhpcy50ZW5hbnRJZH1gO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydyZXBvcnQnLCAnY2hhcnQtZGV0YWlscyddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Ic2xDb2xvcihzdHIsIHMsIGwpIHtcclxuICAgIHZhciBoYXNoID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGhhc2ggPSBzdHIuY2hhckNvZGVBdChpKSArICgoaGFzaCA8PCA1KSAtIGhhc2gpO1xyXG4gICAgfVxyXG4gICAgdmFyIGggPSBoYXNoICUgMzYwO1xyXG4gICAgcmV0dXJuICdoc2woJyArIGggKyAnLCAnICsgcyArICclLCAnICsgbCArICclKSc7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWNvbnRpbmVyXCIgKm5nSWY9XCJjYXJkOyBlbHNlIHRlc3RcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2hhcnQtY2FyZC1oZWFkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jYXJkLXRpdGxlXCI+e3sgY2FyZFRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY2hhcnQtY2FyZC1idXR0b25cIiAoY2xpY2spPVwicHJldmlld0NvcnJlc3BvbmRlbmNlcygpXCI+XHJcbiAgICAgIHt7ICdyZXBvcnQuUHJldmlldycgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ZldGNoaW5nXCI+XHJcbiAgICA8Y3RzLXNwaW5uZXI+PC9jdHMtc3Bpbm5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IGNsYXNzPVwic3RhdCBjaGFydC1jYW52YXNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cImRhdGEuZGF0YT8ubGVuZ3RoID09IDAgfHwgZGF0YS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICA8Y2FudmFzICNyZXZlbnVlTGluZUNoYXJ0IFtoZWlnaHRdPVwiaGVpZ2h0XCIgW3dpZHRoXT1cIndpZHRoXCI+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuby1zdGF0c1wiICpuZ0lmPVwiZGF0YS5kYXRhPy5sZW5ndGggPT0gMCB8fCBkYXRhLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgIDxzcGFuPnt7ICdTVEFUUy5ub0RhdGEnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXN0PlxyXG4gIDxkaXYgY2xhc3M9XCJzdGF0XCI+XHJcbiAgICA8Y2FudmFzICNyZXZlbnVlTGluZUNoYXJ0IFtoZWlnaHRdPVwiaGVpZ2h0XCIgW3dpZHRoXT1cIndpZHRoXCI+PC9jYW52YXM+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
1
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
4
4
|
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
-
import { DynamicSingleChartComponent } from './dynamic-single-chart/dynamic-single-chart.component';
|
|
6
5
|
import { LibrarySharedModule } from '../../shared/libraryShared.module';
|
|
7
|
-
import {
|
|
6
|
+
import { DynamicChartComponent } from './dynamic-chart/dynamic-chart.component';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
/**
|
|
10
9
|
* @title
|
|
@@ -13,22 +12,27 @@ import * as i0 from "@angular/core";
|
|
|
13
12
|
export class DynamicChartModule {
|
|
14
13
|
}
|
|
15
14
|
DynamicChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
16
|
-
DynamicChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartModule, declarations: [DynamicChartComponent,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
DynamicChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartModule, declarations: [DynamicChartComponent], imports: [CommonModule,
|
|
16
|
+
TranslateModule,
|
|
17
|
+
LibrarySharedModule,
|
|
18
|
+
MatTooltipModule], exports: [DynamicChartComponent] });
|
|
19
|
+
DynamicChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartModule, imports: [[
|
|
20
|
+
CommonModule,
|
|
21
|
+
TranslateModule,
|
|
22
|
+
LibrarySharedModule,
|
|
23
|
+
MatTooltipModule
|
|
24
|
+
]] });
|
|
20
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicChartModule, decorators: [{
|
|
21
26
|
type: NgModule,
|
|
22
27
|
args: [{
|
|
23
|
-
declarations: [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
DynamicChartComponent,
|
|
30
|
-
DynamicSingleChartComponent
|
|
28
|
+
declarations: [DynamicChartComponent],
|
|
29
|
+
imports: [
|
|
30
|
+
CommonModule,
|
|
31
|
+
TranslateModule,
|
|
32
|
+
LibrarySharedModule,
|
|
33
|
+
MatTooltipModule
|
|
31
34
|
],
|
|
35
|
+
exports: [DynamicChartComponent]
|
|
32
36
|
}]
|
|
33
37
|
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jaGFydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtY2hhcnQvZHluYW1pYy1jaGFydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUVoRjs7O0dBR0c7QUFXSCxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBVGYscUJBQXFCLGFBRW5DLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLGdCQUFnQixhQUVQLHFCQUFxQjtpSEFFbkIsa0JBQWtCLFlBUnJCO1lBQ1IsWUFBWTtZQUNaLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsZ0JBQWdCO1NBQ2hCOzRGQUdXLGtCQUFrQjtrQkFWOUIsUUFBUTttQkFBQztvQkFDVCxZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDckMsT0FBTyxFQUFFO3dCQUNSLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGdCQUFnQjtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTGlicmFyeVNoYXJlZE1vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWJyYXJ5U2hhcmVkLm1vZHVsZSc7XHJcbmltcG9ydCB7IER5bmFtaWNDaGFydENvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0LmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQHRpdGxlXHJcbiAqIENoYXJ0IE1vZHVsZVxyXG4gKi9cclxuQE5nTW9kdWxlKHtcclxuXHRkZWNsYXJhdGlvbnM6IFtEeW5hbWljQ2hhcnRDb21wb25lbnRdLFxyXG5cdGltcG9ydHM6IFtcclxuXHRcdENvbW1vbk1vZHVsZSxcclxuXHRcdFRyYW5zbGF0ZU1vZHVsZSxcclxuXHRcdExpYnJhcnlTaGFyZWRNb2R1bGUsXHJcblx0XHRNYXRUb29sdGlwTW9kdWxlXHJcblx0XSxcclxuXHRleHBvcnRzOiBbRHluYW1pY0NoYXJ0Q29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0NoYXJ0TW9kdWxlIHt9XHJcbiJdfQ==
|