@wavemaker/app-ng-runtime 11.15.4-rc.250 → 11.15.5-rc.253

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 (53) hide show
  1. package/components/base/bundles/index.umd.js +4 -13
  2. package/components/base/esm2022/utils/widget-utils.mjs +5 -4
  3. package/components/base/esm2022/widgets/common/base/base.component.mjs +1 -11
  4. package/components/base/fesm2022/index.mjs +4 -13
  5. package/components/base/fesm2022/index.mjs.map +1 -1
  6. package/components/containers/tabs/bundles/index.umd.js +1 -1
  7. package/components/containers/tabs/esm2022/tabs.animator.mjs +2 -2
  8. package/components/containers/tabs/fesm2022/index.mjs +1 -1
  9. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  10. package/components/data/form/bundles/index.umd.js +6 -3
  11. package/components/data/form/esm2022/form.component.mjs +5 -2
  12. package/components/data/form/esm2022/live-form/live-form.directive.mjs +3 -3
  13. package/components/data/form/fesm2022/index.mjs +6 -3
  14. package/components/data/form/fesm2022/index.mjs.map +1 -1
  15. package/components/data/form/live-form/live-form.directive.d.ts +1 -1
  16. package/components/data/list/bundles/index.umd.js +6 -0
  17. package/components/data/list/esm2022/list.component.mjs +7 -1
  18. package/components/data/list/fesm2022/index.mjs +6 -0
  19. package/components/data/list/fesm2022/index.mjs.map +1 -1
  20. package/components/data/pagination/bundles/index.umd.js +45 -7
  21. package/components/data/pagination/esm2022/pagination.component.mjs +46 -8
  22. package/components/data/pagination/fesm2022/index.mjs +45 -7
  23. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  24. package/components/data/pagination/pagination.component.d.ts +1 -0
  25. package/components/data/table/bundles/index.umd.js +228 -20
  26. package/components/data/table/esm2022/table-column/table-column.directive.mjs +6 -1
  27. package/components/data/table/esm2022/table-cud.directive.mjs +14 -3
  28. package/components/data/table/esm2022/table-filter.directive.mjs +6 -1
  29. package/components/data/table/esm2022/table.component.mjs +206 -19
  30. package/components/data/table/fesm2022/index.mjs +229 -21
  31. package/components/data/table/fesm2022/index.mjs.map +1 -1
  32. package/components/data/table/table.component.d.ts +16 -1
  33. package/core/bundles/index.umd.js +7 -1
  34. package/core/esm2022/utils/dom.mjs +4 -2
  35. package/core/esm2022/utils/utils.mjs +5 -1
  36. package/core/fesm2022/index.mjs +7 -1
  37. package/core/fesm2022/index.mjs.map +1 -1
  38. package/npm-shrinkwrap.json +2 -2
  39. package/package-lock.json +2 -2
  40. package/package.json +1 -1
  41. package/runtime/base/bundles/index.umd.js +45 -12
  42. package/runtime/base/components/app-component/app.component.d.ts +1 -1
  43. package/runtime/base/esm2022/components/app-component/app.component.mjs +23 -12
  44. package/runtime/base/esm2022/guards/role.guard.mjs +2 -2
  45. package/runtime/base/esm2022/services/app.manager.service.mjs +23 -1
  46. package/runtime/base/fesm2022/index.mjs +45 -12
  47. package/runtime/base/fesm2022/index.mjs.map +1 -1
  48. package/runtime/base/services/app.manager.service.d.ts +5 -0
  49. package/scripts/datatable/datatable.js +282 -44
  50. package/transpiler/bundles/index.umd.js +3 -0
  51. package/transpiler/esm2022/build.mjs +4 -1
  52. package/transpiler/fesm2022/index.mjs +3 -0
  53. package/transpiler/fesm2022/index.mjs.map +1 -1
@@ -370,8 +370,14 @@ export class ListComponent extends StylableComponent {
370
370
  this.$ulEle.sortable('disable');
371
371
  }
372
372
  }
373
+ else if (key === 'multiselect') {
374
+ // multiselect binding is evaluated after ngAfterViewInit, so initial value may be incorrect.
375
+ // Reassigning here to ensure selectedItemWidgets matches the updated multiselect value.
376
+ this.selectedItemWidgets = nv ? [] : {};
377
+ }
373
378
  else if (key === 'allowpagesizechange') {
374
379
  this.allowpagesizechange = nv;
380
+ this.dataNavigator.allowpagesizechange = nv;
375
381
  }
376
382
  else if (key === 'pagesizeoptions') {
377
383
  this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
@@ -1250,4 +1256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1250
1256
  type: ViewChildren,
1251
1257
  args: [ListItemDirective]
1252
1258
  }] } });
