gamma-app-controller 2.0.25 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/application-controller/application-content.service.mjs +36 -36
- package/esm2020/lib/application-controller/application-controller.module.mjs +6 -1
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +2 -2
- package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +10 -27
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +6 -3
- package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +3 -3
- package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +32 -167
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +4 -3
- package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +12 -228
- package/esm2020/lib/application-controller/support-components/single-card/single-card.component.mjs +24 -34
- package/esm2020/lib/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +3 -4
- package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +39 -109
- package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +15 -2
- package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +7 -272
- package/esm2020/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.mjs +3 -3
- package/esm2020/lib/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +439 -0
- package/esm2020/lib/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +57 -51
- package/esm2020/lib/shared/permission-helper.mjs +4 -35
- package/esm2020/lib/shared/template-dataset-call-service.mjs +5 -1
- package/esm2020/lib/shared/user-access/user-access.component.mjs +5 -5
- package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +275 -153
- package/esm2020/lib/template-module/KpiCreationModule/createKpi.service.mjs +6 -37
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/basic/basic.component.mjs +3 -3
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/collapsable/collapsable.component.mjs +15 -4
- package/esm2020/lib/template-module/KpiCreationModule/treeview/treeview.component.mjs +6 -4
- package/esm2020/lib/template-module/bookmarked-template/bookmarked-layout.service.mjs +8 -8
- package/esm2020/lib/template-module/cdrConfigModule/cdr-browser.service.mjs +2 -2
- package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +2 -1
- package/esm2020/lib/template-module/defaulLandingComponent/landing-component.service.mjs +8 -8
- package/esm2020/lib/template-module/defaulLandingMultiLayoutComponent/defaulLandingMultiLayout.service.mjs +8 -8
- package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-multi-layout.service.mjs +8 -8
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.mjs +8 -16
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +6 -10
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/gamma-app-controller.mjs +8672 -8850
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +8427 -8617
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-content.service.d.ts +1 -1
- package/lib/application-controller/application-controller.module.d.ts +26 -25
- package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +0 -2
- package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +3 -18
- package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +2 -46
- package/lib/application-controller/support-components/single-card/single-card.component.d.ts +2 -5
- package/lib/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +0 -1
- package/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +1 -3
- package/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +1 -0
- package/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +0 -40
- package/lib/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +62 -0
- package/lib/shared/gamma-bread-crumbs/bread-crumbs.component.d.ts +0 -2
- package/lib/shared/permission-helper.d.ts +0 -1
- package/lib/template-module/KpiCreationModule/create-kpi-tree.component.d.ts +15 -11
- package/lib/template-module/KpiCreationModule/createKpi.service.d.ts +0 -4
- package/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.d.ts +0 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -11,10 +11,9 @@ import * as i8 from "devextreme-angular/ui/nested";
|
|
|
11
11
|
import * as i9 from "devextreme-angular/ui/check-box";
|
|
12
12
|
import * as i10 from "devextreme-angular/ui/html-editor";
|
|
13
13
|
import * as i11 from "devextreme-angular/ui/select-box";
|
|
14
|
-
import * as i12 from "devextreme-angular/ui/
|
|
15
|
-
import * as i13 from "
|
|
16
|
-
import * as i14 from "
|
|
17
|
-
import * as i15 from "./treeview/treeview.component";
|
|
14
|
+
import * as i12 from "devextreme-angular/ui/text-box";
|
|
15
|
+
import * as i13 from "../../shared/user-access/user-access.component";
|
|
16
|
+
import * as i14 from "./treeview/treeview.component";
|
|
18
17
|
export class CreateKpiTreeComponent {
|
|
19
18
|
constructor(commonService, formBuilder, service, toastr, router) {
|
|
20
19
|
this.commonService = commonService;
|
|
@@ -38,9 +37,6 @@ export class CreateKpiTreeComponent {
|
|
|
38
37
|
this.kpi_external = false;
|
|
39
38
|
this.isComponentUpdata = false;
|
|
40
39
|
this.userOptionContainer = [];
|
|
41
|
-
this.selected_aliases = [];
|
|
42
|
-
this.isKpiTreePrepared = false;
|
|
43
|
-
this.kpiConfigDataSource = [];
|
|
44
40
|
}
|
|
45
41
|
ngOnInit() {
|
|
46
42
|
this.getAllKpiData();
|
|
@@ -56,12 +52,10 @@ export class CreateKpiTreeComponent {
|
|
|
56
52
|
});
|
|
57
53
|
}
|
|
58
54
|
getAllKpiData() {
|
|
55
|
+
this.loadingModal = false;
|
|
59
56
|
this.keiParentDataSource = [];
|
|
60
|
-
this.service.
|
|
61
|
-
|
|
62
|
-
this.kpiConfigDataSource = data;
|
|
63
|
-
this.kpiData = this.buildMenuTree(userName, data);
|
|
64
|
-
this.loadingModal = false;
|
|
57
|
+
this.service.getlistKpiBrowser().subscribe((data) => {
|
|
58
|
+
this.kpiData = data;
|
|
65
59
|
this.prepareParentDataSource(data);
|
|
66
60
|
}, err => {
|
|
67
61
|
this.loadingModal = false;
|
|
@@ -70,97 +64,104 @@ export class CreateKpiTreeComponent {
|
|
|
70
64
|
}
|
|
71
65
|
prepareParentDataSource(data) {
|
|
72
66
|
data.forEach((result) => {
|
|
73
|
-
if (result.
|
|
74
|
-
|
|
67
|
+
if (result.tag_type == 'parent') {
|
|
68
|
+
let node = {
|
|
69
|
+
"name": result.name,
|
|
70
|
+
"tid": result.tid
|
|
71
|
+
};
|
|
72
|
+
this.keiParentDataSource.push(node);
|
|
73
|
+
this.prepareParentDataSource(result.nodes);
|
|
75
74
|
}
|
|
76
75
|
});
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
77
|
+
makeNewKpi() {
|
|
78
|
+
if (this.selected_kpi_tid !== undefined && this.selected_kpi_tid.length > 0) {
|
|
79
|
+
this.getHeistId(this.kpiData, this.selected_kpi_tid);
|
|
80
|
+
this.createNewKpiWithTid();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.heistValue = (this.kpiData.length != 0) ? this.getHighestTid(this.kpiData) : 0;
|
|
84
|
+
let value = parseInt(this.heistValue) + 1;
|
|
85
|
+
let obj = {
|
|
86
|
+
"name": this.select_kpi_name,
|
|
87
|
+
"tid": value.toString(),
|
|
88
|
+
"isBookmarked": false,
|
|
89
|
+
"isAccessible": this.kpi_external,
|
|
90
|
+
"lastAccessTime": "",
|
|
91
|
+
"tag_type": this.select_tag_type,
|
|
92
|
+
"id": this.selected_id,
|
|
93
|
+
"pageId": this.selected_page_id,
|
|
94
|
+
"desc": this.selected_desc,
|
|
95
|
+
"isVisible": this.kpi_visibility,
|
|
96
|
+
"nodes": [],
|
|
97
|
+
"config": {}
|
|
98
|
+
};
|
|
99
|
+
this.kpiData.push(obj);
|
|
100
|
+
if (this.select_tag_type == 'parent') {
|
|
101
|
+
let obj = {
|
|
102
|
+
"name": this.select_kpi_name,
|
|
103
|
+
"tid": value.toString(),
|
|
104
|
+
};
|
|
105
|
+
this.keiParentDataSource.push(obj);
|
|
106
|
+
}
|
|
107
|
+
if (this.select_tag_type == 'child') {
|
|
108
|
+
let obj = {
|
|
109
|
+
"name": this.select_kpi_name,
|
|
110
|
+
"id": this.selected_id,
|
|
111
|
+
"pageId": this.selected_page_id,
|
|
112
|
+
"searchFilter": false,
|
|
113
|
+
"isSrvTypeOperator": false,
|
|
114
|
+
"operationLevels": [],
|
|
115
|
+
"fixOperationLevles": [],
|
|
116
|
+
"api_config": []
|
|
117
|
+
};
|
|
118
|
+
this.service.configureKpiBrowserConfig(obj).subscribe(data => {
|
|
119
|
+
console.log("kpi browser config created");
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
this.submitNewKpi();
|
|
123
|
+
}
|
|
125
124
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
let
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
125
|
+
createNewKpiWithTid() {
|
|
126
|
+
let auto_tid = this.autoIncrement(this.selected_kpi_tid, this.heistValue);
|
|
127
|
+
let obj = {
|
|
128
|
+
"name": this.select_kpi_name,
|
|
129
|
+
"tid": auto_tid,
|
|
130
|
+
"isBookmarked": false,
|
|
131
|
+
"isAccessible": this.kpi_external,
|
|
132
|
+
"lastAccessTime": "",
|
|
133
|
+
"tag_type": this.select_tag_type,
|
|
134
|
+
"id": this.selected_id,
|
|
132
135
|
"pageId": this.selected_page_id,
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"visibility": this.kpi_visibility,
|
|
138
|
-
"externalKpi": this.kpi_external,
|
|
139
|
-
"target": "",
|
|
140
|
-
"icon": "",
|
|
141
|
-
"url": pageData ? pageData.pageUrl : "",
|
|
142
|
-
"kpiType": this.select_tag_type == "parent" ? "collapsable" : "basic",
|
|
143
|
-
"parentTid": this.selected_kpi_tid,
|
|
144
|
-
"childTid": this.selected_kpi_child_tid,
|
|
145
|
-
"permissions": this.userOptionContainer,
|
|
136
|
+
"desc": this.selected_desc,
|
|
137
|
+
"isVisible": this.kpi_visibility,
|
|
138
|
+
"nodes": [],
|
|
139
|
+
"config": {}
|
|
146
140
|
};
|
|
147
|
-
this.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
this.toastr.error('Unexpected Server Exception. Please contact System Admin.', 'KPI Config');
|
|
154
|
-
});
|
|
155
|
-
console.log("KPI with User Entity Obj:", kpiObj);
|
|
156
|
-
}
|
|
157
|
-
onCustomDimentionCreating(args) {
|
|
158
|
-
const newValue = args.text;
|
|
159
|
-
args.customItem = newValue;
|
|
160
|
-
const isItemInDataSource = this.selected_aliases.some((item) => item === newValue);
|
|
161
|
-
if (!isItemInDataSource) {
|
|
162
|
-
this.selected_aliases.unshift(newValue);
|
|
141
|
+
if (this.select_tag_type == 'parent') {
|
|
142
|
+
let obj = {
|
|
143
|
+
"name": this.select_kpi_name,
|
|
144
|
+
"tid": auto_tid
|
|
145
|
+
};
|
|
146
|
+
this.keiParentDataSource.push(obj);
|
|
163
147
|
}
|
|
148
|
+
if (this.select_tag_type == 'child') {
|
|
149
|
+
let obj = {
|
|
150
|
+
"name": this.select_kpi_name,
|
|
151
|
+
"id": this.selected_id,
|
|
152
|
+
"pageId": this.selected_page_id,
|
|
153
|
+
"searchFilter": false,
|
|
154
|
+
"isSrvTypeOperator": false,
|
|
155
|
+
"operationLevels": [],
|
|
156
|
+
"fixOperationLevles": [],
|
|
157
|
+
"api_config": []
|
|
158
|
+
};
|
|
159
|
+
this.service.configureKpiBrowserConfig(obj).subscribe(data => {
|
|
160
|
+
console.log("kpi browser config created");
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
this.setKpibyTid(this.kpiData, this.selected_kpi_tid, obj);
|
|
164
|
+
this.submitNewKpi();
|
|
164
165
|
}
|
|
165
166
|
getReseteKpi() {
|
|
166
167
|
this.select_kpi_name = '';
|
|
@@ -178,38 +179,73 @@ export class CreateKpiTreeComponent {
|
|
|
178
179
|
this.editable_desc = '';
|
|
179
180
|
this.editable_info = '';
|
|
180
181
|
this.parante_kpi_name = '';
|
|
181
|
-
this.selected_kpi_child_tid = '';
|
|
182
|
-
this.selected_aliases = [];
|
|
183
182
|
this.kpi_external = false;
|
|
184
183
|
this.kpi_visibility = false;
|
|
185
184
|
this.isComponentUpdata = false;
|
|
186
|
-
|
|
185
|
+
}
|
|
186
|
+
getDeletKpi(tid) {
|
|
187
|
+
console.log(this.selected_p_kpi);
|
|
187
188
|
}
|
|
188
189
|
addTagtypeValue(e) {
|
|
189
190
|
this.select_tag_type = e.value;
|
|
190
191
|
}
|
|
191
192
|
getKpiItemValue(e) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
const kpi_data = this.keiParentDataSource.find((item) => item.tid === e.value);
|
|
194
|
+
this.selected_kpi_tid = kpi_data.tid;
|
|
195
|
+
}
|
|
196
|
+
autoIncrement(string1, string2) {
|
|
197
|
+
if (string2 === null) {
|
|
198
|
+
const numberPart = string1 + '.1';
|
|
199
|
+
return numberPart;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const parts = string2.split('.');
|
|
203
|
+
let lastPart = parseInt(parts[parts.length - 1], 10);
|
|
204
|
+
let new_number = lastPart++;
|
|
205
|
+
parts[parts.length - 1] = lastPart.toString();
|
|
206
|
+
return parts.join(".");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
setKpibyTid(data, tid, newKpiObj) {
|
|
210
|
+
data.forEach(result => {
|
|
211
|
+
if (result.nodes !== undefined) {
|
|
212
|
+
if (result.tid == tid) {
|
|
213
|
+
result.nodes.push(newKpiObj);
|
|
214
|
+
}
|
|
215
|
+
this.setKpibyTid(result.nodes, tid, newKpiObj);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
getHeistId(data, tid) {
|
|
220
|
+
data.forEach((result) => {
|
|
221
|
+
if (result.tid === tid) {
|
|
222
|
+
if (result.nodes.length > 0) {
|
|
223
|
+
this.heistValue = this.getHighestTid(result.nodes);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.heistValue = null;
|
|
227
|
+
}
|
|
197
228
|
}
|
|
198
|
-
else {
|
|
199
|
-
|
|
200
|
-
this.selected_kpi_tid = kpi_data[tidKey];
|
|
201
|
-
this.selected_kpi_child_tid = this.getNextChildTid(this.selected_kpi_tid, this.kpiConfigDataSource);
|
|
229
|
+
else if (result.nodes !== undefined && result.nodes.length > 0) {
|
|
230
|
+
this.getHeistId(result.nodes, tid);
|
|
202
231
|
}
|
|
203
|
-
}
|
|
232
|
+
});
|
|
204
233
|
}
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
234
|
+
getHighestTid(data) {
|
|
235
|
+
const highestTid = data.reduce((maxTid, currentItem) => {
|
|
236
|
+
const currentTidParts = currentItem.tid.split('.').map(part => parseInt(part, 10));
|
|
237
|
+
const maxTidParts = maxTid.split('.').map(part => parseInt(part, 10));
|
|
238
|
+
for (let i = 0; i < currentTidParts.length; i++) {
|
|
239
|
+
if (currentTidParts[i] > maxTidParts[i]) {
|
|
240
|
+
return currentItem.tid;
|
|
241
|
+
}
|
|
242
|
+
else if (currentTidParts[i] < maxTidParts[i]) {
|
|
243
|
+
return maxTid;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return maxTid;
|
|
247
|
+
}, data[0].tid);
|
|
248
|
+
return highestTid;
|
|
213
249
|
}
|
|
214
250
|
addNewKpi() {
|
|
215
251
|
this.isNewKpiAdded = true;
|
|
@@ -218,6 +254,22 @@ export class CreateKpiTreeComponent {
|
|
|
218
254
|
cancelUpdate() {
|
|
219
255
|
this.isEditKpiAdded = false;
|
|
220
256
|
}
|
|
257
|
+
getEditableKpi(data) {
|
|
258
|
+
this.isComponentUpdata = false;
|
|
259
|
+
this.isEditKpiAdded = true;
|
|
260
|
+
this.isNewKpiAdded = false;
|
|
261
|
+
this.isFromEditable = true;
|
|
262
|
+
this.editable_desc = data.desc;
|
|
263
|
+
this.editable_info = (data.kpiInfo) ? data.kpiInfo : "";
|
|
264
|
+
this.editable_kpi_name = data.name;
|
|
265
|
+
this.editable_tag_type = data.tag_type;
|
|
266
|
+
this.editable_kpi_tid = data.tid;
|
|
267
|
+
this.editable_id = data.id;
|
|
268
|
+
this.editable_page_id = data.pageId;
|
|
269
|
+
this.kpi_visibility = data.isVisible;
|
|
270
|
+
this.kpi_external = data.isAccessible;
|
|
271
|
+
this.parante_kpi_name = this.getKpiParrentName(data.tid);
|
|
272
|
+
}
|
|
221
273
|
getKpiParrentName(input) {
|
|
222
274
|
const lastIndex = input.lastIndexOf('.');
|
|
223
275
|
if (lastIndex === -1) {
|
|
@@ -225,15 +277,55 @@ export class CreateKpiTreeComponent {
|
|
|
225
277
|
}
|
|
226
278
|
return input.substring(0, lastIndex);
|
|
227
279
|
}
|
|
228
|
-
|
|
229
|
-
|
|
280
|
+
getUpdateKpi() {
|
|
281
|
+
if (!this.isComponentUpdata) {
|
|
282
|
+
this.getUpdateKpiName(this.kpiData, this.editable_kpi_tid);
|
|
283
|
+
}
|
|
284
|
+
setTimeout(() => {
|
|
285
|
+
this.submitNewKpi();
|
|
286
|
+
this.toastr.success('KPI Updated Successfully');
|
|
287
|
+
this.reseteUpdateKpiForm();
|
|
288
|
+
this.isEditKpiAdded = false;
|
|
289
|
+
}, 500);
|
|
290
|
+
}
|
|
291
|
+
getDeleteKpi() {
|
|
292
|
+
this.getDeleteKpiName(this.kpiData, this.editable_kpi_tid);
|
|
293
|
+
setTimeout(() => {
|
|
294
|
+
this.submitNewKpi();
|
|
230
295
|
this.toastr.success('KPI Deleted Successfully');
|
|
231
|
-
this.
|
|
232
|
-
this.
|
|
233
|
-
},
|
|
234
|
-
|
|
296
|
+
this.reseteUpdateKpiForm();
|
|
297
|
+
this.isEditKpiAdded = false;
|
|
298
|
+
}, 500);
|
|
299
|
+
}
|
|
300
|
+
getUpdateKpiName(data, tid) {
|
|
301
|
+
data.forEach((result) => {
|
|
302
|
+
if (result.tid === tid) {
|
|
303
|
+
result.desc = this.editable_desc;
|
|
304
|
+
result.kpiInfo = this.editable_info;
|
|
305
|
+
result.name = this.editable_kpi_name;
|
|
306
|
+
result.id = this.editable_id;
|
|
307
|
+
result.pageId = this.editable_page_id;
|
|
308
|
+
result.tag_type = this.editable_tag_type;
|
|
309
|
+
result.isVisible = this.kpi_visibility;
|
|
310
|
+
result.isAccessible = this.kpi_external;
|
|
311
|
+
result.tid = this.editable_kpi_tid;
|
|
312
|
+
}
|
|
313
|
+
else if (result.nodes !== undefined && result.nodes.length > 0) {
|
|
314
|
+
this.getUpdateKpiName(result.nodes, tid);
|
|
315
|
+
}
|
|
235
316
|
});
|
|
236
317
|
}
|
|
318
|
+
getDeleteKpiName(data, tid) {
|
|
319
|
+
for (let i = data.length - 1; i >= 0; i--) {
|
|
320
|
+
const result = data[i];
|
|
321
|
+
if (result.tid === tid) {
|
|
322
|
+
data.splice(i, 1);
|
|
323
|
+
}
|
|
324
|
+
else if (result.nodes !== undefined && result.nodes.length > 0) {
|
|
325
|
+
this.getDeleteKpiName(result.nodes, tid);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
237
329
|
reseteUpdateKpiForm() {
|
|
238
330
|
this.editable_desc = undefined;
|
|
239
331
|
this.editable_info = undefined;
|
|
@@ -254,40 +346,70 @@ export class CreateKpiTreeComponent {
|
|
|
254
346
|
this.getReseteKpi();
|
|
255
347
|
});
|
|
256
348
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
349
|
+
getNewParrentKpiItemValue(e) {
|
|
350
|
+
this.isComponentUpdata = true;
|
|
351
|
+
const kpi_data = this.keiParentDataSource.find((item) => item.tid === e.value);
|
|
352
|
+
this.getHeistId(this.kpiData, kpi_data.tid);
|
|
353
|
+
let auto_tid = this.autoIncrement(kpi_data.tid, this.heistValue);
|
|
354
|
+
let obj = {
|
|
355
|
+
"name": this.editable_kpi_name,
|
|
356
|
+
"tid": auto_tid,
|
|
357
|
+
"isBookmarked": false,
|
|
358
|
+
"isAccessible": this.kpi_external,
|
|
359
|
+
"lastAccessTime": "",
|
|
360
|
+
"tag_type": this.editable_tag_type,
|
|
361
|
+
"id": this.editable_id,
|
|
362
|
+
"pageId": this.editable_page_id,
|
|
363
|
+
"desc": this.editable_desc,
|
|
364
|
+
"kpiInfo": this.editable_info,
|
|
365
|
+
"isVisible": this.kpi_visibility,
|
|
366
|
+
"nodes": [],
|
|
367
|
+
"config": {}
|
|
368
|
+
};
|
|
369
|
+
this.getDeleteKpiName(this.kpiData, this.editable_kpi_tid);
|
|
370
|
+
this.setKpibyTid(this.kpiData, kpi_data.tid, obj);
|
|
371
|
+
this.editable_kpi_tid = kpi_data.tid;
|
|
372
|
+
}
|
|
373
|
+
makeNewKpiWithUserEntity() {
|
|
374
|
+
this.userOptionContainer.forEach(element => {
|
|
375
|
+
let att_value = element.attributeValues.split(",");
|
|
376
|
+
element.attributeValues = att_value;
|
|
283
377
|
});
|
|
284
|
-
|
|
378
|
+
if (this.selected_kpi_tid !== undefined && this.selected_kpi_tid.length > 0) {
|
|
379
|
+
this.getHeistId(this.kpiData, this.selected_kpi_tid);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.heistValue = (this.kpiData.length != 0) ? this.getHighestTid(this.kpiData) : 0;
|
|
383
|
+
let value = parseInt(this.heistValue) + 1;
|
|
384
|
+
}
|
|
385
|
+
let kpiObj = {
|
|
386
|
+
"kpiId": this.selected_id,
|
|
387
|
+
"pageId": this.selected_page_id,
|
|
388
|
+
"title": this.select_kpi_name,
|
|
389
|
+
"description": this.selected_desc,
|
|
390
|
+
"kpiInfo": this.selected_info,
|
|
391
|
+
"tagType": this.select_tag_type,
|
|
392
|
+
"active": true,
|
|
393
|
+
"visibility": this.kpi_visibility,
|
|
394
|
+
"externalKpi": this.kpi_external,
|
|
395
|
+
"target": "",
|
|
396
|
+
"icon": "",
|
|
397
|
+
"url": "",
|
|
398
|
+
"kpiType": "",
|
|
399
|
+
"parentTid": this.selected_kpi_tid,
|
|
400
|
+
"childTid": "",
|
|
401
|
+
"measures": this.userOptionContainer,
|
|
402
|
+
};
|
|
403
|
+
console.log("KPI with User Entity Obj:", kpiObj);
|
|
404
|
+
}
|
|
405
|
+
routeToKpiConfig() {
|
|
406
|
+
this.router.navigate(['apps/controlPanel/kpiController/kpiConfig']);
|
|
285
407
|
}
|
|
286
408
|
}
|
|
287
409
|
CreateKpiTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, deps: [{ token: i1.CommonService }, { token: i2.FormBuilder }, { token: i3.CreateKpIService }, { token: i4.ToastrService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
288
|
-
CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.UserAccessComponent, selector: "app-user-access", inputs: ["userOptionContainer"], outputs: ["userOptionContainerChange"] }, { kind: "component", type: i15.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
|
|
410
|
+
CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpiWithUserEntity()\">Create With User Privilege\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.UserAccessComponent, selector: "app-user-access", inputs: ["userOptionContainer"], outputs: ["userOptionContainerChange"] }, { kind: "component", type: i14.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
|
|
289
411
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, decorators: [{
|
|
290
412
|
type: Component,
|
|
291
|
-
args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
|
|
413
|
+
args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpiWithUserEntity()\">Create With User Privilege\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
|
|
292
414
|
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.FormBuilder }, { type: i3.CreateKpIService }, { type: i4.ToastrService }, { type: i5.Router }]; } });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhbEQsTUFBTSxPQUFPLHNCQUFzQjtJQTZDakMsWUFDUyxhQUE0QixFQUFVLFdBQXdCLEVBQzdELE9BQXlCLEVBQVUsTUFBcUIsRUFDeEQsTUFBYztRQUZmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDN0QsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3hELFdBQU0sR0FBTixNQUFNLENBQVE7UUEvQ3hCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUU5QixZQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFXekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFFbEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFPbkIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFOUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBR25DLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUU5QixxQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRW5DLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztJQU85QixDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBRTNGLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUVYLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzlGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQUk7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQzNCLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBTzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCx3QkFBd0I7UUFDdEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXJJLElBQUksTUFBTSxHQUFHO1lBQ1gsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNoQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsU0FBUyxFQUFFLEVBQUU7WUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDL0IsUUFBUSxFQUFFLElBQUk7WUFDZCxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDakMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ2hDLFFBQVEsRUFBRSxFQUFFO1lBQ1osTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3JFLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ3ZDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1NBQ3hDLENBQUE7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQy9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDOUYsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUVyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUtqRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDOUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUdoRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUU3QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVySSxJQUFJLE1BQU0sR0FBRztZQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFNBQVMsRUFBRSxFQUFFO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQy9CLFFBQVEsRUFBRSxJQUFJO1lBQ2QsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNoQyxRQUFRLEVBQUUsRUFBRTtZQUNaLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTztZQUNyRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNsQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUN2QyxhQUFhLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtTQUN4QyxDQUFBO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTlCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzlGLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBSTtRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzNCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUlELFlBQVk7UUFDVixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUdELGVBQWUsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFHMUM7aUJBQU07Z0JBRUwsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUM1RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFFckc7U0FJRjtJQUVILENBQUM7SUFFQSxlQUFlLENBQUMsU0FBaUIsRUFBRSxtQkFBMEI7UUFFeEQsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUN6QyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQ3RELENBQUM7UUFHRixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBR04sT0FBTyxHQUFHLFNBQVMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUdMLFNBQVM7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFJRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzlGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxhQUFhLENBQUMsUUFBZ0IsRUFBRSxPQUFjO1FBSzVDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUU1QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUUzQixhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUMzQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsUUFBUSxFQUFFLEVBQUU7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDthQUNGO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7bUhBaFhVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNEQ2JuQyxpMFdBME1NOzJGRDdMTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDcmVhdGVLcElTZXJ2aWNlIH0gZnJvbSAnLi9jcmVhdGVLcGkuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUta3BpJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUtwaVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb2FkaW5nTW9kYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBrZWlQYXJlbnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgbXlGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ1R5cGUgPSBbXCJwYXJlbnRcIiwgXCJjaGlsZFwiXTtcbiAga3BpX2NvbnN0cnVjdG9yID0gW107XG4gIHNlbGVjdGVkX3Bfa3BpOiBhbnkgPSB7fTtcblxuICBzZWxlY3Rfa3BpX25hbWU6IGFueTtcbiAgc2VsZWN0X3RhZ190eXBlOiBhbnk7XG4gIHNlbGVjdGVkX2lkOiBhbnk7XG4gIHNlbGVjdGVkX3BhZ2VfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfbmVzdGVkX25hbWU6IGFueTtcbiAgc2VsZWN0ZWRfa3BpX3RpZDogYW55O1xuICBzZWxlY3RlZF9kZXNjOiBhbnk7XG4gIHNlbGVjdGVkX2luZm86IGFueTtcblxuICBoZWlnaHQgPSA5MDtcbiAga3BpRGF0YTogYW55ID0gW107XG4gIGhlaXN0VmFsdWU6IGFueTtcbiAgaXNGcm9tRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXdLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXRLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGVkaXRhYmxlX2Rlc2MgPSBcIlwiO1xuICBlZGl0YWJsZV9pbmZvID0gXCJcIjtcbiAgZWRpdGFibGVfaWQ7XG4gIGVkaXRhYmxlX3BhZ2VfaWQ7XG4gIGVkaXRhYmxlX3RhZ190eXBlO1xuICBlZGl0YWJsZV9rcGlfbmFtZTtcbiAgZWRpdGFibGVfa3BpX3RpZDtcbiAgc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZDtcbiAga3BpX3Zpc2liaWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAga3BpX2V4dGVybmFsOiBib29sZWFuID0gZmFsc2U7XG4gIHBhcmFudGVfa3BpX25hbWU6IGFueTtcbiAgaXNDb21wb25lbnRVcGRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVEYXRhU291cmNlOiBhbnk7XG4gIC8vIGtwaURhdGFKc29uOmFueTtcbiAgdXNlck9wdGlvbkNvbnRhaW5lcjogYW55ID0gW107XG5cbiAgc2VsZWN0ZWRfYWxpYXNlczogYW55ID0gW107XG4gIGlzS3BpVHJlZVByZXBhcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAga3BpQ29uZmlnRGF0YVNvdXJjZTogYW55ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc2VydmljZTogQ3JlYXRlS3BJU2VydmljZSwgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgIHRoaXMuZ2V0QXBwUGFnZUNvbmZpZ3MoKTtcbiAgfVxuXG4gIGdldEFwcFBhZ2VDb25maWdzKCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlQ29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdQYWdlIElEJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRBbGxLcGlEYXRhKCkge1xuXG4gICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlID0gW107XG4gICAgdGhpcy5zZXJ2aWNlLmxpc3RLcGlFbnRyeUNvbmZpZ3MoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlck5hbWUgPSBcImFkbWluXCI7XG4gICAgICB0aGlzLmtwaUNvbmZpZ0RhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgdGhpcy5rcGlEYXRhID0gdGhpcy5idWlsZE1lbnVUcmVlKHVzZXJOYW1lLCBkYXRhKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAvLyAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIHRoaXMucHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSlcblxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuICB9XG5cbiAgcHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSkge1xuICAgIGRhdGEuZm9yRWFjaCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQudGFnVHlwZSA9PSAncGFyZW50Jykge1xuICAgICAgICAvLyBjb25zdCB0aWRLZXkgPSBkYXRhLnRhZ1R5cGUgPT09ICdjaGlsZCcgPyAnY2hpbGRUaWQnIDogJ3BhcmVudFRpZCc7XG4gICAgICAgIC8vICBsZXQgbm9kZSA9IHtcbiAgICAgICAgLy8gICBcImtwaU5hbWVcIjogcmVzdWx0LmtwaU5hbWUsXG4gICAgICAgIC8vICAgXCJ0aWRcIjogcmVzdWx0W3RpZEtleV0sXG4gICAgICAgIC8vICAgXCJrcGlJZFwiOiByZXN1bHQua3BpSWRcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBtYWtlTmV3S3BpV2l0aFVzZXJFbnRpdHkoKSB7XG4gICAgY29uc3QgcGFnZURhdGEgPSAodGhpcy5zZWxlY3RlZF9wYWdlX2lkKSA/IHRoaXMudGVtcGxhdGVEYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wYWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCkgOiBudWxsO1xuXG4gICAgbGV0IGtwaU9iaiA9IHtcbiAgICAgIFwia3BpSWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgIFwia3BpTmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgIFwiYWxpYXNlc1wiOiB0aGlzLnNlbGVjdGVkX2FsaWFzZXMsXG4gICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IHRoaXMuc2VsZWN0ZWRfZGVzYyxcbiAgICAgIFwia3BpSW5mb1wiOiBcIlwiLFxuICAgICAgXCJ0YWdUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJhY3RpdmVcIjogdHJ1ZSxcbiAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJleHRlcm5hbEtwaVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwidGFyZ2V0XCI6IFwiXCIsXG4gICAgICBcImljb25cIjogXCJcIixcbiAgICAgIFwidXJsXCI6IHBhZ2VEYXRhID8gcGFnZURhdGEucGFnZVVybCA6IFwiXCIsXG4gICAgICBcImtwaVR5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gXCJwYXJlbnRcIiA/IFwiY29sbGFwc2FibGVcIiA6IFwiYmFzaWNcIixcbiAgICAgIFwicGFyZW50VGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCxcbiAgICAgIFwiY2hpbGRUaWRcIjogdGhpcy5zZWxlY3RlZF9rcGlfY2hpbGRfdGlkLFxuICAgICAgXCJwZXJtaXNzaW9uc1wiOiB0aGlzLnVzZXJPcHRpb25Db250YWluZXIsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUtwaUVudHJ5Q29uZmlnKGtwaU9iaikuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJLUEkgd2l0aCBVc2VyIEVudGl0eSBPYmo6XCIsIGtwaU9iaik7XG4gIH1cblxuICBnZXRFZGl0YWJsZUtwaShrcGk6IGFueSkge1xuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMua3BpQ29uZmlnRGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ua3BpSWQgPT09IGtwaS5pZCk7XG5cbiAgICAvLyBjb25zdCBwYXJlbnROYW1lID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJlbnRUaWQgPT0gZGF0YVtcInBhcmVudFRpZFwiXSk7XG5cblxuICAgIGNvbnN0IHRpZEtleSA9IGRhdGEudGFnVHlwZSA9PT0gJ2NoaWxkJyAmJiBkYXRhLmNoaWxkVGlkICYmIGRhdGEuY2hpbGRUaWQubGVuZ3RoID4gMyA/ICdjaGlsZFRpZCcgOiAncGFyZW50VGlkJztcbiAgICBjb25zdCBwYXJlbnROYW1lID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoXG4gICAgICAoaXRlbTogYW55KSA9PiBpdGVtW3RpZEtleV0gPT0gZGF0YVtcInBhcmVudFRpZFwiXVxuICAgICk7XG4gICAgdGhpcy5wYXJhbnRlX2twaV9uYW1lID0gcGFyZW50TmFtZSA/IHBhcmVudE5hbWVbJ2twaUlkJ10gOiBudWxsO1xuXG5cbiAgICB0aGlzLnNlbGVjdGVkX2lkID0gZGF0YVtcImtwaUlkXCJdO1xuICAgIHRoaXMuc2VsZWN0X2twaV9uYW1lID0gZGF0YVtcImtwaU5hbWVcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9hbGlhc2VzID0gZGF0YVtcImFsaWFzZXNcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9wYWdlX2lkID0gZGF0YVtcInBhZ2VJZFwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2Rlc2MgPSBkYXRhW1wiZGVzY3JpcHRpb25cIl07XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSBkYXRhW1widGFnVHlwZVwiXTtcbiAgICB0aGlzLmtwaV92aXNpYmlsaXR5ID0gZGF0YVtcInZpc2liaWxpdHlcIl07XG4gICAgdGhpcy5rcGlfZXh0ZXJuYWwgPSBkYXRhW1wiZXh0ZXJuYWxLcGlcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfdGlkID0gZGF0YVtcInBhcmVudFRpZFwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2twaV9jaGlsZF90aWQgPSBkYXRhW1wiY2hpbGRUaWRcIl07XG4gICAgdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyID0gKGRhdGFbXCJwZXJtaXNzaW9uc1wiXSAmJiBkYXRhW1wicGVybWlzc2lvbnNcIl0ubGVuZ3RoID4gMCkgPyBkYXRhW1wicGVybWlzc2lvbnNcIl0gOiBbXTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gdHJ1ZTtcblxuICB9XG5cbiAgZ2V0VXBkYXRlS3BpKCkge1xuICAgIGNvbnN0IHBhZ2VEYXRhID0gKHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCkgPyB0aGlzLnRlbXBsYXRlRGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFnZUlkID09PSB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQpIDogbnVsbDtcblxuICAgIGxldCBrcGlPYmogPSB7XG4gICAgICBcImtwaUlkXCI6IHRoaXMuc2VsZWN0ZWRfaWQsXG4gICAgICBcImtwaU5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICBcImFsaWFzZXNcIjogdGhpcy5zZWxlY3RlZF9hbGlhc2VzLFxuICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogXCJcIixcbiAgICAgIFwidGFnVHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSxcbiAgICAgIFwiYWN0aXZlXCI6IHRydWUsXG4gICAgICBcInZpc2liaWxpdHlcIjogdGhpcy5rcGlfdmlzaWJpbGl0eSxcbiAgICAgIFwiZXh0ZXJuYWxLcGlcIjogdGhpcy5rcGlfZXh0ZXJuYWwsXG4gICAgICBcInRhcmdldFwiOiBcIlwiLFxuICAgICAgXCJpY29uXCI6IFwiXCIsXG4gICAgICBcInVybFwiOiBwYWdlRGF0YSA/IHBhZ2VEYXRhLnBhZ2VVcmwgOiBcIlwiLFxuICAgICAgXCJrcGlUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlID09IFwicGFyZW50XCIgPyBcImNvbGxhcHNhYmxlXCIgOiBcImJhc2ljXCIsXG4gICAgICBcInBhcmVudFRpZFwiOiB0aGlzLnNlbGVjdGVkX2twaV90aWQsXG4gICAgICBcImNoaWxkVGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCxcbiAgICAgIFwicGVybWlzc2lvbnNcIjogdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyLFxuICAgIH1cblxuICAgIHRoaXMuc2VydmljZS51cGRhdGVLcGlFbnRyeUNvbmZpZyhrcGlPYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0tQSSBVcGRhdGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICB0aGlzLmdldEFsbEtwaURhdGEoKTtcbiAgICAgIHRoaXMuZ2V0UmVzZXRlS3BpKCk7XG4gICAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG5cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJLUEkgd2l0aCBVc2VyIEVudGl0eSBPYmo6XCIsIGtwaU9iaik7XG4gIH1cblxuICBvbkN1c3RvbURpbWVudGlvbkNyZWF0aW5nKGFyZ3MpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGFyZ3MudGV4dDtcbiAgICBhcmdzLmN1c3RvbUl0ZW0gPSBuZXdWYWx1ZTtcbiAgICBjb25zdCBpc0l0ZW1JbkRhdGFTb3VyY2UgPSB0aGlzLnNlbGVjdGVkX2FsaWFzZXMuc29tZSgoaXRlbSkgPT4gaXRlbSA9PT0gbmV3VmFsdWUpO1xuICAgIGlmICghaXNJdGVtSW5EYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkX2FsaWFzZXMudW5zaGlmdChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIGdldFJlc2V0ZUtwaSgpIHtcbiAgICB0aGlzLnNlbGVjdF9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0X3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfZGVzYyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfYWxpYXNlcyA9IFtdO1xuICAgIHRoaXMua3BpX2V4dGVybmFsID0gZmFsc2U7XG4gICAgdGhpcy5rcGlfdmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cblxuXG4gIGFkZFRhZ3R5cGVWYWx1ZShlKSB7XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSBlLnZhbHVlO1xuICB9XG5cbiAgZ2V0S3BpSXRlbVZhbHVlKGUpIHtcbiAgICBpZiAoZS5ldmVudCkge1xuICAgICAgY29uc3Qga3BpX2RhdGEgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLmtwaUlkID09PSBlLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmlzRWRpdEtwaUFkZGVkKSB7XG4gICAgICAgIGNvbnN0IHRpZEtleSA9IHRoaXMuc2VsZWN0X3RhZ190eXBlID09PSAnY2hpbGQnICYmIHRoaXMuaXNFZGl0S3BpQWRkZWQgPyAnY2hpbGRUaWQnIDogJ3BhcmVudFRpZCc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9IGtwaV9kYXRhW3RpZEtleV07XG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCA9IHRoaXMuZ2V0TmV4dENoaWxkVGlkKHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgdGhpcy5rcGlDb25maWdEYXRhU291cmNlKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBjb25zdCB0aWRLZXkgPSBrcGlfZGF0YS5jaGlsZFRpZCAmJiBrcGlfZGF0YS5jaGlsZFRpZC5sZW5ndGggPiAxID8gJ2NoaWxkVGlkJyA6ICdwYXJlbnRUaWQnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSBrcGlfZGF0YVt0aWRLZXldO1xuICAgICAgICB0aGlzLnNlbGVjdGVkX2twaV9jaGlsZF90aWQgPSB0aGlzLmdldE5leHRDaGlsZFRpZCh0aGlzLnNlbGVjdGVkX2twaV90aWQsIHRoaXMua3BpQ29uZmlnRGF0YVNvdXJjZSk7XG5cbiAgICAgIH1cblxuICAgICBcblxuICAgIH1cblxuICB9XG5cbiAgIGdldE5leHRDaGlsZFRpZChwYXJlbnRUaWQ6IHN0cmluZywga3BpQ29uZmlnRGF0YVNvdXJjZTogYW55W10pOiBzdHJpbmcge1xuICAgICAgICAvLyAxLiBGaWx0ZXIgYnkgcGFyZW50VGlkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ga3BpQ29uZmlnRGF0YVNvdXJjZS5maWx0ZXIoXG4gICAgICAgICAgaXRlbSA9PiBpdGVtLnBhcmVudFRpZCA9PT0gcGFyZW50VGlkICYmIGl0ZW0uY2hpbGRUaWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAyLiBFeHRyYWN0IGxhc3QgbnVtZXJpYyBwYXJ0IG9mIGNoaWxkVGlkXG4gICAgICAgIGNvbnN0IG1heENoaWxkTnVtYmVyID0gY2hpbGRyZW4ucmVkdWNlKChtYXgsIGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IGl0ZW0uY2hpbGRUaWQuc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBsYXN0TnVtYmVyID0gTnVtYmVyKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICByZXR1cm4gbGFzdE51bWJlciA+IG1heCA/IGxhc3ROdW1iZXIgOiBtYXg7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIC8vIDMuIFJldHVybiBuZXh0IGNoaWxkVGlkXG4gICAgICAgIHJldHVybiBgJHtwYXJlbnRUaWR9LiR7bWF4Q2hpbGROdW1iZXIgKyAxfWA7XG4gICAgICB9XG5cblxuICBhZGROZXdLcGkoKSB7XG4gICAgdGhpcy5pc05ld0twaUFkZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG5cblxuICBnZXRLcGlQYXJyZW50TmFtZShpbnB1dCkge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlucHV0Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgaWYgKGxhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZygwLCBsYXN0SW5kZXgpO1xuICB9XG5cblxuICBnZXREZWxldEtwaSgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZGVsZXRlS3BpRW50cnlDb25maWcodGhpcy5zZWxlY3RlZF9pZCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuICB9XG5cblxuICByZXNldGVVcGRhdGVLcGlGb3JtKCkge1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2luZm8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2lkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN1Ym1pdE5ld0twaSgpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIGxldCBvYmogPSB7IGtwaUNvbmZpZ0RhdGE6IHRoaXMua3BpRGF0YSB9XG4gICAgY29uc29sZS5sb2cob2JqKTtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlLmdldENyZWF0ZUtwaShvYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9KVxuICB9XG5cblxuICBidWlsZE1lbnVUcmVlKHVzZXJOYW1lOiBzdHJpbmcsIGtwaURhdGE6IGFueVtdKTogYW55W10ge1xuICAgIC8vIGxldCBmaWx0ZXJlZE1lbnVzID0gbWVudURhdGEuZmlsdGVyKG1lbnUgPT5cbiAgICAvLyAgICF1c2VyTmFtZSB8fCAobWVudS5wZXJtaXNzaW9ucyAmJiBtZW51LnBlcm1pc3Npb25zLnNvbWUocGVybSA9PiBwZXJtLmVudGl0eVZhbHVlcy5pbmNsdWRlcyh1c2VyTmFtZSkpKVxuICAgIC8vICk7XG5cbiAgICBsZXQgZmlsdGVyZWRNZW51cyA9IGtwaURhdGE7XG5cbiAgICBjb25zdCBtZW51TWFwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1lbnVUcmVlOiBhbnlbXSA9IFtdO1xuXG4gICAgZmlsdGVyZWRNZW51cy5mb3JFYWNoKG1lbnUgPT4ge1xuICAgICAgbWVudU1hcC5zZXQobWVudS5jaGlsZFRpZCB8fCBtZW51LnBhcmVudFRpZCwge1xuICAgICAgICBpZDogbWVudS5rcGlJZCxcbiAgICAgICAgdGl0bGU6IG1lbnUua3BpTmFtZSxcbiAgICAgICAgaWNvbjogbWVudS5pY29uLFxuICAgICAgICB0eXBlOiBtZW51LmtwaVR5cGUsXG4gICAgICAgIHRhZ1R5cGU6IG1lbnUudGFnVHlwZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgLi4uKG1lbnUubGluayAmJiB7IGxpbms6IG1lbnUubGluay5yZXBsYWNlKC9eXFwvKy8sICcnKSB9KSxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZpbHRlcmVkTWVudXMuZm9yRWFjaChrcGkgPT4ge1xuICAgICAgaWYgKGtwaS5wYXJlbnRUaWQgJiYga3BpLmNoaWxkVGlkKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG1lbnVNYXAuZ2V0KGtwaS5wYXJlbnRUaWQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobWVudU1hcC5nZXQoa3BpLmNoaWxkVGlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbnVUcmVlLnB1c2gobWVudU1hcC5nZXQoa3BpLnBhcmVudFRpZCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVUcmVlO1xuICB9XG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG48ZGl2IGNsYXNzPVwicC00IGZsZXggZmxleC1yb3cgdy1mdWxsXCIgKm5nSWY9XCIhbG9hZGluZ01vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgYmctd2hpdGUgZGFyazpiZy10cmFuc3BhcmVudCBib3JkZXItclwiPlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0twaVRyZWVQcmVwYXJlZFwiPiAtLT5cbiAgICAgICAgICAgIDx0cmVldmlldyBjbGFzcz1cImRhcmsgYmctZ3JheS05MDAgZGFyazpiZy10cmFuc3BhcmVudFwiIFtuYW1lXT1cIidtYWluTmF2aWdhdGlvbidcIiBbcm91dGVLZXldPVwiJ3JhS3BpJ1wiXG4gICAgICAgICAgICAgICAgW25hdmlnYXRpb25dPVwia3BpRGF0YVwiIFtpc1NlYXJjaEJveF09XCJmYWxzZVwiIFtpc0VkaXRJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChlZGl0YWJsZUtwaURhdGEpPVwiZ2V0RWRpdGFibGVLcGkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC90cmVldmlldz5cbiAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS04XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3S3BpKClcIj5BZGQgTmV3IEtQSTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cInJvdXRlVG9LcGlDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiPkNvbmZpZ3VyZSBLUEk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0twaUFkZGVkXCI+IC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJweC0yIHctZnVsbFwiPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPk5hbWU8L3A+XG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0X2twaV9uYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFRhZyBUeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJ0YWdUeXBlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RfdGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImFkZFRhZ3R5cGVWYWx1ZSgkZXZlbnQpXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIChvbkN1c3RvbUl0ZW1DcmVhdGluZyk9XCJvbkN1c3RvbURpbWVudGlvbkNyZWF0aW5nKCRldmVudClcIiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+QWxpYXNlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW2FjY2VwdEN1c3RvbVZhbHVlXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2FsaWFzZXNcIj48L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+UGFnZSBJRDwvcD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXRleHQtYm94PiAtLT5cbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJmYWxzZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ltcGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IGZhbWlseScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIml0YWxpY1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduTGVmdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduSnVzdGlmeVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYnVsbGV0TGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdIZWFkZXInIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYmFja2dyb3VuZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpbWFnZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29kZUJsb2NrXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLWltYWdlLXVwbG9hZCBbdGFic109XCJbJ2ZpbGUnLCAndXJsJ11cIiBmaWxlVXBsb2FkTW9kZT1cImJhc2U2NFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cImtwaU5hbWVcIiB2YWx1ZUV4cHI9XCJrcGlJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0S3BpSXRlbVZhbHVlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInBhcmFudGVfa3BpX25hbWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+UGFyZW50IFRJRDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfa3BpX3RpZFwiIFtyZWFkT25seV09XCJmYWxzZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+VElEPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9rcGlfY2hpbGRfdGlkXCIgW3JlYWRPbmx5XT1cImZhbHNlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV92aXNpYmlsaXR5XCIgdGV4dD1cIlZpc2liaWxpdHlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV9leHRlcm5hbFwiIHRleHQ9XCJFeHRlcm5hbCBLUElcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5LUEkgSW5mbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1odG1sLWVkaXRvciBoZWlnaHQ9XCInYXV0bydcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2luZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJmYWxzZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IHNpemUnIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiZm9udFwiIFthY2NlcHRlZFZhbHVlc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHZW9yZ2lhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWhvbWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDxhcHAtdXNlci1hY2Nlc3MgWyh1c2VyT3B0aW9uQ29udGFpbmVyKV09XCJ1c2VyT3B0aW9uQ29udGFpbmVyXCI+XG4gICAgICAgIDwvYXBwLXVzZXItYWNjZXNzPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBtdC01IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiZ2V0VXBkYXRlS3BpKClcIiAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+VXBkYXRlIEtQSVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImdldERlbGV0S3BpKClcIiAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+RGVsZXRlIEtQSVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fVwiIChjbGljayk9XCJtYWtlTmV3S3BpV2l0aFVzZXJFbnRpdHkoKVwiICpuZ0lmPVwiIWlzRWRpdEtwaUFkZGVkXCI+Q3JlYXRlIEtQSVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX1cIiAoY2xpY2spPVwiZ2V0UmVzZXRlS3BpKClcIj5SZXNldDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgPC9kaXY+XG5cblxuXG5cbjwvZGl2PiJdfQ==
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWFsRCxNQUFNLE9BQU8sc0JBQXNCO0lBdUNqQyxZQUNTLGFBQTRCLEVBQVUsV0FBd0IsRUFDN0QsT0FBeUIsRUFBVSxNQUFxQixFQUN4RCxNQUFjO1FBRmYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUM3RCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDeEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXpDeEIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0Isd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLFlBQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQVd6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUVsQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYyxHQUFZLEtBQUss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O1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDckMsQ0FBQTtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUtELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7O21IQWxlVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixzRENibkMsMndyQkFxV007MkZEeFZPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENyZWF0ZUtwSVNlcnZpY2UgfSBmcm9tICcuL2NyZWF0ZUtwaS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1rcGknLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlS3BpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbiA9IHRydWU7XG4gIGtlaVBhcmVudERhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBteUZvcm06IEZvcm1Hcm91cDtcbiAgdGFnVHlwZSA9IFtcInBhcmVudFwiLCBcImNoaWxkXCJdO1xuICBrcGlfY29uc3RydWN0b3IgPSBbXTtcbiAgc2VsZWN0ZWRfcF9rcGk6IGFueSA9IHt9O1xuXG4gIHNlbGVjdF9rcGlfbmFtZTogYW55O1xuICBzZWxlY3RfdGFnX3R5cGU6IGFueTtcbiAgc2VsZWN0ZWRfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfcGFnZV9pZDogYW55O1xuICBzZWxlY3RlZF9uZXN0ZWRfbmFtZTogYW55O1xuICBzZWxlY3RlZF9rcGlfdGlkOiBhbnk7XG4gIHNlbGVjdGVkX2Rlc2M6IGFueTtcbiAgc2VsZWN0ZWRfaW5mbzogYW55O1xuXG4gIGhlaWdodCA9IDkwO1xuICBrcGlEYXRhOiBhbnkgPSBbXTtcbiAgaGVpc3RWYWx1ZTogYW55O1xuICBpc0Zyb21FZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc05ld0twaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdEtwaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdGFibGVfZGVzYyA9IFwiXCI7XG4gIGVkaXRhYmxlX2luZm8gPSBcIlwiO1xuICBlZGl0YWJsZV9pZDtcbiAgZWRpdGFibGVfcGFnZV9pZDtcbiAgZWRpdGFibGVfdGFnX3R5cGU7XG4gIGVkaXRhYmxlX2twaV9uYW1lO1xuICBlZGl0YWJsZV9rcGlfdGlkO1xuICBrcGlfdmlzaWJpbGl0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBrcGlfZXh0ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW50ZV9rcGlfbmFtZTogYW55O1xuICBpc0NvbXBvbmVudFVwZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZURhdGFTb3VyY2U6IGFueTtcbiAgLy8ga3BpRGF0YUpzb246YW55O1xuICB1c2VyT3B0aW9uQ29udGFpbmVyOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSwgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBDcmVhdGVLcElTZXJ2aWNlLCBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgdGhpcy5nZXRBcHBQYWdlQ29uZmlncygpO1xuICB9XG5cbiAgZ2V0QXBwUGFnZUNvbmZpZ3MoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1BhZ2UgSUQnKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldEFsbEtwaURhdGEoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuICAgIHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZSA9IFtdO1xuICAgIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLmtwaURhdGEgPSBkYXRhXG4gICAgICB0aGlzLnByZXBhcmVQYXJlbnREYXRhU291cmNlKGRhdGEpXG5cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnS1BJIENvbmZpZycpXG4gICAgfSlcbiAgfVxuXG4gIHByZXBhcmVQYXJlbnREYXRhU291cmNlKGRhdGEpIHtcbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICAgIGxldCBub2RlID0ge1xuICAgICAgICAgIFwibmFtZVwiOiByZXN1bHQubmFtZSxcbiAgICAgICAgICBcInRpZFwiOiByZXN1bHQudGlkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMucHJlcGFyZVBhcmVudERhdGFTb3VyY2UocmVzdWx0Lm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG5cbiAgfVxuXG5cbiAgbWFrZU5ld0twaSgpIHtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkX2twaV90aWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkX2twaV90aWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRIZWlzdElkKHRoaXMua3BpRGF0YSwgdGhpcy5zZWxlY3RlZF9rcGlfdGlkKTtcbiAgICAgIHRoaXMuY3JlYXRlTmV3S3BpV2l0aFRpZCgpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaGVpc3RWYWx1ZSA9ICh0aGlzLmtwaURhdGEubGVuZ3RoICE9IDApID8gdGhpcy5nZXRIaWdoZXN0VGlkKHRoaXMua3BpRGF0YSkgOiAwO1xuICAgICAgbGV0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5oZWlzdFZhbHVlKSArIDE7XG5cbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwibmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgICAgXCJ0aWRcIjogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgXCJpc0Jvb2ttYXJrZWRcIjogZmFsc2UsXG4gICAgICAgIFwiaXNBY2Nlc3NpYmxlXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgICBcImxhc3RBY2Nlc3NUaW1lXCI6IFwiXCIsXG4gICAgICAgIFwidGFnX3R5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUsXG4gICAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgICBcImRlc2NcIjogdGhpcy5zZWxlY3RlZF9kZXNjLFxuICAgICAgICBcImlzVmlzaWJsZVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgICBcIm5vZGVzXCI6IFtdLFxuICAgICAgICBcImNvbmZpZ1wiOiB7fVxuICAgICAgfVxuICAgICAgdGhpcy5rcGlEYXRhLnB1c2gob2JqKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgXCJuYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgICAgIFwidGlkXCI6IHZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLnB1c2gob2JqKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdjaGlsZCcpIHtcbiAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgICAgXCJpZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgICAgIFwicGFnZUlkXCI6IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCxcbiAgICAgICAgICBcInNlYXJjaEZpbHRlclwiOiBmYWxzZSxcbiAgICAgICAgICBcImlzU3J2VHlwZU9wZXJhdG9yXCI6IGZhbHNlLFxuICAgICAgICAgIFwib3BlcmF0aW9uTGV2ZWxzXCI6IFtdLFxuICAgICAgICAgIFwiZml4T3BlcmF0aW9uTGV2bGVzXCI6IFtdLFxuICAgICAgICAgIFwiYXBpX2NvbmZpZ1wiOiBbXVxuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZUtwaUJyb3dzZXJDb25maWcob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJrcGkgYnJvd3NlciBjb25maWcgY3JlYXRlZFwiKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuXG4gICAgfVxuXG4gIH1cblxuICBjcmVhdGVOZXdLcGlXaXRoVGlkKCkge1xuXG4gICAgbGV0IGF1dG9fdGlkID0gdGhpcy5hdXRvSW5jcmVtZW50KHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgdGhpcy5oZWlzdFZhbHVlKTtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgXCJuYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgXCJ0aWRcIjogYXV0b190aWQsXG4gICAgICBcImlzQm9va21hcmtlZFwiOiBmYWxzZSxcbiAgICAgIFwiaXNBY2Nlc3NpYmxlXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgXCJsYXN0QWNjZXNzVGltZVwiOiBcIlwiLFxuICAgICAgXCJ0YWdfdHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSxcbiAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgIFwicGFnZUlkXCI6IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCxcbiAgICAgIFwiZGVzY1wiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImlzVmlzaWJsZVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJub2Rlc1wiOiBbXSxcbiAgICAgIFwiY29uZmlnXCI6IHt9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgIFwidGlkXCI6IGF1dG9fdGlkXG4gICAgICB9XG4gICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChvYmopXG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdF90YWdfdHlwZSA9PSAnY2hpbGQnKSB7XG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgICBcInNlYXJjaEZpbHRlclwiOiBmYWxzZSxcbiAgICAgICAgXCJpc1NydlR5cGVPcGVyYXRvclwiOiBmYWxzZSxcbiAgICAgICAgXCJvcGVyYXRpb25MZXZlbHNcIjogW10sXG4gICAgICAgIFwiZml4T3BlcmF0aW9uTGV2bGVzXCI6IFtdLFxuICAgICAgICBcImFwaV9jb25maWdcIjogW11cblxuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZUtwaUJyb3dzZXJDb25maWcob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwia3BpIGJyb3dzZXIgY29uZmlnIGNyZWF0ZWRcIilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRLcGlieVRpZCh0aGlzLmtwaURhdGEsIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgb2JqKVxuICAgIHRoaXMuc3VibWl0TmV3S3BpKCk7XG4gIH1cblxuICBnZXRSZXNldGVLcGkoKSB7XG4gICAgdGhpcy5zZWxlY3Rfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdF90YWdfdHlwZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfaWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX2Rlc2MgPSAnJztcbiAgICB0aGlzLnBhcmFudGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2twaV9uYW1lID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV90YWdfdHlwZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfaWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX3BhZ2VfaWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2twaV90aWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2Rlc2MgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2luZm8gPSAnJztcbiAgICB0aGlzLnBhcmFudGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmtwaV9leHRlcm5hbCA9IGZhbHNlO1xuICAgIHRoaXMua3BpX3Zpc2liaWxpdHkgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gIH1cblxuICBnZXREZWxldEtwaSh0aWQpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkX3Bfa3BpKVxuXG4gIH1cblxuICBhZGRUYWd0eXBlVmFsdWUoZSkge1xuICAgIHRoaXMuc2VsZWN0X3RhZ190eXBlID0gZS52YWx1ZTtcbiAgfVxuXG4gIGdldEtwaUl0ZW1WYWx1ZShlKSB7XG4gICAgY29uc3Qga3BpX2RhdGEgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpZCA9PT0gZS52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfdGlkID0ga3BpX2RhdGEudGlkO1xuICB9XG5cbiAgYXV0b0luY3JlbWVudChzdHJpbmcxOiBzdHJpbmcsIHN0cmluZzI6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuXG4gICAgaWYgKHN0cmluZzIgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG51bWJlclBhcnQgPSBzdHJpbmcxICsgJy4xJztcbiAgICAgIHJldHVybiBudW1iZXJQYXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHN0cmluZzIuc3BsaXQoJy4nKTtcbiAgICAgIGxldCBsYXN0UGFydCA9IHBhcnNlSW50KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLCAxMCk7XG4gICAgICBsZXQgbmV3X251bWJlciA9IGxhc3RQYXJ0Kys7XG4gICAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IGxhc3RQYXJ0LnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gcGFydHMuam9pbihcIi5cIik7XG4gICAgfVxuICB9XG5cbiAgc2V0S3BpYnlUaWQoZGF0YSwgdGlkLCBuZXdLcGlPYmopIHtcbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQubm9kZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzdWx0LnRpZCA9PSB0aWQpIHtcblxuICAgICAgICAgIHJlc3VsdC5ub2Rlcy5wdXNoKG5ld0twaU9iailcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEtwaWJ5VGlkKHJlc3VsdC5ub2RlcywgdGlkLCBuZXdLcGlPYmopO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGdldEhlaXN0SWQoZGF0YTogYW55LCB0aWQ6IHN0cmluZyk6IGFueSB7XG5cbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRpZCA9PT0gdGlkKSB7XG4gICAgICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgdGhpcy5oZWlzdFZhbHVlID0gdGhpcy5nZXRIaWdoZXN0VGlkKHJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQubm9kZXMgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldEhlaXN0SWQocmVzdWx0Lm5vZGVzLCB0aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgfVxuXG4gIGdldEhpZ2hlc3RUaWQoZGF0YSkge1xuICAgIGNvbnN0IGhpZ2hlc3RUaWQgPSBkYXRhLnJlZHVjZSgobWF4VGlkLCBjdXJyZW50SXRlbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFRpZFBhcnRzID0gY3VycmVudEl0ZW0udGlkLnNwbGl0KCcuJykubWFwKHBhcnQgPT4gcGFyc2VJbnQocGFydCwgMTApKTtcbiAgICAgIGNvbnN0IG1heFRpZFBhcnRzID0gbWF4VGlkLnNwbGl0KCcuJykubWFwKHBhcnQgPT4gcGFyc2VJbnQocGFydCwgMTApKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50VGlkUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUaWRQYXJ0c1tpXSA+IG1heFRpZFBhcnRzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtLnRpZDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGlkUGFydHNbaV0gPCBtYXhUaWRQYXJ0c1tpXSkge1xuICAgICAgICAgIHJldHVybiBtYXhUaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXhUaWQ7XG4gICAgfSwgZGF0YVswXS50aWQpO1xuICAgIHJldHVybiBoaWdoZXN0VGlkO1xuICB9XG5cbiAgYWRkTmV3S3BpKCkge1xuICAgIHRoaXMuaXNOZXdLcGlBZGRlZCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICB9XG4gIGNhbmNlbFVwZGF0ZSgpIHtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cblxuICBnZXRFZGl0YWJsZUtwaShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IHRydWU7XG4gICAgdGhpcy5pc05ld0twaUFkZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0Zyb21FZGl0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5lZGl0YWJsZV9kZXNjID0gZGF0YS5kZXNjO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9IChkYXRhLmtwaUluZm8pID8gZGF0YS5rcGlJbmZvIDogXCJcIjtcbiAgICB0aGlzLmVkaXRhYmxlX2twaV9uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuZWRpdGFibGVfdGFnX3R5cGUgPSBkYXRhLnRhZ190eXBlO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGRhdGEudGlkO1xuICAgIHRoaXMuZWRpdGFibGVfaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9IGRhdGEucGFnZUlkO1xuICAgIHRoaXMua3BpX3Zpc2liaWxpdHkgPSBkYXRhLmlzVmlzaWJsZTtcbiAgICB0aGlzLmtwaV9leHRlcm5hbCA9IGRhdGEuaXNBY2Nlc3NpYmxlO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9IHRoaXMuZ2V0S3BpUGFycmVudE5hbWUoZGF0YS50aWQpXG5cblxuICB9XG5cbiAgZ2V0S3BpUGFycmVudE5hbWUoaW5wdXQpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpbnB1dC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChsYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoMCwgbGFzdEluZGV4KTtcbiAgfVxuXG4gIGdldFVwZGF0ZUtwaSgpIHtcblxuICAgIGlmICghdGhpcy5pc0NvbXBvbmVudFVwZGF0YSkge1xuICAgICAgdGhpcy5nZXRVcGRhdGVLcGlOYW1lKHRoaXMua3BpRGF0YSwgdGhpcy5lZGl0YWJsZV9rcGlfdGlkKVxuICAgIH1cblxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMucmVzZXRlVXBkYXRlS3BpRm9ybSgpO1xuICAgICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIH0sIDUwMCk7XG5cbiAgfVxuXG4gIGdldERlbGV0ZUtwaSgpIHtcbiAgICB0aGlzLmdldERlbGV0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCB0aGlzLmVkaXRhYmxlX2twaV90aWQpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMucmVzZXRlVXBkYXRlS3BpRm9ybSgpO1xuICAgICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIGdldFVwZGF0ZUtwaU5hbWUoZGF0YTogYW55LCB0aWQ6IHN0cmluZyk6IGFueSB7XG5cbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRpZCA9PT0gdGlkKSB7XG4gICAgICAgIHJlc3VsdC5kZXNjID0gdGhpcy5lZGl0YWJsZV9kZXNjO1xuICAgICAgICByZXN1bHQua3BpSW5mbyA9IHRoaXMuZWRpdGFibGVfaW5mbztcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSB0aGlzLmVkaXRhYmxlX2twaV9uYW1lO1xuICAgICAgICByZXN1bHQuaWQgPSB0aGlzLmVkaXRhYmxlX2lkO1xuICAgICAgICByZXN1bHQucGFnZUlkID0gdGhpcy5lZGl0YWJsZV9wYWdlX2lkO1xuICAgICAgICByZXN1bHQudGFnX3R5cGUgPSB0aGlzLmVkaXRhYmxlX3RhZ190eXBlO1xuICAgICAgICByZXN1bHQuaXNWaXNpYmxlID0gdGhpcy5rcGlfdmlzaWJpbGl0eTtcbiAgICAgICAgcmVzdWx0LmlzQWNjZXNzaWJsZSA9IHRoaXMua3BpX2V4dGVybmFsO1xuICAgICAgICByZXN1bHQudGlkID0gdGhpcy5lZGl0YWJsZV9rcGlfdGlkO1xuXG4gICAgICAgIC8vIHRoaXMuc2VydmljZS5jb25maWd1cmVLcGlCcm93c2VyQ29uZmlnKHJlc3VsdC5jb25maWcpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcImtwaSBicm93c2VyIGNvbmZpZyBjcmVhdGVkXCIpXG4gICAgICAgIC8vIH0pXG5cbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm5vZGVzICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0Lm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRVcGRhdGVLcGlOYW1lKHJlc3VsdC5ub2RlcywgdGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgZ2V0RGVsZXRlS3BpTmFtZShkYXRhOiBhbnksIHRpZDogc3RyaW5nKTogYW55IHtcbiAgICBmb3IgKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVtpXTtcbiAgICAgIGlmIChyZXN1bHQudGlkID09PSB0aWQpIHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaSwgMSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5ub2RlcyAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0RGVsZXRlS3BpTmFtZShyZXN1bHQubm9kZXMsIHRpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRlVXBkYXRlS3BpRm9ybSgpIHtcbiAgICB0aGlzLmVkaXRhYmxlX2Rlc2MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9pbmZvID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV90YWdfdHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2twaV90aWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX3BhZ2VfaWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdWJtaXROZXdLcGkoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgICBsZXQgb2JqID0geyBrcGlDb25maWdEYXRhOiB0aGlzLmtwaURhdGEgfVxuICAgIGNvbnNvbGUubG9nKG9iaik7XG4gICAgdGhpcy5pc0NvbXBvbmVudFVwZGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZS5nZXRDcmVhdGVLcGkob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLmdldEFsbEtwaURhdGEoKTtcbiAgICAgIHRoaXMuZ2V0UmVzZXRlS3BpKCk7XG4gICAgfSlcbiAgfVxuXG4gIGdldE5ld1BhcnJlbnRLcGlJdGVtVmFsdWUoZSkge1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSB0cnVlO1xuICAgIGNvbnN0IGtwaV9kYXRhID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS50aWQgPT09IGUudmFsdWUpO1xuICAgIHRoaXMuZ2V0SGVpc3RJZCh0aGlzLmtwaURhdGEsIGtwaV9kYXRhLnRpZCk7XG4gICAgbGV0IGF1dG9fdGlkID0gdGhpcy5hdXRvSW5jcmVtZW50KGtwaV9kYXRhLnRpZCwgdGhpcy5oZWlzdFZhbHVlKTtcblxuICAgIGxldCBvYmogPSB7XG4gICAgICBcIm5hbWVcIjogdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSxcbiAgICAgIFwidGlkXCI6IGF1dG9fdGlkLFxuICAgICAgXCJpc0Jvb2ttYXJrZWRcIjogZmFsc2UsXG4gICAgICBcImlzQWNjZXNzaWJsZVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwibGFzdEFjY2Vzc1RpbWVcIjogXCJcIixcbiAgICAgIFwidGFnX3R5cGVcIjogdGhpcy5lZGl0YWJsZV90YWdfdHlwZSxcbiAgICAgIFwiaWRcIjogdGhpcy5lZGl0YWJsZV9pZCxcbiAgICAgIFwicGFnZUlkXCI6IHRoaXMuZWRpdGFibGVfcGFnZV9pZCxcbiAgICAgIFwiZGVzY1wiOiB0aGlzLmVkaXRhYmxlX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogdGhpcy5lZGl0YWJsZV9pbmZvLFxuICAgICAgXCJpc1Zpc2libGVcIjogdGhpcy5rcGlfdmlzaWJpbGl0eSxcbiAgICAgIFwibm9kZXNcIjogW10sXG4gICAgICBcImNvbmZpZ1wiOiB7fVxuICAgIH1cbiAgICB0aGlzLmdldERlbGV0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCB0aGlzLmVkaXRhYmxlX2twaV90aWQpXG4gICAgdGhpcy5zZXRLcGlieVRpZCh0aGlzLmtwaURhdGEsIGtwaV9kYXRhLnRpZCwgb2JqKVxuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGtwaV9kYXRhLnRpZDtcbiAgICAvLyB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgIC8vIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGtwaV9kYXRhLnRpZDtcbiAgICAvLyB0aGlzLmdldFVwZGF0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCBlLnZhbHVlKVxuICB9XG5cblxuXG4gIG1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpIHtcblxuICAgIHRoaXMudXNlck9wdGlvbkNvbnRhaW5lci5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IGF0dF92YWx1ZSA9IGVsZW1lbnQuYXR0cmlidXRlVmFsdWVzLnNwbGl0KFwiLFwiKTtcbiAgICAgIGVsZW1lbnQuYXR0cmlidXRlVmFsdWVzID0gYXR0X3ZhbHVlO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkX2twaV90aWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkX2twaV90aWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRIZWlzdElkKHRoaXMua3BpRGF0YSwgdGhpcy5zZWxlY3RlZF9rcGlfdGlkKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmhlaXN0VmFsdWUgPSAodGhpcy5rcGlEYXRhLmxlbmd0aCAhPSAwKSA/IHRoaXMuZ2V0SGlnaGVzdFRpZCh0aGlzLmtwaURhdGEpIDogMDtcbiAgICAgIGxldCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuaGVpc3RWYWx1ZSkgKyAxO1xuXG4gICAgfVxuICAgIGxldCBrcGlPYmogPSB7XG4gICAgICBcImtwaUlkXCI6IHRoaXMuc2VsZWN0ZWRfaWQsXG4gICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICBcInRpdGxlXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogdGhpcy5zZWxlY3RlZF9pbmZvLFxuICAgICAgXCJ0YWdUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJhY3RpdmVcIjogdHJ1ZSxcbiAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJleHRlcm5hbEtwaVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwidGFyZ2V0XCI6IFwiXCIsXG4gICAgICBcImljb25cIjogXCJcIixcbiAgICAgIFwidXJsXCI6IFwiXCIsXG4gICAgICBcImtwaVR5cGVcIjogXCJcIixcbiAgICAgIFwicGFyZW50VGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCxcbiAgICAgIFwiY2hpbGRUaWRcIjogXCJcIixcbiAgICAgIFwibWVhc3VyZXNcIjogdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiS1BJIHdpdGggVXNlciBFbnRpdHkgT2JqOlwiLCBrcGlPYmopO1xuICB9XG5cblxuXG5cbiAgcm91dGVUb0twaUNvbmZpZygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2twaUNvbnRyb2xsZXIva3BpQ29uZmlnJ10pXG4gIH1cblxufVxuIiwiPGFwcC1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ01vZGFsXCI+PC9hcHAtbG9hZGluZz5cbjxkaXYgY2xhc3M9XCJwLTQgZmxleCBmbGV4LXJvdyB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBiZy13aGl0ZSBkYXJrOmJnLXRyYW5zcGFyZW50IGJvcmRlci1yXCI+XG5cbiAgICAgICAgPHRyZWV2aWV3IGNsYXNzPVwiZGFyayBiZy1ncmF5LTkwMCBkYXJrOmJnLXRyYW5zcGFyZW50XCIgW25hbWVdPVwiJ21haW5OYXZpZ2F0aW9uJ1wiIFtyb3V0ZUtleV09XCIncmFLcGknXCJcbiAgICAgICAgICAgIFtuYXZpZ2F0aW9uXT1cImtwaURhdGFcIiBbaXNTZWFyY2hCb3hdPVwiZmFsc2VcIiBbaXNFZGl0SWNvbl09XCJ0cnVlXCIgKGVkaXRhYmxlS3BpRGF0YSk9XCJnZXRFZGl0YWJsZUtwaSgkZXZlbnQpXCI+XG4gICAgICAgIDwvdHJlZXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW0tY2VudGVyIGp1c3RpZnktY2VudGVyIG15LThcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJhZGROZXdLcGkoKVwiPkFkZCBOZXcgS1BJPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwicm91dGVUb0twaUNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCI+Q29uZmlndXJlIEtQSTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV3S3BpQWRkZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+TmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdF9rcGlfbmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFRhZyBUeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwidGFnVHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0X3RhZ190eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiYWRkVGFndHlwZVZhbHVlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPklEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfaWRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYWdlIElEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9wYWdlX2lkXCI+PC9keC10ZXh0LWJveD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfcGFnZV9pZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10b29sYmFyIFttdWx0aWxpbmVdPVwiZmFsc2VcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkVmFsdWVzXT1cIlsnOHB0JywgJzEwcHQnLCAnMTJwdCcsICcxNHB0JywgJzE4cHQnLCAnMjRwdCcsICczNnB0J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImZvbnRcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFob21hJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtkYXRhU291cmNlXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIiB2YWx1ZUV4cHI9XCJ0aWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRLcGlJdGVtVmFsdWUoJGV2ZW50KVwiIFt2YWx1ZV09XCJwYXJhbnRlX2twaV9uYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5USUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9rcGlfdGlkXCIgW3JlYWRPbmx5XT1cInRydWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJrcGlfdmlzaWJpbGl0eVwiIHRleHQ9XCJWaXNpYmlsaXR5XCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJrcGlfZXh0ZXJuYWxcIiB0ZXh0PVwiRXh0ZXJuYWwgS1BJXCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPktQSSBJbmZvPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvZGVCbG9ja1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICA8YXBwLXVzZXItYWNjZXNzIFsodXNlck9wdGlvbkNvbnRhaW5lcildPVwidXNlck9wdGlvbkNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXVzZXItYWNjZXNzPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIG10LTUganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGkoKVwiPkNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpXCI+Q3JlYXRlIFdpdGggVXNlciBQcml2aWxlZ2VcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJnZXRSZXNldGVLcGkoKVwiPlJlc2V0PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbWItMlwiPk5hbWU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9rcGlfbmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBUYWcgVHlwZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtkYXRhU291cmNlXT1cInRhZ1R5cGVcIiBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX3RhZ190eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiYWRkVGFndHlwZVZhbHVlKCRldmVudClcIiBbcmVhZE9ubHldPVwiaXNGcm9tRWRpdGFibGVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPklEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiZWRpdGFibGVfaWRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYWdlIElEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9wYWdlX2lkXCI+PC9keC10ZXh0LWJveD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGFibGVfcGFnZV9pZFwiPjwvZHgtc2VsZWN0LWJveD5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5EZXNjcmlwdGlvbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1odG1sLWVkaXRvciBoZWlnaHQ9XCInYXV0bydcIiBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX2Rlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kb1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwicmVkb1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJsb2NrcXVvdGVcIj48L2R4aS1pdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbcmVhZE9ubHldPVwiZWRpdGFibGVfdGFnX3R5cGUgPT0gJ3BhcmVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIiB2YWx1ZUV4cHI9XCJ0aWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXROZXdQYXJyZW50S3BpSXRlbVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwYXJhbnRlX2twaV9uYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPlRJRDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX2twaV90aWRcIiBbcmVhZE9ubHldPVwiZmFsc2VcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX3Zpc2liaWxpdHlcIiB0ZXh0PVwiVmlzaWJpbGl0eVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV9leHRlcm5hbFwiIHRleHQ9XCJFeHRlcm5hbCBLUElcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+S1BJIEluZm88L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10b29sYmFyIFttdWx0aWxpbmVdPVwiZmFsc2VcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkVmFsdWVzXT1cIlsnOHB0JywgJzEwcHQnLCAnMTJwdCcsICcxNHB0JywgJzE4cHQnLCAnMjRwdCcsICczNnB0J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImZvbnRcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdXJpZXIgTmV3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ltcGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFob21hJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyZGFuYSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IGZhbWlseScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJvbGRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIml0YWxpY1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kZXJsaW5lXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduTGVmdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25DZW50ZXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduUmlnaHRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduSnVzdGlmeVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJvcmRlcmVkTGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYnVsbGV0TGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJoZWFkZXJcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW2ZhbHNlLCAxLCAyLCAzLCA0LCA1XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdIZWFkZXInIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2xvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYmFja2dyb3VuZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJsaW5rXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpbWFnZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjbGVhclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29kZUJsb2NrXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbWVkaWEtcmVzaXppbmcgW2VuYWJsZWRdPVwidHJ1ZVwiPiA8L2R4by1tZWRpYS1yZXNpemluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWltYWdlLXVwbG9hZCBbdGFic109XCJbJ2ZpbGUnLCAndXJsJ11cIiBmaWxlVXBsb2FkTW9kZT1cImJhc2U2NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWltYWdlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBtdC0zIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fVwiIChjbGljayk9XCJnZXRVcGRhdGVLcGkoKVwiPlVwZGF0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZ2V0RGVsZXRlS3BpKClcIj5EZWxldGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5DYW5jbGU8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuXG5cblxuPC9kaXY+Il19
|