tuain-ng-forms-lib 12.0.24 → 12.0.28

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.
@@ -1,7 +1,7 @@
1
- import { RecordFormSection } from './section';
2
1
  import { FormAction } from './action';
3
2
  import { FieldDescriptor } from './field';
4
3
  import { RecordTable } from './table/table';
4
+ import { RecordFormSection } from './section';
5
5
  import { NO_ERROR } from './form.constants';
6
6
  const ACTIVE = 'active';
7
7
  const SHOW = 'show';
@@ -173,176 +173,123 @@ export class FormStructureAndData {
173
173
  set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }
174
174
  get extraInfo() { return JSON.parse(JSON.stringify(this._extraInfo)); }
175
175
  // Fields
176
+ get fields() { return this._fields; }
177
+ get fieldNames() { return this.getFieldNames(); }
176
178
  getFields() { return this._fieldArray; }
177
179
  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; }
180
- enableField(fieldCode) {
181
- const fieldObject = this.getField(fieldCode);
182
- return (fieldObject) ? fieldObject.enable() : null;
183
- }
184
- disableField(fieldCode) {
185
- const fieldObject = this.getField(fieldCode);
186
- return (fieldObject) ? fieldObject.disable() : null;
187
- }
188
- getFieldValue(fieldCode) {
189
- const fieldObject = this.getField(fieldCode);
190
- return (fieldObject) ? fieldObject.getValue() : null;
191
- }
192
- getFieldsValues(fieldCodesArray) {
193
- var _a, _b, _c;
194
- if (!fieldCodesArray || !Array.isArray(fieldCodesArray) || fieldCodesArray.length === 0) {
195
- return null;
196
- }
197
- const resultObject = {};
198
- for (let index = 0; index < fieldCodesArray.length; index++) {
199
- const fieldCode = fieldCodesArray[index];
200
- if (fieldCode) {
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;
202
- }
180
+ getField(code) { var _a; return (code && ((_a = this._fields) === null || _a === void 0 ? void 0 : _a[code])) ? this._fields[code] : null; }
181
+ enableField(code) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.enable(); }
182
+ disableField(code) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.disable(); }
183
+ getFieldValue(code) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.getValue(); }
184
+ getFieldOptions(code) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.getFieldOptions(); }
185
+ setFieldValue(code, value) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.setValue(value); }
186
+ setFieldError(code, message, type = 'error') { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.setError(code, message, type); }
187
+ setFieldIntrinsicErrorMessage(code, message) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.setIntrinsicErrorMessage(message); }
188
+ setFieldRequired(code, required) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.setRequired(required); }
189
+ setFieldErrorMessage(code, message) { var _a; (_a = this.getField(code)) === null || _a === void 0 ? void 0 : _a.setErrorMessage(message); }
190
+ setFieldOptions(code, optionsArray, idAttribute, nameAttribute) {
191
+ const field = this.getField(code);
192
+ if (field && (optionsArray === null || optionsArray === void 0 ? void 0 : optionsArray.length) > 0) {
193
+ const fieldOptions = optionsArray.map(item => ({
194
+ fieldOptionId: item[idAttribute],
195
+ fieldOptionValue: item[nameAttribute]
196
+ }));
197
+ field.setFieldOptions(fieldOptions);
203
198
  }
204
- return resultObject;
205
- }
206
- getFieldOptions(fieldCode) {
207
- const fieldObject = this.getField(fieldCode);
208
- return (fieldObject) ? fieldObject.getFieldOptions() : null;
209
- }
210
- setFieldValue(fieldCode, fieldValue) {
211
- const fieldObject = this.getField(fieldCode);
212
- return (fieldObject) ? fieldObject.setValue(fieldValue) : null;
213
- }
214
- setFieldError(code, message, type = 'error') {
215
- const fieldObject = this.getField(code);
216
- return (fieldObject) ? fieldObject.setError(code, message, type) : null;
217
199
  }