1253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9saXN0L3NyYy9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxFQUVuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUNILFVBQVUsRUFDVixlQUFlLEVBQ2YsR0FBRyxFQUNILFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FB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LHlCQUF5QjtnQkFDTCxhQUFhO3NCQUE5QyxlQUFlO3VCQUFDLGVBQWU7Z0JBRUEsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0csU0FBUztzQkFBekMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgY29uZmlndXJlRG5ELFxuICAgIERFQk9VTkNFX1RJTUVTLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRPcmRlcmVkRGF0YXNldCxcbiAgICBncm91cERhdGEsXG4gICAgaGFuZGxlSGVhZGVyQ2xpY2ssXG4gICAgTkFWSUdBVElPTl9UWVBFLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBzdHlsZXIsXG4gICAgVGV4dENvbnRlbnREaXJlY3RpdmUsXG4gICAgVG9EYXRlUGlwZSxcbiAgICB0b2dnbGVBbGxIZWFkZXJzLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLFxuICAgIFdpZGdldFJlZlxufSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgIEFwcCxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBEYXRhU291cmNlLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIGlzT2JqZWN0LFxuICAgIG5vb3AsXG4gICAgUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgc3dpdGNoQ2xhc3Ncbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuaW1wb3J0IHtCdXR0b25Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0L2J1dHRvbic7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9saXN0LnByb3BzJztcbmltcG9ydCB7TGlzdEl0ZW1EaXJlY3RpdmV9IGZyb20gJy4vbGlzdC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0xpc3RBbmltYXRvcn0gZnJvbSAnLi9saXN0LmFuaW1hdG9yJztcbmltcG9ydCB7XG4gICAgY2xvbmUsXG4gICAgY2xvbmVEZWVwLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGhhcyxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNFcXVhbCxcbiAgICBpc051bWJlcixcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBsYXN0LFxuICAgIG1heCxcbiAgICBtaW4sXG4gICAgcHVsbEFsbFdpdGgsXG4gICAgcHVsbEF0LFxuICAgIHJlbW92ZSxcbiAgICBzb21lLFxuICAgIHRvTnVtYmVyXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtbGl2ZWxpc3QgYXBwLXBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWxpc3QnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRleHRDb250ZW50RGlyZWN0aXZlLCBQYWdpbmF0aW9uQ29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21MaXN0XScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoTGlzdENvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbGlzdFRlbXBsYXRlJykgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2xpc3RMZWZ0QWN0aW9uVGVtcGxhdGUnKSBsaXN0TGVmdEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkKCdsaXN0UmlnaHRBY3Rpb25UZW1wbGF0ZScpIGxpc3RSaWdodEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkcmVuKEJ1dHRvbkNvbXBvbmVudCkgYnRuQ29tcG9uZW50cztcblxuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCkgZGF0YU5hdmlnYXRvcjtcbiAgICBAVmlld0NoaWxkcmVuKExpc3RJdGVtRGlyZWN0aXZlKSBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT47XG4gICAgcHVibGljIG5vRGF0YUZvdW5kOiBib29sZWFuO1xuICAgIHB1YmxpYyBsYXN0U2VsZWN0ZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICBwdWJsaWMgZmllbGREZWZzOiBBcnJheTxhbnk+O1xuICAgIHB1YmxpYyBkaXNhYmxlaXRlbTtcbiAgICBwdWJsaWMgbmF2aWdhdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBuYXZpZ2F0aW9uYWxpZ246IHN0cmluZztcbiAgICBwdWJsaWMgcGFnZXNpemU6IG51bWJlcjtcbiAgICBwdWJsaWMgZGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBtdWx0aXNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VsZWN0Zmlyc3RpdGVtOiBib29sZWFuO1xuICAgIHB1YmxpYyBvcmRlcmJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGxvYWRpbmdpY29uOiBzdHJpbmc7XG4gICAgcHVibGljIHBhZ2luYXRpb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBvbmRlbWFuZG1lc3NhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgbG9hZGluZ2RhdGFtc2c6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0aW9ubGltaXQ6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5mU2Nyb2xsOiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVyZW9yZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBpdGVtc3BlcnJvdzogc3RyaW5nO1xuICAgIHB1YmxpYyBpdGVtY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtV2lkZ2V0czogQXJyYXk8V2lkZ2V0UmVmPiB8IFdpZGdldFJlZjtcbiAgICBwdWJsaWMgdmFyaWFibGVJbmZsaWdodDtcbiAgICBwdWJsaWMgbmFtZTtcbiAgICBwdWJsaWMgY3VycmVudFBhZ2U7XG4gICAgcHVibGljIGRpcmVjdGlvbjtcbiAgICBwdWJsaWMgdGFiaW5kZXg7XG4gICAgcHVibGljIGhhbmRsZUhlYWRlckNsaWNrOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgdG9nZ2xlQWxsSGVhZGVyczogdm9pZDtcbiAgICBwdWJsaWMgZ3JvdXBieTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb2xsYXBzaWJsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkYXRlUGlwZTogVG9EYXRlUGlwZTtcbiAgICBwdWJsaWMgYmluZGl0ZW1jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBiaW5kZGlzYWJsZWl0ZW06IHN0cmluZztcbiAgICBwdWJsaWMgYmluZGRhdGFzZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgbW91c2VFbnRlckNCOiBzdHJpbmc7XG4gICAgcHVibGljIG1vdXNlTGVhdmVDQjogc3RyaW5nO1xuICAgIHB1YmxpYyBwdWxsdG9yZWZyZXNoOiBib29sZWFuO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzdWJoZWFkaW5nOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBsaXN0Y2xhc3M6IGFueTtcbiAgICBwdWJsaWMgc3RhdGVoYW5kbGVyOiBhbnk7XG4gICAgcHVibGljIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyB0aXRsZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGFsbG93cGFnZXNpemVjaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcmV2UGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHVibGljIHVwZGF0ZWRQYWdlU2l6ZTtcbiAgICBwdWJsaWMgYWN0dWFsUGFnZVNpemU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIHByaXZhdGUgaXRlbXNQZXJSb3dDbGFzczogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlyc3RTZWxlY3RlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2g6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG5hdmlnYXRvclJlc3VsdFdhdGNoOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBuYXZDb250cm9sczogc3RyaW5nO1xuICAgIHByaXZhdGUgb25EZW1hbmRMb2FkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBzaG93TmF2aWdhdGlvbjogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlb3JkZXJQcm9wczogYW55O1xuICAgIHByaXZhdGUgYXBwOiBhbnk7XG4gICAgcHJpdmF0ZSBhcHBEZWZhdWx0czogYW55O1xuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmU7XG4gICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlO1xuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgYmluZGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICBwcml2YXRlIG1hdGNoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlZm9ybWF0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBncm91cGVkRGF0YTogYW55O1xuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByaXZhdGUgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcHJvcHNJbml0UHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuICAgIHByaXZhdGUgJHVsRWxlOiBhbnk7XG4gICAgcHJpdmF0ZSBfbGlzdEFuaW1hdG9yOiBMaXN0QW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfbGlzdGVuZXJEZXN0cm95ZXJzOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGVib3VuY2VkRmV0Y2hOZXh0RGF0YXNldE9uU2Nyb2xsOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIGlzRGF0YUNoYW5nZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0xpc3RFbGVtZW50TW92YWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFyaWFUZXh0OiBTdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQ7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0O1xuICAgIHByaXZhdGUgbGlzdEl0ZW1zQ2hhbmdlc1N1YnNjcmlwdGlvbjogYW55O1xuICAgIHByaXZhdGUgYm91bmRDbGlja0hhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHRvdWNoaW5nO1xuICAgIHByaXZhdGUgdG91Y2hlZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGRhdGVQaXBlOiBUb0RhdGVQaXBlLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnaXRlbWNsYXNzLmJpbmQnKSBiaW5kaXRlbWNsYXNzOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc2FibGVpdGVtLmJpbmQnKSBiaW5kZGlzYWJsZWl0ZW06IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgYmluZGRhdGFzZXQ6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNvdXJjZS5iaW5kJykgYmluZGRhdGFzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW91c2VlbnRlci5ldmVudCcpIG1vdXNlRW50ZXJDQjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtb3VzZWxlYXZlLmV2ZW50JykgbW91c2VMZWF2ZUNCOiBzdHJpbmcsXG4gICAgICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcbiAgICAgICAgY29uc3QgcHJvcHNJbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpO1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCwgcHJvcHNJbml0UHJvbWlzZSk7XG4gICAgICAgIHRoaXMucHJvcHNJbml0UHJvbWlzZSA9IHByb3BzSW5pdFByb21pc2U7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLlNIRUxMKTtcbiAgICAgICAgdGhpcy5jZFJlZiA9IGNkUmVmO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5kYXRlUGlwZSA9IGRhdGVQaXBlO1xuICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UgPSBzdGF0ZVBlcnNpc3RlbmNlO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlID0gcGFnaW5hdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmJpbmRpdGVtY2xhc3MgPSBiaW5kaXRlbWNsYXNzO1xuICAgICAgICB0aGlzLmJpbmRkaXNhYmxlaXRlbSA9IGJpbmRkaXNhYmxlaXRlbTtcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLm1vdXNlRW50ZXJDQiA9IG1vdXNlRW50ZXJDQjtcbiAgICAgICAgdGhpcy5tb3VzZUxlYXZlQ0IgPSBtb3VzZUxlYXZlQ0I7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzb3VyY2UgPSBiaW5kZGF0YXNvdXJjZTtcblxuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5hcHBEZWZhdWx0cyA9IGFwcERlZmF1bHRzO1xuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gIWJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLnRpdGxlSWQgPSAnd21saXN0LScgKyBnZW5lcmF0ZUdVSWQoKTtcblxuICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJEZXN0cm95ZXJzID0gW1xuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdjaGVjay1zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2VOYW1lID0gZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAvLyBpbiBQcmVmYWJzLCB0aGlzLmRhdGFzb3VyY2UgaXMgbm90IHJlc29sdmVkIGF0IHRoZSB0aW1lIG9mIHZhcmlhYmxlIGludm9jYXRpb24sIHNvIGFkZGl0aW9uYWwgY2hlY2sgaXMgcmVxdWlyZWQuXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlTmFtZSA9IGV4dHJhY3REYXRhU291cmNlTmFtZSh0aGlzLmJpbmRkYXRhc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdldChvcHRpb25zLCAndmFyaWFibGUubmFtZScpICE9PSBkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMob3B0aW9ucyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgdGhpcy5oYW5kbGVMb2FkaW5nLmJpbmQodGhpcykpLFxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdzZXR1cC1jdWQtbGlzdGVuZXInLCBwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSAhPT0gcGFyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0RlcGVuZGVudCA9IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRpdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5faXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLl9pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RlZGl0ZW0oaXRlbXMpIHtcbiAgICAgICAgdGhpcy5faXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuXG4gICAgICAgIGlmIChpc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuc2VsZWN0SXRlbShpdGVtKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGxpc3Qgb2Ygd2lkZ2V0cyBwcmVzZW50IG9uIGxpc3QgaXRlbSBieSBjb25zaWRlcmluZyBuYW1lIGFuZCBpbmRleCBvZiB0aGUgd2lkZ2V0LlxuICAgICAqIElmIHdlIGRpZCdudCBwYXNzIGluZGV4LCBpdCByZXR1cm5zIGFycmF5IG9mIGFsbCB0aGUgd2lkZ2V0cyB3aGljaCBhcmUgbWF0Y2hpbmcgdG8gd2lkZ2V0IG5hbWVcbiAgICAgKiBAcGFyYW0gd2lkZ3RlTmFtZTogTmFtZSBvZiB0aGUgd2lkZ2V0XG4gICAgICogQHBhcmFtIGluZGV4OiBJbmRleCBvZiB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIGdldFdpZGdldHMod2lkZ3RlTmFtZTogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBsZXQgJHRhcmdldDtcbiAgICAgICAgY29uc3QgcmV0VmFsID0gW107XG5cbiAgICAgICAgaWYgKCF3aWRndGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRGVmaW5lZChpbmRleCkpIHtcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5saXN0SXRlbXMudG9BcnJheSgpLCAoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0KGVsLmN1cnJlbnRJdGVtV2lkZ2V0cywgd2lkZ3RlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnB1c2goJHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXRWYWw7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSAraW5kZXggfHwgMDtcblxuICAgICAgICAkdGFyZ2V0ID0gZ2V0KHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKSwgaW5kZXgpO1xuXG4gICAgICAgIGlmICgkdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gW2dldCgkdGFyZ2V0LmN1cnJlbnRJdGVtV2lkZ2V0cywgd2lkZ3RlTmFtZSldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsaXN0aXRlbSByZWZlcmVuY2UgYnkgaW5kZXggdmFsdWUuIFRoaXMgcmVmZXJzIHRvIHRoZSBzYW1lIG1ldGhvZCBnZXRMaXN0SXRlbUJ5SW5kZXguXG4gICAgcHVibGljIGdldEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaW5kZXggb2YgbGlzdEl0ZW0obGlzdEl0ZW1EaXJlY3RpdmUgLyBsaXN0SXRlbU9iamVjdClcbiAgICAgKiBJZiBpdGVtIGlzIGEgZGlyZWN0aXZlLCBpbmRleCBpcyBmZXRjaGVkIGZyb20gbGlzdEl0ZW1zXG4gICAgICogSWYgaXRlbSBpcyBhbiBvYmplY3QsIGluZGV4IGlzIGZldGNoZWQgZnJvbSBmaWVsZERlZnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW5kZXgoaXRlbTogYW55KSB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExpc3RJdGVtSW5kZXgoaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmllbGREZWZzLmZpbmRJbmRleCgob2JqKSA9PiBpc0VxdWFsKG9iaiwgaXRlbSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICBwdWJsaWMgZ2V0VXBkYXRlZFBhZ2VTaXplKCkge1xuICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlZFBhZ2VTaXplO1xuICAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyV01FdmVudCgnaW5zZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0Um93KGl0ZW0/KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgbGV0IGxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKGl0ZW0pLml0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXTUV2ZW50KCd1cGRhdGUnLCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoaXRlbT8pIHtcbiAgICAgICAgdGhpcy5lZGl0Um93KGl0ZW0pO1xuICAgIH1cblxuICAgIGRlbGV0ZVJvdyhpdGVtPykge1xuICAgICAgICBpZiAodGhpcy5faXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgIGxldCBsaXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbChpdGVtKS5pdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyV01FdmVudCgnZGVsZXRlJywgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlKGl0ZW0/KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlUm93KGl0ZW0pO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChkYXRhLnZhcmlhYmxlLCBkYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzc3Ml0gVXBkYXRlIG5vZGF0YWZvdW5kIGZsYWcgb25jZSB0aGUgcmVzcG9uc2UgaXMgcmVjaWV2ZWQgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxFbGUgPSBkYXRhLmRhdGE/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0b3RhbEVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IHRvdGFsRWxlID09PSAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvdGFsZWxlbWVudHMgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBpc0VtcHR5KGRhdGEuZGF0YT8uZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckxpc3RJdGVtU2VsZWN0aW9uKCRlbDogSlF1ZXJ5PEhUTUxFbGVtZW50PiwgJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoJGVsICYmICRlbFswXSkge1xuICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1Db250ZXh0ID0gJGVsLmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcpO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBjbGljayBldmVudCBvbmx5IGlmIHRoZSBsaXN0IGl0ZW0gaXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBsaXN0LlxuICAgICAgICAgICAgaWYgKGxpc3RJdGVtQ29udGV4dC5saXN0Q29tcG9uZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljaygkZXZlbnQsIGxpc3RJdGVtQ29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9ybSBvdGhlciBkYXRhIHdpZGdldHMgbGlrZSB0YWJsZS5cbiAgICBwdWJsaWMgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFtEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSXS5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oJGV2ZW50LCBhY3Rpb246IHN0cmluZykge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICgkZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgJGV2ZW50LmtleUNvZGUgIT09IDkgJiYgISgoJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zvcm0tY29udHJvbCcpIHx8ICRldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdub3RlLWVkaXRhYmxlJykpICYmICRldmVudC5rZXlDb2RlID09PSAzMikpIHtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1EaXJlY3RpdmU+ID0gdGhpcy5saXN0SXRlbXM7XG5cbiAgICAgICAgbGV0IHByZXNlbnRJbmRleDogbnVtYmVyID0gdGhpcy5nZXRMaXN0SXRlbUluZGV4KHRoaXMubGFzdFNlbGVjdGVkSXRlbSk7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXg6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEl0ZW1JbmRleCh0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdENvdW50OiBudW1iZXIgPSBpc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA6IChpc09iamVjdCh0aGlzLnNlbGVjdGVkaXRlbSkgPyAxIDogMCk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnc2VsZWN0UHJldicpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHByZXNlbnRJbmRleCA8PSBmaXJzdEluZGV4KSAmJiB0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5sYXN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVzZW50SW5kZXggPiBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdzZWxlY3ROZXh0Jykge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPCBsaXN0SXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHByZXNlbnRJbmRleCA+PSBmaXJzdEluZGV4KSAmJiB0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5sYXN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVzZW50SW5kZXggPCBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdmb2N1c1ByZXYnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSkge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8PSAwID8gMCA6IChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldkVsdCA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIHByZXZFbHQubmF0aXZlRWxlbWVudC5iZWZvcmUodGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgW2FycltwcmVzZW50SW5kZXggLSAxXSwgYXJyW3ByZXNlbnRJbmRleF1dID0gW2FycltwcmVzZW50SW5kZXhdLCBhcnJbcHJlc2VudEluZGV4IC0gMV1dO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLnJlc2V0KGFycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IFwic2VsZWN0ZWQgXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8PSAwID8gMCA6IChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2ZvY3VzTmV4dCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gcHJlc2VudEluZGV4IDwgKGxpc3RJdGVtcy5sZW5ndGggLSAxKSA/IChwcmVzZW50SW5kZXgpIDogKGxpc3RJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID09PSB0aGlzLmxpc3RJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbHQgPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBuZXh0RWx0Lm5hdGl2ZUVsZW1lbnQuYWZ0ZXIodGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgW2FycltwcmVzZW50SW5kZXhdLCBhcnJbcHJlc2VudEluZGV4ICsgMV1dID0gW2FycltwcmVzZW50SW5kZXggKyAxXSwgYXJyW3ByZXNlbnRJbmRleF1dO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLnJlc2V0KGFycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAyO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSBwcmVzZW50SW5kZXggPCAobGlzdEl0ZW1zLmxlbmd0aCAtIDEpID8gKHByZXNlbnRJbmRleCArIDEpIDogKGxpc3RJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbnRlciBjbGljayBpcyBwcmVzc2VkIG9uIHRoZSBpdGVtIHdoaWNoIGlzIG5vdCB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLCB0aGUgZmluZCB0aGUgaXRlbSBmcm9tIHdoaWNoIHRoZSBldmVudCBpcyBvcmlnaW5hdGVkLlxuICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA9PT0gLTEgfHwgISQoJGV2ZW50LnRhcmdldCkuY2xvc2VzdCh0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkbGkgPSAkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2xpLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkdWwgPSAkbGkuY2xvc2VzdCgndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9ICR1bC5maW5kKCdsaS5hcHAtbGlzdC1pdGVtJykuaW5kZXgoJGxpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2soJGV2ZW50LCB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdzcGFjZScpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSA9ICF0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlO1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljaygkZXZlbnQsIHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gYEl0ZW0gJHt0aGlzLmN1cnJlbnRJbmRleH0gZ3JhYmJlZCwgY3VycmVudCBwb3NpdGlvbiBgO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLmRhdGEoJ29sZEluZGV4JywgcHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IGBJdGVtICR7dGhpcy5jdXJyZW50SW5kZXh9IGRyb3BwZWQsIGZpbmFsIHBvc2l0aW9uIGA7XG4gICAgICAgICAgICAgICAgdGhpcy5vblVwZGF0ZSgkZXZlbnQsIHVuZGVmaW5lZCwgcHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRBY3R1YWxQYWdlU2l6ZSgpICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IDIwO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgaWYgKCFudiAmJiB0aGlzLmJpbmRkYXRhc291cmNlICYmICF0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uRGF0YVNldENoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXNvdXJjZScpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTZXRDaGFuZ2UodGhpcy5kYXRhc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNzaWNcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIG52LCBvdik7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvblR5cGVDaGFuZ2UobnYpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0aW9uQ2xhc3MgPSB0aGlzLnBhZ2luYXRpb25jbGFzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpdGVtc3BlcnJvdycpIHtcbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwdWxsdG9yZWZyZXNoJyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdwdWxsVG9SZWZyZXNoOmVuYWJsZScpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1B1bGxUb1JlZnJlc2goKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdpbmF0aW9uY2xhc3MnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkaW5nIHNldFRpbWVvdXQgYmVjYXVzZSBpbiBwYWdpbmF0aW9uIGNvbXBvbmVudCB1cGRhdGVOYXZTaXplIG1ldGhvZCBpcyBvdmVycmlkaW5nIG5hdmlnYXRpb25jbGFzc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRpb25DbGFzcyA9IG52KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdlc2l6ZScpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSBudjsgLy8gbWFpbnRhaW4gZGVmYXVsdCBwYWdlIHNpemUgdG8gY2FsY3VsYXRlIHBhZ2VzaXplIG9wdGlvbnNcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2VTaXplKG52KVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2VuYWJsZXJlb3JkZXInKSB7XG4gICAgICAgICAgICBpZiAobnYgJiYgdGhpcy4kdWxFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZURuRCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLnNvcnRhYmxlKCdlbmFibGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4kdWxFbGUgJiYgIW52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLnNvcnRhYmxlKCdkaXNhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYWxsb3dwYWdlc2l6ZWNoYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IG52O1xuICAgICAgICB9IGVsc2UgaWYoa2V5ID09PSAncGFnZXNpemVvcHRpb25zJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG92KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG52KTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHRoaXMuc2V0RGVmYXVsdFBhZ2VTaXplKG52KVxuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRQYWdlU2l6ZShudjogYW55KXtcbiAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgIG52ID0gZ2V0KHdpZGdldFN0YXRlLCAncGFnZXNpemUnKTtcbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjsgLy8gdXBkYXRpbmcgdGhlIGRlZmF1bHQgcGFnZXNpemUgdG8gdXNlciBzZWxlY3RlZCBwYWdlc2l6ZVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZXNpemVvcHRpb25zKSB7XG4gICAgICAgICAgICBudiA9IHRoaXMucGFnZXNpemVvcHRpb25zPy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGEgLSBiKVswXVxuICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG52O1xuICAgICAgICB9XG4gICAgICAgICBpZih0aGlzLmlzUGFnZVNpemVPcHRpb25zQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYikgfHwgW107XG4gICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRhdGFOYXZpZ2F0b3IuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICB9XG4gICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZWRQYWdlU2l6ZSA9IG52O1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IudXBkYXRlZFBhZ2VTaXplID0gbnY7XG5cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYXhSZXN1bHRzOiBudlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgaWYodGhpcy5kYXRhc291cmNlKXtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUGFnZVNpemVPcHRpb25zQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuICFpc0VxdWFsKHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucywgdGhpcy5wYWdlc2l6ZW9wdGlvbnMpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VTaXplKHBhZ2VzaXplOiBudW1iZXIpIHtcbiAgICAgICAgaWYoIXRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAhcGFnZXNpemUpIHJldHVybjtcblxuICAgICAgICBpZihwYWdlc2l6ZSA8IHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnNbMF0gfHwgcGFnZXNpemUgPiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zW3RoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIHx8ICF0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKE51bWJlcihwYWdlc2l6ZSkpKSB7XG4gICAgICAgICAgICBwYWdlc2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnNbMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9uUGFnZVNpemVDaGFuZ2UodW5kZWZpbmVkLCBwYWdlc2l6ZSk7XG4gICAgfVxuXG4gICAgc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJcIjtcbiAgICAgICAgY29uc3QgdW5pcXVlTnVtYmVycyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gL14tP1xcZCskLy50ZXN0KHYpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4gTWF0aC5hYnMocGFyc2VJbnQodiwgMTApKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuaXF1ZU51bWJlcnMuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSXRlbUNsaWNrKGV2dDogYW55LCAkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgIGxldCBzZWxlY3RDb3VudDogbnVtYmVyO1xuXG4gICAgICAgIGlmICghJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbSB8fCAkbGlzdEl0ZW07XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHNlbGVjdENvdW50IHZhbHVlIGJhc2VkIG51bWJlciBvZiBpdGVtcyBzZWxlY3RlZC5cbiAgICAgICAgICAgIHNlbGVjdENvdW50ID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiAoaXNPYmplY3QodGhpcy5zZWxlY3RlZGl0ZW0pID8gMSA6IDApO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGluZyBtdWx0aXNlbGVjdCBmb3IgbW9iaWxlIGRldmljZVxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QgJiYgaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpIHx8ICRsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGV2dC5jdHJsS2V5IHx8IGV2dC5tZXRhS2V5KSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tTZWxlY3Rpb25MaW1pdChzZWxlY3RDb3VudCkgfHwgJGxpc3RJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudDogZXZ0fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQuc2hpZnRLZXkgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9ICRsaXN0SXRlbS5jb250ZXh0LmluZGV4O1xuICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbS5jb250ZXh0LmluZGV4O1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgZmlyc3QgaXMgZ3JlYXRlciB0aGFuIGxhc3QsIHRoZW4gc3dhcCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgPiBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBbZmlyc3QsIGZpcnN0ID0gbGFzdF1bMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQobGFzdCAtIGZpcnN0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKCgkbGlJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkbGlJdGVtLmNvbnRleHQuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gZmlyc3QgJiYgaW5kZXggPD0gbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISRsaXN0SXRlbS5pc0FjdGl2ZSB8fCBzZWxlY3RDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gJGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtcHR5IHRoZSBsaXN0IGNvbnRlbnQgb24gY2xlYXJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZXNlbGVjdHMgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgKiBAcGFyYW0gdmFsOiBpbmRleCB8IG1vZGVsIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0SXRlbSh2YWw6IGFueSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKHZhbCk7XG4gICAgICAgIGlmIChsaXN0SXRlbSAmJiBsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZWxlY3RzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKHZhbCwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWwpO1xuICAgICAgICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgdGhlIGVsZW1lbnQuXG4gICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVIZWFkZXJDbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbCh0aGlzLmRhdGFOYXZpZ2F0b3IsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSwgdGhpcyk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcyA9IHtcbiAgICAgICAgICAgIG1pbkluZGV4OiBudWxsLFxuICAgICAgICAgICAgbWF4SW5kZXg6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgdGhpcy5wcm9wc0luaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFVwQ1VESGFuZGxlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IHRoaXMubXVsdGlzZWxlY3QgPyBbXSA6IHt9O1xuICAgICAgICAgICAgdmFyIGVsZSA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVyZW9yZGVyICYmICF0aGlzLmdyb3VwYnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGUucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwYnkgJiYgdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSGVhZGVyQ2xpY2sgPSBoYW5kbGVIZWFkZXJDbGljaztcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUFsbEhlYWRlcnMgPSB0b2dnbGVBbGxIZWFkZXJzLmJpbmQodW5kZWZpbmVkLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuICAgICAgICBjb25zdCAkdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICBzdHlsZXIoJHVsIGFzIEhUTUxFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5TQ1JPTExBQkxFX0NPTlRBSU5FUik7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIGlmICgkdWwpIHtcbiAgICAgICAgICAgICAgICAkdWwuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgaWYgKCR1bCkge1xuICAgICAgICAgICAgICAgICR1bC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5fbGlzdEFuaW1hdG9yICYmIHRoaXMuX2xpc3RBbmltYXRvci4kYnRuU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0QW5pbWF0b3IuJGJ0blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fbGlzdEFuaW1hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIGFsbCBhcHAgc3Vic2NyaXB0aW9uc1xuICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJEZXN0cm95ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lckRlc3Ryb3llcnMuZm9yRWFjaChkID0+IGQgJiYgZCgpKTtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIG5hdmlnYXRvciB3YXRjaGVzXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gbGlzdEl0ZW1zIGNoYW5nZXNcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXNDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtc0NoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgbmF0aXZlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIGNvbnN0IHVsRWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAodWxFbGVtZW50ICYmIHRoaXMuYm91bmRDbGlja0hhbmRsZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdWxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJvdW5kQ2xpY2tIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogRGVzdHJveSBqUXVlcnkgc29ydGFibGUgd2lkZ2V0XG4gICAgICAgIGlmICh0aGlzLiR1bEVsZSAmJiB0aGlzLiR1bEVsZS5zb3J0YWJsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5zb3J0YWJsZSgnZGVzdHJveScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgZHVyaW5nIGRlc3Ryb3lcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJHVsRWxlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgUXVlcnlMaXN0IHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnRuQ29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhpcy5idG5Db21wb25lbnRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgVmlld0NoaWxkIGFuZCBDb250ZW50Q2hpbGQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RUZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdExlZnRBY3Rpb25UZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdFJpZ2h0QWN0aW9uVGVtcGxhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgYWxsIGRhdGEgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBlZERhdGEgPSBudWxsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgYWRkIGl0ZW0gZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgY29uc3QgJGFkZEl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYWRkLWxpc3QtaXRlbVwiKVswXTtcbiAgICAgICAgaWYgKCRhZGRJdGVtICYmIHRoaXMuYm91bmRBZGRJdGVtSGFuZGxlcikge1xuICAgICAgICAgICAgJGFkZEl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kQWRkSXRlbUhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5ib3VuZEFkZEl0ZW1IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogTnVsbGlmeSBjbG9zdXJlcyBhbmQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcyA9IG51bGw7XG5cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgLy8gdGFwIGFuZCBkb3VibGVUYXAgZXZlbnRzIGFyZSBub3QgZ2V0dGluZyBwcm9wYWdhdGVkLlNvLCB1c2luZyBtb3VzZSBldmVudHMgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgdG91Y2hUb01vdXNlID0ge1xuICAgICAgICAgICAgdGFwOiAnY2xpY2snLFxuICAgICAgICAgICAgZG91YmxldGFwOiAnZGJsY2xpY2snXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlcyhbJ2NsaWNrJywgJ3RhcCcsICdkYmxjbGljaycsICdkb3VibGV0YXAnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdG91Y2hUb01vdXNlW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuYXBwLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1Db250ZXh0OiBMaXN0SXRlbURpcmVjdGl2ZSA9IHRhcmdldC5kYXRhKCdsaXN0SXRlbUNvbnRleHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdEl0ZW1Db250ZXh0LmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6IGxpc3RJdGVtQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50OiBldnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGxpc3RJdGVtQ29udGV4dC5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmVkU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTdGF0ZVBhcmFtcyhvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQoZXZlbnROYW1lLCBpdGVtPykge1xuICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlzZWxlY3QgZm9yIHRoZSBsaXZlbGlzdChMaXN0IHdpdGggZm9ybSB0ZW1wbGF0ZSksIGluIHJ1biBtb2RlIGRlbGV0aW5nIGEgcmVjb3JkIGlzIGdldHRpbmcgZmFpbGVkLiBCZWN1YXNlIHRoZSBzZWxlY3RlZGl0ZW0gd2lsbCBiZSBhcnJheSBvZiBvYmplY3RzLiBTbyBjb25zaWRlciB0aGUgbGFzdCBvYmplY3QuXG4gICAgICAgIGxldCByb3cgPSB0aGlzLm11bHRpc2VsZWN0ID8gbGFzdCh0aGlzLnNlbGVjdGVkaXRlbSkgOiB0aGlzLnNlbGVjdGVkaXRlbTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJvdyA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWUsIHdpZGdldE5hbWU6IHRoaXMubmFtZSwgcm93OiByb3d9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0TmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLkJBU0lDO1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUlubGluZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuQ0xBU1NJQztcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVQYWdlck5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuUEFHRVI7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TmF2aWdhdGlvblR5cGVOb25lKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLk5PTkU7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUluZmluaXRlU2Nyb2xsKCkge1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVPbkRlbWFuZExvYWQoKSB7XG4gICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBOYXZpZ2F0aW9uIHR5cGUgZm9yIHRoZSBsaXN0LlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25UeXBlQ2hhbmdlKHR5cGUpIHtcbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb24oKTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5CQVNJQzpcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5saW5lTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuQURWQU5DRUQ6XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5DTEFTU0lDOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLlBBR0VSOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZXJOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5OT05FIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25UeXBlTm9uZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuU0NST0xMOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlT25EZW1hbmRMb2FkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgZmllbGREZWZzIHByb3BlcnR5LCBmaWVsZERlZnMgaXMgdGhlIG1vZGVsIG9mIHRoZSBMaXN0IENvbXBvbmVudC5cbiAgICAgKiBmaWVsZERlZnMgaXMgYW4gQXJyYXkgdHlwZS5cbiAgICAgKiBAcGFyYW0gbmV3VmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZERlZnMobmV3VmFsOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkge1xuICAgICAgICAgICAgW3RoaXMuZmllbGREZWZzLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IG5ld1ZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZzID0gZ2V0T3JkZXJlZERhdGFzZXQodGhpcy5maWVsZERlZnMsIHRoaXMub3JkZXJieSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkRGF0YSA9IGdyb3VwRGF0YSh0aGlzLCB0aGlzLmZpZWxkRGVmcywgdGhpcy5ncm91cGJ5LCB0aGlzLm1hdGNoLCB0aGlzLm9yZGVyYnksIHRoaXMuZGF0ZWZvcm1hdCwgdGhpcy5kYXRlUGlwZSwgdW5kZWZpbmVkLCB0aGlzLmFwcERlZmF1bHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuc2V0RGlydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5ld1ZhbCBpcyBub3QgZW1wdHlcbiAgICAgICAgaWYgKCFpc0VtcHR5KG5ld1ZhbCkpIHtcblxuICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvbmUgdGhlIHRoZSBkYXRhIGluIGNhc2Ugb2YgbGl2ZSBhbmQgc2VydmljZSB2YXJpYWJsZXMgdG8gcHJldmVudCB0aGUgdHdvLXdheSBiaW5kaW5nIGZvciB0aGVzZSB2YXJpYWJsZXMuXG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2xvbmVEZWVwKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc09iamVjdChuZXdWYWwpICYmICFpc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBpc0VtcHR5KG5ld1ZhbCkgPyBbXSA6IFtuZXdWYWxdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IG5ld1ZhbC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcGFnZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIDEgb24gaW5pdGlhbCBsb2FkIHRoZW4gd2UgcmVuZGVyIHRoZSBmaXJzdCBwYWdlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2Uub3duZXIgPT09ICdBcHAnICYmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkgJiYgIXRoaXMuY3VycmVudFBhZ2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKS5udW1iZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgICAgICdwYWdlJzogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiBuZXdWYWx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZERlZnMobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZXMgdGhlIGRhdGFTb3VyY2Ugd2hlbiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBDb21wb25lbnQuXG4gICAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2UoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFOYXZpZ2F0b3IgPSB0aGlzLmRhdGFOYXZpZ2F0b3I7XG5cbiAgICAgICAgZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCAyMFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvKkRlLXJlZ2lzdGVyIHRoZSB3YXRjaCBpZiBpdCBpcyBleGlzdHMgKi9cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwibWF4UmVzdWx0c1wiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBcInBhZ2VTaXplXCIgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0c0VtaXR0ZXIuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSB2YWw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgMjA7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlCaW5kaW5nKCdkYXRhc2V0Jyk7XG4gICAgICAgIC8vIHdoZW4gbGlzdCBoYXZpbmcgXCJkYXRhc2V0Ym91bmRleHByXCIgYXR0ciBpbmRpY2F0ZXMgdGhhdCBsaXN0IGlzIGJvdW5kIHRvIGl0ZW0gY29udGV4dFxuICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCIgdGhlbiBpdGVtIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSBkYXRhc291cmNlLlxuICAgICAgICBjb25zdCBkYXRhc2V0Qm91bmRFeHByID0gdGhpcy5nZXRBdHRyKCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldChcbiAgICAgICAgICAgIHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICB0aGlzLnZpZXdQYXJlbnQsXG4gICAgICAgICAgICBkYXRhc2V0Qm91bmRFeHByID8gdGhpcy5jb250ZXh0IDogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgdGhpcy5kYXRhc2V0LFxuICAgICAgICAgICAgdGhpcy5iaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIsXG4gICAgICAgICAgICB0aGlzLnN0YXRlaGFuZGxlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhU2V0Q2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHRoaXMuX3BhZ2VMb2FkKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIG1haW50YWluIHVwZGF0ZWQgcGFnZSBzaXplIGluIHRoZSBzdGF0ZVBlcnNpc3RlbmNlXG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSB8fCBnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ2hhbmdlZCh7cGFnZTogd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxLCBwYWdlc2l6ZTogd2lkZ2V0U3RhdGUucGFnZXNpemV9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9ufSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gJiYgdGhpcy5uYXZpZ2F0aW9uICE9PSBOQVZJR0FUSU9OX1RZUEUuTk9ORSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uICYmIHRoaXMubmF2aWdhdGlvbiAhPT0gTkFWSUdBVElPTl9UWVBFLk5PTkUpIHtcbiAgICAgICAgICAgIC8vIElmIG5hdmlnYXRpb24gaXMgYWxyZWFkeSBzZXR1cCBhbmQgZGF0YXNvdXJjZSBpcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIGRhdGFzb3VyY2Ugb24gbmF2aWdhdGlvblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnNldERhdGFTb3VyY2UodGhpcy5kYXRhc291cmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbCB0aGUgTGlzdEl0ZW0ncyBBY3RpdmUgc3RhdGUgaXMgc2V0IHRvIGZhbHNlLlxuICAgIHByaXZhdGUgZGVzZWxlY3RMaXN0SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlzQWN0aXZlID0gZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERlc2VsZWN0IGFsbCB0aGUgTGlzdEl0ZW1zIGFuZCBjbGVhciB0aGUgc2VsZWN0ZWRpdGVtKEluT3V0Qm91bmQgUHJvcGVydHkgbW9kZWwpXG4gICAgcHJpdmF0ZSBjbGVhclNlbGVjdGVkSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RMaXN0SXRlbXMoKTtcbiAgICAgICAgdGhpcy5faXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgTGlzdEl0ZW1EaXJlY3RpdmUgaW5zdGFuY2UgYnkgY2hlY2tpbmcgdGhlIGVxdWFsaXR5IG9mIHRoZSBtb2RlbC5cbiAgICAgKiBAcGFyYW0gbGlzdE1vZGVsOiBtb2RlbCB0byBiZSBzZWFyY2hlZCBmb3JcbiAgICAgKiBAcmV0dXJucyBMaXN0SXRlbSBpZiB0aGUgbW9kZWwgaXMgbWF0Y2hlZCBlbHNlIHJldHVybiBudWxsLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGlzdEl0ZW1CeU1vZGVsKGxpc3RNb2RlbCk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLmZpbmQoKGxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbU9iaiA9IGxpc3RJdGVtLml0ZW07XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cGJ5ICYmICFoYXMobGlzdE1vZGVsLCAnX2dyb3VwSW5kZXgnKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwYnkgaXMgZW5hYmxlZCwgaXRlbSBjb250YWlucyBfZ3JvdXBJbmRleCBwcm9wZXJ0eSB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQgd2hpbGUgY29tcGFyaW5nIG1vZGVsLlxuICAgICAgICAgICAgICAgIGl0ZW1PYmogPSBjbG9uZShpdGVtT2JqKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbU9iai5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0VxdWFsKGl0ZW1PYmosIGxpc3RNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSXRlbXNXaWRnZXRzKHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmogPSB7fSwgd2lkZ2V0U3RhdGU7XG4gICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBnZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBjb25maWd1cmVkIHNlbGVjdGVkIGl0ZW1zIGZvciBjdXJyZW50IHBhZ2UgYW5kIGNvbnN0cnVjdCBuZXcgb25lcyBsYXRlciBiZWxvdy5cbiAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpIHx8IHt9O1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBtdWx0aXNlbGVjdCBpcyBvbiBhbmQgYW4gaXRlbSBpcyBzZWxlY3RlZCB3aXRob3V0IHByZXNzaW5nIENUUkwsIHByZXZpb3VzbHkgc2VsZWN0ZWQgaXRlbXMgaW4gc3RhdGUgc2hvdWxkIGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0ucGFnZSA9PT0gcGFnZU51bTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzIGFzIEFycmF5PFdpZGdldFJlZj4pLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgYXMgQXJyYXk8V2lkZ2V0UmVmPikucHVzaChpdGVtLmN1cnJlbnRJdGVtV2lkZ2V0cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzID0gaXRlbS5jdXJyZW50SXRlbVdpZGdldHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iaiA9IHtwYWdlOiBwYWdlTnVtLCBpbmRleDogaW5kZXh9O1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbb2JqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmICFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdGhlIGxpc3RJdGVtIGFuZCB1cGRhdGVzIHNlbGVjdGVkaXRlbSBwcm9wZXJ0eS5cbiAgICAgKiBJZiB0aGUgbGlzdEl0ZW0gaXMgYWxyZWFkeSBhIHNlbGVjdGVkIGl0ZW0gdGhlbiBkZXNlbGVjdHMgdGhlIGl0ZW0uXG4gICAgICogQHBhcmFtIHtMaXN0SXRlbURpcmVjdGl2ZX0gJGxpc3RJdGVtOiBJdGVtIHRvIGJlIHNlbGVjdGVkIG9mIGRlc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICAvLyBpdGVtIGlzIG5vdCBhbGxvd2VkIHRvIGdldCBzZWxlY3RlZCBpZiBpdCBpcyBkaXNhYmxlZC5cbiAgICAgICAgaWYgKCRsaXN0SXRlbSAmJiAhJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9ICRsaXN0SXRlbS5pdGVtO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSAmJiBoYXMoaXRlbSwgJ19ncm91cEluZGV4JykpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cGJ5IGlzIGVuYWJsZWQsIGl0ZW0gY29udGFpbnMgX2dyb3VwSW5kZXggcHJvcGVydHkgd2hpY2ggc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VsZWN0ZWRpdGVtLlxuICAgICAgICAgICAgICAgIGl0ZW0gPSBjbG9uZShpdGVtKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbS5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHB1bGxBbGxXaXRoKHRoaXMuX2l0ZW1zLCBbaXRlbV0sIGlzRXF1YWwpO1xuICAgICAgICAgICAgICAgICRsaXN0SXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBtdWx0aXNlbGVjdCBpcyBmYWxzZSwgY2xlYXIgdGhlIHNlbGVjdEl0ZW0gbGlzdCBiZWZvcmUgYWRkaW5nIGFuIGl0ZW0gdG8gdGhlIHNlbGVjdEl0ZW0gbGlzdC5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHt3aWRnZXQ6ICRsaXN0SXRlbSwgJGRhdGE6IGl0ZW19KTtcbiAgICAgICAgICAgICAgICAkbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW1zV2lkZ2V0cyhzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBpcyBJbnZva2VkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgTGlzdCBXaWRnZXQgaXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT59IGxpc3RJdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25MaXN0UmVuZGVyKGxpc3RJdGVtczogUXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPikge1xuICAgICAgICAvLyBBZGRlZCByZW5kZXIgY2FsbGJhY2sgZXZlbnQuIFRoaXMgbWV0aG9kKG9uTGlzdFJlbmRlcikgaXMgY2FsbGluZyBtdWx0aXBsZSB0aW1lcyBzbyBjaGVja2luZyBpc0RhdGFjaGFuZ2VkIGZsYWcgYmVjYXVzZSB0aGlzIGZhbGcgaXMgY2hhbmdlZCB3aGVuZXZlciBuZXcgZGF0YSBpcyByZW5kZXJlZC5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhQ2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gV2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkLCB0cmlnZ2VyIHdhdGNoZXJzIHRvIGV2YWx1YXRlIGxpc3RpdGVtIGJpbmQgZXhwcmVzc2lvbnMuXG4gICAgICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbmRlcicsIHskZGF0YTogdGhpcy5maWVsZERlZnN9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RhdGFDaGFuZ2VkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiBsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zTGVuZ3RoID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiB0b051bWJlcighaXNFbXB0eSh0aGlzLnNlbGVjdGVkaXRlbSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxO1xuICAgICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgaXRlbSBzZWxlY3Rpb24gZnJvbSBiZWluZyB0cmlnZ2VyZWQgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtc0xlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCAmJiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID09PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucGFnZSA9PT0gY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbS5pbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbSA6IFt0aGlzLnNlbGVjdGVkaXRlbV07XG5cbiAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IG51bGw7XG5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IGl0ZW0gaXMgYWxyZWFkeSBzZWxlY3RlZCBpbiB0aGUgbGlzdC5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgc3RhdGUgaW5mb3JtYXRpb24gaGFzIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgIGlmIChsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0Zmlyc3RpdGVtICYmICEodGhpcy5faXRlbXMubGVuZ3RoICYmIHRoaXMubXVsdGlzZWxlY3QpICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0ICRmaXJzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gbGlzdEl0ZW1zLmZpcnN0O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgISRmaXJzdEl0ZW0uZGlzYWJsZUl0ZW0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUNoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBcImluZmluaXRlIHNjcm9sbFwiIG9yIFwibG9hZCBvbiBkZW1hbmRcIiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZCB0aGVuIGRvbnQgYWx0ZXIgdGhlIHNlbGVjdGVkIGxpc3QgaXRlbXMuXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkZmlyc3RJdGVtO1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGluZyB0aGUgZmlyc3QgcmVjb3JkXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKHNlbGVjdGVkaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwoc2VsZWN0ZWRpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aFNjcm9sbEVsID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGxdJyk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG1vYmlsZSBhcHAgd2hlbiBtb2RhbCBleGlzdHMsIGFuZCBsaXN0IGl0ZW1zIGhlaWdodCBpcyBncmVhdGVyIHRoYW4gdGhlIG1vZGFsIGNvbnRlbnQgcHJvdmlkZSBjY29udGFpbmVyIGEgc2Nyb2xsYWJsZSBoZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsQm9keSA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWJvZHknKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RIdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgndWwnKS5oZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsSHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxNDA7XG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiBtb2RhbEJvZHkubGVuZ3RoICYmIGxpc3RIdCA+IG1vZGFsSHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmNzcygnaGVpZ2h0JywgbW9kYWxIdCArICdweCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICc+IHVsJywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLmxpc3RJdGVtc0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShsaXN0SXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RSZW5kZXIobGlzdEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaGFuZGxlIGNsaWNrIGV2ZW50IGluIGNhcHR1cmluZyBwaGFzZS5cbiAgICAgICAgdGhpcy5ib3VuZENsaWNrSGFuZGxlciA9ICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSAkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5hcHAtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRoZSBjdXJyZW50IGxpc3QgaXRlbVxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5nZXQoMCkgJiYgKHRhcmdldC5jbG9zZXN0KCd1bC5hcHAtbGl2ZWxpc3QtY29udGFpbmVyJykuZ2V0KDApICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50KCkuY2xvc2VzdCgnLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxpc3RJdGVtU2VsZWN0aW9uKHRhcmdldCwgJGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdWxFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgaWYgKHVsRWxlbWVudCkge1xuICAgICAgICAgICAgdWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VycyBvbiBkcmFnIHN0YXJ0IHdoaWxlIHJlb3JkZXJpbmcuXG4gICAgcHJpdmF0ZSBvblJlb3JkZXJTdGFydChldnQsIHVpKSB7XG4gICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCh1aS5pdGVtLmhlaWdodCgpKTtcbiAgICAgICAgdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnLCB1aS5pdGVtLmluZGV4KCkpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGR1cmluZyBzb3J0aW5nXG4gICAgcHJpdmF0ZSBvblNvcnQoZXZ0LCB1aSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCwgd2hlbiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgc2Nyb2xsIGVuYWJsZWRcbiAgICAgICAgLy8gb24gZHJhZ2dpbmcgdGhlIGVsZW1lbnQgdG8gbGFzdCBpdGVtJ3MgcG9zaXRpb24gbWFudWFsbHkgdHJpZ2dlciBsb2FkaW5nIG9mIG5leHQgaXRlbXNcbiAgICAgICAgaWYgKHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IHRoaXMuJHVsRWxlLmZpbmQoYFtsaXN0aXRlbWluZGV4PSR7dGhpcy5maWVsZERlZnMubGVuZ3RoIC0gMX1dYCkub2Zmc2V0KCk7XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW1PZmZzZXQgJiYgbGFzdEl0ZW1PZmZzZXQudG9wIDwgdWkub2Zmc2V0LnRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuYmluZFNjcm9sbEV2dCh0aGlzLCAnPiB1bCcsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGFmdGVyIHRoZSBzb3J0aW5nLlxuICAgIHByaXZhdGUgb25VcGRhdGUoZXZ0LCB1aSwgcHJlc2VudEluZGV4Pykge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWVsZERlZnM7XG4gICAgICAgIC8vIElmIHVpIGlzIG5vdCBwcmVzZW50IHRoZW4gaXQgaXMgY2FsbGVkIGZyb20gZHJhZyBhbmQgZHJvcCB1c2luZyBrZXlib2FyZFxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHVpID09PSB1bmRlZmluZWQgPyBwcmVzZW50SW5kZXggOiB1aS5pdGVtLmluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnKTtcblxuICAgICAgICBjb25zdCBtaW5JbmRleCA9IG1pbihbbmV3SW5kZXgsIG9sZEluZGV4XSk7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gbWF4KFtuZXdJbmRleCwgb2xkSW5kZXhdKTtcblxuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHB1bGxBdChkYXRhLCBvbGRJbmRleClbMF07XG4gICAgICAgIC8vIE1vZGlmeSB0aGUgZGF0YSBsaXN0IG9ubHkgaWYgd2UgZmluZCBhIGRyYWdnZWRJdGVtXG4gICAgICAgIGlmIChkcmFnZ2VkSXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1pbkluZGV4ID0gbWluKFttaW5JbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWluSW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1heEluZGV4ID0gbWF4KFttYXhJbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWF4SW5kZXhdKTtcblxuICAgICAgICAgICAgZGF0YS5zcGxpY2UobmV3SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgJGNoYW5nZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZGF0YVtuZXdJbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlb3JkZXInLCB7JGV2ZW50OiBldnQsICRkYXRhOiBkYXRhLCAkY2hhbmdlZEl0ZW19KTtcbiAgICAgICAgICAgIHRoaXMuJHVsRWxlLnJlbW92ZURhdGEoJ29sZEluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmVzIHJlb3JkZXJpbmcgdGhlIGxpc3QgaXRlbXMuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEbkQoKSB7XG4gICAgICAgIGxldCBhcHBlbmRUbztcbiAgICAgICAgY29uc3QgbW9kYWxFbCA9ICQoZG9jdW1lbnQpLmZpbmQoJy5tb2RhbCcpO1xuICAgICAgICBpZiAodGhpcy5nZXRBdHRyKCdoZWlnaHQnKSkgeyAvLyB3aGVuIGhlaWdodCBpcyBhcHBsaWVkIHRvIHRoZSBsaXN0LCBhcHBlbmQgc2hvdWxkIGJlIHRoZSB1bCdzIHBhcmVudCBhcyBzY3JvbGwgaXMgYXBwbGllZCB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdwYXJlbnQnO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGFsRWwubGVuZ3RoKSB7IC8vIEluIGNhc2Ugb2YgZGlhbG9nLCBhcHBlbmRUbyBzaG91bGQgYmUgdGhlIG1vZGFsIGVsZVxuICAgICAgICAgICAgYXBwZW5kVG8gPSBtb2RhbEVsW21vZGFsRWwubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7IC8vIEFzIGRlZmF1bHQgYXBwZW5kIHRvIHNob3VsZCBiZSBib2R5XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdib2R5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhcHBlbmRUbzogYXBwZW5kVG8sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgJGVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLiR1bEVsZSA9ICRlbC5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgIGNvbmZpZ3VyZURuRCh0aGlzLiR1bEVsZSwgb3B0aW9ucywgdGhpcy5vblJlb3JkZXJTdGFydC5iaW5kKHRoaXMpLCB0aGlzLm9uVXBkYXRlLmJpbmQodGhpcyksIHRoaXMub25Tb3J0LmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHVsRWxlLmRyb3BwYWJsZSh7J2FjY2VwdCc6ICcuYXBwLWxpc3QtaXRlbSd9KTtcblxuXG5cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGlvbiBsaW1pdCBpcyByZWFjaGVkLlxuICAgIHByaXZhdGUgY2hlY2tTZWxlY3Rpb25MaW1pdChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuc2VsZWN0aW9ubGltaXQgfHwgY291bnQgPCB0aGlzLnNlbGVjdGlvbmxpbWl0KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxpc3RpdGVtIHJlZmVyZW5jZSBieSBpbmRleCB2YWx1ZS5cbiAgICBwcml2YXRlIGdldExpc3RJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKTogTGlzdEl0ZW1EaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gaW5kZXggb2YgYW4gKGxpc3RJdGVtRGlyZWN0aXZlKSBpbiB0aGUgbGlzdEl0ZW1cbiAgICAgKiBAcGFyYW0ge0xpc3RJdGVtRGlyZWN0aXZlfSBpdGVtXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpc3RJdGVtSW5kZXgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIExpc3RJdGVtIFJlZmVyZW5jZSBiYXNlZCBvbiB0aGUgaW5wdXQgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIEByZXR1cm5zIHtMaXN0SXRlbURpcmVjdGl2ZX1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWw6IGFueSk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgbGV0IGxpc3RJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbCkpIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdEl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZWZvcmVQYWdpbmF0aW9uQ2hhbmdlKCRldmVudCwgJGluZGV4KSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQsICRpbmRleH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbigkaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gJGluZGV4OyAvLyBSZXR1cm4gYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBpdGVtXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBkYXRhc291cmNlIHZhcmlhYmxlIGJ5IGRlZmF1bHQgd2hlbiBwdWxsdG9yZWZyZXNoIGV2ZW50IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1B1bGxUb1JlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgncHVsbHRvcmVmcmVzaCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJvdW5kQWRkSXRlbUhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHNldFVwQ1VESGFuZGxlcnMoKSB7XG4gICAgICAgIGNvbnN0ICRhZGRJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFkZC1saXN0LWl0ZW1cIilbMF07XG4gICAgICAgIGlmICgkYWRkSXRlbSkge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kQWRkSXRlbUhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGFkZCBhY3Rpb25cbiAgICAgICAgICAgICRhZGRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZEFkZEl0ZW1IYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAodGl0bGUgfHwgc3ViaGVhZGluZyB8fCBpY29uY2xhc3MpIHtcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtoaWRkZW5dPVwiIWljb25jbGFzc1wiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2gzPlxuICA8L2Rpdj5cbn1cblxuQGlmIChuYXZpZ2F0aW9uID09PSAnSW5saW5lJyAmJiAhbm9EYXRhRm91bmQpIHtcbiAgPGRpdiBjbGFzcz1cImFwcC1kYXRhbmF2aWdhdG9yXCIgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZVByZXZpb3VzXCIgYXJpYS1sYWJlbD1cIlBhZ2UgbmF2aWdhdGlvblwiPlxuICAgIDx1bCBjbGFzcz1cInBhZ2VyXCI+XG4gICAgICA8bGkgY2xhc3M9XCJwcmV2aW91c1wiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiAoZGF0YU5hdmlnYXRvciA/IGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXMgOiB0cnVlKX1cIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBQcmV2aW91cyBwYWdlIHt7ZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVQcmV2aW91cyA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG59XG5AaWYgKG5hdmlnYXRpb24gPT09ICdJbmxpbmUnICYmICFub0RhdGFGb3VuZCkge1xuICA8ZGl2IGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGNsYXNzPVwic3Itb25seVwiPiB7eydQYWdlICcgKyBkYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgZGF0YU5hdmlnYXRvci5wYWdlQ291bnQgfX08L2Rpdj5cbn1cblxuPGRpdj5cbiAgQGlmIChlbmFibGVyZW9yZGVyKSB7XG4gICAgPGRpdiBpZD17e3RpdGxlSWR9fSBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgIFByZXNzIHNwYWNlIGJhciB0byB0b2dnbGUgZHJhZyBkcm9wIG1vZGUsIHVzZSBhcnJvdyBrZXlzIHRvIG1vdmUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKGxpc3RJdGVtcyAmJiBlbmFibGVyZW9yZGVyICYmIGN1cnJlbnRJbmRleCkge1xuICAgIDxkaXYgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgY2xhc3M9XCJzci1vbmx5XCIgPlxuICAgICAge3thcmlhVGV4dCArIGN1cnJlbnRJbmRleCArICcgb2YgJyArICBsaXN0SXRlbXMubGVuZ3RofX1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjx1bCBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiICBjbGFzcz1cImFwcC1saXZlbGlzdC1jb250YWluZXIgY2xlYXJmaXgge3tkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdhcHAtaG9yaXpvbnRhbC1saXN0JzogJyd9fSB7e2xpc3RjbGFzc319XCIgcm9sZT1cImxpc3RcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdCcpXCJcblxuICAoa2V5ZG93bi5zcGFjZSk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NwYWNlJylcIlxuXG4gIChrZXlkb3duLmFycm93dXApPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdmb2N1c1ByZXYnKVwiXG4gIChrZXlkb3duLmFycm93ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ2ZvY3VzTmV4dCcpXCJcbiAgKGtleWRvd24uYXJyb3dsZWZ0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNQcmV2JylcIlxuICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNOZXh0JylcIlxuXG4gIChrZXlkb3duLnNoaWZ0LmFycm93dXApPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3RQcmV2JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd2Rvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3ROZXh0JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd2xlZnQpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3RQcmV2JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd3JpZ2h0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0TmV4dCcpXCJcbiAgW2hpZGRlbl09XCJub0RhdGFGb3VuZCAmJiAhdmFyaWFibGVJbmZsaWdodFwiXG4gID5cbiAgQGlmICghZ3JvdXBieSkge1xuICAgIEBmb3IgKGl0ZW0gb2YgZmllbGREZWZzOyB0cmFjayBpdGVtKSB7XG4gICAgICA8bGkgY2xhc3M9XCJhcHAtbGlzdC1pdGVtIHt7ZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnJyA6IGl0ZW1zUGVyUm93Q2xhc3N9fVwiIFtuZ0NsYXNzXT1cImxpc3RJdGVtUmVmLml0ZW1DbGFzc1wiXG4gICAgICAgIFt3bUxpc3RJdGVtXT1cIml0ZW1cIlxuICAgICAgICAjbGlzdEl0ZW1SZWY9XCJsaXN0SXRlbVJlZlwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgcm9sZT1cImxpc3RpdGVtXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdmYWx0XycgKyBsaXN0SXRlbVJlZi50cmFja0lkLCB7aXRlbTogaXRlbSwgJGluZGV4OiAkaW5kZXgsIGl0ZW1SZWY6IGxpc3RJdGVtUmVmLCAkZmlyc3Q6ICRmaXJzdCwgJGxhc3Q6ICRsYXN0LCBjdXJyZW50SXRlbVdpZGdldHM6IGxpc3RJdGVtUmVmLmN1cnJlbnRJdGVtV2lkZ2V0c30pXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLCAkaW5kZXg6ICRpbmRleCwgaXRlbVJlZjogbGlzdEl0ZW1SZWYsICRmaXJzdDogJGZpcnN0LCAkbGFzdDogJGxhc3QsIGN1cnJlbnRJdGVtV2lkZ2V0czogbGlzdEl0ZW1SZWYuY3VycmVudEl0ZW1XaWRnZXRzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9saT5cbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBmb3IgKGdyb3VwT2JqIG9mIGdyb3VwZWREYXRhOyB0cmFjayBncm91cE9iajsgbGV0IGdyb3VwSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxsaSBjbGFzcz1cImFwcC1saXN0LWl0ZW0tZ3JvdXAgY2xlYXJmaXhcIj5cbiAgICAgICAgPHVsIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCIgY2xhc3M9XCJsaXN0LWdyb3VwIGl0ZW0tZ3JvdXBcIiBbbmdDbGFzc109XCJsaXN0Y2xhc3NcIj5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJhcHAtbGlzdC1pdGVtLWhlYWRlciBsaXN0LWl0ZW0gbGlzdC1ncm91cC1oZWFkZXJcIiAoY2xpY2spPVwiaGFuZGxlSGVhZGVyQ2xpY2soJGV2ZW50KVwiIFtuZ0NsYXNzXT1cInsnY29sbGFwc2libGUtY29udGVudCc6IGNvbGxhcHNpYmxlfVwiPlxuICAgICAgICAgICAgPGg0Pnt7Z3JvdXBPYmoua2V5fX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIGFjdGlvbiB3aS1jaGV2cm9uLXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHNob3djb3VudCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1kZWZhdWx0XCI+e3tncm91cE9iai5kYXRhLmxlbmd0aH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgY2xlYXJmaXgge3tkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdhcHAtaG9yaXpvbnRhbC1saXN0JzogJyd9fVwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwT2JqLmRhdGE7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgPGxpIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXBwLWxpc3QtaXRlbSBncm91cC1saXN0LWl0ZW0ge3tpdGVtc1BlclJvd0NsYXNzfX1cIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibGlzdEl0ZW1SZWYuaXRlbUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgIFt3bUxpc3RJdGVtXT1cIml0ZW1cIiAjbGlzdEl0ZW1SZWY9XCJsaXN0SXRlbVJlZlwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdncm91cF8nICsgbGlzdEl0ZW1SZWYudHJhY2tJZCwge2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9KVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICB9XG4gIH1cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0TGVmdEFjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFJpZ2h0QWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvdWw+XG5cbkBpZiAobm9EYXRhRm91bmQgJiYgIXZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtbXNnXCIgW3RleHRDb250ZW50XT1cIm5vZGF0YW1lc3NhZ2VcIj48L2Rpdj5cbn1cblxuQGlmICh2YXJpYWJsZUluZmxpZ2h0ICYmICFwdWxsdG9yZWZyZXNoKSB7XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWRhdGEtbXNnXCI+XG4gICAgPHNwYW4+XG4gICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24gZmEtc3BpblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImxvYWRpbmdpY29uXCI+PC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TG9hZGluZzwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibG9hZGluZy10ZXh0XCIgW3RleHRDb250ZW50XT1cImxvYWRpbmdkYXRhbXNnXCI+PC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG59XG5cbkBpZiAobmF2aWdhdGlvbiA9PT0gJ0lubGluZScgJiYgIW5vRGF0YUZvdW5kKSB7XG4gIDxkaXYgY2xhc3M9XCJhcHAtZGF0YW5hdmlnYXRvclwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0XCI+XG4gICAgPHVsIGNsYXNzPVwicGFnZXJcIj5cbiAgICAgIDxsaSBjbGFzcz1cIm5leHRcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogKGRhdGFOYXZpZ2F0b3IgPyBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgIDogdHJ1ZSl9XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gTmV4dCBwYWdlIHt7ZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbn1cblxuQGlmIChuYXZpZ2F0aW9uICE9PSAnTm9uZScpIHtcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlclwiIFtoaWRkZW5dPVwiIXNob3dOYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCAoZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemUgJiYgIWFsbG93cGFnZXNpemVjaGFuZ2UpIHx8ICghZGF0YU5hdmlnYXRvci5kYXRhU2l6ZSAmJiAhZGF0YU5hdmlnYXRvci5kYXRhc291cmNlPy5wYWdpbmF0aW9uPy5uZXh0KVwiPlxuICAgIDxuYXYgd21QYWdpbmF0aW9uXG4gICAgICBuYXZpZ2F0aW9uYWxpZ24uYmluZD1cIm5hdmlnYXRpb25hbGlnblwiXG4gICAgICBuYXZpZ2F0aW9uLmJpbmQ9XCJuYXZDb250cm9sc1wiXG4gICAgICBzaG93cmVjb3JkY291bnQuYmluZD1cInNob3dyZWNvcmRjb3VudFwiXG4gICAgICBtYXhzaXplLmJpbmQ9XCJtYXhzaXplXCJcbiAgICAgIGJvdW5kYXJ5bGlua3MuYmluZD1cImJvdW5kYXJ5bGlua3NcIlxuICAgICAgZm9yY2VlbGxpcHNlcy5iaW5kPVwiZm9yY2VlbGxpcHNlc1wiXG4gICAgICBkaXJlY3Rpb25saW5rcy5iaW5kPVwiZGlyZWN0aW9ubGlua3NcIlxuICAgICAgc2hvdy5iaW5kPVwiIW9uRGVtYW5kTG9hZFwiXG4gICAgICBwYWdpbmF0aW9uY2hhbmdlLmV2ZW50PVwiYmVmb3JlUGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQsICRpbmRleClcIlxuICAgID48L25hdj5cbiAgICBAaWYgKG9uRGVtYW5kTG9hZCkge1xuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAoY2xpY2spPVwiZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJhcHAtYnV0dG9uIGJ0biBidG4tYmxvY2tcIlxuICAgICAgICBbbmdDbGFzc109XCJwYWdpbmF0aW9uY2xhc3NcIlxuICAgICAgICBbdGV4dENvbnRlbnRdPVwib25kZW1hbmRtZXNzYWdlXCJcbiAgICAgID48L2E+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuPCEtLVRoaXMgdGVtcGxhdGUgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBncm91cGJ5IGlzIHNwZWNpZmllZC0tPlxuIl19
1259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9saXN0L3NyYy9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxFQUVuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUNILFVBQVUsRUFDVixlQUFlLEVBQ2YsR0FBRyxFQUNILFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FB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QUFpQjs7MEJBQzNCLFNBQVM7MkJBQUMsa0JBQWtCOzswQkFDNUIsU0FBUzsyQkFBQyxrQkFBa0I7OzBCQUc1QixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0EvR1gsWUFBWTtzQkFBekMsWUFBWTt1QkFBQyxjQUFjO2dCQUVZLHNCQUFzQjtzQkFBN0QsWUFBWTt1QkFBQyx3QkFBd0I7Z0JBQ0csdUJBQXVCO3NCQUEvRCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFDTCxhQUFhO3NCQUE5QyxlQUFlO3VCQUFDLGVBQWU7Z0JBRUEsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0csU0FBUztzQkFBekMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgY29uZmlndXJlRG5ELFxuICAgIERFQk9VTkNFX1RJTUVTLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRPcmRlcmVkRGF0YXNldCxcbiAgICBncm91cERhdGEsXG4gICAgaGFuZGxlSGVhZGVyQ2xpY2ssXG4gICAgTkFWSUdBVElPTl9UWVBFLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBzdHlsZXIsXG4gICAgVGV4dENvbnRlbnREaXJlY3RpdmUsXG4gICAgVG9EYXRlUGlwZSxcbiAgICB0b2dnbGVBbGxIZWFkZXJzLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLFxuICAgIFdpZGdldFJlZlxufSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgIEFwcCxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBEYXRhU291cmNlLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIGlzT2JqZWN0LFxuICAgIG5vb3AsXG4gICAgUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgc3dpdGNoQ2xhc3Ncbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuaW1wb3J0IHtCdXR0b25Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0L2J1dHRvbic7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9saXN0LnByb3BzJztcbmltcG9ydCB7TGlzdEl0ZW1EaXJlY3RpdmV9IGZyb20gJy4vbGlzdC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0xpc3RBbmltYXRvcn0gZnJvbSAnLi9saXN0LmFuaW1hdG9yJztcbmltcG9ydCB7XG4gICAgY2xvbmUsXG4gICAgY2xvbmVEZWVwLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGhhcyxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNFcXVhbCxcbiAgICBpc051bWJlcixcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBsYXN0LFxuICAgIG1heCxcbiAgICBtaW4sXG4gICAgcHVsbEFsbFdpdGgsXG4gICAgcHVsbEF0LFxuICAgIHJlbW92ZSxcbiAgICBzb21lLFxuICAgIHRvTnVtYmVyXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtbGl2ZWxpc3QgYXBwLXBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWxpc3QnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRleHRDb250ZW50RGlyZWN0aXZlLCBQYWdpbmF0aW9uQ29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21MaXN0XScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoTGlzdENvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbGlzdFRlbXBsYXRlJykgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2xpc3RMZWZ0QWN0aW9uVGVtcGxhdGUnKSBsaXN0TGVmdEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkKCdsaXN0UmlnaHRBY3Rpb25UZW1wbGF0ZScpIGxpc3RSaWdodEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkcmVuKEJ1dHRvbkNvbXBvbmVudCkgYnRuQ29tcG9uZW50cztcblxuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCkgZGF0YU5hdmlnYXRvcjtcbiAgICBAVmlld0NoaWxkcmVuKExpc3RJdGVtRGlyZWN0aXZlKSBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT47XG4gICAgcHVibGljIG5vRGF0YUZvdW5kOiBib29sZWFuO1xuICAgIHB1YmxpYyBsYXN0U2VsZWN0ZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICBwdWJsaWMgZmllbGREZWZzOiBBcnJheTxhbnk+O1xuICAgIHB1YmxpYyBkaXNhYmxlaXRlbTtcbiAgICBwdWJsaWMgbmF2aWdhdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBuYXZpZ2F0aW9uYWxpZ246IHN0cmluZztcbiAgICBwdWJsaWMgcGFnZXNpemU6IG51bWJlcjtcbiAgICBwdWJsaWMgZGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBtdWx0aXNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VsZWN0Zmlyc3RpdGVtOiBib29sZWFuO1xuICAgIHB1YmxpYyBvcmRlcmJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGxvYWRpbmdpY29uOiBzdHJpbmc7XG4gICAgcHVibGljIHBhZ2luYXRpb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBvbmRlbWFuZG1lc3NhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgbG9hZGluZ2RhdGFtc2c6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0aW9ubGltaXQ6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5mU2Nyb2xsOiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVyZW9yZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBpdGVtc3BlcnJvdzogc3RyaW5nO1xuICAgIHB1YmxpYyBpdGVtY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtV2lkZ2V0czogQXJyYXk8V2lkZ2V0UmVmPiB8IFdpZGdldFJlZjtcbiAgICBwdWJsaWMgdmFyaWFibGVJbmZsaWdodDtcbiAgICBwdWJsaWMgbmFtZTtcbiAgICBwdWJsaWMgY3VycmVudFBhZ2U7XG4gICAgcHVibGljIGRpcmVjdGlvbjtcbiAgICBwdWJsaWMgdGFiaW5kZXg7XG4gICAgcHVibGljIGhhbmRsZUhlYWRlckNsaWNrOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgdG9nZ2xlQWxsSGVhZGVyczogdm9pZDtcbiAgICBwdWJsaWMgZ3JvdXBieTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb2xsYXBzaWJsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkYXRlUGlwZTogVG9EYXRlUGlwZTtcbiAgICBwdWJsaWMgYmluZGl0ZW1jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBiaW5kZGlzYWJsZWl0ZW06IHN0cmluZztcbiAgICBwdWJsaWMgYmluZGRhdGFzZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgbW91c2VFbnRlckNCOiBzdHJpbmc7XG4gICAgcHVibGljIG1vdXNlTGVhdmVDQjogc3RyaW5nO1xuICAgIHB1YmxpYyBwdWxsdG9yZWZyZXNoOiBib29sZWFuO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzdWJoZWFkaW5nOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBsaXN0Y2xhc3M6IGFueTtcbiAgICBwdWJsaWMgc3RhdGVoYW5kbGVyOiBhbnk7XG4gICAgcHVibGljIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyB0aXRsZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGFsbG93cGFnZXNpemVjaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcmV2UGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHVibGljIHVwZGF0ZWRQYWdlU2l6ZTtcbiAgICBwdWJsaWMgYWN0dWFsUGFnZVNpemU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIHByaXZhdGUgaXRlbXNQZXJSb3dDbGFzczogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlyc3RTZWxlY3RlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2g6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG5hdmlnYXRvclJlc3VsdFdhdGNoOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBuYXZDb250cm9sczogc3RyaW5nO1xuICAgIHByaXZhdGUgb25EZW1hbmRMb2FkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBzaG93TmF2aWdhdGlvbjogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlb3JkZXJQcm9wczogYW55O1xuICAgIHByaXZhdGUgYXBwOiBhbnk7XG4gICAgcHJpdmF0ZSBhcHBEZWZhdWx0czogYW55O1xuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmU7XG4gICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlO1xuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgYmluZGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICBwcml2YXRlIG1hdGNoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlZm9ybWF0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBncm91cGVkRGF0YTogYW55O1xuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByaXZhdGUgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcHJvcHNJbml0UHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuICAgIHByaXZhdGUgJHVsRWxlOiBhbnk7XG4gICAgcHJpdmF0ZSBfbGlzdEFuaW1hdG9yOiBMaXN0QW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfbGlzdGVuZXJEZXN0cm95ZXJzOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGVib3VuY2VkRmV0Y2hOZXh0RGF0YXNldE9uU2Nyb2xsOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIGlzRGF0YUNoYW5nZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0xpc3RFbGVtZW50TW92YWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFyaWFUZXh0OiBTdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQ7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0O1xuICAgIHByaXZhdGUgbGlzdEl0ZW1zQ2hhbmdlc1N1YnNjcmlwdGlvbjogYW55O1xuICAgIHByaXZhdGUgYm91bmRDbGlja0hhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHRvdWNoaW5nO1xuICAgIHByaXZhdGUgdG91Y2hlZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGRhdGVQaXBlOiBUb0RhdGVQaXBlLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnaXRlbWNsYXNzLmJpbmQnKSBiaW5kaXRlbWNsYXNzOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc2FibGVpdGVtLmJpbmQnKSBiaW5kZGlzYWJsZWl0ZW06IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgYmluZGRhdGFzZXQ6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNvdXJjZS5iaW5kJykgYmluZGRhdGFzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW91c2VlbnRlci5ldmVudCcpIG1vdXNlRW50ZXJDQjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtb3VzZWxlYXZlLmV2ZW50JykgbW91c2VMZWF2ZUNCOiBzdHJpbmcsXG4gICAgICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcbiAgICAgICAgY29uc3QgcHJvcHNJbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpO1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCwgcHJvcHNJbml0UHJvbWlzZSk7XG4gICAgICAgIHRoaXMucHJvcHNJbml0UHJvbWlzZSA9IHByb3BzSW5pdFByb21pc2U7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLlNIRUxMKTtcbiAgICAgICAgdGhpcy5jZFJlZiA9IGNkUmVmO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5kYXRlUGlwZSA9IGRhdGVQaXBlO1xuICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UgPSBzdGF0ZVBlcnNpc3RlbmNlO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlID0gcGFnaW5hdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmJpbmRpdGVtY2xhc3MgPSBiaW5kaXRlbWNsYXNzO1xuICAgICAgICB0aGlzLmJpbmRkaXNhYmxlaXRlbSA9IGJpbmRkaXNhYmxlaXRlbTtcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLm1vdXNlRW50ZXJDQiA9IG1vdXNlRW50ZXJDQjtcbiAgICAgICAgdGhpcy5tb3VzZUxlYXZlQ0IgPSBtb3VzZUxlYXZlQ0I7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzb3VyY2UgPSBiaW5kZGF0YXNvdXJjZTtcblxuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5hcHBEZWZhdWx0cyA9IGFwcERlZmF1bHRzO1xuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gIWJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLnRpdGxlSWQgPSAnd21saXN0LScgKyBnZW5lcmF0ZUdVSWQoKTtcblxuICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJEZXN0cm95ZXJzID0gW1xuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdjaGVjay1zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2VOYW1lID0gZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAvLyBpbiBQcmVmYWJzLCB0aGlzLmRhdGFzb3VyY2UgaXMgbm90IHJlc29sdmVkIGF0IHRoZSB0aW1lIG9mIHZhcmlhYmxlIGludm9jYXRpb24sIHNvIGFkZGl0aW9uYWwgY2hlY2sgaXMgcmVxdWlyZWQuXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlTmFtZSA9IGV4dHJhY3REYXRhU291cmNlTmFtZSh0aGlzLmJpbmRkYXRhc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdldChvcHRpb25zLCAndmFyaWFibGUubmFtZScpICE9PSBkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMob3B0aW9ucyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgdGhpcy5oYW5kbGVMb2FkaW5nLmJpbmQodGhpcykpLFxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdzZXR1cC1jdWQtbGlzdGVuZXInLCBwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSAhPT0gcGFyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0RlcGVuZGVudCA9IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRpdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5faXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLl9pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RlZGl0ZW0oaXRlbXMpIHtcbiAgICAgICAgdGhpcy5faXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuXG4gICAgICAgIGlmIChpc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuc2VsZWN0SXRlbShpdGVtKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGxpc3Qgb2Ygd2lkZ2V0cyBwcmVzZW50IG9uIGxpc3QgaXRlbSBieSBjb25zaWRlcmluZyBuYW1lIGFuZCBpbmRleCBvZiB0aGUgd2lkZ2V0LlxuICAgICAqIElmIHdlIGRpZCdudCBwYXNzIGluZGV4LCBpdCByZXR1cm5zIGFycmF5IG9mIGFsbCB0aGUgd2lkZ2V0cyB3aGljaCBhcmUgbWF0Y2hpbmcgdG8gd2lkZ2V0IG5hbWVcbiAgICAgKiBAcGFyYW0gd2lkZ3RlTmFtZTogTmFtZSBvZiB0aGUgd2lkZ2V0XG4gICAgICogQHBhcmFtIGluZGV4OiBJbmRleCBvZiB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIGdldFdpZGdldHMod2lkZ3RlTmFtZTogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBsZXQgJHRhcmdldDtcbiAgICAgICAgY29uc3QgcmV0VmFsID0gW107XG5cbiAgICAgICAgaWYgKCF3aWRndGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRGVmaW5lZChpbmRleCkpIHtcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5saXN0SXRlbXMudG9BcnJheSgpLCAoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0KGVsLmN1cnJlbnRJdGVtV2lkZ2V0cywgd2lkZ3RlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnB1c2goJHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXRWYWw7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSAraW5kZXggfHwgMDtcblxuICAgICAgICAkdGFyZ2V0ID0gZ2V0KHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKSwgaW5kZXgpO1xuXG4gICAgICAgIGlmICgkdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gW2dldCgkdGFyZ2V0LmN1cnJlbnRJdGVtV2lkZ2V0cywgd2lkZ3RlTmFtZSldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsaXN0aXRlbSByZWZlcmVuY2UgYnkgaW5kZXggdmFsdWUuIFRoaXMgcmVmZXJzIHRvIHRoZSBzYW1lIG1ldGhvZCBnZXRMaXN0SXRlbUJ5SW5kZXguXG4gICAgcHVibGljIGdldEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaW5kZXggb2YgbGlzdEl0ZW0obGlzdEl0ZW1EaXJlY3RpdmUgLyBsaXN0SXRlbU9iamVjdClcbiAgICAgKiBJZiBpdGVtIGlzIGEgZGlyZWN0aXZlLCBpbmRleCBpcyBmZXRjaGVkIGZyb20gbGlzdEl0ZW1zXG4gICAgICogSWYgaXRlbSBpcyBhbiBvYmplY3QsIGluZGV4IGlzIGZldGNoZWQgZnJvbSBmaWVsZERlZnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW5kZXgoaXRlbTogYW55KSB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExpc3RJdGVtSW5kZXgoaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmllbGREZWZzLmZpbmRJbmRleCgob2JqKSA9PiBpc0VxdWFsKG9iaiwgaXRlbSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICBwdWJsaWMgZ2V0VXBkYXRlZFBhZ2VTaXplKCkge1xuICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlZFBhZ2VTaXplO1xuICAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyV01FdmVudCgnaW5zZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0Um93KGl0ZW0/KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgbGV0IGxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKGl0ZW0pLml0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXTUV2ZW50KCd1cGRhdGUnLCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoaXRlbT8pIHtcbiAgICAgICAgdGhpcy5lZGl0Um93KGl0ZW0pO1xuICAgIH1cblxuICAgIGRlbGV0ZVJvdyhpdGVtPykge1xuICAgICAgICBpZiAodGhpcy5faXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgIGxldCBsaXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbChpdGVtKS5pdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyV01FdmVudCgnZGVsZXRlJywgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlKGl0ZW0/KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlUm93KGl0ZW0pO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChkYXRhLnZhcmlhYmxlLCBkYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzc3Ml0gVXBkYXRlIG5vZGF0YWZvdW5kIGZsYWcgb25jZSB0aGUgcmVzcG9uc2UgaXMgcmVjaWV2ZWQgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxFbGUgPSBkYXRhLmRhdGE/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0b3RhbEVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IHRvdGFsRWxlID09PSAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvdGFsZWxlbWVudHMgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBpc0VtcHR5KGRhdGEuZGF0YT8uZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckxpc3RJdGVtU2VsZWN0aW9uKCRlbDogSlF1ZXJ5PEhUTUxFbGVtZW50PiwgJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoJGVsICYmICRlbFswXSkge1xuICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1Db250ZXh0ID0gJGVsLmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcpO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBjbGljayBldmVudCBvbmx5IGlmIHRoZSBsaXN0IGl0ZW0gaXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBsaXN0LlxuICAgICAgICAgICAgaWYgKGxpc3RJdGVtQ29udGV4dC5saXN0Q29tcG9uZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljaygkZXZlbnQsIGxpc3RJdGVtQ29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9ybSBvdGhlciBkYXRhIHdpZGdldHMgbGlrZSB0YWJsZS5cbiAgICBwdWJsaWMgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFtEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSXS5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oJGV2ZW50LCBhY3Rpb246IHN0cmluZykge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICgkZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgJGV2ZW50LmtleUNvZGUgIT09IDkgJiYgISgoJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zvcm0tY29udHJvbCcpIHx8ICRldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdub3RlLWVkaXRhYmxlJykpICYmICRldmVudC5rZXlDb2RlID09PSAzMikpIHtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1EaXJlY3RpdmU+ID0gdGhpcy5saXN0SXRlbXM7XG5cbiAgICAgICAgbGV0IHByZXNlbnRJbmRleDogbnVtYmVyID0gdGhpcy5nZXRMaXN0SXRlbUluZGV4KHRoaXMubGFzdFNlbGVjdGVkSXRlbSk7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXg6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEl0ZW1JbmRleCh0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdENvdW50OiBudW1iZXIgPSBpc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA6IChpc09iamVjdCh0aGlzLnNlbGVjdGVkaXRlbSkgPyAxIDogMCk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnc2VsZWN0UHJldicpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHByZXNlbnRJbmRleCA8PSBmaXJzdEluZGV4KSAmJiB0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5sYXN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVzZW50SW5kZXggPiBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdzZWxlY3ROZXh0Jykge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPCBsaXN0SXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHByZXNlbnRJbmRleCA+PSBmaXJzdEluZGV4KSAmJiB0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5sYXN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVzZW50SW5kZXggPCBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdmb2N1c1ByZXYnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSkge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8PSAwID8gMCA6IChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldkVsdCA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIHByZXZFbHQubmF0aXZlRWxlbWVudC5iZWZvcmUodGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgW2FycltwcmVzZW50SW5kZXggLSAxXSwgYXJyW3ByZXNlbnRJbmRleF1dID0gW2FycltwcmVzZW50SW5kZXhdLCBhcnJbcHJlc2VudEluZGV4IC0gMV1dO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLnJlc2V0KGFycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IFwic2VsZWN0ZWQgXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8PSAwID8gMCA6IChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2ZvY3VzTmV4dCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gcHJlc2VudEluZGV4IDwgKGxpc3RJdGVtcy5sZW5ndGggLSAxKSA/IChwcmVzZW50SW5kZXgpIDogKGxpc3RJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID09PSB0aGlzLmxpc3RJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbHQgPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBuZXh0RWx0Lm5hdGl2ZUVsZW1lbnQuYWZ0ZXIodGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgW2FycltwcmVzZW50SW5kZXhdLCBhcnJbcHJlc2VudEluZGV4ICsgMV1dID0gW2FycltwcmVzZW50SW5kZXggKyAxXSwgYXJyW3ByZXNlbnRJbmRleF1dO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLnJlc2V0KGFycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAyO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSBwcmVzZW50SW5kZXggPCAobGlzdEl0ZW1zLmxlbmd0aCAtIDEpID8gKHByZXNlbnRJbmRleCArIDEpIDogKGxpc3RJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbnRlciBjbGljayBpcyBwcmVzc2VkIG9uIHRoZSBpdGVtIHdoaWNoIGlzIG5vdCB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLCB0aGUgZmluZCB0aGUgaXRlbSBmcm9tIHdoaWNoIHRoZSBldmVudCBpcyBvcmlnaW5hdGVkLlxuICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA9PT0gLTEgfHwgISQoJGV2ZW50LnRhcmdldCkuY2xvc2VzdCh0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkbGkgPSAkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2xpLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkdWwgPSAkbGkuY2xvc2VzdCgndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9ICR1bC5maW5kKCdsaS5hcHAtbGlzdC1pdGVtJykuaW5kZXgoJGxpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2soJGV2ZW50LCB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdzcGFjZScpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSA9ICF0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlO1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljaygkZXZlbnQsIHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBwcmVzZW50SW5kZXggKyAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gYEl0ZW0gJHt0aGlzLmN1cnJlbnRJbmRleH0gZ3JhYmJlZCwgY3VycmVudCBwb3NpdGlvbiBgO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLmRhdGEoJ29sZEluZGV4JywgcHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IGBJdGVtICR7dGhpcy5jdXJyZW50SW5kZXh9IGRyb3BwZWQsIGZpbmFsIHBvc2l0aW9uIGA7XG4gICAgICAgICAgICAgICAgdGhpcy5vblVwZGF0ZSgkZXZlbnQsIHVuZGVmaW5lZCwgcHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRBY3R1YWxQYWdlU2l6ZSgpICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IDIwO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgaWYgKCFudiAmJiB0aGlzLmJpbmRkYXRhc291cmNlICYmICF0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uRGF0YVNldENoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXNvdXJjZScpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTZXRDaGFuZ2UodGhpcy5kYXRhc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNzaWNcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIG52LCBvdik7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvblR5cGVDaGFuZ2UobnYpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0aW9uQ2xhc3MgPSB0aGlzLnBhZ2luYXRpb25jbGFzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpdGVtc3BlcnJvdycpIHtcbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwdWxsdG9yZWZyZXNoJyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdwdWxsVG9SZWZyZXNoOmVuYWJsZScpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1B1bGxUb1JlZnJlc2goKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdpbmF0aW9uY2xhc3MnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkaW5nIHNldFRpbWVvdXQgYmVjYXVzZSBpbiBwYWdpbmF0aW9uIGNvbXBvbmVudCB1cGRhdGVOYXZTaXplIG1ldGhvZCBpcyBvdmVycmlkaW5nIG5hdmlnYXRpb25jbGFzc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRpb25DbGFzcyA9IG52KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdlc2l6ZScpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSBudjsgLy8gbWFpbnRhaW4gZGVmYXVsdCBwYWdlIHNpemUgdG8gY2FsY3VsYXRlIHBhZ2VzaXplIG9wdGlvbnNcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2VTaXplKG52KVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2VuYWJsZXJlb3JkZXInKSB7XG4gICAgICAgICAgICBpZiAobnYgJiYgdGhpcy4kdWxFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZURuRCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLnNvcnRhYmxlKCdlbmFibGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4kdWxFbGUgJiYgIW52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLnNvcnRhYmxlKCdkaXNhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbXVsdGlzZWxlY3QnKSB7XG4gICAgICAgICAgICAvLyBtdWx0aXNlbGVjdCBiaW5kaW5nIGlzIGV2YWx1YXRlZCBhZnRlciBuZ0FmdGVyVmlld0luaXQsIHNvIGluaXRpYWwgdmFsdWUgbWF5IGJlIGluY29ycmVjdC5cbiAgICAgICAgICAgIC8vIFJlYXNzaWduaW5nIGhlcmUgdG8gZW5zdXJlIHNlbGVjdGVkSXRlbVdpZGdldHMgbWF0Y2hlcyB0aGUgdXBkYXRlZCBtdWx0aXNlbGVjdCB2YWx1ZS5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IG52ID8gW10gOiB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbGxvd3BhZ2VzaXplY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IuYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IG52O1xuICAgICAgICB9IGVsc2UgaWYoa2V5ID09PSAncGFnZXNpemVvcHRpb25zJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG92KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplb3B0aW9ucyA9IHRoaXMuc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKG52KTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHRoaXMuc2V0RGVmYXVsdFBhZ2VTaXplKG52KVxuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRQYWdlU2l6ZShudjogYW55KXtcbiAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgIG52ID0gZ2V0KHdpZGdldFN0YXRlLCAncGFnZXNpemUnKTtcbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjsgLy8gdXBkYXRpbmcgdGhlIGRlZmF1bHQgcGFnZXNpemUgdG8gdXNlciBzZWxlY3RlZCBwYWdlc2l6ZVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZXNpemVvcHRpb25zKSB7XG4gICAgICAgICAgICBudiA9IHRoaXMucGFnZXNpemVvcHRpb25zPy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGEgLSBiKVswXVxuICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG52O1xuICAgICAgICB9XG4gICAgICAgICBpZih0aGlzLmlzUGFnZVNpemVPcHRpb25zQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYikgfHwgW107XG4gICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRhdGFOYXZpZ2F0b3IuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICB9XG4gICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZWRQYWdlU2l6ZSA9IG52O1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IudXBkYXRlZFBhZ2VTaXplID0gbnY7XG5cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYXhSZXN1bHRzOiBudlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgaWYodGhpcy5kYXRhc291cmNlKXtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUGFnZVNpemVPcHRpb25zQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuICFpc0VxdWFsKHRoaXMucHJldlBhZ2VzaXplb3B0aW9ucywgdGhpcy5wYWdlc2l6ZW9wdGlvbnMpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VTaXplKHBhZ2VzaXplOiBudW1iZXIpIHtcbiAgICAgICAgaWYoIXRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAhcGFnZXNpemUpIHJldHVybjtcblxuICAgICAgICBpZihwYWdlc2l6ZSA8IHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnNbMF0gfHwgcGFnZXNpemUgPiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zW3RoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIHx8ICF0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKE51bWJlcihwYWdlc2l6ZSkpKSB7XG4gICAgICAgICAgICBwYWdlc2l6ZSA9IHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnNbMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9uUGFnZVNpemVDaGFuZ2UodW5kZWZpbmVkLCBwYWdlc2l6ZSk7XG4gICAgfVxuXG4gICAgc2FuaXRpemVDb21tYVNlcGFyYXRlZEludGVnZXJzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJcIjtcbiAgICAgICAgY29uc3QgdW5pcXVlTnVtYmVycyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gL14tP1xcZCskLy50ZXN0KHYpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4gTWF0aC5hYnMocGFyc2VJbnQodiwgMTApKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuaXF1ZU51bWJlcnMuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSXRlbUNsaWNrKGV2dDogYW55LCAkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgIGxldCBzZWxlY3RDb3VudDogbnVtYmVyO1xuXG4gICAgICAgIGlmICghJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbSB8fCAkbGlzdEl0ZW07XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHNlbGVjdENvdW50IHZhbHVlIGJhc2VkIG51bWJlciBvZiBpdGVtcyBzZWxlY3RlZC5cbiAgICAgICAgICAgIHNlbGVjdENvdW50ID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiAoaXNPYmplY3QodGhpcy5zZWxlY3RlZGl0ZW0pID8gMSA6IDApO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGluZyBtdWx0aXNlbGVjdCBmb3IgbW9iaWxlIGRldmljZVxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QgJiYgaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpIHx8ICRsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGV2dC5jdHJsS2V5IHx8IGV2dC5tZXRhS2V5KSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tTZWxlY3Rpb25MaW1pdChzZWxlY3RDb3VudCkgfHwgJGxpc3RJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudDogZXZ0fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQuc2hpZnRLZXkgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9ICRsaXN0SXRlbS5jb250ZXh0LmluZGV4O1xuICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbS5jb250ZXh0LmluZGV4O1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgZmlyc3QgaXMgZ3JlYXRlciB0aGFuIGxhc3QsIHRoZW4gc3dhcCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgPiBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBbZmlyc3QsIGZpcnN0ID0gbGFzdF1bMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQobGFzdCAtIGZpcnN0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKCgkbGlJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkbGlJdGVtLmNvbnRleHQuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gZmlyc3QgJiYgaW5kZXggPD0gbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISRsaXN0SXRlbS5pc0FjdGl2ZSB8fCBzZWxlY3RDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gJGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtcHR5IHRoZSBsaXN0IGNvbnRlbnQgb24gY2xlYXJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZXNlbGVjdHMgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgKiBAcGFyYW0gdmFsOiBpbmRleCB8IG1vZGVsIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0SXRlbSh2YWw6IGFueSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKHZhbCk7XG4gICAgICAgIGlmIChsaXN0SXRlbSAmJiBsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZWxlY3RzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKHZhbCwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWwpO1xuICAgICAgICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgdGhlIGVsZW1lbnQuXG4gICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVIZWFkZXJDbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbCh0aGlzLmRhdGFOYXZpZ2F0b3IsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSwgdGhpcyk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcyA9IHtcbiAgICAgICAgICAgIG1pbkluZGV4OiBudWxsLFxuICAgICAgICAgICAgbWF4SW5kZXg6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgdGhpcy5wcm9wc0luaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFVwQ1VESGFuZGxlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IHRoaXMubXVsdGlzZWxlY3QgPyBbXSA6IHt9O1xuICAgICAgICAgICAgdmFyIGVsZSA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVyZW9yZGVyICYmICF0aGlzLmdyb3VwYnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGUucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwYnkgJiYgdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSGVhZGVyQ2xpY2sgPSBoYW5kbGVIZWFkZXJDbGljaztcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUFsbEhlYWRlcnMgPSB0b2dnbGVBbGxIZWFkZXJzLmJpbmQodW5kZWZpbmVkLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuICAgICAgICBjb25zdCAkdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICBzdHlsZXIoJHVsIGFzIEhUTUxFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5TQ1JPTExBQkxFX0NPTlRBSU5FUik7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIGlmICgkdWwpIHtcbiAgICAgICAgICAgICAgICAkdWwuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgaWYgKCR1bCkge1xuICAgICAgICAgICAgICAgICR1bC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5fbGlzdEFuaW1hdG9yICYmIHRoaXMuX2xpc3RBbmltYXRvci4kYnRuU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0QW5pbWF0b3IuJGJ0blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fbGlzdEFuaW1hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIGFsbCBhcHAgc3Vic2NyaXB0aW9uc1xuICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJEZXN0cm95ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lckRlc3Ryb3llcnMuZm9yRWFjaChkID0+IGQgJiYgZCgpKTtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIG5hdmlnYXRvciB3YXRjaGVzXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gbGlzdEl0ZW1zIGNoYW5nZXNcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXNDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtc0NoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgbmF0aXZlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIGNvbnN0IHVsRWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAodWxFbGVtZW50ICYmIHRoaXMuYm91bmRDbGlja0hhbmRsZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdWxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJvdW5kQ2xpY2tIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogRGVzdHJveSBqUXVlcnkgc29ydGFibGUgd2lkZ2V0XG4gICAgICAgIGlmICh0aGlzLiR1bEVsZSAmJiB0aGlzLiR1bEVsZS5zb3J0YWJsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5zb3J0YWJsZSgnZGVzdHJveScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgZHVyaW5nIGRlc3Ryb3lcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJHVsRWxlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgUXVlcnlMaXN0IHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnRuQ29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhpcy5idG5Db21wb25lbnRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgVmlld0NoaWxkIGFuZCBDb250ZW50Q2hpbGQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RUZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdExlZnRBY3Rpb25UZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdFJpZ2h0QWN0aW9uVGVtcGxhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgYWxsIGRhdGEgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBlZERhdGEgPSBudWxsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgYWRkIGl0ZW0gZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgY29uc3QgJGFkZEl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYWRkLWxpc3QtaXRlbVwiKVswXTtcbiAgICAgICAgaWYgKCRhZGRJdGVtICYmIHRoaXMuYm91bmRBZGRJdGVtSGFuZGxlcikge1xuICAgICAgICAgICAgJGFkZEl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kQWRkSXRlbUhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5ib3VuZEFkZEl0ZW1IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogTnVsbGlmeSBjbG9zdXJlcyBhbmQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcyA9IG51bGw7XG5cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgLy8gdGFwIGFuZCBkb3VibGVUYXAgZXZlbnRzIGFyZSBub3QgZ2V0dGluZyBwcm9wYWdhdGVkLlNvLCB1c2luZyBtb3VzZSBldmVudHMgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgdG91Y2hUb01vdXNlID0ge1xuICAgICAgICAgICAgdGFwOiAnY2xpY2snLFxuICAgICAgICAgICAgZG91YmxldGFwOiAnZGJsY2xpY2snXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlcyhbJ2NsaWNrJywgJ3RhcCcsICdkYmxjbGljaycsICdkb3VibGV0YXAnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdG91Y2hUb01vdXNlW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuYXBwLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1Db250ZXh0OiBMaXN0SXRlbURpcmVjdGl2ZSA9IHRhcmdldC5kYXRhKCdsaXN0SXRlbUNvbnRleHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdEl0ZW1Db250ZXh0LmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6IGxpc3RJdGVtQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50OiBldnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGxpc3RJdGVtQ29udGV4dC5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmVkU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTdGF0ZVBhcmFtcyhvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQoZXZlbnROYW1lLCBpdGVtPykge1xuICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlzZWxlY3QgZm9yIHRoZSBsaXZlbGlzdChMaXN0IHdpdGggZm9ybSB0ZW1wbGF0ZSksIGluIHJ1biBtb2RlIGRlbGV0aW5nIGEgcmVjb3JkIGlzIGdldHRpbmcgZmFpbGVkLiBCZWN1YXNlIHRoZSBzZWxlY3RlZGl0ZW0gd2lsbCBiZSBhcnJheSBvZiBvYmplY3RzLiBTbyBjb25zaWRlciB0aGUgbGFzdCBvYmplY3QuXG4gICAgICAgIGxldCByb3cgPSB0aGlzLm11bHRpc2VsZWN0ID8gbGFzdCh0aGlzLnNlbGVjdGVkaXRlbSkgOiB0aGlzLnNlbGVjdGVkaXRlbTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJvdyA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWUsIHdpZGdldE5hbWU6IHRoaXMubmFtZSwgcm93OiByb3d9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0TmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLkJBU0lDO1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUlubGluZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuQ0xBU1NJQztcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVQYWdlck5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuUEFHRVI7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TmF2aWdhdGlvblR5cGVOb25lKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLk5PTkU7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUluZmluaXRlU2Nyb2xsKCkge1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVPbkRlbWFuZExvYWQoKSB7XG4gICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBOYXZpZ2F0aW9uIHR5cGUgZm9yIHRoZSBsaXN0LlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25UeXBlQ2hhbmdlKHR5cGUpIHtcbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb24oKTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5CQVNJQzpcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5saW5lTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuQURWQU5DRUQ6XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5DTEFTU0lDOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLlBBR0VSOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZXJOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5OT05FIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25UeXBlTm9uZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuU0NST0xMOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlT25EZW1hbmRMb2FkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgZmllbGREZWZzIHByb3BlcnR5LCBmaWVsZERlZnMgaXMgdGhlIG1vZGVsIG9mIHRoZSBMaXN0IENvbXBvbmVudC5cbiAgICAgKiBmaWVsZERlZnMgaXMgYW4gQXJyYXkgdHlwZS5cbiAgICAgKiBAcGFyYW0gbmV3VmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZERlZnMobmV3VmFsOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkge1xuICAgICAgICAgICAgW3RoaXMuZmllbGREZWZzLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IG5ld1ZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZzID0gZ2V0T3JkZXJlZERhdGFzZXQodGhpcy5maWVsZERlZnMsIHRoaXMub3JkZXJieSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkRGF0YSA9IGdyb3VwRGF0YSh0aGlzLCB0aGlzLmZpZWxkRGVmcywgdGhpcy5ncm91cGJ5LCB0aGlzLm1hdGNoLCB0aGlzLm9yZGVyYnksIHRoaXMuZGF0ZWZvcm1hdCwgdGhpcy5kYXRlUGlwZSwgdW5kZWZpbmVkLCB0aGlzLmFwcERlZmF1bHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuc2V0RGlydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5ld1ZhbCBpcyBub3QgZW1wdHlcbiAgICAgICAgaWYgKCFpc0VtcHR5KG5ld1ZhbCkpIHtcblxuICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvbmUgdGhlIHRoZSBkYXRhIGluIGNhc2Ugb2YgbGl2ZSBhbmQgc2VydmljZSB2YXJpYWJsZXMgdG8gcHJldmVudCB0aGUgdHdvLXdheSBiaW5kaW5nIGZvciB0aGVzZSB2YXJpYWJsZXMuXG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2xvbmVEZWVwKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc09iamVjdChuZXdWYWwpICYmICFpc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBpc0VtcHR5KG5ld1ZhbCkgPyBbXSA6IFtuZXdWYWxdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IG5ld1ZhbC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcGFnZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIDEgb24gaW5pdGlhbCBsb2FkIHRoZW4gd2UgcmVuZGVyIHRoZSBmaXJzdCBwYWdlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2Uub3duZXIgPT09ICdBcHAnICYmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkgJiYgIXRoaXMuY3VycmVudFBhZ2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKS5udW1iZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgICAgICdwYWdlJzogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiBuZXdWYWx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZERlZnMobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZXMgdGhlIGRhdGFTb3VyY2Ugd2hlbiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBDb21wb25lbnQuXG4gICAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2UoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFOYXZpZ2F0b3IgPSB0aGlzLmRhdGFOYXZpZ2F0b3I7XG5cbiAgICAgICAgZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCAyMFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvKkRlLXJlZ2lzdGVyIHRoZSB3YXRjaCBpZiBpdCBpcyBleGlzdHMgKi9cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwibWF4UmVzdWx0c1wiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBcInBhZ2VTaXplXCIgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0c0VtaXR0ZXIuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSB2YWw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgMjA7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlCaW5kaW5nKCdkYXRhc2V0Jyk7XG4gICAgICAgIC8vIHdoZW4gbGlzdCBoYXZpbmcgXCJkYXRhc2V0Ym91bmRleHByXCIgYXR0ciBpbmRpY2F0ZXMgdGhhdCBsaXN0IGlzIGJvdW5kIHRvIGl0ZW0gY29udGV4dFxuICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCIgdGhlbiBpdGVtIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSBkYXRhc291cmNlLlxuICAgICAgICBjb25zdCBkYXRhc2V0Qm91bmRFeHByID0gdGhpcy5nZXRBdHRyKCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldChcbiAgICAgICAgICAgIHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICB0aGlzLnZpZXdQYXJlbnQsXG4gICAgICAgICAgICBkYXRhc2V0Qm91bmRFeHByID8gdGhpcy5jb250ZXh0IDogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgdGhpcy5kYXRhc2V0LFxuICAgICAgICAgICAgdGhpcy5iaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIsXG4gICAgICAgICAgICB0aGlzLnN0YXRlaGFuZGxlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhU2V0Q2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHRoaXMuX3BhZ2VMb2FkKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIG1haW50YWluIHVwZGF0ZWQgcGFnZSBzaXplIGluIHRoZSBzdGF0ZVBlcnNpc3RlbmNlXG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSB8fCBnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ2hhbmdlZCh7cGFnZTogd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxLCBwYWdlc2l6ZTogd2lkZ2V0U3RhdGUucGFnZXNpemV9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9ufSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gJiYgdGhpcy5uYXZpZ2F0aW9uICE9PSBOQVZJR0FUSU9OX1RZUEUuTk9ORSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uICYmIHRoaXMubmF2aWdhdGlvbiAhPT0gTkFWSUdBVElPTl9UWVBFLk5PTkUpIHtcbiAgICAgICAgICAgIC8vIElmIG5hdmlnYXRpb24gaXMgYWxyZWFkeSBzZXR1cCBhbmQgZGF0YXNvdXJjZSBpcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIGRhdGFzb3VyY2Ugb24gbmF2aWdhdGlvblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnNldERhdGFTb3VyY2UodGhpcy5kYXRhc291cmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbCB0aGUgTGlzdEl0ZW0ncyBBY3RpdmUgc3RhdGUgaXMgc2V0IHRvIGZhbHNlLlxuICAgIHByaXZhdGUgZGVzZWxlY3RMaXN0SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlzQWN0aXZlID0gZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERlc2VsZWN0IGFsbCB0aGUgTGlzdEl0ZW1zIGFuZCBjbGVhciB0aGUgc2VsZWN0ZWRpdGVtKEluT3V0Qm91bmQgUHJvcGVydHkgbW9kZWwpXG4gICAgcHJpdmF0ZSBjbGVhclNlbGVjdGVkSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RMaXN0SXRlbXMoKTtcbiAgICAgICAgdGhpcy5faXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgTGlzdEl0ZW1EaXJlY3RpdmUgaW5zdGFuY2UgYnkgY2hlY2tpbmcgdGhlIGVxdWFsaXR5IG9mIHRoZSBtb2RlbC5cbiAgICAgKiBAcGFyYW0gbGlzdE1vZGVsOiBtb2RlbCB0byBiZSBzZWFyY2hlZCBmb3JcbiAgICAgKiBAcmV0dXJucyBMaXN0SXRlbSBpZiB0aGUgbW9kZWwgaXMgbWF0Y2hlZCBlbHNlIHJldHVybiBudWxsLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGlzdEl0ZW1CeU1vZGVsKGxpc3RNb2RlbCk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLmZpbmQoKGxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbU9iaiA9IGxpc3RJdGVtLml0ZW07XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cGJ5ICYmICFoYXMobGlzdE1vZGVsLCAnX2dyb3VwSW5kZXgnKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwYnkgaXMgZW5hYmxlZCwgaXRlbSBjb250YWlucyBfZ3JvdXBJbmRleCBwcm9wZXJ0eSB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQgd2hpbGUgY29tcGFyaW5nIG1vZGVsLlxuICAgICAgICAgICAgICAgIGl0ZW1PYmogPSBjbG9uZShpdGVtT2JqKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbU9iai5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0VxdWFsKGl0ZW1PYmosIGxpc3RNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSXRlbXNXaWRnZXRzKHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmogPSB7fSwgd2lkZ2V0U3RhdGU7XG4gICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBnZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBjb25maWd1cmVkIHNlbGVjdGVkIGl0ZW1zIGZvciBjdXJyZW50IHBhZ2UgYW5kIGNvbnN0cnVjdCBuZXcgb25lcyBsYXRlciBiZWxvdy5cbiAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpIHx8IHt9O1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBtdWx0aXNlbGVjdCBpcyBvbiBhbmQgYW4gaXRlbSBpcyBzZWxlY3RlZCB3aXRob3V0IHByZXNzaW5nIENUUkwsIHByZXZpb3VzbHkgc2VsZWN0ZWQgaXRlbXMgaW4gc3RhdGUgc2hvdWxkIGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0ucGFnZSA9PT0gcGFnZU51bTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzIGFzIEFycmF5PFdpZGdldFJlZj4pLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgYXMgQXJyYXk8V2lkZ2V0UmVmPikucHVzaChpdGVtLmN1cnJlbnRJdGVtV2lkZ2V0cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzID0gaXRlbS5jdXJyZW50SXRlbVdpZGdldHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iaiA9IHtwYWdlOiBwYWdlTnVtLCBpbmRleDogaW5kZXh9O1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbb2JqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmICFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdGhlIGxpc3RJdGVtIGFuZCB1cGRhdGVzIHNlbGVjdGVkaXRlbSBwcm9wZXJ0eS5cbiAgICAgKiBJZiB0aGUgbGlzdEl0ZW0gaXMgYWxyZWFkeSBhIHNlbGVjdGVkIGl0ZW0gdGhlbiBkZXNlbGVjdHMgdGhlIGl0ZW0uXG4gICAgICogQHBhcmFtIHtMaXN0SXRlbURpcmVjdGl2ZX0gJGxpc3RJdGVtOiBJdGVtIHRvIGJlIHNlbGVjdGVkIG9mIGRlc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICAvLyBpdGVtIGlzIG5vdCBhbGxvd2VkIHRvIGdldCBzZWxlY3RlZCBpZiBpdCBpcyBkaXNhYmxlZC5cbiAgICAgICAgaWYgKCRsaXN0SXRlbSAmJiAhJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9ICRsaXN0SXRlbS5pdGVtO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSAmJiBoYXMoaXRlbSwgJ19ncm91cEluZGV4JykpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cGJ5IGlzIGVuYWJsZWQsIGl0ZW0gY29udGFpbnMgX2dyb3VwSW5kZXggcHJvcGVydHkgd2hpY2ggc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VsZWN0ZWRpdGVtLlxuICAgICAgICAgICAgICAgIGl0ZW0gPSBjbG9uZShpdGVtKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbS5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHB1bGxBbGxXaXRoKHRoaXMuX2l0ZW1zLCBbaXRlbV0sIGlzRXF1YWwpO1xuICAgICAgICAgICAgICAgICRsaXN0SXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBtdWx0aXNlbGVjdCBpcyBmYWxzZSwgY2xlYXIgdGhlIHNlbGVjdEl0ZW0gbGlzdCBiZWZvcmUgYWRkaW5nIGFuIGl0ZW0gdG8gdGhlIHNlbGVjdEl0ZW0gbGlzdC5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHt3aWRnZXQ6ICRsaXN0SXRlbSwgJGRhdGE6IGl0ZW19KTtcbiAgICAgICAgICAgICAgICAkbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW1zV2lkZ2V0cyhzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBpcyBJbnZva2VkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgTGlzdCBXaWRnZXQgaXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT59IGxpc3RJdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25MaXN0UmVuZGVyKGxpc3RJdGVtczogUXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPikge1xuICAgICAgICAvLyBBZGRlZCByZW5kZXIgY2FsbGJhY2sgZXZlbnQuIFRoaXMgbWV0aG9kKG9uTGlzdFJlbmRlcikgaXMgY2FsbGluZyBtdWx0aXBsZSB0aW1lcyBzbyBjaGVja2luZyBpc0RhdGFjaGFuZ2VkIGZsYWcgYmVjYXVzZSB0aGlzIGZhbGcgaXMgY2hhbmdlZCB3aGVuZXZlciBuZXcgZGF0YSBpcyByZW5kZXJlZC5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhQ2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gV2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkLCB0cmlnZ2VyIHdhdGNoZXJzIHRvIGV2YWx1YXRlIGxpc3RpdGVtIGJpbmQgZXhwcmVzc2lvbnMuXG4gICAgICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbmRlcicsIHskZGF0YTogdGhpcy5maWVsZERlZnN9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RhdGFDaGFuZ2VkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiBsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zTGVuZ3RoID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiB0b051bWJlcighaXNFbXB0eSh0aGlzLnNlbGVjdGVkaXRlbSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxO1xuICAgICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgaXRlbSBzZWxlY3Rpb24gZnJvbSBiZWluZyB0cmlnZ2VyZWQgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtc0xlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCAmJiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID09PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucGFnZSA9PT0gY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbS5pbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbSA6IFt0aGlzLnNlbGVjdGVkaXRlbV07XG5cbiAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IG51bGw7XG5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IGl0ZW0gaXMgYWxyZWFkeSBzZWxlY3RlZCBpbiB0aGUgbGlzdC5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgc3RhdGUgaW5mb3JtYXRpb24gaGFzIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgIGlmIChsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0Zmlyc3RpdGVtICYmICEodGhpcy5faXRlbXMubGVuZ3RoICYmIHRoaXMubXVsdGlzZWxlY3QpICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0ICRmaXJzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gbGlzdEl0ZW1zLmZpcnN0O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgISRmaXJzdEl0ZW0uZGlzYWJsZUl0ZW0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUNoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBcImluZmluaXRlIHNjcm9sbFwiIG9yIFwibG9hZCBvbiBkZW1hbmRcIiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZCB0aGVuIGRvbnQgYWx0ZXIgdGhlIHNlbGVjdGVkIGxpc3QgaXRlbXMuXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkZmlyc3RJdGVtO1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGluZyB0aGUgZmlyc3QgcmVjb3JkXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKHNlbGVjdGVkaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwoc2VsZWN0ZWRpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aFNjcm9sbEVsID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGxdJyk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG1vYmlsZSBhcHAgd2hlbiBtb2RhbCBleGlzdHMsIGFuZCBsaXN0IGl0ZW1zIGhlaWdodCBpcyBncmVhdGVyIHRoYW4gdGhlIG1vZGFsIGNvbnRlbnQgcHJvdmlkZSBjY29udGFpbmVyIGEgc2Nyb2xsYWJsZSBoZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsQm9keSA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWJvZHknKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RIdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgndWwnKS5oZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsSHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxNDA7XG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiBtb2RhbEJvZHkubGVuZ3RoICYmIGxpc3RIdCA+IG1vZGFsSHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmNzcygnaGVpZ2h0JywgbW9kYWxIdCArICdweCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICc+IHVsJywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLmxpc3RJdGVtc0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShsaXN0SXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RSZW5kZXIobGlzdEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaGFuZGxlIGNsaWNrIGV2ZW50IGluIGNhcHR1cmluZyBwaGFzZS5cbiAgICAgICAgdGhpcy5ib3VuZENsaWNrSGFuZGxlciA9ICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSAkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5hcHAtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRoZSBjdXJyZW50IGxpc3QgaXRlbVxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5nZXQoMCkgJiYgKHRhcmdldC5jbG9zZXN0KCd1bC5hcHAtbGl2ZWxpc3QtY29udGFpbmVyJykuZ2V0KDApICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50KCkuY2xvc2VzdCgnLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxpc3RJdGVtU2VsZWN0aW9uKHRhcmdldCwgJGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdWxFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgaWYgKHVsRWxlbWVudCkge1xuICAgICAgICAgICAgdWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VycyBvbiBkcmFnIHN0YXJ0IHdoaWxlIHJlb3JkZXJpbmcuXG4gICAgcHJpdmF0ZSBvblJlb3JkZXJTdGFydChldnQsIHVpKSB7XG4gICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCh1aS5pdGVtLmhlaWdodCgpKTtcbiAgICAgICAgdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnLCB1aS5pdGVtLmluZGV4KCkpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGR1cmluZyBzb3J0aW5nXG4gICAgcHJpdmF0ZSBvblNvcnQoZXZ0LCB1aSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCwgd2hlbiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgc2Nyb2xsIGVuYWJsZWRcbiAgICAgICAgLy8gb24gZHJhZ2dpbmcgdGhlIGVsZW1lbnQgdG8gbGFzdCBpdGVtJ3MgcG9zaXRpb24gbWFudWFsbHkgdHJpZ2dlciBsb2FkaW5nIG9mIG5leHQgaXRlbXNcbiAgICAgICAgaWYgKHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IHRoaXMuJHVsRWxlLmZpbmQoYFtsaXN0aXRlbWluZGV4PSR7dGhpcy5maWVsZERlZnMubGVuZ3RoIC0gMX1dYCkub2Zmc2V0KCk7XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW1PZmZzZXQgJiYgbGFzdEl0ZW1PZmZzZXQudG9wIDwgdWkub2Zmc2V0LnRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuYmluZFNjcm9sbEV2dCh0aGlzLCAnPiB1bCcsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGFmdGVyIHRoZSBzb3J0aW5nLlxuICAgIHByaXZhdGUgb25VcGRhdGUoZXZ0LCB1aSwgcHJlc2VudEluZGV4Pykge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWVsZERlZnM7XG4gICAgICAgIC8vIElmIHVpIGlzIG5vdCBwcmVzZW50IHRoZW4gaXQgaXMgY2FsbGVkIGZyb20gZHJhZyBhbmQgZHJvcCB1c2luZyBrZXlib2FyZFxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHVpID09PSB1bmRlZmluZWQgPyBwcmVzZW50SW5kZXggOiB1aS5pdGVtLmluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnKTtcblxuICAgICAgICBjb25zdCBtaW5JbmRleCA9IG1pbihbbmV3SW5kZXgsIG9sZEluZGV4XSk7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gbWF4KFtuZXdJbmRleCwgb2xkSW5kZXhdKTtcblxuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHB1bGxBdChkYXRhLCBvbGRJbmRleClbMF07XG4gICAgICAgIC8vIE1vZGlmeSB0aGUgZGF0YSBsaXN0IG9ubHkgaWYgd2UgZmluZCBhIGRyYWdnZWRJdGVtXG4gICAgICAgIGlmIChkcmFnZ2VkSXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1pbkluZGV4ID0gbWluKFttaW5JbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWluSW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1heEluZGV4ID0gbWF4KFttYXhJbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWF4SW5kZXhdKTtcblxuICAgICAgICAgICAgZGF0YS5zcGxpY2UobmV3SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgJGNoYW5nZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZGF0YVtuZXdJbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlb3JkZXInLCB7JGV2ZW50OiBldnQsICRkYXRhOiBkYXRhLCAkY2hhbmdlZEl0ZW19KTtcbiAgICAgICAgICAgIHRoaXMuJHVsRWxlLnJlbW92ZURhdGEoJ29sZEluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmVzIHJlb3JkZXJpbmcgdGhlIGxpc3QgaXRlbXMuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEbkQoKSB7XG4gICAgICAgIGxldCBhcHBlbmRUbztcbiAgICAgICAgY29uc3QgbW9kYWxFbCA9ICQoZG9jdW1lbnQpLmZpbmQoJy5tb2RhbCcpO1xuICAgICAgICBpZiAodGhpcy5nZXRBdHRyKCdoZWlnaHQnKSkgeyAvLyB3aGVuIGhlaWdodCBpcyBhcHBsaWVkIHRvIHRoZSBsaXN0LCBhcHBlbmQgc2hvdWxkIGJlIHRoZSB1bCdzIHBhcmVudCBhcyBzY3JvbGwgaXMgYXBwbGllZCB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdwYXJlbnQnO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGFsRWwubGVuZ3RoKSB7IC8vIEluIGNhc2Ugb2YgZGlhbG9nLCBhcHBlbmRUbyBzaG91bGQgYmUgdGhlIG1vZGFsIGVsZVxuICAgICAgICAgICAgYXBwZW5kVG8gPSBtb2RhbEVsW21vZGFsRWwubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7IC8vIEFzIGRlZmF1bHQgYXBwZW5kIHRvIHNob3VsZCBiZSBib2R5XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdib2R5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhcHBlbmRUbzogYXBwZW5kVG8sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgJGVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLiR1bEVsZSA9ICRlbC5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgIGNvbmZpZ3VyZURuRCh0aGlzLiR1bEVsZSwgb3B0aW9ucywgdGhpcy5vblJlb3JkZXJTdGFydC5iaW5kKHRoaXMpLCB0aGlzLm9uVXBkYXRlLmJpbmQodGhpcyksIHRoaXMub25Tb3J0LmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHVsRWxlLmRyb3BwYWJsZSh7J2FjY2VwdCc6ICcuYXBwLWxpc3QtaXRlbSd9KTtcblxuXG5cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGlvbiBsaW1pdCBpcyByZWFjaGVkLlxuICAgIHByaXZhdGUgY2hlY2tTZWxlY3Rpb25MaW1pdChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuc2VsZWN0aW9ubGltaXQgfHwgY291bnQgPCB0aGlzLnNlbGVjdGlvbmxpbWl0KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxpc3RpdGVtIHJlZmVyZW5jZSBieSBpbmRleCB2YWx1ZS5cbiAgICBwcml2YXRlIGdldExpc3RJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKTogTGlzdEl0ZW1EaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gaW5kZXggb2YgYW4gKGxpc3RJdGVtRGlyZWN0aXZlKSBpbiB0aGUgbGlzdEl0ZW1cbiAgICAgKiBAcGFyYW0ge0xpc3RJdGVtRGlyZWN0aXZlfSBpdGVtXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpc3RJdGVtSW5kZXgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIExpc3RJdGVtIFJlZmVyZW5jZSBiYXNlZCBvbiB0aGUgaW5wdXQgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIEByZXR1cm5zIHtMaXN0SXRlbURpcmVjdGl2ZX1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWw6IGFueSk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgbGV0IGxpc3RJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbCkpIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdEl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZWZvcmVQYWdpbmF0aW9uQ2hhbmdlKCRldmVudCwgJGluZGV4KSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQsICRpbmRleH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbigkaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gJGluZGV4OyAvLyBSZXR1cm4gYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBpdGVtXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBkYXRhc291cmNlIHZhcmlhYmxlIGJ5IGRlZmF1bHQgd2hlbiBwdWxsdG9yZWZyZXNoIGV2ZW50IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1B1bGxUb1JlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgncHVsbHRvcmVmcmVzaCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJvdW5kQWRkSXRlbUhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHNldFVwQ1VESGFuZGxlcnMoKSB7XG4gICAgICAgIGNvbnN0ICRhZGRJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFkZC1saXN0LWl0ZW1cIilbMF07XG4gICAgICAgIGlmICgkYWRkSXRlbSkge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kQWRkSXRlbUhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGFkZCBhY3Rpb25cbiAgICAgICAgICAgICRhZGRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZEFkZEl0ZW1IYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAodGl0bGUgfHwgc3ViaGVhZGluZyB8fCBpY29uY2xhc3MpIHtcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtoaWRkZW5dPVwiIWljb25jbGFzc1wiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2gzPlxuICA8L2Rpdj5cbn1cblxuQGlmIChuYXZpZ2F0aW9uID09PSAnSW5saW5lJyAmJiAhbm9EYXRhRm91bmQpIHtcbiAgPGRpdiBjbGFzcz1cImFwcC1kYXRhbmF2aWdhdG9yXCIgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZVByZXZpb3VzXCIgYXJpYS1sYWJlbD1cIlBhZ2UgbmF2aWdhdGlvblwiPlxuICAgIDx1bCBjbGFzcz1cInBhZ2VyXCI+XG4gICAgICA8bGkgY2xhc3M9XCJwcmV2aW91c1wiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiAoZGF0YU5hdmlnYXRvciA/IGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXMgOiB0cnVlKX1cIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBQcmV2aW91cyBwYWdlIHt7ZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVQcmV2aW91cyA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG59XG5AaWYgKG5hdmlnYXRpb24gPT09ICdJbmxpbmUnICYmICFub0RhdGFGb3VuZCkge1xuICA8ZGl2IGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGNsYXNzPVwic3Itb25seVwiPiB7eydQYWdlICcgKyBkYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgZGF0YU5hdmlnYXRvci5wYWdlQ291bnQgfX08L2Rpdj5cbn1cblxuPGRpdj5cbiAgQGlmIChlbmFibGVyZW9yZGVyKSB7XG4gICAgPGRpdiBpZD17e3RpdGxlSWR9fSBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgIFByZXNzIHNwYWNlIGJhciB0byB0b2dnbGUgZHJhZyBkcm9wIG1vZGUsIHVzZSBhcnJvdyBrZXlzIHRvIG1vdmUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKGxpc3RJdGVtcyAmJiBlbmFibGVyZW9yZGVyICYmIGN1cnJlbnRJbmRleCkge1xuICAgIDxkaXYgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgY2xhc3M9XCJzci1vbmx5XCIgPlxuICAgICAge3thcmlhVGV4dCArIGN1cnJlbnRJbmRleCArICcgb2YgJyArICBsaXN0SXRlbXMubGVuZ3RofX1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjx1bCBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiICBjbGFzcz1cImFwcC1saXZlbGlzdC1jb250YWluZXIgY2xlYXJmaXgge3tkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdhcHAtaG9yaXpvbnRhbC1saXN0JzogJyd9fSB7e2xpc3RjbGFzc319XCIgcm9sZT1cImxpc3RcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdCcpXCJcblxuICAoa2V5ZG93bi5zcGFjZSk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NwYWNlJylcIlxuXG4gIChrZXlkb3duLmFycm93dXApPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdmb2N1c1ByZXYnKVwiXG4gIChrZXlkb3duLmFycm93ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ2ZvY3VzTmV4dCcpXCJcbiAgKGtleWRvd24uYXJyb3dsZWZ0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNQcmV2JylcIlxuICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNOZXh0JylcIlxuXG4gIChrZXlkb3duLnNoaWZ0LmFycm93dXApPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3RQcmV2JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd2Rvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3ROZXh0JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd2xlZnQpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3RQcmV2JylcIlxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd3JpZ2h0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0TmV4dCcpXCJcbiAgW2hpZGRlbl09XCJub0RhdGFGb3VuZCAmJiAhdmFyaWFibGVJbmZsaWdodFwiXG4gID5cbiAgQGlmICghZ3JvdXBieSkge1xuICAgIEBmb3IgKGl0ZW0gb2YgZmllbGREZWZzOyB0cmFjayBpdGVtKSB7XG4gICAgICA8bGkgY2xhc3M9XCJhcHAtbGlzdC1pdGVtIHt7ZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnJyA6IGl0ZW1zUGVyUm93Q2xhc3N9fVwiIFtuZ0NsYXNzXT1cImxpc3RJdGVtUmVmLml0ZW1DbGFzc1wiXG4gICAgICAgIFt3bUxpc3RJdGVtXT1cIml0ZW1cIlxuICAgICAgICAjbGlzdEl0ZW1SZWY9XCJsaXN0SXRlbVJlZlwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgcm9sZT1cImxpc3RpdGVtXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdmYWx0XycgKyBsaXN0SXRlbVJlZi50cmFja0lkLCB7aXRlbTogaXRlbSwgJGluZGV4OiAkaW5kZXgsIGl0ZW1SZWY6IGxpc3RJdGVtUmVmLCAkZmlyc3Q6ICRmaXJzdCwgJGxhc3Q6ICRsYXN0LCBjdXJyZW50SXRlbVdpZGdldHM6IGxpc3RJdGVtUmVmLmN1cnJlbnRJdGVtV2lkZ2V0c30pXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLCAkaW5kZXg6ICRpbmRleCwgaXRlbVJlZjogbGlzdEl0ZW1SZWYsICRmaXJzdDogJGZpcnN0LCAkbGFzdDogJGxhc3QsIGN1cnJlbnRJdGVtV2lkZ2V0czogbGlzdEl0ZW1SZWYuY3VycmVudEl0ZW1XaWRnZXRzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9saT5cbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBmb3IgKGdyb3VwT2JqIG9mIGdyb3VwZWREYXRhOyB0cmFjayBncm91cE9iajsgbGV0IGdyb3VwSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxsaSBjbGFzcz1cImFwcC1saXN0LWl0ZW0tZ3JvdXAgY2xlYXJmaXhcIj5cbiAgICAgICAgPHVsIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCIgY2xhc3M9XCJsaXN0LWdyb3VwIGl0ZW0tZ3JvdXBcIiBbbmdDbGFzc109XCJsaXN0Y2xhc3NcIj5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJhcHAtbGlzdC1pdGVtLWhlYWRlciBsaXN0LWl0ZW0gbGlzdC1ncm91cC1oZWFkZXJcIiAoY2xpY2spPVwiaGFuZGxlSGVhZGVyQ2xpY2soJGV2ZW50KVwiIFtuZ0NsYXNzXT1cInsnY29sbGFwc2libGUtY29udGVudCc6IGNvbGxhcHNpYmxlfVwiPlxuICAgICAgICAgICAgPGg0Pnt7Z3JvdXBPYmoua2V5fX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIGFjdGlvbiB3aS1jaGV2cm9uLXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHNob3djb3VudCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1kZWZhdWx0XCI+e3tncm91cE9iai5kYXRhLmxlbmd0aH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgY2xlYXJmaXgge3tkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdhcHAtaG9yaXpvbnRhbC1saXN0JzogJyd9fVwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwT2JqLmRhdGE7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgPGxpIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXBwLWxpc3QtaXRlbSBncm91cC1saXN0LWl0ZW0ge3tpdGVtc1BlclJvd0NsYXNzfX1cIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibGlzdEl0ZW1SZWYuaXRlbUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgIFt3bUxpc3RJdGVtXT1cIml0ZW1cIiAjbGlzdEl0ZW1SZWY9XCJsaXN0SXRlbVJlZlwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImNyZWF0ZUN1c3RvbUluamVjdG9yKCdncm91cF8nICsgbGlzdEl0ZW1SZWYudHJhY2tJZCwge2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9KVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICB9XG4gIH1cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0TGVmdEFjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFJpZ2h0QWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvdWw+XG5cbkBpZiAobm9EYXRhRm91bmQgJiYgIXZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtbXNnXCIgW3RleHRDb250ZW50XT1cIm5vZGF0YW1lc3NhZ2VcIj48L2Rpdj5cbn1cblxuQGlmICh2YXJpYWJsZUluZmxpZ2h0ICYmICFwdWxsdG9yZWZyZXNoKSB7XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWRhdGEtbXNnXCI+XG4gICAgPHNwYW4+XG4gICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24gZmEtc3BpblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImxvYWRpbmdpY29uXCI+PC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TG9hZGluZzwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibG9hZGluZy10ZXh0XCIgW3RleHRDb250ZW50XT1cImxvYWRpbmdkYXRhbXNnXCI+PC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG59XG5cbkBpZiAobmF2aWdhdGlvbiA9PT0gJ0lubGluZScgJiYgIW5vRGF0YUZvdW5kKSB7XG4gIDxkaXYgY2xhc3M9XCJhcHAtZGF0YW5hdmlnYXRvclwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0XCI+XG4gICAgPHVsIGNsYXNzPVwicGFnZXJcIj5cbiAgICAgIDxsaSBjbGFzcz1cIm5leHRcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogKGRhdGFOYXZpZ2F0b3IgPyBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgIDogdHJ1ZSl9XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gTmV4dCBwYWdlIHt7ZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbn1cblxuQGlmIChuYXZpZ2F0aW9uICE9PSAnTm9uZScpIHtcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlclwiIFtoaWRkZW5dPVwiIXNob3dOYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCAoZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemUgJiYgIWFsbG93cGFnZXNpemVjaGFuZ2UpIHx8ICghZGF0YU5hdmlnYXRvci5kYXRhU2l6ZSAmJiAhZGF0YU5hdmlnYXRvci5kYXRhc291cmNlPy5wYWdpbmF0aW9uPy5uZXh0KVwiPlxuICAgIDxuYXYgd21QYWdpbmF0aW9uXG4gICAgICBuYXZpZ2F0aW9uYWxpZ24uYmluZD1cIm5hdmlnYXRpb25hbGlnblwiXG4gICAgICBuYXZpZ2F0aW9uLmJpbmQ9XCJuYXZDb250cm9sc1wiXG4gICAgICBzaG93cmVjb3JkY291bnQuYmluZD1cInNob3dyZWNvcmRjb3VudFwiXG4gICAgICBtYXhzaXplLmJpbmQ9XCJtYXhzaXplXCJcbiAgICAgIGJvdW5kYXJ5bGlua3MuYmluZD1cImJvdW5kYXJ5bGlua3NcIlxuICAgICAgZm9yY2VlbGxpcHNlcy5iaW5kPVwiZm9yY2VlbGxpcHNlc1wiXG4gICAgICBkaXJlY3Rpb25saW5rcy5iaW5kPVwiZGlyZWN0aW9ubGlua3NcIlxuICAgICAgc2hvdy5iaW5kPVwiIW9uRGVtYW5kTG9hZFwiXG4gICAgICBwYWdpbmF0aW9uY2hhbmdlLmV2ZW50PVwiYmVmb3JlUGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQsICRpbmRleClcIlxuICAgID48L25hdj5cbiAgICBAaWYgKG9uRGVtYW5kTG9hZCkge1xuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAoY2xpY2spPVwiZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJhcHAtYnV0dG9uIGJ0biBidG4tYmxvY2tcIlxuICAgICAgICBbbmdDbGFzc109XCJwYWdpbmF0aW9uY2xhc3NcIlxuICAgICAgICBbdGV4dENvbnRlbnRdPVwib25kZW1hbmRtZXNzYWdlXCJcbiAgICAgID48L2E+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuPCEtLVRoaXMgdGVtcGxhdGUgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBncm91cGJ5IGlzIHNwZWNpZmllZC0tPlxuIl19