gamma-app-controller 2.0.25 → 4.0.1

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 (59) hide show
  1. package/esm2020/lib/application-controller/application-content.service.mjs +36 -36
  2. package/esm2020/lib/application-controller/application-controller.module.mjs +6 -1
  3. package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +2 -2
  4. package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +10 -27
  5. package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +6 -3
  6. package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +3 -3
  7. package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +32 -167
  8. package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +4 -3
  9. package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +12 -228
  10. package/esm2020/lib/application-controller/support-components/heat-map/heat-map.component.mjs +32 -3
  11. package/esm2020/lib/application-controller/support-components/single-card/single-card.component.mjs +24 -34
  12. package/esm2020/lib/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +3 -4
  13. package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +39 -109
  14. package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +15 -2
  15. package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +7 -272
  16. package/esm2020/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.mjs +68 -16
  17. package/esm2020/lib/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +439 -0
  18. package/esm2020/lib/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +66 -58
  19. package/esm2020/lib/shared/permission-helper.mjs +4 -35
  20. package/esm2020/lib/shared/template-dataset-call-service.mjs +5 -1
  21. package/esm2020/lib/shared/user-access/user-access.component.mjs +5 -5
  22. package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +275 -153
  23. package/esm2020/lib/template-module/KpiCreationModule/createKpi.service.mjs +6 -37
  24. package/esm2020/lib/template-module/KpiCreationModule/treeview/components/basic/basic.component.mjs +3 -3
  25. package/esm2020/lib/template-module/KpiCreationModule/treeview/components/collapsable/collapsable.component.mjs +15 -4
  26. package/esm2020/lib/template-module/KpiCreationModule/treeview/treeview.component.mjs +6 -4
  27. package/esm2020/lib/template-module/bookmarked-template/bookmarked-layout.service.mjs +8 -8
  28. package/esm2020/lib/template-module/cdrConfigModule/cdr-browser.service.mjs +2 -2
  29. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +2 -1
  30. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.service.mjs +8 -8
  31. package/esm2020/lib/template-module/defaulLandingMultiLayoutComponent/defaulLandingMultiLayout.service.mjs +8 -8
  32. package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-multi-layout.service.mjs +8 -8
  33. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.mjs +8 -16
  34. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +9 -12
  35. package/esm2020/public-api.mjs +3 -1
  36. package/fesm2015/gamma-app-controller.mjs +8857 -8951
  37. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  38. package/fesm2020/gamma-app-controller.mjs +9471 -9578
  39. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  40. package/lib/application-controller/application-content.service.d.ts +1 -1
  41. package/lib/application-controller/application-controller.module.d.ts +26 -25
  42. package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +0 -2
  43. package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +3 -18
  44. package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +2 -46
  45. package/lib/application-controller/support-components/heat-map/heat-map.component.d.ts +5 -0
  46. package/lib/application-controller/support-components/single-card/single-card.component.d.ts +2 -5
  47. package/lib/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +0 -1
  48. package/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +1 -3
  49. package/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +1 -0
  50. package/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +0 -40
  51. package/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.d.ts +3 -1
  52. package/lib/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +62 -0
  53. package/lib/shared/gamma-bread-crumbs/bread-crumbs.component.d.ts +0 -2
  54. package/lib/shared/permission-helper.d.ts +0 -1
  55. package/lib/template-module/KpiCreationModule/create-kpi-tree.component.d.ts +15 -11
  56. package/lib/template-module/KpiCreationModule/createKpi.service.d.ts +0 -4
  57. package/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.d.ts +0 -1
  58. package/package.json +1 -1
  59. package/public-api.d.ts +2 -0
@@ -22,9 +22,11 @@ export class BreadCrumbsComponent {
22
22
  return;
23
23
  }
24
24
  else {
25
- this.kpiListData = value;
26
- this.getBreadCrumbsData(value);
27
- this.loadBreadCrumbs();
25
+ let relativePath = 'rakpiBrowser';
26
+ this.getKpiName(value, relativePath);
27
+ setTimeout(() => {
28
+ this.loadBreadCrumbs();
29
+ }, 500);
28
30
  this.isBreadCrumbs = true;
29
31
  }
30
32
  }
@@ -61,70 +63,76 @@ export class BreadCrumbsComponent {
61
63
  let structures = {};
62
64
  data.forEach(result => {
63
65
  const item = {};
64
- item["name"] = result["kpiName"];
65
- item["pageId"] = result.tagType == 'child' ? result["pageId"] : null;
66
- item["tid"] = result.tagType == 'child' ? result["childTid"].trim() : result["parentTid"].trim();
66
+ item["relativePath"] = result.relativePath;
67
+ item["name"] = result["name"];
68
+ item["pageId"] = result["pageId"];
69
+ item["tid"] = result["tid"].trim();
70
+ if (result["nodes"] !== undefined) {
71
+ item["nodes"] = this.getBreadCrumbsData(result["nodes"]);
72
+ }
67
73
  this.kpi_names[result["pageId"]] = item["tid"];
68
- structures[result["childTid"]] = item;
69
- this.kpi_structures[result["childTid"]] = item;
74
+ structures[result["tid"]] = item;
75
+ this.kpi_structures[result["tid"]] = item;
70
76
  });
71
77
  return structures;
72
78
  }
