@huntsman-cancer-institute/navigation 17.14.0 → 17.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,6 +32,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
32
32
  constructor(elementRef, renderer, resolver, navigationGlobalService, navigationService, changeDetectorRef) {
33
33
  super(elementRef, renderer, resolver, navigationService, changeDetectorRef);
34
34
  this.searchResultMessage = "";
35
+ this.preparedData = [];
35
36
  // An array of booleans to control the hci-busy overlaying the search-list.
36
37
  this.loading = [false];
37
38
  // Expand the selected row group as its own screen, or show rows under selected row groups in the same view.
@@ -77,6 +78,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
77
78
  this.groupClick = new EventEmitter();
78
79
  this.rowClick = new EventEmitter();
79
80
  this.dataChange = new EventEmitter();
81
+ this.afterFilterEvent = new EventEmitter();
80
82
  // Grid DTO info needed to build external data requests.
81
83
  this.sorts = [];
82
84
  this.filters = [];
@@ -129,6 +131,12 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
129
131
  return "row-undefined";
130
132
  }
131
133
  }
134
+ getViewData() {
135
+ return this.viewData;
136
+ }
137
+ getPreparedData() {
138
+ return this.preparedData;
139
+ }
132
140
  /**
133
141
  * On init, listen for loading subjects and listen for page changes.
134
142
  */
@@ -223,6 +231,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
223
231
  this.filters = filters;
224
232
  this.setData();
225
233
  this.resetPaging();
234
+ this.afterFilterEvent.emit(this.preparedData);
226
235
  });
227
236
  this.controller.sortsSubject.subscribe((sorts) => {
228
237
  this.sorts = sorts;
@@ -462,7 +471,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
462
471
  this.paging.setNumPages(1);
463
472
  this.paging.setDataSize(0);
464
473
  }
465
- let preparedData = [];
474
+ //let preparedData = [];
475
+ this.preparedData = [];
466
476
  this.groupedDataSet = [];
467
477
  let rowGroupMap = new Map();
468
478
  let doRowGrouping = this.grouping.fields && this.grouping.fields.length > 0;
@@ -525,7 +535,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
525
535
  include = false;
526
536
  }
527
537
  }
528
- if (include) {
538
+ if (!include) {
529
539
  break;
530
540
  }
531
541
  }
@@ -535,24 +545,24 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
535
545
  }
536
546
  if (doRowGrouping) {
537
547
  if (rowGroupMap.get(groupKey) >= 0) {
538
- preparedData[rowGroupMap.get(groupKey)].rgRows.push(row);
548
+ this.preparedData[rowGroupMap.get(groupKey)].rgRows.push(row);
539
549
  }
540
550
  else {
541
- rowGroupMap.set(groupKey, preparedData.length);
551
+ rowGroupMap.set(groupKey, this.preparedData.length);
542
552
  let rowGroup = new RowGroup(groupKey, row);
543
553
  for (let field of this.grouping.fields) {
544
554
  rowGroup[field] = row[field];
545
555
  }
546
- preparedData.push(rowGroup);
556
+ this.preparedData.push(rowGroup);
547
557
  }
548
558
  }
549
559
  else {
550
- preparedData.push(new RowGroup(groupKey, row));
560
+ this.preparedData.push(new RowGroup(groupKey, row));
551
561
  }
552
562
  //this.globalRowGroupMap = rowGroupMap;
553
563
  }
