@wemake4u/form-player-se 1.0.36 → 1.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/THIRD_PARTY_LICENSES.txt +73 -0
  4. package/esm2022/lib/directives/date.directive.mjs +3 -3
  5. package/esm2022/lib/directives/datetime.directive.mjs +199 -0
  6. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +5 -3
  7. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +31 -7
  8. package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +15 -3
  9. package/esm2022/lib/services/compute.service.mjs +6 -2
  10. package/esm2022/lib/services/disable.service.mjs +7 -5
  11. package/esm2022/lib/services/feel.service.mjs +24 -1
  12. package/esm2022/lib/services/programmability.service.mjs +8 -1
  13. package/esm2022/lib/services/sanitize.service.mjs +2 -2
  14. package/esm2022/lib/services/validation.service.mjs +9 -2
  15. package/esm2022/lib/utils/date.mjs +59 -0
  16. package/esm2022/lib/utils/string.mjs +6 -0
  17. package/fesm2022/wemake4u-form-player-se.mjs +353 -19
  18. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  19. package/lib/directives/date.directive.d.ts +2 -0
  20. package/lib/directives/datetime.directive.d.ts +42 -0
  21. package/lib/dynamic-form/dynamic-form.component.d.ts +4 -0
  22. package/lib/dynamic-host/dynamic-host.component.d.ts +1 -0
  23. package/lib/services/compute.service.d.ts +1 -0
  24. package/lib/services/disable.service.d.ts +1 -1
  25. package/lib/services/feel.service.d.ts +2 -0
  26. package/lib/services/programmability.service.d.ts +1 -0
  27. package/lib/services/validation.service.d.ts +1 -0
  28. package/lib/utils/date.d.ts +6 -0
  29. package/lib/utils/string.d.ts +1 -0
  30. package/package.json +2 -1
@@ -223,6 +223,7 @@ export class DynamicFormComponent {
223
223
  if (this.initialized)
224
224
  this.initialized.emit(this.formGroup);
225
225
  this.registerHandlers();
226
+ this.assignActivaNav();
226
227
  }
227
228
  onChangeValue() {
228
229
  try {
@@ -242,6 +243,12 @@ export class DynamicFormComponent {
242
243
  this.suspendValueChanges = false;
243
244
  this.emitValueChange();
244
245
  }
246
+ this.assignActivaNav();
247
+ }
248
+ assignActivaNav() {
249
+ if (!this.isFormActivable(this._activeNav)) {
250
+ this._activeNav = this.getNextFrom(-1);
251
+ }
245
252
  }
246
253
  suspendValueChanges = false;
247
254
  registerHandlers() {
@@ -284,10 +291,13 @@ export class DynamicFormComponent {
284
291
  }
285
292
  }
286
293
  getNext() {
287
- let index = this.activeNav + 1;
294
+ return this.getNextFrom(this.activeNav);
295
+ }
296
+ getNextFrom(from) {
297
+ let index = from + 1;
288
298
  const max = this.getMaxNav();
289
299
  while (index < max) {
290
- if (!this.isDisabled(index) && !this.isInactive(index)) {
300
+ if (this.isFormActivable(index)) {
291
301
  return index;
292
302
  }
293
303
  index++;
@@ -295,9 +305,12 @@ export class DynamicFormComponent {
295
305
  return -1;
296
306
  }
297
307
  getPrevious() {
298
- let index = this.activeNav - 1;
308
+ return this.getPreviousFrom(this.activeNav);
309
+ }
310
+ getPreviousFrom(from) {
311
+ let index = from - 1;
299
312
  while (index >= 0) {
300
- if (!this.isDisabled(index) && !this.isInactive(index)) {
313
+ if (this.isFormActivable(index)) {
301
314
  return index;
302
315
  }
303
316
  index--;
@@ -308,6 +321,12 @@ export class DynamicFormComponent {
308
321
  return this._forms.length ?? 0;
309
322
  }
310
323
  ;
324
+ isFormActivable(index) {
325
+ return index >= 0
326
+ && index < this.getMaxNav()
327
+ && !this.isDisabled(index)
328
+ && !this.isInactive(index);
329
+ }
311
330
  isDisabled(index) {
312
331
  var form = this._forms[index];
313
332
  if (!form)
@@ -375,10 +394,10 @@ export class DynamicFormComponent {
375
394
  };
376
395
  const control = formBuilder.control(defaultValue, options);
377
396
  currentGroup.addControl(component.key, control);
397
+ this.validationService.addToCollection(validationCollection, control, currentGroup, component);
378
398
  this.statusService.addToCollection(statusCollection, control);
379
399
  this.disableService.addToCollection(disableCollection, control, formGroup, component);
380
400
  this.computeService.addToCollection(computeCollection, control, formGroup, component);
381
- this.validationService.addToCollection(validationCollection, control, currentGroup, component);
382
401
  this.eventService.addToCollection(eventCollection, control, currentGroup, component);
383
402
  }
384
403
  }
@@ -405,13 +424,18 @@ export class DynamicFormComponent {
405
424
  else if (this.isComponentWithInput(component)) {
406
425
  const currentGroup = this.applyPath(this.fb, formGroup, component.path);
407
426
  if (currentGroup.contains(component.key)) {
408
- this.statusService.addToCollection(statusCollection, currentGroup.get(component.key));
427
+ const control = currentGroup.get(component.key);
428
+ this.validationService.addToCollection(validationCollection, control, currentGroup, component);
429
+ this.statusService.addToCollection(statusCollection, control);
430
+ this.disableService.addToCollection(disableCollection, control, currentGroup, component);
409
431
  return;
410
432
  }
411
433
  else {
412
434
  const control = formBuilder.control(null);
413
435
  currentGroup.addControl(component.key, control);
436
+ this.validationService.addToCollection(validationCollection, control, currentGroup, component);
414
437
  this.statusService.addToCollection(statusCollection, control);
438
+ this.disableService.addToCollection(disableCollection, control, currentGroup, component);
415
439
  }
416
440
  }
417
441
  });
@@ -668,4 +692,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
668
692
  }], activeNav: [{
669
693
  type: Input
670
694
  }] } });