73
79
  loadBreadCrumbs() {
74
- const pageId = this.activatedRoute.snapshot.queryParams['pageId'];
75
- const kpiTid = this.kpi_names[pageId];
80
+ let kpiRoot = this.kpiBrowserName ? "fmskpi" : "rakpi";
81
+ let kpiContainer;
82
+ if (this.kpiListData.length > 0 || this.kpiListData != undefined) {
83
+ kpiContainer = this.getBreadCrumbsData(this.kpiListData);
84
+ }
85
+ else {
86
+ kpiContainer = this.getBreadCrumbsData(this.commonService.allKpibrowserDetailContainer);
87
+ }
88
+ const kpiId = this.activatedRoute.snapshot.queryParams['pageId'];
89
+ const kpiTid = this.kpi_names[kpiId];
76
90
  const props = this.kpi_structures[kpiTid];
77
- const propsList = this.buildKpiPath(this.kpiListData, props["tid"]);
78
- this.breadcrumbList = propsList.split("/");
79
- if (this.location.path() !== "") {
80
- let link = {};
81
- this.breadcrumbLinksList = [];
82
- this.breadcrumbLinksList.unshift({
83
- name: "RA KPI Browser",
84
- url: "/apps/raKpi/rakpiBrowser",
85
- kpiName: "RA KPI Browser"
86
- });
87
- for (let i = 0; i < this.breadcrumbList.length; i++) {
88
- let returnId = "";
89
- for (let j = 0; j <= i; j++) {
90
- if (j != 0) {
91
- returnId += "/";
91
+ if (props) {
92
+ const propsList = props["relativePath"] + "/" + props["name"];
93
+ this.breadcrumbList = propsList.split("/");
94
+ if (this.location.path() !== "") {
95
+ let link = {};
96
+ this.breadcrumbLinksList = [];
97
+ for (let i = 0; i < this.breadcrumbList.length; i++) {
98
+ if (i == 0) {
99
+ if (!this.kpiBrowserName) {
100
+ link = {
101
+ name: this.breadcrumbList[i],
102
+ url: "/apps/raKpi/rakpiBrowser",
103
+ kpiName: "RA KPI Browser",
104
+ };
105
+ }
106
+ else {
107
+ link = {
108
+ name: this.breadcrumbList[i],
109
+ url: "/apps/fmsKpi",
110
+ kpiName: "FMS KPI Browser",
111
+ };
112
+ }
113
+ }
114
+ else {
115
+ let returnId = "";
116
+ for (let j = 0; j <= i; j++) {
117
+ if (j != 0) {
118
+ returnId += "/";
119
+ }
120
+ returnId += this.breadcrumbList[j];
121
+ }
122
+ link = {
123
+ name: this.breadcrumbList[i],
124
+ url: this.breadcrumbLinksList[i - 1]["url"],
125
+ id: this.breadcrumbList[i],
126
+ kpiName: this.breadcrumbList[i],
127
+ returnId: returnId,
128
+ };
129
+ this.commonService.global_kpi_name = this.breadcrumbList[i];
92
130
  }
93
- returnId += this.breadcrumbList[j];
131
+ this.breadcrumbLinksList.push(link);
94
132
  }
95
- link = {
96
- name: this.breadcrumbList[i],
97
- url: this.breadcrumbLinksList[i]["url"],
98
- id: this.breadcrumbList[i],
99
- kpiName: this.breadcrumbList[i],
100
- returnId: returnId,
101
- };
102
- this.commonService.global_kpi_name = this.breadcrumbList[i];
103
- this.breadcrumbLinksList.push(link);
133
+ this.count = this.breadcrumbList.length;
104
134
  }
105
- this.count = this.breadcrumbList.length;
106
- }
107
- }
108
- buildKpiPath(kpiListData, startTid) {
109
- const path = [];
110
- const tidArray = this.buildTidArray(startTid);
111
- tidArray.forEach((tid, index) => {
112
- const kpi = kpiListData.find(kpi => index === 0
113
- ? kpi.parentTid === tid
114
- : kpi.childTid === tid);
115
- if (kpi) {
116
- path.push(kpi.kpiName);
117
- }
118
- });
119
- return path.join(" / ");
120
- }
121
- buildTidArray(startTid) {
122
- const parts = startTid.split(".");
123
- const result = [];
124
- for (let i = 0; i < parts.length; i++) {
125
- result.push(parts.slice(0, i + 1).join("."));
126
135
  }
127
- return result;
128
136
  }
129
137
  }
130
138
  BreadCrumbsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BreadCrumbsComponent, deps: [{ token: i1.Location }, { token: i2.Router }, { token: i3.HttpClient }, { token: i2.ActivatedRoute }, { token: i4.CommonService }], target: i0.ɵɵFactoryTarget.Component });
@@ -136,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
136
144
  type: Input,
137
145
  args: ['kpi_data_container']
138
146
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2dhbW1hLWJyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvZ2FtbWEtYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWXpELE1BQU0sT0FBTyxvQkFBb0I7SUE4Qi9CLFlBQ1UsUUFBa0IsRUFDbEIsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGNBQThCLEVBQzlCLGFBQTRCO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBN0J0QyxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQTBCTixDQUFDO0lBckJMLElBQ0ksa0JBQWtCLENBQUMsS0FBSztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsT0FBTztTQUNSO2FBQU07WUFFTCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJ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SSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQVE7UUFDcEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztpSEFuS1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsZ0hDWmpDLHloQ0FlTTsyRkRITyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usb0JBQW9CO3NNQW9CMUIsa0JBQWtCO3NCQURyQixLQUFLO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FeHRyYXMsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vblwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJnYW1tYS1icmVhZC1jcnVtYnNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2JyZWFkLWNydW1icy5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRDcnVtYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGJyZWFkY3J1bWJMaXN0O1xuICBicmVhZGNydW1iTGlua3NMaXN0O1xuICByb3V0ZTogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICBrcGlMaXN0RGF0YTogYW55ID0gW107XG4gIGtwaV9zdHJ1Y3R1cmVzID0ge307XG4gIGtwaV9uYW1lcyA9IHt9O1xuICBrcGlVcmxJRDtcbiAgZGF0YSA9IFtdO1xuXG4gIGtwaUJyb3dzZXJOYW1lOiBCb29sZWFuO1xuICBpc0JyZWFkQ3J1bWJzOiBCb29sZWFuO1xuXG4gIEBJbnB1dCgna3BpX2RhdGFfY29udGFpbmVyJylcbiAgc2V0IGtwaV9kYXRhX2NvbnRhaW5lcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0JyZWFkQ3J1bWJzID0gZmFsc2U7XG4gICAgICAvLyB0aGlzLmFkZFJvbGVDb250YWluZXIgPSBbeyBcInR5cGVcIjogXCJ0ZXh0XCIsIFwidmFsdWVcIjogJycsIFwicm9sZWlkXCI6IFwicm93SWQwXCIgfV07XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIFxuICAgICAgdGhpcy5rcGlMaXN0RGF0YSA9IHZhbHVlO1xuICAgICAgdGhpcy5nZXRCcmVhZENydW1ic0RhdGEodmFsdWUpO1xuICAgICAgdGhpcy5sb2FkQnJlYWRDcnVtYnMoKTtcbiAgICAgIHRoaXMuaXNCcmVhZENydW1icyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG5cbiAgfVxuXG4gIGdldEtwaU5hbWUoZGF0YSwgcmVsYXRpdmVQYXRoKSB7XG5cbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB7fTtcbiAgICAgIGxldCBvYmo7XG4gICAgICBpdGVtWydyZWxhdGl2ZVBhdGgnXSA9IHJlbGF0aXZlUGF0aDtcblxuICAgICAgaWYgKHJlc3VsdFsnbm9kZXMnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBjaGlsZFJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aCArICcvJyArIHJlc3VsdFsnbmFtZSddO1xuICAgICAgICB0aGlzLmdldEtwaU5hbWUocmVzdWx0Wydub2RlcyddLCBjaGlsZFJlbGF0aXZlUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0WydpZCddKSB7XG4gICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAnbmFtZSc6IHJlc3VsdFsnbmFtZSddLFxuICAgICAgICAgICdkZXNjJzogcmVzdWx0WydkZXNjJ10sXG4gICAgICAgICAgJ3JlbGF0aXZlUGF0aCc6IHJlc3VsdFsncmVsYXRpdmVQYXRoJ10sXG4gICAgICAgICAgJ2twaUlkJzogcmVzdWx0WydpZCddLFxuICAgICAgICAgICdwYWdlSWQnOiByZXN1bHRbJ3BhZ2VJZCddLFxuICAgICAgICAgICdpc0Jvb2ttYXJrZWQnOiByZXN1bHRbJ2lzQm9va21hcmtlZCddLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaXRlbVsnZXh0ZXJuYWxMaW5rJ10gPSByZWxhdGl2ZVBhdGggKyAnLycgKyByZXN1bHRbJ25hbWUnXVxuICAgICAgaXRlbVsndGlkJ10gPSByZXN1bHRbJ3RpZCddO1xuICAgICAgaXRlbVsnaWQnXSA9IHJlc3VsdFsnaWQnXTtcbiAgICAgIGl0ZW1bJ3BhZ2VJZCddID0gcmVzdWx0WydwYWdlSWQnXTtcbiAgICAgIGl0ZW1bJ25hbWUnXSA9IHJlc3VsdFsnbmFtZSddO1xuXG4gICAgICB0aGlzLmtwaUxpc3REYXRhLnB1c2goaXRlbSk7XG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgZ2V0QnJlYWRDcnVtYnNEYXRhKGRhdGEpIHtcbiAgICBsZXQgc3RydWN0dXJlcyA9IHt9O1xuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgaXRlbTogb2JqZWN0ID0ge307XG4gICAgICBpdGVtW1wibmFtZVwiXSA9IHJlc3VsdFtcImtwaU5hbWVcIl07XG4gICAgICBpdGVtW1wicGFnZUlkXCJdID0gcmVzdWx0LnRhZ1R5cGUgPT0gJ2NoaWxkJyA/IHJlc3VsdFtcInBhZ2VJZFwiXSA6IG51bGw7XG4gICAgICBpdGVtW1widGlkXCJdID0gcmVzdWx0LnRhZ1R5cGUgPT0gJ2NoaWxkJyA/IHJlc3VsdFtcImNoaWxkVGlkXCJdLnRyaW0oKSA6IHJlc3VsdFtcInBhcmVudFRpZFwiXS50cmltKCk7XG5cblxuICAgICAgdGhpcy5rcGlfbmFtZXNbcmVzdWx0W1wicGFnZUlkXCJdXSA9IGl0ZW1bXCJ0aWRcIl07XG5cbiAgICAgIHN0cnVjdHVyZXNbcmVzdWx0W1wiY2hpbGRUaWRcIl1dID0gaXRlbTtcbiAgICAgIHRoaXMua3BpX3N0cnVjdHVyZXNbcmVzdWx0W1wiY2hpbGRUaWRcIl1dID0gaXRlbTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RydWN0dXJlcztcbiAgfVxuXG4gIGxvYWRCcmVhZENydW1icygpIHtcbiAgICBcblxuICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgIGNvbnN0IGtwaVRpZCA9IHRoaXMua3BpX25hbWVzW3BhZ2VJZF07XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmtwaV9zdHJ1Y3R1cmVzW2twaVRpZF07XG4gICAgY29uc3QgcHJvcHNMaXN0ID0gdGhpcy5idWlsZEtwaVBhdGgodGhpcy5rcGlMaXN0RGF0YSwgcHJvcHNbXCJ0aWRcIl0pO1xuICAgIC8vIGNvbnN0IHByb3BzTGlzdCA9IHByb3BzW1wicmVsYXRpdmVQYXRoXCJdICsgXCIvXCIgKyBwcm9wc1tcIm5hbWVcIl07XG5cbiAgICB0aGlzLmJyZWFkY3J1bWJMaXN0ID0gcHJvcHNMaXN0LnNwbGl0KFwiL1wiKTtcblxuICAgIGlmICh0aGlzLmxvY2F0aW9uLnBhdGgoKSAhPT0gXCJcIikge1xuICAgICAgbGV0IGxpbmsgPSB7fTtcbiAgICAgIHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdCA9IFtdO1xuICAgICAgdGhpcy5icmVhZGNydW1iTGlua3NMaXN0LnVuc2hpZnQoe1xuICAgICAgICBuYW1lOiBcIlJBIEtQSSBCcm93c2VyXCIsXG4gICAgICAgIHVybDogXCIvYXBwcy9yYUtwaS9yYWtwaUJyb3dzZXJcIixcbiAgICAgICAga3BpTmFtZTogXCJSQSBLUEkgQnJvd3NlclwiXG4gICAgICB9KVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnJlYWRjcnVtYkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHJldHVybklkID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gaTsgaisrKSB7XG4gICAgICAgICAgaWYgKGogIT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuSWQgKz0gXCIvXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybklkICs9IHRoaXMuYnJlYWRjcnVtYkxpc3Rbal07XG4gICAgICAgIH1cbiAgICAgICAgbGluayA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgIHVybDogdGhpcy5icmVhZGNydW1iTGlua3NMaXN0W2ldW1widXJsXCJdLFxuICAgICAgICAgIGlkOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgIGtwaU5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgcmV0dXJuSWQ6IHJldHVybklkLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2xvYmFsX2twaV9uYW1lID0gdGhpcy5icmVhZGNydW1iTGlzdFtpXTtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iTGlua3NMaXN0LnB1c2gobGluayk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvdW50ID0gdGhpcy5icmVhZGNydW1iTGlzdC5sZW5ndGg7XG4gICAgfVxuICB9XG5cblxuICBidWlsZEtwaVBhdGgoa3BpTGlzdERhdGEsIHN0YXJ0VGlkKSB7XG4gICAgY29uc3QgcGF0aCA9IFtdO1xuICAgIGNvbnN0IHRpZEFycmF5ID0gdGhpcy5idWlsZFRpZEFycmF5KHN0YXJ0VGlkKTtcblxuICAgIHRpZEFycmF5LmZvckVhY2goKHRpZCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGtwaSA9IGtwaUxpc3REYXRhLmZpbmQoa3BpID0+XG4gICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgPyBrcGkucGFyZW50VGlkID09PSB0aWRcbiAgICAgICAgICA6IGtwaS5jaGlsZFRpZCA9PT0gdGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoa3BpKSB7XG4gICAgICAgIHBhdGgucHVzaChrcGkua3BpTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihcIiAvIFwiKTtcbiAgfVxuXG4gIGJ1aWxkVGlkQXJyYXkoc3RhcnRUaWQpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0YXJ0VGlkLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHBhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiLlwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIiwiPG5hdiBjbGFzcz1cImZsZXggbXQtMVwiIGFyaWEtbGFiZWw9XCJCcmVhZGNydW1iXCIgKm5nSWY9XCJpc0JyZWFkQ3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSBtZDpzcGFjZS14LTNcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKm5nRm9yPVwibGV0IGJyZWFkY3J1bWJMYWJlbCBvZiBicmVhZGNydW1iTGlua3NMaXN0O1wiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiYnJlYWRjcnVtYkxhYmVsLnVybFwiIFtxdWVyeVBhcmFtc109XCJ7cmV0dXJuSWQ6IGJyZWFkY3J1bWJMYWJlbC5yZXR1cm5JZCB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInctNiBoLTYgdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4yOTMgMTQuNzA3YTEgMSAwIDAxMC0xLjQxNEwxMC41ODYgMTAgNy4yOTMgNi43MDdhMSAxIDAgMDExLjQxNC0xLjQxNGw0IDRhMSAxIDAgMDEwIDEuNDE0bC00IDRhMSAxIDAgMDEtMS40MTQgMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICB7e2JyZWFkY3J1bWJMYWJlbC5rcGlOYW1lfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuPC9uYXY+Il19
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2dhbW1hLWJyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvZ2FtbWEtYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWXpELE1BQU0sT0FBTyxvQkFBb0I7SUFpQy9CLFlBQ1UsUUFBa0IsRUFDbEIsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLGNBQThCLEVBQzlCLGFBQTRCO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBaEN0QyxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQTZCTixDQUFDO0lBeEJMLElBQ0ksa0JBQWtCLENBQUMsS0FBSztRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsT0FBTztTQUNSO2FBQU07WUFHTCxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUM7WUFDbEMsSUFBSSxD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LEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs0QkFDL0IsUUFBUSxFQUFFLFFBQVE7eUJBQ25CLENBQUM7d0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDN0Q7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN6QztTQUNGO0lBRUgsQ0FBQzs7aUhBaktVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdIQ1pqQyx5aENBZU07MkZESE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG9CQUFvQjtzTUFvQjFCLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb25cIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZ2FtbWEtYnJlYWQtY3J1bWJzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9icmVhZC1jcnVtYnMuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkQ3J1bWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBicmVhZGNydW1iTGlzdDtcbiAgYnJlYWRjcnVtYkxpbmtzTGlzdDtcbiAgcm91dGU6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAga3BpTGlzdERhdGE6IGFueSA9IFtdO1xuICBrcGlfc3RydWN0dXJlcyA9IHt9O1xuICBrcGlfbmFtZXMgPSB7fTtcbiAga3BpVXJsSUQ7XG4gIGRhdGEgPSBbXTtcblxuICBrcGlCcm93c2VyTmFtZTogQm9vbGVhbjtcbiAgaXNCcmVhZENydW1iczogQm9vbGVhbjtcblxuICBASW5wdXQoJ2twaV9kYXRhX2NvbnRhaW5lcicpXG4gIHNldCBrcGlfZGF0YV9jb250YWluZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNCcmVhZENydW1icyA9IGZhbHNlO1xuICAgICAgLy8gdGhpcy5hZGRSb2xlQ29udGFpbmVyID0gW3sgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInZhbHVlXCI6ICcnLCBcInJvbGVpZFwiOiBcInJvd0lkMFwiIH1dO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHRoaXMua3BpTGlzdERhdGEgPSB2YWx1ZTtcbiAgICAgIGxldCByZWxhdGl2ZVBhdGggPSAncmFrcGlCcm93c2VyJztcbiAgICAgIHRoaXMuZ2V0S3BpTmFtZSh2YWx1ZSwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRCcmVhZENydW1icygpO1xuICAgICAgfSwgNTAwKTtcbiAgICAgIHRoaXMuaXNCcmVhZENydW1icyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG5cbiAgfVxuXG4gIGdldEtwaU5hbWUoZGF0YSwgcmVsYXRpdmVQYXRoKSB7XG5cbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB7fTtcbiAgICAgIGxldCBvYmo7XG4gICAgICBpdGVtWydyZWxhdGl2ZVBhdGgnXSA9IHJlbGF0aXZlUGF0aDtcblxuICAgICAgaWYgKHJlc3VsdFsnbm9kZXMnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBjaGlsZFJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aCArICcvJyArIHJlc3VsdFsnbmFtZSddO1xuICAgICAgICB0aGlzLmdldEtwaU5hbWUocmVzdWx0Wydub2RlcyddLCBjaGlsZFJlbGF0aXZlUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0WydpZCddKSB7XG4gICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAnbmFtZSc6IHJlc3VsdFsnbmFtZSddLFxuICAgICAgICAgICdkZXNjJzogcmVzdWx0WydkZXNjJ10sXG4gICAgICAgICAgJ3JlbGF0aXZlUGF0aCc6IHJlc3VsdFsncmVsYXRpdmVQYXRoJ10sXG4gICAgICAgICAgJ2twaUlkJzogcmVzdWx0WydpZCddLFxuICAgICAgICAgICdwYWdlSWQnOiByZXN1bHRbJ3BhZ2VJZCddLFxuICAgICAgICAgICdpc0Jvb2ttYXJrZWQnOiByZXN1bHRbJ2lzQm9va21hcmtlZCddLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaXRlbVsnZXh0ZXJuYWxMaW5rJ10gPSByZWxhdGl2ZVBhdGggKyAnLycgKyByZXN1bHRbJ25hbWUnXVxuICAgICAgaXRlbVsndGlkJ10gPSByZXN1bHRbJ3RpZCddO1xuICAgICAgaXRlbVsnaWQnXSA9IHJlc3VsdFsnaWQnXTtcbiAgICAgIGl0ZW1bJ3BhZ2VJZCddID0gcmVzdWx0WydwYWdlSWQnXTtcbiAgICAgIGl0ZW1bJ25hbWUnXSA9IHJlc3VsdFsnbmFtZSddO1xuXG4gICAgICB0aGlzLmtwaUxpc3REYXRhLnB1c2goaXRlbSk7XG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgZ2V0QnJlYWRDcnVtYnNEYXRhKGRhdGEpIHtcbiAgICBsZXQgc3RydWN0dXJlcyA9IHt9O1xuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgaXRlbTogb2JqZWN0ID0ge307XG4gICAgICBpdGVtW1wicmVsYXRpdmVQYXRoXCJdID0gcmVzdWx0LnJlbGF0aXZlUGF0aDtcbiAgICAgIGl0ZW1bXCJuYW1lXCJdID0gcmVzdWx0W1wibmFtZVwiXTtcbiAgICAgIGl0ZW1bXCJwYWdlSWRcIl0gPSByZXN1bHRbXCJwYWdlSWRcIl07XG4gICAgICBpdGVtW1widGlkXCJdID0gcmVzdWx0W1widGlkXCJdLnRyaW0oKTtcbiAgICAgIGlmIChyZXN1bHRbXCJub2Rlc1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW1bXCJub2Rlc1wiXSA9IHRoaXMuZ2V0QnJlYWRDcnVtYnNEYXRhKFxuICAgICAgICAgIHJlc3VsdFtcIm5vZGVzXCJdXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMua3BpX25hbWVzW3Jlc3VsdFtcInBhZ2VJZFwiXV0gPSBpdGVtW1widGlkXCJdO1xuXG4gICAgICBzdHJ1Y3R1cmVzW3Jlc3VsdFtcInRpZFwiXV0gPSBpdGVtO1xuICAgICAgdGhpcy5rcGlfc3RydWN0dXJlc1tyZXN1bHRbXCJ0aWRcIl1dID0gaXRlbTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RydWN0dXJlcztcbiAgfVxuXG4gIGxvYWRCcmVhZENydW1icygpIHtcblxuICAgIGxldCBrcGlSb290ID0gdGhpcy5rcGlCcm93c2VyTmFtZSA/IFwiZm1za3BpXCIgOiBcInJha3BpXCI7XG4gICAgbGV0IGtwaUNvbnRhaW5lcjtcbiAgICBpZiAodGhpcy5rcGlMaXN0RGF0YS5sZW5ndGggPiAwIHx8IHRoaXMua3BpTGlzdERhdGEgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBrcGlDb250YWluZXIgPSB0aGlzLmdldEJyZWFkQ3J1bWJzRGF0YSh0aGlzLmtwaUxpc3REYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3BpQ29udGFpbmVyID0gdGhpcy5nZXRCcmVhZENydW1ic0RhdGEoXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5hbGxLcGlicm93c2VyRGV0YWlsQ29udGFpbmVyLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qga3BpSWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBjb25zdCBrcGlUaWQgPSB0aGlzLmtwaV9uYW1lc1trcGlJZF07XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmtwaV9zdHJ1Y3R1cmVzW2twaVRpZF07XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBjb25zdCBwcm9wc0xpc3QgPSBwcm9wc1tcInJlbGF0aXZlUGF0aFwiXSArIFwiL1wiICsgcHJvcHNbXCJuYW1lXCJdO1xuICAgICAgdGhpcy5icmVhZGNydW1iTGlzdCA9IHByb3BzTGlzdC5zcGxpdChcIi9cIik7XG5cbiAgICAgIGlmICh0aGlzLmxvY2F0aW9uLnBhdGgoKSAhPT0gXCJcIikge1xuICAgICAgICBsZXQgbGluayA9IHt9O1xuICAgICAgICB0aGlzLmJyZWFkY3J1bWJMaW5rc0xpc3QgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnJlYWRjcnVtYkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua3BpQnJvd3Nlck5hbWUpIHtcbiAgICAgICAgICAgICAgbGluayA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICAgIHVybDogXCIvYXBwcy9yYUtwaS9yYWtwaUJyb3dzZXJcIixcbiAgICAgICAgICAgICAgICBrcGlOYW1lOiBcIlJBIEtQSSBCcm93c2VyXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV0sXG4gICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2Ztc0twaVwiLFxuICAgICAgICAgICAgICAgIGtwaU5hbWU6IFwiRk1TIEtQSSBCcm93c2VyXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5JZCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICAgICAgaWYgKGogIT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybklkICs9IFwiL1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybklkICs9IHRoaXMuYnJlYWRjcnVtYkxpc3Rbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICBuYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICB1cmw6IHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdFtpIC0gMV1bXCJ1cmxcIl0sXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICBrcGlOYW1lOiB0aGlzLmJyZWFkY3J1bWJMaXN0W2ldLFxuICAgICAgICAgICAgICByZXR1cm5JZDogcmV0dXJuSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLmdsb2JhbF9rcGlfbmFtZSA9IHRoaXMuYnJlYWRjcnVtYkxpc3RbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkxpbmtzTGlzdC5wdXNoKGxpbmspO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmJyZWFkY3J1bWJMaXN0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIiwiPG5hdiBjbGFzcz1cImZsZXggbXQtMVwiIGFyaWEtbGFiZWw9XCJCcmVhZGNydW1iXCIgKm5nSWY9XCJpc0JyZWFkQ3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSBtZDpzcGFjZS14LTNcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKm5nRm9yPVwibGV0IGJyZWFkY3J1bWJMYWJlbCBvZiBicmVhZGNydW1iTGlua3NMaXN0O1wiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiYnJlYWRjcnVtYkxhYmVsLnVybFwiIFtxdWVyeVBhcmFtc109XCJ7cmV0dXJuSWQ6IGJyZWFkY3J1bWJMYWJlbC5yZXR1cm5JZCB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInctNiBoLTYgdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4yOTMgMTQuNzA3YTEgMSAwIDAxMC0xLjQxNEwxMC41ODYgMTAgNy4yOTMgNi43MDdhMSAxIDAgMDExLjQxNC0xLjQxNGw0IDRhMSAxIDAgMDEwIDEuNDE0bC00IDRhMSAxIDAgMDEtMS40MTQgMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICB7e2JyZWFkY3J1bWJMYWJlbC5rcGlOYW1lfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuPC9uYXY+Il19
@@ -17,11 +17,11 @@ export class PermissionHelper {
17
17
  const { entityName, entityValues } = item;
18
18
  if (entityName === 'user' &&
19
19
  Array.isArray(entityValues) &&
20
- (entityValues.includes('{USER}') || entityValues.includes(username))) {
20
+ (entityValues.includes('${USER}') || entityValues.includes(username))) {
21
21
  return true;
22
22
  }
23
23
  if (entityName === 'role' && Array.isArray(entityValues)) {
24
- if (entityValues.includes('{ROLE}')) {
24
+ if (entityValues.includes('${ROLE}')) {
25
25
  return true;
26
26
  }
27
27
  return this.securityPrincipal.roleDetails
@@ -29,7 +29,7 @@ export class PermissionHelper {
29
29
  : true;
30
30
  }
31
31
  if (entityName === 'group' && Array.isArray(entityValues)) {
32
- if (entityValues.includes('{GROUP}')) {
32
+ if (entityValues.includes('${GROUP}')) {
33
33
  return true;
34
34
  }
35
35
  return this.securityPrincipal.groupDetails
@@ -45,37 +45,6 @@ export class PermissionHelper {
45
45
  }
46
46
  return false;
47
47
  }
48
- buildMenuTree(userName, kpiData) {
49
- let filteredMenus = kpiData;
50
- const menuMap = new Map();
51
- const menuTree = [];
52
- filteredMenus.forEach(menu => {
53
- if (!this.getPermissionEntity(menu.permissions))
54
- return;
55
- menuMap.set(menu.childTid || menu.parentTid, {
56
- id: menu.kpiId,
57
- title: menu.kpiName,
58
- icon: menu.icon,
59
- type: menu.kpiType,
60
- tagType: menu.tagType,
61
- visibility: menu.visibility,
62
- ...(menu.link && { link: menu.link.replace(/^\/+/, '') }),
63
- children: []
64
- });
65
- });
66
- filteredMenus.forEach(kpi => {
67
- if (kpi.parentTid && kpi.childTid) {
68
- const parent = menuMap.get(kpi.parentTid);
69
- if (parent) {
70
- parent.children.push(menuMap.get(kpi.childTid));
71
- }
72
- }
73
- else {
74
- menuTree.push(menuMap.get(kpi.parentTid));
75
- }
76
- });
77
- return menuTree;
78
- }
79
48
  }
80
49
  PermissionHelper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionHelper, deps: [{ token: APP_SECURITY_PRINCIPAL }], target: i0.ɵɵFactoryTarget.Injectable });
81
50
  PermissionHelper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionHelper, providedIn: 'root' });
