@huntsman-cancer-institute/navigation 17.2.6 → 17.3.0
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/components/search-list/search-list-controller.component.d.ts +13 -1
- package/components/search-list/search-list.component.d.ts +4 -2
- package/esm2022/components/search-list/search-list-controller.component.mjs +234 -67
- package/esm2022/components/search-list/search-list.component.mjs +55 -39
- package/fesm2022/huntsman-cancer-institute-navigation.mjs +287 -104
- package/fesm2022/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -44,6 +44,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
44
44
|
this.closeOthers = true;
|
|
45
45
|
// The list of fields to group by.
|
|
46
46
|
this.groupingFields = [];
|
|
47
|
+
// delimiter for getGroupDisplay
|
|
48
|
+
this.delimiter = ", ";
|
|
47
49
|
// TODO: Reimplement if we want users to be able to control grouping.
|
|
48
50
|
this.groupByAllowedFields = [];
|
|
49
51
|
// The page size of rows in a selected group.
|
|
@@ -281,6 +283,9 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
281
283
|
if (config.groupDisplay) {
|
|
282
284
|
this.groupDisplay = config.groupDisplay;
|
|
283
285
|
}
|
|
286
|
+
if (config.delimiter) {
|
|
287
|
+
this.delimiter = config.delimiter;
|
|
288
|
+
}
|
|
284
289
|
if (config.closeOthers !== undefined) {
|
|
285
290
|
this.closeOthers = config.closeOthers;
|
|
286
291
|
}
|
|
@@ -471,52 +476,58 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
471
476
|
if (this.filters && this.filters.length > 0) {
|
|
472
477
|
let include = true;
|
|
473
478
|
for (let filter of this.filters) {
|
|
474
|
-
if (filter.
|
|
479
|
+
if (!filter.valid) {
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
else if (this.controller.advancedSearch && this.controller.advancedSearch.length > 0 && !this.controller.advancedSearchAllowFilter) {
|
|
483
|
+
// Advanced search does not auto filter by default
|
|
484
|
+
continue;
|
|
485
|
+
}
|
|
486
|
+
else {
|
|
487
|
+
let filterValues = filter.getValue().split(",");
|
|
488
|
+
let filterFields = filter.getField().split(" or ");
|
|
475
489
|
let innerInclude = false;
|
|
476
|
-
for (let field of
|
|
477
|
-
// check row[field] is a number and if yes, skip applying the toLowerCase() function.
|
|
478
|
-
// * to cover the handling of the search by person id scenario from within the quick search functionality.
|
|
490
|
+
for (let field of filterFields) {
|
|
479
491
|
if (row[field] && typeof row[field] == "number") {
|
|
480
|
-
|
|
481
|
-
|
|
492
|
+
for (let value of filterValues) {
|
|
493
|
+
if (row[field] == value) {
|
|
494
|
+
innerInclude = true;
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
482
497
|
}
|
|
483
498
|
}
|
|
484
|
-
else if (row[field]
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
499
|
+
else if (row[field] && row[field] instanceof Date || filter.getDataType() == "date") {
|
|
500
|
+
for (let value of filterValues) {
|
|
501
|
+
if (value instanceof Date) {
|
|
502
|
+
if ((new Date(row[field])).getTime() == (new Date(value)).getTime()) {
|
|
503
|
+
innerInclude = true;
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
488
507
|
}
|
|
489
508
|
}
|
|
490
|
-
else if (row[field] && row[field]
|
|
491
|
-
|
|
509
|
+
else if (row[field] && typeof row[field] == "string") {
|
|
510
|
+
// Check if it is multiple search strings
|
|
511
|
+
for (let value of filterValues) {
|
|
512
|
+
if (typeof value == "string") {
|
|
513
|
+
if (row[field].toLowerCase().indexOf(value.toLowerCase()) !== -1) {
|
|
514
|
+
innerInclude = true;
|
|
515
|
+
break;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
492
519
|
}
|
|
493
|
-
|
|
494
|
-
if (!innerInclude) {
|
|
495
|
-
include = false;
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
else {
|
|
499
|
-
if (!filter.valid || !filter.getValue()) {
|
|
500
|
-
}
|
|
501
|
-
else if ((filter.valid || filter.getValue()) && (this.controller.advancedSearch.length !== undefined && this.controller.advancedSearch.length > 0)) {
|
|
502
|
-
break;
|
|
503
|
-
}
|
|
504
|
-
else if (!row[filter.field]) {
|
|
505
|
-
include = false;
|
|
506
|
-
break;
|
|
507
|
-
}
|
|
508
|
-
else if (row[filter.field] instanceof Date || filter.getValue() instanceof Date || filter.getDataType() == "date") {
|
|
509
|
-
filter.getValue();
|
|
510
|
-
if ((new Date(row[filter.field])).getTime() != (new Date(filter.getValue())).getTime()) {
|
|
511
|
-
include = false;
|
|
520
|
+
if (innerInclude) {
|
|
512
521
|
break;
|
|
513
522
|
}
|
|
514
523
|
}
|
|
515
|
-
|
|
524
|
+
if (!innerInclude) {
|
|
516
525
|
include = false;
|
|
517
|
-
break;
|
|
518
526
|
}
|
|
519
527
|
}
|
|
528
|
+
if (include) {
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
520
531
|
}
|
|
521
532
|
if (!include) {
|
|
522
533
|
continue;
|
|
@@ -912,7 +923,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
912
923
|
}
|
|
913
924
|
}
|
|
914
925
|
/**
|
|
915
|
-
* Concat group by fields to comma delimited words
|
|
926
|
+
* Concat group by fields to comma delimited words
|
|
927
|
+
* or delimiter delimited words if the deliminator has its default value set.
|
|
916
928
|
*
|
|
917
929
|
* @param {RowGroup} rowGroup
|
|
918
930
|
* @returns {string}
|
|
@@ -927,7 +939,9 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
927
939
|
}
|
|
928
940
|
else {
|
|
929
941
|
for (let field of this.grouping.fields) {
|
|
930
|
-
|
|
942
|
+
if (rowGroup[field] !== null && rowGroup[field] !== "") {
|
|
943
|
+
display = (display) ? display + this.delimiter + rowGroup[field] : rowGroup[field];
|
|
944
|
+
}
|
|
931
945
|
}
|
|
932
946
|
}
|
|
933
947
|
return display;
|
|
@@ -1062,8 +1076,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1062
1076
|
}
|
|
1063
1077
|
}
|
|
1064
1078
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationGlobalService }, { token: i2.NavigationService, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1065
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
1066
|
-
<div
|
|
1079
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", delimiter: "delimiter", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
1080
|
+
<div *ngIf="showResultsCount && searchResultMessage"
|
|
1067
1081
|
class="results-count" [ngClass]="{ 'format-bottom-padding': this.searchResultMessage === '' }">
|
|
1068
1082
|
{{ this.searchResultMessage }}
|
|
1069
1083
|
</div>
|
|
@@ -1238,7 +1252,7 @@ export { SearchListComponent };
|
|
|
1238
1252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchListComponent, decorators: [{
|
|
1239
1253
|
type: Component,
|
|
1240
1254
|
args: [{ selector: "hci-search-list", template: `
|
|
1241
|
-
<div
|
|
1255
|
+
<div *ngIf="showResultsCount && searchResultMessage"
|
|
1242
1256
|
class="results-count" [ngClass]="{ 'format-bottom-padding': this.searchResultMessage === '' }">
|
|
1243
1257
|
{{ this.searchResultMessage }}
|
|
1244
1258
|
</div>
|
|
@@ -1432,6 +1446,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1432
1446
|
type: Input
|
|
1433
1447
|
}], groupingFields: [{
|
|
1434
1448
|
type: Input
|
|
1449
|
+
}], delimiter: [{
|
|
1450
|
+
type: Input
|
|
1435
1451
|
}], groupByAllowedFields: [{
|
|
1436
1452
|
type: Input
|
|
1437
1453
|
}], pageSize: [{
|
|
@@ -1483,4 +1499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
1483
1499
|
static: false
|
|
1484
1500
|
}]
|
|
1485
1501
|
}] } });
|
|
1486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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RUFBRTt3QkFDekMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQXVKa0QsVUFBVTtzQkFBNUQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQXl6QnRDLCtCQUErQjtzQkFIckMsU0FBUzt1QkFBQywyQkFBMkIsRUFBRTt3QkFDdEMsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxLQUFLO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2UsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtkZWxheSwgZmluYWxpemV9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge05nYkRyb3Bkb3dufSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7SGNpRGF0YUR0bywgSGNpRmlsdGVyRHRvLCBIY2lHcmlkRHRvLCBIY2lHcm91cGluZ0R0bywgSGNpUGFnaW5nRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1Jvd0dyb3VwfSBmcm9tIFwiLi9yb3ctZ3JvdXBcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uR2xvYmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24tZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudH0gZnJvbSBcIi4vc2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBjYW4gYmUgZ3JvdXBlZCBvciBub3QgZ3JvdXBlZC4gIFRoZSBkYXRhIGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSBhbiBhcnJheSwgb3IgZnJvbSBhbiBleHRlcm5hbFxyXG4gKiBkYXRhIGNhbGwgdXNpbmcganBhLXNlcnZpY2VzLlxyXG4gKi9cclxuQENvbXBvbmVudFR5cGUoXCJTZWFyY2hMaXN0Q29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIC5yZXN1bHRzLWNvdW50IHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdyZXl3YXJtLW1lZGRhcmspO1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNy4zcHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybWF0LWJvdHRvbS1wYWRkaW5nIHtcclxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChldmVuKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1tZWRpdW0pICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ10ge1xyXG4gICAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXYucm93LXBhcmVudC5hY3RpdmUge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLnJpLXNpZGViYXItY2VsbCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCIgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCI+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcHMtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHMtMyBwZS0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtZS0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gaW5pdCwgbGlzdGVuIGZvciBsb2FkaW5nIHN1YmplY3RzIGFuZCBsaXN0ZW4gZm9yIHBhZ2UgY2hhbmdlcy5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgoYnVzeTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5zdWJzY3JpYmUoKHBhZ2luZzogSGNpUGFnaW5nRHRvKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xyXG4gICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXRzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXSkge1xyXG4gICAgICBsZXQgY2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSA8U2ltcGxlQ2hhbmdlPmNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXTtcclxuICAgICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjaGFuZ2UuY3VycmVudFZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICAvL01heSBhcyB3ZWxsIG1ha2UgaXQgc3BpbiB3aGlsZSBwcm9jZXNzaW5nLCBhcyB3ZWxsIGFzIGxvYWRpbmcuIE90aGVyd2lzZSBpdCBsb29rcyBmcm96ZW5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0XHJcbiAgICAgICAgICAucGlwZShkZWxheSgwKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAvL05vdyBkb25lIGxvYWRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcG9uIG5ldyByb3dQYXJlbnQgYmVpbmcgc2V0LCBhZGQgYW55IGNsYXNzZXMgaWYgcm93Q2xhc3MgaXMgZGVmaW5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlMaXN0PEVsZW1lbnRSZWY+fSByb3dQYXJlbnRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcInJvd1BhcmVudFwiLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCByb3dQYXJlbnRzKHJvd1BhcmVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgaWYgKHJvd1BhcmVudHMgJiYgdGhpcy5yb3dDbGFzcykge1xyXG4gICAgICByb3dQYXJlbnRzLmZvckVhY2goKGU6IEVsZW1lbnRSZWYpID0+IHtcclxuICAgICAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLnJvd0NsYXNzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBmb3IgKGxldCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb3dSZWZyZXNoICs9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudC5wb3N0SW5pdDogXCIgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRQYXJlbnQoKSkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSA8U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ+dGhpcy5nZXRQYXJlbnQoKS5nZXRDb21wb25lbnRCeVR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50OiB1c2luZyBjb250cm9sbGVyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkU2VhcmNoTGlzdCh0aGlzLnRpdGxlKTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5maWx0ZXJzU3ViamVjdC5zdWJzY3JpYmUoKGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG5cclxuICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0RmllbGQoKS5pbmRleE9mKFwiIG9yIFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgbGV0IGlubmVySW5jbHVkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZmlsdGVyLmdldEZpZWxkKCkuc3BsaXQoXCIgb3IgXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gY2hlY2sgcm93W2ZpZWxkXSBpcyBhIG51bWJlciBhbmQgaWYgeWVzLCBza2lwIGFwcGx5aW5nIHRoZSB0b0xvd2VyQ2FzZSgpIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICAgIC8vICogdG8gY292ZXIgdGhlIGhhbmRsaW5nIG9mIHRoZSBzZWFyY2ggYnkgcGVyc29uIGlkIHNjZW5hcmlvIGZyb20gd2l0aGluIHRoZSBxdWljayBzZWFyY2ggZnVuY3Rpb25hbGl0eS5cclxuICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSBmaWx0ZXIuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiBmaWx0ZXIuZ2V0VmFsdWUoKSAmJiAobmV3IERhdGUocm93W2ZpZWxkXSkpLmdldFRpbWUoKSA9PSAobmV3IERhdGUoZmlsdGVyLmdldFZhbHVlKCkpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHJvd1tmaWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlubmVySW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQgfHwgIWZpbHRlci5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZpbHRlci52YWxpZCB8fCBmaWx0ZXIuZ2V0VmFsdWUoKSkgJiYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghcm93W2ZpbHRlci5maWVsZF0pIHtcclxuICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0gaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgIGlmICgobmV3IERhdGUocm93W2ZpbHRlci5maWVsZF0pKS5nZXRUaW1lKCkgIT0gKG5ldyBEYXRlKGZpbHRlci5nZXRWYWx1ZSgpKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpbHRlci5maWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci5nZXRWYWx1ZSgpLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgcHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgcHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cCA9IG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2ZpZWxkXSA9IHJvd1tmaWVsZF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByZXBhcmVkRGF0YS5zb3J0KChhOiBSb3dHcm91cCwgYjogUm93R3JvdXApID0+IHtcclxuICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCByb3dHcm91cCBvZiBwcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBwcmVwYXJlZERhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkgPiAwKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFnaW5nLmdldFBhZ2UoKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCk7IGkgPCBNYXRoLm1pbihwcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gcHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRHcm91cERpc3BsYXkocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgIGRpc3BsYXkgPSB0aGlzLmdyb3VwRGlzcGxheTtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheS5yZXBsYWNlKGZpZWxkLCByb3dHcm91cFtmaWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgXCIsIFwiICsgcm93R3JvdXBbZmllbGRdIDogcm93R3JvdXBbZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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MkJBQTJCLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVsYXksIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtOZ2JEcm9wZG93bn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0hjaURhdGFEdG8sIEhjaUZpbHRlckR0bywgSGNpR3JpZER0bywgSGNpR3JvdXBpbmdEdG8sIEhjaVBhZ2luZ0R0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSb3dHcm91cH0gZnJvbSBcIi4vcm93LWdyb3VwXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnR9IGZyb20gXCIuL3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGdyb3VwZWQgb3Igbm90IGdyb3VwZWQuICBUaGUgZGF0YSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXksIG9yIGZyb20gYW4gZXh0ZXJuYWxcclxuICogZGF0YSBjYWxsIHVzaW5nIGpwYS1zZXJ2aWNlcy5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAucmVzdWx0cy1jb3VudCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ncmV5d2FybS1tZWRkYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTcuM3B4O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm1hdC1ib3R0b20tcGFkZGluZyB7XHJcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXTpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbWVkaXVtKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddIHtcclxuICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2LnJvdy1wYXJlbnQuYWN0aXZlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm12aXZpZC1saWdodGVzdCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5yaS1zaWRlYmFyLWNlbGwge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVzdWx0c0NvdW50ICYmIHNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCIgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCI+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcHMtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHMtMyBwZS0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtZS0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gZGVsaW1pdGVyIGZvciBnZXRHcm91cERpc3BsYXlcclxuICBASW5wdXQoKSBkZWxpbWl0ZXI6IHN0cmluZyA9IFwiLCBcIjtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gaW5pdCwgbGlzdGVuIGZvciBsb2FkaW5nIHN1YmplY3RzIGFuZCBsaXN0ZW4gZm9yIHBhZ2UgY2hhbmdlcy5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgoYnVzeTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5zdWJzY3JpYmUoKHBhZ2luZzogSGNpUGFnaW5nRHRvKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xyXG4gICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXRzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXSkge1xyXG4gICAgICBsZXQgY2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSA8U2ltcGxlQ2hhbmdlPmNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXTtcclxuICAgICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjaGFuZ2UuY3VycmVudFZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICAvL01heSBhcyB3ZWxsIG1ha2UgaXQgc3BpbiB3aGlsZSBwcm9jZXNzaW5nLCBhcyB3ZWxsIGFzIGxvYWRpbmcuIE90aGVyd2lzZSBpdCBsb29rcyBmcm96ZW5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0XHJcbiAgICAgICAgICAucGlwZShkZWxheSgwKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAvL05vdyBkb25lIGxvYWRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcG9uIG5ldyByb3dQYXJlbnQgYmVpbmcgc2V0LCBhZGQgYW55IGNsYXNzZXMgaWYgcm93Q2xhc3MgaXMgZGVmaW5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlMaXN0PEVsZW1lbnRSZWY+fSByb3dQYXJlbnRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcInJvd1BhcmVudFwiLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCByb3dQYXJlbnRzKHJvd1BhcmVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgaWYgKHJvd1BhcmVudHMgJiYgdGhpcy5yb3dDbGFzcykge1xyXG4gICAgICByb3dQYXJlbnRzLmZvckVhY2goKGU6IEVsZW1lbnRSZWYpID0+IHtcclxuICAgICAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLnJvd0NsYXNzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBmb3IgKGxldCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb3dSZWZyZXNoICs9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudC5wb3N0SW5pdDogXCIgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRQYXJlbnQoKSkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSA8U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ+dGhpcy5nZXRQYXJlbnQoKS5nZXRDb21wb25lbnRCeVR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50OiB1c2luZyBjb250cm9sbGVyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkU2VhcmNoTGlzdCh0aGlzLnRpdGxlKTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5maWx0ZXJzU3ViamVjdC5zdWJzY3JpYmUoKGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgdGhpcy5kZWxpbWl0ZXIgPSBjb25maWcuZGVsaW1pdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCAmJiAhdGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgICAgIC8vICBBZHZhbmNlZCBzZWFyY2ggZG9lcyBub3QgYXV0byBmaWx0ZXIgYnkgZGVmYXVsdFxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZXMgPSBmaWx0ZXIuZ2V0VmFsdWUoKS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXIuZ2V0RmllbGQoKS5zcGxpdChcIiBvciBcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5uZXJJbmNsdWRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIGZpbHRlckZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiByb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5ldyBEYXRlKHJvd1tmaWVsZF0pKS5nZXRUaW1lKCkgPT0gKG5ldyBEYXRlKHZhbHVlKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgbXVsdGlwbGUgc2VhcmNoIHN0cmluZ3NcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZihpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgcHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgcHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cCA9IG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2ZpZWxkXSA9IHJvd1tmaWVsZF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByZXBhcmVkRGF0YS5zb3J0KChhOiBSb3dHcm91cCwgYjogUm93R3JvdXApID0+IHtcclxuICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCByb3dHcm91cCBvZiBwcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBwcmVwYXJlZERhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkgPiAwKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFnaW5nLmdldFBhZ2UoKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCk7IGkgPCBNYXRoLm1pbihwcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gcHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkc1xyXG4gICAqIG9yIGRlbGltaXRlciBkZWxpbWl0ZWQgd29yZHMgaWYgdGhlIGRlbGltaW5hdG9yIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICBkaXNwbGF5ID0gdGhpcy5ncm91cERpc3BsYXk7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkucmVwbGFjZShmaWVsZCwgcm93R3JvdXBbZmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBbZmllbGRdICE9PSBudWxsICYmIHJvd0dyb3VwW2ZpZWxkXSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyB0aGlzLmRlbGltaXRlciArIHJvd0dyb3VwW2ZpZWxkXSA6IHJvd0dyb3VwW2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|