671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFFOUMsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUNQLGlCQUFpQixFQUFFLFlBQVksRUFDOUMsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWUsU0FBUyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQXNCLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakcsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0s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O2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDZSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBOEVoQixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vdHlwZXMvdHlwaW5ncy5kLnRzXCIgLz5cclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSBcclxuICAsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uLCBFdmVudEVtaXR0ZXJcclxuICAsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5qZWN0b3JcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2xPcHRpb25zLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciwgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UsIFZhbGlkYXRpb25Db2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzYWJsZVNlcnZpY2UsIERpc2FibGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvZGlzYWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdHVzU2VydmljZSwgU3RhdHVzQ29sbGVjdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXR1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBFdmVudENvbGxlY3Rpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0ZVNlcnZpY2UsIENvbXB1dGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ3JvdXBCeVJvdyB9IGZyb20gJy4uL3V0aWxzL2dyb3VwQnlSb3cnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mdW5jdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRm9ybURpYWxvZ09wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNGaWVsZHNDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWZpZWxkcy9keW5hbWljLWZpZWxkcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIFNpcmlvU2lkZW5hdk1vYmlsZUNvbXBvbmVudCwgU2lyaW9TaWRlbmF2Q29tcG9uZW50LCBTaXJpb1NpZGVuYXZJdGVtQ29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NCYXJDb21wb25lbnQsIFNpcmlvU3RlcHBlclByb2dyZXNzSXRlbUNvbXBvbmVudFxyXG4gICwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NTdGF0dXMsIE5neFNpcmlvRXZlbnRcclxufSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtSW5kZXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvcm1JbmRleC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUb0JvdW5kQXJyb3dzIH0gZnJvbSAnLi4vdXRpbHMvYm91bmQnO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbCB9IGZyb20gJy4uL2NvbnRyb2xzL2NvbnRyb2wnOyBcclxuaW1wb3J0IHsgc2V0Rm9jdXMgfSBmcm9tICcuLi91dGlscy9mb2N1c2FibGUnO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuLi9zaGFyZWQvYm9vdHN0cmFwLWdyaWQuc2NzcycsXHJcbiAgICAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LmNzcydcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgRm9ybUluZGV4RGlyZWN0aXZlXHJcbiAgICAsIFNpcmlvU2lkZW5hdk1vYmlsZUNvbXBvbmVudCwgU2lyaW9TaWRlbmF2Q29tcG9uZW50LCBTaXJpb1NpZGVuYXZJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1N0ZXBwZXJQcm9ncmVzc0JhckNvbXBvbmVudCwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NJdGVtQ29tcG9uZW50XHJcbiAgICAsIER5bmFtaWNGaWVsZHNDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBWYWxpZGF0aW9uU2VydmljZVxyXG4gICAgLCBEaXNhYmxlU2VydmljZVxyXG4gICAgLCBDb21wdXRlU2VydmljZVxyXG4gICAgLCBTdGF0dXNTZXJ2aWNlXHJcbiAgICAsIEV2ZW50U2VydmljZVxyXG4gICAgLCBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgTWV0YWRhdGFTZXJ2aWNlXHJcbiAgICAsIEZ1bmN0aW9uU2VydmljZVxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuICBASW5wdXQoKSBzY2hlbWE6IGFueTtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSB2YWx1ZTogYW55ID0ge307XHJcbiAgQElucHV0KCkgc3RyaWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd05hdjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05hdkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1Byb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0Zvcm1UaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2dyZXNzU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcclxuICBAT3V0cHV0KCkgYWN0aXZlTmF2Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdCcpIGZvcm1EaXYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBkaXNhYmxlU2VydmljZTogRGlzYWJsZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBjb21wdXRlU2VydmljZTogQ29tcHV0ZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBzdGF0dXNTZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2U6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgdGhpcy5wcm9ncmFtbWFiaWxpdHkuYWRkRXZhbHVhdG9yUHJvdmlkZXJzKHRoaXMpO1xyXG4gIH1cclxuICBcclxuICBUZXh0cyA9IFRleHRzO1xyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJIYW5kbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydzY2hlbWEnXSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlU2NoZW1hKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgIXRoaXMuaXNFbWl0dGVkVmFsdWUodGhpcy52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0IGZvcm1zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zO1xyXG4gIH1cclxuXHJcbiAgbG9jYWxlKGNvbXBvbmVudDogYW55LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxpemUodGhpcy5sYW5ndWFnZSwgY29tcG9uZW50LCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgY2FuUHJldmlvdXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcmV2aW91cygpICE9IC0xOyBcclxuICB9XHJcblxyXG4gIGdvUHJldmlvdXMoKSB7XHJcbiAgICBpZiAodGhpcy5jYW5QcmV2aW91cygpKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTmF2ID0gdGhpcy5nZXRQcmV2aW91cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuTmV4dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldE5leHQoKSAhPSAtMTsgICAgXHJcbiAgfVxyXG5cclxuICBnb05leHQoKSB7XHJcbiAgICBpZiAodGhpcy5jYW5OZXh0KCkpIHsgXHJcbiAgICAgIHRoaXMuYWN0aXZlTmF2ID0gdGhpcy5nZXROZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sKG5hbWU6IHN0cmluZyk6IENvbnRyb2wgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyU2VydmljZS5nZXRDb250cm9sKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbEFzPFQgZXh0ZW5kcyBDb250cm9sPihuYW1lOiBzdHJpbmcsIHR5cGU6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlclNlcnZpY2UuZ2V0Q29udHJvbEFzKG5hbWUsIHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdGl2ZU5hdigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5hdjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFjdGl2ZU5hdih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8IHRoaXMuZ2V0TWF4TmF2KCkpIHtcclxuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh2YWx1ZSkgfHwgdGhpcy5pc0luYWN0aXZlKHZhbHVlKSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIHRoaXMuX2FjdGl2ZU5hdiA9IHZhbHVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtRGl2Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICBzZXRGb2N1cyh0aGlzLmZvcm1EaXYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlTmF2Q2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlTmF2KTtcclxuICAgICAgfSk7XHJcbiAgICB9ICAgICAgICBcclxuICB9XHJcblxyXG4gIGdldEZvcm1Hcm91cChwYXRoOiBzdHJpbmcgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBwYXRoID8gdGhpcy5mb3JtR3JvdXAuZ2V0KHBhdGgpIDogdGhpcy5mb3JtR3JvdXA7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUdyb3VwJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldEZvcm1TdGF0dXMoZm9ybTogYW55LCBpbmRleDogbnVtYmVyKTogU2lyaW9TdGVwcGVyUHJvZ3Jlc3NTdGF0dXMge1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnQgPSBpbmRleCA9PSB0aGlzLmFjdGl2ZU5hdjtcclxuXHJcbiAgICBpZiAodGhpcy5pc0luYWN0aXZlKGluZGV4KSkge1xyXG4gICAgICByZXR1cm4gXCJpbmFjdGl2ZVwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5wcm9ncmVzc1N0YXR1cyAmJiAhY3VycmVudCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvdW50SW52YWxpZHMoZm9ybSk7XHJcbiAgICAgIHJldHVybiBlcnJvcnMgPiAwID8gXCJlcnJvclwiIDogXCJzdWNjZXNzXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiYWN0aXZlXCI7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgY291bnRJbnZhbGlkcyhmb3JtOiBhbnkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzU2VydmljZS5jb3VudEludmFsaWQoZm9ybSk7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZUZvcm0oZXZlbnQ6IE5neFNpcmlvRXZlbnQ8U2lyaW9TdGVwcGVyUHJvZ3Jlc3NCYXJDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCBmb3JtSW5kZXggPSAoZXZlbnQuY29tcG9uZW50IGFzIGFueSkuZm9ybUluZGV4O1xyXG4gICAgaWYgKHR5cGVvZiBmb3JtSW5kZXggPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTmF2ID0gZm9ybUluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVCb29sZWFuKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZUJvb2xlYW4odGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVGVtcGxhdGUodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9wZW5Gb3JtKHRlbXBsYXRlOiBzdHJpbmcsIG9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5tZXRhZGF0YS5nZXRUZW1wbGF0ZUJ5TmFtZSh0ZW1wbGF0ZSk7XHJcbiAgICBpZiAoZm9ybVNjaGVtYSkge1xyXG4gICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZyhmb3JtU2NoZW1hLCBvcHRpb25zKTtcclxuICAgIH0gICAgICAgIFxyXG4gIH1cclxuXHJcbiAgaXNDaGFuZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmRpcnR5O1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC52YWxpZDtcclxuICB9XHJcblxyXG4gIGdldENvbnRleHQoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gVG9Cb3VuZEFycm93cyh0aGlzLCBbXHJcbiAgICAgICdjYW5QcmV2aW91cycsXHJcbiAgICAgICdnb1ByZXZpb3VzJyxcclxuICAgICAgJ2Nhbk5leHQnLFxyXG4gICAgICAnZ29OZXh0JyxcclxuICAgICAgJ2FjdGl2ZU5hdidcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIHByaXZhdGUgX2Zvcm1zOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX2FjdGl2ZU5hdjogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBkZWZhdWx0VmFsdWU6IGFueSA9IHsgfTtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVNjaGVtYSgpIHtcclxuICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsZWFyQ29udHJvbHMoKTtcclxuXHJcbiAgICB0aGlzLmNsZWFySGFuZGxlcnMoKTtcclxuXHJcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLnNjaGVtYTtcclxuXHJcbiAgICBjb25zdCBhbGxGb3JtcyA9IGdyb3VwQnlSb3coc2NoZW1hLmZvcm1zID8/IFtdKTtcclxuXHJcbiAgICB0aGlzLm1ldGFkYXRhLnNldFNjaGVtYShzY2hlbWEpO1xyXG5cclxuICAgIHRoaXMubWV0YWRhdGEuc2V0Rm9ybXMoYWxsRm9ybXMpO1xyXG5cclxuICAgIHRoaXMuX2Zvcm1zID0gYWxsRm9ybXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc1RlbXBsYXRlICE9PSB0cnVlKTtcclxuXHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5mb3JtU2VydmljZS5wYXRjaCh0aGlzLmZvcm1Hcm91cCwgdGhpcy52YWx1ZSwge1xyXG4gICAgICAgIHN0cmljdDogdGhpcy5zdHJpY3RcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQuZW1pdCh0aGlzLmZvcm1Hcm91cCk7XHJcblxyXG4gICAgdGhpcy5yZWdpc3RlckhhbmRsZXJzKCk7ICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2VWYWx1ZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc3VwcHJlc3MgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN1c3BlbmRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgZW1pdEV2ZW50ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQodGhpcy5kZWZhdWx0VmFsdWUsIHsgZW1pdEV2ZW50IH0pO1xyXG4gICAgICB0aGlzLmNsZWFyRm9ybUFycmF5cyh0aGlzLmZvcm1Hcm91cCwgZW1pdEV2ZW50KTtcclxuICAgICAgdGhpcy5mb3JtU2VydmljZS5wYXRjaCh0aGlzLmZvcm1Hcm91cCwgdGhpcy52YWx1ZSwge1xyXG4gICAgICAgIGVtaXRFdmVudCxcclxuICAgICAgICBzdHJpY3Q6IHRoaXMuc3RyaWN0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc3VwcHJlc3MgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtU2VydmljZS51cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KHRoaXMuZm9ybUdyb3VwLCB0cnVlKTtcclxuICAgICAgdGhpcy5zdXNwZW5kVmFsdWVDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1c3BlbmRWYWx1ZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSByZWdpc3RlckhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXNwZW5kVmFsdWVDaGFuZ2VzKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2UoKTsgICAgICBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgY2xlYXJIYW5kbGVycygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0dGVkVmFsdWVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCB0cnVlPigpO1xyXG5cclxuICBwcml2YXRlIGlzRW1pdHRlZFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHRoaXMuZW1pdHRlZFZhbHVlcy5oYXModmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZW1pdHRlZFZhbHVlcy5kZWxldGUodmFsdWUpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XHJcbiAgICB0aGlzLmVtaXR0ZWRWYWx1ZXMuc2V0KG5ld1ZhbHVlLCB0cnVlKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zdXNwZW5kVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb3JtU2VydmljZS5wYXRjaCh0aGlzLmZvcm1Hcm91cCwgdGhpcy52YWx1ZSwge1xyXG4gICAgICAgIHN0cmljdDogdGhpcy5zdHJpY3RcclxuICAgICAgfSk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLnN1c3BlbmRWYWx1ZUNoYW5nZXMgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TmV4dCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5hY3RpdmVOYXYgKyAxO1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhOYXYoKTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCBtYXgpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQoaW5kZXgpICYmICF0aGlzLmlzSW5hY3RpdmUoaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91cygpOiBudW1iZXIge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5hY3RpdmVOYXYgLSAxO1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKGluZGV4KSAmJiAhdGhpcy5pc0luYWN0aXZlKGluZGV4KSkge1xyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgICAgfVxyXG4gICAgICBpbmRleC0tO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4TmF2KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybXMubGVuZ3RoID8/IDA7ICAgIFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaXNEaXNhYmxlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB2YXIgZm9ybSA9IHRoaXMuX2Zvcm1zW2luZGV4XTtcclxuXHJcbiAgICBpZiAoIWZvcm0pXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oZm9ybS5kaXNhYmxlZCkgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW5hY3RpdmUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGZvcm0gPSB0aGlzLl9mb3Jtc1tpbmRleF07XHJcblxyXG4gICAgaWYgKCFmb3JtKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVCb29sZWFuKGZvcm0uaW5hY3RpdmUpID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckNvbnRyb2xzKCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbChrZXkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRm9ybUFycmF5cyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGVtaXRFdmVudDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkgJiYgY29udHJvbC5jb250cm9scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnRyb2wuY2xlYXIoeyBlbWl0RXZlbnQgfSk7XHJcbiAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goY2hpbGRDb250cm9sID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyRm9ybUFycmF5cyhjaGlsZENvbnRyb2wsIGVtaXRFdmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uQ29sbGVjdGlvbiA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgZGlzYWJsZUNvbGxlY3Rpb24gPSB0aGlzLmRpc2FibGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIGNvbnN0IGV2ZW50Q29sbGVjdGlvbiA9IHRoaXMuZXZlbnRTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIGNvbnN0IGNvbXB1dGVDb2xsZWN0aW9uID0gdGhpcy5jb21wdXRlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICB0aGlzLmZvcm1zLmZvckVhY2goKGZvcm06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzdGF0dXNDb2xsZWN0aW9uID0gdGhpcy5zdGF0dXNTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgodGhpcy5mYiwgdGhpcy5mb3JtR3JvdXAsIGZvcm0ucGF0aCk7XHJcbiAgICAgIGlmICh0aGlzLmhhc1BhdGgoZm9ybS5wYXRoKSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjdXJyZW50R3JvdXAsIHRoaXMuZm9ybUdyb3VwLCBmb3JtKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtLnJvd3M/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRDb250cm9scyh0aGlzLmZiLCBjdXJyZW50R3JvdXAsIHJvdy5jb21wb25lbnRzXHJcbiAgICAgICAgICAsIGRpc2FibGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGNvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHN0YXR1c0NvbGxlY3Rpb25cclxuICAgICAgICAgICwgZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5zZXR1cENvbGxlY3Rpb24oZm9ybSwgc3RhdHVzQ29sbGVjdGlvbik7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlzYWJsZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uKTtcclxuICAgIHRoaXMuY29tcHV0ZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGNvbXB1dGVDb2xsZWN0aW9uKTtcclxuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uKTtcclxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRDb250cm9scyhmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICAgICwgZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgY29tcG9uZW50czogQXJyYXk8YW55PlxyXG4gICAgLCBkaXNhYmxlQ29sbGVjdGlvbjogRGlzYWJsZUNvbGxlY3Rpb25cclxuICAgICwgY29tcHV0ZUNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAsIHZhbGlkYXRpb25Db2xsZWN0aW9uOiBWYWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgLCBzdGF0dXNDb2xsZWN0aW9uOiBTdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAsIGV2ZW50Q29sbGVjdGlvbjogRXZlbnRDb2xsZWN0aW9uKSB7XHJcbiAgICBsZXQgZm9ybUNvbXBvbmVudCA9IHRoaXM7XHJcblxyXG4gICAgY29tcG9uZW50cz8uZm9yRWFjaCgoY29tcG9uZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNGb3JtQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aCh0aGlzLmZiLCBmb3JtR3JvdXAsIGNvbXBvbmVudC5wYXRoKTtcclxuICAgICAgICBpZiAoY3VycmVudEdyb3VwLmNvbnRhaW5zKGNvbXBvbmVudC5rZXkpKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGN1cnJlbnRHcm91cC5nZXQoY29tcG9uZW50LmtleSkgYXMgQWJzdHJhY3RDb250cm9sKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29tcG9uZW50KTtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IEZvcm1Db250cm9sT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdXBkYXRlT246IHRoaXMuZ2V0VXBkYXRlT24oY29tcG9uZW50KSB8fCBcImNoYW5nZVwiLFxyXG4gICAgICAgICAgICBub25OdWxsYWJsZTogKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUJ1aWxkZXIuY29udHJvbChkZWZhdWx0VmFsdWUsIG9wdGlvbnMpOyAgICAgICAgICBcclxuICAgICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKGNvbXBvbmVudC5rZXksIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihzdGF0dXNDb2xsZWN0aW9uLCBjb250cm9sKTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sLCBmb3JtR3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihjb21wdXRlQ29sbGVjdGlvbiwgY29udHJvbCwgZm9ybUdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5hZGRUb0NvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5pc0NvbnRhaW5lckNvbXBvbmVudChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVycyA9IHRoaXMuZ2V0Q29udGFpbmVycyhjb21wb25lbnQpO1xyXG4gICAgICAgIGNvbnRhaW5lcnM/LmZvckVhY2goKGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUJ1aWxkZXIsIGZvcm1Hcm91cCwgY29udGFpbmVyLnBhdGgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGFzUGF0aChjb250YWluZXIucGF0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24sIGN1cnJlbnRHcm91cCwgZm9ybUdyb3VwLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29udGFpbmVyLnJvd3M/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGZvcm1Db21wb25lbnQuYWRkQ29udHJvbHMoZm9ybUJ1aWxkZXIsIGN1cnJlbnRHcm91cCwgcm93LmNvbXBvbmVudHNcclxuICAgICAgICAgICAgICAsIGRpc2FibGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLCBjb21wdXRlQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgdmFsaWRhdGlvbkNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAsIHN0YXR1c0NvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAsIGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQXJyYXlDb21wb25lbnQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSB0aGlzLmdldEFycmF5SXRlbShjb21wb25lbnQpO1xyXG4gICAgICAgIGlmIChpdGVtQ29tcG9uZW50LmtleSkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5hcHBseVBhdGgoZm9ybUJ1aWxkZXIsIGZvcm1Hcm91cCwgaXRlbUNvbXBvbmVudC5wYXRoKTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuY3JlYXRlRm9ybUFycmF5KGZvcm1CdWlsZGVyLCBjdXJyZW50R3JvdXAsIGl0ZW1Db21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihzdGF0dXNDb2xsZWN0aW9uLCBmb3JtQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQ29tcG9uZW50V2l0aElucHV0KGNvbXBvbmVudCkpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aCh0aGlzLmZiLCBmb3JtR3JvdXAsIGNvbXBvbmVudC5wYXRoKTtcclxuICAgICAgICBpZiAoY3VycmVudEdyb3VwLmNvbnRhaW5zKGNvbXBvbmVudC5rZXkpKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGN1cnJlbnRHcm91cC5nZXQoY29tcG9uZW50LmtleSkgYXMgQWJzdHJhY3RDb250cm9sKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKTtcclxuICAgICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKGNvbXBvbmVudC5rZXksIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihzdGF0dXNDb2xsZWN0aW9uLCBjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQXJyYXkoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXHJcbiAgICAsIGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGl0ZW1Db21wb25lbnQ6IGFueSk6IEZvcm1BcnJheSB7XHJcbiAgICBjb25zdCBmb3JtQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtQnVpbGRlci5hcnJheTxGb3JtR3JvdXA+KFtdKTtcclxuXHJcbiAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtQ29tcG9uZW50LmtleSwgZm9ybUFycmF5KTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVJdGVtID0gZnVuY3Rpb24gKHRhcmdldDogRm9ybUFycmF5IHwgbnVsbCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgIGNvbnN0IHN0YXR1c0NvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LnN0YXR1c1NlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uQ29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQudmFsaWRhdGlvblNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCBldmVudENvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LmV2ZW50U2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRpc2FibGVDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5kaXNhYmxlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGNvbXB1dGVDb2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC5jb21wdXRlU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGxldCBuZXdHcm91cCA9IGZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcclxuICAgICAgdGFyZ2V0Py5wdXNoKG5ld0dyb3VwKTtcclxuICAgICAgaXRlbUNvbXBvbmVudC5yb3dzPy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGZvcm1Db21wb25lbnQuYWRkQ29udHJvbHMoZm9ybUJ1aWxkZXIsIG5ld0dyb3VwLCByb3cuY29tcG9uZW50c1xyXG4gICAgICAgICAgLCBkaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBjb21wdXRlQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBzdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZ25vcmUgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICBmb3JtQ29tcG9uZW50LmRpc2FibGVTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbik7XHJcbiAgICAgIGZvcm1Db21wb25lbnQuY29tcHV0ZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGNvbXB1dGVDb2xsZWN0aW9uKTtcclxuICAgICAgZm9ybUNvbXBvbmVudC52YWxpZGF0aW9uU2VydmljZS5zZXR1cENvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24pO1xyXG4gICAgICBmb3JtQ29tcG9uZW50LmV2ZW50U2VydmljZS5zZXR1cENvbGxlY3Rpb24oZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgcmV0dXJuIG5ld0dyb3VwO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZXNpemVGb3JtQXJyYXkgPSB0aGlzLnJlc2l6ZUZvcm1BcnJheTtcclxuXHJcbiAgICBjb25zdCBhZGRJdGVtID0gZnVuY3Rpb24gKHRoaXM6IEZvcm1BcnJheSkge1xyXG4gICAgICByZXR1cm4gY3JlYXRlSXRlbSh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY3JlYXRlTmV3QXJyYXkgPSBmdW5jdGlvbiAodGhpczogRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XHJcbiAgICAgIHByZXBhcmVBcnJheShuZXdBcnJheSk7XHJcbiAgICAgIHJldHVybiBuZXdBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVwYXJlQXJyYXkgPSAoYXJyYXk6IGFueSkgPT4ge1xyXG4gICAgICBhcnJheS5hZGRJdGVtID0gYWRkSXRlbTtcclxuICAgICAgYXJyYXkuY3JlYXRlSXRlbSA9IGNyZWF0ZUl0ZW07XHJcbiAgICAgIGFycmF5LnJlc2l6ZSA9IHJlc2l6ZTtcclxuICAgICAgYXJyYXkuY3JlYXRlTmV3QXJyYXkgPSBjcmVhdGVOZXdBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNpemUgPSBmdW5jdGlvbiAodGhpczogRm9ybUFycmF5LCBzaXplOiBudW1iZXIpIHtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSByZXNpemVGb3JtQXJyYXkodGhpcywgc2l6ZSwgY3JlYXRlSXRlbSk7XHJcbiAgICAgIHByZXBhcmVBcnJheShuZXdBcnJheSk7XHJcbiAgICAgIGZvcm1Hcm91cC5zZXRDb250cm9sKGl0ZW1Db21wb25lbnQua2V5LCBuZXdBcnJheSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByZXBhcmVBcnJheShmb3JtQXJyYXkpO1xyXG5cclxuICAgIC8vIHVzZWQgZXh0ZXJuYWxseTogYWRkSXRlbSwgcmVzaXplXHJcblxyXG4gICAgcmV0dXJuIGZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplRm9ybUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBzaXplOiBudW1iZXIsIGNyZWF0ZUl0ZW06ICh0YXJnZXQ6IEZvcm1BcnJheSB8IG51bGwpID0+IEZvcm1Hcm91cCkgOiBGb3JtQXJyYXkge1xyXG4gICAgaWYgKGZvcm1BcnJheS5sZW5ndGggPCBzaXplKSB7XHJcbiAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IEZvcm1BcnJheShmb3JtQXJyYXkuY29udHJvbHMpO1xyXG4gICAgICB3aGlsZSAoZm9ybUFycmF5Lmxlbmd0aCA8IHNpemUpIHtcclxuICAgICAgICBjcmVhdGVJdGVtKG5ld0FycmF5KTsgICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdBcnJheTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvcm1BcnJheS5sZW5ndGggPiBzaXplKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUFycmF5KGZvcm1BcnJheS5jb250cm9scy5zbGljZSgwLCBzaXplKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZvcm1BcnJheTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUGF0aCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5UGF0aChmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5oYXNQYXRoKHBhdGgpKSB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VycmVudEdyb3VwOiBGb3JtR3JvdXAgPSBmb3JtR3JvdXA7XHJcbiAgICB0aGlzLnNwbGl0UGF0aChwYXRoKS5mb3JFYWNoKChzZWdtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0R3JvdXAgPSBjdXJyZW50R3JvdXAuZ2V0KHNlZ21lbnQpO1xyXG4gICAgICBpZiAoZXhpc3RHcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGN1cnJlbnRHcm91cCA9IGV4aXN0R3JvdXA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGV4aXN0R3JvdXApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgZm9ybSBncm91cCBiZWNhdXNlIGFuIGVsZW1lbnQgd2l0aCBwYXRoICR7c2VnbWVudH0gYWxyZWFkeSBleGlzdHNgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBzZWdtZW50R3JvdXAgPSBmb3JtQnVpbGRlci5ncm91cCh7fSk7XHJcbiAgICAgICAgY3VycmVudEdyb3VwLmFkZENvbnRyb2woc2VnbWVudCwgc2VnbWVudEdyb3VwKTtcclxuICAgICAgICBjdXJyZW50R3JvdXAgPSBzZWdtZW50R3JvdXA7XHJcbiAgICAgIH0gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdXJyZW50R3JvdXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRm9ybUNvbXBvbmVudChjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgY2FzZSBcImNoZWNrbGlzdFwiOlxyXG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgY2FzZSBcImZpbGVwaWNrZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICBjYXNlIFwicmFkaW9cIjpcclxuICAgICAgY2FzZSBcInNlbGVjdFwiOlxyXG4gICAgICBjYXNlIFwidGFnbGlzdFwiOlxyXG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgY2FzZSBcInRleHRmaWVsZFwiOlxyXG4gICAgICBjYXNlIFwicmFuZ2VcIjpcclxuICAgICAgY2FzZSBcImV4cHJlc3Npb25cIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29udGFpbmVyQ29tcG9uZW50KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICBjYXNlIFwidGFiXCI6XHJcbiAgICAgIGNhc2UgXCJhY2NvcmRpb25cIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICBcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29tcG9uZW50V2l0aElucHV0KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29tcG9uZW50LnR5cGUgPT09IFwiY29tcG9uZW50XCJcclxuICAgICAgJiYgY29tcG9uZW50LmlzSW5wdXQgPT09IHRydWVcclxuICAgICAgJiYgY29tcG9uZW50LmtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBcnJheUNvbXBvbmVudChjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwiZHluYW1pY2xpc3RcIjpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgZ2V0QXJyYXlJdGVtKGNvbXBvbmVudDogYW55KTogeyBrZXk6IGFueTsgcGF0aDogYW55OyByb3dzOiBhbnkgfSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdkeW5hbWljbGlzdCcpIHtcclxuICAgICAgcmV0dXJuIHsga2V5OiBjb21wb25lbnQua2V5LCBwYXRoOiBjb21wb25lbnQucGF0aCwgcm93czogY29tcG9uZW50LnJvd3MgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBrZXk6IG51bGwsIHBhdGg6IG51bGwsIHJvd3M6IFtdIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRhaW5lcnMoY29tcG9uZW50OiBhbnkpOiB7IHBhdGg6IGFueTsgcm93czogYW55LCBkaXNhYmxlZDogYW55IH1bXSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgcGF0aDogY29tcG9uZW50LnBhdGgsXHJcbiAgICAgICAgcm93czogY29tcG9uZW50LnJvd3MsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICB9XTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJ1xyXG4gICAgICB8fCBjb21wb25lbnQudHlwZSA9PT0gJ2FjY29yZGlvbicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5wYW5lbHMubWFwKChwYW5lbDogYW55KSA9PiAoe1xyXG4gICAgICAgIHBhdGg6IHBhbmVsLnBhdGgsXHJcbiAgICAgICAgcm93czogdGhpcy5tZXRhZGF0YS5nZXRGb3JtQnlOYW1lKHBhbmVsLnRlbXBsYXRlKT8ucm93cyA/PyBbXSxcclxuICAgICAgICBkaXNhYmxlZDogcGFuZWwuZGlzYWJsZWRcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlT24oY29tcG9uZW50OiBhbnkpOiBhbnkge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiYmx1clwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoY29tcG9uZW50OiBhbnkpOiBhbnkge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xyXG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgY2FzZSBcInRleHRmaWVsZFwiOlxyXG4gICAgICBjYXNlIFwicmFkaW9cIjpcclxuICAgICAgY2FzZSBcInNlbGVjdFwiOlxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnQuZGVmYXVsdFZhbHVlIGFzIHN0cmluZztcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnQuZGVmYXVsdFZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgY2FzZSBcImNoZWNrYm94XCI6XHJcbiAgICAgICAgcmV0dXJuIChjb21wb25lbnQuZGVmYXVsdFZhbHVlID8/IGZhbHNlKSBhcyBib29sZWFuO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzcGxpdFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoXHJcbiAgICAgIC5zcGxpdCgnLicpXHJcbiAgICAgIC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnRyaW0oKSlcclxuICAgICAgLmZpbHRlcihzZWdtZW50ID0+IHNlZ21lbnQubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgY2xhc3M9XCJuZ3NcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgPCEtLSAjcmVnaW9uIHByb2dyZXNzIC0tPlxyXG4gICAgICA8bmd4LXNpcmlvLXN0ZXBwZXItcHJvZ3Jlc3MtYmFyICpuZ0lmPVwic2hvd1Byb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnRDbGljayk9XCJhY3RpdmF0ZUZvcm0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc0Ryb3Bkb3duXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wRG93bkxhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Nob3cnKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZvcm0gb2YgZm9ybXMsIGxldCBmb3JtSW5kZXggPSBpbmRleFwiPiAgICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZXZhbHVhdGVCb29sZWFuKGZvcm0uZGlzYWJsZWQpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtU3RhdHVzKGZvcm0sIGZvcm1JbmRleCkgYXMgc3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zdGVwcGVyLXByb2dyZXNzLWl0ZW0gW2hhc05hdmlnYXRpb25dPVwic3RhdHVzICE9PSAnaW5hY3RpdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlVGVtcGxhdGUobG9jYWxlKGZvcm0sICd0aXRsZScpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Byb2dyZXNzSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwicHJvZ3Jlc3NJdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUluZGV4XT1cImZvcm1JbmRleFwiLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZ3gtc2lyaW8tc3RlcHBlci1wcm9ncmVzcy1iYXI+XHJcbiAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TmF2XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzaWRlbmF2IC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzaWRlbmF2VGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2lkZW5hdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmb3JtIG9mIGZvcm1zLCBsZXQgZm9ybUluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZXZhbHVhdGVCb29sZWFuKGZvcm0uZGlzYWJsZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtU3RhdHVzKGZvcm0sIGZvcm1JbmRleCkgYXMgc3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInsgY291bnQ6IGNvdW50SW52YWxpZHMoZm9ybSkgfSBhcyBlcnJvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2lkZW5hdi1pdGVtIFtpc0FjdGl2ZV09XCJhY3RpdmVOYXYgPT0gZm9ybUluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVOYXYgPSBmb3JtSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkU3RhdGVdPVwic3RhdHVzID09PSAnaW5hY3RpdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGl2ZU5hdiA9IGZvcm1JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2l0aFRhZ109XCJlcnJvcnMuY291bnQgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1R5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ1ZhbHVlXT1cImVycm9ycy5jb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoZm9ybSwgJ3RpdGxlJykpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1zaWRlbmF2LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNpZGVuYXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDxuZ3gtc2lyaW8tc2lkZW5hdi1tb2JpbGUgY2xhc3M9XCJkLWJsb2NrIGQtbGctbm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuTWVudUxhYmVsXT1cImxvY2FsZShUZXh0cywgJ09wZW5NZW51JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3Blbk1lbnVBcmlhTGFiZWxdPVwibG9jYWxlKFRleHRzLCAnT3Blbk1lbnUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU1lbnVMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdDbG9zZU1lbnUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTWVudUFyaWFMYWJlbD1cImxvY2FsZShUZXh0cywgJ0Nsb3NlTWVudScpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlbmF2VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmd4LXNpcmlvLXNpZGVuYXYtbW9iaWxlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLWxnLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlbmF2VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yLWhvcml6b250YWxcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZWxlbWVudC1mb3JtXCIgW25nQ2xhc3NdPVwic2hvd05hdiA/ICdjb2wtbWQtMTEnIDogJ2NvbC1tZC0xNidcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3JtcywgbGV0IHNlY3Rpb25JbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlTmF2ID09IHNlY3Rpb25JbmRleCAmJiAhZXZhbHVhdGVCb29sZWFuKGZvcm0uZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgI2RlZmF1bHRcclxuICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImRlZmF1bHRcIj5cclxuICAgICAgICAgICAgPGgxICpuZ0lmPVwic2hvd0Zvcm1UaXRsZSAmJiBmb3JtLnRpdGxlXCIgY2xhc3M9XCJoMyBmb3JtLXRpdGxlXCI+e3sgZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoZm9ybSwgJ3RpdGxlJykpIH19PC9oMT5cclxuICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybV09XCJ0aGlzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChmb3JtLnBhdGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGZvcm0ucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJmb3JtLnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbm1lbnRdPVwiZm9ybS52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TmF2QnV0dG9uICYmIChjYW5OZXh0KCkgfHwgY2FuUHJldmlvdXMoKSlcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlY3Rpb24tbmF2c1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiBbY29sb3JdPVwibnVsbFwiICpuZ0lmPVwiY2FuTmV4dCgpXCIgKGNsaWNrKT1cImdvTmV4dCgpXCIgY2xhc3M9XCJuZXh0U2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAge3sgbG9jYWxlKFRleHRzLCAnTmV4dFNlY3Rpb24nKSB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiBbY29sb3JdPVwibnVsbFwiICpuZ0lmPVwiY2FuUHJldmlvdXMoKVwiIChjbGljayk9XCJnb1ByZXZpb3VzKClcIiBjbGFzcz1cInByZXZTZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tbGVmdFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge3sgbG9jYWxlKFRleHRzLCAnUHJldmlvdXNTZWN0aW9uJykgfX1cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcblxyXG5cclxuIl19
695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFFOUMsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUNQLGlCQUFpQixFQUFFLFlBQVksRUFDOUMsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWUsU0FBUyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQXNCLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakcsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0s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QUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBOEVoQixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vdHlwZXMvdHlwaW5ncy5kLnRzXCIgLz5cclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSBcclxuICAsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uLCBFdmVudEVtaXR0ZXJcclxuICAsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5qZWN0b3JcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2xPcHRpb25zLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciwgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UsIFZhbGlkYXRpb25Db2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzYWJsZVNlcnZpY2UsIERpc2FibGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvZGlzYWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdHVzU2VydmljZSwgU3RhdHVzQ29sbGVjdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXR1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBFdmVudENvbGxlY3Rpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0ZVNlcnZpY2UsIENvbXB1dGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ3JvdXBCeVJvdyB9IGZyb20gJy4uL3V0aWxzL2dyb3VwQnlSb3cnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mdW5jdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRm9ybURpYWxvZ09wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNGaWVsZHNDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWZpZWxkcy9keW5hbWljLWZpZWxkcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIFNpcmlvU2lkZW5hdk1vYmlsZUNvbXBvbmVudCwgU2lyaW9TaWRlbmF2Q29tcG9uZW50LCBTaXJpb1NpZGVuYXZJdGVtQ29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NCYXJDb21wb25lbnQsIFNpcmlvU3RlcHBlclByb2dyZXNzSXRlbUNvbXBvbmVudFxyXG4gICwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NTdGF0dXMsIE5neFNpcmlvRXZlbnRcclxufSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtSW5kZXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvcm1JbmRleC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUb0JvdW5kQXJyb3dzIH0gZnJvbSAnLi4vdXRpbHMvYm91bmQnO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbCB9IGZyb20gJy4uL2NvbnRyb2xzL2NvbnRyb2wnOyBcclxuaW1wb3J0IHsgc2V0Rm9jdXMgfSBmcm9tICcuLi91dGlscy9mb2N1c2FibGUnO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuLi9zaGFyZWQvYm9vdHN0cmFwLWdyaWQuc2NzcycsXHJcbiAgICAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LmNzcydcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgRm9ybUluZGV4RGlyZWN0aXZlXHJcbiAgICAsIFNpcmlvU2lkZW5hdk1vYmlsZUNvbXBvbmVudCwgU2lyaW9TaWRlbmF2Q29tcG9uZW50LCBTaXJpb1NpZGVuYXZJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1N0ZXBwZXJQcm9ncmVzc0JhckNvbXBvbmVudCwgU2lyaW9TdGVwcGVyUHJvZ3Jlc3NJdGVtQ29tcG9uZW50XHJcbiAgICAsIER5bmFtaWNGaWVsZHNDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBWYWxpZGF0aW9uU2VydmljZVxyXG4gICAgLCBEaXNhYmxlU2VydmljZVxyXG4gICAgLCBDb21wdXRlU2VydmljZVxyXG4gICAgLCBTdGF0dXNTZXJ2aWNlXHJcbiAgICAsIEV2ZW50U2VydmljZVxyXG4gICAgLCBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgTWV0YWRhdGFTZXJ2aWNlXHJcbiAgICAsIEZ1bmN0aW9uU2VydmljZVxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuICBASW5wdXQoKSBzY2hlbWE6IGFueTtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSB2YWx1ZTogYW55ID0ge307XHJcbiAgQElucHV0KCkgc3RyaWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd05hdjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05hdkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1Byb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0Zvcm1UaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2dyZXNzU3RhdHVzOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcclxuICBAT3V0cHV0KCkgYWN0aXZlTmF2Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdCcpIGZvcm1EaXYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBkaXNhYmxlU2VydmljZTogRGlzYWJsZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBjb21wdXRlU2VydmljZTogQ29tcHV0ZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBzdGF0dXNTZXJ2aWNlOiBTdGF0dXNTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2U6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWV0YWRhdGE6IE1ldGFkYXRhU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgdGhpcy5wcm9ncmFtbWFiaWxpdHkuYWRkRXZhbHVhdG9yUHJvdmlkZXJzKHRoaXMpO1xyXG4gIH1cclxuICBcclxuICBUZXh0cyA9IFRleHRzO1xyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJIYW5kbGVycygpO1xyXG4gIH1cclxuICBcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3NjaGVtYSddKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VTY2hlbWEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSAmJiAhdGhpcy5pc0VtaXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnZXQgZm9ybXMoKTogQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybXM7XHJcbiAgfVxyXG5cclxuICBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBjYW5QcmV2aW91cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByZXZpb3VzKCkgIT0gLTE7IFxyXG4gIH1cclxuXHJcbiAgZ29QcmV2aW91cygpIHtcclxuICAgIGlmICh0aGlzLmNhblByZXZpb3VzKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVOYXYgPSB0aGlzLmdldFByZXZpb3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5OZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TmV4dCgpICE9IC0xOyAgICBcclxuICB9XHJcblxyXG4gIGdvTmV4dCgpIHtcclxuICAgIGlmICh0aGlzLmNhbk5leHQoKSkgeyBcclxuICAgICAgdGhpcy5hY3RpdmVOYXYgPSB0aGlzLmdldE5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRyb2wobmFtZTogc3RyaW5nKTogQ29udHJvbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJTZXJ2aWNlLmdldENvbnRyb2wobmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sQXM8VCBleHRlbmRzIENvbnRyb2w+KG5hbWU6IHN0cmluZywgdHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyU2VydmljZS5nZXRDb250cm9sQXMobmFtZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlTmF2KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlTmF2O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWN0aXZlTmF2KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDwgdGhpcy5nZXRNYXhOYXYoKSkge1xyXG4gICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKHZhbHVlKSB8fCB0aGlzLmlzSW5hY3RpdmUodmFsdWUpKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5fYWN0aXZlTmF2ID0gdmFsdWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1EaXY/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgIHNldEZvY3VzKHRoaXMuZm9ybURpdi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVOYXZDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVOYXYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gICAgICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUdyb3VwKHBhdGg6IHN0cmluZyB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHBhdGggPyB0aGlzLmZvcm1Hcm91cC5nZXQocGF0aCkgOiB0aGlzLmZvcm1Hcm91cDtcclxuICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udHJvbCBpcyBub3QgYSBGb3JtR3JvdXAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybVN0YXR1cyhmb3JtOiBhbnksIGluZGV4OiBudW1iZXIpOiBTaXJpb1N0ZXBwZXJQcm9ncmVzc1N0YXR1cyB7XHJcblxyXG4gICAgY29uc3QgY3VycmVudCA9IGluZGV4ID09IHRoaXMuYWN0aXZlTmF2O1xyXG5cclxuICAgIGlmICh0aGlzLmlzSW5hY3RpdmUoaW5kZXgpKSB7XHJcbiAgICAgIHJldHVybiBcImluYWN0aXZlXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnByb2dyZXNzU3RhdHVzICYmICFjdXJyZW50KSB7XHJcbiAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY291bnRJbnZhbGlkcyhmb3JtKTtcclxuICAgICAgcmV0dXJuIGVycm9ycyA+IDAgPyBcImVycm9yXCIgOiBcInN1Y2Nlc3NcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJhY3RpdmVcIjtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBjb3VudEludmFsaWRzKGZvcm06IGFueSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNTZXJ2aWNlLmNvdW50SW52YWxpZChmb3JtKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlRm9ybShldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb1N0ZXBwZXJQcm9ncmVzc0JhckNvbXBvbmVudD4pIHtcclxuICAgIGNvbnN0IGZvcm1JbmRleCA9IChldmVudC5jb21wb25lbnQgYXMgYW55KS5mb3JtSW5kZXg7XHJcbiAgICBpZiAodHlwZW9mIGZvcm1JbmRleCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5hY3RpdmVOYXYgPSBmb3JtSW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUJvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVUZW1wbGF0ZSh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZvcm0odGVtcGxhdGU6IHN0cmluZywgb3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLm1ldGFkYXRhLmdldFRlbXBsYXRlQnlOYW1lKHRlbXBsYXRlKTtcclxuICAgIGlmIChmb3JtU2NoZW1hKSB7XHJcbiAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvclxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nKGZvcm1TY2hlbWEsIG9wdGlvbnMpO1xyXG4gICAgfSAgICAgICAgXHJcbiAgfVxyXG5cclxuICBpc0NoYW5nZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZGlydHk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiBUb0JvdW5kQXJyb3dzKHRoaXMsIFtcclxuICAgICAgJ2NhblByZXZpb3VzJyxcclxuICAgICAgJ2dvUHJldmlvdXMnLFxyXG4gICAgICAnY2FuTmV4dCcsXHJcbiAgICAgICdnb05leHQnLFxyXG4gICAgICAnYWN0aXZlTmF2J1xyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgcHJpdmF0ZSBfZm9ybXM6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfYWN0aXZlTmF2OiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIGRlZmF1bHRWYWx1ZTogYW55ID0geyB9O1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlU2NoZW1hKCkge1xyXG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJDb250cm9scygpO1xyXG5cclxuICAgIHRoaXMuY2xlYXJIYW5kbGVycygpO1xyXG5cclxuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuc2NoZW1hO1xyXG5cclxuICAgIGNvbnN0IGFsbEZvcm1zID0gZ3JvdXBCeVJvdyhzY2hlbWEuZm9ybXMgPz8gW10pO1xyXG5cclxuICAgIHRoaXMubWV0YWRhdGEuc2V0U2NoZW1hKHNjaGVtYSk7XHJcblxyXG4gICAgdGhpcy5tZXRhZGF0YS5zZXRGb3JtcyhhbGxGb3Jtcyk7XHJcblxyXG4gICAgdGhpcy5fZm9ybXMgPSBhbGxGb3Jtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzVGVtcGxhdGUgIT09IHRydWUpO1xyXG5cclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnBhdGNoKHRoaXMuZm9ybUdyb3VwLCB0aGlzLnZhbHVlLCB7XHJcbiAgICAgICAgc3RyaWN0OiB0aGlzLnN0cmljdFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZClcclxuICAgICAgdGhpcy5pbml0aWFsaXplZC5lbWl0KHRoaXMuZm9ybUdyb3VwKTtcclxuXHJcbiAgICB0aGlzLnJlZ2lzdGVySGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLmFzc2lnbkFjdGl2YU5hdigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVZhbHVlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zdXBwcmVzcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3VzcGVuZFZhbHVlQ2hhbmdlcyA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBlbWl0RXZlbnQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCh0aGlzLmRlZmF1bHRWYWx1ZSwgeyBlbWl0RXZlbnQgfSk7XHJcbiAgICAgIHRoaXMuY2xlYXJGb3JtQXJyYXlzKHRoaXMuZm9ybUdyb3VwLCBlbWl0RXZlbnQpO1xyXG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnBhdGNoKHRoaXMuZm9ybUdyb3VwLCB0aGlzLnZhbHVlLCB7XHJcbiAgICAgICAgZW1pdEV2ZW50LFxyXG4gICAgICAgIHN0cmljdDogdGhpcy5zdHJpY3RcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zdXBwcmVzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkodGhpcy5mb3JtR3JvdXAsIHRydWUpO1xyXG4gICAgICB0aGlzLnN1c3BlbmRWYWx1ZUNoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2UoKTsgICAgICBcclxuICAgIH1cclxuICAgIHRoaXMuYXNzaWduQWN0aXZhTmF2KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkFjdGl2YU5hdigpIHtcclxuICAgIGlmICghdGhpcy5pc0Zvcm1BY3RpdmFibGUodGhpcy5fYWN0aXZlTmF2KSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVOYXYgPSB0aGlzLmdldE5leHRGcm9tKC0xKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VzcGVuZFZhbHVlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVySGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1c3BlbmRWYWx1ZUNoYW5nZXMpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB0aGlzLmVtaXRWYWx1ZUNoYW5nZSgpOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBjbGVhckhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXR0ZWRWYWx1ZXMgPSBuZXcgV2Vha01hcDxvYmplY3QsIHRydWU+KCk7XHJcblxyXG4gIHByaXZhdGUgaXNFbWl0dGVkVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdGhpcy5lbWl0dGVkVmFsdWVzLmhhcyh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5lbWl0dGVkVmFsdWVzLmRlbGV0ZSh2YWx1ZSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcclxuICAgIHRoaXMuZW1pdHRlZFZhbHVlcy5zZXQobmV3VmFsdWUsIHRydWUpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnN1c3BlbmRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnBhdGNoKHRoaXMuZm9ybUdyb3VwLCB0aGlzLnZhbHVlLCB7XHJcbiAgICAgICAgc3RyaWN0OiB0aGlzLnN0cmljdFxyXG4gICAgICB9KTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuc3VzcGVuZFZhbHVlQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXROZXh0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXROZXh0RnJvbSh0aGlzLmFjdGl2ZU5hdik7ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXROZXh0RnJvbShmcm9tOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGluZGV4ID0gZnJvbSArIDE7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLmdldE1heE5hdigpO1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IG1heCkge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1BY3RpdmFibGUoaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJldmlvdXNGcm9tKHRoaXMuYWN0aXZlTmF2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJldmlvdXNGcm9tKGZyb206IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaW5kZXggPSBmcm9tIC0gMTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1BY3RpdmFibGUoaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4LS07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhOYXYoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3Jtcy5sZW5ndGggPz8gMDsgICAgXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBpc0Zvcm1BY3RpdmFibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluZGV4ID49IDBcclxuICAgICAgJiYgaW5kZXggPCB0aGlzLmdldE1heE5hdigpXHJcbiAgICAgICYmICF0aGlzLmlzRGlzYWJsZWQoaW5kZXgpXHJcbiAgICAgICYmICF0aGlzLmlzSW5hY3RpdmUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Rpc2FibGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHZhciBmb3JtID0gdGhpcy5fZm9ybXNbaW5kZXhdO1xyXG5cclxuICAgIGlmICghZm9ybSlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQm9vbGVhbihmb3JtLmRpc2FibGVkKSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbmFjdGl2ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB2YXIgZm9ybSA9IHRoaXMuX2Zvcm1zW2luZGV4XTtcclxuXHJcbiAgICBpZiAoIWZvcm0pXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oZm9ybS5pbmFjdGl2ZSkgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQ29udHJvbHMoKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5yZW1vdmVDb250cm9sKGtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGb3JtQXJyYXlzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZW1pdEV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBjb250cm9sLmNvbnRyb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29udHJvbC5jbGVhcih7IGVtaXRFdmVudCB9KTtcclxuICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoY29udHJvbC5jb250cm9scykuZm9yRWFjaChjaGlsZENvbnRyb2wgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXJGb3JtQXJyYXlzKGNoaWxkQ29udHJvbCwgZW1pdEV2ZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25Db2xsZWN0aW9uID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICBjb25zdCBkaXNhYmxlQ29sbGVjdGlvbiA9IHRoaXMuZGlzYWJsZVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgZXZlbnRDb2xsZWN0aW9uID0gdGhpcy5ldmVudFNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgY29uc3QgY29tcHV0ZUNvbGxlY3Rpb24gPSB0aGlzLmNvbXB1dGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgIHRoaXMuZm9ybXMuZm9yRWFjaCgoZm9ybTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXR1c0NvbGxlY3Rpb24gPSB0aGlzLnN0YXR1c1NlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbigpO1xyXG4gICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aCh0aGlzLmZiLCB0aGlzLmZvcm1Hcm91cCwgZm9ybS5wYXRoKTtcclxuICAgICAgaWYgKHRoaXMuaGFzUGF0aChmb3JtLnBhdGgpKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24sIGN1cnJlbnRHcm91cCwgdGhpcy5mb3JtR3JvdXAsIGZvcm0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm0ucm93cz8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFkZENvbnRyb2xzKHRoaXMuZmIsIGN1cnJlbnRHcm91cCwgcm93LmNvbXBvbmVudHNcclxuICAgICAgICAgICwgZGlzYWJsZUNvbGxlY3Rpb25cclxuICAgICAgICAgICwgY29tcHV0ZUNvbGxlY3Rpb25cclxuICAgICAgICAgICwgdmFsaWRhdGlvbkNvbGxlY3Rpb25cclxuICAgICAgICAgICwgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICAgICAgLCBldmVudENvbGxlY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihmb3JtLCBzdGF0dXNDb2xsZWN0aW9uKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaXNhYmxlU2VydmljZS5zZXR1cENvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24pO1xyXG4gICAgdGhpcy5jb21wdXRlU2VydmljZS5zZXR1cENvbGxlY3Rpb24oY29tcHV0ZUNvbGxlY3Rpb24pO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXR1cENvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24pO1xyXG4gICAgdGhpcy5ldmVudFNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGV2ZW50Q29sbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbnRyb2xzKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxyXG4gICAgLCBmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb21wb25lbnRzOiBBcnJheTxhbnk+XHJcbiAgICAsIGRpc2FibGVDb2xsZWN0aW9uOiBEaXNhYmxlQ29sbGVjdGlvblxyXG4gICAgLCBjb21wdXRlQ29sbGVjdGlvbjogQ29tcHV0ZUNvbGxlY3Rpb25cclxuICAgICwgdmFsaWRhdGlvbkNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAsIHN0YXR1c0NvbGxlY3Rpb246IFN0YXR1c0NvbGxlY3Rpb25cclxuICAgICwgZXZlbnRDb2xsZWN0aW9uOiBFdmVudENvbGxlY3Rpb24pIHtcclxuICAgIGxldCBmb3JtQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICBjb21wb25lbnRzPy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1Db21wb25lbnQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuYXBwbHlQYXRoKHRoaXMuZmIsIGZvcm1Hcm91cCwgY29tcG9uZW50LnBhdGgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50R3JvdXAuY29udGFpbnMoY29tcG9uZW50LmtleSkpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgY3VycmVudEdyb3VwLmdldChjb21wb25lbnQua2V5KSBhcyBBYnN0cmFjdENvbnRyb2wpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb21wb25lbnQpO1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uczogRm9ybUNvbnRyb2xPcHRpb25zID0ge1xyXG4gICAgICAgICAgICB1cGRhdGVPbjogdGhpcy5nZXRVcGRhdGVPbihjb21wb25lbnQpIHx8IFwiY2hhbmdlXCIsXHJcbiAgICAgICAgICAgIG5vbk51bGxhYmxlOiAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtQnVpbGRlci5jb250cm9sKGRlZmF1bHRWYWx1ZSwgb3B0aW9ucyk7ICAgICAgICAgIFxyXG4gICAgICAgICAgY3VycmVudEdyb3VwLmFkZENvbnRyb2woY29tcG9uZW50LmtleSwgY29udHJvbCk7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbih2YWxpZGF0aW9uQ29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihzdGF0dXNDb2xsZWN0aW9uLCBjb250cm9sKTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uLCBjb250cm9sLCBmb3JtR3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihjb21wdXRlQ29sbGVjdGlvbiwgY29udHJvbCwgZm9ybUdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKGV2ZW50Q29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmlzQ29udGFpbmVyQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXJzID0gdGhpcy5nZXRDb250YWluZXJzKGNvbXBvbmVudCk7XHJcbiAgICAgICAgY29udGFpbmVycz8uZm9yRWFjaCgoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aChmb3JtQnVpbGRlciwgZm9ybUdyb3VwLCBjb250YWluZXIucGF0aCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5oYXNQYXRoKGNvbnRhaW5lci5wYXRoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY3VycmVudEdyb3VwLCBmb3JtR3JvdXAsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250YWluZXIucm93cz8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZm9ybUNvbXBvbmVudC5hZGRDb250cm9scyhmb3JtQnVpbGRlciwgY3VycmVudEdyb3VwLCByb3cuY29tcG9uZW50c1xyXG4gICAgICAgICAgICAgICwgZGlzYWJsZUNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAsIGNvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLCB2YWxpZGF0aW9uQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgc3RhdHVzQ29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICwgZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNBcnJheUNvbXBvbmVudChjb21wb25lbnQpKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IHRoaXMuZ2V0QXJyYXlJdGVtKGNvbXBvbmVudCk7XHJcbiAgICAgICAgaWYgKGl0ZW1Db21wb25lbnQua2V5KSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSB0aGlzLmFwcGx5UGF0aChmb3JtQnVpbGRlciwgZm9ybUdyb3VwLCBpdGVtQ29tcG9uZW50LnBhdGgpO1xyXG4gICAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jcmVhdGVGb3JtQXJyYXkoZm9ybUJ1aWxkZXIsIGN1cnJlbnRHcm91cCwgaXRlbUNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGZvcm1BcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaXNDb21wb25lbnRXaXRoSW5wdXQoY29tcG9uZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuYXBwbHlQYXRoKHRoaXMuZmIsIGZvcm1Hcm91cCwgY29tcG9uZW50LnBhdGgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50R3JvdXAuY29udGFpbnMoY29tcG9uZW50LmtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdXJyZW50R3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEFic3RyYWN0Q29udHJvbDtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sLCBjdXJyZW50R3JvdXAsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1NlcnZpY2UuYWRkVG9Db2xsZWN0aW9uKHN0YXR1c0NvbGxlY3Rpb24sIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oZGlzYWJsZUNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKTtcclxuICAgICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKGNvbXBvbmVudC5rZXksIGNvbnRyb2wpO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5hZGRUb0NvbGxlY3Rpb24odmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2wsIGN1cnJlbnRHcm91cCwgY29tcG9uZW50KTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5hZGRUb0NvbGxlY3Rpb24oc3RhdHVzQ29sbGVjdGlvbiwgY29udHJvbCk7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTZXJ2aWNlLmFkZFRvQ29sbGVjdGlvbihkaXNhYmxlQ29sbGVjdGlvbiwgY29udHJvbCwgY3VycmVudEdyb3VwLCBjb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1BcnJheShmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICAgICwgZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgaXRlbUNvbXBvbmVudDogYW55KTogRm9ybUFycmF5IHtcclxuICAgIGNvbnN0IGZvcm1Db21wb25lbnQgPSB0aGlzO1xyXG5cclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IGZvcm1CdWlsZGVyLmFycmF5PEZvcm1Hcm91cD4oW10pO1xyXG5cclxuICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKGl0ZW1Db21wb25lbnQua2V5LCBmb3JtQXJyYXkpO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUl0ZW0gPSBmdW5jdGlvbiAodGFyZ2V0OiBGb3JtQXJyYXkgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgICAgY29uc3Qgc3RhdHVzQ29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQuc3RhdHVzU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25Db2xsZWN0aW9uID0gZm9ybUNvbXBvbmVudC52YWxpZGF0aW9uU2VydmljZS5jcmVhdGVDb2xsZWN0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGV2ZW50Q29sbGVjdGlvbiA9IGZvcm1Db21wb25lbnQuZXZlbnRTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgZGlzYWJsZUNvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LmRpc2FibGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgY29uc3QgY29tcHV0ZUNvbGxlY3Rpb24gPSBmb3JtQ29tcG9uZW50LmNvbXB1dGVTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24oKTtcclxuICAgICAgbGV0IG5ld0dyb3VwID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xyXG4gICAgICB0YXJnZXQ/LnB1c2gobmV3R3JvdXApO1xyXG4gICAgICBpdGVtQ29tcG9uZW50LnJvd3M/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgZm9ybUNvbXBvbmVudC5hZGRDb250cm9scyhmb3JtQnVpbGRlciwgbmV3R3JvdXAsIHJvdy5jb21wb25lbnRzXHJcbiAgICAgICAgICAsIGRpc2FibGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIGNvbXB1dGVDb2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHZhbGlkYXRpb25Db2xsZWN0aW9uXHJcbiAgICAgICAgICAsIHN0YXR1c0NvbGxlY3Rpb25cclxuICAgICAgICAgICwgZXZlbnRDb2xsZWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGlnbm9yZSBzdGF0dXNDb2xsZWN0aW9uXHJcbiAgICAgIGZvcm1Db21wb25lbnQuZGlzYWJsZVNlcnZpY2Uuc2V0dXBDb2xsZWN0aW9uKGRpc2FibGVDb2xsZWN0aW9uKTtcclxuICAgICAgZm9ybUNvbXBvbmVudC5jb21wdXRlU2VydmljZS5zZXR1cENvbGxlY3Rpb24oY29tcHV0ZUNvbGxlY3Rpb24pO1xyXG4gICAgICBmb3JtQ29tcG9uZW50LnZhbGlkYXRpb25TZXJ2aWNlLnNldHVwQ29sbGVjdGlvbih2YWxpZGF0aW9uQ29sbGVjdGlvbik7XHJcbiAgICAgIGZvcm1Db21wb25lbnQuZXZlbnRTZXJ2aWNlLnNldHVwQ29sbGVjdGlvbihldmVudENvbGxlY3Rpb24pO1xyXG4gICAgICByZXR1cm4gbmV3R3JvdXA7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZUZvcm1BcnJheSA9IHRoaXMucmVzaXplRm9ybUFycmF5O1xyXG5cclxuICAgIGNvbnN0IGFkZEl0ZW0gPSBmdW5jdGlvbiAodGhpczogRm9ybUFycmF5KSB7XHJcbiAgICAgIHJldHVybiBjcmVhdGVJdGVtKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVOZXdBcnJheSA9IGZ1bmN0aW9uICh0aGlzOiBGb3JtQXJyYXkpIHtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgICAgcHJlcGFyZUFycmF5KG5ld0FycmF5KTtcclxuICAgICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZXBhcmVBcnJheSA9IChhcnJheTogYW55KSA9PiB7XHJcbiAgICAgIGFycmF5LmFkZEl0ZW0gPSBhZGRJdGVtO1xyXG4gICAgICBhcnJheS5jcmVhdGVJdGVtID0gY3JlYXRlSXRlbTtcclxuICAgICAgYXJyYXkucmVzaXplID0gcmVzaXplO1xyXG4gICAgICBhcnJheS5jcmVhdGVOZXdBcnJheSA9IGNyZWF0ZU5ld0FycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc2l6ZSA9IGZ1bmN0aW9uICh0aGlzOiBGb3JtQXJyYXksIHNpemU6IG51bWJlcikge1xyXG4gICAgICBjb25zdCBuZXdBcnJheSA9IHJlc2l6ZUZvcm1BcnJheSh0aGlzLCBzaXplLCBjcmVhdGVJdGVtKTtcclxuICAgICAgcHJlcGFyZUFycmF5KG5ld0FycmF5KTtcclxuICAgICAgZm9ybUdyb3VwLnNldENvbnRyb2woaXRlbUNvbXBvbmVudC5rZXksIG5ld0FycmF5KTtcclxuICAgIH07XHJcblxyXG4gICAgcHJlcGFyZUFycmF5KGZvcm1BcnJheSk7XHJcblxyXG4gICAgLy8gdXNlZCBleHRlcm5hbGx5OiBhZGRJdGVtLCByZXNpemVcclxuXHJcbiAgICByZXR1cm4gZm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVGb3JtQXJyYXkoZm9ybUFycmF5OiBGb3JtQXJyYXksIHNpemU6IG51bWJlciwgY3JlYXRlSXRlbTogKHRhcmdldDogRm9ybUFycmF5IHwgbnVsbCkgPT4gRm9ybUdyb3VwKSA6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoZm9ybUFycmF5Lmxlbmd0aCA8IHNpemUpIHtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBuZXcgRm9ybUFycmF5KGZvcm1BcnJheS5jb250cm9scyk7XHJcbiAgICAgIHdoaWxlIChmb3JtQXJyYXkubGVuZ3RoIDwgc2l6ZSkge1xyXG4gICAgICAgIGNyZWF0ZUl0ZW0obmV3QXJyYXkpOyAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm9ybUFycmF5Lmxlbmd0aCA+IHNpemUpIHtcclxuICAgICAgcmV0dXJuIG5ldyBGb3JtQXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzLnNsaWNlKDAsIHNpemUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZm9ybUFycmF5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNQYXRoKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlQYXRoKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmhhc1BhdGgocGF0aCkpIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50R3JvdXA6IEZvcm1Hcm91cCA9IGZvcm1Hcm91cDtcclxuICAgIHRoaXMuc3BsaXRQYXRoKHBhdGgpLmZvckVhY2goKHNlZ21lbnQpID0+IHtcclxuICAgICAgY29uc3QgZXhpc3RHcm91cCA9IGN1cnJlbnRHcm91cC5nZXQoc2VnbWVudCk7XHJcbiAgICAgIGlmIChleGlzdEdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY3VycmVudEdyb3VwID0gZXhpc3RHcm91cDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXhpc3RHcm91cCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBmb3JtIGdyb3VwIGJlY2F1c2UgYW4gZWxlbWVudCB3aXRoIHBhdGggJHtzZWdtZW50fSBhbHJlYWR5IGV4aXN0c2ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlZ21lbnRHcm91cCA9IGZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcclxuICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ29udHJvbChzZWdtZW50LCBzZWdtZW50R3JvdXApO1xyXG4gICAgICAgIGN1cnJlbnRHcm91cCA9IHNlZ21lbnRHcm91cDtcclxuICAgICAgfSBcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGb3JtQ29tcG9uZW50KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxyXG4gICAgICBjYXNlIFwiY2hlY2tsaXN0XCI6XHJcbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxyXG4gICAgICBjYXNlIFwiZmlsZXBpY2tlclwiOlxyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICBjYXNlIFwic2VsZWN0XCI6XHJcbiAgICAgIGNhc2UgXCJ0YWdsaXN0XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgIGNhc2UgXCJyYW5nZVwiOlxyXG4gICAgICBjYXNlIFwiZXhwcmVzc2lvblwiOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNDb250YWluZXJDb21wb25lbnQoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBcImdyb3VwXCI6XHJcbiAgICAgIGNhc2UgXCJ0YWJcIjpcclxuICAgICAgY2FzZSBcImFjY29yZGlvblwiOlxyXG4gICAgICAgIHJldHVybiB0cnVlOyAgICAgIFxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNDb21wb25lbnRXaXRoSW5wdXQoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQudHlwZSA9PT0gXCJjb21wb25lbnRcIlxyXG4gICAgICAmJiBjb21wb25lbnQuaXNJbnB1dCA9PT0gdHJ1ZVxyXG4gICAgICAmJiBjb21wb25lbnQua2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0FycmF5Q29tcG9uZW50KGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJkeW5hbWljbGlzdFwiOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZXRBcnJheUl0ZW0oY29tcG9uZW50OiBhbnkpOiB7IGtleTogYW55OyBwYXRoOiBhbnk7IHJvd3M6IGFueSB9IHtcclxuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2R5bmFtaWNsaXN0Jykge1xyXG4gICAgICByZXR1cm4geyBrZXk6IGNvbXBvbmVudC5rZXksIHBhdGg6IGNvbXBvbmVudC5wYXRoLCByb3dzOiBjb21wb25lbnQucm93cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGtleTogbnVsbCwgcGF0aDogbnVsbCwgcm93czogW10gfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGFpbmVycyhjb21wb25lbnQ6IGFueSk6IHsgcGF0aDogYW55OyByb3dzOiBhbnksIGRpc2FibGVkOiBhbnkgfVtdIHtcclxuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2dyb3VwJykge1xyXG4gICAgICByZXR1cm4gW3tcclxuICAgICAgICBwYXRoOiBjb21wb25lbnQucGF0aCxcclxuICAgICAgICByb3dzOiBjb21wb25lbnQucm93cyxcclxuICAgICAgICBkaXNhYmxlZDogY29tcG9uZW50LmRpc2FibGVkXHJcbiAgICAgIH1dO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29tcG9uZW50LnR5cGUgPT09ICd0YWInXHJcbiAgICAgIHx8IGNvbXBvbmVudC50eXBlID09PSAnYWNjb3JkaW9uJykge1xyXG4gICAgICByZXR1cm4gY29tcG9uZW50LnBhbmVscy5tYXAoKHBhbmVsOiBhbnkpID0+ICh7XHJcbiAgICAgICAgcGF0aDogcGFuZWwucGF0aCxcclxuICAgICAgICByb3dzOiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUocGFuZWwudGVtcGxhdGUpPy5yb3dzID8/IFtdLFxyXG4gICAgICAgIGRpc2FibGVkOiBwYW5lbC5kaXNhYmxlZFxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRVcGRhdGVPbihjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0ZmllbGRcIjpcclxuICAgICAgICByZXR1cm4gXCJibHVyXCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZShjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGZpZWxkXCI6XHJcbiAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICBjYXNlIFwic2VsZWN0XCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyO1xyXG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcclxuICAgICAgICByZXR1cm4gKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUgPz8gZmFsc2UpIGFzIGJvb2xlYW47XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXBhdGgpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGhcclxuICAgICAgLnNwbGl0KCcuJylcclxuICAgICAgLm1hcChzZWdtZW50ID0+IHNlZ21lbnQudHJpbSgpKVxyXG4gICAgICAuZmlsdGVyKHNlZ21lbnQgPT4gc2VnbWVudC5sZW5ndGggPiAwKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cIm5nc1wiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICA8IS0tICNyZWdpb24gcHJvZ3Jlc3MgLS0+XHJcbiAgICAgIDxuZ3gtc2lyaW8tc3RlcHBlci1wcm9ncmVzcy1iYXIgKm5nSWY9XCJzaG93UHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudENsaWNrKT1cImFjdGl2YXRlRm9ybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRHJvcGRvd25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BEb3duTGFiZWxdPVwibG9jYWxlKFRleHRzLCAnU2hvdycpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3JtcywgbGV0IGZvcm1JbmRleCA9IGluZGV4XCI+ICAgICAgICAgIFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFldmFsdWF0ZUJvb2xlYW4oZm9ybS5kaXNhYmxlZClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1TdGF0dXMoZm9ybSwgZm9ybUluZGV4KSBhcyBzdGF0dXNcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXN0ZXBwZXItcHJvZ3Jlc3MtaXRlbSBbaGFzTmF2aWdhdGlvbl09XCJzdGF0dXMgIT09ICdpbmFjdGl2ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwic3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoZm9ybSwgJ3RpdGxlJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcHJvZ3Jlc3NJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJwcm9ncmVzc0l0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtSW5kZXhdPVwiZm9ybUluZGV4XCIvPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25neC1zaXJpby1zdGVwcGVyLXByb2dyZXNzLWJhcj5cclxuICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dOYXZcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHNpZGVuYXYgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpZGVuYXZUZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1zaWRlbmF2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZvcm0gb2YgZm9ybXMsIGxldCBmb3JtSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFldmFsdWF0ZUJvb2xlYW4oZm9ybS5kaXNhYmxlZClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1TdGF0dXMoZm9ybSwgZm9ybUluZGV4KSBhcyBzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwieyBjb3VudDogY291bnRJbnZhbGlkcyhmb3JtKSB9IGFzIGVycm9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zaWRlbmF2LWl0ZW0gW2lzQWN0aXZlXT1cImFjdGl2ZU5hdiA9PSBmb3JtSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZU5hdiA9IGZvcm1JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRTdGF0ZV09XCJzdGF0dXMgPT09ICdpbmFjdGl2ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWN0aXZlTmF2ID0gZm9ybUluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aXRoVGFnXT1cImVycm9ycy5jb3VudCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnVHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFnVmFsdWVdPVwiZXJyb3JzLmNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShmb3JtLCAndGl0bGUnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNpZGVuYXYtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2lkZW5hdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPG5neC1zaXJpby1zaWRlbmF2LW1vYmlsZSBjbGFzcz1cImQtYmxvY2sgZC1sZy1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZW5NZW51TGFiZWxdPVwibG9jYWxlKFRleHRzLCAnT3Blbk1lbnUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuTWVudUFyaWFMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdPcGVuTWVudScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nsb3NlTWVudUxhYmVsXT1cImxvY2FsZShUZXh0cywgJ0Nsb3NlTWVudScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VNZW51QXJpYUxhYmVsPVwibG9jYWxlKFRleHRzLCAnQ2xvc2VNZW51JylcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVuYXZUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZ3gtc2lyaW8tc2lkZW5hdi1tb2JpbGU+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbGctYmxvY2tcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVuYXZUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3ItaG9yaXpvbnRhbFwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1lbGVtZW50LWZvcm1cIiBbbmdDbGFzc109XCJzaG93TmF2ID8gJ2NvbC1tZC0xMScgOiAnY29sLW1kLTE2J1wiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmb3JtIG9mIGZvcm1zLCBsZXQgc2VjdGlvbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVOYXYgPT0gc2VjdGlvbkluZGV4ICYmICFldmFsdWF0ZUJvb2xlYW4oZm9ybS5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAjZGVmYXVsdFxyXG4gICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICA8aDEgKm5nSWY9XCJzaG93Rm9ybVRpdGxlICYmIGZvcm0udGl0bGVcIiBjbGFzcz1cImgzIGZvcm0tdGl0bGVcIj57eyBldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShmb3JtLCAndGl0bGUnKSkgfX08L2gxPlxyXG4gICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtXT1cInRoaXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGZvcm0ucGF0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seSB8fCBldmFsdWF0ZUJvb2xlYW4oZm9ybS5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImZvcm0ucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsaWdubWVudF09XCJmb3JtLnZlcnRpY2FsQWxpZ25tZW50XCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dOYXZCdXR0b24gJiYgKGNhbk5leHQoKSB8fCBjYW5QcmV2aW91cygpKVwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VjdGlvbi1uYXZzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIFtjb2xvcl09XCJudWxsXCIgKm5nSWY9XCJjYW5OZXh0KClcIiAoY2xpY2spPVwiZ29OZXh0KClcIiBjbGFzcz1cIm5leHRTZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhbGUoVGV4dHMsICdOZXh0U2VjdGlvbicpIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHRcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIFtjb2xvcl09XCJudWxsXCIgKm5nSWY9XCJjYW5QcmV2aW91cygpXCIgKGNsaWNrKT1cImdvUHJldmlvdXMoKVwiIGNsYXNzPVwicHJldlNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1sZWZ0XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhbGUoVGV4dHMsICdQcmV2aW91c1NlY3Rpb24nKSB9fVxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuXHJcblxyXG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core';
2
- import { distinctUntilChanged, map } from 'rxjs';
2
+ import { isObservable, distinctUntilChanged, map } from 'rxjs';
3
+ import { take } from 'rxjs/operators';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../services/global.service";
5
6
  export class DynamicHostComponent {
@@ -74,6 +75,7 @@ export class DynamicHostComponent {
74
75
  .subscribe(isDisabled => {
75
76
  invoke(isDisabled);
76
77
  });
78
+ invoke(formControl.disabled);
77
79
  }
78
80
  }