@@ -86,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
86
55
  type: Inject,
87
56
  args: [APP_SECURITY_PRINCIPAL]
88
57
  }] }]; } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9wZXJtaXNzaW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFHOUQsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixZQUFvRCxpQkFBc0I7UUFBdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO0lBQUksQ0FBQztJQUUvRSxtQkFBbUIsQ0FBQyxVQUFlO1FBRS9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUzRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUMzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztZQUUxQyxJQUNJLFVBQVUsS0FBSyxNQUFNO2dCQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDM0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDdEU7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksVUFBVSxLQUFLLE1BQU0sSUFBSSxLQUFL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QUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNuRDthQUNKO2lCQUFNO2dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM3QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7NkdBNUZRLGdCQUFnQixrQkFFTCxzQkFBc0I7aUhBRmpDLGdCQUFnQixjQURILE1BQU07MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUdqQixNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCB9IGZyb20gJy4vc2VjdXJpdHlfcHJpbmNpcGFsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uSGVscGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCkgcHJpdmF0ZSBzZWN1cml0eVByaW5jaXBhbDogYW55KSB7IH1cblxuICAgIGdldFBlcm1pc3Npb25FbnRpdHkocGVybWlzc2lvbjogYW55KTogYm9vbGVhbiB7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVybWlzc2lvbi5sZW5ndGggPT09IDAgfHwgcGVybWlzc2lvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5nZXRQcmluY2lwYWxOYW1lKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW50aXR5TmFtZSwgZW50aXR5VmFsdWVzIH0gPSBpdGVtO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50aXR5TmFtZSA9PT0gJ3VzZXInICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlbnRpdHlWYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgKGVudGl0eVZhbHVlcy5pbmNsdWRlcygne1VTRVJ9JykgfHwgZW50aXR5VmFsdWVzLmluY2x1ZGVzKHVzZXJuYW1lKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50aXR5TmFtZSA9PT0gJ3JvbGUnICYmIEFycmF5LmlzQXJyYXkoZW50aXR5VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRpdHlWYWx1ZXMuaW5jbHVkZXMoJ3tST0xFfScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5yb2xlRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICA/IGVudGl0eVZhbHVlcy5ldmVyeSh0ID0+IHRoaXMuc2VjdXJpdHlQcmluY2lwYWwucm9sZURldGFpbHMuaW5jbHVkZXModCkpXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVudGl0eU5hbWUgPT09ICdncm91cCcgJiYgQXJyYXkuaXNBcnJheShlbnRpdHlWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVZhbHVlcy5pbmNsdWRlcygne0dST1VQfScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5ncm91cERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgPyBlbnRpdHlWYWx1ZXMuZXZlcnkodCA9PiB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLmdyb3VwRGV0YWlscy5pbmNsdWRlcyh0KSlcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50aXR5TmFtZSA9PT0gJ3RlbmFudF9pZCcgJiYgQXJyYXkuaXNBcnJheShlbnRpdHlWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRlZFRlbmFudHMgPSB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLmdldFRhcmdldFRlbmFudElkcygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3NvY2lhdGVkVGVuYW50c1xuICAgICAgICAgICAgICAgICAgICA/IGVudGl0eVZhbHVlcy5zb21lKHQgPT4gYXNzb2NpYXRlZFRlbmFudHMuaW5jbHVkZXModCkpXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBidWlsZE1lbnVUcmVlKHVzZXJOYW1lOiBzdHJpbmcsIGtwaURhdGE6IGFueVtdKTogYW55W10ge1xuICAgICAgICAvLyBsZXQgZmlsdGVyZWRNZW51cyA9IG1lbnVEYXRhLmZpbHRlcihtZW51ID0+XG4gICAgICAgIC8vICAgIXVzZXJOYW1lIHx8IChtZW51LnBlcm1pc3Npb25zICYmIG1lbnUucGVybWlzc2lvbnMuc29tZShwZXJtID0+IHBlcm0uZW50aXR5VmFsdWVzLmluY2x1ZGVzKHVzZXJOYW1lKSkpXG4gICAgICAgIC8vICk7XG5cbiAgICAgICAgbGV0IGZpbHRlcmVkTWVudXMgPSBrcGlEYXRhO1xuXG4gICAgICAgIGNvbnN0IG1lbnVNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IG1lbnVUcmVlOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGZpbHRlcmVkTWVudXMuZm9yRWFjaChtZW51ID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRQZXJtaXNzaW9uRW50aXR5KG1lbnUucGVybWlzc2lvbnMpKSByZXR1cm47XG4gICAgICAgICAgICBtZW51TWFwLnNldChtZW51LmNoaWxkVGlkIHx8IG1lbnUucGFyZW50VGlkLCB7XG4gICAgICAgICAgICAgICAgaWQ6IG1lbnUua3BpSWQsXG4gICAgICAgICAgICAgICAgdGl0bGU6IG1lbnUua3BpTmFtZSxcbiAgICAgICAgICAgICAgICBpY29uOiBtZW51Lmljb24sXG4gICAgICAgICAgICAgICAgdHlwZTogbWVudS5rcGlUeXBlLFxuICAgICAgICAgICAgICAgIHRhZ1R5cGU6IG1lbnUudGFnVHlwZSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBtZW51LnZpc2liaWxpdHksXG4gICAgICAgICAgICAgICAgLi4uKG1lbnUubGluayAmJiB7IGxpbms6IG1lbnUubGluay5yZXBsYWNlKC9eXFwvKy8sICcnKSB9KSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZXJlZE1lbnVzLmZvckVhY2goa3BpID0+IHtcbiAgICAgICAgICAgIGlmIChrcGkucGFyZW50VGlkICYmIGtwaS5jaGlsZFRpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG1lbnVNYXAuZ2V0KGtwaS5wYXJlbnRUaWQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobWVudU1hcC5nZXQoa3BpLmNoaWxkVGlkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZW51VHJlZS5wdXNoKG1lbnVNYXAuZ2V0KGtwaS5wYXJlbnRUaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1lbnVUcmVlO1xuICAgIH1cbn0iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9wZXJtaXNzaW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFHOUQsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixZQUFvRCxpQkFBc0I7UUFBdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO0lBQUksQ0FBQztJQUUvRSxtQkFBbUIsQ0FBQyxVQUFlO1FBRS9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUzRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUMzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQztZQUUxQyxJQUNJLFVBQVUsS0FBSyxNQUFNO2dCQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDM0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDdkU7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksVUFBVSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7b0JBQ3JDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDZDtZQUVELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN2RCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVk7b0JBQ3RDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFFLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDZDtZQUVELElBQUksVUFBVSxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLGlCQUFpQjtvQkFDcEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDZDtTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7NkdBdERRLGdCQUFnQixrQkFFTCxzQkFBc0I7aUhBRmpDLGdCQUFnQixjQURILE1BQU07MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUdqQixNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCB9IGZyb20gJy4vc2VjdXJpdHlfcHJpbmNpcGFsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uSGVscGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCkgcHJpdmF0ZSBzZWN1cml0eVByaW5jaXBhbDogYW55KSB7IH1cblxuICAgIGdldFBlcm1pc3Npb25FbnRpdHkocGVybWlzc2lvbjogYW55KTogYm9vbGVhbiB7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVybWlzc2lvbi5sZW5ndGggPT09IDAgfHwgcGVybWlzc2lvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5nZXRQcmluY2lwYWxOYW1lKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW50aXR5TmFtZSwgZW50aXR5VmFsdWVzIH0gPSBpdGVtO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50aXR5TmFtZSA9PT0gJ3VzZXInICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlbnRpdHlWYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgKGVudGl0eVZhbHVlcy5pbmNsdWRlcygnJHtVU0VSfScpIHx8IGVudGl0eVZhbHVlcy5pbmNsdWRlcyh1c2VybmFtZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVudGl0eU5hbWUgPT09ICdyb2xlJyAmJiBBcnJheS5pc0FycmF5KGVudGl0eVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5VmFsdWVzLmluY2x1ZGVzKCcke1JPTEV9JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLnJvbGVEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgID8gZW50aXR5VmFsdWVzLmV2ZXJ5KHQgPT4gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5yb2xlRGV0YWlscy5pbmNsdWRlcyh0KSlcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50aXR5TmFtZSA9PT0gJ2dyb3VwJyAmJiBBcnJheS5pc0FycmF5KGVudGl0eVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5VmFsdWVzLmluY2x1ZGVzKCcke0dST1VQfScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5ncm91cERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgPyBlbnRpdHlWYWx1ZXMuZXZlcnkodCA9PiB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLmdyb3VwRGV0YWlscy5pbmNsdWRlcyh0KSlcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50aXR5TmFtZSA9PT0gJ3RlbmFudF9pZCcgJiYgQXJyYXkuaXNBcnJheShlbnRpdHlWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRlZFRlbmFudHMgPSB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLmdldFRhcmdldFRlbmFudElkcygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3NvY2lhdGVkVGVuYW50c1xuICAgICAgICAgICAgICAgICAgICA/IGVudGl0eVZhbHVlcy5zb21lKHQgPT4gYXNzb2NpYXRlZFRlbmFudHMuaW5jbHVkZXModCkpXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbn0iXX0=