554
564
  if (this.sorts.length > 0) {
555
- preparedData.sort((a, b) => {
565
+ this.preparedData.sort((a, b) => {
556
566
  let v = 0;
557
567
  for (let sort of this.sorts) {
558
568
  if (this.isSortFieldGroupField(sort.getField())) {
@@ -601,7 +611,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
601
611
  return v;
602
612
  });
603
613
  if (this.grouping.getFields().length > 0) {
604
- for (let rowGroup of preparedData) {
614
+ for (let rowGroup of this.preparedData) {
605
615
  rowGroup.rgRows.sort((a, b) => {
606
616
  let v = 0;
607
617
  for (let sort of this.sorts) {
@@ -632,17 +642,17 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
632
642
  }
633
643
  }
634
644
  }
635
- this.paging.setDataSize(preparedData.length);
636
- this.groupedDataSet = preparedData;
645
+ this.paging.setDataSize(this.preparedData.length);
646
+ this.groupedDataSet = this.preparedData;
637
647
  if (this.paging.getPageSize() > 0) {
638
648
  this.viewData = [];
639
- for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {
640
- this.viewData.push(preparedData[i]);
649
+ for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(this.preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {
650
+ this.viewData.push(this.preparedData[i]);
641
651
  }
642
652
  }
643
653
  else {
644
- this.paging.setDataSize(preparedData.length);
645
- this.viewData = preparedData;
654
+ this.paging.setDataSize(this.preparedData.length);
655
+ this.viewData = this.preparedData;
646
656
  }
647
657
  for (let rowGroup of this.viewData) {
648
658
  rowGroup.rgCount = rowGroup.rgRows.length;
@@ -988,6 +998,10 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
988
998
  this.renderer.removeClass(e, "active");
989
999
  }
990
1000
  }
1001
+ isIdInFilteredResults(id) {
1002
+ let e = this.elementRef.nativeElement.querySelector("#row-" + id);
1003
+ return e ? true : false;
1004
+ }
991
1005
  /**
992
1006
  * Allow a custom row click function to select a row.
993
1007
  *
@@ -1076,7 +1090,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
1076
1090
  }
1077
1091
  }
1078
1092
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", 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 }); }
1079
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", 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: `
1093
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", 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", afterFilterEvent: "afterFilterEvent" }, 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
1094
  <div
1081
1095
  *ngIf="showResultsCount && searchResultMessage"
1082
1096
  class="results-count"
@@ -1246,7 +1260,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
1246
1260
  <div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
1247
1261
  </div>
1248
1262
  </ng-template>
1249
- `, isInline: true, styles: [".results-count{background-color:var(--bluewarm-lighter);color:var(--grey-darkest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] }); }
1263
+ `, isInline: true, styles: [".results-count{background-color:var(--bluewarm-dark);color:var(--white-lightest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] }); }
1250
1264
  };
1251
1265
  SearchListComponent = __decorate([
1252
1266
  ComponentType("SearchListComponent"),
@@ -1430,7 +1444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1430
1444
  <div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
1431
1445
  </div>
1432
1446
  </ng-template>
1433
- `, styles: [".results-count{background-color:var(--bluewarm-lighter);color:var(--grey-darkest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
1447
+ `, styles: [".results-count{background-color:var(--bluewarm-dark);color:var(--white-lightest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
1434
1448
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i1.NavigationGlobalService }, { type: i2.NavigationService, decorators: [{
1435
1449
  type: Optional
1436
1450
  }] }, { type: i0.ChangeDetectorRef }], propDecorators: { controller: [{
@@ -1498,6 +1512,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1498
1512
  type: Output
1499
1513
  }], dataChange: [{
1500
1514
  type: Output
1515
+ }], afterFilterEvent: [{
1516
+ type: Output
1501
1517
  }], defaultGroupTemplate: [{
1502
1518
  type: ViewChild,
1503
1519
  args: ["defaultGroupTemplate", { read: TemplateRef, static: true }]
@@ -1517,4 +1533,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1517
1533
  static: false
1518
1534
  }]
1519
1535
  }] } });
1520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF3TkksSUFBTSxtQkFBbUIsR0FBekIsTUFB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O3NCQUhyQyxTQUFTO3VCQUFDLDJCQUEyQixFQUFFO3dCQUN0QyxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLEtBQUs7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RlbGF5LCBmaW5hbGl6ZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TmdiRHJvcGRvd259IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5cclxuaW1wb3J0IHtIY2lEYXRhRHRvLCBIY2lGaWx0ZXJEdG8sIEhjaUdyaWREdG8sIEhjaUdyb3VwaW5nRHRvLCBIY2lQYWdpbmdEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um93R3JvdXB9IGZyb20gXCIuL3Jvdy1ncm91cFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1NlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zZWFyY2gtbGlzdC1jb250cm9sbGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSBncm91cGVkIG9yIG5vdCBncm91cGVkLiAgVGhlIGRhdGEgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGFuIGFycmF5LCBvciBmcm9tIGFuIGV4dGVybmFsXHJcbiAqIGRhdGEgY2FsbCB1c2luZyBqcGEtc2VydmljZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3RcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLnJlc3VsdHMtY291bnQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm0tbGlnaHRlcik7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3JleS1kYXJrZXN0KTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTcuM3B4O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMTBweCAzcHggdmFyKC0tZ3JleWNvb2wtbWVkZGFya2VyKTtcclxuICAgICAgICAgIHotaW5kZXg6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZm9ybWF0LWJvdHRvbS1wYWRkaW5nIHtcclxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChldmVuKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1tZWRpdW0pICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ106bnRoLWNoaWxkKG9kZCkge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ10ge1xyXG4gICAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXYucm93LXBhcmVudC5hY3RpdmUge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkLW1lZGxpZ2h0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLnJpLXNpZGViYXItY2VsbCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVzdWx0c0NvdW50ICYmIHNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Zvcm1hdC1ib3R0b20tcGFkZGluZyc6IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9PT0gJycgfVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiIXNob3dSZXN1bHRzQ291bnQgfHwgIXNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggc2Nyb2xsYWJsZVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm5vLXJlc3VsdHMtZm91bmRcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHBzLTNcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJyZXN1bHQtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCIgW2NsYXNzLnktaGlkZGVuXT1cInNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICA8aGNpLWJ1c3kgW2J1c3lTdWJqZWN0c109XCJsb2FkaW5nU3ViamVjdHNcIiBwYXJlbnRTZWxlY3Rvcj1cIi5zY3JvbGxhYmxlXCIgW2ljb25dPVwiYnVzeUljb25cIj48L2hjaS1idXN5PlxyXG4gICAgICAgICAgICAgIDwhLS0gTm8gZ3JvdXBpbmcgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cGluZy5maWVsZHMgfHwgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93R3JvdXAgb2Ygdmlld0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIGlubGluZSBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiAhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93R3JvdXAgb2Ygdmlld0RhdGE7IGxldCBpID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQocm93R3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCB7e2dyb3VwQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBUZW1wbGF0ZTsgY29udGV4dDoge3Jvd0dyb3VwOiByb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1jb250YWluZXJcIiAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93R3JvdXAucmdSb3dzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBzZXBhcmF0ZSBpbmRpdmlkdWFsIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkUm93R3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgI2dyb3VwU2VsZWN0ZWRQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtc2VsZWN0ZWQtcGFyZW50IGZsZXgtY29sdW1uIHt7Z3JvdXBDbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHNlbGVjdGVkUm93R3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAgYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHNlbGVjdGVkUm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTsgY29udGV4dDoge3Jvd0dyb3VwOiBzZWxlY3RlZFJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAjc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciBpZD1cInNlbGVjdGVkLWdyb3VwLWNvbnRhaW5lclwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHktYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiaW5uZXJSb3dHcm91cENvbnRhaW5lclwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHNlbGVjdGVkUm93R3JvdXAucmdSb3dzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBQYWdpbmcgZm9vdGVyIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJwYWdpbmcucGFnZVNpemUgPiAwXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmstMCBwYWdpbmctZm9vdGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBzLTMgcGUtM1wiXHJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDFyZW07IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlRmlyc3QoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gMFwiPjxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlUHJldmlvdXMoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gMFwiPjxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTtcIj57e3BhZ2luZy5wYWdlICsgMX19IG9mIHt7cGFnaW5nLm51bVBhZ2VzfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTmV4dCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZvcndhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUxhc3QoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWZvcndhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbWUtYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJkLWZsZXggbWUtMVwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZCA9PT0gdHJ1ZTsgZWxzZSBwbHVzVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLW1pbnVzIGZhLXNtIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbHVzVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLXNtIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICh7e3Jvd0dyb3VwLnJnQ291bnR9fSlcclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGFuIGluZGl2aWR1YWwgc2VsZWN0ZWQgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBzLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0zXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbGV2ZWwtdXAtYWx0XCIgZGF0YS1mYS10cmFuc2Zvcm09XCJmbGlwLWhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIGBcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIFNlYXJjaExpc3RDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG5cclxuICBzZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuXHJcbiAgLy8gVGhlIGRhdGEgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cclxuICB2aWV3RGF0YTogUm93R3JvdXBbXTtcclxuXHJcbiAgLy8gQSByZWZlcmVuY2UgdG8gdGhlIHNlYXJjaCBsaXN0IGNvbnRyb2xsZXIgaWYgYXBwbGljYWJsZS5cclxuICBASW5wdXQoKSBjb250cm9sbGVyOiBTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudDtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhXCIpIGJvdW5kRGF0YTogT2JqZWN0W107XHJcblxyXG4gIC8vIEEgc3ViamVjdCB0aGF0IHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhU3ViamVjdFwiKSBkYXRhU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PE9iamVjdFtdPjtcclxuXHJcbiAgLy8gQSBmdW5jdGlvbiB3aGljaCB0YWtlcyBpbiBhIEhjaUdyaWREdG8gYW5kIHJldHVybnMgYSBIY2lEYXRhRHRvIHdoaWNoIHdyYXBzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YUNhbGxcIikgZXh0ZXJuYWxEYXRhQ2FsbDogKGR0bzogSGNpR3JpZER0bykgPT4gT2JzZXJ2YWJsZTxIY2lEYXRhRHRvPjtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2Ygc3ViamVjdHMgd2l0aCBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nU3ViamVjdHM6IFN1YmplY3Q8Ym9vbGVhbj5bXTtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2YgYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbltdID0gW2ZhbHNlXTtcclxuXHJcbiAgLy8gSWYgY2xpY2tpbmcgYSByb3cgY2hhbmdlcyBhIHJvdXRlLCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgcm91dGUgdG8gdXNlLlxyXG4gIEBJbnB1dCgpIHJvdXRlOiAocm93R3JvdXA6IGFueSwgcm93OiBhbnkpID0+IGFueVtdO1xyXG5cclxuICAvLyBFeHBhbmQgdGhlIHNlbGVjdGVkIHJvdyBncm91cCBhcyBpdHMgb3duIHNjcmVlbiwgb3Igc2hvdyByb3dzIHVuZGVyIHNlbGVjdGVkIHJvdyBncm91cHMgaW4gdGhlIHNhbWUgdmlldy5cclxuICBASW5wdXQoKSBpbmxpbmVFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l0aG91dCBhbnkgb3RoZXIgbWV0YWRhdGEgZm9yIHdoYXQgYSByb3cgaXMsIHByb3ZpZGUgdGhlIGZpZWxkIHRvIGJlIHVzZWQgZm9yIHRoZSBpZC5cclxuICAvLyBUaGlzIGlzIGFjdHVhbGx5IHRoZSBmaWVsZCB0aGF0IGhhcyB0aGUgKGRlZmluZWQpIHJvd0lkIC0tIHdoYXRldmVyIGl0IGlzIHVuZGVyIGRpZmZlcmVudFxyXG4gIC8vIHN0cnVjdHVyZXM6IGlkUGF0aWVudCwgaWRNZWRpY2FsRXZlbnQgZXRjXHJcbiAgQElucHV0KCkgcm93SWQ6IGFueTtcclxuXHJcbiAgLy8gQ3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHJvdyBncm91cCBwYXJlbnQuXHJcbiAgQElucHV0KCkgZ3JvdXBDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQ3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHJvdyBwYXJlbnQuXHJcbiAgQElucHV0KCkgcm93Q2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIEEgdGVtcGxhdGUgZm9yIGhvdyB0byBkaXNwbGF5IHJvdyBncm91cCBpbmZvIGlmIHVzaW5nIHRoZSBkZWZhdWx0IHRlbXBsYXRlLiAgZS5nLiBcImxhc3ROYW1lLCBmaXJzdE5hbWVcIiBmaWVsZCBuYW1lcyBnZXQgcmVwbGFjZWQgd2l0aCB2YWx1ZXMuXHJcbiAgQElucHV0KCkgZ3JvdXBEaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gIC8vIFRPRE86IFJlaW1wbGVtZW50XHJcbiAgQElucHV0KCkgY2xvc2VPdGhlcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBUaGUgbGlzdCBvZiBmaWVsZHMgdG8gZ3JvdXAgYnkuXHJcbiAgQElucHV0KCkgZ3JvdXBpbmdGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIGRlbGltaXRlciBmb3IgZ2V0R3JvdXBEaXNwbGF5XHJcbiAgQElucHV0KCkgZGVsaW1pdGVyOiBzdHJpbmcgPSBcIiwgXCI7XHJcblxyXG4gIC8vIFRPRE86IFJlaW1wbGVtZW50IGlmIHdlIHdhbnQgdXNlcnMgdG8gYmUgYWJsZSB0byBjb250cm9sIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIGdyb3VwQnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBUaGUgcGFnZSBzaXplIG9mIHJvdyBncm91cHMgb3Igcm93cyBpZiBubyBncm91cGluZy5cclxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyO1xyXG5cclxuICAvLyBUaGUgcGFnZSBzaXplIG9mIHJvd3MgaW4gYSBzZWxlY3RlZCBncm91cC5cclxuICBASW5wdXQoKSBncm91cFBhZ2VTaXplOiBudW1iZXIgPSA1MDtcclxuXHJcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBvZiByb3dzIHRvIGNhY2hlIGludGVybmFsbHkgYmVmb3JlIGFuIGV4dGVybmFsIGNhbGwgaXMgbWFkZS5cclxuICBASW5wdXQoKSBncm91cENhY2hlTnVtUGFnZXM6IG51bWJlcjtcclxuXHJcbiAgLy8gQSByZWZlcmVuY2UgdG8gYSBwYXJlbnQgZHJvcGRvd24gaWYgYXBwbGljYWJsZS5cclxuICBASW5wdXQoKSBkcm9wZG93bjogTmdiRHJvcGRvd247XHJcblxyXG4gIC8vV2hpY2ggaWNvbiB0byB1c2UgZm9yIHRoZSBidXN5IHNwaW5uZXJcclxuICBASW5wdXQoKSBidXN5SWNvbjogc3RyaW5nID0gXCJoY2kgZmEtY29yZSBmYS1zcGluXCI7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dSZXN1bHRzQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gSWYgbm8gb25Hcm91cENsaWNrIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQuICBUaGUgb3ZlcnJpZGluZyBmdW5jdGlvbiBzaG91bGQgc3RpbGwgY2FsbCB0aGlzLlxyXG4gIGRlZmF1bHRHcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICBjbXB0LnNldEdyb3VwRXhwYW5kZWQoZXZlbnQsIHJvd0dyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkO1xyXG5cclxuICAvLyBJZiBubyBvblJvd0NsaWNrIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQuICBUaGUgb3ZlcnJpZGluZyBmdW5jdGlvbiBzaG91bGQgc3RpbGwgY2FsbCB0aGlzLlxyXG4gIGRlZmF1bHRSb3dDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvdyA9IHJvdztcclxuXHJcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvdzogcm93LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgQElucHV0KCkgb25Sb3dDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB2b2lkO1xyXG5cclxuICBASW5wdXQoKSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbG9zZTogRnVuY3Rpb247XHJcblxyXG4gIEBPdXRwdXQoKSBncm91cENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImRlZmF1bHRHcm91cFRlbXBsYXRlXCIsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSkgZGVmYXVsdEdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGVcIiwge1xyXG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXHJcbiAgICBzdGF0aWM6IHRydWVcclxuICB9KSBkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBzZWxlY3RlZFJvdzogYW55O1xyXG4gIHNlbGVjdGVkUm93R3JvdXA6IFJvd0dyb3VwO1xyXG4gIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gIGlubmVyUm93R3JvdXBDb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICAvLyBHcmlkIERUTyBpbmZvIG5lZWRlZCB0byBidWlsZCBleHRlcm5hbCBkYXRhIHJlcXVlc3RzLlxyXG4gIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG4gIHBhZ2luZzogSGNpUGFnaW5nRHRvID0gbmV3IEhjaVBhZ2luZ0R0bygwLCAtMSk7XHJcbiAgZ3JvdXBpbmc6IEhjaUdyb3VwaW5nRHRvID0gbmV3IEhjaUdyb3VwaW5nRHRvKFtdKTtcclxuXHJcbiAgLy9nbG9iYWxSb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgcGFnaW5nU3ViamVjdDogU3ViamVjdDxIY2lQYWdpbmdEdG8+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIY2lQYWdpbmdEdG8+KHRoaXMucGFnaW5nKTtcclxuXHJcbiAgLy8gQSBkdW1teSBudW1iZXIgdGhhdCBpbmNyZW1lbnRzIGJhc2VkIG9uIHNlbGVjdGlvbiBjaGFuZ2VzLiAgRm9yY2VzIHJvdXRlckxpbmtBY3RpdmUgdG8gcmVjaGVjay5cclxuICByb3dSZWZyZXNoOiBudW1iZXIgPSAwO1xyXG5cclxuICBidXN5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxhc3RTY3JvbGxUb3A6IG51bWJlciA9IC0xO1xyXG4gIGxhc3RTY3JvbGxQb3NpdGlvbjogbnVtYmVyID0gMTtcclxuICBzZXRTY3JvbGxUb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCA9IHRoaXM7XHJcblxyXG4gIGxhc3RFdmVudDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICAgICAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIsIHJlc29sdmVyLCBuYXZpZ2F0aW9uU2VydmljZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICAgIGlmICghbmF2aWdhdGlvblNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5ldyBOYXZpZ2F0aW9uU2VydmljZShuYXZpZ2F0aW9uR2xvYmFsU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWQoKSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRDb25maWcoe30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBpZCBmb3IgdGhlIHJvdyBncm91cCBiYXNlZCB1cG9uIHRoZSBncm91cCBrZXkgb3IgaWYgdW5kZWZpbmVkLCB0aGUgZmlyc3Qgcm93J3MgaWQuICBlLmcuIFwicm93LWdyb3VwLWJvYi1zbWl0aFwiXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0Um93R3JvdXBJZChyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnS2V5KSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1ncm91cC1cIiArIHJvd0dyb3VwLnJnS2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJvd0lkOiBzdHJpbmcgPSB0aGlzLmdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSk7XHJcbiAgICAgIHJldHVybiByb3dJZC5yZXBsYWNlKFwicm93LVwiLCBcInJvdy1ncm91cC1cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHJvdyBpZC4gIGUuZy4gXCJyb3ctMVwiLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0Um93SWQocm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMucm93SWQpIHtcclxuICAgICAgcmV0dXJuIFwicm93LVwiICsgPHN0cmluZz48YW55PnJvd1t0aGlzLnJvd0lkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInJvdy11bmRlZmluZWRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGluaXQsIGxpc3RlbiBmb3IgbG9hZGluZyBzdWJqZWN0cyBhbmQgbGlzdGVuIGZvciBwYWdlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5zdWJzY3JpYmUoKGJ1c3k6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3Quc3Vic2NyaWJlKChwYWdpbmc6IEhjaVBhZ2luZ0R0bykgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luZyA9IHBhZ2luZztcclxuICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGlucHV0cyBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIGlmIChjaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl0pIHtcclxuICAgICAgbGV0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gPFNpbXBsZUNoYW5nZT5jaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl07XHJcbiAgICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoW10pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgLy9NYXkgYXMgd2VsbCBtYWtlIGl0IHNwaW4gd2hpbGUgcHJvY2Vzc2luZywgYXMgd2VsbCBhcyBsb2FkaW5nLiBPdGhlcndpc2UgaXQgbG9va3MgZnJvemVuXHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdFxyXG4gICAgICAgICAgLnBpcGUoZGVsYXkoMCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBPYmplY3RbXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgLy9Ob3cgZG9uZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBuZXcgcm93UGFyZW50IGJlaW5nIHNldCwgYWRkIGFueSBjbGFzc2VzIGlmIHJvd0NsYXNzIGlzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxFbGVtZW50UmVmPn0gcm93UGFyZW50c1xyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJyb3dQYXJlbnRcIiwge3JlYWQ6IEVsZW1lbnRSZWZ9KSBzZXQgcm93UGFyZW50cyhyb3dQYXJlbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pIHtcclxuICAgIGlmIChyb3dQYXJlbnRzICYmIHRoaXMucm93Q2xhc3MpIHtcclxuICAgICAgcm93UGFyZW50cy5mb3JFYWNoKChlOiBFbGVtZW50UmVmKSA9PiB7XHJcbiAgICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb3dDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZm9yIChsZXQgY2xhc3NOYW1lIG9mIGNsYXNzZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZS5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucm93UmVmcmVzaCArPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQucG9zdEluaXQ6IFwiICsgdGhpcy5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgdGhpcy5jb250cm9sbGVyID0gPFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50PnRoaXMuZ2V0UGFyZW50KCkuZ2V0Q29tcG9uZW50QnlUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbGxlcikge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudDogdXNpbmcgY29udHJvbGxlclwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmFkZFNlYXJjaExpc3QodGhpcy50aXRsZSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuZmlsdGVyc1N1YmplY3Quc3Vic2NyaWJlKChmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luZygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5zb3J0c1N1YmplY3Quc3Vic2NyaWJlKChzb3J0czogSGNpU29ydER0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IHNvcnRzO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZSgodGl0bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlOiBcIiArIHRoaXMudGl0bGUgKyBcIiwgXCIgKyB0aXRsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpdGxlICYmIHRpdGxlICYmIHRoaXMudGl0bGUgIT09IHRpdGxlKSB7XHJcbiAgICAgICAgICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJkaXNwbGF5XCIsIFwiZmxleFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCByZXNldCBwYWdpbmcgYW5kIGZpcmVzXHJcbiAgICovXHJcbiAgcmVzZXRQYWdpbmcoKSB7XHJcbiAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcucm91dGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlID0gY29uZmlnLnJvdXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmdyb3VwQnlBbGxvd2VkRmllbGRzID0gY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gY29uZmlnLnNvcnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBpbmdGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nRmllbGRzID0gY29uZmlnLmdyb3VwaW5nRmllbGRzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKGNvbmZpZy5ncm91cGluZ0ZpZWxkcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5wYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZVNpemUoY29uZmlnLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBEaXNwbGF5ID0gY29uZmlnLmdyb3VwRGlzcGxheTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRlbGltaXRlcikge1xyXG4gICAgICAgIHRoaXMuZGVsaW1pdGVyID0gY29uZmlnLmRlbGltaXRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmNsb3NlT3RoZXJzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmNsb3NlT3RoZXJzID0gY29uZmlnLmNsb3NlT3RoZXJzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGNvbmZpZy5pdGVtVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZERhdGEgPSBjb25maWcuZGF0YTtcclxuICAgICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0ID0gY29uZmlnLmRhdGFTdWJqZWN0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YUNhbGwpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwgPSBjb25maWcuZGF0YUNhbGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pbmxpbmVFeHBhbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuaW5saW5lRXhwYW5kID0gY29uZmlnLmlubGluZUV4cGFuZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmdyb3VwQ2xhc3MgPSBjb25maWcuZ3JvdXBDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJvd0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGFzcyA9IGNvbmZpZy5yb3dDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJvd0lkKSB7XHJcbiAgICAgICAgdGhpcy5yb3dJZCA9IGNvbmZpZy5yb3dJZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uUm93Q2xpY2sgPSBjb25maWcub25Sb3dDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzID0gY29uZmlnLmxvYWRpbmdTdWJqZWN0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwUGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwUGFnZVNpemUgPSBjb25maWcuZ3JvdXBQYWdlU2l6ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzID49IDIpIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzID0gY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXBDYWNoZU51bVBhZ2VzIG11c3QgYmUgMiBvciBtb3JlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xvc2UpIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbG9zZSA9IGNvbmZpZy5vbkdyb3VwQ2xvc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5idXN5SWNvbikge1xyXG4gICAgICAgIHRoaXMuYnVzeUljb24gPSBjb25maWcuYnVzeUljb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuc2hvd1Jlc3VsdHNDb3VudCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3VsdHNDb3VudCA9IGNvbmZpZy5zaG93UmVzdWx0c0NvdW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm9uR3JvdXBDbGljaykge1xyXG4gICAgICB0aGlzLm9uR3JvdXBDbGljayA9IHRoaXMuZGVmYXVsdEdyb3VwQ2xpY2s7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub25Sb3dDbGljaykge1xyXG4gICAgICB0aGlzLm9uUm93Q2xpY2sgPSB0aGlzLmRlZmF1bHRSb3dDbGljaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIlNlYXJjaExpc3RDb21wb25lbnQ6IEFuIGl0ZW1UZW1wbGF0ZSBtdXN0IGJlIHByb3ZpZGVkIVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFRlbXBsYXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzID0gW25ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgYW4gYXJyYXksIGNhbGxzIHRoZSBkYXRhIGlmIGV4dGVybmFsIGNhbGwuXHJcbiAgICovXHJcbiAgc2V0RGF0YShkYXRhPzogT2JqZWN0W10pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0RGF0YVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byh0aGlzLmZpbHRlcnMsIHRoaXMuc29ydHMsIHRoaXMucGFnaW5nLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIHRoaXMuZ3JvdXBpbmcuZmllbGRzICYmIHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApKSlcclxuICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoZXh0ZXJuYWxEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGFycmF5IHRoYXQgdGhlIGludGVyZmFjZSB1c2VzIHRvIHJlbmRlciAocmVnYXJkbGVzcyBvZiBzb3VyY2UpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIY2lEYXRhRHRvfSBleHRlcm5hbERhdGFcclxuICAgKi9cclxuICBnZW5lcmF0ZURhdGEoZXh0ZXJuYWxEYXRhPzogSGNpRGF0YUR0byk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJnZW5lcmF0ZURhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZXh0ZXJuYWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWxEYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZXh0ZXJuYWxEYXRhLmRhdGE7XHJcbiAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKGV4dGVybmFsRGF0YS5ncmlkRHRvLnBhZ2luZy5kYXRhU2l6ZSk7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBsZXQgcm93R3JvdXA6IFJvd0dyb3VwO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJvd0dyb3VwID0gbmV3IFJvd0dyb3VwKHVuZGVmaW5lZCwgdGhpcy5ib3VuZERhdGFbaV0sIChleHRlcm5hbERhdGEuZGF0YUNvdW50cyAmJiBleHRlcm5hbERhdGEuZGF0YUNvdW50cyAhPT0gbnVsbCkgPyBleHRlcm5hbERhdGEuZGF0YUNvdW50c1tpXSA6IDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ3JvdXBpbmdGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtncm91cGluZ0ZpZWxkXSA9IHRoaXMuYm91bmREYXRhW2ldW2dyb3VwaW5nRmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHJvd0dyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ3JlYXRlIGFuZCBwb3B1bGF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnBvcHVsYXRlRnJvbUJvdW5kRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KE9iamVjdC5hc3NpZ24oe3R5cGU6IFwibm9uZVwifSwgdGhpcy5sYXN0RXZlbnQsIHtcclxuICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcclxuICAgICAgblZpZXdEYXRhOiB0aGlzLnZpZXdEYXRhLmxlbmd0aFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIHRoZSBkYXRhIGlzIGFuIGFycmF5IChub3QgZXh0ZXJuYWwpLlxyXG4gICAqL1xyXG4gIHBvcHVsYXRlRnJvbUJvdW5kRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwicG9wdWxhdGVGcm9tQm91bmREYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkJvdW5kIERhdGEgbGVuZ3RoIGZvdW5kIGFzIDBcIik7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldE51bVBhZ2VzKDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlcGFyZWREYXRhID0gW107XHJcbiAgICB0aGlzLmdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gICAgbGV0IHJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBsZXQgZG9Sb3dHcm91cGluZzogYm9vbGVhbiA9IHRoaXMuZ3JvdXBpbmcuZmllbGRzICYmIHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgICBmb3IgKGxldCByb3cgb2YgdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgbGV0IGdyb3VwS2V5OiBzdHJpbmc7XHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwS2V5ID0gKGdyb3VwS2V5KSA/IGdyb3VwS2V5ICsgXCI6XCIgKyByb3dbZmllbGRdIDogcm93W2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcnMgJiYgdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgaW5jbHVkZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgIGlmICghZmlsdGVyLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyKSB7XHJcbiAgICAgICAgICAvLyAgQWR2YW5jZWQgc2VhcmNoIGRvZXMgbm90IGF1dG8gZmlsdGVyIGJ5IGRlZmF1bHRcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWVzID0gZmlsdGVyLmdldFZhbHVlKCkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0gZmlsdGVyLmdldEZpZWxkKCkuc3BsaXQoXCIgb3IgXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlubmVySW5jbHVkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWx0ZXJGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0gPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHJvd1tmaWVsZF0gaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgobmV3IERhdGUocm93W2ZpZWxkXSkpLmdldFRpbWUoKSA9PSAobmV3IERhdGUodmFsdWUpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgbXVsdGlwbGUgc2VhcmNoIHN0cmluZ3NcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChpbm5lckluY2x1ZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpbm5lckluY2x1ZGUpIHtcclxuICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYoaW5jbHVkZSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaW5jbHVkZSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGlmIChyb3dHcm91cE1hcC5nZXQoZ3JvdXBLZXkpID49IDApIHtcclxuICAgICAgICAgIHByZXBhcmVkRGF0YVtyb3dHcm91cE1hcC5nZXQoZ3JvdXBLZXkpXS5yZ1Jvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dHcm91cE1hcC5zZXQoZ3JvdXBLZXksIHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXAgPSBuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtmaWVsZF0gPSByb3dbZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHByZXBhcmVkRGF0YS5wdXNoKHJvd0dyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gobmV3IFJvd0dyb3VwKGdyb3VwS2V5LCByb3cpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy90aGlzLmdsb2JhbFJvd0dyb3VwTWFwID0gcm93R3JvdXBNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcmVwYXJlZERhdGEuc29ydCgoYTogUm93R3JvdXAsIGI6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93R3JvdXAgb2YgcHJlcGFyZWREYXRhKSB7XHJcbiAgICAgICAgICByb3dHcm91cC5yZ1Jvd3Muc29ydCgoYTogT2JqZWN0LCBiOiBPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwZWREYXRhU2V0ID0gcHJlcGFyZWREYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpID4gMCkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpOyBpIDwgTWF0aC5taW4ocHJlcGFyZWREYXRhLmxlbmd0aCwgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChwcmVwYXJlZERhdGFbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IHByZXBhcmVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCByb3dHcm91cCBvZiB0aGlzLnZpZXdEYXRhKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnQ291bnQgPSByb3dHcm91cC5yZ1Jvd3MubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGEgZ3JvdXBpbmcgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICovXHJcbiAgaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBpbmcgfHwgIXRoaXMuZ3JvdXBpbmcuZmllbGRzIHx8IHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBpZiAoc29ydEZpZWxkID09PSBncm91cEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIGdyb3VwIG9mIGRhdGEuICBDYWxsIHRoZSBmaXJzdCBwYWdlIG9mIGRhdGEgdXBvbiBleHBhbmRpbmcuICBJZiBhbHJlYWR5IGV4cGFuZGVkLCBjbG9zZSBhbmQgZ28gYmFjayB0byB0aGVcclxuICAgKiBsaXN0IG9mIGdyb3Vwcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICovXHJcbiAgc2V0R3JvdXBFeHBhbmRlZChldmVudDogTW91c2VFdmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldEdyb3VwRXhwYW5kZWQ6IFwiICsgcm93R3JvdXAucmdFeHBhbmRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCAmJiAhcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgICAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8oMCwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICByb3dHcm91cC5yZ1Jvd3MgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNYXggPSAwO1xyXG4gICAgICBpZiAoIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gcm93R3JvdXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDI1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vbkdyb3VwQ2xvc2UpIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkICYmIHRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAvL2dyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInRoaXMuc2VsZWN0ZWRSb3dHcm91cFwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkUm93R3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJvd0dyb3VwLnJnRXhwYW5kZWQgPSAhcm93R3JvdXAucmdFeHBhbmRlZDtcclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgc2Nyb2xsIGxpc3RlbmVyIHRvIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IC0xO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnQ291bnQgIT09IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIHNjcm9sbCBsaXN0ZW5lciBmcm9tIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgcmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vbkdyb3VwU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciB0aGUgc2Nyb2xsIGV2ZW50LCBkZXRlcm1pbmUgaWYgdGhlIHNjcm9sbCBoaXQgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGxldCBuZXdTY3JvbGxUb3A6IG51bWJlciA9IE1hdGgucm91bmQodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCk7XHJcbiAgICAgIGxldCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyID0gMTtcclxuICAgICAgaWYgKG5ld1Njcm9sbFRvcCA9PT0gMCAmJiBzY3JvbGxQb3NpdGlvbiAhPT0gMCkge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMDtcclxuICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiAhPT0gMiAmJiBNYXRoLmFicyh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gKG5ld1Njcm9sbFRvcCArIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQpKSA8IDMpIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gIT09IHNjcm9sbFBvc2l0aW9uICYmIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID09PSAxKSB7XHJcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwUHJldmlvdXNQYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cE5leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7XHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSB0b3AsIGxvYWQgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgZ3JvdXAgZGF0YS5cclxuICAgKi9cclxuICBncm91cFByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkZpcnN0IHBhZ2UgYWxyZWFkeSBsb2FkZWQuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLSAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhLmNvbmNhdCh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLT0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgKiB0aGlzLmdyb3VwUGFnZVNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC09IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSBib3R0b20sIGxvYWQgdGhlIG5leHQgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwTmV4dFBhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxKSAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSA+PSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJBbGwgcm93cyBhbHJlYWR5IGxvYWRlZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5zZWxlY3RlZFJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0byh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICsgMSwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2YodW5kZWZpbmVkKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLmNvbmNhdChleHRlcm5hbERhdGEuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICs9IDE7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID49IHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3Muc3BsaWNlKDAsIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gKz0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBmaXJzdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VGaXJzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgcHJldmlvdXMgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlUHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIC0gMSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgbmV4dCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VOZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSA8IHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKyAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBsYXN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUxhc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHBhZ2UgdHVybnMsIGNoZWNrIGlmIHRoZSBwYWdlIGhhcyB0aGUgcm93IHRoYXQgbmVlZCB0byBiZSBoaWdobGlnaHRlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVSb3dJZCgpOiB2b2lkIHtcclxuICAgIC8vaWYgYSByb3cgaXMgc2VsZWN0ZWQsIGFuZCByb3dJZCBmaWVsZCBpcyBzcGVjaWZpZWQgKHVzdWFsbHkgY29uZmlndXJlZCBieSBjb25maWcpXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyAmJiB0aGlzLnJvd0lkKSB7XHJcbiAgICAgIGxldCBpZCA9IHRoaXMuc2VsZWN0ZWRSb3dbdGhpcy5yb3dJZF07XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uY2F0IGdyb3VwIGJ5IGZpZWxkcyB0byBjb21tYSBkZWxpbWl0ZWQgd29yZHNcclxuICAgKiBvciBkZWxpbWl0ZXIgZGVsaW1pdGVkIHdvcmRzIGlmIHRoZSBkZWxpbWluYXRvciBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRGlzcGxheShyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheSA9IHRoaXMuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnJlcGxhY2UoZmllbGQsIHJvd0dyb3VwW2ZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwW2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dHcm91cFtmaWVsZF0gIT09IFwiXCIpIHtcclxuICAgICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgdGhpcy5kZWxpbWl0ZXIgKyByb3dHcm91cFtmaWVsZF0gOiByb3dHcm91cFtmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF3TkksSUFBTSxtQkFBbUIsR0FBekIsTUFB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Q0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDUixDQUFDO3dCQUNILENBQUM7d0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxDQUFDLENBQUM7d0JBQ1gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7NEJBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ2hFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDVCxDQUFDO2lDQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3ZFLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ1IsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDaEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNULENBQUM7aUNBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMs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QkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBa0JHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFK0Qsb0JBQW9CO3NCQUF6RixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUlqRSw0QkFBNEI7c0JBSDlCLFNBQVM7dUJBQUMsOEJBQThCLEVBQUU7d0JBQ3pDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkErSmtELFVBQVU7c0JBQTVELFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQztnQkEwMEJ0QywrQkFBK0I7c0JBSHJDLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVsYXksIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtOZ2JEcm9wZG93bn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0hjaURhdGFEdG8sIEhjaUZpbHRlckR0bywgSGNpR3JpZER0bywgSGNpR3JvdXBpbmdEdG8sIEhjaVBhZ2luZ0R0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSb3dHcm91cH0gZnJvbSBcIi4vcm93LWdyb3VwXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnR9IGZyb20gXCIuL3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGdyb3VwZWQgb3Igbm90IGdyb3VwZWQuICBUaGUgZGF0YSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXksIG9yIGZyb20gYW4gZXh0ZXJuYWxcclxuICogZGF0YSBjYWxsIHVzaW5nIGpwYS1zZXJ2aWNlcy5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAucmVzdWx0cy1jb3VudCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE3LjNweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMThweDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDEwcHggM3B4IHZhcigtLWdyZXljb29sLW1lZGRhcmtlcik7XHJcbiAgICAgICAgICB6LWluZGV4OiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm1hdC1ib3R0b20tcGFkZGluZyB7XHJcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXTpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbWVkaXVtKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChvZGQpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddIHtcclxuICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2LnJvdy1wYXJlbnQuYWN0aXZlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm12aXZpZC1tZWRsaWdodCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5yaS1zaWRlYmFyLWNlbGwge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jlc3VsdHNDb3VudCAmJiBzZWFyY2hSZXN1bHRNZXNzYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwicmVzdWx0cy1jb3VudFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmb3JtYXQtYm90dG9tLXBhZGRpbmcnOiB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPT09ICcnIH1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cIiFzaG93UmVzdWx0c0NvdW50IHx8ICFzZWFyY2hSZXN1bHRNZXNzYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwicmVzdWx0cy1jb3VudFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNjcm9sbGFibGVcIj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwic2VhcmNoLXRpdGxlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBwcy0zXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwicmVzdWx0LWxpc3RcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIFtjbGFzcy55LWhpZGRlbl09XCJzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwibG9hZGluZ1N1YmplY3RzXCIgcGFyZW50U2VsZWN0b3I9XCIuc2Nyb2xsYWJsZVwiIFtpY29uXT1cImJ1c3lJY29uXCI+PC9oY2ktYnVzeT5cclxuICAgICAgICAgICAgICA8IS0tIE5vIGdyb3VwaW5nIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBpbmcuZmllbGRzIHx8IGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBpbmxpbmUgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhOyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAge3tncm91cENsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogcm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggc2VwYXJhdGUgaW5kaXZpZHVhbCBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFJvd0dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICNncm91cFNlbGVjdGVkUGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXNlbGVjdGVkLXBhcmVudCBmbGV4LWNvbHVtbiB7e2dyb3VwQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChzZWxlY3RlZFJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIGFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCBzZWxlY3RlZFJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFNlbGVjdGVkVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogc2VsZWN0ZWRSb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGVkUm93R3JvdXBDb250YWluZXIgaWQ9XCJzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB5LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImlubmVyUm93R3JvdXBDb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBzZWxlY3RlZFJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gUGFnaW5nIGZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnaW5nLnBhZ2VTaXplID4gMFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgcGFnaW5nLWZvb3RlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwcy0zIHBlLTNcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAxcmVtOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUZpcnN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZVByZXZpb3VzKClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07XCI+e3twYWdpbmcucGFnZSArIDF9fSBvZiB7e3BhZ2luZy5udW1QYWdlc319PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZU5leHQoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VMYXN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYSBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBzLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IG1lLTFcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWU7IGVsc2UgcGx1c1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51cyBmYS1zbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c1RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS1zbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAoe3tyb3dHcm91cC5yZ0NvdW50fX0pXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhbiBpbmRpdmlkdWFsIHNlbGVjdGVkIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxldmVsLXVwLWFsdFwiIGRhdGEtZmEtdHJhbnNmb3JtPVwiZmxpcC1oXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbWUtYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29tcG9uZW50IGV4dGVuZHMgTmF2Q29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gIC8vIFRoZSBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXHJcbiAgdmlld0RhdGE6IFJvd0dyb3VwW107XHJcbiAgcHJlcGFyZWREYXRhOiBhbnlbXSA9W107XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgY29udHJvbGxlcjogU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVwiKSBib3VuZERhdGE6IE9iamVjdFtdO1xyXG5cclxuICAvLyBBIHN1YmplY3QgdGhhdCByZXByZXNlbnRzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVN1YmplY3RcIikgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxPYmplY3RbXT47XHJcblxyXG4gIC8vIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW4gYSBIY2lHcmlkRHRvIGFuZCByZXR1cm5zIGEgSGNpRGF0YUR0byB3aGljaCB3cmFwcyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFDYWxsXCIpIGV4dGVybmFsRGF0YUNhbGw6IChkdG86IEhjaUdyaWREdG8pID0+IE9ic2VydmFibGU8SGNpRGF0YUR0bz47XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIHN1YmplY3RzIHdpdGggYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZ1N1YmplY3RzOiBTdWJqZWN0PGJvb2xlYW4+W107XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW5bXSA9IFtmYWxzZV07XHJcblxyXG4gIC8vIElmIGNsaWNraW5nIGEgcm93IGNoYW5nZXMgYSByb3V0ZSwgdGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIHJvdXRlIHRvIHVzZS5cclxuICBASW5wdXQoKSByb3V0ZTogKHJvd0dyb3VwOiBhbnksIHJvdzogYW55KSA9PiBhbnlbXTtcclxuXHJcbiAgLy8gRXhwYW5kIHRoZSBzZWxlY3RlZCByb3cgZ3JvdXAgYXMgaXRzIG93biBzY3JlZW4sIG9yIHNob3cgcm93cyB1bmRlciBzZWxlY3RlZCByb3cgZ3JvdXBzIGluIHRoZSBzYW1lIHZpZXcuXHJcbiAgQElucHV0KCkgaW5saW5lRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFdpdGhvdXQgYW55IG90aGVyIG1ldGFkYXRhIGZvciB3aGF0IGEgcm93IGlzLCBwcm92aWRlIHRoZSBmaWVsZCB0byBiZSB1c2VkIGZvciB0aGUgaWQuXHJcbiAgLy8gVGhpcyBpcyBhY3R1YWxseSB0aGUgZmllbGQgdGhhdCBoYXMgdGhlIChkZWZpbmVkKSByb3dJZCAtLSB3aGF0ZXZlciBpdCBpcyB1bmRlciBkaWZmZXJlbnRcclxuICAvLyBzdHJ1Y3R1cmVzOiBpZFBhdGllbnQsIGlkTWVkaWNhbEV2ZW50IGV0Y1xyXG4gIEBJbnB1dCgpIHJvd0lkOiBhbnk7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgZ3JvdXAgcGFyZW50LlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgcGFyZW50LlxyXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBBIHRlbXBsYXRlIGZvciBob3cgdG8gZGlzcGxheSByb3cgZ3JvdXAgaW5mbyBpZiB1c2luZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZS4gIGUuZy4gXCJsYXN0TmFtZSwgZmlyc3ROYW1lXCIgZmllbGQgbmFtZXMgZ2V0IHJlcGxhY2VkIHdpdGggdmFsdWVzLlxyXG4gIEBJbnB1dCgpIGdyb3VwRGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudFxyXG4gIEBJbnB1dCgpIGNsb3NlT3RoZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGhlIGxpc3Qgb2YgZmllbGRzIHRvIGdyb3VwIGJ5LlxyXG4gIEBJbnB1dCgpIGdyb3VwaW5nRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBkZWxpbWl0ZXIgZm9yIGdldEdyb3VwRGlzcGxheVxyXG4gIEBJbnB1dCgpIGRlbGltaXRlcjogc3RyaW5nID0gXCIsIFwiO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudCBpZiB3ZSB3YW50IHVzZXJzIHRvIGJlIGFibGUgdG8gY29udHJvbCBncm91cGluZy5cclxuICBASW5wdXQoKSBncm91cEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3cgZ3JvdXBzIG9yIHJvd3MgaWYgbm8gZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlcjtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3dzIGluIGEgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgQElucHV0KCkgZ3JvdXBQYWdlU2l6ZTogbnVtYmVyID0gNTA7XHJcblxyXG4gIC8vIFRoZSBudW1iZXIgb2YgcGFnZXMgb2Ygcm93cyB0byBjYWNoZSBpbnRlcm5hbGx5IGJlZm9yZSBhbiBleHRlcm5hbCBjYWxsIGlzIG1hZGUuXHJcbiAgQElucHV0KCkgZ3JvdXBDYWNoZU51bVBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIGEgcGFyZW50IGRyb3Bkb3duIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgZHJvcGRvd246IE5nYkRyb3Bkb3duO1xyXG5cclxuICAvL1doaWNoIGljb24gdG8gdXNlIGZvciB0aGUgYnVzeSBzcGlubmVyXHJcbiAgQElucHV0KCkgYnVzeUljb246IHN0cmluZyA9IFwiaGNpIGZhLWNvcmUgZmEtc3BpblwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93UmVzdWx0c0NvdW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIG5vIG9uR3JvdXBDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0R3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgY21wdC5zZXRHcm91cEV4cGFuZGVkKGV2ZW50LCByb3dHcm91cCk7XHJcblxyXG4gICAgdGhpcy5ncm91cENsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZDtcclxuXHJcbiAgLy8gSWYgbm8gb25Sb3dDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0Um93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7XHJcblxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3c6IHJvdyxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIG9uUm93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBncm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xvc2U6IEZ1bmN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgZ3JvdXBDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBUZW1wbGF0ZVwiLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pIGRlZmF1bHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlXCIsIHtcclxuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxyXG4gICAgc3RhdGljOiB0cnVlXHJcbiAgfSkgZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRSb3c6IGFueTtcclxuICBzZWxlY3RlZFJvd0dyb3VwOiBSb3dHcm91cDtcclxuICBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuICBpbm5lclJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy8gR3JpZCBEVE8gaW5mbyBuZWVkZWQgdG8gYnVpbGQgZXh0ZXJuYWwgZGF0YSByZXF1ZXN0cy5cclxuICBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgZmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBwYWdpbmc6IEhjaVBhZ2luZ0R0byA9IG5ldyBIY2lQYWdpbmdEdG8oMCwgLTEpO1xyXG4gIGdyb3VwaW5nOiBIY2lHcm91cGluZ0R0byA9IG5ldyBIY2lHcm91cGluZ0R0byhbXSk7XHJcblxyXG4gIC8vZ2xvYmFsUm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gIGdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gIHBhZ2luZ1N1YmplY3Q6IFN1YmplY3Q8SGNpUGFnaW5nRHRvPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpUGFnaW5nRHRvPih0aGlzLnBhZ2luZyk7XHJcblxyXG4gIC8vIEEgZHVtbXkgbnVtYmVyIHRoYXQgaW5jcmVtZW50cyBiYXNlZCBvbiBzZWxlY3Rpb24gY2hhbmdlcy4gIEZvcmNlcyByb3V0ZXJMaW5rQWN0aXZlIHRvIHJlY2hlY2suXHJcbiAgcm93UmVmcmVzaDogbnVtYmVyID0gMDtcclxuXHJcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXIgPSAtMTtcclxuICBsYXN0U2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgc2V0U2Nyb2xsVG9wOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQgPSB0aGlzO1xyXG5cclxuICBsYXN0RXZlbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlnKHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaWQgZm9yIHRoZSByb3cgZ3JvdXAgYmFzZWQgdXBvbiB0aGUgZ3JvdXAga2V5IG9yIGlmIHVuZGVmaW5lZCwgdGhlIGZpcnN0IHJvdydzIGlkLiAgZS5nLiBcInJvdy1ncm91cC1ib2Itc21pdGhcIlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0dyb3VwSWQocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0tleSkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctZ3JvdXAtXCIgKyByb3dHcm91cC5yZ0tleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByb3dJZDogc3RyaW5nID0gdGhpcy5nZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pO1xyXG4gICAgICByZXR1cm4gcm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJyb3ctZ3JvdXAtXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSByb3cgaWQuICBlLmcuIFwicm93LTFcIi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJvd0lkKSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1cIiArIDxzdHJpbmc+PGFueT5yb3dbdGhpcy5yb3dJZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJyb3ctdW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWaWV3RGF0YSgpOiBSb3dHcm91cFtde1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0RhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVwYXJlZERhdGEoKTogUm93R3JvdXBbXXtcclxuICAgIHJldHVybiB0aGlzLnByZXBhcmVkRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGluaXQsIGxpc3RlbiBmb3IgbG9hZGluZyBzdWJqZWN0cyBhbmQgbGlzdGVuIGZvciBwYWdlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5zdWJzY3JpYmUoKGJ1c3k6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3Quc3Vic2NyaWJlKChwYWdpbmc6IEhjaVBhZ2luZ0R0bykgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luZyA9IHBhZ2luZztcclxuICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGlucHV0cyBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIGlmIChjaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl0pIHtcclxuICAgICAgbGV0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gPFNpbXBsZUNoYW5nZT5jaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl07XHJcbiAgICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoW10pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgLy9NYXkgYXMgd2VsbCBtYWtlIGl0IHNwaW4gd2hpbGUgcHJvY2Vzc2luZywgYXMgd2VsbCBhcyBsb2FkaW5nLiBPdGhlcndpc2UgaXQgbG9va3MgZnJvemVuXHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdFxyXG4gICAgICAgICAgLnBpcGUoZGVsYXkoMCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBPYmplY3RbXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgLy9Ob3cgZG9uZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBuZXcgcm93UGFyZW50IGJlaW5nIHNldCwgYWRkIGFueSBjbGFzc2VzIGlmIHJvd0NsYXNzIGlzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxFbGVtZW50UmVmPn0gcm93UGFyZW50c1xyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJyb3dQYXJlbnRcIiwge3JlYWQ6IEVsZW1lbnRSZWZ9KSBzZXQgcm93UGFyZW50cyhyb3dQYXJlbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pIHtcclxuICAgIGlmIChyb3dQYXJlbnRzICYmIHRoaXMucm93Q2xhc3MpIHtcclxuICAgICAgcm93UGFyZW50cy5mb3JFYWNoKChlOiBFbGVtZW50UmVmKSA9PiB7XHJcbiAgICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb3dDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZm9yIChsZXQgY2xhc3NOYW1lIG9mIGNsYXNzZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZS5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucm93UmVmcmVzaCArPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQucG9zdEluaXQ6IFwiICsgdGhpcy5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgdGhpcy5jb250cm9sbGVyID0gPFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50PnRoaXMuZ2V0UGFyZW50KCkuZ2V0Q29tcG9uZW50QnlUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbGxlcikge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudDogdXNpbmcgY29udHJvbGxlclwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmFkZFNlYXJjaExpc3QodGhpcy50aXRsZSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuZmlsdGVyc1N1YmplY3Quc3Vic2NyaWJlKChmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luZygpO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJGaWx0ZXJFdmVudC5lbWl0KHRoaXMucHJlcGFyZWREYXRhKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc29ydHNTdWJqZWN0LnN1YnNjcmliZSgoc29ydHM6IEhjaVNvcnREdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBzb3J0cztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZTogXCIgKyB0aGlzLnRpdGxlICsgXCIsIFwiICsgdGl0bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aXRsZSAmJiB0aXRsZSAmJiB0aGlzLnRpdGxlICE9PSB0aXRsZSkge1xyXG4gICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgcmVzZXQgcGFnaW5nIGFuZCBmaXJlc1xyXG4gICAqL1xyXG4gIHJlc2V0UGFnaW5nKCkge1xyXG4gICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZyB3aXRoIG9wdGlvbnMgYW5kIHJlLWZldGNoZXMgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWdcclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVwZGF0ZUNvbmZpZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGNvbmZpZy5yb3V0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwaW5nRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZ0ZpZWxkcyA9IGNvbmZpZy5ncm91cGluZ0ZpZWxkcztcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjb25maWcuZ3JvdXBpbmdGaWVsZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2VTaXplKGNvbmZpZy5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgICB0aGlzLmdyb3VwRGlzcGxheSA9IGNvbmZpZy5ncm91cERpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kZWxpbWl0ZXIpIHtcclxuICAgICAgICB0aGlzLmRlbGltaXRlciA9IGNvbmZpZy5kZWxpbWl0ZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jbG9zZU90aGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZU90aGVycyA9IGNvbmZpZy5jbG9zZU90aGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBjb25maWcuaXRlbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuYm91bmREYXRhID0gY29uZmlnLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdCA9IGNvbmZpZy5kYXRhU3ViamVjdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsID0gY29uZmlnLmRhdGFDYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5saW5lRXhwYW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlubGluZUV4cGFuZCA9IGNvbmZpZy5pbmxpbmVFeHBhbmQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cENsYXNzID0gY29uZmlnLmdyb3VwQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dDbGFzcykge1xyXG4gICAgICAgIHRoaXMucm93Q2xhc3MgPSBjb25maWcucm93Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dJZCkge1xyXG4gICAgICAgIHRoaXMucm93SWQgPSBjb25maWcucm93SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrID0gY29uZmlnLm9uUm93Q2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IGNvbmZpZy5sb2FkaW5nU3ViamVjdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFBhZ2VTaXplID0gY29uZmlnLmdyb3VwUGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcyA+PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyA9IGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcImdyb3VwQ2FjaGVOdW1QYWdlcyBtdXN0IGJlIDIgb3IgbW9yZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UgPSBjb25maWcub25Hcm91cENsb3NlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYnVzeUljb24pIHtcclxuICAgICAgICB0aGlzLmJ1c3lJY29uID0gY29uZmlnLmJ1c3lJY29uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnNob3dSZXN1bHRzQ291bnQpIHtcclxuICAgICAgICB0aGlzLnNob3dSZXN1bHRzQ291bnQgPSBjb25maWcuc2hvd1Jlc3VsdHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSB0aGlzLmRlZmF1bHRHcm91cENsaWNrO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm9uUm93Q2xpY2spIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrID0gdGhpcy5kZWZhdWx0Um93Q2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJTZWFyY2hMaXN0Q29tcG9uZW50OiBBbiBpdGVtVGVtcGxhdGUgbXVzdCBiZSBwcm92aWRlZCFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IFtuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKV07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIGFuIGFycmF5LCBjYWxscyB0aGUgZGF0YSBpZiBleHRlcm5hbCBjYWxsLlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YT86IE9iamVjdFtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldERhdGFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8odGhpcy5maWx0ZXJzLCB0aGlzLnNvcnRzLCB0aGlzLnBhZ2luZywgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBhcnJheSB0aGF0IHRoZSBpbnRlcmZhY2UgdXNlcyB0byByZW5kZXIgKHJlZ2FyZGxlc3Mgb2Ygc291cmNlKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRGF0YUR0b30gZXh0ZXJuYWxEYXRhXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YT86IEhjaURhdGFEdG8pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiZ2VuZXJhdGVEYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGV4dGVybmFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVybmFsRGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShleHRlcm5hbERhdGEuZ3JpZER0by5wYWdpbmcuZGF0YVNpemUpO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cDtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByb3dHcm91cCA9IG5ldyBSb3dHcm91cCh1bmRlZmluZWQsIHRoaXMuYm91bmREYXRhW2ldLCAoZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgJiYgZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgIT09IG51bGwpID8gZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHNbaV0gOiAwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGdyb3VwaW5nRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZ3JvdXBpbmdGaWVsZF0gPSB0aGlzLmJvdW5kRGF0YVtpXVtncm91cGluZ0ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgcG9wdWxhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy5wb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChPYmplY3QuYXNzaWduKHt0eXBlOiBcIm5vbmVcIn0sIHRoaXMubGFzdEV2ZW50LCB7XHJcbiAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXHJcbiAgICAgIG5WaWV3RGF0YTogdGhpcy52aWV3RGF0YS5sZW5ndGhcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiB0aGUgZGF0YSBpcyBhbiBhcnJheSAobm90IGV4dGVybmFsKS5cclxuICAgKi9cclxuICBwb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInBvcHVsYXRlRnJvbUJvdW5kRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJCb3VuZCBEYXRhIGxlbmd0aCBmb3VuZCBhcyAwXCIpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXROdW1QYWdlcygxKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9sZXQgcHJlcGFyZWREYXRhID0gW107XHJcbiAgICB0aGlzLnByZXBhcmVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICAgIGxldCByb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgbGV0IGRvUm93R3JvdXBpbmc6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG4gICAgZm9yIChsZXQgcm93IG9mIHRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEtleSA9IChncm91cEtleSkgPyBncm91cEtleSArIFwiOlwiICsgcm93W2ZpZWxkXSA6IHJvd1tmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlci52YWxpZCkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoICYmIHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggPiAwICYmICF0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICAgICAgLy8gIEFkdmFuY2VkIHNlYXJjaCBkb2VzIG5vdCBhdXRvIGZpbHRlciBieSBkZWZhdWx0XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlcyA9IGZpbHRlci5nZXRWYWx1ZSgpLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlckZpZWxkcyA9IGZpbHRlci5nZXRGaWVsZCgpLnNwbGl0KFwiIG9yIFwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpbm5lckluY2x1ZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZmlsdGVyRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdID09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiByb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5ldyBEYXRlKHJvd1tmaWVsZF0pKS5nZXRUaW1lKCkgPT0gKG5ldyBEYXRlKHZhbHVlKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIG11bHRpcGxlIHNlYXJjaCBzdHJpbmdzXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5wcmVwYXJlZERhdGFbcm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KV0ucmdSb3dzLnB1c2gocm93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93R3JvdXBNYXAuc2V0KGdyb3VwS2V5LCB0aGlzLnByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXAgPSBuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtmaWVsZF0gPSByb3dbZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByZXBhcmVkRGF0YS5wdXNoKG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vdGhpcy5nbG9iYWxSb3dHcm91cE1hcCA9IHJvd0dyb3VwTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcmVwYXJlZERhdGEuc29ydCgoYTogUm93R3JvdXAsIGI6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93R3JvdXAgb2YgdGhpcy5wcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHRoaXMucHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IHRoaXMucHJlcGFyZWREYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpID4gMCkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpOyBpIDwgTWF0aC5taW4odGhpcy5wcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHRoaXMucHJlcGFyZWREYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUodGhpcy5wcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IHRoaXMucHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkc1xyXG4gICAqIG9yIGRlbGltaXRlciBkZWxpbWl0ZWQgd29yZHMgaWYgdGhlIGRlbGltaW5hdG9yIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICBkaXNwbGF5ID0gdGhpcy5ncm91cERpc3BsYXk7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkucmVwbGFjZShmaWVsZCwgcm93R3JvdXBbZmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBbZmllbGRdICE9PSBudWxsICYmIHJvd0dyb3VwW2ZpZWxkXSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyB0aGlzLmRlbGltaXRlciArIHJvd0dyb3VwW2ZpZWxkXSA6IHJvd0dyb3VwW2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSWRJbkZpbHRlcmVkUmVzdWx0cyhpZDpzdHJpbmcpe1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICByZXR1cm4gZT90cnVlOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19