218
- setFieldIntrinsicErrorMessage(code, message) {
219
- const fieldObject = this.getField(code);
220
- return (fieldObject) ? fieldObject.setIntrinsicErrorMessage(message) : null;
221
- }
222
- setFieldRequired(fieldCode, required) {
223
- const fieldObject = this.getField(fieldCode);
224
- return (fieldObject) ? fieldObject.required = required : null;
225
- }
226
- setFieldErrorMessage(fieldCode, errorMessage) {
227
- const fieldObject = this.getField(fieldCode);
228
- return (fieldObject) ? fieldObject.setErrorMessage(errorMessage) : null;
229
- }
230
- setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {
231
- const fieldObject = this.getField(fieldCode);
232
- if (fieldObject && optionsArray && optionsArray.length > 0) {
233
- const fieldOptions = [];
234
- for (const optionItem of optionsArray) {
235
- const fieldOption = {
236
- fieldOptionId: optionItem[idAttribute],
237
- fieldOptionValue: optionItem[nameAttribute]
238
- };
239
- fieldOptions.push(fieldOption);
240
- }
241
- fieldObject.setFieldOptions(fieldOptions);
200
+ getFieldSet(filter, inputCodes, secCode, subCode) {
201
+ var _a, _b, _c, _d;
202
+ let codes = null;
203
+ if (typeof inputCodes === 'string' && inputCodes) {
204
+ codes = [inputCodes];
242
205
  }
243
- }
244
- getFieldSet(filterFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {
245
- let fieldUniverse = null;
246
- if (fieldArray && Array.isArray(fieldArray) && fieldArray.length > 0) {
247
- fieldUniverse = fieldArray;
206
+ else if (Array.isArray(inputCodes) && inputCodes.length > 0) {
207
+ codes = inputCodes;
248
208
  }
249
- else if (sectionCode && !subSectionCode) {
250
- const sectionObject = this.getSection(sectionCode);
251
- fieldUniverse = sectionObject === null || sectionObject === void 0 ? void 0 : sectionObject.getFieldNames();
209
+ else if (secCode && !subCode) {
210
+ codes = (_b = (_a = this.getSection(secCode)) === null || _a === void 0 ? void 0 : _a.getFieldNames()) !== null && _b !== void 0 ? _b : [];
252
211
  }
253
- else if (sectionCode && subSectionCode) {
254
- const subSectionObject = this.getSubSection(sectionCode, subSectionCode);
255
- fieldUniverse = subSectionObject === null || subSectionObject === void 0 ? void 0 : subSectionObject.getFieldNames();
212
+ else if (secCode && subCode) {
213
+ codes = (_d = (_c = this.getSubSection(secCode, subCode)) === null || _c === void 0 ? void 0 : _c.getFieldNames()) !== null && _d !== void 0 ? _d : [];
256
214
  }
257
215
  else {
258
- fieldUniverse = this.getFieldNames();
216
+ codes = this.getFieldNames();
259
217
  }
260
- if (!filterFunc) {
261
- return fieldUniverse;
262
- }
263
- return fieldUniverse.filter(fld => {
264
- const fieldObject = this.getField(fld);
265
- return (fieldObject && filterFunc(fieldObject));
266
- });
218
+ return (filter) ? codes.filter(fld => filter(this.getField(fld))) : codes;
267
219
  }
268
- applyProcessToFieldSet(processFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {
269
- const fieldUniverse = this.getFieldSet(null, fieldArray, sectionCode, subSectionCode);
270
- let fieldSetSize = 0;
271
- if (fieldUniverse && processFunc) {
272
- for (const fieldCode of fieldUniverse) {
273
- const fieldObject = this.getField(fieldCode);
274
- if (fieldObject) {
275
- try {
276
- processFunc(fieldObject);
277
- fieldSetSize += 1;
278
- }
279
- catch (e) {
280
- console.log(`Error procesando funcion en campo ${fieldObject}: ${e}`);
281
- }
220
+ applyOnFields(processFunc, inputCodes, secCode, subCode) {
221
+ if (!processFunc) {
222
+ return 0;
223
+ }
224
+ const codes = this.getFieldSet(null, inputCodes, secCode, subCode);
225
+ let processedFields = 0;
226
+ for (const code of codes) {
227
+ const field = this.getField(code);
228
+ if (field) {
229
+ try {
230
+ processFunc(field);
231
+ processedFields += 1;
232
+ }
233
+ catch (e) {
234
+ console.log(`Error procesando funcion en campo ${field}: ${e}`);
282
235
  }
283
236
  }
284
237
  }
285
- return fieldSetSize;
286
- }
287
- showFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
288
- return this.applyProcessToFieldSet(fld => fld.show(), fieldArray, sectionCode, subSectionCode);
238
+ return processedFields;
289
239
  }
290
- hideFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
291
- return this.applyProcessToFieldSet(fld => fld.hide(), fieldArray, sectionCode, subSectionCode);
240
+ enableFields(codes, secCode, subCode) {
241
+ return this.applyOnFields(fld => fld.enable(), codes, secCode, subCode);
292
242
  }
293
- showLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
294
- return this.applyProcessToFieldSet(fld => fld.showLablel(), fieldArray, sectionCode, subSectionCode);
243
+ showFields(codes, secCode, subCode) {
244
+ return this.applyOnFields(fld => fld.show(), codes, secCode, subCode);
295
245
  }
296
- hideLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
297
- return this.applyProcessToFieldSet(fld => fld.hideLabel(), fieldArray, sectionCode, subSectionCode);
246
+ hideFields(codes, secCode, subCode) {
247
+ return this.applyOnFields(fld => fld.hide(), codes, secCode, subCode);
298
248
  }
299
- // Para deprecar
300
- enableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
301
- return this.enableFields(fieldArray, sectionCode, subSectionCode);
249
+ showLabelFields(codes, secCode, subCode) {
250
+ return this.applyOnFields(fld => fld.showLablel(), codes, secCode, subCode);
302
251
  }
303
- // Para deprecar
304
- disableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
305
- return this.disableFields(fieldArray, sectionCode, subSectionCode);
252
+ hideLabelFields(codes, secCode, subCode) {
253
+ return this.applyOnFields(fld => fld.hideLabel(), codes, secCode, subCode);
306
254
  }
307
- enableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
308
- return this.applyProcessToFieldSet(fld => fld.enable(), fieldArray, sectionCode, subSectionCode);
255
+ disableFields(codes, secCode, subCode) {
256
+ return this.applyOnFields(fld => fld.disable(), codes, secCode, subCode);
309
257
  }
310
- disableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
311
- return this.applyProcessToFieldSet(fld => fld.disable(), fieldArray, sectionCode, subSectionCode);
258
+ cleanFields(codes, secCode, subCode) {
259
+ return this.applyOnFields(fld => fld.clean(), codes, secCode, subCode);
312
260
  }
313
- cleanFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
314
- return this.applyProcessToFieldSet(fieldObject => {
315
- fieldObject.clean('');
316
- fieldObject.setErrorMessage('');
317
- }, fieldArray, sectionCode, subSectionCode);
261
+ tagFieldsWithError(message, codes, secCode, subCode) {
262
+ return this.applyOnFields(fld => fld.setErrorMessage(message), codes, secCode, subCode);
318
263
  }
319
- getRequiredFields(fieldArray, sectionCode = null, subSectionCode = null) {
320
- return this.getFieldSet(fld => fld.fieldRequired, fieldArray, sectionCode, subSectionCode);
264
+ cleanErrorFields(codes, secCode, subCode) {
265
+ this.tagFieldsWithError('', codes, secCode, subCode);
321
266
  }
322
- getRequiredEmptyFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
323
- return this.getFieldSet(fld => fld.fieldRequired && fld.isEmpty(), fieldArray, sectionCode, subSectionCode);
267
+ tagEmptyRequiredFields(message, codes = null, secCode, subCode) {
268
+ return this.tagFieldsWithError(message, this.getRequiredEmptyFields(codes, secCode, subCode)) > 0;
324
269
  }
325
- getChangedFields(fieldArray, sectionCode = null, subSectionCode = null) {
326
- return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(), fieldArray, sectionCode, subSectionCode);
270
+ getRequiredFields(codes, secCode, subCode) {
271
+ return this.getFieldSet(fld => fld.required, codes, secCode, subCode);
327
272
  }
328
- getFieldsWithValidationIssues(fieldArray, sectionCode = null, subSectionCode = null) {
329
- return this.getFieldSet(fld => fld.errorCode !== NO_ERROR, fieldArray, sectionCode, subSectionCode);
273
+ getRequiredEmptyFields(codes, secCode, subCode) {
274
+ return this.getFieldSet(fld => fld.required && fld.empty, codes, secCode, subCode);
330
275
  }
331
- tagFieldsWithError(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {
332
- return this.applyProcessToFieldSet(fieldObject => {
333
- fieldObject.setErrorMessage(errorMessage);
334
- }, fieldArray, sectionCode, subSectionCode);
276
+ getChangedFields(codes, secCode, subCode) {
277
+ return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(), codes, secCode, subCode);
335
278
  }
336
- cleanErrorFields(fieldArray = null, sectionCode = null, subSectionCode = null) {
337
- this.tagFieldsWithError('', fieldArray, sectionCode, subSectionCode);
279
+ getFieldsWithValidationIssues(codes, secCode, subCode) {
280
+ return this.getFieldSet(fld => fld.errorCode !== NO_ERROR, codes, secCode, subCode);
338
281
  }
339
- tagEmptyRequiredFields(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {
340
- const pendingFields = this.getRequiredEmptyFields(fieldArray, sectionCode, subSectionCode);
341
- if (pendingFields && pendingFields.length > 0) {
342
- this.tagFieldsWithError(errorMessage, pendingFields);
343
- return true;
282
+ getFieldsValues(inputCodes, secCode, subCode) {
283
+ var _a, _b, _c;
284
+ const codes = this.getFieldSet(null, inputCodes, secCode, subCode);
285
+ const resultObject = {};
286
+ for (let index = 0; index < codes.length; index++) {
287
+ const code = codes[index];
288
+ if (code) {
289
+ resultObject[code] = (_c = (_b = (_a = this._fields) === null || _a === void 0 ? void 0 : _a[code]) === null || _b === void 0 ? void 0 : _b.getValue()) !== null && _c !== void 0 ? _c : null;
290
+ }
344
291
  }
345
- return false;
292
+ return resultObject;
346
293
  }
347
294
  // Acciones
348
295
  get actions() { return this._actions; }
@@ -365,9 +312,10 @@ export class FormStructureAndData {
365
312
  });
366
313
  }
367
314
  // Tablas
368
- tables() { return this.getTables(); }
315
+ get tables() { return this.tables; }
369
316
  getTables() { return this._tableArray; }
370
317
  getTable(code) { var _a; return (code && ((_a = this._tables) === null || _a === void 0 ? void 0 : _a[code])) ? this._tables[code] : null; }
318
+ getTableRecord(code, id) { var _a; return (_a = this.getTable(code)) === null || _a === void 0 ? void 0 : _a.getTableRecord(id); }
371
319
  enableTables(codes) { return this.execOnTables(codes, ENABLE); }
372
320
  disableTables(codes) { return this.execOnTables(codes, DISABLE); }
373
321
  showTables(codes) { return this.execOnTables(codes, SHOW); }
@@ -384,18 +332,15 @@ export class FormStructureAndData {
384
332
  (_a = table === null || table === void 0 ? void 0 : table[functionName]) === null || _a === void 0 ? void 0 : _a.call(table);
385
333
  });
386
334
  }
387
- getTableRecord(tableCode, recordId) {
388
- const tableObject = this.getTable(tableCode);
389
- return (tableObject) ? tableObject.getTableRecord(recordId) : null;
390
- }
391
335
  // Secciones
392
336
  get sections() { return this._sectionArray; }
337
+ getSections() { return this.sections; }
393
338
  getSectionsByAttribute(name, value) { return this._sectionArray.filter(item => item.matchAttribute(name, value)); }
394
339
  get sectionTitles() { return this._sectionArray.map(formSection => formSection.sectionTitle); }
395
340
  get visibleSections() { return this._sectionArray.filter(sec => sec.visible); }
396
341
  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); }
342
+ showSections(codes) { this.execOnSections(codes, SHOW); }
343
+ hideSections(codes) { this.execOnSections(codes, HIDE); }
399
344
  activeSection() { return this._exclusiveSectionsByAttr[ACTIVE]; }
400
345
  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
346
  showSubSections(code, subCodes) { return this.execOnSubSections(code, subCodes, SHOW); }
@@ -436,56 +381,44 @@ export class FormStructureAndData {
436
381
  * Métodos propios de gestión del formulario
437
382
  */
438
383
  cleanData() {
439
- if (this._fieldArray) {
440
- for (const recordField of this._fieldArray) {
441
- recordField.setValue(recordField.defaultValue);
442
- }
384
+ for (const field of this._fieldArray) {
385
+ field.setValue(field.defaultValue);
443
386
  }
444
- if (this._tableArray) {
445
- for (const formTable of this._tableArray) {
446
- formTable.clean();
447
- }
387
+ for (const table of this._tableArray) {
388
+ table.clean();
448
389
  }
449
390
  }
450
- /** payload para servicios Tuain */
451
391
  getPayload() {
452
392
  const formData = {
453
393
  fields: [],
454
394
  tables: [],
455
395
  };
456
- const formFields = this.getFields();
457
- if (formFields && formFields.length > 0) {
458
- for (const fieldDescriptor of formFields) {
459
- if (!fieldDescriptor.outputOnly) {
460
- const formField = {
461
- fieldCode: fieldDescriptor.fieldCode,
462
- fieldValue: fieldDescriptor.getValue(),
463
- editable: !fieldDescriptor.disabled,
464
- visible: fieldDescriptor.visible,
465
- required: fieldDescriptor.fieldRequired,
466
- fieldOptions: '',
467
- };
468
- formData.fields.push(formField);
469
- }
470
- }
471
- }
472
- const tables = this.getTables();
473
- if (tables && tables.length > 0) {
474
- for (const tableDescriptor of tables) {
475
- const formTable = {
476
- tableCode: tableDescriptor.tableCode,
477
- visible: tableDescriptor.visible,
478
- currentPage: tableDescriptor.currentPage,
479
- requestedPage: tableDescriptor.requestedPage,
480
- recordsPerPage: tableDescriptor.recordsPerPage,
481
- currentFilter: tableDescriptor.currentFilter,
482
- sortingColumn: tableDescriptor.sorting.columnName,
483
- sortingDirection: tableDescriptor.sorting.direction,
484
- };
485
- formData.tables.push(formTable);
486
- }
487
- }
396
+ formData.fields = this.getFields().filter(fld => !fld.outputOnly)
397
+ .map(fld => {
398
+ const fieldPayload = {
399
+ fieldCode: fld.fieldCode,
400
+ fieldValue: fld.getValue(),
401
+ editable: !fld.disabled,
402
+ visible: fld.visible,
403
+ required: fld.required,
404
+ fieldOptions: '',
405
+ };
406
+ return fieldPayload;
407
+ });
408
+ formData.tables = this.getTables().map(tbl => {
409
+ const tablePayload = {
410
+ tableCode: tbl.tableCode,
411
+ visible: tbl.visible,
412
+ currentPage: tbl.currentPage,
413
+ requestedPage: tbl.requestedPage,
414
+ recordsPerPage: tbl.recordsPerPage,
415
+ currentFilter: tbl.currentFilter,
416
+ sortingColumn: tbl.sorting.columnName,
417
+ sortingDirection: tbl.sorting.direction,
418
+ };
419
+ return tablePayload;
420
+ });
488
421
  return formData;
489
422
  }
490
423
  }
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBYXRCLE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQVksa0JBQWtCLEVBQUUsVUFBVTtRQVhsQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQiw2QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFHcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMxRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLGFBQWxCLGtCQUFrQix1QkFBbEIsa0JBQWtCLENBQUUsTUFBTSxFQUFFLGtCQUFrQixhQUFsQixrQkFBa0IsdUJBQWxCLGtCQUFrQixDQUFFLFdBQVcsRUFDM0Usa0JBQWtCLGFBQWxCLGtCQUFrQix1QkFBbEIsa0JBQWtCLENBQUUsWUFBWSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUM7UUFFOUMsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7WUFDOUIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDekMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDbEIsYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO3lCQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMzQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO2lCQUNwQztnQkFDRCx1Q0FBWSxNQUFNLEtBQUUsYUFBYSxFQUFFLGFBQWEsSUFBRztZQUNyRCxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssTUFBTSxjQUFjLElBQUksV0FBVyxFQUFFO2dCQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsWUFBWSxDQUFDO2lCQUNoRDthQUNGO1NBQ0Y7UUFFRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUM3QixNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUN6QyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDakQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsdUNBQVksTUFBTSxLQUFFLGFBQWEsRUFBRSxhQUFhLElBQUc7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sYUFBYSxJQUFJLFVBQVUsRUFBRTtnQkFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUN0QzthQUNGO1NBQ0Y7UUFFRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUM3QixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUN6QyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDakQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDaEQsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2lCQUMxRDtnQkFDRCx1Q0FBWSxNQUFNLEtBQUUsYUFBYSxFQUFFLGFBQWEsSUFBRztZQUNyRCxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssTUFBTSxhQUFhLElBQUksTUFBTSxFQUFFO2dCQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUN2QyxJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQ3RDO2FBQ0Y7U0FDRjtRQUVELElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQy9CLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVELElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDNUM7Z0JBQ0QsdUNBQVksTUFBTSxLQUFFLGFBQWEsSUFBRztZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssTUFBTSxlQUFlLElBQUksWUFBWSxFQUFFO2dCQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztnQkFDN0MsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDO2lCQUM1QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJDLFVBQVU7SUFDVixJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLENBQUMsS0FBSyxZQUFJLE9BQU8sTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sMENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxXQUFXLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFL0MsZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFeEMsV0FBVyxDQUFDLFFBQVE7UUFDbEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7U0FDdkI7YUFBTTtZQUNMLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2pFLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQU8sRUFBRSxXQUFZLEVBQUUsWUFBYTtRQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6RCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsbUJBQW1CLENBQUMsSUFBSSxvQkFBSSxPQUFPLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFHLElBQUksQ0FBQywwQ0FBRSxLQUFLLG1DQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEYsSUFBSSxhQUFhLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9FLGFBQWE7SUFDYixZQUFZLENBQUMsSUFBSSxvQkFBSSxPQUFPLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFHLElBQUksQ0FBQywwQ0FBRSxLQUFLLG1DQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZFLFNBQVM7SUFDVCxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4QyxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxDQUFDLFNBQVMsWUFBSSxPQUFPLENBQUMsU0FBUyxLQUFJLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUcsU0FBUyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXpHLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFckMsV0FBVyxDQUFDLFNBQVM7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFZLENBQUMsU0FBUztRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFTO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2RCxDQUFDO0lBRUQsZUFBZSxDQUFDLGVBQWU7O1FBQzdCLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksU0FBUyxFQUFFO2dCQUNiLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRyxTQUFTLENBQUMsMENBQUUsUUFBUSxFQUFFLG1DQUFJLElBQUksQ0FBQzthQUN6RTtTQUNGO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFTO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBRyxPQUFPO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxDQUFDO0lBRUQsNkJBQTZCLENBQUMsSUFBSSxFQUFFLE9BQU87UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFlBQVk7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWE7UUFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxJQUFJLFdBQVcsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLEtBQUssTUFBTSxVQUFVLElBQUksWUFBWSxFQUFFO2dCQUNyQyxNQUFNLFdBQVcsR0FBRztvQkFDbEIsYUFBYSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUM7b0JBQ3RDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUM7aUJBQzVDLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNoQztZQUNELFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDbEYsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEUsYUFBYSxHQUFHLFVBQVUsQ0FBQztTQUM1QjthQUFNLElBQUksV0FBVyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkQsYUFBYSxHQUFHLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxhQUFhLEVBQUUsQ0FBQztTQUNoRDthQUFNLElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRTtZQUN4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3pFLGFBQWEsR0FBRyxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxhQUFhLEVBQUUsQ0FBQztTQUNuRDthQUFNO1lBQ0wsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPLGFBQWEsQ0FBQztTQUN0QjtRQUNELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxjQUFjLEdBQUcsSUFBSTtRQUM5RixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLGFBQWEsSUFBSSxXQUFXLEVBQUU7WUFDaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxhQUFhLEVBQUU7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLElBQUksV0FBVyxFQUFFO29CQUNmLElBQUk7d0JBQ0YsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUN6QixZQUFZLElBQUksQ0FBQyxDQUFDO3FCQUNuQjtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDdkU7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDckUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQ2xELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDckUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQ2xELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQ3hELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQ3ZELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGdCQUFnQjtJQUNoQixnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDM0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELGdCQUFnQjtJQUNoQixpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDNUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDdkUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQ3BELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDeEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQ3JELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDdEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxjQUFjLEdBQUcsSUFBSTtRQUNyRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFDMUQsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDakYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQy9ELFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQVUsRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLGNBQWMsR0FBRyxJQUFJO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQ2hFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELDZCQUE2QixDQUFDLFVBQVUsRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLGNBQWMsR0FBRyxJQUFJO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUN2RCxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLGNBQWMsR0FBRyxJQUFJO1FBQzNGLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9DLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxjQUFjLEdBQUcsSUFBSTtRQUMzRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELHNCQUFzQixDQUFDLFlBQVksRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDL0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0YsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFdkMscUJBQXFCLENBQUMsSUFBWSxFQUFFLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDMUMsU0FBUyxDQUFDLElBQVksWUFBSSxPQUFPLENBQUMsSUFBSSxLQUFJLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUcsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLFdBQVcsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsV0FBVyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxhQUFhLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGNBQWMsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZO1FBQy9CLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQzFELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7O1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUcsWUFBWSxDQUFDLCtDQUF0QixNQUFNLENBQW9CLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztJQUNULE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsUUFBUSxDQUFDLElBQUksWUFBSSxPQUFPLENBQUMsSUFBSSxLQUFJLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUcsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLFlBQVksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsYUFBYSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxVQUFVLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELFVBQVUsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVk7UUFDOUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRyxZQUFZLENBQUMsK0NBQXJCLEtBQUssQ0FBb0IsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVE7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRUQsWUFBWTtJQUNaLElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDN0Msc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkgsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsVUFBVSxDQUFDLElBQUksWUFBSSxPQUFPLENBQUMsSUFBSSxLQUFJLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUcsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNGLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLGdCQUFJLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsbUNBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RixlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4RixlQUFlLENBQUMsSUFBSTs7UUFDbEIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQy9ELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsMENBQUUsVUFBVSxFQUFFLENBQUM7UUFDcEQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBSyxFQUFFLFlBQVk7UUFDaEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDM0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRyxZQUFZLENBQUMsK0NBQXZCLE9BQU8sQ0FBb0IsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVk7O1FBQzVDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDbkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUcsWUFBWSxDQUFDLCtDQUExQixVQUFVLENBQW9CLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFFSCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxVQUFVO1FBQ1IsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxLQUFLLE1BQU0sZUFBZSxJQUFJLFVBQVUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUU7b0JBQy9CLE1BQU0sU0FBUyxHQUFHO3dCQUNoQixTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7d0JBQ3BDLFVBQVUsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO3dCQUN0QyxRQUFRLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUTt3QkFDbkMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO3dCQUNoQyxRQUFRLEVBQUUsZUFBZSxDQUFDLGFBQWE7d0JBQ3ZDLFlBQVksRUFBRSxFQUFFO3FCQUNqQixDQUFDO29CQUNGLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsS0FBSyxNQUFNLGVBQWUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFHO29CQUNoQixTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7b0JBQ3BDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztvQkFDaEMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXO29CQUN4QyxhQUFhLEVBQUUsZUFBZSxDQUFDLGFBQWE7b0JBQzVDLGNBQWMsRUFBRSxlQUFlLENBQUMsY0FBYztvQkFDOUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO29CQUM1QyxhQUFhLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVO29CQUNqRCxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVM7aUJBQ3BELENBQUM7Z0JBQ0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY29yZEZvcm1TZWN0aW9uIH0gZnJvbSAnLi9zZWN0aW9uJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IEFDVElWRSA9ICdhY3RpdmUnO1xuY29uc3QgU0hPVyA9ICdzaG93JztcbmNvbnN0IEhJREUgPSAnaGlkZSc7XG5jb25zdCBFTkFCTEUgPSAnZW5hYmxlJztcbmNvbnN0IERJU0FCTEUgPSAnZGlzYWJsZSc7XG5jb25zdCBDTEVBTiA9ICdjbGVhbic7XG5pbnRlcmZhY2UgVHJhbnNpdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdGF0ZUZsb3cge1xuICBkZWZhdWx0U3RhdGU6IHN0cmluZztcbiAgc3RhdGVzOiBzdHJpbmdbXTtcbiAgdHJhbnNpdGlvbnM6IFRyYW5zaXRpb25bXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHtcbiAgc3RhdGU6IHN0cmluZztcbiAgX25hbWU6IHN0cmluZztcbiAgX2Zvcm1Db25maWc6IGFueTtcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3RhdGVGbG93OiBTdGF0ZUZsb3c7XG4gIHByaXZhdGUgX2ZpZWxkQXJyYXk6IEZpZWxkRGVzY3JpcHRvcltdO1xuICBwcml2YXRlIF9maWVsZHMgPSB7fTtcbiAgcHJpdmF0ZSBfYWN0aW9uQXJyYXk6IEZvcm1BY3Rpb25bXTtcbiAgcHJpdmF0ZSBfYWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFycmF5OiBSZWNvcmRUYWJsZVtdO1xuICBwcml2YXRlIF90YWJsZXMgPSB7fTtcbiAgcHJpdmF0ZSBfc2VjdGlvbkFycmF5OiBSZWNvcmRGb3JtU2VjdGlvbltdO1xuICBwcml2YXRlIF9zZWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9pbW11dGFibGVEYXRhID0ge307XG4gIHByaXZhdGUgX2V4dHJhSW5mbyA9IHt9O1xuICBwcml2YXRlIF9leGNsdXNpdmVTZWN0aW9uc0J5QXR0ciA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGRlZmluaXRpb25SZWNlaXZlZCwgZm9ybUNvbmZpZykge1xuICAgIHRoaXMuX2Zvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuICAgIHRoaXMuc3RhdGUgPSAnJztcbiAgICB0aGlzLl9hY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuX2ZpZWxkQXJyYXkgPSBbXTtcbiAgICB0aGlzLl90YWJsZUFycmF5ID0gW107XG4gICAgdGhpcy5fc2VjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5fc3RhdGVGbG93ID0ge1xuICAgICAgZGVmYXVsdFN0YXRlOiAnJyxcbiAgICAgIHN0YXRlczogW10sXG4gICAgICB0cmFuc2l0aW9uczogW10sXG4gICAgfTtcbiAgICBpZiAoIWRlZmluaXRpb25SZWNlaXZlZCkgeyByZXR1cm47IH1cbiAgICB0aGlzLl9uYW1lID0gKGRlZmluaXRpb25SZWNlaXZlZC5mb3JtICYmIGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1Db2RlKVxuICAgICAgPyBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtQ29kZSA6IHRoaXMuX25hbWU7XG4gICAgdGhpcy5fdGl0bGUgPSAoZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0gJiYgZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlKVxuICAgICAgPyBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtVGl0bGUgOiAnJztcbiAgICB0aGlzLnNldFN0YXRlRmxvdyhkZWZpbml0aW9uUmVjZWl2ZWQ/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==
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN4QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBc0N0QixNQUFNLE9BQU8sb0JBQW9CO0lBa0IvQixZQUFZLGtCQUFrQixFQUFFLFVBQVU7UUFYbEMsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBR3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxFQUFFLEVBQUU7WUFDVixXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RSxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixhQUFsQixrQkFBa0IsdUJBQWxCLGtCQUFrQixDQUFFLE1BQU0sRUFBRSxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxXQUFXLEVBQzNFLGtCQUFrQixhQUFsQixrQkFBa0IsdUJBQWxCLGtCQUFrQixDQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDO1FBRTlDLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO1lBQzlCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFELElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDbEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsdUNBQVksTUFBTSxLQUFFLGFBQWEsRUFBRSxhQUFhLElBQUc7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sY0FBYyxJQUFJLFdBQVcsRUFBRTtnQkFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxJQUFJLGdCQUFnQixFQUFFO29CQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDaEQ7YUFDRjtTQUNGO1FBRUQsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDeEQsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDekMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7eUJBQ2pELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzNDLGFBQWEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELHVDQUFZLE1BQU0sS0FBRSxhQUFhLEVBQUUsYUFBYSxJQUFHO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxNQUFNLGFBQWEsSUFBSSxVQUFVLEVBQUU7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZDLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDdEM7YUFDRjtTQUNGO1FBRUQsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDekMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7eUJBQ2pELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzNDLGFBQWEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ2hELGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztpQkFDMUQ7Z0JBQ0QsdUNBQVksTUFBTSxLQUFFLGFBQWEsRUFBRSxhQUFhLElBQUc7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sYUFBYSxJQUFJLE1BQU0sRUFBRTtnQkFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUN0QzthQUNGO1NBQ0Y7UUFFRCxJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUMvQixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7eUJBQ25ELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzVDO2dCQUNELHVDQUFZLE1BQU0sS0FBRSxhQUFhLElBQUc7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sZUFBZSxJQUFJLFlBQVksRUFBRTtnQkFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7Z0JBQzdDLElBQUksV0FBVyxFQUFFO29CQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDNUM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVEsS0FBYSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVyQyxVQUFVO0lBQ1YsSUFBSSxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkUsWUFBWSxDQUFDLEtBQWEsWUFBSSxPQUFPLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLDBDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsV0FBVyxDQUFDLEtBQWEsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksTUFBTSxLQUFZLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXRELGVBQWUsS0FBYSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRWhELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN2QjthQUFNO1lBQ0wsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDakUsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDL0QsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7YUFDdkI7U0FDRjtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTyxFQUFFLFdBQVksRUFBRSxZQUFxQjtRQUN2RCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6RCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsbUJBQW1CLENBQUMsSUFBWSxvQkFBSSxPQUFPLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFHLElBQUksQ0FBQywwQ0FBRSxLQUFLLG1DQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEYsSUFBSSxhQUFhLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9FLGFBQWE7SUFDYixZQUFZLENBQUMsSUFBWSxvQkFBSSxPQUFPLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFHLElBQUksQ0FBQywwQ0FBRSxLQUFLLG1DQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZFLFNBQVM7SUFDVCxJQUFJLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksVUFBVSxLQUFlLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxTQUFTLEtBQXdCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsYUFBYSxLQUFlLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLFFBQVEsQ0FBQyxJQUFZLFlBQXFCLE9BQU8sQ0FBQyxJQUFJLEtBQUksTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUcsV0FBVyxDQUFDLElBQVksWUFBVSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLENBQUMsSUFBWSxZQUFJLE1BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMENBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELGFBQWEsQ0FBQyxJQUFZLFlBQVMsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsZUFBZSxDQUFDLElBQVksWUFBSSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxhQUFhLENBQUMsSUFBWSxFQUFFLEtBQVUsWUFBSSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsYUFBYSxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsT0FBZSxPQUFPLFlBQUksTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQ0FBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUgsNkJBQTZCLENBQUMsSUFBWSxFQUFFLE9BQWUsWUFBSSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsUUFBaUIsWUFBSSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsb0JBQW9CLENBQUMsSUFBWSxFQUFFLE9BQWUsWUFBSSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDBDQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEcsZUFBZSxDQUFDLElBQVksRUFBRSxZQUFtQixFQUFFLFdBQW1CLEVBQUUsYUFBcUI7UUFDM0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNKLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUE2QixFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7O1FBQ25GLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDaEQsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEI7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0QsS0FBSyxHQUFHLFVBQVUsQ0FBQztTQUNwQjthQUFNLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLEtBQUssR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsMENBQUUsYUFBYSxFQUFFLG1DQUFJLEVBQUUsQ0FBQztTQUN6RDthQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtZQUM3QixLQUFLLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQywwQ0FBRSxhQUFhLEVBQUUsbUNBQUksRUFBRSxDQUFDO1NBQ3JFO2FBQU07WUFDTCxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDNUUsQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFXLEVBQUUsVUFBOEIsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQzNGLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQztTQUFFO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSTtvQkFDRixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLGVBQWUsSUFBSSxDQUFDLENBQUM7aUJBQ3RCO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTthQUNGO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN4RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN0RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN0RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN2RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN2RixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUM1RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7UUFDOUUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUF5QixFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7UUFDN0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUF5QixFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUM1RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELDZCQUE2QixDQUFDLEtBQXlCLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN6RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBOEIsRUFBRSxPQUFnQixFQUFFLE9BQWdCOztRQUNoRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFHLElBQUksQ0FBQywwQ0FBRSxRQUFRLEVBQUUsbUNBQUksSUFBSSxDQUFDO2FBQy9EO1NBQ0Y7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFdkMscUJBQXFCLENBQUMsSUFBWSxFQUFFLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDMUMsU0FBUyxDQUFDLElBQVksWUFBSSxPQUFPLENBQUMsSUFBSSxLQUFJLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUcsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLFdBQVcsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLFdBQVcsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLGFBQWEsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLGNBQWMsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZGLGFBQWEsQ0FBQyxLQUF3QixFQUFFLFlBQW9CO1FBQzFELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQzFELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7O1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUcsWUFBWSxDQUFDLCtDQUF0QixNQUFNLENBQW9CLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztJQUNULElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEMsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsUUFBUSxDQUFDLElBQVksWUFBSSxPQUFPLENBQUMsSUFBSSxLQUFJLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUcsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGLGNBQWMsQ0FBQyxJQUFZLEVBQUUsRUFBVSxZQUFJLE9BQU8sTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQ0FBRSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRTNGLFlBQVksQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25GLGFBQWEsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLFVBQVUsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9FLFVBQVUsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9FLFdBQVcsQ0FBQyxLQUF3QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpGLFlBQVksQ0FBQyxLQUF3QixFQUFFLFlBQW9CO1FBQ3pELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3pELFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7O1lBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUcsWUFBWSxDQUFDLCtDQUFyQixLQUFLLENBQW9CLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtJQUNaLElBQUksUUFBUSxLQUEwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLFdBQVcsS0FBMEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUF5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEksSUFBSSxhQUFhLEtBQWUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekcsSUFBSSxlQUFlLEtBQTBCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLFVBQVUsQ0FBQyxJQUFZLFlBQXVCLE9BQU8sQ0FBQyxJQUFJLEtBQUksTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEgsWUFBWSxDQUFDLEtBQXdCLElBQVUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLFlBQVksQ0FBQyxLQUF3QixJQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixhQUFhLEtBQWEsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBTyxnQkFBMEIsT0FBTyxNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMENBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQ0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVILGVBQWUsQ0FBQyxJQUFZLEVBQUUsUUFBMkIsSUFBVSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxlQUFlLENBQUMsSUFBWSxFQUFFLFFBQTJCLElBQVUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekgsZUFBZSxDQUFDLElBQVk7O1FBQzFCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMvRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLDBDQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3BELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMENBQUUsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXdCLEVBQUUsWUFBb0I7UUFDM0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDM0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRyxZQUFZLENBQUMsK0NBQXZCLE9BQU8sQ0FBb0IsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsUUFBMkIsRUFBRSxZQUFvQjs7UUFDL0UsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUNuRSxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRyxZQUFZLENBQUMsK0NBQTFCLFVBQVUsQ0FBb0IsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUVILFNBQVM7UUFDUCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEM7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sUUFBUSxHQUFnQjtZQUM1QixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUM5RCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxNQUFNLFlBQVksR0FBaUI7Z0JBQ2pDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztnQkFDeEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFCLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87Z0JBQ3BCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtnQkFDdEIsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQTtZQUNELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUwsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLE1BQU0sWUFBWSxHQUFpQjtnQkFDakMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO2dCQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87Z0JBQ3BCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztnQkFDNUIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2dCQUNoQyxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWM7Z0JBQ2xDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtnQkFDaEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVTtnQkFDckMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTO2FBQ3hDLENBQUM7WUFDRixPQUFPLFlBQVksQ0FBQTtRQUNyQixDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4vc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4vc3Vic2VjdGlvbic7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IEFDVElWRSA9ICdhY3RpdmUnO1xuY29uc3QgU0hPVyA9ICdzaG93JztcbmNvbnN0IEhJREUgPSAnaGlkZSc7XG5jb25zdCBFTkFCTEUgPSAnZW5hYmxlJztcbmNvbnN0IERJU0FCTEUgPSAnZGlzYWJsZSc7XG5jb25zdCBDTEVBTiA9ICdjbGVhbic7XG5pbnRlcmZhY2UgVHJhbnNpdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdGF0ZUZsb3cge1xuICBkZWZhdWx0U3RhdGU6IHN0cmluZztcbiAgc3RhdGVzOiBzdHJpbmdbXTtcbiAgdHJhbnNpdGlvbnM6IFRyYW5zaXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZFBheWxvYWQge1xuICBmaWVsZENvZGU6IHN0cmluZztcbiAgZmllbGRWYWx1ZTogYW55O1xuICBlZGl0YWJsZTogYm9vbGVhbjtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGZpZWxkT3B0aW9uczogc3RyaW5nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUGF5bG9hZCB7XG4gIHRhYmxlQ29kZTogc3RyaW5nO1xuICB2aXNpYmxlOiBib29sZWFuO1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICByZXF1ZXN0ZWRQYWdlOiBudW1iZXI7XG4gIHJlY29yZHNQZXJQYWdlOiBudW1iZXI7XG4gIGN1cnJlbnRGaWx0ZXI6IGFueSxcbiAgc29ydGluZ0NvbHVtbjogc3RyaW5nO1xuICBzb3J0aW5nRGlyZWN0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBGb3JtUGF5bG9hZCB7XG4gIGZpZWxkczogRmllbGRQYXlsb2FkW10sXG4gIHRhYmxlczogVGFibGVQYXlsb2FkW10sXG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtU3RydWN0dXJlQW5kRGF0YSB7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIF9uYW1lOiBzdHJpbmc7XG4gIF9mb3JtQ29uZmlnOiBhbnk7XG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmc7XG4gIHByaXZhdGUgX3N0YXRlRmxvdzogU3RhdGVGbG93O1xuICBwcml2YXRlIF9maWVsZEFycmF5OiBGaWVsZERlc2NyaXB0b3JbXTtcbiAgcHJpdmF0ZSBfZmllbGRzID0ge307XG4gIHByaXZhdGUgX2FjdGlvbkFycmF5OiBGb3JtQWN0aW9uW107XG4gIHByaXZhdGUgX2FjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBcnJheTogUmVjb3JkVGFibGVbXTtcbiAgcHJpdmF0ZSBfdGFibGVzID0ge307XG4gIHByaXZhdGUgX3NlY3Rpb25BcnJheTogUmVjb3JkRm9ybVNlY3Rpb25bXTtcbiAgcHJpdmF0ZSBfc2VjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfaW1tdXRhYmxlRGF0YSA9IHt9O1xuICBwcml2YXRlIF9leHRyYUluZm8gPSB7fTtcbiAgcHJpdmF0ZSBfZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHIgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uUmVjZWl2ZWQsIGZvcm1Db25maWcpIHtcbiAgICB0aGlzLl9mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgICB0aGlzLnN0YXRlID0gJyc7XG4gICAgdGhpcy5fYWN0aW9uQXJyYXkgPSBbXTtcbiAgICB0aGlzLl9maWVsZEFycmF5ID0gW107XG4gICAgdGhpcy5fdGFibGVBcnJheSA9IFtdO1xuICAgIHRoaXMuX3NlY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuX3N0YXRlRmxvdyA9IHtcbiAgICAgIGRlZmF1bHRTdGF0ZTogJycsXG4gICAgICBzdGF0ZXM6IFtdLFxuICAgICAgdHJhbnNpdGlvbnM6IFtdLFxuICAgIH07XG4gICAgaWYgKCFkZWZpbml0aW9uUmVjZWl2ZWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5fbmFtZSA9IChkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybSAmJiBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtQ29kZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybUNvZGUgOiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX3RpdGxlID0gKGRlZmluaXRpb25SZWNlaXZlZC5mb3JtICYmIGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1UaXRsZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlIDogJyc7XG4gICAgdGhpcy5zZXRTdGF0ZUZsb3coZGVmaW5pdGlvblJlY2VpdmVkPy5zdGF0ZXMsIGRlZmluaXRpb25SZWNlaXZlZD8udHJhbnNpdGlvbnMsXG4gICAgICBkZWZpbml0aW9uUmVjZWl2ZWQ/LmRlZmF1bHRTdGF0ZSk7XG4gICAgdGhpcy5pbW11dGFibGVEYXRhID0gZGVmaW5pdGlvblJlY2VpdmVkLmltbXV0YWJsZURhdGE7XG4gICAgdGhpcy5leHRyYUluZm8gPSBkZWZpbml0aW9uUmVjZWl2ZWQuZXh0cmFJbmZvO1xuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5hY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSBbLi4udmlzaWJsZVN0YXRlc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uUmVjZWl2ZWQgb2YgZm9ybUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQWN0aW9uID0gbmV3IEZvcm1BY3Rpb24oYWN0aW9uUmVjZWl2ZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICBjb25zdCBnbG9iYWxBY3Rpb25Db2RlID0gZ2xvYmFsQWN0aW9uLmFjdGlvbkNvZGU7XG4gICAgICAgIGlmIChnbG9iYWxBY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aW9uQXJyYXkucHVzaChnbG9iYWxBY3Rpb24pO1xuICAgICAgICAgIHRoaXMuX2FjdGlvbnNbZ2xvYmFsQWN0aW9uQ29kZV0gPSBnbG9iYWxBY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IGRlZmluaXRpb25SZWNlaXZlZC5maWVsZHMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXMgfHwgb2JqRGVmLmVkaXRhYmxlU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5maWVsZE1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IFsuLi52aXNpYmxlU3RhdGVzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBmaWVsZFJlY2VpdmVkIG9mIGZvcm1GaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRUb0FkZCA9IG5ldyBGaWVsZERlc2NyaXB0b3IoZmllbGRSZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGZpZWxkVG9BZGQuZmllbGRDb2RlO1xuICAgICAgICBpZiAoZmllbGRDb2RlKSB7XG4gICAgICAgICAgdGhpcy5fZmllbGRBcnJheS5wdXNoKGZpZWxkVG9BZGQpO1xuICAgICAgICAgIHRoaXMuX2ZpZWxkc1tmaWVsZENvZGVdID0gZmllbGRUb0FkZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uUmVjZWl2ZWQudGFibGVzKSB7XG4gICAgICBjb25zdCB0YWJsZXMgPSBkZWZpbml0aW9uUmVjZWl2ZWQudGFibGVzLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzIHx8IG9iakRlZi5lZGl0YWJsZVN0YXRlcztcbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IChvYmpEZWYudGFibGVNb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSBbLi4udmlzaWJsZVN0YXRlc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzIHx8IHZpc2libGVTdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IHRoaXMuX2Zvcm1Db25maWcuZGVmYXVsdFN0YXRlRmxvdy5zdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVSZWNlaXZlZCBvZiB0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVUb0FkZCA9IG5ldyBSZWNvcmRUYWJsZSh0YWJsZVJlY2VpdmVkLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgY29uc3QgdGFibGVDb2RlID0gdGFibGVUb0FkZC50YWJsZUNvZGU7XG4gICAgICAgIGlmICh0YWJsZUNvZGUpIHtcbiAgICAgICAgICB0aGlzLl90YWJsZUFycmF5LnB1c2godGFibGVUb0FkZCk7XG4gICAgICAgICAgdGhpcy5fdGFibGVzW3RhYmxlQ29kZV0gPSB0YWJsZVRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5zZWN0aW9ucykge1xuICAgICAgY29uc3QgZm9ybVNlY3Rpb25zID0gZGVmaW5pdGlvblJlY2VpdmVkLnNlY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5zZWN0aW9uTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uUmVjZWl2ZWQgb2YgZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25Ub0FkZCA9IG5ldyBSZWNvcmRGb3JtU2VjdGlvbihzZWN0aW9uUmVjZWl2ZWQsIHRoaXMpO1xuICAgICAgICBjb25zdCBzZWN0aW9uQ29kZSA9IHNlY3Rpb25Ub0FkZC5zZWN0aW9uQ29kZTtcbiAgICAgICAgaWYgKHNlY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5fc2VjdGlvbkFycmF5LnB1c2goc2VjdGlvblRvQWRkKTtcbiAgICAgICAgICB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uQ29kZV0gPSBzZWN0aW9uVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUaXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdGl0bGU7IH1cbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZykgeyB0aGlzLl90aXRsZSA9IHRpdGxlOyB9XG4gIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfVxuICBzZXQgbmFtZShuYW1lKSB7IHRoaXMuX25hbWUgPSBuYW1lOyB9XG5cbiAgLy8gRXN0YWRvc1xuICBnZXQgZGVmYXVsdFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9zdGF0ZUZsb3cuZGVmYXVsdFN0YXRlOyB9XG4gIHN1cHBvcnRTdGF0ZShzdGF0ZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzPy5pbmNsdWRlcyhzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG4gIGdldCBzdGF0ZXMoKTogYW55W10geyByZXR1cm4gdGhpcy5fc3RhdGVGbG93LnN0YXRlczsgfVxuXG4gIGdldEN1cnJlbnRTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZTsgfVxuXG4gIGNoYW5nZVN0YXRlKG5ld1N0YXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoIW5ld1N0YXRlIHx8ICF0aGlzLnN1cHBvcnRTdGF0ZShuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25Ub0NoYW5nZSA9IHRoaXMuX3N0YXRlRmxvdy50cmFuc2l0aW9ucy5maW5kKHRybnMgPT5cbiAgICAgICAgdHJucy5zb3VyY2UgPT09IHRoaXMuc3RhdGUgJiYgdHJucy5kZXN0aW5hdGlvbiA9PT0gbmV3U3RhdGUpO1xuICAgICAgaWYgKHRyYW5zaXRpb25Ub0NoYW5nZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5zdGF0ZSA9PT0gbmV3U3RhdGUpO1xuICB9XG5cbiAgc2V0U3RhdGVGbG93KHN0YXRlcz8sIHRyYW5zaXRpb25zPywgZGVmYXVsdFN0YXRlPzogc3RyaW5nKSB7XG4gICAgaWYgKCFzdGF0ZXMgfHwgIXRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLl9zdGF0ZUZsb3cgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2Zvcm1Db25maWcuZGVmYXVsdFN0YXRlRmxvdykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzID0gc3RhdGVzO1xuICAgIHRoaXMuX3N0YXRlRmxvdy5kZWZhdWx0U3RhdGUgPSBkZWZhdWx0U3RhdGUgfHwgdGhpcy5fc3RhdGVGbG93LnN0YXRlc1swXTtcbiAgICB0aGlzLl9zdGF0ZUZsb3cudHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucy5tYXAodHJhbnNpdGlvbiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdHJhbnNpdGlvbi5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gKHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXMuaW5jbHVkZXModHJhbnNpdGlvbi5zb3VyY2UpKSA/IHRyYW5zaXRpb24uc291cmNlIDogJyc7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICh0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uZGVzdGluYXRpb24pKSA/IHRyYW5zaXRpb24uZGVzdGluYXRpb24gOiAnJztcbiAgICAgIHJldHVybiB7IG5hbWUsIHNvdXJjZSwgZGVzdGluYXRpb24gfTtcbiAgICB9KS5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgJiYgaXRlbS5zb3VyY2UgJiYgaXRlbS5kZXN0aW5hdGlvbik7XG4gIH1cblxuICAvLyBpbW11dGFibGUgRGF0YVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5faW1tdXRhYmxlRGF0YT8uW25hbWVdPy52YWx1ZSA/PyBudWxsOyB9XG4gIHNldCBpbW11dGFibGVEYXRhKGltbXV0YWJsZURhdGEpIHsgT2JqZWN0LmFzc2lnbih0aGlzLl9pbW11dGFibGVEYXRhLCBpbW11dGFibGVEYXRhKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpIHsgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5faW1tdXRhYmxlRGF0YSkpOyB9XG5cbiAgLy8gZXh0cmEgSW5mb1xuICBnZXRFeHRyYUluZm8obmFtZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9leHRyYUluZm8/LltuYW1lXT8udmFsdWUgPz8gbnVsbDsgfVxuICBzZXQgZXh0cmFJbmZvKGV4dHJhSW5mbykgeyBPYmplY3QuYXNzaWduKHRoaXMuX2V4dHJhSW5mbywgZXh0cmFJbmZvKTsgfVxuICBnZXQgZXh0cmFJbmZvKCkgeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9leHRyYUluZm8pKTsgfVxuXG4gIC8vIEZpZWxkc1xuICBnZXQgZmllbGRzKCkgeyByZXR1cm4gdGhpcy5fZmllbGRzOyB9XG4gIGdldCBmaWVsZE5hbWVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuZ2V0RmllbGROYW1lcygpOyB9XG4gIGdldEZpZWxkcygpOiBGaWVsZERlc2NyaXB0b3JbXSB7IHJldHVybiB0aGlzLl9maWVsZEFycmF5OyB9XG4gIGdldEZpZWxkTmFtZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5fZmllbGRBcnJheS5tYXAoZmllbGQgPT4gZmllbGQuZmllbGRDb2RlKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpOiBGaWVsZERlc2NyaXB0b3IgeyByZXR1cm4gKGNvZGUgJiYgdGhpcy5fZmllbGRzPy5bY29kZV0pID8gdGhpcy5fZmllbGRzW2NvZGVdIDogbnVsbDsgfVxuICBlbmFibGVGaWVsZChjb2RlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uZW5hYmxlKCk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5kaXNhYmxlKCk7IH1cbiAgZ2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5nZXRWYWx1ZSgpOyB9XG4gIGdldEZpZWxkT3B0aW9ucyhjb2RlOiBzdHJpbmcpIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uZ2V0RmllbGRPcHRpb25zKCk7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0VmFsdWUodmFsdWUpOyB9XG4gIHNldEZpZWxkRXJyb3IoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdlcnJvcicpIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0RXJyb3IoY29kZSwgbWVzc2FnZSwgdHlwZSk7IH1cbiAgc2V0RmllbGRJbnRyaW5zaWNFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0SW50cmluc2ljRXJyb3JNZXNzYWdlKG1lc3NhZ2UpOyB9XG4gIHNldEZpZWxkUmVxdWlyZWQoY29kZTogc3RyaW5nLCByZXF1aXJlZDogYm9vbGVhbikgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRSZXF1aXJlZChyZXF1aXJlZCk7IH1cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOyB9XG5cbiAgc2V0RmllbGRPcHRpb25zKGNvZGU6IHN0cmluZywgb3B0aW9uc0FycmF5OiBhbnlbXSwgaWRBdHRyaWJ1dGU6IHN0cmluZywgbmFtZUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgIGlmIChmaWVsZCAmJiBvcHRpb25zQXJyYXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpZWxkT3B0aW9ucyA9IG9wdGlvbnNBcnJheS5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBmaWVsZE9wdGlvbklkOiBpdGVtW2lkQXR0cmlidXRlXSxcbiAgICAgICAgZmllbGRPcHRpb25WYWx1ZTogaXRlbVtuYW1lQXR0cmlidXRlXVxuICAgICAgfSkpO1xuICAgICAgZmllbGQuc2V0RmllbGRPcHRpb25zKGZpZWxkT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRTZXQoZmlsdGVyLCBpbnB1dENvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIGxldCBjb2RlcyA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBpbnB1dENvZGVzID09PSAnc3RyaW5nJyAmJiBpbnB1dENvZGVzKSB7XG4gICAgICBjb2RlcyA9IFtpbnB1dENvZGVzXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXRDb2RlcykgJiYgaW5wdXRDb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2RlcyA9IGlucHV0Q29kZXM7XG4gICAgfSBlbHNlIGlmIChzZWNDb2RlICYmICFzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U2VjdGlvbihzZWNDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSBpZiAoc2VjQ29kZSAmJiBzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U3ViU2VjdGlvbihzZWNDb2RlLCBzdWJDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0RmllbGROYW1lcygpO1xuICAgIH1cbiAgICByZXR1cm4gKGZpbHRlcikgPyBjb2Rlcy5maWx0ZXIoZmxkID0+IGZpbHRlcih0aGlzLmdldEZpZWxkKGZsZCkpKSA6IGNvZGVzO1xuICB9XG5cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgaW5wdXRDb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoIXByb2Nlc3NGdW5jKSB7IHJldHVybiAwOyB9XG4gICAgY29uc3QgY29kZXMgPSB0aGlzLmdldEZpZWxkU2V0KG51bGwsIGlucHV0Q29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICAgIGxldCBwcm9jZXNzZWRGaWVsZHMgPSAwO1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBjb2Rlcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvY2Vzc0Z1bmMoZmllbGQpO1xuICAgICAgICAgIHByb2Nlc3NlZEZpZWxkcyArPSAxO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHByb2Nlc2FuZG8gZnVuY2lvbiBlbiBjYW1wbyAke2ZpZWxkfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzZWRGaWVsZHM7XG4gIH1cblxuICBlbmFibGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZC5lbmFibGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgc2hvd0ZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkLnNob3coKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgaGlkZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkLmhpZGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgc2hvd0xhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQuc2hvd0xhYmxlbCgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBoaWRlTGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZC5oaWRlTGFiZWwoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZGlzYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkLmRpc2FibGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgY2xlYW5GaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZC5jbGVhbigpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICB0YWdGaWVsZHNXaXRoRXJyb3IobWVzc2FnZSwgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZC5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGNsZWFuRXJyb3JGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKCcnLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICB0YWdFbXB0eVJlcXVpcmVkRmllbGRzKG1lc3NhZ2UsIGNvZGVzID0gbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihtZXNzYWdlLCB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpKSA+IDA7XG4gIH1cblxuICBnZXRSZXF1aXJlZEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZC5yZXF1aXJlZCwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZC5yZXF1aXJlZCAmJiBmbGQuZW1wdHksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGdldENoYW5nZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiAhZmxkLm91dHB1dE9ubHkgJiYgZmxkLmhhc0NoYW5nZWQoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQuZXJyb3JDb2RlICE9PSBOT19FUlJPUiwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzVmFsdWVzKGlucHV0Q29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRGaWVsZFNldChudWxsLCBpbnB1dENvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29kZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gY29kZXNbaW5kZXhdO1xuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2NvZGVdID0gdGhpcy5fZmllbGRzPy5bY29kZV0/LmdldFZhbHVlKCkgPz8gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdE9iamVjdDtcbiAgfVxuXG4gIC8vIEFjY2lvbmVzXG4gIGdldCBhY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uczsgfVxuXG4gIGdldEFjdGlvbnNCeUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlKSB7IHJldHVybiB0aGlzLl9hY3Rpb25BcnJheS5maWx0ZXIoYWN0aW9uSXRlbSA9PiBhY3Rpb25JdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0QWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX2FjdGlvbkFycmF5OyB9XG4gIGdldEFjdGlvbihjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuX2FjdGlvbnM/Lltjb2RlXSkgPyB0aGlzLl9hY3Rpb25zW2NvZGVdIDogbnVsbDsgfVxuICBzaG93QWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgU0hPVyk7IH1cbiAgaGlkZUFjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHJldHVybiB0aGlzLmV4ZWNPbkFjdGlvbnMoY29kZXMsIEhJREUpOyB9XG4gIGVuYWJsZUFjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHJldHVybiB0aGlzLmV4ZWNPbkFjdGlvbnMoY29kZXMsIEVOQUJMRSk7IH1cbiAgZGlzYWJsZUFjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHJldHVybiB0aGlzLmV4ZWNPbkFjdGlvbnMoY29kZXMsIERJU0FCTEUpOyB9XG5cbiAgZXhlY09uQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uQ29kZXMgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGlmICghZnVuY3Rpb25OYW1lIHx8IGFjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBhY3Rpb25Db2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5nZXRBY3Rpb24oY29kZSk7XG4gICAgICBhY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRhYmxhc1xuICBnZXQgdGFibGVzKCkgeyByZXR1cm4gdGhpcy50YWJsZXM7IH1cbiAgZ2V0VGFibGVzKCkgeyByZXR1cm4gdGhpcy5fdGFibGVBcnJheTsgfVxuICBnZXRUYWJsZShjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuX3RhYmxlcz8uW2NvZGVdKSA/IHRoaXMuX3RhYmxlc1tjb2RlXSA6IG51bGw7IH1cbiAgZ2V0VGFibGVSZWNvcmQoY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7IHJldHVybiB0aGlzLmdldFRhYmxlKGNvZGUpPy5nZXRUYWJsZVJlY29yZChpZCkgfVxuXG4gIGVuYWJsZVRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBFTkFCTEUpOyB9XG4gIGRpc2FibGVUYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgRElTQUJMRSk7IH1cbiAgc2hvd1RhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIEhJREUpOyB9XG4gIGNsZWFuVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIENMRUFOKTsgfVxuXG4gIGV4ZWNPblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgdGFibGVDb2Rlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgdGFibGVDb2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgICAgdGFibGU/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNlY2Npb25lc1xuICBnZXQgc2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQXJyYXk7IH1cbiAgZ2V0U2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLnNlY3Rpb25zOyB9XG4gIGdldFNlY3Rpb25zQnlBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHsgcmV0dXJuIHRoaXMuX3NlY3Rpb25BcnJheS5maWx0ZXIoaXRlbSA9PiBpdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0IHNlY3Rpb25UaXRsZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5fc2VjdGlvbkFycmF5Lm1hcChmb3JtU2VjdGlvbiA9PiBmb3JtU2VjdGlvbi5zZWN0aW9uVGl0bGUpOyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQXJyYXkuZmlsdGVyKHNlYyA9PiBzZWMudmlzaWJsZSk7IH1cbiAgZ2V0U2VjdGlvbihjb2RlOiBzdHJpbmcpOiBSZWNvcmRGb3JtU2VjdGlvbiB7IHJldHVybiAoY29kZSAmJiB0aGlzLl9zZWN0aW9ucz8uW2NvZGVdKSA/IHRoaXMuX3NlY3Rpb25zW2NvZGVdIDogbnVsbDsgfVxuICBzaG93U2VjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHRoaXMuZXhlY09uU2VjdGlvbnMoY29kZXMsIFNIT1cpOyB9XG4gIGhpZGVTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgdGhpcy5leGVjT25TZWN0aW9ucyhjb2RlcywgSElERSk7IH1cbiAgYWN0aXZlU2VjdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXTsgfVxuICBnZXRTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZSk6IFJlY29yZEZvcm1TdWJTZWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKT8uZ2V0U3Vic2VjdGlvbihzdWJDb2RlKSA/PyBudWxsOyB9XG4gIHNob3dTdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1YkNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25TdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlcywgU0hPVyk7IH1cbiAgaGlkZVN1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGVzLCBISURFKTsgfVxuXG4gIGFjdGl2YXRlU2VjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoY29kZSA9PT0gdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXSkgeyByZXR1cm47IH1cbiAgICB0aGlzLmdldFNlY3Rpb24odGhpcy5hY3RpdmVTZWN0aW9uKCkpPy5pbmFjdGl2YXRlKCk7XG4gICAgdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2V4Y2x1c2l2ZVNlY3Rpb25zQnlBdHRyW0FDVElWRV0gPSBjb2RlO1xuICB9XG5cbiAgZXhlY09uU2VjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgc2VjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBzZWN0aW9uQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgICBzZWN0aW9uPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjT25TdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1Yk5hbWVzOiBzdHJpbmdbXSB8IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdWJDb2RlcyA9IChBcnJheS5pc0FycmF5KHN1Yk5hbWVzKSkgPyBzdWJOYW1lcyA6IChzdWJOYW1lcyA/IFtzdWJOYW1lc10gOiBbXSk7XG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSB8fCAhc2VjdGlvbiB8fCBzdWJDb2Rlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgZm9yIChjb25zdCBzdWJDb2RlIG9mIHN1YkNvZGVzKSB7XG4gICAgICBjb25zdCBzdWJTZWN0aW9uID0gdGhpcy5nZXRTdWJTZWN0aW9uKGNvZGUsIHN1YkNvZGUpO1xuICAgICAgc3ViU2VjdGlvbj8uW2Z1bmN0aW9uTmFtZV0/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvcyBwcm9waW9zIGRlIGdlc3Rpw7NuIGRlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGNsZWFuRGF0YSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuX2ZpZWxkQXJyYXkpIHtcbiAgICAgIGZpZWxkLnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGhpcy5fdGFibGVBcnJheSkge1xuICAgICAgdGFibGUuY2xlYW4oKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXlsb2FkKCk6IGFueSB7XG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1QYXlsb2FkID0ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIHRhYmxlczogW10sXG4gICAgfTtcbiAgICBmb3JtRGF0YS5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpLmZpbHRlcihmbGQgPT4gIWZsZC5vdXRwdXRPbmx5KVxuICAgICAgLm1hcChmbGQgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFBheWxvYWQ6IEZpZWxkUGF5bG9hZCA9IHtcbiAgICAgICAgICBmaWVsZENvZGU6IGZsZC5maWVsZENvZGUsXG4gICAgICAgICAgZmllbGRWYWx1ZTogZmxkLmdldFZhbHVlKCksXG4gICAgICAgICAgZWRpdGFibGU6ICFmbGQuZGlzYWJsZWQsXG4gICAgICAgICAgdmlzaWJsZTogZmxkLnZpc2libGUsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZsZC5yZXF1aXJlZCxcbiAgICAgICAgICBmaWVsZE9wdGlvbnM6ICcnLFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWVsZFBheWxvYWQ7XG4gICAgICB9KTtcblxuICAgIGZvcm1EYXRhLnRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCkubWFwKHRibCA9PiB7XG4gICAgICBjb25zdCB0YWJsZVBheWxvYWQ6IFRhYmxlUGF5bG9hZCA9IHtcbiAgICAgICAgdGFibGVDb2RlOiB0YmwudGFibGVDb2RlLFxuICAgICAgICB2aXNpYmxlOiB0YmwudmlzaWJsZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IHRibC5jdXJyZW50UGFnZSxcbiAgICAgICAgcmVxdWVzdGVkUGFnZTogdGJsLnJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHJlY29yZHNQZXJQYWdlOiB0YmwucmVjb3Jkc1BlclBhZ2UsXG4gICAgICAgIGN1cnJlbnRGaWx0ZXI6IHRibC5jdXJyZW50RmlsdGVyLFxuICAgICAgICBzb3J0aW5nQ29sdW1uOiB0Ymwuc29ydGluZy5jb2x1bW5OYW1lLFxuICAgICAgICBzb3J0aW5nRGlyZWN0aW9uOiB0Ymwuc29ydGluZy5kaXJlY3Rpb24sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRhYmxlUGF5bG9hZFxuICAgIH0pXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG59XG4iXX0=