@@ -272,7 +272,11 @@ export class TemplateDatasetCallService {
272
272
  else {
273
273
  let request_params = {
274
274
  datasetId: datasetId,
275
+ dbConfig: dataset.config.queryConfig.dbConfig,
276
+ databaseName: dataset.config.queryConfig.databaseName,
275
277
  filters: this.transformDataForMFilterForSQl(operator, dataset.config.queryConfig.mapedFilters),
278
+ templateQuery: dataset.config.queryConfig.templateQuery,
279
+ enrichments: dataset.config.queryConfig.enrichments
276
280
  };
277
281
  backendService.genericSqlQueryResponse(requestAp, request_params).subscribe({
278
282
  next: (data) => {
@@ -370,4 +374,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
370
374
  type: Inject,
371
375
  args: [APP_SECURITY_PRINCIPAL]
372
376
  }] }]; } });
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YXNldC1jYWxsLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC90ZW1wbGF0ZS1kYXRhc2V0LWNhbGwtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLE1BQU0sTUFBTSx5Q0FBeUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLDBCQUEwQjtJQUduQyxZQUNZLFVBQTRCLEVBQzVCLE1BQXFCLEVBQ0ksV0FBZ0IsRUFDVCxpQkFBc0I7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNJLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ1Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO1FBTmxFLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztJQVE5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsY0FBbUIsRUFBRSxPQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFZO1FBQ2pGLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEY7YUFBTSxJQUFJ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LENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDakQ7cUJBQU07b0JBQ0gsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUVELElBQUksU0FBUyxJQUFJLGNBQWMsRUFBRTtvQkFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQzdCO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQzs7dUhBbFhRLDBCQUEwQiwrRUFNdkIsZUFBZSxhQUNmLHNCQUFzQjsySEFQekIsMEJBQTBCLGNBRGIsTUFBTTsyRkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBT3pCLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2Vudmlyb25tZW50JztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2twaS1zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9TRUNVUklUWV9QUklOQ0lQQUwgfSBmcm9tICcuL3NlY3VyaXR5X3ByaW5jaXBhbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVEYXRhc2V0Q2FsbFNlcnZpY2Uge1xuICAgIHVuaXF1ZURhdGFTZXRPYmplY3Q6IGFueSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnksXG4gICAgICAgIEBJbmplY3QoQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCkgcHJpdmF0ZSBzZWN1cml0eVByaW5jaXBhbDogYW55XG4gICAgKSB7XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21EYXRhU2V0KGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ21vbmdvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldEZvck1vbmdvKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdxdWVyeWJ1aWxkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdzaW1wbGVBcGknKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdwbGFpbmpzb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9yUGxhaW5Kc29uKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdzcWxRdWVyeScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVNldEZvck1vbmdvKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBhcGlKc29uT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogZGF0YXNldC5jb25maWcuc2VydmljZUlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcyAmJiBkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXBpSnNvbk9iamVjdCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9uX2NvbmZpZyA9IHRoaXMua3BpU2VydmljZS5nZXRBbGxTZXZpY2VBcGlKc29uKGFwaUpzb25PYmplY3QpO1xuICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0RGF0YShtb25fY29uZmlnLCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnUGF5bG9hZCddIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9ySW1wYWxhKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHJlcXVlc3QucmVxRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdzdGFydERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0LnJlY29yZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSAoZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCAhPT0gMCkgPyBPYmplY3Qua2V5cyhmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikubWFwKGtleSA9PiAoeyBba2V5XTogZmlsdGVycy5vcGVyYXRpb25GaWx0ZXJba2V5XSB9KSkgOiBbXTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIob3BlcmF0b3IsIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydzb3J0ZXJzJ10gPSByZXF1ZXN0LnNvcnRlcnM7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsncGFnaW5hdGlvblJlcXVpcmVkJ10gPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmFwaSA9PSBcIi9rcGkvZ2VuZXJpY0FnZ3JlZ2F0ZVBhZ2luYXRlZEtwaVNlcnZpY2VSZXNwb25zZVwiKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ21lYXN1cmVzJ10gPSByZXF1ZXN0Lm1lYXN1cmVzO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QuaGF2aW5ncyAmJiByZXF1ZXN0LmhhdmluZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2hhdmluZ3MnXSA9IHJlcXVlc3QuaGF2aW5ncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbJ2RhdGFzZXQnXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtYXRPYmplY3RGb3JDb2x1bW4oY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IGNvbHVtbkRhdGE6IGFueVtdID0gW107XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWR2YW5jZWRDb2x1bW4sIGNvbHVtbk5hbWUsIGVucmljaEZ1bmN0aW9uLCBkYXRhRmllbGQgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBjb2x1bW5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIGFkdmFuY2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgZW5yaWNoRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxpYXNOYW1lOiBkYXRhRmllbGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbkRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihmaWx0ZXJkYXRhOiBhbnlbXSwgbWFwRGF0YTogYW55W10pIHtcbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVyZGF0YS5maW5kKGYgPT4gZi5oYXNPd25Qcm9wZXJ0eShtYXBwaW5nLmxvY2FsQ29sdW1uKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyW21hcHBpbmcubG9jYWxDb2x1bW5dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZXJkYXRhID0gZmlsdGVyZGF0YS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG9iailbMF07XG4gICAgICAgICAgICByZXR1cm4ga2V5ICE9PSAnc3RhcnREYXRlJyAmJiBrZXkgIT09ICdlbmREYXRlJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlcmRhdGEuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTWFwcGluZyA9IG1hcERhdGEuZmluZChtYXBwaW5nID0+IG1hcHBpbmcubG9jYWxDb2x1bW4gPT09IGZpbHRlcktleSk7XG5cbiAgICAgICAgICAgIGlmICghZXhpc3RpbmdNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBmaWx0ZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyW2ZpbHRlcktleV1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW2ZpbHRlcktleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV0uam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmhhc093blByb3BlcnR5KGZpbHRlci5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRlZmF1bHRWYWx1ZSA9IGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2ZpbHRlci5sb2NhbENvbHVtbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJwb3N0XCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VydmljZUpzb246IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZWNvbHVtbiA9IGZpbHRlci5zZXJ2ZXJDb2x1bW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVjb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgZmlsdGVyLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXRTaW1wbGVBcGlQb3N0UmVxdWVzdChkYXRhc2V0LmNvbmZpZy5hcGksIHNlcnZpY2VKc29uKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJnZXRcIikge1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0VXJsID0gZGF0YXNldC5jb25maWcuYXBpICsgXCI/XCI7XG4gICAgICAgICAgICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgKz0gYCR7ZmlsdGVyLnNlcnZlckNvbHVtbn09JHtmaWx0ZXIuZGVmYXVsdFZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VXJsICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXRTaW1wbGVBcGlHZXRSZXF1ZXN0KHJlcXVlc3RVcmwpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRGb3JQbGFpbkpzb24oYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgX2ZpbHRlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdGFwaSA9IGRhdGFzZXQuY29uZmlnLmFwaSArICc/ZGF0YXNldElkPScgKyBkYXRhc2V0LmRhdGFzZXRJZDtcbiAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldEpzb25EYXRhc2V0UGF5bG9hZChyZXF1ZXN0YXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUoYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IE9iamVjdC5rZXlzKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKS5tYXAoa2V5ID0+ICh7IFtrZXldOiBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltrZXldIH0pKSA6IFtdO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcblxuICAgICAgICAgICAgY29uc3QgdGVuYW50SWRzID0gZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmID0+IGYuc2VydmVyQ29sdW1uID09PSBcInRlbmFudF9pZFwiKVxuICAgICAgICAgICAgICAgIC5tYXAoZiA9PiBmLmRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0ZWRUZW5hbnRzID0gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5nZXRUYXJnZXRUZW5hbnRJZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2ggPSAoYXNzb2NpYXRlZFRlbmFudHMpID8gdGVuYW50SWRzLnNvbWUodCA9PiBhc3NvY2lhdGVkVGVuYW50cy5pbmNsdWRlcyh0KSkgOiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJVbmF1dGhvcml6ZWQgQWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gW107XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkOiBkYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIC8vIGRiQ29uZmlnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYkNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGF0YWJhc2VOYW1lOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwob3BlcmF0b3IsIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycyksXG4gICAgICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlUXVlcnk6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLnRlbXBsYXRlUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIC8vIGVucmljaG1lbnRzOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5lbnJpY2htZW50c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2VuZXJpY1NxbFF1ZXJ5UmVzcG9uc2UocmVxdWVzdEFwLCByZXF1ZXN0X3BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwoZmlsdGVyZGF0YTogYW55W10sIG1hcERhdGE6IGFueVtdKSB7XG4gICAgICAgIFxuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICBhbGlhc0NvbHVtbk5hbWU6IG1hcHBpbmcubG9jYWxDb2x1bW5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCkuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbHRlcmRhdGEgPSBmaWx0ZXJkYXRhLmZpbHRlcihvYmogPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09ICdzdGFydERhdGUnICYmIGtleSAhPT0gJ2VuZERhdGUnO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyZGF0YS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdNYXBwaW5nID0gbWFwRGF0YS5maW5kKG1hcHBpbmcgPT4gbWFwcGluZy5sb2NhbENvbHVtbiA9PT0gZmlsdGVyS2V5KTtcblxuICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJbZmlsdGVyS2V5XVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbZmlsdGVyS2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyS2V5ID09ICdvcGVyYXRvcl9rZXknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiZXFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0O1xuICAgIH1cbn0iXX0=
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YXNldC1jYWxsLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC90ZW1wbGF0ZS1kYXRhc2V0LWNhbGwtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLE1BQU0sTUFBTSx5Q0FBeUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLDBCQUEwQjtJQUduQyxZQUNZLFVBQTRCLEVBQzVCLE1BQXFCLEVBQ0ksV0FBZ0IsRUFDVCxpQkFBc0I7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNJLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ1Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO1FBTmxFLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztJQVE5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsY0FBbUIsRUFBRSxPQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFZO1FBQ2pGLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEY7YUFBTSxJQUFJ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UTtvQkFDakIsVUFBVSxFQUFFLFNBQVM7b0JBQ3JCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDM0IsQ0FBQztnQkFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUMxQixTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2pEO3FCQUFNO29CQUNILFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QztnQkFFRCxJQUFJLFNBQVMsSUFBSSxjQUFjLEVBQUU7b0JBQzdCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUM3QjtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzFCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7O3VIQWxYUSwwQkFBMEIsK0VBTXZCLGVBQWUsYUFDZixzQkFBc0I7MkhBUHpCLDBCQUEwQixjQURiLE1BQU07MkZBQ25CLDBCQUEwQjtrQkFEdEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU96QixNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgQVBQX0VOVklST05NRU5UIH0gZnJvbSAnLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9rcGktc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfU0VDVVJJVFlfUFJJTkNJUEFMIH0gZnJvbSAnLi9zZWN1cml0eV9wcmluY2lwYWwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRGF0YXNldENhbGxTZXJ2aWNlIHtcbiAgICB1bmlxdWVEYXRhU2V0T2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGtwaVNlcnZpY2U6IGtwaWNvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEFQUF9FTlZJUk9OTUVOVCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55LFxuICAgICAgICBASW5qZWN0KEFQUF9TRUNVUklUWV9QUklOQ0lQQUwpIHByaXZhdGUgc2VjdXJpdHlQcmluY2lwYWw6IGFueVxuICAgICkge1xuICAgIH1cblxuICAgIGdldERhdGFGcm9tRGF0YVNldChiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdtb25nbycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFTZXRGb3JNb25nbyhiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09PSAncXVlcnlidWlsZGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldEZvckltcGFsYShiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09PSAnc2ltcGxlQXBpJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09PSAncGxhaW5qc29uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldEZvclBsYWluSnNvbihiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09PSAnc3FsUXVlcnknKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUoYmFja2VuZFNlcnZpY2UsIGRhdGFzZXQsIGRhdGFzZXRJZCwgZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFTZXRGb3JNb25nbyhiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgYXBpSnNvbk9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMgJiYgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcykge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFwaUpzb25PYmplY3QsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vbl9jb25maWcgPSB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxsU2V2aWNlQXBpSnNvbihhcGlKc29uT2JqZWN0KTtcbiAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldERhdGEobW9uX2NvbmZpZywgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbJ1BheWxvYWQnXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YXNldEZvckltcGFsYShiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gZGF0YXNldC5jb25maWcucXVlcnlDb25maWc7XG4gICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRPYmplY3Q6IGFueSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXF1ZXN0LnJlcUZpZWxkcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhcnREYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdC5yZWNvcmREYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gKGZpbHRlcnMgJiYgZmlsdGVycy5sZW5ndGggIT09IDApID8gT2JqZWN0LmtleXMoZmlsdGVycy5vcGVyYXRpb25GaWx0ZXIpLm1hcChrZXkgPT4gKHsgW2tleV06IGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2tleV0gfSkpIDogW107XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydmaWx0ZXJzJ10gPSB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKG9wZXJhdG9yLCByZXF1ZXN0Lm1hcGVkRmlsdGVycyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ3BhZ2luYXRpb25SZXF1aXJlZCddID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmNvbmZpZy5hcGkgPT0gXCIva3BpL2dlbmVyaWNBZ2dyZWdhdGVQYWdpbmF0ZWRLcGlTZXJ2aWNlUmVzcG9uc2VcIikge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydtZWFzdXJlcyddID0gcmVxdWVzdC5tZWFzdXJlcztcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnZGltZW5zaW9ucyddID0gcmVxdWVzdC5kaW1lbnNpb25zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnY29sdW1ucyddID0gdGhpcy5nZXRGb3JtYXRPYmplY3RGb3JDb2x1bW4ocmVxdWVzdC5jb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmhhdmluZ3MgJiYgcmVxdWVzdC5oYXZpbmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydoYXZpbmdzJ10gPSByZXF1ZXN0LmhhdmluZ3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldERhdGEodHJhbnNmb3JtZWRPYmplY3QsIGRhdGFzZXQuY29uZmlnLmFwaSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhWydkYXRhc2V0J107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0T2JqZWN0Rm9yQ29sdW1uKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGxldCBjb2x1bW5EYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkdmFuY2VkQ29sdW1uLCBjb2x1bW5OYW1lLCBlbnJpY2hGdW5jdGlvbiwgZGF0YUZpZWxkIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgY29sdW1uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlZENvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIGVucmljaEZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGFsaWFzTmFtZTogZGF0YUZpZWxkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2x1bW5EYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoZmlsdGVyZGF0YTogYW55W10sIG1hcERhdGE6IGFueVtdKSB7XG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICAgIG1hcERhdGEuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHRPYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogbWFwcGluZy5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogbWFwcGluZy5vcGVyYXRvck5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsdGVyZGF0YSA9IGZpbHRlcmRhdGEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhvYmopWzBdO1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gJ3N0YXJ0RGF0ZScgJiYga2V5ICE9PSAnZW5kRGF0ZSc7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJkYXRhLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKGZpbHRlcilbMF07XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ01hcHBpbmcgPSBtYXBEYXRhLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nLmxvY2FsQ29sdW1uID09PSBmaWx0ZXJLZXkpO1xuXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFwcGluZykge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHRPYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZTogZmlsdGVyS2V5LFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwiZXFcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlcltmaWx0ZXJLZXldXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltmaWx0ZXJLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IGZpbHRlcltmaWx0ZXJLZXldLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IGZpbHRlcltmaWx0ZXJLZXldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT0gJ29wZXJhdG9yX2tleScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJlcVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKG9iaiA9PiBvYmoudmFsdWUgIT09IG51bGwgJiYgb2JqLnZhbHVlICE9PSBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRGb3JTaW1wbGVBcGlJbXBhbGEoYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5oYXNPd25Qcm9wZXJ0eShmaWx0ZXIubG9jYWxDb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5kZWZhdWx0VmFsdWUgPSBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltmaWx0ZXIubG9jYWxDb2x1bW5dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwicG9zdFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlcnZpY2VKc29uOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVjb2x1bW4gPSBmaWx0ZXIuc2VydmVyQ29sdW1uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlY29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIGZpbHRlci5kYXRhVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gZmlsdGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0U2ltcGxlQXBpUG9zdFJlcXVlc3QoZGF0YXNldC5jb25maWcuYXBpLCBzZXJ2aWNlSnNvbikuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwiZ2V0XCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdFVybCA9IGRhdGFzZXQuY29uZmlnLmFwaSArIFwiP1wiO1xuICAgICAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VXJsICs9IGAke2ZpbHRlci5zZXJ2ZXJDb2x1bW59PSR7ZmlsdGVyLmRlZmF1bHRWYWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCArPSBcIiZcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0U2ltcGxlQXBpR2V0UmVxdWVzdChyZXF1ZXN0VXJsKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9yUGxhaW5Kc29uKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIF9maWx0ZXI6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RhcGkgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyAnP2RhdGFzZXRJZD0nICsgZGF0YXNldC5kYXRhc2V0SWQ7XG4gICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXRKc29uRGF0YXNldFBheWxvYWQocmVxdWVzdGFwaSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSAoZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCAhPT0gMCkgPyBPYmplY3Qua2V5cyhmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikubWFwKGtleSA9PiAoeyBba2V5XTogZmlsdGVycy5vcGVyYXRpb25GaWx0ZXJba2V5XSB9KSkgOiBbXTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0QXAgPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbmFudElkcyA9IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVyc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZiA9PiBmLnNlcnZlckNvbHVtbiA9PT0gXCJ0ZW5hbnRfaWRcIilcbiAgICAgICAgICAgICAgICAubWFwKGYgPT4gZi5kZWZhdWx0VmFsdWUpO1xuXG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGVkVGVuYW50cyA9IHRoaXMuc2VjdXJpdHlQcmluY2lwYWwuZ2V0VGFyZ2V0VGVuYW50SWRzKCk7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoID0gKGFzc29jaWF0ZWRUZW5hbnRzKSA/IHRlbmFudElkcy5zb21lKHQgPT4gYXNzb2NpYXRlZFRlbmFudHMuaW5jbHVkZXModCkpIDogdHJ1ZTtcbiAgICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiVW5hdXRob3JpemVkIEFjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IFtdO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdF9wYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJZDogZGF0YXNldElkLFxuICAgICAgICAgICAgICAgICAgICBkYkNvbmZpZzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZGJDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlTmFtZTogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKG9wZXJhdG9yLCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVF1ZXJ5OiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy50ZW1wbGF0ZVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBlbnJpY2htZW50czogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZW5yaWNobWVudHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdlbmVyaWNTcWxRdWVyeVJlc3BvbnNlKHJlcXVlc3RBcCwgcmVxdWVzdF9wYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKGZpbHRlcmRhdGE6IGFueVtdLCBtYXBEYXRhOiBhbnlbXSkge1xuICAgICAgICBcbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCB0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZXJkYXRhID0gZmlsdGVyZGF0YS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG9iailbMF07XG4gICAgICAgICAgICByZXR1cm4ga2V5ICE9PSAnc3RhcnREYXRlJyAmJiBrZXkgIT09ICdlbmREYXRlJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlcmRhdGEuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTWFwcGluZyA9IG1hcERhdGEuZmluZChtYXBwaW5nID0+IG1hcHBpbmcubG9jYWxDb2x1bW4gPT09IGZpbHRlcktleSk7XG5cbiAgICAgICAgICAgIGlmICghZXhpc3RpbmdNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBmaWx0ZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyW2ZpbHRlcktleV1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW2ZpbHRlcktleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV0uam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdDtcbiAgICB9XG59Il19