@hestia-earth/ui-components 0.0.20 → 0.0.23

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.
Files changed (40) hide show
  1. package/bundles/hestia-earth-ui-components.umd.js +232 -463
  2. package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
  3. package/cycles/cycles-activity/cycles-activity.component.d.ts +4 -2
  4. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +3 -1
  5. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +3 -11
  6. package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +2 -1
  7. package/cycles/cycles-practices/cycles-practices.component.d.ts +3 -11
  8. package/cycles/cycles-result/cycles-result.component.d.ts +3 -1
  9. package/cycles/cycles.module.d.ts +5 -6
  10. package/cycles/index.d.ts +0 -1
  11. package/engine/engine.service.d.ts +10 -1
  12. package/esm2015/cycles/cycles-activity/cycles-activity.component.js +17 -23
  13. package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +9 -3
  14. package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +17 -56
  15. package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +18 -8
  16. package/esm2015/cycles/cycles-practices/cycles-practices.component.js +16 -55
  17. package/esm2015/cycles/cycles-result/cycles-result.component.js +19 -6
  18. package/esm2015/cycles/cycles.module.js +4 -8
  19. package/esm2015/cycles/index.js +1 -2
  20. package/esm2015/engine/engine.service.js +16 -2
  21. package/esm2015/files/files-error.model.js +8 -5
  22. package/esm2015/files/files-form/files-form.component.js +1 -1
  23. package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +24 -54
  24. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +30 -131
  25. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +6 -2
  26. package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +11 -7
  27. package/esm2015/node/node-logs-models/node-logs-models.component.js +11 -3
  28. package/esm2015/sites/sites-maps/sites-maps.component.js +10 -3
  29. package/esm2015/sites/sites-measurements/sites-measurements.component.js +8 -2
  30. package/fesm2015/hestia-earth-ui-components.js +160 -357
  31. package/fesm2015/hestia-earth-ui-components.js.map +1 -1
  32. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +5 -8
  33. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +5 -30
  34. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +3 -2
  35. package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +9 -3
  36. package/package.json +4 -4
  37. package/sites/sites-maps/sites-maps.component.d.ts +3 -1
  38. package/sites/sites-measurements/sites-measurements.component.d.ts +3 -1
  39. package/cycles/cycles-suggest-form/cycles-suggest-form.component.d.ts +0 -23
  40. package/esm2015/cycles/cycles-suggest-form/cycles-suggest-form.component.js +0 -83
@@ -26,26 +26,30 @@ export class NodeCsvSelectHeadersComponent {
26
26
  this.csv = '';
27
27
  this.includeDefaultCSV = false;
28
28
  this.headersChanged = new EventEmitter();
29
+ this.loading = true;
29
30
  this.headers = {};
30
31
  this.allSelected = false;
31
32
  this.showSelectTermFields = false;
32
33
  this.termFields = termFields;
33
34
  this.termFieldSelected = {};
35
+ this.showNonIncluded = false;
34
36
  }