79
81
  setProperties() {
@@ -84,11 +86,21 @@ export class DynamicHostComponent {
84
86
  for (const key of Object.keys(properties)) {
85
87
  const value = properties[key];
86
88
  if (key in this.componentRef.instance) {
87
- this.componentRef.setInput?.(key, value);
89
+ this.assignValue(key, value);
88
90
  }
89
91
  }
90
92
  }
91
93
  }
94
+ assignValue(key, value) {
95
+ if (isObservable(value)) {
96
+ value.pipe(take(1)).subscribe(v => {
97
+ this.componentRef?.setInput?.(key, v);
98
+ });
99
+ }
100
+ else {
101
+ this.componentRef?.setInput?.(key, value);
102
+ }
103
+ }
92
104
  isControlValueAccessor(obj) {
93
105
  return (obj &&
94
106
  typeof obj.writeValue === 'function' &&
@@ -118,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118
130
  type: ViewChild,
119
131
  args: ['container', { read: ViewContainerRef, static: true }]
120
132
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ob3N0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtaG9zdC9keW5hbWljLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1ob3N0L2R5bmFtaWMtaG9zdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBaUIsU0FBUyxFQUFFLGdCQUFnQixFQUc3RCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWdCLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUy9ELE1BQU0sT0FBTyxvQkFBb0I7SUFNWDtJQUNWO0lBTlMsU0FBUyxDQUFPO0lBQzFCLFVBQVUsR0FBK0IsSUFBSSxDQUFDO0lBQzlDLFNBQVMsQ0FBYTtJQUNtQyxTQUFTLENBQW9CO0lBRS9GLFlBQW9CLFFBQWtCLEVBQzVCLGFBQTRCO1FBRGxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FB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LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEluamVjdG9yXHJcbiAgLCBUeXBlLCBDb21wb25lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1ob3N0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1ob3N0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2R5bmFtaWMtaG9zdC5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0hvc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KFwicmVnaXN0ZXJcIikgY29tcG9uZW50ITogYW55O1xyXG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzU3ViKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfSAgICBcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJwcm9wZXJ0aWVzXCJdKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvcGVydGllcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMucmVzb2x2ZUNvbXBvbmVudFR5cGUodGhpcy5jb21wb25lbnQuY29tcG9uZW50KTtcclxuICAgIGlmIChjb21wb25lbnRUeXBlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUsIHtcclxuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0JpbmRhYmxlKCkpIHtcclxuICAgICAgICB0aGlzLnNldEJpbmRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRSZWYoKTogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZjtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgc3RhdHVzU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBpc0JpbmRhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmlzSW5wdXRcclxuICAgICAgJiYgdGhpcy5jb21wb25lbnQua2V5XHJcbiAgICAgICYmIHRoaXMuaXNDb250cm9sVmFsdWVBY2Nlc3Nvcih0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJpbmRpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb21wb25lbnQua2V5O1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNDb250cm9sVmFsdWVBY2Nlc3NvcihpbnN0YW5jZSkpIHJldHVybjtcclxuXHJcbiAgICBsZXQgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWZvcm1Db250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW5jZS53cml0ZVZhbHVlKGZvcm1Db250cm9sLnZhbHVlKTtcclxuXHJcbiAgICBpbnN0YW5jZS5yZWdpc3Rlck9uQ2hhbmdlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGluc3RhbmNlLnJlZ2lzdGVyT25Ub3VjaGVkKCgpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2V0RGlzYWJsZWRTdGF0ZSA9IGluc3RhbmNlLnNldERpc2FibGVkU3RhdGU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBzZXREaXNhYmxlZFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGludm9rZSA9IHNldERpc2FibGVkU3RhdGUuYmluZChpbnN0YW5jZSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViID0gZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKCgpID0+IGZvcm1Db250cm9sLmRpc2FibGVkKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShpc0Rpc2FibGVkID0+IHtcclxuICAgICAgICAgIGludm9rZShpc0Rpc2FibGVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UHJvcGVydGllcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHJldHVybjtcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXMgPz8ge307XHJcbiAgICBpZiAodGhpcy52YWxpZFByb3BlcnRpZXMocHJvcGVydGllcykpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcGVydGllcykpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICBpZiAoa2V5IGluIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dD8uKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbnRyb2xWYWx1ZUFjY2Vzc29yKG9iajogYW55KTogb2JqIGlzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIG9iaiAmJlxyXG4gICAgICB0eXBlb2Ygb2JqLndyaXRlVmFsdWUgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgdHlwZW9mIG9iai5yZWdpc3Rlck9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgIHR5cGVvZiBvYmoucmVnaXN0ZXJPblRvdWNoZWQgPT09ICdmdW5jdGlvbidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVDb21wb25lbnRUeXBlKHR5cGU6IHN0cmluZyk6IFR5cGU8YW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRDb21wb25lbnQodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkUHJvcGVydGllcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ob3N0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2R5bmFtaWMtaG9zdC9keW5hbWljLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1ob3N0L2R5bmFtaWMtaG9zdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBaUIsU0FBUyxFQUFFLGdCQUFnQixFQUc3RCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFnQixvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFVdEMsTUFBTSxPQUFPLG9CQUFvQjtJQU1YO0lBQ1Y7SUFOUyxTQUFTLENBQU87SUFDMUIsVUFBVSxHQUErQixJQUFJLENBQUM7SUFDOUMsU0FBUyxDQUFhO0lBQ21DLFNBQVMsQ0FBb0I7SUFFL0YsWUFBb0IsUUFBa0IsRUFDNUIsYUFBNEI7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxhQUFhLEdB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QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO3dHQXJJVSxvQkFBb0I7NEZBQXBCLG9CQUFvQixtUUFJQyxnQkFBZ0IsZ0VDdEJsRCw4Q0FDQTs7NEZEaUJhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FJaEIsSUFBSTt5R0FHRyxTQUFTO3NCQUEzQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUM0RCxTQUFTO3NCQUExRSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsIElucHV0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEluamVjdG9yXHJcbiAgLCBUeXBlLCBDb21wb25lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1keW5hbWljLWhvc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWhvc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1ob3N0LmNvbXBvbmVudC5jc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljSG9zdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoXCJyZWdpc3RlclwiKSBjb21wb25lbnQhOiBhbnk7XHJcbiAgQElucHV0KCkgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGF0dXNTdWIpIHtcclxuICAgICAgdGhpcy5zdGF0dXNTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9ICAgIFxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcInByb3BlcnRpZXNcIl0pIHtcclxuICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5yZXNvbHZlQ29tcG9uZW50VHlwZSh0aGlzLmNvbXBvbmVudC5jb21wb25lbnQpO1xyXG4gICAgaWYgKGNvbXBvbmVudFR5cGUpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSwge1xyXG4gICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQmluZGFibGUoKSkge1xyXG4gICAgICAgIHRoaXMuc2V0QmluZGluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNldFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudFJlZigpOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFByaXZhdGUgTWVtYmVyc1xyXG5cclxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGlzQmluZGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuaXNJbnB1dFxyXG4gICAgICAmJiB0aGlzLmNvbXBvbmVudC5rZXlcclxuICAgICAgJiYgdGhpcy5pc0NvbnRyb2xWYWx1ZUFjY2Vzc29yKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QmluZGluZygpIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbXBvbmVudC5rZXk7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0NvbnRyb2xWYWx1ZUFjY2Vzc29yKGluc3RhbmNlKSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChrZXkpO1xyXG5cclxuICAgIGlmICghZm9ybUNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluc3RhbmNlLndyaXRlVmFsdWUoZm9ybUNvbnRyb2wudmFsdWUpO1xyXG5cclxuICAgIGluc3RhbmNlLnJlZ2lzdGVyT25DaGFuZ2UoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaW5zdGFuY2UucmVnaXN0ZXJPblRvdWNoZWQoKCkgPT4ge1xyXG4gICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZXREaXNhYmxlZFN0YXRlID0gaW5zdGFuY2Uuc2V0RGlzYWJsZWRTdGF0ZTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHNldERpc2FibGVkU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgaW52b2tlID0gc2V0RGlzYWJsZWRTdGF0ZS5iaW5kKGluc3RhbmNlKTtcclxuICAgICAgdGhpcy5zdGF0dXNTdWIgPSBmb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKCkgPT4gZm9ybUNvbnRyb2wuZGlzYWJsZWQpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKGlzRGlzYWJsZWQgPT4ge1xyXG4gICAgICAgICAgaW52b2tlKGlzRGlzYWJsZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBpbnZva2UoZm9ybUNvbnRyb2wuZGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcyA/PyB7fTtcclxuICAgIGlmICh0aGlzLnZhbGlkUHJvcGVydGllcyhwcm9wZXJ0aWVzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydGllc1trZXldO1xyXG4gICAgICAgIGlmIChrZXkgaW4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcclxuICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnblZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KVxyXG4gIHtcclxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XHJcbiAgICAgIHZhbHVlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dD8uKGtleSwgdik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWY/LnNldElucHV0Py4oa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29udHJvbFZhbHVlQWNjZXNzb3Iob2JqOiBhbnkpOiBvYmogaXMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgb2JqICYmXHJcbiAgICAgIHR5cGVvZiBvYmoud3JpdGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICB0eXBlb2Ygb2JqLnJlZ2lzdGVyT25DaGFuZ2UgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgdHlwZW9mIG9iai5yZWdpc3Rlck9uVG91Y2hlZCA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUNvbXBvbmVudFR5cGUodHlwZTogc3RyaW5nKTogVHlwZTxhbnk+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nbG9iYWxTZXJ2aWNlLmdldENvbXBvbmVudCh0eXBlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRQcm9wZXJ0aWVzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -14,7 +14,7 @@ export class ComputeService {
14
14
  return new Map();
15
15
  }
16
16
  addToCollection(collection, control, parentGroup, component) {
17
- if (this.programmability.isExpression(component.expression)) {
17
+ if (!collection.has(control) && this.canAddToCollection(component)) {
18
18
  collection.set(control, { component, parentGroup });
19
19
  }
20
20
  }
@@ -23,6 +23,10 @@ export class ComputeService {
23
23
  this.applyExpression(control, computeContext);
24
24
  });
25
25
  }
26
+ canAddToCollection(component) {
27
+ const expression = component?.expression;
28
+ return this.programmability.isExpression(expression);
29
+ }
26
30
  applyExpression(control, context) {
27
31
  const formGroup = context.parentGroup;
28
32
  const { key, expression, conditional } = context.component ?? {};
@@ -70,4 +74,4 @@ export class ComputeService {
70
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComputeService, decorators: [{
71
75
  type: Injectable
72
76
  }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.FormService }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBR2Y7SUFDRTtJQUZaLFlBQ1UsZUFBdUMsRUFDckMsV0FBd0I7UUFEMUIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNkIsRUFBRSxPQUF3QixFQUNuRSxXQUFzQixFQUFFLFNBQWM7UUFFeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQTZCO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQXdCLEVBQUUsT0FBdUI7UUFDdkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUV0QyxNQUFNLEVBQ0osR0FBRyxFQUNELFVBQVUsRUFDVixXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUU1QyxNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDO1FBRXJDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQ3ZHLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUNuQixPQUFPO3dCQUNULENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQzFGLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztvQkFDbkUsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLFVBQVUsRUFBRSxVQUFVO2lCQUN2QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBRS9CLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUU7d0JBQ3ZELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLE9BQU8sQ0FBQyxPQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQXhFVSxjQUFjOzRHQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0b0ZlZWxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZmVlbGFibGUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ29tcHV0ZVNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBDb21wdXRlQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwgcGFyZW50R3JvdXA6IEZvcm1Hcm91cCwgY29tcG9uZW50OiBhbnkpXHJcbiAge1xyXG4gICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihjb21wb25lbnQuZXhwcmVzc2lvbikpIHtcclxuICAgICAgY29sbGVjdGlvbi5zZXQoY29udHJvbCwgeyBjb21wb25lbnQsIHBhcmVudEdyb3VwIH0pO1xyXG4gICAgfSAgICAgIFxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXB1dGVDb250ZXh0LCBjb250cm9sKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlFeHByZXNzaW9uKGNvbnRyb2wsIGNvbXB1dGVDb250ZXh0KTsgICAgICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUV4cHJlc3Npb24oY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gY29udGV4dC5wYXJlbnRHcm91cDtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGtleVxyXG4gICAgICAsIGV4cHJlc3Npb25cclxuICAgICAgLCBjb25kaXRpb25hbCB9ID0gY29udGV4dC5jb21wb25lbnQgPz8ge307XHJcblxyXG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9IGNvbmRpdGlvbmFsPy5oaWRlO1xyXG5cclxuICAgIGNvbnN0IGxvZ0NvbXB1dGVkID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb2dyYW1tYWJpbGl0eS52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcHV0ZVwiLCBjb250cm9sLCB7IHZhbHVlOiB2YWx1ZSwgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLCBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBsb2dDb21wdXRlZCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UucGF0Y2goY29udHJvbCwgdmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xyXG4gICAgICAgIGNvbnN0IGFwcGx5RXhwcmVzc2lvbiA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZGVhY3RpdmF0ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNEZWFjdGl2YXRlID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgZGVhY3RpdmF0ZSwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBpZiAoISFpc0RlYWN0aXZhdGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgZXhwcmVzc2lvbiwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyh0b0ZlZWxhYmxlKHtcclxuICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXHJcbiAgICAgICAgICBkZWFjdGl2YXRlOiBkZWFjdGl2YXRlXHJcbiAgICAgICAgfSkpLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0IHtcclxuICBwYXJlbnRHcm91cDogRm9ybUdyb3VwO1xyXG4gIGNvbXBvbmVudDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb21wdXRlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PjtcclxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvY29tcHV0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBR2Y7SUFDRTtJQUZaLFlBQ1UsZUFBdUMsRUFDckMsV0FBd0I7UUFEMUIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFtQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNkIsRUFBRSxPQUF3QixFQUNuRSxXQUFzQixFQUFFLFNBQWM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUE2QjtRQUMzQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQWM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQztRQUN6QyxPQUFP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Yzs7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4vcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRvRmVlbGFibGUgfSBmcm9tICcuLi91dGlscy9mZWVsYWJsZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb21wdXRlU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2xsZWN0aW9uKCk6IENvbXB1dGVDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgQ29tcHV0ZUNvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogQ29tcHV0ZUNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gICAgLCBwYXJlbnRHcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSlcclxuICB7XHJcbiAgICBpZiAoIWNvbGxlY3Rpb24uaGFzKGNvbnRyb2wpICYmIHRoaXMuY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sbGVjdGlvbi5zZXQoY29udHJvbCwgeyBjb21wb25lbnQsIHBhcmVudEdyb3VwIH0pO1xyXG4gICAgfSAgICAgIFxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbXB1dGVDb2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXB1dGVDb250ZXh0LCBjb250cm9sKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlFeHByZXNzaW9uKGNvbnRyb2wsIGNvbXB1dGVDb250ZXh0KTsgICAgICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjb21wb25lbnQ/LmV4cHJlc3Npb247XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUV4cHJlc3Npb24oY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gY29udGV4dC5wYXJlbnRHcm91cDtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGtleVxyXG4gICAgICAsIGV4cHJlc3Npb25cclxuICAgICAgLCBjb25kaXRpb25hbCB9ID0gY29udGV4dC5jb21wb25lbnQgPz8ge307XHJcblxyXG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9IGNvbmRpdGlvbmFsPy5oaWRlO1xyXG5cclxuICAgIGNvbnN0IGxvZ0NvbXB1dGVkID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb2dyYW1tYWJpbGl0eS52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcHV0ZVwiLCBjb250cm9sLCB7IHZhbHVlOiB2YWx1ZSwgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLCBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBsb2dDb21wdXRlZCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UucGF0Y2goY29udHJvbCwgdmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xyXG4gICAgICAgIGNvbnN0IGFwcGx5RXhwcmVzc2lvbiA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oZGVhY3RpdmF0ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNEZWFjdGl2YXRlID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgZGVhY3RpdmF0ZSwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBpZiAoISFpc0RlYWN0aXZhdGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgZXhwcmVzc2lvbiwgeyBjYWNoZWFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyh0b0ZlZWxhYmxlKHtcclxuICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXHJcbiAgICAgICAgICBkZWFjdGl2YXRlOiBkZWFjdGl2YXRlXHJcbiAgICAgICAgfSkpLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYXBwbHlFeHByZXNzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhdGgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldFBhdGgoY29udHJvbCkuam9pbihcIi5cIik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0IHtcclxuICBwYXJlbnRHcm91cDogRm9ybUdyb3VwO1xyXG4gIGNvbXBvbmVudDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb21wdXRlQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXB1dGVDb250ZXh0PjtcclxuIl19