tuain-ng-forms-lib 12.0.23 → 12.0.24
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/bundles/tuain-ng-forms-lib.umd.js +446 -595
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/classes/forms/action.js +3 -4
- package/esm2015/lib/classes/forms/element.js +12 -2
- package/esm2015/lib/classes/forms/field.js +9 -21
- package/esm2015/lib/classes/forms/form.js +153 -236
- package/esm2015/lib/classes/forms/section.js +7 -1
- package/esm2015/lib/classes/forms/table/row-data.js +6 -26
- package/esm2015/lib/classes/forms/table/table.js +3 -4
- package/esm2015/lib/components/forms/basic-form.js +141 -138
- package/fesm2015/tuain-ng-forms-lib.js +325 -475
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/classes/forms/action.d.ts +0 -2
- package/lib/classes/forms/element.d.ts +10 -0
- package/lib/classes/forms/field.d.ts +0 -3
- package/lib/classes/forms/form.d.ts +53 -55
- package/lib/classes/forms/section.d.ts +5 -0
- package/lib/classes/forms/table/row-data.d.ts +0 -1
- package/lib/classes/forms/table/table.d.ts +0 -1
- package/lib/components/forms/basic-form.d.ts +130 -93
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
- package/esm2015/lib/classes/utilities.js +0 -54
- package/lib/classes/utilities.d.ts +0 -1
|
@@ -2,21 +2,28 @@ import { RecordFormSection } from './section';
|
|
|
2
2
|
import { FormAction } from './action';
|
|
3
3
|
import { FieldDescriptor } from './field';
|
|
4
4
|
import { RecordTable } from './table/table';
|
|
5
|
-
import { NO_ERROR
|
|
5
|
+
import { NO_ERROR } from './form.constants';
|
|
6
|
+
const ACTIVE = 'active';
|
|
7
|
+
const SHOW = 'show';
|
|
8
|
+
const HIDE = 'hide';
|
|
9
|
+
const ENABLE = 'enable';
|
|
10
|
+
const DISABLE = 'disable';
|
|
11
|
+
const CLEAN = 'clean';
|
|
6
12
|
export class FormStructureAndData {
|
|
7
13
|
constructor(definitionReceived, formConfig) {
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
14
|
+
this._fields = {};
|
|
15
|
+
this._actions = {};
|
|
16
|
+
this._tables = {};
|
|
17
|
+
this._sections = {};
|
|
12
18
|
this._immutableData = {};
|
|
13
19
|
this._extraInfo = {};
|
|
20
|
+
this._exclusiveSectionsByAttr = {};
|
|
14
21
|
this._formConfig = formConfig;
|
|
15
22
|
this.state = '';
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
23
|
+
this._actionArray = [];
|
|
24
|
+
this._fieldArray = [];
|
|
25
|
+
this._tableArray = [];
|
|
26
|
+
this._sectionArray = [];
|
|
20
27
|
this._stateFlow = {
|
|
21
28
|
defaultState: '',
|
|
22
29
|
states: [],
|
|
@@ -48,8 +55,8 @@ export class FormStructureAndData {
|
|
|
48
55
|
const globalAction = new FormAction(actionReceived, this._formConfig);
|
|
49
56
|
const globalActionCode = globalAction.actionCode;
|
|
50
57
|
if (globalActionCode) {
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
58
|
+
this._actionArray.push(globalAction);
|
|
59
|
+
this._actions[globalActionCode] = globalAction;
|
|
53
60
|
}
|
|
54
61
|
}
|
|
55
62
|
}
|
|
@@ -69,8 +76,8 @@ export class FormStructureAndData {
|
|
|
69
76
|
const fieldToAdd = new FieldDescriptor(fieldReceived, this._formConfig);
|
|
70
77
|
const fieldCode = fieldToAdd.fieldCode;
|
|
71
78
|
if (fieldCode) {
|
|
72
|
-
this.
|
|
73
|
-
this.
|
|
79
|
+
this._fieldArray.push(fieldToAdd);
|
|
80
|
+
this._fields[fieldCode] = fieldToAdd;
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
83
|
}
|
|
@@ -93,8 +100,8 @@ export class FormStructureAndData {
|
|
|
93
100
|
const tableToAdd = new RecordTable(tableReceived, this._formConfig);
|
|
94
101
|
const tableCode = tableToAdd.tableCode;
|
|
95
102
|
if (tableCode) {
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
103
|
+
this._tableArray.push(tableToAdd);
|
|
104
|
+
this._tables[tableCode] = tableToAdd;
|
|
98
105
|
}
|
|
99
106
|
}
|
|
100
107
|
}
|
|
@@ -112,19 +119,22 @@ export class FormStructureAndData {
|
|
|
112
119
|
const sectionToAdd = new RecordFormSection(sectionReceived, this);
|
|
113
120
|
const sectionCode = sectionToAdd.sectionCode;
|
|
114
121
|
if (sectionCode) {
|
|
115
|
-
this.
|
|
116
|
-
this.
|
|
122
|
+
this._sectionArray.push(sectionToAdd);
|
|
123
|
+
this._sections[sectionCode] = sectionToAdd;
|
|
117
124
|
}
|
|
118
125
|
}
|
|
119
126
|
}
|
|
120
127
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
get defaultState() { return this._stateFlow.defaultState; }
|
|
124
|
-
get title() { return this._title; }
|
|
125
|
-
set title(title) { this._title = title; }
|
|
128
|
+
getTitle() { return this._title; }
|
|
129
|
+
setTitle(title) { this._title = title; }
|
|
126
130
|
get name() { return this._name; }
|
|
127
131
|
set name(name) { this._name = name; }
|
|
132
|
+
// Estados
|
|
133
|
+
get defaultState() { return this._stateFlow.defaultState; }
|
|
134
|
+
supportState(state) { var _a; return (_a = this._stateFlow.states) === null || _a === void 0 ? void 0 : _a.includes(state); }
|
|
135
|
+
supportMode(state) { return this.supportState(state); }
|
|
136
|
+
get states() { return this._stateFlow.states; }
|
|
137
|
+
getCurrentState() { return this.state; }
|
|
128
138
|
changeState(newState) {
|
|
129
139
|
if (!newState || !this.supportState(newState)) {
|
|
130
140
|
return false;
|
|
@@ -154,201 +164,29 @@ export class FormStructureAndData {
|
|
|
154
164
|
return { name, source, destination };
|
|
155
165
|
}).filter(item => item.name && item.source && item.destination);
|
|
156
166
|
}
|
|
157
|
-
|
|
158
|
-
supportMode(state) { return this.supportState(state); }
|
|
159
|
-
get immutableData() {
|
|
160
|
-
const data = {};
|
|
161
|
-
const objectNames = Object.keys(this._immutableData);
|
|
162
|
-
for (let index = 0; index < objectNames.length; index++) {
|
|
163
|
-
const name = objectNames[index];
|
|
164
|
-
data[name] = this.getImmutableElement(name);
|
|
165
|
-
}
|
|
166
|
-
return data;
|
|
167
|
-
}
|
|
167
|
+
// immutable Data
|
|
168
168
|
getImmutableElement(name) { var _a, _b, _c; return (_c = (_b = (_a = this._immutableData) === null || _a === void 0 ? void 0 : _a[name]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; }
|
|
169
|
+
set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }
|
|
170
|
+
get immutableData() { return JSON.parse(JSON.stringify(this._immutableData)); }
|
|
171
|
+
// extra Info
|
|
169
172
|
getExtraInfo(name) { var _a, _b, _c; return (_c = (_b = (_a = this._extraInfo) === null || _a === void 0 ? void 0 : _a[name]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null; }
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
return data;
|
|
178
|
-
}
|
|
179
|
-
getFields() { return this._fields; }
|
|
180
|
-
getStates() {
|
|
181
|
-
return this._stateFlow.states;
|
|
182
|
-
}
|
|
183
|
-
getFieldNames() {
|
|
184
|
-
return this._fields.map(field => field.fieldCode);
|
|
185
|
-
}
|
|
186
|
-
getActions() {
|
|
187
|
-
return this._actions;
|
|
188
|
-
}
|
|
189
|
-
getHeaderActions() {
|
|
190
|
-
return this._actions.filter(actionItem => actionItem.location === HEADER);
|
|
191
|
-
}
|
|
192
|
-
getFieldObject(elementId) {
|
|
193
|
-
return (this._fieldsObj && elementId && this._fieldsObj[elementId])
|
|
194
|
-
? this._fieldsObj[elementId] : null;
|
|
195
|
-
}
|
|
196
|
-
getTableObject(elementId) {
|
|
197
|
-
return (this._tableObj && elementId && this._tableObj[elementId])
|
|
198
|
-
? this._tableObj[elementId] : null;
|
|
199
|
-
}
|
|
200
|
-
getActionObject(elementId) {
|
|
201
|
-
return (this._actionsObj && elementId && this._actionsObj[elementId])
|
|
202
|
-
? this._actionsObj[elementId] : null;
|
|
203
|
-
}
|
|
204
|
-
getSubSection(sectionCode, subsectionCode) {
|
|
205
|
-
const section = (this._sectionsObj && this._sectionsObj[sectionCode])
|
|
206
|
-
? this._sectionsObj[sectionCode] : null;
|
|
207
|
-
return (section) ? section.getSubsection(subsectionCode) : null;
|
|
208
|
-
}
|
|
209
|
-
get actions() { return this._actionsObj; }
|
|
210
|
-
getSection(sectionCode) {
|
|
211
|
-
return (this._sectionsObj && this._sectionsObj[sectionCode])
|
|
212
|
-
? this._sectionsObj[sectionCode] : null;
|
|
213
|
-
}
|
|
214
|
-
sections() { return this.getSections(); }
|
|
215
|
-
sectionTitles() { return this.getSectionsTitles(); }
|
|
216
|
-
getSections() {
|
|
217
|
-
return this._sections;
|
|
218
|
-
}
|
|
219
|
-
get visibleSections() {
|
|
220
|
-
return this._sections.filter(sec => sec.visible);
|
|
221
|
-
}
|
|
222
|
-
numSections() {
|
|
223
|
-
return this._sections.length;
|
|
224
|
-
}
|
|
225
|
-
getSectionsTitles() {
|
|
226
|
-
return this._sections.map(formSection => formSection.sectionTitle);
|
|
227
|
-
}
|
|
228
|
-
getSectionObject(elementId) {
|
|
229
|
-
return (this._sectionsObj && elementId && this._sectionsObj[elementId])
|
|
230
|
-
? this._sectionsObj[elementId] : null;
|
|
231
|
-
}
|
|
232
|
-
tables() { return this.getTables(); }
|
|
233
|
-
getTables() {
|
|
234
|
-
return this._tables;
|
|
235
|
-
}
|
|
236
|
-
cleanData() {
|
|
237
|
-
if (this._fields) {
|
|
238
|
-
for (const recordField of this._fields) {
|
|
239
|
-
recordField.setValue(recordField.defaultValue);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
if (this._tables) {
|
|
243
|
-
for (const formTable of this._tables) {
|
|
244
|
-
formTable.clean();
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
showSection(sectionCode) {
|
|
249
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
250
|
-
return (sectionObject) ? sectionObject.show() : null;
|
|
251
|
-
}
|
|
252
|
-
hideSection(sectionCode) {
|
|
253
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
254
|
-
return (sectionObject) ? sectionObject.hide() : null;
|
|
255
|
-
}
|
|
256
|
-
activeSection() {
|
|
257
|
-
const activeSection = this._sections.find(sectionObj => sectionObj.active);
|
|
258
|
-
return activeSection.sectionCode;
|
|
259
|
-
}
|
|
260
|
-
activateSection(sectionCode) {
|
|
261
|
-
this._sections.forEach(sectionObj => {
|
|
262
|
-
if (sectionObj) {
|
|
263
|
-
sectionObj.inactivate();
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
267
|
-
return (sectionObject) ? sectionObject.activate() : null;
|
|
268
|
-
}
|
|
269
|
-
showSections(sectionArray) {
|
|
270
|
-
const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];
|
|
271
|
-
sectionNames.forEach(sectionCode => this.showSection(sectionCode));
|
|
272
|
-
}
|
|
273
|
-
hideSections(sectionArray) {
|
|
274
|
-
const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];
|
|
275
|
-
sectionNames.forEach(sectionCode => this.hideSection(sectionCode));
|
|
276
|
-
}
|
|
277
|
-
showSubSection(sectionCode, subSectionCode) {
|
|
278
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
279
|
-
const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;
|
|
280
|
-
return (subSectionObject) ? subSectionObject.show() : null;
|
|
281
|
-
}
|
|
282
|
-
hideSubSection(sectionCode, subSectionCode) {
|
|
283
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
284
|
-
const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;
|
|
285
|
-
return (subSectionObject) ? subSectionObject.hide() : null;
|
|
286
|
-
}
|
|
287
|
-
showSubSections(sectionCode, subSectionArray) {
|
|
288
|
-
if (subSectionArray && subSectionArray.length > 0) {
|
|
289
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
290
|
-
for (const subSectionCode of subSectionArray) {
|
|
291
|
-
const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;
|
|
292
|
-
if (subSectionObject) {
|
|
293
|
-
subSectionObject.show();
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
hideSubSections(sectionCode, subSectionArray) {
|
|
299
|
-
if (subSectionArray && subSectionArray.length > 0) {
|
|
300
|
-
const sectionObject = this.getSectionObject(sectionCode);
|
|
301
|
-
for (const subSectionCode of subSectionArray) {
|
|
302
|
-
const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;
|
|
303
|
-
if (subSectionObject) {
|
|
304
|
-
subSectionObject.hide();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
showAction(actionCode) {
|
|
310
|
-
const actionObject = this.getActionObject(actionCode);
|
|
311
|
-
return (actionObject) ? actionObject.show() : null;
|
|
312
|
-
}
|
|
313
|
-
hideAction(actionCode) {
|
|
314
|
-
const actionObject = this.getActionObject(actionCode);
|
|
315
|
-
return (actionObject) ? actionObject.hide() : null;
|
|
316
|
-
}
|
|
317
|
-
showActions(actionArray) {
|
|
318
|
-
const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];
|
|
319
|
-
actionNames.forEach(actionCode => this.showAction(actionCode));
|
|
320
|
-
}
|
|
321
|
-
hideActions(actionArray) {
|
|
322
|
-
const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];
|
|
323
|
-
actionNames.forEach(actionCode => this.hideAction(actionCode));
|
|
324
|
-
}
|
|
325
|
-
enableAction(actionCode) {
|
|
326
|
-
const actionObject = this.getActionObject(actionCode);
|
|
327
|
-
return (actionObject) ? actionObject.enable() : null;
|
|
328
|
-
}
|
|
329
|
-
disableAction(actionCode) {
|
|
330
|
-
const actionObject = this.getActionObject(actionCode);
|
|
331
|
-
return (actionObject) ? actionObject.disable() : null;
|
|
332
|
-
}
|
|
333
|
-
enableActions(actionArray) {
|
|
334
|
-
const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];
|
|
335
|
-
actionNames.forEach(actionCode => this.enableAction(actionCode));
|
|
336
|
-
}
|
|
337
|
-
disableActions(actionArray) {
|
|
338
|
-
const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];
|
|
339
|
-
actionNames.forEach(actionCode => this.disableAction(actionCode));
|
|
340
|
-
}
|
|
341
|
-
get fields() { return this._fieldsObj; }
|
|
173
|
+
set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }
|
|
174
|
+
get extraInfo() { return JSON.parse(JSON.stringify(this._extraInfo)); }
|
|
175
|
+
// Fields
|
|
176
|
+
getFields() { return this._fieldArray; }
|
|
177
|
+
getFieldNames() { return this._fieldArray.map(field => field.fieldCode); }
|
|
178
|
+
getField(elementId) { var _a; return (elementId && ((_a = this._fields) === null || _a === void 0 ? void 0 : _a[elementId])) ? this._fields[elementId] : null; }
|
|
179
|
+
get fields() { return this._fields; }
|
|
342
180
|
enableField(fieldCode) {
|
|
343
|
-
const fieldObject = this.
|
|
181
|
+
const fieldObject = this.getField(fieldCode);
|
|
344
182
|
return (fieldObject) ? fieldObject.enable() : null;
|
|
345
183
|
}
|
|
346
184
|
disableField(fieldCode) {
|
|
347
|
-
const fieldObject = this.
|
|
185
|
+
const fieldObject = this.getField(fieldCode);
|
|
348
186
|
return (fieldObject) ? fieldObject.disable() : null;
|
|
349
187
|
}
|
|
350
188
|
getFieldValue(fieldCode) {
|
|
351
|
-
const fieldObject = this.
|
|
189
|
+
const fieldObject = this.getField(fieldCode);
|
|
352
190
|
return (fieldObject) ? fieldObject.getValue() : null;
|
|
353
191
|
}
|
|
354
192
|
getFieldsValues(fieldCodesArray) {
|
|
@@ -360,37 +198,37 @@ export class FormStructureAndData {
|
|
|
360
198
|
for (let index = 0; index < fieldCodesArray.length; index++) {
|
|
361
199
|
const fieldCode = fieldCodesArray[index];
|
|
362
200
|
if (fieldCode) {
|
|
363
|
-
resultObject[fieldCode] = (_c = (_b = (_a = this.
|
|
201
|
+
resultObject[fieldCode] = (_c = (_b = (_a = this._fields) === null || _a === void 0 ? void 0 : _a[fieldCode]) === null || _b === void 0 ? void 0 : _b.getValue()) !== null && _c !== void 0 ? _c : null;
|
|
364
202
|
}
|
|
365
203
|
}
|
|
366
204
|
return resultObject;
|
|
367
205
|
}
|
|
368
206
|
getFieldOptions(fieldCode) {
|
|
369
|
-
const fieldObject = this.
|
|
207
|
+
const fieldObject = this.getField(fieldCode);
|
|
370
208
|
return (fieldObject) ? fieldObject.getFieldOptions() : null;
|
|
371
209
|
}
|
|
372
210
|
setFieldValue(fieldCode, fieldValue) {
|
|
373
|
-
const fieldObject = this.
|
|
211
|
+
const fieldObject = this.getField(fieldCode);
|
|
374
212
|
return (fieldObject) ? fieldObject.setValue(fieldValue) : null;
|
|
375
213
|
}
|
|
376
214
|
setFieldError(code, message, type = 'error') {
|
|
377
|
-
const fieldObject = this.
|
|
215
|
+
const fieldObject = this.getField(code);
|
|
378
216
|
return (fieldObject) ? fieldObject.setError(code, message, type) : null;
|
|
379
217
|
}
|
|
380
218
|
setFieldIntrinsicErrorMessage(code, message) {
|
|
381
|
-
const fieldObject = this.
|
|
219
|
+
const fieldObject = this.getField(code);
|
|
382
220
|
return (fieldObject) ? fieldObject.setIntrinsicErrorMessage(message) : null;
|
|
383
221
|
}
|
|
384
222
|
setFieldRequired(fieldCode, required) {
|
|
385
|
-
const fieldObject = this.
|
|
223
|
+
const fieldObject = this.getField(fieldCode);
|
|
386
224
|
return (fieldObject) ? fieldObject.required = required : null;
|
|
387
225
|
}
|
|
388
226
|
setFieldErrorMessage(fieldCode, errorMessage) {
|
|
389
|
-
const fieldObject = this.
|
|
227
|
+
const fieldObject = this.getField(fieldCode);
|
|
390
228
|
return (fieldObject) ? fieldObject.setErrorMessage(errorMessage) : null;
|
|
391
229
|
}
|
|
392
230
|
setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {
|
|
393
|
-
const fieldObject = this.
|
|
231
|
+
const fieldObject = this.getField(fieldCode);
|
|
394
232
|
if (fieldObject && optionsArray && optionsArray.length > 0) {
|
|
395
233
|
const fieldOptions = [];
|
|
396
234
|
for (const optionItem of optionsArray) {
|
|
@@ -409,7 +247,7 @@ export class FormStructureAndData {
|
|
|
409
247
|
fieldUniverse = fieldArray;
|
|
410
248
|
}
|
|
411
249
|
else if (sectionCode && !subSectionCode) {
|
|
412
|
-
const sectionObject = this.
|
|
250
|
+
const sectionObject = this.getSection(sectionCode);
|
|
413
251
|
fieldUniverse = sectionObject === null || sectionObject === void 0 ? void 0 : sectionObject.getFieldNames();
|
|
414
252
|
}
|
|
415
253
|
else if (sectionCode && subSectionCode) {
|
|
@@ -423,7 +261,7 @@ export class FormStructureAndData {
|
|
|
423
261
|
return fieldUniverse;
|
|
424
262
|
}
|
|
425
263
|
return fieldUniverse.filter(fld => {
|
|
426
|
-
const fieldObject = this.
|
|
264
|
+
const fieldObject = this.getField(fld);
|
|
427
265
|
return (fieldObject && filterFunc(fieldObject));
|
|
428
266
|
});
|
|
429
267
|
}
|
|
@@ -432,7 +270,7 @@ export class FormStructureAndData {
|
|
|
432
270
|
let fieldSetSize = 0;
|
|
433
271
|
if (fieldUniverse && processFunc) {
|
|
434
272
|
for (const fieldCode of fieldUniverse) {
|
|
435
|
-
const fieldObject = this.
|
|
273
|
+
const fieldObject = this.getField(fieldCode);
|
|
436
274
|
if (fieldObject) {
|
|
437
275
|
try {
|
|
438
276
|
processFunc(fieldObject);
|
|
@@ -506,29 +344,108 @@ export class FormStructureAndData {
|
|
|
506
344
|
}
|
|
507
345
|
return false;
|
|
508
346
|
}
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
347
|
+
// Acciones
|
|
348
|
+
get actions() { return this._actions; }
|
|
349
|
+
getActionsByAttribute(name, value) { return this._actionArray.filter(actionItem => actionItem.matchAttribute(name, value)); }
|
|
350
|
+
getActions() { return this._actionArray; }
|
|
351
|
+
getAction(code) { var _a; return (code && ((_a = this._actions) === null || _a === void 0 ? void 0 : _a[code])) ? this._actions[code] : null; }
|
|
352
|
+
showActions(codes) { return this.execOnActions(codes, SHOW); }
|
|
353
|
+
hideActions(codes) { return this.execOnActions(codes, HIDE); }
|
|
354
|
+
enableActions(codes) { return this.execOnActions(codes, ENABLE); }
|
|
355
|
+
disableActions(codes) { return this.execOnActions(codes, DISABLE); }
|
|
356
|
+
execOnActions(codes, functionName) {
|
|
357
|
+
const actionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
358
|
+
if (!functionName || actionCodes.length === 0) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
actionCodes.forEach(code => {
|
|
362
|
+
var _a;
|
|
363
|
+
const action = this.getAction(code);
|
|
364
|
+
(_a = action === null || action === void 0 ? void 0 : action[functionName]) === null || _a === void 0 ? void 0 : _a.call(action);
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
// Tablas
|
|
368
|
+
tables() { return this.getTables(); }
|
|
369
|
+
getTables() { return this._tableArray; }
|
|
370
|
+
getTable(code) { var _a; return (code && ((_a = this._tables) === null || _a === void 0 ? void 0 : _a[code])) ? this._tables[code] : null; }
|
|
371
|
+
enableTables(codes) { return this.execOnTables(codes, ENABLE); }
|
|
372
|
+
disableTables(codes) { return this.execOnTables(codes, DISABLE); }
|
|
373
|
+
showTables(codes) { return this.execOnTables(codes, SHOW); }
|
|
374
|
+
hideTables(codes) { return this.execOnTables(codes, HIDE); }
|
|
375
|
+
cleanTables(codes) { return this.execOnTables(codes, CLEAN); }
|
|
376
|
+
execOnTables(codes, functionName) {
|
|
377
|
+
const tableCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
378
|
+
if (!functionName || tableCodes.length === 0) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
tableCodes.forEach(code => {
|
|
382
|
+
var _a;
|
|
383
|
+
const table = this.getTable(code);
|
|
384
|
+
(_a = table === null || table === void 0 ? void 0 : table[functionName]) === null || _a === void 0 ? void 0 : _a.call(table);
|
|
385
|
+
});
|
|
512
386
|
}
|
|
513
387
|
getTableRecord(tableCode, recordId) {
|
|
514
|
-
const tableObject = this.
|
|
388
|
+
const tableObject = this.getTable(tableCode);
|
|
515
389
|
return (tableObject) ? tableObject.getTableRecord(recordId) : null;
|
|
516
390
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
391
|
+
// Secciones
|
|
392
|
+
get sections() { return this._sectionArray; }
|
|
393
|
+
getSectionsByAttribute(name, value) { return this._sectionArray.filter(item => item.matchAttribute(name, value)); }
|
|
394
|
+
get sectionTitles() { return this._sectionArray.map(formSection => formSection.sectionTitle); }
|
|
395
|
+
get visibleSections() { return this._sectionArray.filter(sec => sec.visible); }
|
|
396
|
+
getSection(code) { var _a; return (code && ((_a = this._sections) === null || _a === void 0 ? void 0 : _a[code])) ? this._sections[code] : null; }
|
|
397
|
+
showSections(names) { this.execOnSections(names, SHOW); }
|
|
398
|
+
hideSections(names) { this.execOnSections(names, HIDE); }
|
|
399
|
+
activeSection() { return this._exclusiveSectionsByAttr[ACTIVE]; }
|
|
400
|
+
getSubSection(code, subCode) { var _a, _b; return (_b = (_a = this.getSection(code)) === null || _a === void 0 ? void 0 : _a.getSubsection(subCode)) !== null && _b !== void 0 ? _b : null; }
|
|
401
|
+
showSubSections(code, subCodes) { return this.execOnSubSections(code, subCodes, SHOW); }
|
|
402
|
+
hideSubSections(code, subCodes) { return this.execOnSubSections(code, subCodes, HIDE); }
|
|
403
|
+
activateSection(code) {
|
|
404
|
+
var _a, _b;
|
|
405
|
+
if (code === this._exclusiveSectionsByAttr[ACTIVE]) {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
(_a = this.getSection(this.activeSection())) === null || _a === void 0 ? void 0 : _a.inactivate();
|
|
409
|
+
(_b = this.getSection(code)) === null || _b === void 0 ? void 0 : _b.activate();
|
|
410
|
+
this._exclusiveSectionsByAttr[ACTIVE] = code;
|
|
520
411
|
}
|
|
521
|
-
|
|
522
|
-
const
|
|
523
|
-
|
|
412
|
+
execOnSections(codes, functionName) {
|
|
413
|
+
const sectionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
414
|
+
if (!functionName || sectionCodes.length === 0) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
sectionCodes.forEach(code => {
|
|
418
|
+
var _a;
|
|
419
|
+
const section = this.getSection(code);
|
|
420
|
+
(_a = section === null || section === void 0 ? void 0 : section[functionName]) === null || _a === void 0 ? void 0 : _a.call(section);
|
|
421
|
+
});
|
|
524
422
|
}
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
423
|
+
execOnSubSections(code, subNames, functionName) {
|
|
424
|
+
var _a;
|
|
425
|
+
const subCodes = (Array.isArray(subNames)) ? subNames : (subNames ? [subNames] : []);
|
|
426
|
+
const section = this.getSection(code);
|
|
427
|
+
if (!functionName || !section || subCodes.length === 0) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
for (const subCode of subCodes) {
|
|
431
|
+
const subSection = this.getSubSection(code, subCode);
|
|
432
|
+
(_a = subSection === null || subSection === void 0 ? void 0 : subSection[functionName]) === null || _a === void 0 ? void 0 : _a.call(subSection);
|
|
433
|
+
}
|
|
528
434
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
435
|
+
/**
|
|
436
|
+
* Métodos propios de gestión del formulario
|
|
437
|
+
*/
|
|
438
|
+
cleanData() {
|
|
439
|
+
if (this._fieldArray) {
|
|
440
|
+
for (const recordField of this._fieldArray) {
|
|
441
|
+
recordField.setValue(recordField.defaultValue);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (this._tableArray) {
|
|
445
|
+
for (const formTable of this._tableArray) {
|
|
446
|
+
formTable.clean();
|
|
447
|
+
}
|
|
448
|
+
}
|
|
532
449
|
}
|
|
533
450
|
/** payload para servicios Tuain */
|
|
534
451
|
getPayload() {
|
|
@@ -571,4 +488,4 @@ export class FormStructureAndData {
|
|
|
571
488
|
return formData;
|
|
572
489
|
}
|
|
573
490
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWNwRCxNQUFNLE9BQU8sb0JBQW9CO0lBaUIvQixZQUFZLGtCQUFrQixFQUFFLFVBQVU7UUFWbEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUd0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FB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b3J0IHsgUmVjb3JkRm9ybVNlY3Rpb24gfSBmcm9tICcuL3NlY3Rpb24nO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciB9IGZyb20gJy4vZmllbGQnO1xuaW1wb3J0IHsgUmVjb3JkVGFibGUgfSBmcm9tICcuL3RhYmxlL3RhYmxlJztcbmltcG9ydCB7IE5PX0VSUk9SLCBIRUFERVIgfSBmcm9tICcuL2Zvcm0uY29uc3RhbnRzJztcblxuaW50ZXJmYWNlIFRyYW5zaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3RhdGVGbG93IHtcbiAgZGVmYXVsdFN0YXRlOiBzdHJpbmc7XG4gIHN0YXRlczogc3RyaW5nW107XG4gIHRyYW5zaXRpb25zOiBUcmFuc2l0aW9uW107XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtU3RydWN0dXJlQW5kRGF0YSB7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIF9uYW1lOiBzdHJpbmc7XG4gIF9mb3JtQ29uZmlnOiBhbnk7XG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3N0YXRlRmxvdzogU3RhdGVGbG93O1xuICBwcml2YXRlIF9maWVsZHM6IEZpZWxkRGVzY3JpcHRvcltdO1xuICBwcml2YXRlIF9maWVsZHNPYmogPSB7fTtcbiAgcHJpdmF0ZSBfYWN0aW9uczogRm9ybUFjdGlvbltdO1xuICBwcml2YXRlIF9hY3Rpb25zT2JqID0ge307XG4gIHByaXZhdGUgX3RhYmxlczogUmVjb3JkVGFibGVbXTtcbiAgcHJpdmF0ZSBfdGFibGVPYmogPSB7fTtcbiAgcHJpdmF0ZSBfc2VjdGlvbnM6IFJlY29yZEZvcm1TZWN0aW9uW107XG4gIHByaXZhdGUgX3NlY3Rpb25zT2JqID0ge307XG4gIHByaXZhdGUgX2ltbXV0YWJsZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSBfZXh0cmFJbmZvID0ge307XG5cbiAgY29uc3RydWN0b3IoZGVmaW5pdGlvblJlY2VpdmVkLCBmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gICAgdGhpcy5zdGF0ZSA9ICcnO1xuICAgIHRoaXMuX2FjdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9maWVsZHMgPSBbXTtcbiAgICB0aGlzLl90YWJsZXMgPSBbXTtcbiAgICB0aGlzLl9zZWN0aW9ucyA9IFtdO1xuICAgIHRoaXMuX3N0YXRlRmxvdyA9IHtcbiAgICAgIGRlZmF1bHRTdGF0ZTogJycsXG4gICAgICBzdGF0ZXM6IFtdLFxuICAgICAgdHJhbnNpdGlvbnM6IFtdLFxuICAgIH07XG4gICAgaWYgKCFkZWZpbml0aW9uUmVjZWl2ZWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5fbmFtZSA9IChkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybSAmJiBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtQ29kZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybUNvZGUgOiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX3RpdGxlID0gKGRlZmluaXRpb25SZWNlaXZlZC5mb3JtICYmIGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1UaXRsZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlIDogJyc7XG4gICAgdGhpcy5zZXRTdGF0ZUZsb3coZGVmaW5pdGlvblJlY2VpdmVkPy5zdGF0ZXMsIGRlZmluaXRpb25SZWNlaXZlZD8udHJhbnNpdGlvbnMsXG4gICAgICBkZWZpbml0aW9uUmVjZWl2ZWQ/LmRlZmF1bHRTdGF0ZSk7XG4gICAgdGhpcy5pbW11dGFibGVEYXRhID0gZGVmaW5pdGlvblJlY2VpdmVkLmltbXV0YWJsZURhdGE7XG4gICAgdGhpcy5leHRyYUluZm8gPSBkZWZpbml0aW9uUmVjZWl2ZWQuZXh0cmFJbmZvO1xuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5hY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSBbLi4udmlzaWJsZVN0YXRlc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uUmVjZWl2ZWQgb2YgZm9ybUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQWN0aW9uID0gbmV3IEZvcm1BY3Rpb24oYWN0aW9uUmVjZWl2ZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICBjb25zdCBnbG9iYWxBY3Rpb25Db2RlID0gZ2xvYmFsQWN0aW9uLmFjdGlvbkNvZGU7XG4gICAgICAgIGlmIChnbG9iYWxBY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNoKGdsb2JhbEFjdGlvbik7XG4gICAgICAgICAgdGhpcy5fYWN0aW9uc09ialtnbG9iYWxBY3Rpb25Db2RlXSA9IGdsb2JhbEFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uUmVjZWl2ZWQuZmllbGRzKSB7XG4gICAgICBjb25zdCBmb3JtRmllbGRzID0gZGVmaW5pdGlvblJlY2VpdmVkLmZpZWxkcy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgbGV0IGVuYWJsZWRTdGF0ZXMgPSBvYmpEZWYuZW5hYmxlZFN0YXRlcyB8fCBvYmpEZWYuZWRpdGFibGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLmZpZWxkTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gWy4uLnZpc2libGVTdGF0ZXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkUmVjZWl2ZWQgb2YgZm9ybUZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZFRvQWRkID0gbmV3IEZpZWxkRGVzY3JpcHRvcihmaWVsZFJlY2VpdmVkLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgY29uc3QgZmllbGRDb2RlID0gZmllbGRUb0FkZC5maWVsZENvZGU7XG4gICAgICAgIGlmIChmaWVsZENvZGUpIHtcbiAgICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZFRvQWRkKTtcbiAgICAgICAgICB0aGlzLl9maWVsZHNPYmpbZmllbGRDb2RlXSA9IGZpZWxkVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLnRhYmxlcykge1xuICAgICAgY29uc3QgdGFibGVzID0gZGVmaW5pdGlvblJlY2VpdmVkLnRhYmxlcy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgbGV0IGVuYWJsZWRTdGF0ZXMgPSBvYmpEZWYuZW5hYmxlZFN0YXRlcyB8fCBvYmpEZWYuZWRpdGFibGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLnRhYmxlTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gWy4uLnZpc2libGVTdGF0ZXNdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcyB8fCB2aXNpYmxlU3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSB0aGlzLl9mb3JtQ29uZmlnLmRlZmF1bHRTdGF0ZUZsb3cuc3RhdGVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlUmVjZWl2ZWQgb2YgdGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlVG9BZGQgPSBuZXcgUmVjb3JkVGFibGUodGFibGVSZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29kZSA9IHRhYmxlVG9BZGQudGFibGVDb2RlO1xuICAgICAgICBpZiAodGFibGVDb2RlKSB7XG4gICAgICAgICAgdGhpcy5fdGFibGVzLnB1c2godGFibGVUb0FkZCk7XG4gICAgICAgICAgdGhpcy5fdGFibGVPYmpbdGFibGVDb2RlXSA9IHRhYmxlVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLnNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtU2VjdGlvbnMgPSBkZWZpbml0aW9uUmVjZWl2ZWQuc2VjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLnNlY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHNlY3Rpb25SZWNlaXZlZCBvZiBmb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvblRvQWRkID0gbmV3IFJlY29yZEZvcm1TZWN0aW9uKHNlY3Rpb25SZWNlaXZlZCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25Db2RlID0gc2VjdGlvblRvQWRkLnNlY3Rpb25Db2RlO1xuICAgICAgICBpZiAoc2VjdGlvbkNvZGUpIHtcbiAgICAgICAgICB0aGlzLl9zZWN0aW9ucy5wdXNoKHNlY3Rpb25Ub0FkZCk7XG4gICAgICAgICAgdGhpcy5fc2VjdGlvbnNPYmpbc2VjdGlvbkNvZGVdID0gc2VjdGlvblRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0IGltbXV0YWJsZURhdGEoaW1tdXRhYmxlRGF0YSkgeyBPYmplY3QuYXNzaWduKHRoaXMuX2ltbXV0YWJsZURhdGEsIGltbXV0YWJsZURhdGEpOyB9XG4gIHNldCBleHRyYUluZm8oZXh0cmFJbmZvKSB7IE9iamVjdC5hc3NpZ24odGhpcy5fZXh0cmFJbmZvLCBleHRyYUluZm8pOyB9XG5cbiAgZ2V0IGRlZmF1bHRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuX3N0YXRlRmxvdy5kZWZhdWx0U3RhdGU7IH1cbiAgZ2V0IHRpdGxlKCkgeyByZXR1cm4gdGhpcy5fdGl0bGU7IH1cbiAgc2V0IHRpdGxlKHRpdGxlKSB7IHRoaXMuX3RpdGxlID0gdGl0bGU7IH1cbiAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9XG4gIHNldCBuYW1lKG5hbWUpIHsgdGhpcy5fbmFtZSA9IG5hbWU7IH1cblxuICBjaGFuZ2VTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGlmICghbmV3U3RhdGUgfHwgIXRoaXMuc3VwcG9ydFN0YXRlKG5ld1N0YXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJhbnNpdGlvblRvQ2hhbmdlID0gdGhpcy5fc3RhdGVGbG93LnRyYW5zaXRpb25zLmZpbmQodHJucyA9PlxuICAgICAgICB0cm5zLnNvdXJjZSA9PT0gdGhpcy5zdGF0ZSAmJiB0cm5zLmRlc3RpbmF0aW9uID09PSBuZXdTdGF0ZSk7XG4gICAgICBpZiAodHJhbnNpdGlvblRvQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlID09PSBuZXdTdGF0ZSk7XG4gIH1cblxuICBzZXRTdGF0ZUZsb3coc3RhdGVzPywgdHJhbnNpdGlvbnM/LCBkZWZhdWx0U3RhdGU/KSB7XG4gICAgaWYgKCFzdGF0ZXMgfHwgIXRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLl9zdGF0ZUZsb3cgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2Zvcm1Db25maWcuZGVmYXVsdFN0YXRlRmxvdykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzID0gc3RhdGVzO1xuICAgIHRoaXMuX3N0YXRlRmxvdy5kZWZhdWx0U3RhdGUgPSBkZWZhdWx0U3RhdGUgfHwgdGhpcy5fc3RhdGVGbG93LnN0YXRlc1swXTtcbiAgICB0aGlzLl9zdGF0ZUZsb3cudHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucy5tYXAodHJhbnNpdGlvbiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdHJhbnNpdGlvbi5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gKHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXMuaW5jbHVkZXModHJhbnNpdGlvbi5zb3VyY2UpKSA/IHRyYW5zaXRpb24uc291cmNlIDogJyc7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICh0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uZGVzdGluYXRpb24pKSA/IHRyYW5zaXRpb24uZGVzdGluYXRpb24gOiAnJztcbiAgICAgIHJldHVybiB7IG5hbWUsIHNvdXJjZSwgZGVzdGluYXRpb24gfTtcbiAgICB9KS5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgJiYgaXRlbS5zb3VyY2UgJiYgaXRlbS5kZXN0aW5hdGlvbik7XG4gIH1cblxuICBzdXBwb3J0U3RhdGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXM/LmluY2x1ZGVzKHN0YXRlKTsgfVxuICBzdXBwb3J0TW9kZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG5cblxuICBnZXQgaW1tdXRhYmxlRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgY29uc3Qgb2JqZWN0TmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9pbW11dGFibGVEYXRhKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0TmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBuYW1lID0gb2JqZWN0TmFtZXNbaW5kZXhdO1xuICAgICAgZGF0YVtuYW1lXSA9IHRoaXMuZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWUpIHsgcmV0dXJuIHRoaXMuX2ltbXV0YWJsZURhdGE/LltuYW1lXT8udmFsdWUgPz8gbnVsbDsgfVxuICBnZXRFeHRyYUluZm8obmFtZSkgeyByZXR1cm4gdGhpcy5fZXh0cmFJbmZvPy5bbmFtZV0/LnZhbHVlID8/IG51bGw7IH1cblxuICBnZXQgZXh0cmFJbmZvKCkge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCBvYmplY3ROYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX2V4dHJhSW5mbyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdE5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgbmFtZSA9IG9iamVjdE5hbWVzW2luZGV4XTtcbiAgICAgIGRhdGFbbmFtZV0gPSB0aGlzLmdldEV4dHJhSW5mbyhuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBnZXRGaWVsZHMoKSB7IHJldHVybiB0aGlzLl9maWVsZHM7IH1cblxuICBnZXRTdGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXM7XG4gIH1cblxuICBnZXRGaWVsZE5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLmZpZWxkQ29kZSk7XG4gIH1cblxuICBnZXRBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5maWx0ZXIoYWN0aW9uSXRlbSA9PiBhY3Rpb25JdGVtLmxvY2F0aW9uID09PSBIRUFERVIpO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3QoZWxlbWVudElkKSB7XG4gICAgcmV0dXJuICh0aGlzLl9maWVsZHNPYmogJiYgZWxlbWVudElkICYmIHRoaXMuX2ZpZWxkc09ialtlbGVtZW50SWRdKVxuICAgICAgPyB0aGlzLl9maWVsZHNPYmpbZWxlbWVudElkXSA6IG51bGw7XG4gIH1cblxuICBnZXRUYWJsZU9iamVjdChlbGVtZW50SWQpIHtcbiAgICByZXR1cm4gKHRoaXMuX3RhYmxlT2JqICYmIGVsZW1lbnRJZCAmJiB0aGlzLl90YWJsZU9ialtlbGVtZW50SWRdKVxuICAgICAgPyB0aGlzLl90YWJsZU9ialtlbGVtZW50SWRdIDogbnVsbDtcbiAgfVxuXG4gIGdldEFjdGlvbk9iamVjdChlbGVtZW50SWQpIHtcbiAgICByZXR1cm4gKHRoaXMuX2FjdGlvbnNPYmogJiYgZWxlbWVudElkICYmIHRoaXMuX2FjdGlvbnNPYmpbZWxlbWVudElkXSlcbiAgICAgID8gdGhpcy5fYWN0aW9uc09ialtlbGVtZW50SWRdIDogbnVsbDtcbiAgfVxuXG4gIGdldFN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YnNlY3Rpb25Db2RlKSB7XG4gICAgY29uc3Qgc2VjdGlvbiA9ICh0aGlzLl9zZWN0aW9uc09iaiAmJiB0aGlzLl9zZWN0aW9uc09ialtzZWN0aW9uQ29kZV0pXG4gICAgICA/IHRoaXMuX3NlY3Rpb25zT2JqW3NlY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgcmV0dXJuIChzZWN0aW9uKSA/IHNlY3Rpb24uZ2V0U3Vic2VjdGlvbihzdWJzZWN0aW9uQ29kZSkgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zT2JqOyB9XG5cbiAgZ2V0U2VjdGlvbihzZWN0aW9uQ29kZSkge1xuICAgIHJldHVybiAodGhpcy5fc2VjdGlvbnNPYmogJiYgdGhpcy5fc2VjdGlvbnNPYmpbc2VjdGlvbkNvZGVdKVxuICAgICAgPyB0aGlzLl9zZWN0aW9uc09ialtzZWN0aW9uQ29kZV0gOiBudWxsO1xuICB9XG4gIHNlY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5nZXRTZWN0aW9ucygpOyB9XG4gIHNlY3Rpb25UaXRsZXMoKSB7IHJldHVybiB0aGlzLmdldFNlY3Rpb25zVGl0bGVzKCk7IH1cblxuICBnZXRTZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnM7XG4gIH1cblxuICBnZXQgdmlzaWJsZVNlY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5maWx0ZXIoc2VjID0+IHNlYy52aXNpYmxlKTtcbiAgfVxuXG4gIG51bVNlY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7XG4gIH1cblxuICBnZXRTZWN0aW9uc1RpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMubWFwKGZvcm1TZWN0aW9uID0+IGZvcm1TZWN0aW9uLnNlY3Rpb25UaXRsZSk7XG4gIH1cblxuICBnZXRTZWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkge1xuICAgIHJldHVybiAodGhpcy5fc2VjdGlvbnNPYmogJiYgZWxlbWVudElkICYmIHRoaXMuX3NlY3Rpb25zT2JqW2VsZW1lbnRJZF0pXG4gICAgICA/IHRoaXMuX3NlY3Rpb25zT2JqW2VsZW1lbnRJZF0gOiBudWxsO1xuICB9XG4gIHRhYmxlcygpIHsgcmV0dXJuIHRoaXMuZ2V0VGFibGVzKCk7IH1cblxuICBnZXRUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlcztcbiAgfVxuXG4gIGNsZWFuRGF0YSgpIHtcbiAgICBpZiAodGhpcy5fZmllbGRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZEZpZWxkIG9mIHRoaXMuX2ZpZWxkcykge1xuICAgICAgICByZWNvcmRGaWVsZC5zZXRWYWx1ZShyZWNvcmRGaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fdGFibGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm1UYWJsZSBvZiB0aGlzLl90YWJsZXMpIHtcbiAgICAgICAgZm9ybVRhYmxlLmNsZWFuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd1NlY3Rpb24oc2VjdGlvbkNvZGUpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICByZXR1cm4gKHNlY3Rpb25PYmplY3QpID8gc2VjdGlvbk9iamVjdC5zaG93KCkgOiBudWxsO1xuICB9XG5cbiAgaGlkZVNlY3Rpb24oc2VjdGlvbkNvZGUpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICByZXR1cm4gKHNlY3Rpb25PYmplY3QpID8gc2VjdGlvbk9iamVjdC5oaWRlKCkgOiBudWxsO1xuICB9XG5cbiAgYWN0aXZlU2VjdGlvbigpIHtcbiAgICBjb25zdCBhY3RpdmVTZWN0aW9uID0gdGhpcy5fc2VjdGlvbnMuZmluZChzZWN0aW9uT2JqID0+IHNlY3Rpb25PYmouYWN0aXZlKTtcbiAgICByZXR1cm4gYWN0aXZlU2VjdGlvbi5zZWN0aW9uQ29kZTtcbiAgfVxuXG4gIGFjdGl2YXRlU2VjdGlvbihzZWN0aW9uQ29kZSkge1xuICAgIHRoaXMuX3NlY3Rpb25zLmZvckVhY2goc2VjdGlvbk9iaiA9PiB7XG4gICAgICBpZiAoc2VjdGlvbk9iaikgeyBzZWN0aW9uT2JqLmluYWN0aXZhdGUoKTsgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLmdldFNlY3Rpb25PYmplY3Qoc2VjdGlvbkNvZGUpO1xuICAgIHJldHVybiAoc2VjdGlvbk9iamVjdCkgPyBzZWN0aW9uT2JqZWN0LmFjdGl2YXRlKCkgOiBudWxsO1xuICB9XG5cbiAgc2hvd1NlY3Rpb25zKHNlY3Rpb25BcnJheSkge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lcyA9IChBcnJheS5pc0FycmF5KHNlY3Rpb25BcnJheSkpID8gc2VjdGlvbkFycmF5IDogW3NlY3Rpb25BcnJheV07XG4gICAgc2VjdGlvbk5hbWVzLmZvckVhY2goc2VjdGlvbkNvZGUgPT4gdGhpcy5zaG93U2VjdGlvbihzZWN0aW9uQ29kZSkpO1xuICB9XG5cbiAgaGlkZVNlY3Rpb25zKHNlY3Rpb25BcnJheSkge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lcyA9IChBcnJheS5pc0FycmF5KHNlY3Rpb25BcnJheSkpID8gc2VjdGlvbkFycmF5IDogW3NlY3Rpb25BcnJheV07XG4gICAgc2VjdGlvbk5hbWVzLmZvckVhY2goc2VjdGlvbkNvZGUgPT4gdGhpcy5oaWRlU2VjdGlvbihzZWN0aW9uQ29kZSkpO1xuICB9XG5cbiAgc2hvd1N1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U2VjdGlvbk9iamVjdChzZWN0aW9uQ29kZSk7XG4gICAgY29uc3Qgc3ViU2VjdGlvbk9iamVjdCA9IChzZWN0aW9uT2JqZWN0KSA/IHNlY3Rpb25PYmplY3QuZ2V0U3Vic2VjdGlvbihzdWJTZWN0aW9uQ29kZSkgOiBudWxsO1xuICAgIHJldHVybiAoc3ViU2VjdGlvbk9iamVjdCkgPyBzdWJTZWN0aW9uT2JqZWN0LnNob3coKSA6IG51bGw7XG4gIH1cblxuICBoaWRlU3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCBzdWJTZWN0aW9uT2JqZWN0ID0gKHNlY3Rpb25PYmplY3QpID8gc2VjdGlvbk9iamVjdC5nZXRTdWJzZWN0aW9uKHN1YlNlY3Rpb25Db2RlKSA6IG51bGw7XG4gICAgcmV0dXJuIChzdWJTZWN0aW9uT2JqZWN0KSA/IHN1YlNlY3Rpb25PYmplY3QuaGlkZSgpIDogbnVsbDtcbiAgfVxuXG4gIHNob3dTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KSB7XG4gICAgaWYgKHN1YlNlY3Rpb25BcnJheSAmJiBzdWJTZWN0aW9uQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U2VjdGlvbk9iamVjdChzZWN0aW9uQ29kZSk7XG4gICAgICBmb3IgKGNvbnN0IHN1YlNlY3Rpb25Db2RlIG9mIHN1YlNlY3Rpb25BcnJheSkge1xuICAgICAgICBjb25zdCBzdWJTZWN0aW9uT2JqZWN0ID0gKHNlY3Rpb25PYmplY3QpID8gc2VjdGlvbk9iamVjdC5nZXRTdWJzZWN0aW9uKHN1YlNlY3Rpb25Db2RlKSA6IG51bGw7XG4gICAgICAgIGlmIChzdWJTZWN0aW9uT2JqZWN0KSB7IHN1YlNlY3Rpb25PYmplY3Quc2hvdygpOyB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGlkZVN1YlNlY3Rpb25zKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQXJyYXkpIHtcbiAgICBpZiAoc3ViU2VjdGlvbkFycmF5ICYmIHN1YlNlY3Rpb25BcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICAgIGZvciAoY29uc3Qgc3ViU2VjdGlvbkNvZGUgb2Ygc3ViU2VjdGlvbkFycmF5KSB7XG4gICAgICAgIGNvbnN0IHN1YlNlY3Rpb25PYmplY3QgPSAoc2VjdGlvbk9iamVjdCkgPyBzZWN0aW9uT2JqZWN0LmdldFN1YnNlY3Rpb24oc3ViU2VjdGlvbkNvZGUpIDogbnVsbDtcbiAgICAgICAgaWYgKHN1YlNlY3Rpb25PYmplY3QpIHsgc3ViU2VjdGlvbk9iamVjdC5oaWRlKCk7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93QWN0aW9uKGFjdGlvbkNvZGUpIHtcbiAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTtcbiAgICByZXR1cm4gKGFjdGlvbk9iamVjdCkgPyBhY3Rpb25PYmplY3Quc2hvdygpIDogbnVsbDtcbiAgfVxuXG4gIGhpZGVBY3Rpb24oYWN0aW9uQ29kZSkge1xuICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIHJldHVybiAoYWN0aW9uT2JqZWN0KSA/IGFjdGlvbk9iamVjdC5oaWRlKCkgOiBudWxsO1xuICB9XG5cbiAgc2hvd0FjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICBjb25zdCBhY3Rpb25OYW1lcyA9IChBcnJheS5pc0FycmF5KGFjdGlvbkFycmF5KSkgPyBhY3Rpb25BcnJheSA6IFthY3Rpb25BcnJheV07XG4gICAgYWN0aW9uTmFtZXMuZm9yRWFjaChhY3Rpb25Db2RlID0+IHRoaXMuc2hvd0FjdGlvbihhY3Rpb25Db2RlKSk7XG4gIH1cblxuICBoaWRlQWN0aW9ucyhhY3Rpb25BcnJheSkge1xuICAgIGNvbnN0IGFjdGlvbk5hbWVzID0gKEFycmF5LmlzQXJyYXkoYWN0aW9uQXJyYXkpKSA/IGFjdGlvbkFycmF5IDogW2FjdGlvbkFycmF5XTtcbiAgICBhY3Rpb25OYW1lcy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4gdGhpcy5oaWRlQWN0aW9uKGFjdGlvbkNvZGUpKTtcbiAgfVxuXG4gIGVuYWJsZUFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb25PYmplY3QoYWN0aW9uQ29kZSk7XG4gICAgcmV0dXJuIChhY3Rpb25PYmplY3QpID8gYWN0aW9uT2JqZWN0LmVuYWJsZSgpIDogbnVsbDtcbiAgfVxuXG4gIGRpc2FibGVBY3Rpb24oYWN0aW9uQ29kZSkge1xuICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIHJldHVybiAoYWN0aW9uT2JqZWN0KSA/IGFjdGlvbk9iamVjdC5kaXNhYmxlKCkgOiBudWxsO1xuICB9XG5cbiAgZW5hYmxlQWN0aW9ucyhhY3Rpb25BcnJheSkge1xuICAgIGNvbnN0IGFjdGlvbk5hbWVzID0gKEFycmF5LmlzQXJyYXkoYWN0aW9uQXJyYXkpKSA/IGFjdGlvbkFycmF5IDogW2FjdGlvbkFycmF5XTtcbiAgICBhY3Rpb25OYW1lcy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4gdGhpcy5lbmFibGVBY3Rpb24oYWN0aW9uQ29kZSkpO1xuICB9XG5cbiAgZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICBjb25zdCBhY3Rpb25OYW1lcyA9IChBcnJheS5pc0FycmF5KGFjdGlvbkFycmF5KSkgPyBhY3Rpb25BcnJheSA6IFthY3Rpb25BcnJheV07XG4gICAgYWN0aW9uTmFtZXMuZm9yRWFjaChhY3Rpb25Db2RlID0+IHRoaXMuZGlzYWJsZUFjdGlvbihhY3Rpb25Db2RlKSk7XG4gIH1cblxuICBnZXQgZmllbGRzKCkgeyByZXR1cm4gdGhpcy5fZmllbGRzT2JqOyB9XG5cbiAgZW5hYmxlRmllbGQoZmllbGRDb2RlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5lbmFibGUoKSA6IG51bGw7XG4gIH1cblxuICBkaXNhYmxlRmllbGQoZmllbGRDb2RlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5kaXNhYmxlKCkgOiBudWxsO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShmaWVsZENvZGUpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LmdldFZhbHVlKCkgOiBudWxsO1xuICB9XG5cbiAgZ2V0RmllbGRzVmFsdWVzKGZpZWxkQ29kZXNBcnJheSkge1xuICAgIGlmICghZmllbGRDb2Rlc0FycmF5IHx8ICFBcnJheS5pc0FycmF5KGZpZWxkQ29kZXNBcnJheSkgfHwgZmllbGRDb2Rlc0FycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdE9iamVjdCA9IHt9O1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZENvZGVzQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmaWVsZENvZGUgPSBmaWVsZENvZGVzQXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKGZpZWxkQ29kZSkge1xuICAgICAgICByZXN1bHRPYmplY3RbZmllbGRDb2RlXSA9IHRoaXMuX2ZpZWxkc09iaj8uW2ZpZWxkQ29kZV0/LmdldFZhbHVlKCkgPz8gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdE9iamVjdDtcbiAgfVxuXG4gIGdldEZpZWxkT3B0aW9ucyhmaWVsZENvZGUpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LmdldEZpZWxkT3B0aW9ucygpIDogbnVsbDtcbiAgfVxuXG4gIHNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBmaWVsZFZhbHVlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5zZXRWYWx1ZShmaWVsZFZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBzZXRGaWVsZEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUgPSAnZXJyb3InKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGNvZGUpO1xuICAgIHJldHVybiAoZmllbGRPYmplY3QpID8gZmllbGRPYmplY3Quc2V0RXJyb3IoY29kZSwgbWVzc2FnZSwgdHlwZSkgOiBudWxsO1xuICB9XG5cbiAgc2V0RmllbGRJbnRyaW5zaWNFcnJvck1lc3NhZ2UoY29kZSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZE9iamVjdChjb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LnNldEludHJpbnNpY0Vycm9yTWVzc2FnZShtZXNzYWdlKSA6IG51bGw7XG4gIH1cblxuICBzZXRGaWVsZFJlcXVpcmVkKGZpZWxkQ29kZSwgcmVxdWlyZWQpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LnJlcXVpcmVkID0gcmVxdWlyZWQgOiBudWxsO1xuICB9XG5cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoZmllbGRDb2RlLCBlcnJvck1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LnNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpIDogbnVsbDtcbiAgfVxuXG4gIHNldEZpZWxkT3B0aW9ucyhmaWVsZENvZGUsIG9wdGlvbnNBcnJheSwgaWRBdHRyaWJ1dGUsIG5hbWVBdHRyaWJ1dGUpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICBpZiAoZmllbGRPYmplY3QgJiYgb3B0aW9uc0FycmF5ICYmIG9wdGlvbnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWVsZE9wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uSXRlbSBvZiBvcHRpb25zQXJyYXkpIHtcbiAgICAgICAgY29uc3QgZmllbGRPcHRpb24gPSB7XG4gICAgICAgICAgZmllbGRPcHRpb25JZDogb3B0aW9uSXRlbVtpZEF0dHJpYnV0ZV0sXG4gICAgICAgICAgZmllbGRPcHRpb25WYWx1ZTogb3B0aW9uSXRlbVtuYW1lQXR0cmlidXRlXVxuICAgICAgICB9O1xuICAgICAgICBmaWVsZE9wdGlvbnMucHVzaChmaWVsZE9wdGlvbik7XG4gICAgICB9XG4gICAgICBmaWVsZE9iamVjdC5zZXRGaWVsZE9wdGlvbnMoZmllbGRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICBsZXQgZmllbGRVbml2ZXJzZSA9IG51bGw7XG4gICAgaWYgKGZpZWxkQXJyYXkgJiYgQXJyYXkuaXNBcnJheShmaWVsZEFycmF5KSAmJiBmaWVsZEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGZpZWxkVW5pdmVyc2UgPSBmaWVsZEFycmF5O1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbkNvZGUgJiYgIXN1YlNlY3Rpb25Db2RlKSB7XG4gICAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICAgIGZpZWxkVW5pdmVyc2UgPSBzZWN0aW9uT2JqZWN0Py5nZXRGaWVsZE5hbWVzKCk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9uQ29kZSAmJiBzdWJTZWN0aW9uQ29kZSkge1xuICAgICAgY29uc3Qgc3ViU2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICAgICAgZmllbGRVbml2ZXJzZSA9IHN1YlNlY3Rpb25PYmplY3Q/LmdldEZpZWxkTmFtZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRVbml2ZXJzZSA9IHRoaXMuZ2V0RmllbGROYW1lcygpO1xuICAgIH1cbiAgICBpZiAoIWZpbHRlckZ1bmMpIHtcbiAgICAgIHJldHVybiBmaWVsZFVuaXZlcnNlO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGRVbml2ZXJzZS5maWx0ZXIoZmxkID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZE9iamVjdChmbGQpO1xuICAgICAgcmV0dXJuIChmaWVsZE9iamVjdCAmJiBmaWx0ZXJGdW5jKGZpZWxkT2JqZWN0KSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBseVByb2Nlc3NUb0ZpZWxkU2V0KHByb2Nlc3NGdW5jLCBmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZFVuaXZlcnNlID0gdGhpcy5nZXRGaWVsZFNldChudWxsLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICAgIGxldCBmaWVsZFNldFNpemUgPSAwO1xuICAgIGlmIChmaWVsZFVuaXZlcnNlICYmIHByb2Nlc3NGdW5jKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiBmaWVsZFVuaXZlcnNlKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZE9iamVjdChmaWVsZENvZGUpO1xuICAgICAgICBpZiAoZmllbGRPYmplY3QpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvY2Vzc0Z1bmMoZmllbGRPYmplY3QpO1xuICAgICAgICAgICAgZmllbGRTZXRTaXplICs9IDE7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHByb2Nlc2FuZG8gZnVuY2lvbiBlbiBjYW1wbyAke2ZpZWxkT2JqZWN0fTogJHtlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmllbGRTZXRTaXplO1xuICB9XG5cbiAgc2hvd0ZpZWxkcyhmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseVByb2Nlc3NUb0ZpZWxkU2V0KGZsZCA9PiBmbGQuc2hvdygpLFxuICAgICAgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIGhpZGVGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLmhpZGUoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBzaG93TGFiZWxGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLnNob3dMYWJsZWwoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBoaWRlTGFiZWxGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLmhpZGVMYWJlbCgpLFxuICAgICAgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICAvLyBQYXJhIGRlcHJlY2FyXG4gIGVuYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgLy8gUGFyYSBkZXByZWNhclxuICBkaXNhYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBlbmFibGVGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLmVuYWJsZSgpLFxuICAgICAgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIGRpc2FibGVGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLmRpc2FibGUoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBjbGVhbkZpZWxkcyhmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseVByb2Nlc3NUb0ZpZWxkU2V0KGZpZWxkT2JqZWN0ID0+IHtcbiAgICAgIGZpZWxkT2JqZWN0LmNsZWFuKCcnKTtcbiAgICAgIGZpZWxkT2JqZWN0LnNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgfSwgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIGdldFJlcXVpcmVkRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZC5maWVsZFJlcXVpcmVkLCBmaWVsZEFycmF5LFxuICAgICAgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIGdldFJlcXVpcmVkRW1wdHlGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZC5maWVsZFJlcXVpcmVkICYmIGZsZC5pc0VtcHR5KCksXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiAhZmxkLm91dHB1dE9ubHkgJiYgZmxkLmhhc0NoYW5nZWQoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQuZXJyb3JDb2RlICE9PSBOT19FUlJPUixcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICB0YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseVByb2Nlc3NUb0ZpZWxkU2V0KGZpZWxkT2JqZWN0ID0+IHtcbiAgICAgIGZpZWxkT2JqZWN0LnNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpO1xuICAgIH0sIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBjbGVhbkVycm9yRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKCcnLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgdGFnRW1wdHlSZXF1aXJlZEZpZWxkcyhlcnJvck1lc3NhZ2UsIGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIGNvbnN0IHBlbmRpbmdGaWVsZHMgPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgICBpZiAocGVuZGluZ0ZpZWxkcyAmJiBwZW5kaW5nRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgcGVuZGluZ0ZpZWxkcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2xlYW5UYWJsZSh0YWJsZUNvZGUpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGVPYmplY3QodGFibGVDb2RlKTtcbiAgICByZXR1cm4gKHRhYmxlT2JqZWN0KSA/IHRhYmxlT2JqZWN0LmNsZWFuKCkgOiBudWxsO1xuICB9XG5cbiAgZ2V0VGFibGVSZWNvcmQodGFibGVDb2RlLCByZWNvcmRJZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZU9iamVjdCh0YWJsZUNvZGUpO1xuICAgIHJldHVybiAodGFibGVPYmplY3QpID8gdGFibGVPYmplY3QuZ2V0VGFibGVSZWNvcmQocmVjb3JkSWQpIDogbnVsbDtcbiAgfVxuXG4gIGhpZGVUYWJsZSh0YWJsZUNvZGUpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGVPYmplY3QodGFibGVDb2RlKTtcbiAgICByZXR1cm4gKHRhYmxlT2JqZWN0KSA/IHRhYmxlT2JqZWN0LmhpZGUoKSA6IG51bGw7XG4gIH1cblxuICBzaG93VGFibGUodGFibGVDb2RlKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlT2JqZWN0KHRhYmxlQ29kZSk7XG4gICAgcmV0dXJuICh0YWJsZU9iamVjdCkgPyB0YWJsZU9iamVjdC5zaG93KCkgOiBudWxsO1xuICB9XG5cbiAgc2hvd1RhYmxlcyh0YWJsZUFycmF5KSB7XG4gICAgY29uc3QgdGFibGVOYW1lcyA9IChBcnJheS5pc0FycmF5KHRhYmxlQXJyYXkpKSA/IHRhYmxlQXJyYXkgOiBbdGFibGVBcnJheV07XG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKHRhYmxlQ29kZSA9PiB0aGlzLnNob3dUYWJsZSh0YWJsZUNvZGUpKTtcbiAgfVxuXG4gIGhpZGVUYWJsZXModGFibGVBcnJheSkge1xuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSAoQXJyYXkuaXNBcnJheSh0YWJsZUFycmF5KSkgPyB0YWJsZUFycmF5IDogW3RhYmxlQXJyYXldO1xuICAgIHRhYmxlTmFtZXMuZm9yRWFjaCh0YWJsZUNvZGUgPT4gdGhpcy5oaWRlVGFibGUodGFibGVDb2RlKSk7XG4gIH1cblxuICAvKiogcGF5bG9hZCBwYXJhIHNlcnZpY2lvcyBUdWFpbiAqL1xuICBnZXRQYXlsb2FkKCkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIHRhYmxlczogW10sXG4gICAgfTtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICBpZiAoZm9ybUZpZWxkcyAmJiBmb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGREZXNjcmlwdG9yIG9mIGZvcm1GaWVsZHMpIHtcbiAgICAgICAgaWYgKCFmaWVsZERlc2NyaXB0b3Iub3V0cHV0T25seSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IHtcbiAgICAgICAgICAgIGZpZWxkQ29kZTogZmllbGREZXNjcmlwdG9yLmZpZWxkQ29kZSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWU6IGZpZWxkRGVzY3JpcHRvci5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZWRpdGFibGU6ICFmaWVsZERlc2NyaXB0b3IuZGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBmaWVsZERlc2NyaXB0b3IudmlzaWJsZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmaWVsZERlc2NyaXB0b3IuZmllbGRSZXF1aXJlZCxcbiAgICAgICAgICAgIGZpZWxkT3B0aW9uczogJycsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBmb3JtRGF0YS5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCk7XG4gICAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCB0YWJsZURlc2NyaXB0b3Igb2YgdGFibGVzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1UYWJsZSA9IHtcbiAgICAgICAgICB0YWJsZUNvZGU6IHRhYmxlRGVzY3JpcHRvci50YWJsZUNvZGUsXG4gICAgICAgICAgdmlzaWJsZTogdGFibGVEZXNjcmlwdG9yLnZpc2libGUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IHRhYmxlRGVzY3JpcHRvci5jdXJyZW50UGFnZSxcbiAgICAgICAgICByZXF1ZXN0ZWRQYWdlOiB0YWJsZURlc2NyaXB0b3IucmVxdWVzdGVkUGFnZSxcbiAgICAgICAgICByZWNvcmRzUGVyUGFnZTogdGFibGVEZXNjcmlwdG9yLnJlY29yZHNQZXJQYWdlLFxuICAgICAgICAgIGN1cnJlbnRGaWx0ZXI6IHRhYmxlRGVzY3JpcHRvci5jdXJyZW50RmlsdGVyLFxuICAgICAgICAgIHNvcnRpbmdDb2x1bW46IHRhYmxlRGVzY3JpcHRvci5zb3J0aW5nLmNvbHVtbk5hbWUsXG4gICAgICAgICAgc29ydGluZ0RpcmVjdGlvbjogdGFibGVEZXNjcmlwdG9yLnNvcnRpbmcuZGlyZWN0aW9uLFxuICAgICAgICB9O1xuICAgICAgICBmb3JtRGF0YS50YWJsZXMucHVzaChmb3JtVGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cbn1cbiJdfQ==
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBYXRCLE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQVksa0JBQWtCLEVBQUUsVUFBVTtRQVhsQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQiw2QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFHcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIs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QUU7WUFDL0IsS0FBSyxNQUFNLGVBQWUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFHO29CQUNoQixTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7b0JBQ3BDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztvQkFDaEMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXO29CQUN4QyxhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQWE7b0JBQzVDLGNBQWMsRUFBRSxlQUFlLENBQUMsY0FBYztvQkFDOUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO29CQUM1QyxhQUFhLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVO29CQUNqRCxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVM7aUJBQ3BELENBQUM7Z0JBQ0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY29yZEZvcm1TZWN0aW9uIH0gZnJvbSAnLi9zZWN0aW9uJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IEFDVElWRSA9ICdhY3RpdmUnO1xuY29uc3QgU0hPVyA9ICdzaG93JztcbmNvbnN0IEhJREUgPSAnaGlkZSc7XG5jb25zdCBFTkFCTEUgPSAnZW5hYmxlJztcbmNvbnN0IERJU0FCTEUgPSAnZGlzYWJsZSc7XG5jb25zdCBDTEVBTiA9ICdjbGVhbic7XG5pbnRlcmZhY2UgVHJhbnNpdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdGF0ZUZsb3cge1xuICBkZWZhdWx0U3RhdGU6IHN0cmluZztcbiAgc3RhdGVzOiBzdHJpbmdbXTtcbiAgdHJhbnNpdGlvbnM6IFRyYW5zaXRpb25bXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHtcbiAgc3RhdGU6IHN0cmluZztcbiAgX25hbWU6IHN0cmluZztcbiAgX2Zvcm1Db25maWc6IGFueTtcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3RhdGVGbG93OiBTdGF0ZUZsb3c7XG4gIHByaXZhdGUgX2ZpZWxkQXJyYXk6IEZpZWxkRGVzY3JpcHRvcltdO1xuICBwcml2YXRlIF9maWVsZHMgPSB7fTtcbiAgcHJpdmF0ZSBfYWN0aW9uQXJyYXk6IEZvcm1BY3Rpb25bXTtcbiAgcHJpdmF0ZSBfYWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFycmF5OiBSZWNvcmRUYWJsZVtdO1xuICBwcml2YXRlIF90YWJsZXMgPSB7fTtcbiAgcHJpdmF0ZSBfc2VjdGlvbkFycmF5OiBSZWNvcmRGb3JtU2VjdGlvbltdO1xuICBwcml2YXRlIF9zZWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9pbW11dGFibGVEYXRhID0ge307XG4gIHByaXZhdGUgX2V4dHJhSW5mbyA9IHt9O1xuICBwcml2YXRlIF9leGNsdXNpdmVTZWN0aW9uc0J5QXR0ciA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGRlZmluaXRpb25SZWNlaXZlZCwgZm9ybUNvbmZpZykge1xuICAgIHRoaXMuX2Zvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuICAgIHRoaXMuc3RhdGUgPSAnJztcbiAgICB0aGlzLl9hY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuX2ZpZWxkQXJyYXkgPSBbXTtcbiAgICB0aGlzLl90YWJsZUFycmF5ID0gW107XG4gICAgdGhpcy5fc2VjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5fc3RhdGVGbG93ID0ge1xuICAgICAgZGVmYXVsdFN0YXRlOiAnJyxcbiAgICAgIHN0YXRlczogW10sXG4gICAgICB0cmFuc2l0aW9uczogW10sXG4gICAgfTtcbiAgICBpZiAoIWRlZmluaXRpb25SZWNlaXZlZCkgeyByZXR1cm47IH1cbiAgICB0aGlzLl9uYW1lID0gKGRlZmluaXRpb25SZWNlaXZlZC5mb3JtICYmIGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1Db2RlKVxuICAgICAgPyBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtQ29kZSA6IHRoaXMuX25hbWU7XG4gICAgdGhpcy5fdGl0bGUgPSAoZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0gJiYgZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlKVxuICAgICAgPyBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtVGl0bGUgOiAnJztcbiAgICB0aGlzLnNldFN0YXRlRmxvdyhkZWZpbml0aW9uUmVjZWl2ZWQ/LnN0YXRlcywgZGVmaW5pdGlvblJlY2VpdmVkPy50cmFuc2l0aW9ucyxcbiAgICAgIGRlZmluaXRpb25SZWNlaXZlZD8uZGVmYXVsdFN0YXRlKTtcbiAgICB0aGlzLmltbXV0YWJsZURhdGEgPSBkZWZpbml0aW9uUmVjZWl2ZWQuaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLmV4dHJhSW5mbyA9IGRlZmluaXRpb25SZWNlaXZlZC5leHRyYUluZm87XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLmFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gZGVmaW5pdGlvblJlY2VpdmVkLmFjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLmFjdGlvbk1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IFsuLi52aXNpYmxlU3RhdGVzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBhY3Rpb25SZWNlaXZlZCBvZiBmb3JtQWN0aW9ucykge1xuICAgICAgICBjb25zdCBnbG9iYWxBY3Rpb24gPSBuZXcgRm9ybUFjdGlvbihhY3Rpb25SZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGdsb2JhbEFjdGlvbkNvZGUgPSBnbG9iYWxBY3Rpb24uYWN0aW9uQ29kZTtcbiAgICAgICAgaWYgKGdsb2JhbEFjdGlvbkNvZGUpIHtcbiAgICAgICAgICB0aGlzLl9hY3Rpb25BcnJheS5wdXNoKGdsb2JhbEFjdGlvbik7XG4gICAgICAgICAgdGhpcy5fYWN0aW9uc1tnbG9iYWxBY3Rpb25Db2RlXSA9IGdsb2JhbEFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uUmVjZWl2ZWQuZmllbGRzKSB7XG4gICAgICBjb25zdCBmb3JtRmllbGRzID0gZGVmaW5pdGlvblJlY2VpdmVkLmZpZWxkcy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgbGV0IGVuYWJsZWRTdGF0ZXMgPSBvYmpEZWYuZW5hYmxlZFN0YXRlcyB8fCBvYmpEZWYuZWRpdGFibGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLmZpZWxkTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gWy4uLnZpc2libGVTdGF0ZXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkUmVjZWl2ZWQgb2YgZm9ybUZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZFRvQWRkID0gbmV3IEZpZWxkRGVzY3JpcHRvcihmaWVsZFJlY2VpdmVkLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgY29uc3QgZmllbGRDb2RlID0gZmllbGRUb0FkZC5maWVsZENvZGU7XG4gICAgICAgIGlmIChmaWVsZENvZGUpIHtcbiAgICAgICAgICB0aGlzLl9maWVsZEFycmF5LnB1c2goZmllbGRUb0FkZCk7XG4gICAgICAgICAgdGhpcy5fZmllbGRzW2ZpZWxkQ29kZV0gPSBmaWVsZFRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMpIHtcbiAgICAgIGNvbnN0IHRhYmxlcyA9IGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXMgfHwgb2JqRGVmLmVkaXRhYmxlU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi50YWJsZU1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IFsuLi52aXNpYmxlU3RhdGVzXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMgfHwgdmlzaWJsZVN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gdGhpcy5fZm9ybUNvbmZpZy5kZWZhdWx0U3RhdGVGbG93LnN0YXRlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVJlY2VpdmVkIG9mIHRhYmxlcykge1xuICAgICAgICBjb25zdCB0YWJsZVRvQWRkID0gbmV3IFJlY29yZFRhYmxlKHRhYmxlUmVjZWl2ZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICBjb25zdCB0YWJsZUNvZGUgPSB0YWJsZVRvQWRkLnRhYmxlQ29kZTtcbiAgICAgICAgaWYgKHRhYmxlQ29kZSkge1xuICAgICAgICAgIHRoaXMuX3RhYmxlQXJyYXkucHVzaCh0YWJsZVRvQWRkKTtcbiAgICAgICAgICB0aGlzLl90YWJsZXNbdGFibGVDb2RlXSA9IHRhYmxlVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLnNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtU2VjdGlvbnMgPSBkZWZpbml0aW9uUmVjZWl2ZWQuc2VjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLnNlY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHNlY3Rpb25SZWNlaXZlZCBvZiBmb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvblRvQWRkID0gbmV3IFJlY29yZEZvcm1TZWN0aW9uKHNlY3Rpb25SZWNlaXZlZCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25Db2RlID0gc2VjdGlvblRvQWRkLnNlY3Rpb25Db2RlO1xuICAgICAgICBpZiAoc2VjdGlvbkNvZGUpIHtcbiAgICAgICAgICB0aGlzLl9zZWN0aW9uQXJyYXkucHVzaChzZWN0aW9uVG9BZGQpO1xuICAgICAgICAgIHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25Db2RlXSA9IHNlY3Rpb25Ub0FkZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRpdGxlKCkgeyByZXR1cm4gdGhpcy5fdGl0bGU7IH1cbiAgc2V0VGl0bGUodGl0bGUpIHsgdGhpcy5fdGl0bGUgPSB0aXRsZTsgfVxuICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH1cbiAgc2V0IG5hbWUobmFtZSkgeyB0aGlzLl9uYW1lID0gbmFtZTsgfVxuXG4gIC8vIEVzdGFkb3NcbiAgZ2V0IGRlZmF1bHRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuX3N0YXRlRmxvdy5kZWZhdWx0U3RhdGU7IH1cbiAgc3VwcG9ydFN0YXRlKHN0YXRlKSB7IHJldHVybiB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzPy5pbmNsdWRlcyhzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBnZXQgc3RhdGVzKCkgeyByZXR1cm4gdGhpcy5fc3RhdGVGbG93LnN0YXRlczsgfVxuXG4gIGdldEN1cnJlbnRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuc3RhdGU7IH1cblxuICBjaGFuZ2VTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGlmICghbmV3U3RhdGUgfHwgIXRoaXMuc3VwcG9ydFN0YXRlKG5ld1N0YXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJhbnNpdGlvblRvQ2hhbmdlID0gdGhpcy5fc3RhdGVGbG93LnRyYW5zaXRpb25zLmZpbmQodHJucyA9PlxuICAgICAgICB0cm5zLnNvdXJjZSA9PT0gdGhpcy5zdGF0ZSAmJiB0cm5zLmRlc3RpbmF0aW9uID09PSBuZXdTdGF0ZSk7XG4gICAgICBpZiAodHJhbnNpdGlvblRvQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlID09PSBuZXdTdGF0ZSk7XG4gIH1cblxuICBzZXRTdGF0ZUZsb3coc3RhdGVzPywgdHJhbnNpdGlvbnM/LCBkZWZhdWx0U3RhdGU/KSB7XG4gICAgaWYgKCFzdGF0ZXMgfHwgIXRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLl9zdGF0ZUZsb3cgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2Zvcm1Db25maWcuZGVmYXVsdFN0YXRlRmxvdykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzID0gc3RhdGVzO1xuICAgIHRoaXMuX3N0YXRlRmxvdy5kZWZhdWx0U3RhdGUgPSBkZWZhdWx0U3RhdGUgfHwgdGhpcy5fc3RhdGVGbG93LnN0YXRlc1swXTtcbiAgICB0aGlzLl9zdGF0ZUZsb3cudHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucy5tYXAodHJhbnNpdGlvbiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdHJhbnNpdGlvbi5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gKHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXMuaW5jbHVkZXModHJhbnNpdGlvbi5zb3VyY2UpKSA/IHRyYW5zaXRpb24uc291cmNlIDogJyc7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICh0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uZGVzdGluYXRpb24pKSA/IHRyYW5zaXRpb24uZGVzdGluYXRpb24gOiAnJztcbiAgICAgIHJldHVybiB7IG5hbWUsIHNvdXJjZSwgZGVzdGluYXRpb24gfTtcbiAgICB9KS5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgJiYgaXRlbS5zb3VyY2UgJiYgaXRlbS5kZXN0aW5hdGlvbik7XG4gIH1cblxuICAvLyBpbW11dGFibGUgRGF0YVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWUpIHsgcmV0dXJuIHRoaXMuX2ltbXV0YWJsZURhdGE/LltuYW1lXT8udmFsdWUgPz8gbnVsbDsgfVxuICBzZXQgaW1tdXRhYmxlRGF0YShpbW11dGFibGVEYXRhKSB7IE9iamVjdC5hc3NpZ24odGhpcy5faW1tdXRhYmxlRGF0YSwgaW1tdXRhYmxlRGF0YSk7IH1cbiAgZ2V0IGltbXV0YWJsZURhdGEoKSB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2ltbXV0YWJsZURhdGEpKTsgfVxuXG4gIC8vIGV4dHJhIEluZm9cbiAgZ2V0RXh0cmFJbmZvKG5hbWUpIHsgcmV0dXJuIHRoaXMuX2V4dHJhSW5mbz8uW25hbWVdPy52YWx1ZSA/PyBudWxsOyB9XG4gIHNldCBleHRyYUluZm8oZXh0cmFJbmZvKSB7IE9iamVjdC5hc3NpZ24odGhpcy5fZXh0cmFJbmZvLCBleHRyYUluZm8pOyB9XG4gIGdldCBleHRyYUluZm8oKSB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2V4dHJhSW5mbykpOyB9XG5cbiAgLy8gRmllbGRzXG4gIGdldEZpZWxkcygpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkQXJyYXk7IH1cbiAgZ2V0RmllbGROYW1lcygpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkQXJyYXkubWFwKGZpZWxkID0+IGZpZWxkLmZpZWxkQ29kZSk7IH1cbiAgZ2V0RmllbGQoZWxlbWVudElkKSB7IHJldHVybiAoZWxlbWVudElkICYmIHRoaXMuX2ZpZWxkcz8uW2VsZW1lbnRJZF0pID8gdGhpcy5fZmllbGRzW2VsZW1lbnRJZF0gOiBudWxsOyB9XG5cbiAgZ2V0IGZpZWxkcygpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkczsgfVxuXG4gIGVuYWJsZUZpZWxkKGZpZWxkQ29kZSkge1xuICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIHJldHVybiAoZmllbGRPYmplY3QpID8gZmllbGRPYmplY3QuZW5hYmxlKCkgOiBudWxsO1xuICB9XG5cbiAgZGlzYWJsZUZpZWxkKGZpZWxkQ29kZSkge1xuICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIHJldHVybiAoZmllbGRPYmplY3QpID8gZmllbGRPYmplY3QuZGlzYWJsZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldEZpZWxkVmFsdWUoZmllbGRDb2RlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5nZXRWYWx1ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldEZpZWxkc1ZhbHVlcyhmaWVsZENvZGVzQXJyYXkpIHtcbiAgICBpZiAoIWZpZWxkQ29kZXNBcnJheSB8fCAhQXJyYXkuaXNBcnJheShmaWVsZENvZGVzQXJyYXkpIHx8IGZpZWxkQ29kZXNBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmllbGRDb2Rlc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gZmllbGRDb2Rlc0FycmF5W2luZGV4XTtcbiAgICAgIGlmIChmaWVsZENvZGUpIHtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2ZpZWxkQ29kZV0gPSB0aGlzLl9maWVsZHM/LltmaWVsZENvZGVdPy5nZXRWYWx1ZSgpID8/IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRPYmplY3Q7XG4gIH1cblxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5nZXRGaWVsZE9wdGlvbnMoKSA6IG51bGw7XG4gIH1cblxuICBzZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSkge1xuICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIHJldHVybiAoZmllbGRPYmplY3QpID8gZmllbGRPYmplY3Quc2V0VmFsdWUoZmllbGRWYWx1ZSkgOiBudWxsO1xuICB9XG5cbiAgc2V0RmllbGRFcnJvcihjb2RlLCBtZXNzYWdlLCB0eXBlID0gJ2Vycm9yJykge1xuICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICByZXR1cm4gKGZpZWxkT2JqZWN0KSA/IGZpZWxkT2JqZWN0LnNldEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUpIDogbnVsbDtcbiAgfVxuXG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoY29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5zZXRJbnRyaW5zaWNFcnJvck1lc3NhZ2UobWVzc2FnZSkgOiBudWxsO1xuICB9XG5cbiAgc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5yZXF1aXJlZCA9IHJlcXVpcmVkIDogbnVsbDtcbiAgfVxuXG4gIHNldEZpZWxkRXJyb3JNZXNzYWdlKGZpZWxkQ29kZSwgZXJyb3JNZXNzYWdlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgcmV0dXJuIChmaWVsZE9iamVjdCkgPyBmaWVsZE9iamVjdC5zZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKSA6IG51bGw7XG4gIH1cblxuICBzZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgaWYgKGZpZWxkT2JqZWN0ICYmIG9wdGlvbnNBcnJheSAmJiBvcHRpb25zQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmllbGRPcHRpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbkl0ZW0gb2Ygb3B0aW9uc0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT3B0aW9uID0ge1xuICAgICAgICAgIGZpZWxkT3B0aW9uSWQ6IG9wdGlvbkl0ZW1baWRBdHRyaWJ1dGVdLFxuICAgICAgICAgIGZpZWxkT3B0aW9uVmFsdWU6IG9wdGlvbkl0ZW1bbmFtZUF0dHJpYnV0ZV1cbiAgICAgICAgfTtcbiAgICAgICAgZmllbGRPcHRpb25zLnB1c2goZmllbGRPcHRpb24pO1xuICAgICAgfVxuICAgICAgZmllbGRPYmplY3Quc2V0RmllbGRPcHRpb25zKGZpZWxkT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRTZXQoZmlsdGVyRnVuYywgZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgbGV0IGZpZWxkVW5pdmVyc2UgPSBudWxsO1xuICAgIGlmIChmaWVsZEFycmF5ICYmIEFycmF5LmlzQXJyYXkoZmllbGRBcnJheSkgJiYgZmllbGRBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWVsZFVuaXZlcnNlID0gZmllbGRBcnJheTtcbiAgICB9IGVsc2UgaWYgKHNlY3Rpb25Db2RlICYmICFzdWJTZWN0aW9uQ29kZSkge1xuICAgICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZ2V0U2VjdGlvbihzZWN0aW9uQ29kZSk7XG4gICAgICBmaWVsZFVuaXZlcnNlID0gc2VjdGlvbk9iamVjdD8uZ2V0RmllbGROYW1lcygpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbkNvZGUgJiYgc3ViU2VjdGlvbkNvZGUpIHtcbiAgICAgIGNvbnN0IHN1YlNlY3Rpb25PYmplY3QgPSB0aGlzLmdldFN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgICAgIGZpZWxkVW5pdmVyc2UgPSBzdWJTZWN0aW9uT2JqZWN0Py5nZXRGaWVsZE5hbWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkVW5pdmVyc2UgPSB0aGlzLmdldEZpZWxkTmFtZXMoKTtcbiAgICB9XG4gICAgaWYgKCFmaWx0ZXJGdW5jKSB7XG4gICAgICByZXR1cm4gZmllbGRVbml2ZXJzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkVW5pdmVyc2UuZmlsdGVyKGZsZCA9PiB7XG4gICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoZmxkKTtcbiAgICAgIHJldHVybiAoZmllbGRPYmplY3QgJiYgZmlsdGVyRnVuYyhmaWVsZE9iamVjdCkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYywgZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgY29uc3QgZmllbGRVbml2ZXJzZSA9IHRoaXMuZ2V0RmllbGRTZXQobnVsbCwgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgICBsZXQgZmllbGRTZXRTaXplID0gMDtcbiAgICBpZiAoZmllbGRVbml2ZXJzZSAmJiBwcm9jZXNzRnVuYykge1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgb2YgZmllbGRVbml2ZXJzZSkge1xuICAgICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgaWYgKGZpZWxkT2JqZWN0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2Nlc3NGdW5jKGZpZWxkT2JqZWN0KTtcbiAgICAgICAgICAgIGZpZWxkU2V0U2l6ZSArPSAxO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBwcm9jZXNhbmRvIGZ1bmNpb24gZW4gY2FtcG8gJHtmaWVsZE9iamVjdH06ICR7ZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkU2V0U2l6ZTtcbiAgfVxuXG4gIHNob3dGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmbGQgPT4gZmxkLnNob3coKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBoaWRlRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQoZmxkID0+IGZsZC5oaWRlKCksXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgc2hvd0xhYmVsRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQoZmxkID0+IGZsZC5zaG93TGFibGVsKCksXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgaGlkZUxhYmVsRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQoZmxkID0+IGZsZC5oaWRlTGFiZWwoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgLy8gUGFyYSBkZXByZWNhclxuICBlbmFibGVFZGl0RmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIC8vIFBhcmEgZGVwcmVjYXJcbiAgZGlzYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZW5hYmxlRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQoZmxkID0+IGZsZC5lbmFibGUoKSxcbiAgICAgIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBkaXNhYmxlRmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQoZmxkID0+IGZsZC5kaXNhYmxlKCksXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgY2xlYW5GaWVsZHMoZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmaWVsZE9iamVjdCA9PiB7XG4gICAgICBmaWVsZE9iamVjdC5jbGVhbignJyk7XG4gICAgICBmaWVsZE9iamVjdC5zZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIH0sIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBnZXRSZXF1aXJlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQuZmllbGRSZXF1aXJlZCwgZmllbGRBcnJheSxcbiAgICAgIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBnZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXkgPSBudWxsLCBzZWN0aW9uQ29kZSA9IG51bGwsIHN1YlNlY3Rpb25Db2RlID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQuZmllbGRSZXF1aXJlZCAmJiBmbGQuaXNFbXB0eSgpLFxuICAgICAgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIGdldENoYW5nZWRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gIWZsZC5vdXRwdXRPbmx5ICYmIGZsZC5oYXNDaGFuZ2VkKCksXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gZmxkLmVycm9yQ29kZSAhPT0gTk9fRVJST1IsXG4gICAgICBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgdGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgZmllbGRBcnJheSA9IG51bGwsIHNlY3Rpb25Db2RlID0gbnVsbCwgc3ViU2VjdGlvbkNvZGUgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChmaWVsZE9iamVjdCA9PiB7XG4gICAgICBmaWVsZE9iamVjdC5zZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICB9LCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgY2xlYW5FcnJvckZpZWxkcyhmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcignJywgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuXG4gIHRhZ0VtcHR5UmVxdWlyZWRGaWVsZHMoZXJyb3JNZXNzYWdlLCBmaWVsZEFycmF5ID0gbnVsbCwgc2VjdGlvbkNvZGUgPSBudWxsLCBzdWJTZWN0aW9uQ29kZSA9IG51bGwpIHtcbiAgICBjb25zdCBwZW5kaW5nRmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gICAgaWYgKHBlbmRpbmdGaWVsZHMgJiYgcGVuZGluZ0ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIHBlbmRpbmdGaWVsZHMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEFjY2lvbmVzXG4gIGdldCBhY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uczsgfVxuXG4gIGdldEFjdGlvbnNCeUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlKSB7IHJldHVybiB0aGlzLl9hY3Rpb25BcnJheS5maWx0ZXIoYWN0aW9uSXRlbSA9PiBhY3Rpb25JdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0QWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX2FjdGlvbkFycmF5OyB9XG4gIGdldEFjdGlvbihjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuX2FjdGlvbnM/Lltjb2RlXSkgPyB0aGlzLl9hY3Rpb25zW2NvZGVdIDogbnVsbDsgfVxuICBzaG93QWN0aW9ucyhjb2RlcykgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlQWN0aW9ucyhjb2RlcykgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBISURFKTsgfVxuICBlbmFibGVBY3Rpb25zKGNvZGVzKSB7IHJldHVybiB0aGlzLmV4ZWNPbkFjdGlvbnMoY29kZXMsIEVOQUJMRSk7IH1cbiAgZGlzYWJsZUFjdGlvbnMoY29kZXMpIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgRElTQUJMRSk7IH1cblxuICBleGVjT25BY3Rpb25zKGNvZGVzLCBmdW5jdGlvbk5hbWUpIHtcbiAgICBjb25zdCBhY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgYWN0aW9uQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIGFjdGlvbkNvZGVzLmZvckVhY2goY29kZSA9PiB7XG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmdldEFjdGlvbihjb2RlKTtcbiAgICAgIGFjdGlvbj8uW2Z1bmN0aW9uTmFtZV0/LigpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVGFibGFzXG4gIHRhYmxlcygpIHsgcmV0dXJuIHRoaXMuZ2V0VGFibGVzKCk7IH1cbiAgZ2V0VGFibGVzKCkgeyByZXR1cm4gdGhpcy5fdGFibGVBcnJheTsgfVxuICBnZXRUYWJsZShjb2RlKSB7IHJldHVybiAoY29kZSAmJiB0aGlzLl90YWJsZXM/Lltjb2RlXSkgPyB0aGlzLl90YWJsZXNbY29kZV0gOiBudWxsOyB9XG4gIGVuYWJsZVRhYmxlcyhjb2RlcykgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIEVOQUJMRSk7IH1cbiAgZGlzYWJsZVRhYmxlcyhjb2RlcykgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIERJU0FCTEUpOyB9XG4gIHNob3dUYWJsZXMoY29kZXMpIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlVGFibGVzKGNvZGVzKSB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgSElERSk7IH1cbiAgY2xlYW5UYWJsZXMoY29kZXMpIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBDTEVBTik7IH1cblxuICBleGVjT25UYWJsZXMoY29kZXMsIGZ1bmN0aW9uTmFtZSkge1xuICAgIGNvbnN0IHRhYmxlQ29kZXMgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGlmICghZnVuY3Rpb25OYW1lIHx8IHRhYmxlQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIHRhYmxlQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICAgIHRhYmxlPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUYWJsZVJlY29yZCh0YWJsZUNvZGUsIHJlY29yZElkKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgcmV0dXJuICh0YWJsZU9iamVjdCkgPyB0YWJsZU9iamVjdC5nZXRUYWJsZVJlY29yZChyZWNvcmRJZCkgOiBudWxsO1xuICB9XG5cbiAgLy8gU2VjY2lvbmVzXG4gIGdldCBzZWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX3NlY3Rpb25BcnJheTsgfVxuICBnZXRTZWN0aW9uc0J5QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tYXRjaEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOyB9XG4gIGdldCBzZWN0aW9uVGl0bGVzKCkgeyByZXR1cm4gdGhpcy5fc2VjdGlvbkFycmF5Lm1hcChmb3JtU2VjdGlvbiA9PiBmb3JtU2VjdGlvbi5zZWN0aW9uVGl0bGUpOyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQXJyYXkuZmlsdGVyKHNlYyA9PiBzZWMudmlzaWJsZSk7IH1cbiAgZ2V0U2VjdGlvbihjb2RlKSB7IHJldHVybiAoY29kZSAmJiB0aGlzLl9zZWN0aW9ucz8uW2NvZGVdKSA/IHRoaXMuX3NlY3Rpb25zW2NvZGVdIDogbnVsbDsgfVxuICBzaG93U2VjdGlvbnMobmFtZXMpIHsgdGhpcy5leGVjT25TZWN0aW9ucyhuYW1lcywgU0hPVyk7IH1cbiAgaGlkZVNlY3Rpb25zKG5hbWVzKSB7IHRoaXMuZXhlY09uU2VjdGlvbnMobmFtZXMsIEhJREUpOyB9XG4gIGFjdGl2ZVNlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdOyB9XG4gIGdldFN1YlNlY3Rpb24oY29kZSwgc3ViQ29kZSkgeyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRTdWJzZWN0aW9uKHN1YkNvZGUpID8/IG51bGw7IH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGVzKSB7IHJldHVybiB0aGlzLmV4ZWNPblN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGVzLCBTSE9XKTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMpIHsgcmV0dXJuIHRoaXMuZXhlY09uU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMsIEhJREUpOyB9XG5cbiAgYWN0aXZhdGVTZWN0aW9uKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXSkgeyByZXR1cm47IH1cbiAgICB0aGlzLmdldFNlY3Rpb24odGhpcy5hY3RpdmVTZWN0aW9uKCkpPy5pbmFjdGl2YXRlKCk7XG4gICAgdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2V4Y2x1c2l2ZVNlY3Rpb25zQnlBdHRyW0FDVElWRV0gPSBjb2RlO1xuICB9XG5cbiAgZXhlY09uU2VjdGlvbnMoY29kZXMsIGZ1bmN0aW9uTmFtZSkge1xuICAgIGNvbnN0IHNlY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgc2VjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBzZWN0aW9uQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgICBzZWN0aW9uPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjT25TdWJTZWN0aW9ucyhjb2RlLCBzdWJOYW1lcywgZnVuY3Rpb25OYW1lKSB7XG4gICAgY29uc3Qgc3ViQ29kZXMgPSAoQXJyYXkuaXNBcnJheShzdWJOYW1lcykpID8gc3ViTmFtZXMgOiAoc3ViTmFtZXMgPyBbc3ViTmFtZXNdIDogW10pO1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgIXNlY3Rpb24gfHwgc3ViQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIGZvciAoY29uc3Qgc3ViQ29kZSBvZiBzdWJDb2Rlcykge1xuICAgICAgY29uc3Qgc3ViU2VjdGlvbiA9IHRoaXMuZ2V0U3ViU2VjdGlvbihjb2RlLCBzdWJDb2RlKTtcbiAgICAgIHN1YlNlY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kb3MgcHJvcGlvcyBkZSBnZXN0acOzbiBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBjbGVhbkRhdGEoKSB7XG4gICAgaWYgKHRoaXMuX2ZpZWxkQXJyYXkpIHtcbiAgICAgIGZvciAoY29uc3QgcmVjb3JkRmllbGQgb2YgdGhpcy5fZmllbGRBcnJheSkge1xuICAgICAgICByZWNvcmRGaWVsZC5zZXRWYWx1ZShyZWNvcmRGaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fdGFibGVBcnJheSkge1xuICAgICAgZm9yIChjb25zdCBmb3JtVGFibGUgb2YgdGhpcy5fdGFibGVBcnJheSkge1xuICAgICAgICBmb3JtVGFibGUuY2xlYW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogcGF5bG9hZCBwYXJhIHNlcnZpY2lvcyBUdWFpbiAqL1xuICBnZXRQYXlsb2FkKCkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIHRhYmxlczogW10sXG4gICAgfTtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICBpZiAoZm9ybUZpZWxkcyAmJiBmb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGREZXNjcmlwdG9yIG9mIGZvcm1GaWVsZHMpIHtcbiAgICAgICAgaWYgKCFmaWVsZERlc2NyaXB0b3Iub3V0cHV0T25seSkge1xuICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IHtcbiAgICAgICAgICAgIGZpZWxkQ29kZTogZmllbGREZXNjcmlwdG9yLmZpZWxkQ29kZSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWU6IGZpZWxkRGVzY3JpcHRvci5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZWRpdGFibGU6ICFmaWVsZERlc2NyaXB0b3IuZGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBmaWVsZERlc2NyaXB0b3IudmlzaWJsZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmaWVsZERlc2NyaXB0b3IuZmllbGRSZXF1aXJlZCxcbiAgICAgICAgICAgIGZpZWxkT3B0aW9uczogJycsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBmb3JtRGF0YS5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCk7XG4gICAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCB0YWJsZURlc2NyaXB0b3Igb2YgdGFibGVzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1UYWJsZSA9IHtcbiAgICAgICAgICB0YWJsZUNvZGU6IHRhYmxlRGVzY3JpcHRvci50YWJsZUNvZGUsXG4gICAgICAgICAgdmlzaWJsZTogdGFibGVEZXNjcmlwdG9yLnZpc2libGUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IHRhYmxlRGVzY3JpcHRvci5jdXJyZW50UGFnZSxcbiAgICAgICAgICByZXF1ZXN0ZWRQYWdlOiB0YWJsZURlc2NyaXB0b3IucmVxdWVzdGVkUGFnZSxcbiAgICAgICAgICByZWNvcmRzUGVyUGFnZTogdGFibGVEZXNjcmlwdG9yLnJlY29yZHNQZXJQYWdlLFxuICAgICAgICAgIGN1cnJlbnRGaWx0ZXI6IHRhYmxlRGVzY3JpcHRvci5jdXJyZW50RmlsdGVyLFxuICAgICAgICAgIHNvcnRpbmdDb2x1bW46IHRhYmxlRGVzY3JpcHRvci5zb3J0aW5nLmNvbHVtbk5hbWUsXG4gICAgICAgICAgc29ydGluZ0RpcmVjdGlvbjogdGFibGVEZXNjcmlwdG9yLnNvcnRpbmcuZGlyZWN0aW9uLFxuICAgICAgICB9O1xuICAgICAgICBmb3JtRGF0YS50YWJsZXMucHVzaChmb3JtVGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cbn1cbiJdfQ==
|