35
37
  ngOnInit() {
36
38
  return __awaiter(this, void 0, void 0, function* () {
37
39
  const schemas = yield this.schemaService.schemas();
38
40
  const isSelected = yield this.isSelected(schemas);
41
+ const isIncluded = isCSVIncluded(schemas);
39
42
  const headers = yield this.schemaService.parseHeaders(this.csv);
40
- this.headers = headers.filter(isCSVIncluded(schemas)).reduce((prev, header) => {
43
+ this.headers = headers.reduce((prev, header) => {
41
44
  const group = headerGroup(header);
42
45
  prev[group] = prev[group] || { headers: [], selected: false, partialSelected: false, open: true };
43
- prev[group].headers.push({ header, selected: isSelected(header) });
46
+ prev[group].headers.push({ header, selected: isSelected(header), included: isIncluded(header) });
44
47
  return prev;
45
48
  }, {});
46
49
  Object.keys(this.headers).map(groupKey => this.updateGroupHeader(groupKey));
47
50
  this.termFieldSelected = termFields.reduce((prev, curr) => (Object.assign(Object.assign({}, prev), { [curr]: curr === '@id' })), {});
48
- this.reresh();
51
+ this.refresh();
52
+ this.loading = false;
49
53
  });
50
54
  }
51
55
  isSelected(schemas) {
@@ -83,10 +87,10 @@ export class NodeCsvSelectHeadersComponent {
83
87
  get selectedHeaders() {
84
88
  return Object.values(this.headers)
85
89
  .flatMap(({ headers }) => headers)
86
- .filter(({ selected }) => selected)
90
+ .filter(({ selected, included }) => selected && (included || this.showNonIncluded))
87
91
  .map(({ header }) => header);
88
92
  }
89
- reresh() {
93
+ refresh() {
90
94
  this.updateAllSelected();
91
95
  this.headersChanged.emit(this.selectedHeaders);
92
96
  }
@@ -100,7 +104,7 @@ export class NodeCsvSelectHeadersComponent {
100
104
  }
101
105
  }
102
106
  NodeCsvSelectHeadersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvSelectHeadersComponent, deps: [{ token: i1.HeSchemaService }], target: i0.ɵɵFactoryTarget.Component });
103
- NodeCsvSelectHeadersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: { csv: "csv", keys: "keys", includeDefaultCSV: "includeDefaultCSV" }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\"><i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i></p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"allSelected\"\n (change)=\"toggleAll(); reresh()\"\n >\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow has-text-right\">\n <div class=\"dropdown is-right has-text-left\"\n [class.is-active]=\"showSelectTermFields\"\n (clickOutside)=\"showSelectTermFields = false\"\n >\n <div class=\"dropdown-trigger\" (click)=\"showSelectTermFields = !showSelectTermFields\">\n <button class=\"button is-small\"\n aria-haspopup=\"true\" aria-controls=\"select-menu\"\n >\n <span>Toggle Term Fields</span>\n <span class=\"icon is-small\">\n <fa-icon icon=\"filter\" aria-hidden=\"true\"></fa-icon>\n </span>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"select-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a class=\"dropdown-item\"\n *ngFor=\"let field of termFields\"\n >\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"termFieldSelected[field]\"\n (change)=\"toggleTermField(field)\"\n >\n <span class=\"ml-2\">{{field}}</span>\n </label>\n </a>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"drag-container\">\n <div class=\"card\" *ngFor=\"let group of headers | keys\">\n <header class=\"card-header\" *ngIf=\"group.key\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [indeterminate]=\"group.value.partialSelected\"\n [(ngModel)]=\"group.value.selected\"\n (change)=\"updateGroup(group.key); reresh()\"\n >\n <span class=\"ml-2\">{{group.key}}</span>\n </label>\n </div>\n <span class=\"card-header-icon has-text-link\" aria-label=\"open / close\"\n (click)=\"group.value.open = !group.value.open\" pointer\n >\n <span class=\"icon\">\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!group.value.open\"></fa-icon>\n <fa-icon icon=\"angle-left\" [class.is-hidden]=\"group.value.open\"></fa-icon>\n </span>\n </span>\n </header>\n\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.value.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group.key)\">\n <li *ngFor=\"let header of group.value.headers\" cdkDrag>\n <label class=\"checkbox ml-2\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"header.selected\"\n (change)=\"updateGroupHeader(group.key); reresh()\"\n >\n <span class=\"ml-2\">{{header.header}}</span>\n </label>\n </li>\n </ul>\n </div>\n </div>\n</div>\n", styles: [".toggle-all{border-bottom:1px solid #7a7a7a}.drag-container,.table-container{max-height:45vh;overflow-y:auto}.cdk-drag-preview{border-radius:2px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], pipes: { "keys": i7.KeysPipe } });
107
+ NodeCsvSelectHeadersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: { csv: "csv", keys: "keys", includeDefaultCSV: "includeDefaultCSV" }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\"><i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i></p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"allSelected\"\n (change)=\"toggleAll(); refresh()\"\n >\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow has-text-right\">\n <div class=\"dropdown is-right has-text-left\"\n [class.is-active]=\"showSelectTermFields\"\n (clickOutside)=\"showSelectTermFields = false\"\n >\n <div class=\"dropdown-trigger\" (click)=\"showSelectTermFields = !showSelectTermFields\">\n <button class=\"button is-small\"\n aria-haspopup=\"true\" aria-controls=\"select-menu\"\n >\n <span>Advanced Filters</span>\n <span class=\"icon is-small\">\n <fa-icon icon=\"filter\" aria-hidden=\"true\"></fa-icon>\n </span>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"select-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a class=\"dropdown-item\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"showNonIncluded\"\n (change)=\"refresh()\"\n >\n <span class=\"ml-2\">Include <code>internal</code> fields</span>\n </label>\n </a>\n <div class=\"dropdown-item\">\n <p>Toggle Term Fields</p>\n </div>\n <a class=\"dropdown-item\"\n *ngFor=\"let field of termFields\"\n >\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"termFieldSelected[field]\"\n (change)=\"toggleTermField(field)\"\n >\n <span class=\"ml-2\">{{field}}</span>\n </label>\n </a>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"drag-container\" *ngIf=\"!loading; else loader\">\n <div class=\"card\" *ngFor=\"let group of headers | keys\">\n <header class=\"card-header\" *ngIf=\"group.key\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [indeterminate]=\"group.value.partialSelected\"\n [(ngModel)]=\"group.value.selected\"\n (change)=\"updateGroup(group.key); refresh()\"\n >\n <span class=\"ml-2\">{{group.key}}</span>\n </label>\n </div>\n <span class=\"card-header-icon has-text-link\" aria-label=\"open / close\"\n (click)=\"group.value.open = !group.value.open\" pointer\n >\n <span class=\"icon\">\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!group.value.open\"></fa-icon>\n <fa-icon icon=\"angle-left\" [class.is-hidden]=\"group.value.open\"></fa-icon>\n </span>\n </span>\n </header>\n\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.value.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group.key)\">\n <ng-container *ngFor=\"let header of group.value.headers\">\n <ng-container *ngIf=\"header.included || showNonIncluded\">\n <li cdkDrag>\n <label class=\"checkbox ml-2\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"header.selected\"\n (change)=\"updateGroupHeader(group.key); refresh()\"\n >\n <span class=\"ml-2\">{{header.header}}</span>\n </label>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n </div>\n</div>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n", styles: [".toggle-all{border-bottom:1px solid #7a7a7a}.drag-container,.table-container{max-height:45vh;overflow-y:auto}.cdk-drag-preview{border-radius:2px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], pipes: { "keys": i7.KeysPipe } });
104
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvSelectHeadersComponent, decorators: [{
105
109
  type: Component,
106
110
  args: [{
@@ -117,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
117
121
  }], headersChanged: [{
118
122
  type: Output
119
123
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7O0FBa0I3RixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7SUFDakIsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVTtDQUNuQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQVcsRUFBRSxFQUFFLENBQUM7SUFDOUQsTUFBTSxFQUFFLGFBQWEs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QUFDLEtBQWE7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MkhBN0ZVLDZCQUE2QjsrR0FBN0IsNkJBQTZCLCtMQ3ZDMUMscXdHQXVGQTs0RkRoRGEsNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFdBQVcsRUFBRSwwQ0FBMEM7b0JBQ3ZELFNBQVMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO2lCQUN4RDtzR0FHUyxHQUFHO3NCQURWLEtBQUs7Z0JBR0UsSUFBSTtzQkFEWCxLQUFLO2dCQUdFLGlCQUFpQjtzQkFEeEIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbnMgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGlzRGVmYXVsdENTVlNlbGVjdGVkLCBpc0NTVkluY2x1ZGVkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9qc29uLXNjaGVtYS9zY2hlbWEtdXRpbHMnO1xuXG5pbXBvcnQgeyBIZVNjaGVtYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlbWEvc2NoZW1hLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSUhlYWRlciB7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIElHcm91cGVkSGVhZGVycyB7XG4gIFtncm91cDogc3RyaW5nXToge1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIHBhcnRpYWxTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBvcGVuOiBib29sZWFuO1xuICAgIGhlYWRlcnM6IElIZWFkZXJbXTtcbiAgfTtcbn1cblxuY29uc3QgaGVhZGVyR3JvdXAgPSAoaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGFydHMgPSBoZWFkZXIuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMiA/ICcnIDogW3BhcnRzWzBdLCBwYXJ0c1sxXV0uam9pbignLicpO1xufTtcblxuY29uc3QgdGVybUZpZWxkcyA9IFtcbiAgJ0BpZCcsICduYW1lJywgJ3VuaXRzJywgJ3Rlcm1UeXBlJ1xuXTtcblxuY29uc3QgaXNUZXJtRmllbGQgPSAoZmllbGQ6IHN0cmluZykgPT4gKHsgaGVhZGVyIH06IElIZWFkZXIpID0+IFtcbiAgJ3Rlcm0nLCAnbWV0aG9kTW9kZWwnLCAnY291bnRyeScsICdwcm9kdWN0JywgJ29wZXJhdGlvbicsICdrZXknXG5dLnNvbWUocGFyZW50ID0+IGhlYWRlci5lbmRzV2l0aChbcGFyZW50LCBmaWVsZF0uam9pbignLicpKSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtY3N2LXNlbGVjdC1oZWFkZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgY3N2ID0gJyc7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUga2V5cz86IHN0cmluZ1tdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGluY2x1ZGVEZWZhdWx0Q1NWID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBoZWFkZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgcHVibGljIGhlYWRlcnM6IElHcm91cGVkSGVhZGVycyA9IHt9O1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgc2hvd1NlbGVjdFRlcm1GaWVsZHMgPSBmYWxzZTtcbiAgcHVibGljIHRlcm1GaWVsZHMgPSB0ZXJtRmllbGRzO1xuICBwdWJsaWMgdGVybUZpZWxkU2VsZWN0ZWQ6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2NoZW1hU2VydmljZTogSGVTY2hlbWFTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gYXdhaXQgdGhpcy5zY2hlbWFTZXJ2aWNlLnNjaGVtYXMoKTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYXdhaXQgdGhpcy5pc1NlbGVjdGVkKHNjaGVtYXMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLnNjaGVtYVNlcnZpY2UucGFyc2VIZWFkZXJzKHRoaXMuY3N2KTtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzLmZpbHRlcihpc0NTVkluY2x1ZGVkKHNjaGVtYXMpKS5yZWR1Y2UoKHByZXYsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBoZWFkZXJHcm91cChoZWFkZXIpO1xuICAgICAgcHJldltncm91cF0gPSBwcmV2W2dyb3VwXSB8fCB7IGhlYWRlcnM6IFtdLCBzZWxlY3RlZDogZmFsc2UsIHBhcnRpYWxTZWxlY3RlZDogZmFsc2UsIG9wZW46IHRydWUgfTtcbiAgICAgIHByZXZbZ3JvdXBdLmhlYWRlcnMucHVzaCh7IGhlYWRlciwgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQoaGVhZGVyKSB9KTtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9IGFzIElHcm91cGVkSGVhZGVycyk7XG4gICAgT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5tYXAoZ3JvdXBLZXkgPT4gdGhpcy51cGRhdGVHcm91cEhlYWRlcihncm91cEtleSkpO1xuICAgIHRoaXMudGVybUZpZWxkU2VsZWN0ZWQgPSB0ZXJtRmllbGRzLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnJdOiBjdXJyID09PSAnQGlkJyB9KSwge30pO1xuICAgIHRoaXMucmVyZXNoKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGlzU2VsZWN0ZWQoc2NoZW1hczogZGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pbmNsdWRlRGVmYXVsdENTViA/ICgpID0+IHRydWUgOiBpc0RlZmF1bHRDU1ZTZWxlY3RlZChzY2hlbWFzKTtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiAoIXRoaXMua2V5cz8ubGVuZ3RoIHx8IHRoaXMua2V5cy5zb21lKHYgPT4ga2V5LnN0YXJ0c1dpdGgodikpKSAmJiBpc1NlbGVjdGVkKGtleSk7XG4gIH1cblxuICBwdWJsaWMgZHJvcEhlYWRlcihldmVudDogQ2RrRHJhZ0Ryb3A8SUhlYWRlcltdPiwgZ3JvdXBLZXk6IHN0cmluZykge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmhlYWRlcnNbZ3JvdXBLZXldLmhlYWRlcnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5oZWFkZXJzQ2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRIZWFkZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWxsU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IE9iamVjdC5rZXlzKHRoaXMuaGVhZGVycykuZXZlcnkoa2V5ID0+IHRoaXMuaGVhZGVyc1trZXldLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVBbGwoKSB7XG4gICAgLy8gc2VsZWN0IGFsbCB0ZXJtIGZpZWxkc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudGVybUZpZWxkU2VsZWN0ZWQpLm1hcChrZXkgPT4gKHRoaXMudGVybUZpZWxkU2VsZWN0ZWRba2V5XSA9IHRydWUpKTtcbiAgICAvLyBzZWxlY3QgYWxsIGtleXNcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oZWFkZXJzKS5tYXAoKFtrZXksIGdyb3VwXSkgPT4ge1xuICAgICAgZ3JvdXAuc2VsZWN0ZWQgPSB0aGlzLmFsbFNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR3JvdXAoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHcm91cChncm91cEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmhlYWRlcnNbZ3JvdXBLZXldO1xuICAgIGdyb3VwLmhlYWRlcnMubWFwKGhlYWRlciA9PiBoZWFkZXIuc2VsZWN0ZWQgPSBncm91cC5zZWxlY3RlZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlR3JvdXBIZWFkZXIoZ3JvdXBLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5oZWFkZXJzW2dyb3VwS2V5XTtcbiAgICBjb25zdCBhbGxTZWxlY3RlZCA9IGdyb3VwLmhlYWRlcnMuZXZlcnkoKHsgc2VsZWN0ZWQgfSkgPT4gc2VsZWN0ZWQpO1xuICAgIGdyb3VwLnNlbGVjdGVkID0gYWxsU2VsZWN0ZWQ7XG4gICAgZ3JvdXAucGFydGlhbFNlbGVjdGVkID0gIWFsbFNlbGVjdGVkICYmIGdyb3VwLmhlYWRlcnMuc29tZSgoeyBzZWxlY3RlZCB9KSA9PiBzZWxlY3RlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSGVhZGVycygpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmhlYWRlcnMpXG4gICAgICAuZmxhdE1hcCgoeyBoZWFkZXJzIH0pID0+IGhlYWRlcnMpXG4gICAgICAuZmlsdGVyKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKVxuICAgICAgLm1hcCgoeyBoZWFkZXIgfSkgPT4gaGVhZGVyKTtcbiAgfVxuXG4gIHB1YmxpYyByZXJlc2goKSB7XG4gICAgdGhpcy51cGRhdGVBbGxTZWxlY3RlZCgpO1xuICAgIHRoaXMuaGVhZGVyc0NoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkSGVhZGVycyk7XG4gIH1cblxuICAvLyBUZXJtIGZpZWxkc1xuXG4gIHB1YmxpYyB0b2dnbGVUZXJtRmllbGQoZmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy50ZXJtRmllbGRTZWxlY3RlZFtmaWVsZF07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaGVhZGVycykubWFwKChba2V5LCBncm91cF0pID0+IHtcbiAgICAgIGdyb3VwLmhlYWRlcnMuZmlsdGVyKGlzVGVybUZpZWxkKGZpZWxkKSkubWFwKGhlYWRlciA9PiBoZWFkZXIuc2VsZWN0ZWQgPSBzZWxlY3RlZCk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVHcm91cEhlYWRlcihrZXkpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cCBjbGFzcz1cIm1iLTJcIj5QbGVhc2Ugc2VsZWN0IHdoaWNoIGNvbHVtbnMgeW91IHdvdWxkIGxpa2UgdG8gaW5jbHVkZTo8L3A+XG5cbjxwIGNsYXNzPVwibXktMiBpcy1zaXplLTdcIj48aT5Zb3UgY2FuIGRyYWcgYW5kIGRyb3AgdGhlIGhlYWRlcnMgdG8gc29ydCB0aGVtIGFzIHRoZXkgd291bGQgYXBwZWFyIGluIHRoZSBDU1YgZmlsZS48L2k+PC9wPlxuXG48ZGl2IGNsYXNzPVwiY29sdW1ucyB0b2dnbGUtYWxsIG14LTQgcGItMSBtYi0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0xXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbCgpOyByZXJlc2goKVwiXG4gICAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5Ub2dnbGUgQWxsPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93IGhhcy10ZXh0LXJpZ2h0XCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGlzLXJpZ2h0IGhhcy10ZXh0LWxlZnRcIlxuICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJzaG93U2VsZWN0VGVybUZpZWxkc1wiXG4gICAgICAoY2xpY2tPdXRzaWRlKT1cInNob3dTZWxlY3RUZXJtRmllbGRzID0gZmFsc2VcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi10cmlnZ2VyXCIgKGNsaWNrKT1cInNob3dTZWxlY3RUZXJtRmllbGRzID0gIXNob3dTZWxlY3RUZXJtRmllbGRzXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1jb250cm9scz1cInNlbGVjdC1tZW51XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPlRvZ2dsZSBUZXJtIEZpZWxkczwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJmaWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBpZD1cInNlbGVjdC1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnRcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRlcm1GaWVsZHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVybUZpZWxkU2VsZWN0ZWRbZmllbGRdXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRlcm1GaWVsZChmaWVsZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7ZmllbGR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZHJhZy1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmRcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgaGVhZGVycyB8IGtleXNcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwiY2FyZC1oZWFkZXJcIiAqbmdJZj1cImdyb3VwLmtleVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTFcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJncm91cC52YWx1ZS5wYXJ0aWFsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJncm91cC52YWx1ZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUdyb3VwKGdyb3VwLmtleSk7IHJlcmVzaCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3tncm91cC5rZXl9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWhlYWRlci1pY29uIGhhcy10ZXh0LWxpbmtcIiBhcmlhLWxhYmVsPVwib3BlbiAvIGNsb3NlXCJcbiAgICAgICAgKGNsaWNrKT1cImdyb3VwLnZhbHVlLm9wZW4gPSAhZ3JvdXAudmFsdWUub3BlblwiIHBvaW50ZXJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+XG4gICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFncm91cC52YWx1ZS5vcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1sZWZ0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJncm91cC52YWx1ZS5vcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50IHAtM1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWdyb3VwLnZhbHVlLm9wZW5cIj5cbiAgICAgIDx1bCBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BIZWFkZXIoJGV2ZW50LCBncm91cC5rZXkpXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGdyb3VwLnZhbHVlLmhlYWRlcnNcIiBjZGtEcmFnPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTJcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJoZWFkZXIuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUdyb3VwSGVhZGVyKGdyb3VwLmtleSk7IHJlcmVzaCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7aGVhZGVyLmhlYWRlcn19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7O0FBc0I3RixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7SUFDakIsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVTtDQUNuQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQVcsRUFBRSxFQUFFLENBQUM7SUFDOUQsTUFBTSxFQUFFLGFBQWEs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RSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYztJQUVQLGVBQWUsQ0FBQyxLQUFhO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNuRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzJIQWpHVSw2QkFBNkI7K0dBQTdCLDZCQUE2QiwrTEMzQzFDLGdsSUE2R0E7NEZEbEVhLDZCQUE2QjtrQkFMekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUsMENBQTBDO29CQUN2RCxTQUFTLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztpQkFDeEQ7c0dBR1MsR0FBRztzQkFEVixLQUFLO2dCQUdFLElBQUk7c0JBRFgsS0FBSztnQkFHRSxpQkFBaUI7c0JBRHhCLEtBQUs7Z0JBSUUsY0FBYztzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IGRlZmluaXRpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBpc0RlZmF1bHRDU1ZTZWxlY3RlZCwgaXNDU1ZJbmNsdWRlZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEvc2NoZW1hLXV0aWxzJztcblxuaW1wb3J0IHsgSGVTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZW1hL3NjaGVtYS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIElIZWFkZXIge1xuICBoZWFkZXI6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBgZmFsc2VgIGlmIGl0IGlzIGFuIGBpbnRlcm5hbGAgZmllbGQuXG4gICAqL1xuICBpbmNsdWRlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIElHcm91cGVkSGVhZGVycyB7XG4gIFtncm91cDogc3RyaW5nXToge1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIHBhcnRpYWxTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBvcGVuOiBib29sZWFuO1xuICAgIGhlYWRlcnM6IElIZWFkZXJbXTtcbiAgfTtcbn1cblxuY29uc3QgaGVhZGVyR3JvdXAgPSAoaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGFydHMgPSBoZWFkZXIuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMiA/ICcnIDogW3BhcnRzWzBdLCBwYXJ0c1sxXV0uam9pbignLicpO1xufTtcblxuY29uc3QgdGVybUZpZWxkcyA9IFtcbiAgJ0BpZCcsICduYW1lJywgJ3VuaXRzJywgJ3Rlcm1UeXBlJ1xuXTtcblxuY29uc3QgaXNUZXJtRmllbGQgPSAoZmllbGQ6IHN0cmluZykgPT4gKHsgaGVhZGVyIH06IElIZWFkZXIpID0+IFtcbiAgJ3Rlcm0nLCAnbWV0aG9kTW9kZWwnLCAnY291bnRyeScsICdwcm9kdWN0JywgJ29wZXJhdGlvbicsICdrZXknXG5dLnNvbWUocGFyZW50ID0+IGhlYWRlci5lbmRzV2l0aChbcGFyZW50LCBmaWVsZF0uam9pbignLicpKSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtY3N2LXNlbGVjdC1oZWFkZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtY3N2LXNlbGVjdC1oZWFkZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2U2VsZWN0SGVhZGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgY3N2ID0gJyc7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUga2V5cz86IHN0cmluZ1tdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGluY2x1ZGVEZWZhdWx0Q1NWID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgaGVhZGVyc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIGhlYWRlcnM6IElHcm91cGVkSGVhZGVycyA9IHt9O1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgc2hvd1NlbGVjdFRlcm1GaWVsZHMgPSBmYWxzZTtcbiAgcHVibGljIHRlcm1GaWVsZHMgPSB0ZXJtRmllbGRzO1xuICBwdWJsaWMgdGVybUZpZWxkU2VsZWN0ZWQ6IGFueSA9IHt9O1xuICBwdWJsaWMgc2hvd05vbkluY2x1ZGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY2hlbWFTZXJ2aWNlOiBIZVNjaGVtYVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLnNjaGVtYVNlcnZpY2Uuc2NoZW1hcygpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBhd2FpdCB0aGlzLmlzU2VsZWN0ZWQoc2NoZW1hcyk7XG4gICAgY29uc3QgaXNJbmNsdWRlZCA9IGlzQ1NWSW5jbHVkZWQoc2NoZW1hcyk7XG4gICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IHRoaXMuc2NoZW1hU2VydmljZS5wYXJzZUhlYWRlcnModGhpcy5jc3YpO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnMucmVkdWNlKChwcmV2LCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gaGVhZGVyR3JvdXAoaGVhZGVyKTtcbiAgICAgIHByZXZbZ3JvdXBdID0gcHJldltncm91cF0gfHwgeyBoZWFkZXJzOiBbXSwgc2VsZWN0ZWQ6IGZhbHNlLCBwYXJ0aWFsU2VsZWN0ZWQ6IGZhbHNlLCBvcGVuOiB0cnVlIH07XG4gICAgICBwcmV2W2dyb3VwXS5oZWFkZXJzLnB1c2goeyBoZWFkZXIsIHNlbGVjdGVkOiBpc1NlbGVjdGVkKGhlYWRlciksIGluY2x1ZGVkOiBpc0luY2x1ZGVkKGhlYWRlcikgfSk7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSBhcyBJR3JvdXBlZEhlYWRlcnMpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVycykubWFwKGdyb3VwS2V5ID0+IHRoaXMudXBkYXRlR3JvdXBIZWFkZXIoZ3JvdXBLZXkpKTtcbiAgICB0aGlzLnRlcm1GaWVsZFNlbGVjdGVkID0gdGVybUZpZWxkcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyXTogY3VyciA9PT0gJ0BpZCcgfSksIHt9KTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaXNTZWxlY3RlZChzY2hlbWFzOiBkZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmluY2x1ZGVEZWZhdWx0Q1NWID8gKCkgPT4gdHJ1ZSA6IGlzRGVmYXVsdENTVlNlbGVjdGVkKHNjaGVtYXMpO1xuICAgIHJldHVybiAoa2V5OiBzdHJpbmcpID0+ICghdGhpcy5rZXlzPy5sZW5ndGggfHwgdGhpcy5rZXlzLnNvbWUodiA9PiBrZXkuc3RhcnRzV2l0aCh2KSkpICYmIGlzU2VsZWN0ZWQoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBkcm9wSGVhZGVyKGV2ZW50OiBDZGtEcmFnRHJvcDxJSGVhZGVyW10+LCBncm91cEtleTogc3RyaW5nKSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuaGVhZGVyc1tncm91cEtleV0uaGVhZGVycywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmhlYWRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZEhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBbGxTZWxlY3RlZCgpIHtcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5ldmVyeShrZXkgPT4gdGhpcy5oZWFkZXJzW2tleV0uc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbCgpIHtcbiAgICAvLyBzZWxlY3QgYWxsIHRlcm0gZmllbGRzXG4gICAgT2JqZWN0LmtleXModGhpcy50ZXJtRmllbGRTZWxlY3RlZCkubWFwKGtleSA9PiAodGhpcy50ZXJtRmllbGRTZWxlY3RlZFtrZXldID0gdHJ1ZSkpO1xuICAgIC8vIHNlbGVjdCBhbGwga2V5c1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmhlYWRlcnMpLm1hcCgoW2tleSwgZ3JvdXBdKSA9PiB7XG4gICAgICBncm91cC5zZWxlY3RlZCA9IHRoaXMuYWxsU2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVHcm91cChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUdyb3VwKGdyb3VwS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuaGVhZGVyc1tncm91cEtleV07XG4gICAgZ3JvdXAuaGVhZGVycy5tYXAoaGVhZGVyID0+IGhlYWRlci5zZWxlY3RlZCA9IGdyb3VwLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHcm91cEhlYWRlcihncm91cEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmhlYWRlcnNbZ3JvdXBLZXldO1xuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gZ3JvdXAuaGVhZGVycy5ldmVyeSgoeyBzZWxlY3RlZCB9KSA9PiBzZWxlY3RlZCk7XG4gICAgZ3JvdXAuc2VsZWN0ZWQgPSBhbGxTZWxlY3RlZDtcbiAgICBncm91cC5wYXJ0aWFsU2VsZWN0ZWQgPSAhYWxsU2VsZWN0ZWQgJiYgZ3JvdXAuaGVhZGVycy5zb21lKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRIZWFkZXJzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuaGVhZGVycylcbiAgICAgIC5mbGF0TWFwKCh7IGhlYWRlcnMgfSkgPT4gaGVhZGVycylcbiAgICAgIC5maWx0ZXIoKHsgc2VsZWN0ZWQsIGluY2x1ZGVkIH0pID0+IHNlbGVjdGVkICYmIChpbmNsdWRlZCB8fCB0aGlzLnNob3dOb25JbmNsdWRlZCkpXG4gICAgICAubWFwKCh7IGhlYWRlciB9KSA9PiBoZWFkZXIpO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2goKSB7XG4gICAgdGhpcy51cGRhdGVBbGxTZWxlY3RlZCgpO1xuICAgIHRoaXMuaGVhZGVyc0NoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkSGVhZGVycyk7XG4gIH1cblxuICAvLyBUZXJtIGZpZWxkc1xuXG4gIHB1YmxpYyB0b2dnbGVUZXJtRmllbGQoZmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy50ZXJtRmllbGRTZWxlY3RlZFtmaWVsZF07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaGVhZGVycykubWFwKChba2V5LCBncm91cF0pID0+IHtcbiAgICAgIGdyb3VwLmhlYWRlcnMuZmlsdGVyKGlzVGVybUZpZWxkKGZpZWxkKSkubWFwKGhlYWRlciA9PiBoZWFkZXIuc2VsZWN0ZWQgPSBzZWxlY3RlZCk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVHcm91cEhlYWRlcihrZXkpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cCBjbGFzcz1cIm1iLTJcIj5QbGVhc2Ugc2VsZWN0IHdoaWNoIGNvbHVtbnMgeW91IHdvdWxkIGxpa2UgdG8gaW5jbHVkZTo8L3A+XG5cbjxwIGNsYXNzPVwibXktMiBpcy1zaXplLTdcIj48aT5Zb3UgY2FuIGRyYWcgYW5kIGRyb3AgdGhlIGhlYWRlcnMgdG8gc29ydCB0aGVtIGFzIHRoZXkgd291bGQgYXBwZWFyIGluIHRoZSBDU1YgZmlsZS48L2k+PC9wPlxuXG48ZGl2IGNsYXNzPVwiY29sdW1ucyB0b2dnbGUtYWxsIG14LTQgcGItMSBtYi0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0xXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbCgpOyByZWZyZXNoKClcIlxuICAgICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+VG9nZ2xlIEFsbDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBoYXMtdGV4dC1yaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBpcy1yaWdodCBoYXMtdGV4dC1sZWZ0XCJcbiAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwic2hvd1NlbGVjdFRlcm1GaWVsZHNcIlxuICAgICAgKGNsaWNrT3V0c2lkZSk9XCJzaG93U2VsZWN0VGVybUZpZWxkcyA9IGZhbHNlXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdHJpZ2dlclwiIChjbGljayk9XCJzaG93U2VsZWN0VGVybUZpZWxkcyA9ICFzaG93U2VsZWN0VGVybUZpZWxkc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtY29udHJvbHM9XCJzZWxlY3QtbWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5BZHZhbmNlZCBGaWx0ZXJzPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImZpbHRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGlkPVwic2VsZWN0LW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGVudFwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93Tm9uSW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwicmVmcmVzaCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5JbmNsdWRlIDxjb2RlPmludGVybmFsPC9jb2RlPiBmaWVsZHM8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgPHA+VG9nZ2xlIFRlcm0gRmllbGRzPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdGVybUZpZWxkc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtRmllbGRTZWxlY3RlZFtmaWVsZF1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlVGVybUZpZWxkKGZpZWxkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3tmaWVsZH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkcmFnLWNvbnRhaW5lclwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGhlYWRlcnMgfCBrZXlzXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCIgKm5nSWY9XCJncm91cC5rZXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci10aXRsZVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0xXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ3JvdXAudmFsdWUucGFydGlhbFNlbGVjdGVkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAudmFsdWUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVHcm91cChncm91cC5rZXkpOyByZWZyZXNoKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57e2dyb3VwLmtleX19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNhcmQtaGVhZGVyLWljb24gaGFzLXRleHQtbGlua1wiIGFyaWEtbGFiZWw9XCJvcGVuIC8gY2xvc2VcIlxuICAgICAgICAoY2xpY2spPVwiZ3JvdXAudmFsdWUub3BlbiA9ICFncm91cC52YWx1ZS5vcGVuXCIgcG9pbnRlclxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj5cbiAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiYW5nbGUtZG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWdyb3VwLnZhbHVlLm9wZW5cIj48L2ZhLWljb24+XG4gICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWxlZnRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImdyb3VwLnZhbHVlLm9wZW5cIj48L2ZhLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgcC0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZ3JvdXAudmFsdWUub3BlblwiPlxuICAgICAgPHVsIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcEhlYWRlcigkZXZlbnQsIGdyb3VwLmtleSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGdyb3VwLnZhbHVlLmhlYWRlcnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmluY2x1ZGVkIHx8IHNob3dOb25JbmNsdWRlZFwiPlxuICAgICAgICAgICAgPGxpIGNka0RyYWc+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94IG1sLTJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlci5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUdyb3VwSGVhZGVyKGdyb3VwLmtleSk7IHJlZnJlc2goKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7aGVhZGVyLmhlYWRlcn19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -25,7 +25,13 @@ import * as i13 from "../../common/keys.pipe";
25
25
  import * as i14 from "../../common/pluralize.pipe";
26
26
  const get = require('lodash.get');
27
27
  const orderBy = require('lodash.orderby');
28
- const reduceValues = (values, termId) => values.length ? values.reduce((p, v) => p + propertyValue(v.value, termId), 0) : undefined;
28
+ const reduceValues = (values, termId) => {
29
+ const propertyValues = values
30
+ .map(({ value }) => propertyValue(value, termId))
31
+ // propertyValue may return null if the value is null or undefined, therefore remove them from total
32
+ .filter(v => v !== null);
33
+ return propertyValues.length ? propertyValues.reduce((p, v) => p + v, 0) : undefined;
34
+ };
29
35
  const logSubValue = (logs, key, prop) => logs[key][prop] ? (Array.isArray(logs[key][prop]) ?
30
36
  logs[key][prop].map(value => ({ key: prop, value })) :
31
37
  { key: prop, value: logs[key][prop] }) : undefined;
@@ -101,6 +107,8 @@ export class NodeLogsModelsComponent {
101
107
  });
102
108
  this.models = models;
103
109
  this.methodsById = yield from(this.models).pipe(filter(v => !!v), distinct(v => v['@id']), reduce((prev, curr) => (Object.assign(Object.assign({}, prev), { [curr['@id']]: curr })), {})).toPromise();
110
+ // from `model-links.json` file
111
+ const allModels = yield this.hestiaEngineService.models();
104
112
  const originalValues = (this.originalValues || []).filter(value => !value.deleted);
105
113
  const recalculatedValues = (this.recalculatedValues || []).filter(value => !value.deleted);
106
114
  const type = originalValues.length ?
@@ -115,7 +123,7 @@ export class NodeLogsModelsComponent {
115
123
  const recalculated = recalculatedValues.filter(v => term['@id'] === v.term['@id']);
116
124
  const hasData = !!original.length || !!recalculated.length || Object.keys(termLogs).length > 0;
117
125
  const configModels = unique([
118
- ...findConfigModels(this.config, term['@id'], this.nodeKey).map(({ model }) => model),
126
+ ...findConfigModels(this.config, term['@id'], this.nodeKey, allModels).map(({ model }) => model),
119
127
  ...Object.keys(termLogs).filter(key => !isBackgroundNoInput(termLogs, key))
120
128
  ]).filter(key => !(key in termLogs) || (!termLogs[key].isKey && !termLogs[key].input && !termLogs[key].property));
121
129
  const keys = logKeys(termLogs);
@@ -267,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
267
275
  }], filteredType: [{
268
276
  type: Input
269
277
  }] } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLEVBQ0ssa0JBQWtCLEVBQThDLFFBQVEsRUFBRSxZQUFZLEVBQ2pHLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSzdDLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVBwRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFnQzFDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBYSxFQUFFLE1BQWMsRUFBRSxFQUFFLENB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QTs0RkR0SWEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDtvSUFRUyxRQUFRO3NCQURmLEtBQUs7Z0JBTUUsT0FBTztzQkFEZCxLQUFLO2dCQUdDLE9BQU87c0JBRGIsS0FBSztnQkFHQyxjQUFjO3NCQURwQixLQUFLO2dCQUdFLGtCQUFrQjtzQkFEekIsS0FBSztnQkFHRSxLQUFLO3NCQURaLEtBQUs7Z0JBR0UsSUFBSTtzQkFEWCxLQUFLO2dCQUdDLFlBQVk7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0LCBmaWx0ZXIsIHJlZHVjZSwgdG9BcnJheSwgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsIFByb2R1Y3QsIElucHV0IGFzIEhlc3RpYUlucHV0LCBOb2RlVHlwZSwgVGVybVRlcm1UeXBlXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoLmdldCcpO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7IElOb2RlTG9ncywgSU5vZGVUZXJtTG9ncyB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UsIElPcmNoZXN0cmF0b3JDb25maWcsIGZpbmRDb25maWdNb2RlbHMgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWF0Y2hUZXJtVHlwZSwgbWF0Y2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBIZVNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgYmFzZVVybCwgaXNFeHRlcm5hbCwga2V5VG9MYWJlbCwgcHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbnR5cGUgc3ViVmFsdWVLZXlzID0gJ2lucHV0JyB8ICdwcm9wZXJ0eSc7XG5cbmludGVyZmFjZSBJQmxhbmtOb2RlTG9nU3ViVmFsdWUge1xuICBrZXk6IHN1YlZhbHVlS2V5cyB8ICdiYWNrZ3JvdW5kRGF0YSc7XG4gIHZhbHVlOiBhbnk7XG4gIGNvbmZpZ01vZGVsczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJQmxhbmtOb2RlTG9nIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBjYW5PcGVuOiBib29sZWFuO1xuICB0ZXJtOiBJVGVybUpTT05MRDtcbiAgdHlwZT86IHN0cmluZztcbiAgY29uZmlnTW9kZWxzOiBzdHJpbmdbXTtcbiAgb3JpZ2luYWw6IG51bWJlcjtcbiAgcmVjYWxjdWxhdGVkOiBudW1iZXI7XG4gIGlzT3JpZ2luYWw6IGJvb2xlYW47XG4gIGlzUmVjYWxjdWxhdGVkOiBib29sZWFuO1xuICBoYXNEYXRhOiBib29sZWFuO1xuICBsb2dzPzogSU5vZGVUZXJtTG9ncztcbiAga2V5czogc3RyaW5nW107XG4gIHN1YlZhbHVlczogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW107XG59XG5cbmNvbnN0IHJlZHVjZVZhbHVlcyA9ICh2YWx1ZXM6IGFueVtdLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyBwcm9wZXJ0eVZhbHVlKHYudmFsdWUsIHRlcm1JZCksIDApIDogdW5kZWZpbmVkO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3ViVmFsdWVLZXlzKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcCh2YWx1ZSA9PiAoeyBrZXk6IHByb3AsIHZhbHVlIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSk6XG4gICAgICB7IGtleTogcHJvcCwgdmFsdWU6IGxvZ3Nba2V5XVtwcm9wXSB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZVxuICApIDogdW5kZWZpbmVkO1xuXG5jb25zdCBpc0JhY2tncm91bmROb0lucHV0ID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MsIGtleTogc3RyaW5nKSA9PlxuICBsb2dzW2tleV0ubWV0aG9kVGllciA9PT0gRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQgJiYgIWxvZ3Nba2V5XS5pbnB1dDtcblxuY29uc3QgbG9nU3ViVmFsdWVzID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MpOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICBPYmplY3Qua2V5cyhsb2dzKVxuICAgIC5mbGF0TWFwKGtleSA9PlxuICAgICAgW1xuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdpbnB1dCcpLFxuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdwcm9wZXJ0eScpLFxuICAgICAgICAvLyBmb3IgYmFja2dyb3VuZCBkYXRhIHdpdGhvdXQgaW5wdXQsIGNvbnZlcnQgdGVybSB0byBpbnB1dCBzbyBpdCBpcyBkaXNwbGF5ZWQgYmVsb3cgdGhlIHRlcm1cbiAgICAgICAgaXNCYWNrZ3JvdW5kTm9JbnB1dChsb2dzLCBrZXkpID8geyBrZXk6ICdiYWNrZ3JvdW5kRGF0YScgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgOiB1bmRlZmluZWRcbiAgICAgIF0uZmxhdCgpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKHYgPT4gKHsgLi4udiwgY29uZmlnTW9kZWxzOiBba2V5XSB9KSkpO1xuXG5jb25zdCBsb2dLZXlzID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MpID0+IE9iamVjdC5rZXlzKGxvZ3MpLmZpbHRlcihrZXkgPT4gbG9nc1trZXldLmlzS2V5KTtcblxuZW51bSBMb2dTdGF0dXMge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3NmdWwnLFxuICBlcnJvciA9ICdmYWlsZWQnLFxuICBza2lwSGllcmFyY2h5ID0gJ25vdCBydW4gKG1vZGVsIGhpZ2hlciB1cCBoaWVyYXJjaHkgcnVuIGluc3RlYWQpJyxcbiAgZGF0YVByb3ZpZGVkID0gJ25vdCBydW4gKHVzZXIgcHJvdmlkZWQgZGF0YSByZXRhaW5lZCknLFxuICBub3RSZXF1aXJlZCA9ICdub3QgcnVuIChub3QgcmVxdWlyZWQgdG8gcnVuKSdcbn1cblxuY29uc3QgbG9nSWNvbjoge1xuICBbc3RhdHVzIGluIExvZ1N0YXR1c106IHN0cmluZyB8IHN0cmluZ1tdO1xufSA9IHtcbiAgW0xvZ1N0YXR1cy5zdWNjZXNzXTogJ2NoZWNrJyxcbiAgW0xvZ1N0YXR1cy5lcnJvcl06ICd0aW1lcycsXG4gIFtMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeV06IFsnZmFyJywgJ2NpcmNsZSddLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdjaXJjbGUnLFxuICBbTG9nU3RhdHVzLm5vdFJlcXVpcmVkXTogJ21pbnVzLWNpcmNsZSdcbn07XG5cbmNvbnN0IGxvZ0NvbG9yOiB7XG4gIFtzdGF0dXMgaW4gTG9nU3RhdHVzXTogc3RyaW5nO1xufSA9IHtcbiAgW0xvZ1N0YXR1cy5zdWNjZXNzXTogJ3N1Y2Nlc3MnLFxuICBbTG9nU3RhdHVzLmVycm9yXTogJ2RhbmdlcicsXG4gIFtMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeV06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5kYXRhUHJvdmlkZWRdOiAnZGFyaycsXG4gIFtMb2dTdGF0dXMubm90UmVxdWlyZWRdOiAnZ3JleSdcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbG9ncy1tb2RlbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgY29uZmlnPzogSU9yY2hlc3RyYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBtb2RlbHM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgcHJpdmF0ZSBhbGxUZXJtczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBwcml2YXRlIGFsbEJsYW5rTm9kZXM6IElCbGFua05vZGVMb2dbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZVR5cGU/OiBOb2RlVHlwZTtcbiAgLyoqXG4gICAqIFJlc3RyaWN0IG1vZGVscyBieSBrZXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIG5vZGVLZXk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2dzVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3JpZ2luYWxWYWx1ZXM6IChFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dClbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHJlY2FsY3VsYXRlZFZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgdGVybXM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBsb2dzPzogSU5vZGVMb2dzO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyZWRUeXBlPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBiYXNlVXJsID0gYmFzZVVybCgpO1xuICBwdWJsaWMgaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWwoKTtcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgYmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG4gIHB1YmxpYyBtZXRob2RNb2RlbHNDb3VudCA9IDA7XG4gIHB1YmxpYyBtZXRob2RzQnlJZD86IGFueTtcbiAgcHVibGljIG9ubHlXaXRoRGF0YSA9IHRydWU7XG5cbiAgcHVibGljIHNob3dMZWdlbmQgPSB0cnVlO1xuICBwdWJsaWMgTG9nU3RhdHVzID0gTG9nU3RhdHVzO1xuICBwdWJsaWMgbG9nSWNvbiA9IGxvZ0ljb247XG4gIHB1YmxpYyBsb2dDb2xvciA9IGxvZ0NvbG9yO1xuXG4gIHB1YmxpYyB0ZXJtPzogc3RyaW5nO1xuICBwdWJsaWMgc3VnZ2VzdFRlcm0gPSAodGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT5cbiAgICB0ZXh0JC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuc3VnZ2VzdEJ5VGVybSh2KSksXG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEhlU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGhlc3RpYUVuZ2luZVNlcnZpY2U6IEhlRW5naW5lU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5oZXN0aWFFbmdpbmVTZXJ2aWNlLm9jaGVzdHJhdG9yQ29uZmlnKHRoaXMubm9kZVR5cGUhKTtcblxuICAgIGNvbnN0IHsgcmVzdWx0czogbW9kZWxzIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPih7XG4gICAgICBmaWVsZHM6IFsnQHR5cGUnLCAnQGlkJywgJ25hbWUnXSxcbiAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIG1hdGNoVHlwZShOb2RlVHlwZS5UZXJtKSxcbiAgICAgICAgICAgIG1hdGNoVGVybVR5cGUoVGVybVRlcm1UeXBlLm1vZGVsKVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubW9kZWxzID0gbW9kZWxzO1xuXG4gICAgdGhpcy5tZXRob2RzQnlJZCA9IGF3YWl0IGZyb20odGhpcy5tb2RlbHMpLnBpcGUoXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgZGlzdGluY3QodiA9PiB2WydAaWQnXSksXG4gICAgICByZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyWydAaWQnXV06IGN1cnIgfSksIHt9KVxuICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9ICh0aGlzLm9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlcyA9ICh0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICEodmFsdWUgYXMgYW55KS5kZWxldGVkKTtcbiAgICBjb25zdCB0eXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICAgIG9yaWdpbmFsVmFsdWVzWzBdWydAdHlwZSddIHx8IG9yaWdpbmFsVmFsdWVzWzBdLnR5cGUgOlxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aCA/XG4gICAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICB0aGlzLmFsbFRlcm1zID0gYXdhaXQgdGhpcy5mZXRjaEFsbFRlcm1zKCk7XG4gICAgdGhpcy5hbGxCbGFua05vZGVzID0gdGhpcy5hbGxUZXJtcy5mbGF0TWFwKHRlcm0gPT4ge1xuICAgICAgY29uc3QgdGVybUxvZ3MgPSBnZXQodGhpcy5sb2dzLCB0ZXJtWydAaWQnXSwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1bJ0BpZCddID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybVsnQGlkJ10gPT09IHYudGVybSFbJ0BpZCddKTtcbiAgICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBjb25maWdNb2RlbHMgPSB1bmlxdWUoW1xuICAgICAgICAuLi5maW5kQ29uZmlnTW9kZWxzKHRoaXMuY29uZmlnISwgdGVybVsnQGlkJ10sIHRoaXMubm9kZUtleSEpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCksXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRlcm1Mb2dzKS5maWx0ZXIoa2V5ID0+ICFpc0JhY2tncm91bmROb0lucHV0KHRlcm1Mb2dzLCBrZXkpKVxuICAgICAgXSkuZmlsdGVyKGtleSA9PiAhKFxuICAgICAgICBrZXkgaW4gdGVybUxvZ3NcbiAgICAgICkgfHwgKFxuICAgICAgICAhdGVybUxvZ3Nba2V5XS5pc0tleSAmJiAhdGVybUxvZ3Nba2V5XS5pbnB1dCAmJiAhdGVybUxvZ3Nba2V5XS5wcm9wZXJ0eVxuICAgICAgKSk7XG4gICAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncyk7XG4gICAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXModGVybUxvZ3MpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBjYW5PcGVuOiBrZXlzLmxlbmd0aCA+IDAgfHwgc3ViVmFsdWVzLmxlbmd0aCA+IDAsXG4gICAgICAgIHRlcm0sXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNvbmZpZ01vZGVscyxcbiAgICAgICAgb3JpZ2luYWw6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybVsnQGlkJ10pLFxuICAgICAgICByZWNhbGN1bGF0ZWQ6IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWQsIHRlcm1bJ0BpZCddKSxcbiAgICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiByZWNhbGN1bGF0ZWQuc29tZSh2ID0+IChbXG4gICAgICAgICAgLi4uKHYuYWRkZWQgfHwgW10pLFxuICAgICAgICAgIC4uLih2LnVwZGF0ZWQgfHwgW10pXG4gICAgICAgIF0pLmluY2x1ZGVzKCd2YWx1ZScpKSxcbiAgICAgICAgaGFzRGF0YSxcbiAgICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICAgIGtleXMsXG4gICAgICAgIHN1YlZhbHVlc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGhvZE1vZGVsc0NvdW50ID0gTWF0aC5tYXguYXBwbHkoTWF0aC5tYXgsIHRoaXMuYWxsQmxhbmtOb2Rlcy5mbGF0TWFwKHYgPT4gW1xuICAgICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgICAgLi4udi5zdWJWYWx1ZXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCA/PyAwKVxuICAgIF0pKTtcblxuICAgIHRoaXMuZmlsdGVyUmVzdWx0cygpO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWxsVGVybXMoKSB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLnRlcm1zLmxlbmd0aCA/XG4gICAgICAgIHRoaXMudGVybXMgOlxuICAgICAgICBbXG4gICAgICAgICAgLi4uKHRoaXMub3JpZ2luYWxWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pLFxuICAgICAgICAgIC4uLih0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICAgIHRvQXJyYXkoKSxcbiAgICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHN1Z2dlc3RCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5hbGxUZXJtcykucGlwZShcbiAgICAgIG1hcCh2ID0+IHYubmFtZSksXG4gICAgICBmaWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSksXG4gICAgICB0b0FycmF5KClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlCbGFua05vZGUoX2luZGV4OiBudW1iZXIsIG5vZGU6IElCbGFua05vZGVMb2cpIHtcbiAgICByZXR1cm4gbm9kZS50ZXJtWydAaWQnXTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQb3BvdmVyKHBvcG92ZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCYWNrZ3JvdW5kKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiBsb2c/Lm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JlcXVpcmVkKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUnVuKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiBsb2cuc2hvdWxkUnVuO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VzZXJQcm92aWRlZChub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbm9kZS5sb2dzIVttZXRob2RJZF07XG4gICAgcmV0dXJuIFtcbiAgICAgIHR5cGVvZiBub2RlLm9yaWdpbmFsID09PSAndW5kZWZpbmVkJywgLy8gaGFzIHZhbHVlXG4gICAgICBub2RlLmlzUmVjYWxjdWxhdGVkLCAvLyBpcyBub3QgcmVjYWxjdWxhdGVkXG4gICAgICB0aGlzLmlzQmFja2dyb3VuZChub2RlLCBtZXRob2RJZCksIC8vIGlzIG5vdCBiYWNrZ3JvdW5kIGRhdGFcbiAgICAgIGxvZz8uaXNLZXksIC8vIGlzIG5vdCBrZXlcbiAgICAgIHRoaXMuaGFzTG9nKG5vZGUsIG1ldGhvZElkLCBmYWxzZSkgLy8gc2tpcCBpZiBjb250YWlucyBsb2dzIG90aGVyIHRoYW4gb3JjaGVzdHJhdG9yXG4gICAgXS5ldmVyeSh2ID0+ICF2KTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZFN1YlZhbHVlKG5vZGU6IElCbGFua05vZGVMb2csIGluZGV4OiBudW1iZXIsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbWV0aG9kSWQgPSB0aGlzLmdldE1ldGhvZElkQXQobm9kZSwgaW5kZXgsIHN1YlZhbHVlKTtcbiAgICBjb25zdCBsb2cgPSBnZXQobm9kZS5sb2dzIVttZXRob2RJZF0sIHN1YlZhbHVlPy5rZXksIG51bGwpO1xuICAgIHJldHVybiAhc3ViVmFsdWU/LnZhbHVlIHx8IChcbiAgICAgIC8vIGlucHV0L3Byb3BlcnR5IGNhbiBiZSBhbiBhcnJheVxuICAgICAgQXJyYXkuaXNBcnJheShsb2cpID8gbG9nLmluY2x1ZGVzKHN1YlZhbHVlPy52YWx1ZSkgOiBsb2cgPT09IHN1YlZhbHVlPy52YWx1ZVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0aG9kSWRBdChub2RlOiBJQmxhbmtOb2RlTG9nLCBpbmRleDogbnVtYmVyLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IHsgY29uZmlnTW9kZWxzIH0gPSBzdWJWYWx1ZSB8fCBub2RlO1xuICAgIHJldHVybiBjb25maWdNb2RlbHNbaW5kZXhdO1xuICB9XG5cbiAgcHVibGljIG1ldGhvZE5hbWUoeyBsb2dzIH06IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RzQnlJZFttZXRob2RJZF0/Lm5hbWUgfHxcbiAgICAgIGxvZ3MhW21ldGhvZElkXT8ua2V5IHx8XG4gICAgICBsb2dzIVttZXRob2RJZF0/Lm1vZGVsIHx8XG4gICAgICAobWV0aG9kSWQgPyBrZXlUb0xhYmVsKG1ldGhvZElkKSA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2coeyBsb2dzIH06IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcsIHdpdGhPcmNoZXN0cmF0b3IgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG1ldGhvZElkIGluIGxvZ3MhICYmIChcbiAgICAgICdzaG91bGRSdW4nIGluIGxvZ3MhW21ldGhvZElkXSB8fFxuICAgICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9ncyFbbWV0aG9kSWRdKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaGFzTG9nRGV0YWlscyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbm9kZS5sb2dzIVttZXRob2RJZF07XG4gICAgcmV0dXJuIFtcbiAgICAgIExvZ1N0YXR1cy5zdWNjZXNzLFxuICAgICAgTG9nU3RhdHVzLmVycm9yXG4gICAgXS5pbmNsdWRlcyh0aGlzLmxvZ1N0YXR1cyhub2RlLCBtZXRob2RJZCkpICYmIChcbiAgICAgIGxvZz8ucmVxdWlyZW1lbnRzIHx8IGxvZz8ubG9ncyB8fCBsb2c/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGxvZ1N0YXR1cyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVc2VyUHJvdmlkZWQobm9kZSwgbWV0aG9kSWQpID9cbiAgICAgIExvZ1N0YXR1cy5kYXRhUHJvdmlkZWQgOlxuICAgICAgKFxuICAgICAgICB0aGlzLmhhc0xvZyhub2RlLCBtZXRob2RJZCkgP1xuICAgICAgICAgIChcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aXJlZChub2RlLCBtZXRob2RJZCkgP1xuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRSdW4obm9kZSwgbWV0aG9kSWQpID9cbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5zdWNjZXNzIDpcbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5lcnJvclxuICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIG5vZGUuaXNSZWNhbGN1bGF0ZWQgP1xuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLnNraXBIaWVyYXJjaHkgOlxuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLm5vdFJlcXVpcmVkXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApIDpcbiAgICAgICAgICBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1aXJlbWVudENvbG9yKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gIXZhbHVlIHx8IFsnTm9uZScsICdGYWxzZScsICcwJywgJzAuMCddLmluY2x1ZGVzKHZhbHVlKSA/ICdkYW5nZXInIDogJ3doaXRlJztcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJSZXN1bHRzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ibGFua05vZGVzID0gdGhpcy5hbGxCbGFua05vZGVzLmZpbHRlcigoeyBoYXNEYXRhLCB0ZXJtOiB7IG5hbWUgfSB9KSA9PlxuICAgICAgICAoIXRoaXMub25seVdpdGhEYXRhIHx8IGhhc0RhdGEpICYmXG4gICAgICAgICghdGhpcy50ZXJtIHx8IG5hbWUgPT09IHRoaXMudGVybSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LXJpZ2h0IG1iLTJcIiAqbmdJZj1cIiFpc0V4dGVybmFsXCI+XG4gICAgPGEgY2xhc3M9XCJpcy1zaXplLTdcIiAqbmdJZj1cImxvZ3NVcmxcIiBbaHJlZl09XCJsb2dzVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5PcGVuIEZ1bGwgTG9nczwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXIgbWItMVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBkYXRhLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWQgaGFzLWljb25zLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc2VhcmNoLWlucHV0IGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVybVwiIG5hbWU9XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IG5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwic3VnZ2VzdFRlcm1cIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdEl0ZW0pPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXRlcm1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRlcm0gPSAnJzsgZmlsdGVyUmVzdWx0cygpO1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD5PcmlnaW5hbDwvdGg+XG4gICAgICAgICAgPHRoPlJlY2FsY3VsYXRlZDwvdGg+XG4gICAgICAgICAgPHRoICpuZ0lmPVwib3JpZ2luYWxWYWx1ZXM/Lmxlbmd0aFwiPkRpZmZlcmVuY2U8L3RoPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYyBvZiBtZXRob2RNb2RlbHNDb3VudCB8IHRpbWVzOyBsZXQgaSA9IGluZGV4XCI+KHt7aSArIDF9fSk8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBibGFua05vZGUgb2YgYmxhbmtOb2RlczsgdHJhY2tCeTogdHJhY2tCeUJsYW5rTm9kZVwiPlxuICAgICAgICAgIDx0ciBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5jYW5PcGVuXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiYmxhbmtOb2RlLnRlcm0ubmFtZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMiBvcGVuLW5vZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJibGFua05vZGUuaXNPcGVuID0gIWJsYW5rTm9kZS5pc09wZW5cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxhbmtOb2RlLmNhbk9wZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiYmxhbmtOb2RlLmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgW25vZGVdPVwiYmxhbmtOb2RlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7YmxhbmtOb2RlLnRlcm0ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuPnt7YmxhbmtOb2RlLm9yaWdpbmFsIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYmxhbmtOb2RlLmlzT3JpZ2luYWwgfHwgYmxhbmtOb2RlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vdFVwZGF0ZWRcIj5cbiAgICAgICAgICAgICAgICB7e2JsYW5rTm9kZS5yZWNhbGN1bGF0ZWQgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yaWdpbmFsVmFsdWVzPy5sZW5ndGhcIiBjbGFzcz1cImlzLW5vd3JhcFwiPlxuICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YSAqbmdJZj1cImJsYW5rTm9kZS5pc1JlY2FsY3VsYXRlZFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJsYW5rTm9kZS5yZWNhbGN1bGF0ZWRcIlxuICAgICAgICAgICAgICAgIFtvcmlnaW5hbFZhbHVlXT1cImJsYW5rTm9kZS5vcmlnaW5hbFwiXG4gICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGE+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxhbmtOb2RlLmtleXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2YgYmxhbmtOb2RlLmtleXNcIlxuICAgICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhhcy1zdWItcm93c109XCJibGFua05vZGUuc3ViVmFsdWVzPy5sZW5ndGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsLTMgaGFzLXRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGlzLWFsaWduLXRvcFwiPkZpZWxkOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nSWY9XCJibGFua05vZGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgYmxhbmtOb2RlLnR5cGUgKyAnIycgKyBrZXlcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2tleX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wXCIgKm5nSWY9XCIhYmxhbmtOb2RlLnR5cGVcIj57e2tleX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvcmlnaW5hbFZhbHVlcz8ubGVuZ3RoID8gMyA6IDJcIj48L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJibGFuay1ub2RlLWluZGV4LWtleVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlLCBtZXRob2RJZDoga2V5fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJtZXRob2RNb2RlbHNDb3VudCA+IDFcIiBbYXR0ci5jb2xzcGFuXT1cIm1ldGhvZE1vZGVsc0NvdW50IC0gMVwiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViVmFsdWUgb2YgYmxhbmtOb2RlLnN1YlZhbHVlc1wiXG4gICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIGhhcy10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1hbGlnbi10b3BcIj57e3N1YlZhbHVlLmtleSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJWYWx1ZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTEgaXMtYWxpZ24tdG9wXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3ViVmFsdWUua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidiYWNrZ3JvdW5kRGF0YSdcIj57e3N1YlZhbHVlLnZhbHVlIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBbbm9kZV09XCJ7J0B0eXBlJzonVGVybScsJ0BpZCc6c3ViVmFsdWUudmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tzdWJWYWx1ZS52YWx1ZSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvcmlnaW5hbFZhbHVlcz8ubGVuZ3RoID8gMyA6IDJcIj48L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlLCBzdWJWYWx1ZTogc3ViVmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpcy1zaXplLTcgaXMtaXRhbGljXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtMSBteS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBwci0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93TGVnZW5kID0gIXNob3dMZWdlbmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1kb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIj5MZWdlbmQ6PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cImNvbnRlbnQgcGwtMlwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXNob3dMZWdlbmRcIj5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIGNsYXNzPVwiaGFzLXRleHQte3tsb2dDb2xvcltzdGF0dXMudmFsdWVdfX1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBMb2dTdGF0dXMgfCBrZXlzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW3N0YXR1cy52YWx1ZV1cIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj57e3N0YXR1cy52YWx1ZX19PC9zcGFuPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaGFzLXRleHQtcmlnaHRcIiAqbmdJZj1cImZpbHRlcmVkVHlwZVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgY2hlY2tib3hcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9ubHlXaXRoRGF0YVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZpbHRlclJlc3VsdHMoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPlNob3cgb25seSByZWNhbGN1bGF0ZWQge3tmaWx0ZXJlZFR5cGUgfCBwbHVyYWxpemV9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVscyBsZXQtYmxhbmtOb2RlPVwiYmxhbmtOb2RlXCIgbGV0LXN1YlZhbHVlPVwic3ViVmFsdWVcIj5cbiAgPHRkIGNsYXNzPVwiYmxhbmstbm9kZS1pbmRleC17e2l9fVwiICpuZ0Zvcj1cImxldCBjIG9mIG1ldGhvZE1vZGVsc0NvdW50IHwgdGltZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsaWRTdWJWYWx1ZShibGFua05vZGUsIGksIHN1YlZhbHVlKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1ldGhvZElkQXQoYmxhbmtOb2RlLCBpLCBzdWJWYWx1ZSk7IGxldCBtZXRob2RJZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWw7IGNvbnRleHQ6IHtibGFua05vZGU6IGJsYW5rTm9kZSwgbWV0aG9kSWQ6IG1ldGhvZElkfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVsIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtbWV0aG9kSWQ9XCJtZXRob2RJZFwiPlxuICA8c3BhblxuICAgIFtjbGFzcy50cmlnZ2VyLXBvcG92ZXJdPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkKVwiXG4gICAgW25nYlBvcG92ZXJdPVwibG9nRGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAoY2xpY2spPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkKSA/IHRvZ2dsZVBvcG92ZXIocCwgeyBsb2c6IGJsYW5rTm9kZS5sb2dzW21ldGhvZElkXSB9KSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1jYXBpdGFsaXplZFwiPnt7bWV0aG9kTmFtZShibGFua05vZGUsIG1ldGhvZElkKX19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiICpuZ0lmPVwiaGFzTG9nKGJsYW5rTm9kZSwgbWV0aG9kSWQpICYmIGJsYW5rTm9kZS5sb2dzW21ldGhvZElkXS5tZXRob2RUaWVyXCI+W3t7YmxhbmtOb2RlLmxvZ3NbbWV0aG9kSWRdLm1ldGhvZFRpZXJ9fV08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwbC0xIGhhcy10ZXh0LXt7bG9nQ29sb3JbbG9nU3RhdHVzKGJsYW5rTm9kZSwgbWV0aG9kSWQpXX19XCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW2xvZ1N0YXR1cyhibGFua05vZGUsIG1ldGhvZElkKV1cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vdFVwZGF0ZWQ+XG4gIDxzcGFuPm5vdCB1cGRhdGVkPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2dEZXRhaWxzIGxldC1sb2c9XCJsb2dcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZy5yZXF1aXJlbWVudHNcIj5cbiAgICA8cCAqbmdGb3I9XCJsZXQga2V5IG9mIGxvZy5yZXF1aXJlbWVudHMgfCBrZXlzXCIgY2xhc3M9XCJoYXMtdGV4dC17e3JlcXVpcmVtZW50Q29sb3Ioa2V5LnZhbHVlKX19XCI+XG4gICAgICB7e2tleS5rZXl9fToge3trZXkudmFsdWV9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubG9nc1wiPlxuICAgIDxwICpuZ0Zvcj1cImxldCBrZXkgb2YgbG9nLmxvZ3MgfCBrZXlzXCI+XG4gICAgICB7e2tleS5rZXl9fToge3trZXkudmFsdWV9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFwiPlxuICAgIDxwIGNsYXNzPVwibXQtMlwiPk1pc3NpbmcgbG9va3Vwczo8L3A+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggbWItMFwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFja1wiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkZpbGVuYW1lPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkNvbHVtbiBUaXRsZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Sb3cgKHRlcm0uaWQpPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBsb2cubWlzc2luZ0xvb2t1cHNcIj5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEuZmlsZW5hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLmNvbHVtbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEudGVybUlkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLEVBQ0ssa0JBQWtCLEVBQThDLFFBQVEsRUFBRSxZQUFZLEVBQ2pHLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSzdDLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVBwRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFnQzFDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO0lB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Q0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDO2dCQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNuQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEFqUVUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsNlFDMUdwQyx3alVBMk9BOzRGRGpJYSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7aUJBQ2pEO29JQVFTLFFBQVE7c0JBRGYsS0FBSztnQkFNRSxPQUFPO3NCQURkLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQUdDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0Usa0JBQWtCO3NCQUR6QixLQUFLO2dCQUdFLEtBQUs7c0JBRFosS0FBSztnQkFHRSxJQUFJO3NCQURYLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIGZpbHRlciwgcmVkdWNlLCB0b0FycmF5LCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFbWlzc2lvbiwgRW1pc3Npb25NZXRob2RUaWVyLCBJVGVybUpTT05MRCwgUHJvZHVjdCwgSW5wdXQgYXMgSGVzdGlhSW5wdXQsIE5vZGVUeXBlLCBUZXJtVGVybVR5cGVcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdsb2Rhc2guZ2V0Jyk7XG5jb25zdCBvcmRlckJ5ID0gcmVxdWlyZSgnbG9kYXNoLm9yZGVyYnknKTtcblxuaW1wb3J0IHsgSU5vZGVMb2dzLCBJTm9kZVRlcm1Mb2dzIH0gZnJvbSAnLi4vbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhlRW5naW5lU2VydmljZSwgSU9yY2hlc3RyYXRvckNvbmZpZywgZmluZENvbmZpZ01vZGVscyB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaFR5cGUgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBpc0V4dGVybmFsLCBrZXlUb0xhYmVsLCBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxudHlwZSBzdWJWYWx1ZUtleXMgPSAnaW5wdXQnIHwgJ3Byb3BlcnR5JztcblxuaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3ViVmFsdWVLZXlzIHwgJ2JhY2tncm91bmREYXRhJztcbiAgdmFsdWU6IGFueTtcbiAgY29uZmlnTW9kZWxzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0eXBlPzogc3RyaW5nO1xuICBjb25maWdNb2RlbHM6IHN0cmluZ1tdO1xuICBvcmlnaW5hbDogbnVtYmVyO1xuICByZWNhbGN1bGF0ZWQ6IG51bWJlcjtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBzdHJpbmdbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbn1cblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGxvZ1N1YlZhbHVlID0gKGxvZ3M6IElOb2RlVGVybUxvZ3MsIGtleTogc3RyaW5nLCBwcm9wOiBzdWJWYWx1ZUtleXMpID0+XG4gIGxvZ3Nba2V5XVtwcm9wXSA/IChcbiAgICBBcnJheS5pc0FycmF5KGxvZ3Nba2V5XVtwcm9wXSkgP1xuICAgICAgKGxvZ3Nba2V5XVtwcm9wXSBhcyBzdHJpbmdbXSkubWFwKHZhbHVlID0+ICh7IGtleTogcHJvcCwgdmFsdWUgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpKTpcbiAgICAgIHsga2V5OiBwcm9wLCB2YWx1ZTogbG9nc1trZXldW3Byb3BdIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4gICkgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IGlzQmFja2dyb3VuZE5vSW5wdXQgPSAobG9nczogSU5vZGVUZXJtTG9ncywga2V5OiBzdHJpbmcpID0+XG4gIGxvZ3Nba2V5XS5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhbG9nc1trZXldLmlucHV0O1xuXG5jb25zdCBsb2dTdWJWYWx1ZXMgPSAobG9nczogSU5vZGVUZXJtTG9ncyk6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdID0+XG4gIE9iamVjdC5rZXlzKGxvZ3MpXG4gICAgLmZsYXRNYXAoa2V5ID0+XG4gICAgICBbXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JyksXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JyksXG4gICAgICAgIC8vIGZvciBiYWNrZ3JvdW5kIGRhdGEgd2l0aG91dCBpbnB1dCwgY29udmVydCB0ZXJtIHRvIGlucHV0IHNvIGl0IGlzIGRpc3BsYXllZCBiZWxvdyB0aGUgdGVybVxuICAgICAgICBpc0JhY2tncm91bmROb0lucHV0KGxvZ3MsIGtleSkgPyB7IGtleTogJ2JhY2tncm91bmREYXRhJyB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgXS5mbGF0KClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodiA9PiAoeyAuLi52LCBjb25maWdNb2RlbHM6IFtrZXldIH0pKSk7XG5cbmNvbnN0IGxvZ0tleXMgPSAobG9nczogSU5vZGVUZXJtTG9ncykgPT4gT2JqZWN0LmtleXMobG9ncykuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkpO1xuXG5lbnVtIExvZ1N0YXR1cyB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2Vzc2Z1bCcsXG4gIGVycm9yID0gJ2ZhaWxlZCcsXG4gIHNraXBIaWVyYXJjaHkgPSAnbm90IHJ1biAobW9kZWwgaGlnaGVyIHVwIGhpZXJhcmNoeSBydW4gaW5zdGVhZCknLFxuICBkYXRhUHJvdmlkZWQgPSAnbm90IHJ1biAodXNlciBwcm92aWRlZCBkYXRhIHJldGFpbmVkKScsXG4gIG5vdFJlcXVpcmVkID0gJ25vdCBydW4gKG5vdCByZXF1aXJlZCB0byBydW4pJ1xufVxuXG5jb25zdCBsb2dJY29uOiB7XG4gIFtzdGF0dXMgaW4gTG9nU3RhdHVzXTogc3RyaW5nIHwgc3RyaW5nW107XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnY2hlY2snLFxuICBbTG9nU3RhdHVzLmVycm9yXTogJ3RpbWVzJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogWydmYXInLCAnY2lyY2xlJ10sXG4gIFtMb2dTdGF0dXMuZGF0YVByb3ZpZGVkXTogJ2NpcmNsZScsXG4gIFtMb2dTdGF0dXMubm90UmVxdWlyZWRdOiAnbWludXMtY2lyY2xlJ1xufTtcblxuY29uc3QgbG9nQ29sb3I6IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmc7XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnc3VjY2VzcycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAnZGFuZ2VyJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogJ2RhcmsnLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdncmV5J1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1sb2dzLW1vZGVscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBjb25maWc/OiBJT3JjaGVzdHJhdG9yQ29uZmlnO1xuICBwcml2YXRlIG1vZGVsczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBwcml2YXRlIGFsbFRlcm1zOiBJVGVybUpTT05MRFtdID0gW107XG4gIHByaXZhdGUgYWxsQmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBub2RlVHlwZT86IE5vZGVUeXBlO1xuICAvKipcbiAgICogUmVzdHJpY3QgbW9kZWxzIGJ5IGtleS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZUtleT86IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGxvZ3NVcmw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcmlnaW5hbFZhbHVlczogKEVtaXNzaW9uIHwgUHJvZHVjdCB8IEhlc3RpYUlucHV0KVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVkVmFsdWVzOiAoRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQpW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSB0ZXJtczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGxvZ3M/OiBJTm9kZUxvZ3M7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJlZFR5cGU/OiBzdHJpbmc7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBpc0V4dGVybmFsID0gaXNFeHRlcm5hbCgpO1xuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBibGFua05vZGVzOiBJQmxhbmtOb2RlTG9nW10gPSBbXTtcbiAgcHVibGljIG1ldGhvZE1vZGVsc0NvdW50ID0gMDtcbiAgcHVibGljIG1ldGhvZHNCeUlkPzogYW55O1xuICBwdWJsaWMgb25seVdpdGhEYXRhID0gdHJ1ZTtcblxuICBwdWJsaWMgc2hvd0xlZ2VuZCA9IHRydWU7XG4gIHB1YmxpYyBMb2dTdGF0dXMgPSBMb2dTdGF0dXM7XG4gIHB1YmxpYyBsb2dJY29uID0gbG9nSWNvbjtcbiAgcHVibGljIGxvZ0NvbG9yID0gbG9nQ29sb3I7XG5cbiAgcHVibGljIHRlcm0/OiBzdHJpbmc7XG4gIHB1YmxpYyBzdWdnZXN0VGVybSA9ICh0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+KSA9PlxuICAgIHRleHQkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHYgPT4gdGhpcy5zdWdnZXN0QnlUZXJtKHYpKSxcbiAgICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogSGVTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGVzdGlhRW5naW5lU2VydmljZTogSGVFbmdpbmVTZXJ2aWNlXG4gICkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmhlc3RpYUVuZ2luZVNlcnZpY2Uub2NoZXN0cmF0b3JDb25maWcodGhpcy5ub2RlVHlwZSEpO1xuXG4gICAgY29uc3QgeyByZXN1bHRzOiBtb2RlbHMgfSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2g8SVRlcm1KU09OTEQsIE5vZGVUeXBlLlRlcm0+KHtcbiAgICAgIGZpZWxkczogWydAdHlwZScsICdAaWQnLCAnbmFtZSddLFxuICAgICAgbGltaXQ6IDEwMDAsXG4gICAgICBxdWVyeToge1xuICAgICAgICBib29sOiB7XG4gICAgICAgICAgbXVzdDogW1xuICAgICAgICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLlRlcm0pLFxuICAgICAgICAgICAgbWF0Y2hUZXJtVHlwZShUZXJtVGVybVR5cGUubW9kZWwpXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHM7XG5cbiAgICB0aGlzLm1ldGhvZHNCeUlkID0gYXdhaXQgZnJvbSh0aGlzLm1vZGVscykucGlwZShcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXG4gICAgICBkaXN0aW5jdCh2ID0+IHZbJ0BpZCddKSxcbiAgICAgIHJlZHVjZSgocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnJbJ0BpZCddXTogY3VyciB9KSwge30pXG4gICAgKS50b1Byb21pc2UoKTtcblxuICAgIC8vIGZyb20gYG1vZGVsLWxpbmtzLmpzb25gIGZpbGVcbiAgICBjb25zdCBhbGxNb2RlbHMgPSBhd2FpdCB0aGlzLmhlc3RpYUVuZ2luZVNlcnZpY2UubW9kZWxzKCk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9ICh0aGlzLm9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlcyA9ICh0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICEodmFsdWUgYXMgYW55KS5kZWxldGVkKTtcbiAgICBjb25zdCB0eXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICAgIG9yaWdpbmFsVmFsdWVzWzBdWydAdHlwZSddIHx8IG9yaWdpbmFsVmFsdWVzWzBdLnR5cGUgOlxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aCA/XG4gICAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICB0aGlzLmFsbFRlcm1zID0gYXdhaXQgdGhpcy5mZXRjaEFsbFRlcm1zKCk7XG4gICAgdGhpcy5hbGxCbGFua05vZGVzID0gdGhpcy5hbGxUZXJtcy5mbGF0TWFwKHRlcm0gPT4ge1xuICAgICAgY29uc3QgdGVybUxvZ3MgPSBnZXQodGhpcy5sb2dzLCB0ZXJtWydAaWQnXSwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1bJ0BpZCddID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybVsnQGlkJ10gPT09IHYudGVybSFbJ0BpZCddKTtcbiAgICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBjb25maWdNb2RlbHMgPSB1bmlxdWUoW1xuICAgICAgICAuLi5maW5kQ29uZmlnTW9kZWxzKHRoaXMuY29uZmlnISwgdGVybVsnQGlkJ10sIHRoaXMubm9kZUtleSEsIGFsbE1vZGVscykubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsIGFzIHN0cmluZyksXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRlcm1Mb2dzKS5maWx0ZXIoa2V5ID0+ICFpc0JhY2tncm91bmROb0lucHV0KHRlcm1Mb2dzLCBrZXkpKVxuICAgICAgXSkuZmlsdGVyKGtleSA9PiAhKFxuICAgICAgICBrZXkgaW4gdGVybUxvZ3NcbiAgICAgICkgfHwgKFxuICAgICAgICAhdGVybUxvZ3Nba2V5XS5pc0tleSAmJiAhdGVybUxvZ3Nba2V5XS5pbnB1dCAmJiAhdGVybUxvZ3Nba2V5XS5wcm9wZXJ0eVxuICAgICAgKSk7XG4gICAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncyk7XG4gICAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXModGVybUxvZ3MpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBjYW5PcGVuOiBrZXlzLmxlbmd0aCA+IDAgfHwgc3ViVmFsdWVzLmxlbmd0aCA+IDAsXG4gICAgICAgIHRlcm0sXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNvbmZpZ01vZGVscyxcbiAgICAgICAgb3JpZ2luYWw6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybVsnQGlkJ10pLFxuICAgICAgICByZWNhbGN1bGF0ZWQ6IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWQsIHRlcm1bJ0BpZCddKSxcbiAgICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiByZWNhbGN1bGF0ZWQuc29tZSh2ID0+IChbXG4gICAgICAgICAgLi4uKHYuYWRkZWQgfHwgW10pLFxuICAgICAgICAgIC4uLih2LnVwZGF0ZWQgfHwgW10pXG4gICAgICAgIF0pLmluY2x1ZGVzKCd2YWx1ZScpKSxcbiAgICAgICAgaGFzRGF0YSxcbiAgICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICAgIGtleXMsXG4gICAgICAgIHN1YlZhbHVlc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGhvZE1vZGVsc0NvdW50ID0gTWF0aC5tYXguYXBwbHkoTWF0aC5tYXgsIHRoaXMuYWxsQmxhbmtOb2Rlcy5mbGF0TWFwKHYgPT4gW1xuICAgICAgdi5jb25maWdNb2RlbHMubGVuZ3RoLFxuICAgICAgLi4udi5zdWJWYWx1ZXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCA/PyAwKVxuICAgIF0pKTtcblxuICAgIHRoaXMuZmlsdGVyUmVzdWx0cygpO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWxsVGVybXMoKSB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLnRlcm1zLmxlbmd0aCA/XG4gICAgICAgIHRoaXMudGVybXMgOlxuICAgICAgICBbXG4gICAgICAgICAgLi4uKHRoaXMub3JpZ2luYWxWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pLFxuICAgICAgICAgIC4uLih0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSlcbiAgICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0KHYgPT4gdiFbJ0BpZCddKSxcbiAgICAgIHRvQXJyYXkoKSxcbiAgICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHN1Z2dlc3RCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5hbGxUZXJtcykucGlwZShcbiAgICAgIG1hcCh2ID0+IHYubmFtZSksXG4gICAgICBmaWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSksXG4gICAgICB0b0FycmF5KClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlCbGFua05vZGUoX2luZGV4OiBudW1iZXIsIG5vZGU6IElCbGFua05vZGVMb2cpIHtcbiAgICByZXR1cm4gbm9kZS50ZXJtWydAaWQnXTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQb3BvdmVyKHBvcG92ZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCYWNrZ3JvdW5kKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiBsb2c/Lm1ldGhvZFRpZXIgPT09IEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JlcXVpcmVkKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUnVuKHsgbG9ncyB9OiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbG9ncyFbbWV0aG9kSWRdO1xuICAgIHJldHVybiBsb2cuc2hvdWxkUnVuO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VzZXJQcm92aWRlZChub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbm9kZS5sb2dzIVttZXRob2RJZF07XG4gICAgcmV0dXJuIFtcbiAgICAgIHR5cGVvZiBub2RlLm9yaWdpbmFsID09PSAndW5kZWZpbmVkJywgLy8gaGFzIHZhbHVlXG4gICAgICBub2RlLmlzUmVjYWxjdWxhdGVkLCAvLyBpcyBub3QgcmVjYWxjdWxhdGVkXG4gICAgICB0aGlzLmlzQmFja2dyb3VuZChub2RlLCBtZXRob2RJZCksIC8vIGlzIG5vdCBiYWNrZ3JvdW5kIGRhdGFcbiAgICAgIGxvZz8uaXNLZXksIC8vIGlzIG5vdCBrZXlcbiAgICAgIHRoaXMuaGFzTG9nKG5vZGUsIG1ldGhvZElkLCBmYWxzZSkgLy8gc2tpcCBpZiBjb250YWlucyBsb2dzIG90aGVyIHRoYW4gb3JjaGVzdHJhdG9yXG4gICAgXS5ldmVyeSh2ID0+ICF2KTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZFN1YlZhbHVlKG5vZGU6IElCbGFua05vZGVMb2csIGluZGV4OiBudW1iZXIsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSB7XG4gICAgY29uc3QgbWV0aG9kSWQgPSB0aGlzLmdldE1ldGhvZElkQXQobm9kZSwgaW5kZXgsIHN1YlZhbHVlKTtcbiAgICBjb25zdCBsb2cgPSBnZXQobm9kZS5sb2dzIVttZXRob2RJZF0sIHN1YlZhbHVlPy5rZXksIG51bGwpO1xuICAgIHJldHVybiAhc3ViVmFsdWU/LnZhbHVlIHx8IChcbiAgICAgIC8vIGlucHV0L3Byb3BlcnR5IGNhbiBiZSBhbiBhcnJheVxuICAgICAgQXJyYXkuaXNBcnJheShsb2cpID8gbG9nLmluY2x1ZGVzKHN1YlZhbHVlPy52YWx1ZSkgOiBsb2cgPT09IHN1YlZhbHVlPy52YWx1ZVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0aG9kSWRBdChub2RlOiBJQmxhbmtOb2RlTG9nLCBpbmRleDogbnVtYmVyLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZSkge1xuICAgIGNvbnN0IHsgY29uZmlnTW9kZWxzIH0gPSBzdWJWYWx1ZSB8fCBub2RlO1xuICAgIHJldHVybiBjb25maWdNb2RlbHNbaW5kZXhdO1xuICB9XG5cbiAgcHVibGljIG1ldGhvZE5hbWUoeyBsb2dzIH06IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RzQnlJZFttZXRob2RJZF0/Lm5hbWUgfHxcbiAgICAgIGxvZ3MhW21ldGhvZElkXT8ua2V5IHx8XG4gICAgICBsb2dzIVttZXRob2RJZF0/Lm1vZGVsIHx8XG4gICAgICAobWV0aG9kSWQgPyBrZXlUb0xhYmVsKG1ldGhvZElkKSA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2coeyBsb2dzIH06IElCbGFua05vZGVMb2csIG1ldGhvZElkOiBzdHJpbmcsIHdpdGhPcmNoZXN0cmF0b3IgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG1ldGhvZElkIGluIGxvZ3MhICYmIChcbiAgICAgICdzaG91bGRSdW4nIGluIGxvZ3MhW21ldGhvZElkXSB8fFxuICAgICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9ncyFbbWV0aG9kSWRdKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaGFzTG9nRGV0YWlscyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG9nID0gbm9kZS5sb2dzIVttZXRob2RJZF07XG4gICAgcmV0dXJuIFtcbiAgICAgIExvZ1N0YXR1cy5zdWNjZXNzLFxuICAgICAgTG9nU3RhdHVzLmVycm9yXG4gICAgXS5pbmNsdWRlcyh0aGlzLmxvZ1N0YXR1cyhub2RlLCBtZXRob2RJZCkpICYmIChcbiAgICAgIGxvZz8ucmVxdWlyZW1lbnRzIHx8IGxvZz8ubG9ncyB8fCBsb2c/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGxvZ1N0YXR1cyhub2RlOiBJQmxhbmtOb2RlTG9nLCBtZXRob2RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVc2VyUHJvdmlkZWQobm9kZSwgbWV0aG9kSWQpID9cbiAgICAgIExvZ1N0YXR1cy5kYXRhUHJvdmlkZWQgOlxuICAgICAgKFxuICAgICAgICB0aGlzLmhhc0xvZyhub2RlLCBtZXRob2RJZCkgP1xuICAgICAgICAgIChcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aXJlZChub2RlLCBtZXRob2RJZCkgP1xuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRSdW4obm9kZSwgbWV0aG9kSWQpID9cbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5zdWNjZXNzIDpcbiAgICAgICAgICAgICAgICAgIExvZ1N0YXR1cy5lcnJvclxuICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIG5vZGUuaXNSZWNhbGN1bGF0ZWQgP1xuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLnNraXBIaWVyYXJjaHkgOlxuICAgICAgICAgICAgICAgICAgTG9nU3RhdHVzLm5vdFJlcXVpcmVkXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApIDpcbiAgICAgICAgICBMb2dTdGF0dXMuc2tpcEhpZXJhcmNoeVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1aXJlbWVudENvbG9yKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gIXZhbHVlIHx8IFsnTm9uZScsICdGYWxzZScsICcwJywgJzAuMCddLmluY2x1ZGVzKHZhbHVlKSA/ICdkYW5nZXInIDogJ3doaXRlJztcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJSZXN1bHRzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ibGFua05vZGVzID0gdGhpcy5hbGxCbGFua05vZGVzLmZpbHRlcigoeyBoYXNEYXRhLCB0ZXJtOiB7IG5hbWUgfSB9KSA9PlxuICAgICAgICAoIXRoaXMub25seVdpdGhEYXRhIHx8IGhhc0RhdGEpICYmXG4gICAgICAgICghdGhpcy50ZXJtIHx8IG5hbWUgPT09IHRoaXMudGVybSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LXJpZ2h0IG1iLTJcIiAqbmdJZj1cIiFpc0V4dGVybmFsXCI+XG4gICAgPGEgY2xhc3M9XCJpcy1zaXplLTdcIiAqbmdJZj1cImxvZ3NVcmxcIiBbaHJlZl09XCJsb2dzVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5PcGVuIEZ1bGwgTG9nczwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgZGF0YS10YWJsZS1jb250YWluZXIgbWItMVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBkYXRhLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWQgaGFzLWljb25zLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgc2VhcmNoLWlucHV0IGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVybVwiIG5hbWU9XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IG5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwic3VnZ2VzdFRlcm1cIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdEl0ZW0pPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXRlcm1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRlcm0gPSAnJzsgZmlsdGVyUmVzdWx0cygpO1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD5PcmlnaW5hbDwvdGg+XG4gICAgICAgICAgPHRoPlJlY2FsY3VsYXRlZDwvdGg+XG4gICAgICAgICAgPHRoICpuZ0lmPVwib3JpZ2luYWxWYWx1ZXM/Lmxlbmd0aFwiPkRpZmZlcmVuY2U8L3RoPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYyBvZiBtZXRob2RNb2RlbHNDb3VudCB8IHRpbWVzOyBsZXQgaSA9IGluZGV4XCI+KHt7aSArIDF9fSk8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBibGFua05vZGUgb2YgYmxhbmtOb2RlczsgdHJhY2tCeTogdHJhY2tCeUJsYW5rTm9kZVwiPlxuICAgICAgICAgIDx0ciBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5jYW5PcGVuXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiYmxhbmtOb2RlLnRlcm0ubmFtZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMiBvcGVuLW5vZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJibGFua05vZGUuaXNPcGVuID0gIWJsYW5rTm9kZS5pc09wZW5cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxhbmtOb2RlLmNhbk9wZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiYmxhbmtOb2RlLmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgW25vZGVdPVwiYmxhbmtOb2RlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7YmxhbmtOb2RlLnRlcm0ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuPnt7YmxhbmtOb2RlLm9yaWdpbmFsIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYmxhbmtOb2RlLmlzT3JpZ2luYWwgfHwgYmxhbmtOb2RlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vdFVwZGF0ZWRcIj5cbiAgICAgICAgICAgICAgICB7e2JsYW5rTm9kZS5yZWNhbGN1bGF0ZWQgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm9yaWdpbmFsVmFsdWVzPy5sZW5ndGhcIiBjbGFzcz1cImlzLW5vd3JhcFwiPlxuICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YSAqbmdJZj1cImJsYW5rTm9kZS5pc1JlY2FsY3VsYXRlZFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJsYW5rTm9kZS5yZWNhbGN1bGF0ZWRcIlxuICAgICAgICAgICAgICAgIFtvcmlnaW5hbFZhbHVlXT1cImJsYW5rTm9kZS5vcmlnaW5hbFwiXG4gICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGE+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxhbmtOb2RlLmtleXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2YgYmxhbmtOb2RlLmtleXNcIlxuICAgICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhhcy1zdWItcm93c109XCJibGFua05vZGUuc3ViVmFsdWVzPy5sZW5ndGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsLTMgaGFzLXRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGlzLWFsaWduLXRvcFwiPkZpZWxkOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nSWY9XCJibGFua05vZGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgYmxhbmtOb2RlLnR5cGUgKyAnIycgKyBrZXlcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2tleX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wXCIgKm5nSWY9XCIhYmxhbmtOb2RlLnR5cGVcIj57e2tleX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvcmlnaW5hbFZhbHVlcz8ubGVuZ3RoID8gMyA6IDJcIj48L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJibGFuay1ub2RlLWluZGV4LWtleVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlLCBtZXRob2RJZDoga2V5fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJtZXRob2RNb2RlbHNDb3VudCA+IDFcIiBbYXR0ci5jb2xzcGFuXT1cIm1ldGhvZE1vZGVsc0NvdW50IC0gMVwiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViVmFsdWUgb2YgYmxhbmtOb2RlLnN1YlZhbHVlc1wiXG4gICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIGhhcy10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1hbGlnbi10b3BcIj57e3N1YlZhbHVlLmtleSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJWYWx1ZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTEgaXMtYWxpZ24tdG9wXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3ViVmFsdWUua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidiYWNrZ3JvdW5kRGF0YSdcIj57e3N1YlZhbHVlLnZhbHVlIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBbbm9kZV09XCJ7J0B0eXBlJzonVGVybScsJ0BpZCc6c3ViVmFsdWUudmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tzdWJWYWx1ZS52YWx1ZSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvcmlnaW5hbFZhbHVlcz8ubGVuZ3RoID8gMyA6IDJcIj48L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2JsYW5rTm9kZTogYmxhbmtOb2RlLCBzdWJWYWx1ZTogc3ViVmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpcy1zaXplLTcgaXMtaXRhbGljXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtMSBteS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBwci0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93TGVnZW5kID0gIXNob3dMZWdlbmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1kb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIj5MZWdlbmQ6PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cImNvbnRlbnQgcGwtMlwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXNob3dMZWdlbmRcIj5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIGNsYXNzPVwiaGFzLXRleHQte3tsb2dDb2xvcltzdGF0dXMudmFsdWVdfX1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBMb2dTdGF0dXMgfCBrZXlzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW3N0YXR1cy52YWx1ZV1cIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj57e3N0YXR1cy52YWx1ZX19PC9zcGFuPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaGFzLXRleHQtcmlnaHRcIiAqbmdJZj1cImZpbHRlcmVkVHlwZVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgY2hlY2tib3hcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9ubHlXaXRoRGF0YVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZpbHRlclJlc3VsdHMoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPlNob3cgb25seSByZWNhbGN1bGF0ZWQge3tmaWx0ZXJlZFR5cGUgfCBwbHVyYWxpemV9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVscyBsZXQtYmxhbmtOb2RlPVwiYmxhbmtOb2RlXCIgbGV0LXN1YlZhbHVlPVwic3ViVmFsdWVcIj5cbiAgPHRkIGNsYXNzPVwiYmxhbmstbm9kZS1pbmRleC17e2l9fVwiICpuZ0Zvcj1cImxldCBjIG9mIG1ldGhvZE1vZGVsc0NvdW50IHwgdGltZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsaWRTdWJWYWx1ZShibGFua05vZGUsIGksIHN1YlZhbHVlKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1ldGhvZElkQXQoYmxhbmtOb2RlLCBpLCBzdWJWYWx1ZSk7IGxldCBtZXRob2RJZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWw7IGNvbnRleHQ6IHtibGFua05vZGU6IGJsYW5rTm9kZSwgbWV0aG9kSWQ6IG1ldGhvZElkfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVsIGxldC1ibGFua05vZGU9XCJibGFua05vZGVcIiBsZXQtbWV0aG9kSWQ9XCJtZXRob2RJZFwiPlxuICA8c3BhblxuICAgIFtjbGFzcy50cmlnZ2VyLXBvcG92ZXJdPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkKVwiXG4gICAgW25nYlBvcG92ZXJdPVwibG9nRGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAoY2xpY2spPVwiaGFzTG9nRGV0YWlscyhibGFua05vZGUsIG1ldGhvZElkKSA/IHRvZ2dsZVBvcG92ZXIocCwgeyBsb2c6IGJsYW5rTm9kZS5sb2dzW21ldGhvZElkXSB9KSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1jYXBpdGFsaXplZFwiPnt7bWV0aG9kTmFtZShibGFua05vZGUsIG1ldGhvZElkKX19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiICpuZ0lmPVwiaGFzTG9nKGJsYW5rTm9kZSwgbWV0aG9kSWQpICYmIGJsYW5rTm9kZS5sb2dzW21ldGhvZElkXS5tZXRob2RUaWVyXCI+W3t7YmxhbmtOb2RlLmxvZ3NbbWV0aG9kSWRdLm1ldGhvZFRpZXJ9fV08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwbC0xIGhhcy10ZXh0LXt7bG9nQ29sb3JbbG9nU3RhdHVzKGJsYW5rTm9kZSwgbWV0aG9kSWQpXX19XCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW2xvZ1N0YXR1cyhibGFua05vZGUsIG1ldGhvZElkKV1cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vdFVwZGF0ZWQ+XG4gIDxzcGFuPm5vdCB1cGRhdGVkPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2dEZXRhaWxzIGxldC1sb2c9XCJsb2dcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZy5yZXF1aXJlbWVudHNcIj5cbiAgICA8cCAqbmdGb3I9XCJsZXQga2V5IG9mIGxvZy5yZXF1aXJlbWVudHMgfCBrZXlzXCIgY2xhc3M9XCJoYXMtdGV4dC17e3JlcXVpcmVtZW50Q29sb3Ioa2V5LnZhbHVlKX19XCI+XG4gICAgICB7e2tleS5rZXl9fToge3trZXkudmFsdWV9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubG9nc1wiPlxuICAgIDxwICpuZ0Zvcj1cImxldCBrZXkgb2YgbG9nLmxvZ3MgfCBrZXlzXCI+XG4gICAgICB7e2tleS5rZXl9fToge3trZXkudmFsdWV9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2cubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFwiPlxuICAgIDxwIGNsYXNzPVwibXQtMlwiPk1pc3NpbmcgbG9va3Vwczo8L3A+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggbWItMFwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFja1wiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkZpbGVuYW1lPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkNvbHVtbiBUaXRsZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Sb3cgKHRlcm0uaWQpPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBsb2cubWlzc2luZ0xvb2t1cHNcIj5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEuZmlsZW5hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLmNvbHVtbn19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEudGVybUlkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -33,6 +33,7 @@ export class SitesMapsComponent {
33
33
  this.loaded = false;
34
34
  this.loadPolygons = true;
35
35
  this.sites = [];
36
+ this.selected = [];
36
37
  this.nodes = [];
37
38
  this.center = defaultCenter;
38
39
  this.zoom = 2;
@@ -49,6 +50,9 @@ export class SitesMapsComponent {
49
50
  ngAfterViewInit() {
50
51
  return this.googleLoaded && this.loadData();
51
52
  }
53
+ isSelected(site) {
54
+ return this.selected.length === 0 || this.selected.includes(site['@id']);
55
+ }
52
56
  loadData() {
53
57
  return __awaiter(this, void 0, void 0, function* () {
54
58
  // loaded data as geojson
@@ -116,7 +120,8 @@ export class SitesMapsComponent {
116
120
  });
117
121
  }
118
122
  getSites() {
119
- const nodes = this.sites && this.sites.length ? this.sites : this.nodes;
123
+ var _a;
124
+ const nodes = ((_a = this.sites) === null || _a === void 0 ? void 0 : _a.length) ? this.sites.filter(site => this.isSelected(site)) : this.nodes;
120
125
  return Promise.all(nodes.map(node => this.siteData(node)));
121
126
  }
122
127
  termPolygons(id) {
@@ -135,7 +140,7 @@ export class SitesMapsComponent {
135
140
  }
136
141
  }
137
142
  SitesMapsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SitesMapsComponent, deps: [{ token: i1.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
138
- SitesMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SitesMapsComponent, selector: "he-sites-maps", inputs: { loadPolygons: "loadPolygons", sites: "sites", nodes: "nodes", center: "center", zoom: "zoom", showNotice: "showNotice" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<google-map *ngIf=\"googleLoaded\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n></google-map>\n\n<p *ngIf=\"showNotice\" class=\"mt-2 is-italic is-size-7\">The information provided might not be complete</p>\n\n<div class=\"no-location has-text-center has-text-light\" *ngIf=\"showNoLocation\">\n <span>No precise location data</span>\n</div>\n", styles: [":host{display:block;height:100%;position:relative;width:100%}.no-location{background-color:#0000004d;left:0;height:100%;position:absolute;top:0;width:100%;z-index:9}.no-location>span{display:inline-block;margin-top:12%}\n"], components: [{ type: i2.GoogleMap, selector: "google-map", inputs: ["height", "width", "center", "zoom", "options", "mapTypeId"], outputs: ["authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
143
+ SitesMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SitesMapsComponent, selector: "he-sites-maps", inputs: { loadPolygons: "loadPolygons", sites: "sites", selected: "selected", nodes: "nodes", center: "center", zoom: "zoom", showNotice: "showNotice" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<google-map *ngIf=\"googleLoaded\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n></google-map>\n\n<p *ngIf=\"showNotice\" class=\"mt-2 is-italic is-size-7\">The information provided might not be complete</p>\n\n<div class=\"no-location has-text-center has-text-light\" *ngIf=\"showNoLocation\">\n <span>No precise location data</span>\n</div>\n", styles: [":host{display:block;height:100%;position:relative;width:100%}.no-location{background-color:#0000004d;left:0;height:100%;position:absolute;top:0;width:100%;z-index:9}.no-location>span{display:inline-block;margin-top:12%}\n"], components: [{ type: i2.GoogleMap, selector: "google-map", inputs: ["height", "width", "center", "zoom", "options", "mapTypeId"], outputs: ["authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
139
144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SitesMapsComponent, decorators: [{
140
145
  type: Component,
141
146
  args: [{
@@ -150,6 +155,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
150
155
  type: Input
151
156
  }], sites: [{
152
157
  type: Input
158
+ }], selected: [{
159
+ type: Input
153
160
  }], nodes: [{
154
161
  type: Input
155
162
  }], center: [{
@@ -159,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
159
166
  }], showNotice: [{
160
167
  type: Input
161
168
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2l0ZXMvc2l0ZXMtbWFwcy9zaXRlcy1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tYXBzL3NpdGVzLW1hcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlCLEtBQUssRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sZUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBVSxRQUFRLEVBQXdELE1BQU0sc0JBQXNCLENBQUM7QUFDOUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBRXJGLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsR0FBRyxFQUFFLFFBQVE7SUFD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Q0FBQzthQUNYO1FBQ0gsQ0FBQztLQUFBOztnSEE3SFUsa0JBQWtCO29HQUFsQixrQkFBa0IsOE5BR2xCLFNBQVMsZ0RDaER0Qiw4WEFZQTs0RkRpQ2Esa0JBQWtCO2tCQUw5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDM0M7b0dBS1MsR0FBRztzQkFEVixTQUFTO3VCQUFDLFNBQVM7Z0JBR1osWUFBWTtzQkFEbkIsS0FBSztnQkFHRSxLQUFLO3NCQURaLEtBQUs7Z0JBR0UsS0FBSztzQkFEWixLQUFLO2dCQUdDLE1BQU07c0JBRFosS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHb29nbGVNYXAgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgTWFya2VyQ2x1c3RlcmVyIGZyb20gJ0Bnb29nbGUvbWFya2VyY2x1c3RlcmVycGx1cyc7XG5pbXBvcnQgeyBKU09OTEQsIE5vZGVUeXBlLCBJU2l0ZUpTT05MRCwgU2l0ZSwgSU9yZ2FuaXNhdGlvbkpTT05MRCwgT3JnYW5pc2F0aW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyB0ZXJtTG9jYXRpb24sIHRlcm1Mb2NhdGlvbk5hbWUgfSBmcm9tICcuLi8uLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBjbHVzdGVyZXJJbWFnZSwgY3JlYXRlTWFya2VyLCBwb2x5Z29uc0Zyb21GZWF0dXJlLCBwb2x5Z29uQm91bmRzLCBzdHJva2VTdHlsZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tYXBzLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIHdhaXRGb3IgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG50eXBlIHNpdGUgPSBJU2l0ZUpTT05MRCB8IFNpdGUgfCBJT3JnYW5pc2F0aW9uSlNPTkxEIHwgT3JnYW5pc2F0aW9uO1xuXG5jb25zdCBpc1NpdGUgPSAoeyAnQHR5cGUnOiB0eXBlLCAnQGlkJzogaWQgfTogYW55KSA9PiB0eXBlID09PSBOb2RlVHlwZS5TaXRlICYmICEhaWQ7XG5cbmNvbnN0IHNpdGVMb2NhdGlvbiA9ICh7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTogc2l0ZSkgPT4gbGF0aXR1ZGUgJiYgbG9uZ2l0dWRlID8gKHtcbiAgbGF0OiBsYXRpdHVkZSxcbiAgbG5nOiBsb25naXR1ZGVcbn0pIDogdW5kZWZpbmVkO1xuXG5jb25zdCBzaXRlRGVmYXVsdExvY2F0aW9uID0gKHsgcmVnaW9uLCBjb3VudHJ5IH06IHNpdGUpID0+IHtcbiAgY29uc3QgbWFya2VycyA9IFtcbiAgICByZWdpb24gPyBjcmVhdGVNYXJrZXIodGVybUxvY2F0aW9uKHJlZ2lvbiksIHRlcm1Mb2NhdGlvbk5hbWUocmVnaW9uKS5uYW1lLCB1bmRlZmluZWQsIDIwKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5ID8gY3JlYXRlTWFya2VyKHRlcm1Mb2NhdGlvbihjb3VudHJ5KSwgdGVybUxvY2F0aW9uTmFtZShjb3VudHJ5KS5uYW1lLCB1bmRlZmluZWQsIDQwKSA6IHVuZGVmaW5lZFxuICBdLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIChtYXJrZXJzLmxlbmd0aCA/IG1hcmtlcnNbMF0gOiB1bmRlZmluZWQpIGFzIGdvb2dsZS5tYXBzLk1hcmtlcjtcbn07XG5cbmNvbnN0IHNpdGVNYXJrZXIgPSAoc2l0ZTogc2l0ZSkgPT4gY3JlYXRlTWFya2VyKHNpdGUgPyBzaXRlTG9jYXRpb24oc2l0ZSkgOiB1bmRlZmluZWQsIHNpdGUubmFtZSk7XG5cbmNvbnN0IHNpdGVQb2x5Z29uID0gKHsgYm91bmRhcnkgfTogc2l0ZSkgPT4gKFxuICBib3VuZGFyeSA/IHBvbHlnb25zRnJvbUZlYXR1cmUoYm91bmRhcnkpIDogdW5kZWZpbmVkXG4pIGFzIGdvb2dsZS5tYXBzLlBvbHlnb25bXTtcblxuY29uc3QgcmVnaW9ucyA9IChzaXRlczogc2l0ZVtdKTogc3RyaW5nW10gPT4gdW5pcXVlKFxuICBzaXRlcy5tYXAoKHsgY291bnRyeSwgcmVnaW9uIH0pID0+IHJlZ2lvbiA/IHJlZ2lvblsnQGlkJ10gOiAoY291bnRyeSA/IGNvdW50cnlbJ0BpZCddIDogbnVsbCkpLmZpbHRlcihCb29sZWFuKVxuKTtcblxuY29uc3QgZGVmYXVsdENlbnRlciA9IHsgbGF0OiAwLCBsbmc6IDAgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc2l0ZXMtbWFwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaXRlcy1tYXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2l0ZXMtbWFwcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpdGVzTWFwc0NvbXBvbmVudDxDIGV4dGVuZHMgSlNPTkxEPFQ+LCBUIGV4dGVuZHMgTm9kZVR5cGU+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHVibGljIGxvYWRlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoR29vZ2xlTWFwKVxuICBwcml2YXRlIG1hcD86IEdvb2dsZU1hcDtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBsb2FkUG9seWdvbnMgPSB0cnVlO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHNpdGVzOiBzaXRlW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBub2RlczogQ1tdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjZW50ZXIgPSBkZWZhdWx0Q2VudGVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgem9vbSA9IDI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Tm90aWNlID0gdHJ1ZTtcblxuICBwdWJsaWMgZ29vZ2xlTG9hZGVkID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Tm9Mb2NhdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB3YWl0Rm9yKCdnb29nbGUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmdvb2dsZUxvYWRlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+ICF0aGlzLmxvYWRlZCAmJiB0aGlzLmxvYWREYXRhKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHJldHVybiB0aGlzLmdvb2dsZUxvYWRlZCAmJiB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIC8vIGxvYWRlZCBkYXRhIGFzIGdlb2pzb25cbiAgICB0aGlzLm1hcCEuZ29vZ2xlTWFwIS5kYXRhLnNldFN0eWxlKCgpID0+ICh7IC4uLnN0cm9rZVN0eWxlLCBzdHJva2VPcGFjaXR5OiAwLjEgfSkpO1xuXG4gICAgY29uc3Qgc2l0ZXMgPSBhd2FpdCB0aGlzLmdldFNpdGVzKCk7XG4gICAgY29uc3QgbWFya2VycyA9IHRoaXMuYWRkU2l0ZU1hcmtlcnMoc2l0ZXMpO1xuICAgIC8vIGFkZCB0aGUgc2l0ZS5ib3VuZGFyeSBpZiBleGlzdFxuICAgIGNvbnN0IHBvbHlnb25zID0gc2l0ZXMuZmxhdE1hcChzaXRlUG9seWdvbikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHBvbHlnb25zLm1hcChwb2x5Z29uID0+IHBvbHlnb24/LnNldE1hcCh0aGlzLm1hcCEuZ29vZ2xlTWFwISkpO1xuICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIGFkZCB0aGUgZGVmYXVsdCBzaXRlIHBvbHlnb25zIGZyb20gR0FETSByZWdpb24gaWYgYW55XG4gICAgY29uc3QgdGVybVBvbHlnb25zID0gKGF3YWl0IFByb21pc2UuYWxsKHJlZ2lvbnMoc2l0ZXMpLm1hcCh2ID0+IHRoaXMuYWRkVGVybXNQb2x5Z29ucyh2KSkpKS5mbGF0KCk7XG5cbiAgICB0aGlzLnNob3dOb0xvY2F0aW9uID0gbWFya2Vycy5sZW5ndGggPT09IDAgJiYgcG9seWdvbnMubGVuZ3RoID09PSAwICYmIHRlcm1Qb2x5Z29ucy5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIG1hcmtlcnMubGVuZ3RoID9cbiAgICAgIHRoaXMuY2VudGVyTWFya2VyKG1hcmtlcnNbMF0hKSA6XG4gICAgICB0aGlzLmNlbnRlclBvbHlnb25zKHBvbHlnb25zLmxlbmd0aCA/IHBvbHlnb25zIDogdGVybVBvbHlnb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFya2VycyhtYXJrZXJzOiBnb29nbGUubWFwcy5NYXJrZXJbXSwgY2x1c3RlciA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXIgP1xuICAgICAgbmV3IE1hcmtlckNsdXN0ZXJlcih0aGlzLm1hcCEuZ29vZ2xlTWFwISwgbWFya2VycywgeyBpbWFnZVBhdGg6IGNsdXN0ZXJlckltYWdlIH0pIDpcbiAgICAgIG1hcmtlcnMubWFwKG1hcmtlciA9PiBtYXJrZXIuc2V0TWFwKHRoaXMubWFwIS5nb29nbGVNYXAhKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFRlcm1zUG9seWdvbnMoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxvYWRQb2x5Z29ucyA/IGF3YWl0IHRoaXMudGVybVBvbHlnb25zKGlkKSA6IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjZW50ZXJNYXJrZXIobWFya2VyOiBnb29nbGUubWFwcy5NYXJrZXIpIHtcbiAgICBjb25zdCBjZW50ZXIgPSBtYXJrZXIuZ2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLmNlbnRlciA9IGNlbnRlciA/IHsgbGF0OiBjZW50ZXIubGF0KCksIGxuZzogY2VudGVyLmxuZygpIH0gOiBkZWZhdWx0Q2VudGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjZW50ZXJQb2x5Z29ucyhwb2x5Z29uczogZ29vZ2xlLm1hcHMuUG9seWdvbltdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwb2x5Z29ucy5sZW5ndGggPyB0aGlzLm1hcCEuZ29vZ2xlTWFwIS5maXRCb3VuZHMocG9seWdvbkJvdW5kcyhwb2x5Z29ucykpIDogbnVsbDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHBvbHlnb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1hcCEuZ29vZ2xlTWFwIS5maXRCb3VuZHMocG9seWdvbkJvdW5kcyhwb2x5Z29uc1swXSkpO1xuICAgICAgICB0aGlzLnpvb20gPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkU2l0ZU1hcmtlcnMoc2l0ZXM6IHNpdGVbXSkge1xuICAgIGNvbnN0IHNpdGVNYXJrZXJzID0gc2l0ZXMubWFwKHNpdGVNYXJrZXIpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBtYXJrZXJzID0gc2l0ZU1hcmtlcnMubGVuZ3RoID8gc2l0ZU1hcmtlcnMgOiBzaXRlcy5tYXAoc2l0ZURlZmF1bHRMb2NhdGlvbikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHRoaXMuYWRkTWFya2VycyhtYXJrZXJzLCAhIXNpdGVNYXJrZXJzLmxlbmd0aCk7XG4gICAgcmV0dXJuIG1hcmtlcnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRTaXRlKG5vZGU6IGFueSkge1xuICAgIC8vIG1lYW5zIHRoZSBzaXRlIHdhcyBhbHJlYWR5IGRvd25sb2FkZWRcbiAgICByZXR1cm4gJ3NjaGVtYVZlcnNpb24nIGluIG5vZGUgPyBub2RlIDogYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXQ8SVNpdGVKU09OTEQgfCBJT3JnYW5pc2F0aW9uSlNPTkxEPihub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2l0ZURhdGEobm9kZTogYW55KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIE5vZGVUeXBlLlNpdGUsXG4gICAgICBOb2RlVHlwZS5PcmdhbmlzYXRpb25cbiAgICBdLmluY2x1ZGVzKG5vZGUudHlwZSkgPyBub2RlIDogKFxuICAgICAgaXNTaXRlKG5vZGUpID9cbiAgICAgICAgdGhpcy5sb2FkU2l0ZShub2RlKSA6IChcbiAgICAgICAgJ3NpdGUnIGluIG5vZGUgJiYgaXNTaXRlKG5vZGUuc2l0ZSkgP1xuICAgICAgICAgIHRoaXMubG9hZFNpdGUobm9kZS5zaXRlKSA6XG4gICAgICAgICAgdGhpcy5zaXRlRGF0YShhd2FpdCB0aGlzLmxvYWRTaXRlKG5vZGUpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaXRlcygpOiBQcm9taXNlPHNpdGVbXT4ge1xuICAgIGNvbnN0IG5vZGVzOiBhbnlbXSA9IHRoaXMuc2l0ZXMgJiYgdGhpcy5zaXRlcy5sZW5ndGggPyB0aGlzLnNpdGVzIDogdGhpcy5ub2RlcztcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwobm9kZXMubWFwKG5vZGUgPT4gdGhpcy5zaXRlRGF0YShub2RlKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0ZXJtUG9seWdvbnMoaWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5kb3dubG9hZFJhdyhgJHtiYXNlVXJsKCl9L2dhZG0vJHtpZH0uZ2VvanNvbmApO1xuICAgICAgY29uc3QgcG9seWdvbnMgPSBwb2x5Z29uc0Zyb21GZWF0dXJlKGRhdGEpO1xuICAgICAgcG9seWdvbnMubWFwKHBvbHlnb24gPT4gcG9seWdvbi5zZXRNYXAodGhpcy5tYXAhLmdvb2dsZU1hcCEpKTtcbiAgICAgIHJldHVybiBwb2x5Z29ucztcbiAgICB9XG4gICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgIC8vIGlnbm9yZSBlcnJvciBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuIiwiPGdvb2dsZS1tYXAgKm5nSWY9XCJnb29nbGVMb2FkZWRcIlxuICBoZWlnaHQ9XCIxMDAlXCJcbiAgd2lkdGg9XCIxMDAlXCJcbiAgW3pvb21dPVwiem9vbVwiXG4gIFtjZW50ZXJdPVwiY2VudGVyXCJcbj48L2dvb2dsZS1tYXA+XG5cbjxwICpuZ0lmPVwic2hvd05vdGljZVwiIGNsYXNzPVwibXQtMiBpcy1pdGFsaWMgaXMtc2l6ZS03XCI+VGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIG1pZ2h0IG5vdCBiZSBjb21wbGV0ZTwvcD5cblxuPGRpdiBjbGFzcz1cIm5vLWxvY2F0aW9uIGhhcy10ZXh0LWNlbnRlciBoYXMtdGV4dC1saWdodFwiICpuZ0lmPVwic2hvd05vTG9jYXRpb25cIj5cbiAgPHNwYW4+Tm8gcHJlY2lzZSBsb2NhdGlvbiBkYXRhPC9zcGFuPlxuPC9kaXY+XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2l0ZXMvc2l0ZXMtbWFwcy9zaXRlcy1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tYXBzL3NpdGVzLW1hcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlCLEtBQUssRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sZUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBVSxRQUFRLEVBQXdELE1BQU0sc0JBQXNCLENBQUM7QUFDOUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBRXJGLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsR0FBRyxFQUFFLFFBQVE7SUFD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bkYsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUMsU0FBVSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsT0FBTyxRQUFRLENBQUM7YUFDakI7WUFDRCxPQUFPLElBQUksRUFBRTtnQkFDWCwwQ0FBMEM7Z0JBQzFDLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDO0tBQUE7O2dIQW5JVSxrQkFBa0I7b0dBQWxCLGtCQUFrQixvUEFHbEIsU0FBUyxnRENoRHRCLDhYQVlBOzRGRGlDYSxrQkFBa0I7a0JBTDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLFNBQVMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2lCQUMzQztvR0FLUyxHQUFHO3NCQURWLFNBQVM7dUJBQUMsU0FBUztnQkFHWixZQUFZO3NCQURuQixLQUFLO2dCQUdFLEtBQUs7c0JBRFosS0FBSztnQkFHRSxRQUFRO3NCQURmLEtBQUs7Z0JBR0UsS0FBSztzQkFEWixLQUFLO2dCQUdDLE1BQU07c0JBRFosS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHb29nbGVNYXAgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgTWFya2VyQ2x1c3RlcmVyIGZyb20gJ0Bnb29nbGUvbWFya2VyY2x1c3RlcmVycGx1cyc7XG5pbXBvcnQgeyBKU09OTEQsIE5vZGVUeXBlLCBJU2l0ZUpTT05MRCwgU2l0ZSwgSU9yZ2FuaXNhdGlvbkpTT05MRCwgT3JnYW5pc2F0aW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyB0ZXJtTG9jYXRpb24sIHRlcm1Mb2NhdGlvbk5hbWUgfSBmcm9tICcuLi8uLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBjbHVzdGVyZXJJbWFnZSwgY3JlYXRlTWFya2VyLCBwb2x5Z29uc0Zyb21GZWF0dXJlLCBwb2x5Z29uQm91bmRzLCBzdHJva2VTdHlsZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tYXBzLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIHdhaXRGb3IgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG50eXBlIHNpdGUgPSBJU2l0ZUpTT05MRCB8IFNpdGUgfCBJT3JnYW5pc2F0aW9uSlNPTkxEIHwgT3JnYW5pc2F0aW9uO1xuXG5jb25zdCBpc1NpdGUgPSAoeyAnQHR5cGUnOiB0eXBlLCAnQGlkJzogaWQgfTogYW55KSA9PiB0eXBlID09PSBOb2RlVHlwZS5TaXRlICYmICEhaWQ7XG5cbmNvbnN0IHNpdGVMb2NhdGlvbiA9ICh7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTogc2l0ZSkgPT4gbGF0aXR1ZGUgJiYgbG9uZ2l0dWRlID8gKHtcbiAgbGF0OiBsYXRpdHVkZSxcbiAgbG5nOiBsb25naXR1ZGVcbn0pIDogdW5kZWZpbmVkO1xuXG5jb25zdCBzaXRlRGVmYXVsdExvY2F0aW9uID0gKHsgcmVnaW9uLCBjb3VudHJ5IH06IHNpdGUpID0+IHtcbiAgY29uc3QgbWFya2VycyA9IFtcbiAgICByZWdpb24gPyBjcmVhdGVNYXJrZXIodGVybUxvY2F0aW9uKHJlZ2lvbiksIHRlcm1Mb2NhdGlvbk5hbWUocmVnaW9uKS5uYW1lLCB1bmRlZmluZWQsIDIwKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5ID8gY3JlYXRlTWFya2VyKHRlcm1Mb2NhdGlvbihjb3VudHJ5KSwgdGVybUxvY2F0aW9uTmFtZShjb3VudHJ5KS5uYW1lLCB1bmRlZmluZWQsIDQwKSA6IHVuZGVmaW5lZFxuICBdLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIChtYXJrZXJzLmxlbmd0aCA/IG1hcmtlcnNbMF0gOiB1bmRlZmluZWQpIGFzIGdvb2dsZS5tYXBzLk1hcmtlcjtcbn07XG5cbmNvbnN0IHNpdGVNYXJrZXIgPSAoc2l0ZTogc2l0ZSkgPT4gY3JlYXRlTWFya2VyKHNpdGUgPyBzaXRlTG9jYXRpb24oc2l0ZSkgOiB1bmRlZmluZWQsIHNpdGUubmFtZSk7XG5cbmNvbnN0IHNpdGVQb2x5Z29uID0gKHsgYm91bmRhcnkgfTogc2l0ZSkgPT4gKFxuICBib3VuZGFyeSA/IHBvbHlnb25zRnJvbUZlYXR1cmUoYm91bmRhcnkpIDogdW5kZWZpbmVkXG4pIGFzIGdvb2dsZS5tYXBzLlBvbHlnb25bXTtcblxuY29uc3QgcmVnaW9ucyA9IChzaXRlczogc2l0ZVtdKTogc3RyaW5nW10gPT4gdW5pcXVlKFxuICBzaXRlcy5tYXAoKHsgY291bnRyeSwgcmVnaW9uIH0pID0+IHJlZ2lvbiA/IHJlZ2lvblsnQGlkJ10gOiAoY291bnRyeSA/IGNvdW50cnlbJ0BpZCddIDogbnVsbCkpLmZpbHRlcihCb29sZWFuKVxuKTtcblxuY29uc3QgZGVmYXVsdENlbnRlciA9IHsgbGF0OiAwLCBsbmc6IDAgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc2l0ZXMtbWFwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaXRlcy1tYXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2l0ZXMtbWFwcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpdGVzTWFwc0NvbXBvbmVudDxDIGV4dGVuZHMgSlNPTkxEPFQ+LCBUIGV4dGVuZHMgTm9kZVR5cGU+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHVibGljIGxvYWRlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoR29vZ2xlTWFwKVxuICBwcml2YXRlIG1hcD86IEdvb2dsZU1hcDtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBsb2FkUG9seWdvbnMgPSB0cnVlO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHNpdGVzOiBzaXRlW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzZWxlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBub2RlczogQ1tdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjZW50ZXIgPSBkZWZhdWx0Q2VudGVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgem9vbSA9IDI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Tm90aWNlID0gdHJ1ZTtcblxuICBwdWJsaWMgZ29vZ2xlTG9hZGVkID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Tm9Mb2NhdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB3YWl0Rm9yKCdnb29nbGUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmdvb2dsZUxvYWRlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+ICF0aGlzLmxvYWRlZCAmJiB0aGlzLmxvYWREYXRhKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHJldHVybiB0aGlzLmdvb2dsZUxvYWRlZCAmJiB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGlzU2VsZWN0ZWQoc2l0ZTogc2l0ZSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnNlbGVjdGVkLmluY2x1ZGVzKHNpdGVbJ0BpZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERhdGEoKSB7XG4gICAgLy8gbG9hZGVkIGRhdGEgYXMgZ2VvanNvblxuICAgIHRoaXMubWFwIS5nb29nbGVNYXAhLmRhdGEuc2V0U3R5bGUoKCkgPT4gKHsgLi4uc3Ryb2tlU3R5bGUsIHN0cm9rZU9wYWNpdHk6IDAuMSB9KSk7XG5cbiAgICBjb25zdCBzaXRlcyA9IGF3YWl0IHRoaXMuZ2V0U2l0ZXMoKTtcbiAgICBjb25zdCBtYXJrZXJzID0gdGhpcy5hZGRTaXRlTWFya2VycyhzaXRlcyk7XG4gICAgLy8gYWRkIHRoZSBzaXRlLmJvdW5kYXJ5IGlmIGV4aXN0XG4gICAgY29uc3QgcG9seWdvbnMgPSBzaXRlcy5mbGF0TWFwKHNpdGVQb2x5Z29uKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcG9seWdvbnMubWFwKHBvbHlnb24gPT4gcG9seWdvbj8uc2V0TWFwKHRoaXMubWFwIS5nb29nbGVNYXAhKSk7XG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gYWRkIHRoZSBkZWZhdWx0IHNpdGUgcG9seWdvbnMgZnJvbSBHQURNIHJlZ2lvbiBpZiBhbnlcbiAgICBjb25zdCB0ZXJtUG9seWdvbnMgPSAoYXdhaXQgUHJvbWlzZS5hbGwocmVnaW9ucyhzaXRlcykubWFwKHYgPT4gdGhpcy5hZGRUZXJtc1BvbHlnb25zKHYpKSkpLmZsYXQoKTtcblxuICAgIHRoaXMuc2hvd05vTG9jYXRpb24gPSBtYXJrZXJzLmxlbmd0aCA9PT0gMCAmJiBwb2x5Z29ucy5sZW5ndGggPT09IDAgJiYgdGVybVBvbHlnb25zLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gbWFya2Vycy5sZW5ndGggP1xuICAgICAgdGhpcy5jZW50ZXJNYXJrZXIobWFya2Vyc1swXSEpIDpcbiAgICAgIHRoaXMuY2VudGVyUG9seWdvbnMocG9seWdvbnMubGVuZ3RoID8gcG9seWdvbnMgOiB0ZXJtUG9seWdvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNYXJrZXJzKG1hcmtlcnM6IGdvb2dsZS5tYXBzLk1hcmtlcltdLCBjbHVzdGVyID0gZmFsc2UpIHtcbiAgICByZXR1cm4gY2x1c3RlciA/XG4gICAgICBuZXcgTWFya2VyQ2x1c3RlcmVyKHRoaXMubWFwIS5nb29nbGVNYXAhLCBtYXJrZXJzLCB7IGltYWdlUGF0aDogY2x1c3RlcmVySW1hZ2UgfSkgOlxuICAgICAgbWFya2Vycy5tYXAobWFya2VyID0+IG1hcmtlci5zZXRNYXAodGhpcy5tYXAhLmdvb2dsZU1hcCEpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkVGVybXNQb2x5Z29ucyhpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFBvbHlnb25zID8gYXdhaXQgdGhpcy50ZXJtUG9seWdvbnMoaWQpIDogW107XG4gIH1cblxuICBwcml2YXRlIGNlbnRlck1hcmtlcihtYXJrZXI6IGdvb2dsZS5tYXBzLk1hcmtlcikge1xuICAgIGNvbnN0IGNlbnRlciA9IG1hcmtlci5nZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuY2VudGVyID0gY2VudGVyID8geyBsYXQ6IGNlbnRlci5sYXQoKSwgbG5nOiBjZW50ZXIubG5nKCkgfSA6IGRlZmF1bHRDZW50ZXI7XG4gIH1cblxuICBwcml2YXRlIGNlbnRlclBvbHlnb25zKHBvbHlnb25zOiBnb29nbGUubWFwcy5Qb2x5Z29uW10pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBvbHlnb25zLmxlbmd0aCA/IHRoaXMubWFwIS5nb29nbGVNYXAhLmZpdEJvdW5kcyhwb2x5Z29uQm91bmRzKHBvbHlnb25zKSkgOiBudWxsO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAocG9seWdvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWFwIS5nb29nbGVNYXAhLmZpdEJvdW5kcyhwb2x5Z29uQm91bmRzKHBvbHlnb25zWzBdKSk7XG4gICAgICAgIHRoaXMuem9vbSA9IDM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTaXRlTWFya2VycyhzaXRlczogc2l0ZVtdKSB7XG4gICAgY29uc3Qgc2l0ZU1hcmtlcnMgPSBzaXRlcy5tYXAoc2l0ZU1hcmtlcikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IG1hcmtlcnMgPSBzaXRlTWFya2Vycy5sZW5ndGggPyBzaXRlTWFya2VycyA6IHNpdGVzLm1hcChzaXRlRGVmYXVsdExvY2F0aW9uKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5hZGRNYXJrZXJzKG1hcmtlcnMsICEhc2l0ZU1hcmtlcnMubGVuZ3RoKTtcbiAgICByZXR1cm4gbWFya2VycztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFNpdGUobm9kZTogYW55KSB7XG4gICAgLy8gbWVhbnMgdGhlIHNpdGUgd2FzIGFscmVhZHkgZG93bmxvYWRlZFxuICAgIHJldHVybiAnc2NoZW1hVmVyc2lvbicgaW4gbm9kZSA/IG5vZGUgOiBhd2FpdCB0aGlzLm5vZGVTZXJ2aWNlLmdldDxJU2l0ZUpTT05MRCB8IElPcmdhbmlzYXRpb25KU09OTEQ+KG5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaXRlRGF0YShub2RlOiBhbnkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgTm9kZVR5cGUuU2l0ZSxcbiAgICAgIE5vZGVUeXBlLk9yZ2FuaXNhdGlvblxuICAgIF0uaW5jbHVkZXMobm9kZS50eXBlKSA/IG5vZGUgOiAoXG4gICAgICBpc1NpdGUobm9kZSkgP1xuICAgICAgICB0aGlzLmxvYWRTaXRlKG5vZGUpIDogKFxuICAgICAgICAnc2l0ZScgaW4gbm9kZSAmJiBpc1NpdGUobm9kZS5zaXRlKSA/XG4gICAgICAgICAgdGhpcy5sb2FkU2l0ZShub2RlLnNpdGUpIDpcbiAgICAgICAgICB0aGlzLnNpdGVEYXRhKGF3YWl0IHRoaXMubG9hZFNpdGUobm9kZSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpdGVzKCk6IFByb21pc2U8c2l0ZVtdPiB7XG4gICAgY29uc3Qgbm9kZXM6IGFueVtdID0gdGhpcy5zaXRlcz8ubGVuZ3RoID8gdGhpcy5zaXRlcy5maWx0ZXIoc2l0ZSA9PiB0aGlzLmlzU2VsZWN0ZWQoc2l0ZSkpIDogdGhpcy5ub2RlcztcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwobm9kZXMubWFwKG5vZGUgPT4gdGhpcy5zaXRlRGF0YShub2RlKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0ZXJtUG9seWdvbnMoaWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5kb3dubG9hZFJhdyhgJHtiYXNlVXJsKCl9L2dhZG0vJHtpZH0uZ2VvanNvbmApO1xuICAgICAgY29uc3QgcG9seWdvbnMgPSBwb2x5Z29uc0Zyb21GZWF0dXJlKGRhdGEpO1xuICAgICAgcG9seWdvbnMubWFwKHBvbHlnb24gPT4gcG9seWdvbi5zZXRNYXAodGhpcy5tYXAhLmdvb2dsZU1hcCEpKTtcbiAgICAgIHJldHVybiBwb2x5Z29ucztcbiAgICB9XG4gICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgIC8vIGlnbm9yZSBlcnJvciBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuIiwiPGdvb2dsZS1tYXAgKm5nSWY9XCJnb29nbGVMb2FkZWRcIlxuICBoZWlnaHQ9XCIxMDAlXCJcbiAgd2lkdGg9XCIxMDAlXCJcbiAgW3pvb21dPVwiem9vbVwiXG4gIFtjZW50ZXJdPVwiY2VudGVyXCJcbj48L2dvb2dsZS1tYXA+XG5cbjxwICpuZ0lmPVwic2hvd05vdGljZVwiIGNsYXNzPVwibXQtMiBpcy1pdGFsaWMgaXMtc2l6ZS03XCI+VGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIG1pZ2h0IG5vdCBiZSBjb21wbGV0ZTwvcD5cblxuPGRpdiBjbGFzcz1cIm5vLWxvY2F0aW9uIGhhcy10ZXh0LWNlbnRlciBoYXMtdGV4dC1saWdodFwiICpuZ0lmPVwic2hvd05vTG9jYXRpb25cIj5cbiAgPHNwYW4+Tm8gcHJlY2lzZSBsb2NhdGlvbiBkYXRhPC9zcGFuPlxuPC9kaXY+XG4iXX0=