@wavemaker/app-ng-runtime 11.11.6-rc.6189 → 11.11.7-rc.217

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 (52) hide show
  1. package/build-task/bundles/index.umd.js +1 -1
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +2 -2
  3. package/build-task/fesm2022/index.mjs +1 -1
  4. package/build-task/fesm2022/index.mjs.map +1 -1
  5. package/components/base/bundles/index.umd.js +21 -3
  6. package/components/base/components.module.d.ts +1 -1
  7. package/components/base/esm2022/components.module.mjs +8 -5
  8. package/components/base/esm2022/pipes/custom-pipes.mjs +16 -2
  9. package/components/base/esm2022/public_api.mjs +2 -2
  10. package/components/base/fesm2022/index.mjs +24 -7
  11. package/components/base/fesm2022/index.mjs.map +1 -1
  12. package/components/base/pipes/custom-pipes.d.ts +5 -0
  13. package/components/base/public_api.d.ts +1 -1
  14. package/components/basic/default/bundles/index.umd.js +8 -1
  15. package/components/basic/default/esm2022/label/label.directive.mjs +9 -2
  16. package/components/basic/default/fesm2022/index.mjs +8 -1
  17. package/components/basic/default/fesm2022/index.mjs.map +1 -1
  18. package/components/basic/search/bundles/index.umd.js +19 -4
  19. package/components/basic/search/esm2022/search.component.mjs +20 -5
  20. package/components/basic/search/fesm2022/index.mjs +19 -4
  21. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  22. package/components/basic/search/search.component.d.ts +1 -0
  23. package/components/containers/wizard/bundles/index.umd.js +135 -5
  24. package/components/containers/wizard/esm2022/wizard.component.mjs +137 -7
  25. package/components/containers/wizard/fesm2022/index.mjs +136 -6
  26. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  27. package/components/containers/wizard/wizard.component.d.ts +7 -0
  28. package/components/data/table/bundles/index.umd.js +1 -1
  29. package/components/data/table/esm2022/table-filter.directive.mjs +2 -2
  30. package/components/data/table/fesm2022/index.mjs +1 -1
  31. package/components/data/table/fesm2022/index.mjs.map +1 -1
  32. package/components/input/chips/bundles/index.umd.js +5 -2
  33. package/components/input/chips/esm2022/chips.component.mjs +6 -3
  34. package/components/input/chips/fesm2022/index.mjs +5 -2
  35. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  36. package/components/input/default/bundles/index.umd.js +14 -2
  37. package/components/input/default/esm2022/base-form.component.mjs +15 -3
  38. package/components/input/default/fesm2022/index.mjs +14 -2
  39. package/components/input/default/fesm2022/index.mjs.map +1 -1
  40. package/components/input/epoch/bundles/index.umd.js +15 -4
  41. package/components/input/epoch/esm2022/base-date-time.component.mjs +16 -5
  42. package/components/input/epoch/fesm2022/index.mjs +15 -4
  43. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  44. package/npm-shrinkwrap.json +2 -2
  45. package/package-lock.json +2 -2
  46. package/package.json +1 -1
  47. package/runtime/base/bundles/index.umd.js +8 -4
  48. package/runtime/base/esm2022/services/app.manager.service.mjs +8 -5
  49. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -3
  50. package/runtime/base/fesm2022/index.mjs +10 -6
  51. package/runtime/base/fesm2022/index.mjs.map +1 -1
  52. package/scripts/datatable/datatable.js +8 -3
@@ -439,8 +439,11 @@
439
439
  }
440
440
  // To avoid form submit on pressing enter key
441
441
  stopEvent($event) {
442
- $event.stopPropagation();
443
- $event.preventDefault();
442
+ const inputValue = $event.target?.value ?? '';
443
+ if (inputValue.trim()) {
444
+ $event.stopPropagation();
445
+ $event.preventDefault();
446
+ }
444
447
  }
445
448
  onTextDelete($event) {
446
449
  if (core.isAppleProduct) {
@@ -378,8 +378,11 @@ export class ChipsComponent extends DatasetAwareFormComponent {
378
378
  }
379
379
  // To avoid form submit on pressing enter key
380
380
  stopEvent($event) {
381
- $event.stopPropagation();
382
- $event.preventDefault();
381
+ const inputValue = $event.target?.value ?? '';
382
+ if (inputValue.trim()) {
383
+ $event.stopPropagation();
384
+ $event.preventDefault();
385
+ }
383
386
  }
384
387
  onTextDelete($event) {
385
388
  if (isAppleProduct) {
@@ -690,4 +693,4 @@ export class ChipsComponent extends DatasetAwareFormComponent {
690
693
  args: [SearchComponent, /* TODO: add static flag */ { static: true }]
691
694
  }] }); })();
692
695
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChipsComponent, { className: "ChipsComponent", filePath: "chips.component.ts", lineNumber: 57 }); })();
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBRUgsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNILFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsRUFDWixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBZSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBaUIsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hMLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFDSCxLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxFQUFFLE9BQU8sRUFDaEIsT0FBTyxF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QUNqQix3QkFBb0IsS0FBQywrSUFDbEIsd0JBQW9CLEtBQUMseUlBQ3JCLGlCQUFhLEtBQUMsMklBQ2Isa0JBQWMsS0FBQztZQUV6QyxBQURFLGlCQUFNLEVBQ0g7O1lBbkRMLDRCQXdCQztZQUMyQixlQUFpRDtZQUFqRCwrRUFBaUQ7NEJEdUJqRSxZQUFZLGNBQUUsa0JBQWtCLDJCQUFFLGVBQWU7O2lGQVFoRCxjQUFjO2NBVjFCLFNBQVM7NkJBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxZQUNoRCxXQUFXLGFBRVY7b0JBQ1AsU0FBUyxpQkFBaUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO29CQUNsRCxrQkFBa0IsZ0JBQWdCO2lCQUNyQzs7c0JBeUNJLFNBQVM7dUJBQUMsbUJBQW1COztzQkFDN0IsU0FBUzt1QkFBQyx3QkFBd0I7O3NCQUNsQyxTQUFTO3VCQUFDLHNCQUFzQjs7c0JBQ2hDLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxjQUFjOztzQkFDeEIsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkE3QitCLGVBQWU7a0JBQXRGLFNBQVM7bUJBQUMsZUFBZSxFQUFFLDJCQUEyQixDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7a0ZBaEI3RCxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFdtQ29tcG9uZW50c01vZHVsZSB9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGRlYm91bmNlLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGlzRGVmaW5lZCxcbiAgICB0b0Jvb2xlYW5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb25maWd1cmVEbkQsIERhdGFTZXRJdGVtLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldFVuaXFPYmpzQnlEYXRhRmllbGQsIElXaWRnZXRDb25maWcsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9zZWFyY2gnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGlwcy5wcm9wcyc7XG5pbXBvcnQge1xuICAgIGNsb25lLFxuICAgIGZpbHRlcixcbiAgICBmaW5kLFxuICAgIGZpbmRJbmRleCxcbiAgICBmb3JFYWNoLCBpc0FycmF5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNPYmplY3QsIG1heCwgcHVsbEF0LCByZWR1Y2UsXG4gICAgc2xpY2UsXG4gICAgdG9TdHJpbmcsXG4gICAgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWNoaXBzJyxcbiAgICBob3N0Q2xhc3M6ICdhcHAtY2hpcHMgbmF2IG5hdi1waWxscyBsaXN0LWlubGluZSdcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGUsIFNlYXJjaENvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdbd21DaGlwc10nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhDaGlwc0NvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2hpcHNDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDaGlwc0NvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgcHVibGljIGFsbG93b25seXNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZW5hYmxlcmVvcmRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4c2l6ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBpbnB1dHdpZHRoOiBhbnk7XG4gICAgcHJpdmF0ZSBkZWJvdW5jZXRpbWU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjaGlwc0xpc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFNpemVSZWFjaGVkID0gJ01heCBzaXplIHJlYWNoZWQnO1xuICAgIHByaXZhdGUgc2F0dXJhdGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBuZXh0SXRlbUluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBnZXRUcmFuc2Zvcm1lZERhdGE6IChkYXRhLCBpdGVtSW5kZXg/KSA9PiBEYXRhU2V0SXRlbVtdO1xuICAgIHByaXZhdGUgaW5wdXRwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG5cbiAgICBAVmlld0NoaWxkKFNlYXJjaENvbXBvbmVudCwgLyogVE9ETzogYWRkIHN0YXRpYyBmbGFnICovIHtzdGF0aWM6IHRydWV9KSBzZWFyY2hDb21wb25lbnQ6IFNlYXJjaENvbXBvbmVudDtcbiAgICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsOiBhbnk7XG4gICAgcHJpdmF0ZSBsaW1pdDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NsYXNzRXhwcjogYW55O1xuICAgIHByaXZhdGUgbWluY2hhcnM6IG51bWJlcjtcbiAgICBwcml2YXRlIG1hdGNobW9kZTogc3RyaW5nO1xuXG4gICAgLy8gZ2V0dGVyIHNldHRlciBpcyBhZGRlZCB0byBwYXNzIHRoZSBkYXRhc291cmNlIHRvIHNlYXJjaGNvbXBvbmVudC5cbiAgICBnZXQgZGF0YXNvdXJjZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xuICAgIH1cblxuICAgIHNldCBkYXRhc291cmNlKG52KSB7XG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBudjtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWZpZWxkLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5RmllbGQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlleHByZXNzaW9uLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5RXhwcixcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWltYWdlc3JjLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5SW1nU3JjLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhZmllbGQuYmluZCcpIHByaXZhdGUgYmluZERhdGFGaWVsZCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHJpdmF0ZSBiaW5kRGF0YVNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnY2hpcGNsYXNzLmJpbmQnKSBwcml2YXRlIGJpbmRDaGlwY2xhc3MsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIC8vIHNldCB0aGUgc2hvd3NlYXJjaGljb24gYXMgZmFsc2UgYnkgZGVmYXVsdC5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5zaG93c2VhcmNoaWNvbikpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3NlYXJjaGljb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXggPSAwOyAvLyBkZWZhdWx0IGNoaXAgaW5kZXhcblxuICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwgPSBkZWJvdW5jZSgodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5TW9kZWwodmFsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kQ2hpcGNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2godGhpcy5jaGlwc0xpc3QsIChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlckNoaXBJdGVtQ2xhc3MoaXRlbSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMTUwKTtcblxuICAgICAgICBjb25zdCBkYXRhc2V0U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhc2V0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YXNldCA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgICAgIC8vIGNsZWFyaW5nIHRoZSBsYXN0IHJlc3VsdHMgd2hlbiBkYXRhc2V0IGlzIHJlYXNzaWduZWRcbiAgICAgICAgICAgICh0aGlzLnNlYXJjaENvbXBvbmVudCBhcyBhbnkpLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5uZXh0SXRlbUluZGV4ID0gdGhpcy5kYXRhc2V0SXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGFzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgodmFsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgcXVlcnlNb2RlbCBvbmx5IHdoZW4gcGFyZW50UmVmIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdW5zdWJzY3JpYmVEdikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFmaWVsZCBpcyBBTExGSUxFRFMgZG8gbm90IGZldGNoIHRoZSByZWNvcmRzXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBxdWVyeSBtb2RlbCB3aXRoIHRoZSB2YWx1ZXMgd2UgaGF2ZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhdmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWltYWdlc3JjID0gdGhpcy5iaW5kRGlzcGxheUltZ1NyYztcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGlzcGxheWltYWdlc3JjID0gdGhpcy5kaXNwbGF5aW1hZ2VzcmM7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5bGFiZWwgPSB0aGlzLmJpbmREaXNwbGF5RXhwcjtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGlzcGxheWxhYmVsID0gdGhpcy5kaXNwbGF5ZmllbGQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFmaWVsZCA9IHRoaXMuYmluZERhdGFGaWVsZCB8fCB0aGlzLmRhdGFmaWVsZDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRhdGFzZXQgPSB0aGlzLmJpbmREYXRhU2V0O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5zZWFyY2hrZXkgPSB0aGlzLnNlYXJjaGtleTtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubGltaXQgPSB0aGlzLmxpbWl0O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kZWJvdW5jZXRpbWUgPSB0aGlzLmRlYm91bmNldGltZTtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubWF0Y2htb2RlID0gdGhpcy5tYXRjaG1vZGU7XG5cbiAgICAgICAgdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEgPSAodmFsLCBpc0N1c3RvbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ29tcG9uZW50LmdldFRyYW5zZm9ybWVkRGF0YShbdmFsXSwgdGhpcy5uZXh0SXRlbUluZGV4KyssIGlzQ3VzdG9tKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZURuRCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZXZhbHVhdGVkIGNsYXNzIGV4cHJlc3Npb24uXG4gICAgICogQHBhcmFtICRpbmRleCBpbmRleCBvZiB0aGUgY2hpcFxuICAgICAqIEBwYXJhbSBpdGVtIGNoaXAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleSwgdmFsdWUsIGxhYmVsXG4gICAgICogQHJldHVybnMge2FueX0gZXZhbHVhdGVkIGNsYXNzIGV4cHJlc3Npb24gdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhpdGVtLCAkaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZENoaXBjbGFzcykge1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy53aWRnZXRJZH1fY2hpcEl0ZW1DbGFzc18keyRpbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogc2FtZSBhcyBsaXN0IGl0ZW0gY2xhc3NcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKHRoaXMuYmluZENoaXBjbGFzcywgdGhpcy52aWV3UGFyZW50LCB7aXRlbSwgJGluZGV4fSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlJdGVtQ2xhc3MoZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksICRpbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlJdGVtQ2xhc3ModmFsLCBpbmRleCkge1xuICAgICAgICBjb25zdCBjaGlwSXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2hpcC1pdGVtJykuaXRlbShpbmRleCk7XG4gICAgICAgICQoY2hpcEl0ZW0pLnJlbW92ZUNsYXNzKHZhbC50b1JlbW92ZSkuYWRkQ2xhc3ModmFsLnRvQWRkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUR1cGxpY2F0ZXMoKSB7XG4gICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gZ2V0VW5pcU9ianNCeURhdGFGaWVsZCh0aGlzLmNoaXBzTGlzdCwgdGhpcy5kYXRhZmllbGQsIHRoaXMuZGlzcGxheWZpZWxkIHx8IHRoaXMuZGlzcGxheWxhYmVsKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBxdWVyeU1vZGVsLlxuICAgIC8vIGRlZmF1bHQgY2FsbCB0byBnZXQgdGhlIGRlZmF1bHQgZGF0YSBjYW4gYmUgZG9uZSBvbmx5IHdoZW4gZGVmYXVsdFF1ZXJ5IGlzIHRydWUuXG4gICAgcHJpdmF0ZSB1cGRhdGVRdWVyeU1vZGVsKGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gW107XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbG9uZSB0aGUgZGF0YSBhcyB0aGUgdXBkYXRpb25zIG9uIGRhdGEgd2lsbCBjaGFuZ2UgdGhlIGRhdGF2YWx1ZS5cbiAgICAgICAgbGV0IGRhdGFWYWx1ZSA9IGNsb25lKGRhdGEpO1xuICAgICAgICBjb25zdCBwcmV2Q2hpcHNMaXN0ID0gdGhpcy5jaGlwc0xpc3Q7XG4gICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gW107XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBtb2RlbCB3aGVuIG1vZGVsIGhhcyBpdGVtcyBtb3JlIHRoYW4gbWF4c2l6ZVxuICAgICAgICBpZiAodGhpcy5tYXhzaXplICYmIGRhdGFWYWx1ZS5sZW5ndGggPiB0aGlzLm1heHNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGRhdGFWYWx1ZSA9IHNsaWNlKGRhdGFWYWx1ZSwgMCwgdGhpcy5tYXhzaXplKTtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hRdWVyeTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgZWFjaCB2YWx1ZSBpbiBkYXRhdmFsdWUsXG4gICAgICAgICAqIDEuIGNoZWNrIHdoZXRoZXIgdmFsdWUgaXMgaW4gZGF0YXNldEl0ZW1zLCBpZiBpdGVtIGlzIGZvdW5kLCBhZGRkIHRvIHRoZSBjaGlwc0xpc3QuXG4gICAgICAgICAqIDIuIGVsc2UgbWFrZSBhIGRlZmF1bHQgcXVlcnkgdG8gdGhlIGZpbHRlciBhbmQgZ2V0IHRoZSByZWNvcmQuXG4gICAgICAgICAqIDMuIEluIHN0ZXAgMiwgaWYgZGF0YXZhbHVlIGlzIG5vdCBBTExGSUVMRFMsIHRoZW4gbWFrZSBhIHF1ZXJ5LiBFeHRyYWN0IHRoZSBjaGlwc0xpc3QgZnJvbSB0aGUgcXVlcnkgcmVzcG9uc2UuXG4gICAgICAgICAqIDQuIElmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIGZvciB0aGUgdmFsdWUgYW5kIGFsbG93b25seXNlbGVjdCBpcyB0cnVlLCByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGRhdGF2YWx1ZS4gU28gdGhhdCBkYXRhdmFsdWUganVzdCBjb250YWlucyB0aGUgdmFsaWQgdmFsdWVzLlxuICAgICAgICAgKiA1LiBJbiBzdGVwIDIsIGlmIGRhdGF2YWx1ZSBpcyBBTExGSUVMRFMgYW5kIHZhbHVlIGlzIG9iamVjdCwgdGhlbiBqdXN0IHByZXBhcmUgdGhlIGRhdGFzZXRJdGVtIGZyb20gdGhlIHZhbHVlLlxuICAgICAgICAgKiA2LiBJZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IGFuZCBhbGxvd29ubHlzZWxlY3QgaXMgZmFsc2UsIHRoZW4gY3JlYXRlIGEgY3VzdG9tTW9kZWwgYW5kIHJlcGxhY2UgdGhpcyB2YWx1ZSB3aXRoIGN1c3RvbU1vZGVsIGFuZCBwcmVwYXJlIGRhdGFzZXRJdGVtIGZyb20gdGhpcyB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Gb3VuZCA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc09iamVjdChpdGVtLnZhbHVlKSA/IGlzRXF1YWwoaXRlbS52YWx1ZSwgdmFsKSA6IHRvU3RyaW5nKGl0ZW0udmFsdWUpID09PSB0b1N0cmluZyh2YWwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtRm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGl0ZW1Gb3VuZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hRdWVyeS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YU9iaiwgaXNDdXN0b20gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IHRoaXMuY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGksIDEsIGRhdGFPYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgY3VzdG9tIGNoaXBzIGlzIGFscmVhZHkgZ2VuZXJhdGVkLCB2YWwgd2lsbCBiZSBvYmplY3QgYXMgeydkYXRhRmllbGRfdmFsJzogJ2VudGVyZWRfdmFsJ31cbiAgICAgICAgICAgICAgICAgICAgLy8gSGVuY2UgY2hlY2sgdGhpcyB2YWwgaW4gcHJldmlvdXMgY2hpcExpc3QgYW5kIGFzc2lnbiB0aGUgaXNjdXN0b20gZmxhZ1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Q2hpcE9iaiA9IHByZXZDaGlwc0xpc3QuZmluZChvYmogPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwob2JqLnZhbHVlLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZDaGlwT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbSA9IHByZXZDaGlwT2JqLmlzY3VzdG9tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhT2JqIHx8IHZhbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGRhdGFPYmosIGlzQ3VzdG9tKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlwT2JqID0gdHJhbnNmb3JtZWREYXRhWzBdO1xuICAgICAgICAgICAgICAgIGlmIChpc0N1c3RvbSkge1xuICAgICAgICAgICAgICAgICAgICAoY2hpcE9iaiBhcyBhbnkpLmlzY3VzdG9tID0gaXNDdXN0b207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goY2hpcE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG1ha2UgZGVmYXVsdCBxdWVyeSB3aXRoIGFsbCB0aGUgdmFsdWVzIGFuZCBpZiByZXNwb25zZSBmb3IgdGhlIHZhbHVlIGlzIG5vdCBpbiBkYXRhdmFsdWUgdGhlbiBhZGQgYSBjdXN0b20gY2hpcCBvYmplY3QuXG4gICAgICAgIGlmIChzZWFyY2hRdWVyeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5nZXREZWZhdWx0TW9kZWwoc2VhcmNoUXVlcnksIHRoaXMubmV4dEl0ZW1JbmRleClcbiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gdGhpcy5jaGlwc0xpc3QuY29uY2F0KHJlc3BvbnNlIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhpc3RzID0gZmluZCh0aGlzLmNoaXBzTGlzdCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoudmFsdWUudG9TdHJpbmcoKSA9PT0gdmFsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0V4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93b25seXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRhdGEuaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEodmFsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlwT2JqID0gdHJhbnNmb3JtZWREYXRhWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGlwT2JqIGFzIGFueSkuaXNjdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goY2hpcE9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgY2hpcCBkYXRhIGlzIGFkZGluZyBmb2N1cyBvbiB0byB0aGUgc2VhcmNoIGlucHV0LiBIZW5jZSB0aGlzIGZsYWcgaGVscHMgbm90IHRvIGZvY3VzLlxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUR1cGxpY2F0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4U2l6ZSgpO1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2VhcmNoTW9kZWwoZGVmYXVsdFF1ZXJ5PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgLy8gY2xlYXIgc2VhcmNoIHdpbGwgZW1wdHkgdGhlIHF1ZXJ5IG1vZGVsIGFuZCBnZXRzIHRoZSBkYXRhIHdoZW4gbWluY2hhcnMgaXMgMCAoaS5lLiBhdXRvY29tcGxldGUpIG9uIGZvY3VzXG4gICAgICAgIC8vIGRlZmF1bHRRdWVyeSBmbGFnIGlzIHNldCB3aGVuIHdpZGdldCBpcyBub3QgYWN0aXZlLiBUaGlzIHdpbGwgb25seSBsb2FkIHRoZSBhdXRvY29tcGxldGUgZHJvcHVwIHdpdGggbWluY2hhcnMgYXMgMCB3aGVuIHdpZGdldCBpcyBmb2N1c2VkL2FjdGl2ZVxuICAgICAgICAodGhpcy5zZWFyY2hDb21wb25lbnQgYXMgYW55KS5jbGVhclNlYXJjaCh1bmRlZmluZWQsICF0aGlzLm1pbmNoYXJzICYmICFkZWZhdWx0UXVlcnkpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBuZXdJdGVtIHRvIHRoZSBsaXN0XG4gICAgcHJpdmF0ZSBhZGRJdGVtKCRldmVudDogRXZlbnQsIHdpZGdldD86IFNlYXJjaENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBzZWFyY2hDb21wb25lbnQgPSB3aWRnZXQ7XG4gICAgICAgIGxldCBhbGxvd0FkZDtcbiAgICAgICAgbGV0IGNoaXBPYmo7XG5cbiAgICAgICAgaWYgKHNlYXJjaENvbXBvbmVudCAmJiBpc0RlZmluZWQoc2VhcmNoQ29tcG9uZW50LmRhdGF2YWx1ZSkgJiYgc2VhcmNoQ29tcG9uZW50LnF1ZXJ5TW9kZWwgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoIXNlYXJjaENvbXBvbmVudC5xdWVyeSB8fCAhdHJpbShzZWFyY2hDb21wb25lbnQucXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpcE9iaiA9IHNlYXJjaENvbXBvbmVudC5xdWVyeU1vZGVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dvbmx5c2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpICYmIHRyaW0odGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSB0aGlzLmNyZWF0ZUN1c3RvbURhdGFNb2RlbCh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpZiB0aGUgY3VzdG9tIGNoaXAgaXMgZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRhdGFPYmogfHwgdHJpbSh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgY2hpcE9iai5pc2N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRGVmaW5lZChjaGlwT2JqKSB8fCBjaGlwT2JqID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWxsb3dBZGQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWFkZCcsIHskZXZlbnQsIG5ld0l0ZW06IGNoaXBPYmp9KTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKGFsbG93QWRkKSAmJiAhdG9Cb29sZWFuKGFsbG93QWRkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEdXBsaWNhdGUoY2hpcE9iaikpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGNoaXBPYmosIHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goY2hpcE9iaik7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gW2NoaXBPYmoudmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gWy4uLnRoaXMuX21vZGVsQnlWYWx1ZSwgY2hpcE9iai52YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdhZGQnLCB7JGV2ZW50LCAkaXRlbTogY2hpcE9ian0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlTWF4U2l6ZSgpO1xuXG4gICAgICAgIC8vIHJlc2V0IGlucHV0IGJveCB3aGVuIGl0ZW0gaXMgYWRkZWQuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuXG4gICAgICAgIC8vIHN0b3AgdGhlIGV2ZW50IHRvIG5vdCB0byBjYWxsIHRoZSBzdWJtaXQgZXZlbnQgb24gZW50ZXIgcHJlc3MuXG4gICAgICAgIGlmICgkZXZlbnQgJiYgKCgkZXZlbnQgYXMgYW55KS5rZXkgPT09ICdFbnRlcicgfHwgKCRldmVudCBhcyBhbnkpLmtleUNvZGUgPT09IDEzKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wRXZlbnQoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgZGF0YXZhbHVlIG9iamVjdCBmcm9tIGEgc3RyaW5nKGp1bmspIHZhbHVlIHdoZW4gZGF0YWZpZWxkIGlzIGFsbEZpZWxkcy5cbiAgICBwcml2YXRlIGNyZWF0ZUN1c3RvbURhdGFNb2RlbCh2YWw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmRpc3BsYXlmaWVsZCB8fCAodGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUyA/IHRoaXMuZGF0YWZpZWxkIDogdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21PYmogPSB7fTtcbiAgICAgICAgICAgIGN1c3RvbU9ialtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbU9iajtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG5ld0l0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICBwcml2YXRlIGlzRHVwbGljYXRlKGl0ZW06IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZEluZGV4KHRoaXMuY2hpcHNMaXN0LCB7dmFsdWU6IGl0ZW0udmFsdWV9KSA+IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5jaGlwc0xpc3QsIHtrZXk6IGl0ZW0ua2V5fSkgPiAtMTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBtYXggc2l6ZSBpcyByZWFjaGVkXG4gICAgcHJpdmF0ZSB1cGRhdGVNYXhTaXplKCkge1xuICAgICAgICB0aGlzLnNhdHVyYXRlID0gdGhpcy5tYXhzaXplID4gMCAmJiB0aGlzLmNoaXBzTGlzdC5sZW5ndGggPT09IHRoaXMubWF4c2l6ZTtcbiAgICB9XG5cbiAgICAvLyBNYWtlcyBjYWxsIHRvIHNlYXJjaENvbXBvbmVudCB0byBmaWx0ZXIgdGhlIGRhdGFTb3VyY2UgYmFzZWQgb24gdGhlIHF1ZXJ5LlxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0TW9kZWwocXVlcnk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmV4dEl0ZW1JbmRleCsrO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDb21wb25lbnQuZ2V0RGF0YVNvdXJjZShxdWVyeSwgdHJ1ZSwgaW5kZXgpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcihxdWVyeSwgcXVlcnlWYWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaW5kKHJlc3BvbnNlLCB7dmFsdWU6IHF1ZXJ5VmFsfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNoaXBDbGljaygkZXZlbnQ6IEV2ZW50LCBjaGlwOiBEYXRhU2V0SXRlbSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgkZXZlbnQuY3VycmVudFRhcmdldCBhcyBhbnkpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hpcGNsaWNrJywgeyRldmVudCwgJGl0ZW06IGNoaXB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNoaXBGb2N1cygkZXZlbnQ6IEV2ZW50LCBjaGlwOiBEYXRhU2V0SXRlbSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIChjaGlwIGFzIGFueSkuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGlwc2VsZWN0JywgeyRldmVudCwgJGl0ZW06IGNoaXB9KTtcbiAgICB9XG5cbiAgICAvLyBUbyBhdm9pZCBmb3JtIHN1Ym1pdCBvbiBwcmVzc2luZyBlbnRlciBrZXlcbiAgICBwdWJsaWMgc3RvcEV2ZW50KCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UZXh0RGVsZXRlKCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKGlzQXBwbGVQcm9kdWN0KSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDbGVhcigkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5wdXRDbGVhcigkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlwc0xpc3QgfHwgIXRoaXMuY2hpcHNMaXN0Lmxlbmd0aCB8fCB0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmxhc3QoKS5mb2N1cygpO1xuICAgICAgICB0aGlzLnN0b3BFdmVudCgkZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25CYWNrc3BhY2UoJGV2ZW50OiBFdmVudCwgJGl0ZW06IERhdGFTZXRJdGVtLCAkaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSgkZXZlbnQsICRpdGVtLCAkaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGUoJGV2ZW50OiBFdmVudCwgJGl0ZW06IERhdGFTZXRJdGVtLCAkaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSgkZXZlbnQsICRpdGVtLCAkaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFycm93TGVmdCgkaXRlbT86IERhdGFTZXRJdGVtLCAkaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGxlZnQgYXJyb3cgY2xpY2sgd2hlbiBzZWFyY2ggaW5wdXQgcXVlcnkgaXMgZW1wdHkuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkgJiYgIWlzRGVmaW5lZCgkaW5kZXgpICYmICFpc0RlZmluZWQoJGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5sYXN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkaW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5nZXQoJGluZGV4IC0gMSkuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFycm93UmlnaHQoJGl0ZW0/OiBEYXRhU2V0SXRlbSwgJGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gT24gcmlnaHQgYXJyb3cgY2xpY2sgd2hlbiBzZWFyY2ggaW5wdXQgcXVlcnkgaXMgZW1wdHkuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkgJiYgIWlzRGVmaW5lZCgkaW5kZXgpICYmICFpc0RlZmluZWQoJGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGluZGV4IDwgKHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5nZXQoJGluZGV4ICsgMSkuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBib3guXG4gICAgcHJpdmF0ZSBmb2N1c1NlYXJjaEJveCgpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLWNoaXAtaW5wdXQgPiBpbnB1dC5hcHAtdGV4dGJveCcpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBpdGVtIGZyb20gbGlzdFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbSgkZXZlbnQ6IEV2ZW50LCBpdGVtOiBEYXRhU2V0SXRlbSwgaW5kZXg6IG51bWJlciwgY2FuRm9jdXM/OiBib29sZWFuKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBpbmRleGVzID0gaXNBcnJheShpbmRleCkgPyBpbmRleCA6IFtpbmRleF07XG4gICAgICAgIGNvbnN0IGZvY3VzSW5kZXggPSBtYXgoaW5kZXhlcyk7XG5cbiAgICAgICAgY29uc3QgaXRlbXMgPSByZWR1Y2UoaW5kZXhlcywgKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jaGlwc0xpc3RbaV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIC8vIHByZXZlbnQgZGVsZXRpb24gaWYgdGhlIGJlZm9yZS1yZW1vdmUgZXZlbnQgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgICBjb25zdCBhbGxvd1JlbW92ZSA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVtb3ZlJywgeyRldmVudCwgJGl0ZW06IGl0ZW1zLmxlbmd0aCA9PT0gMSA/IGl0ZW1zWzBdIDogaXRlbXN9KTtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd1JlbW92ZSkgJiYgIXRvQm9vbGVhbihhbGxvd1JlbW92ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZEYXRhdmFsdWUgPSBjbG9uZSh0aGlzLmRhdGF2YWx1ZSk7XG5cbiAgICAgICAgLy8gZm9jdXMgbmV4dCBjaGlwIGFmdGVyIGRlbGV0aW9uLlxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gY2hpcHMgaW4gdGhlIGxpc3QgZm9jdXMgc2VhcmNoIGJveFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaXBzTGVuZ3RoID0gdGhpcy5jaGlwc0xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpO1xuXG4gICAgICAgICAgICBpZiAoIWNoaXBzTGVuZ3RoIHx8ICFjYW5Gb2N1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoaXBzTGVuZ3RoIC0gMSkgPCBmb2N1c0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9jdXMgaW5kZXggaXMgZ3JlYXRlciB0aGFuIGNoaXBzIGxlbmd0aCBzZWxlY3QgbGFzdCBjaGlwXG4gICAgICAgICAgICAgICAgJGNoaXBzTGlzdC5nZXQoY2hpcHNMZW5ndGggLSAxKS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBzZXQgdGhlIHN1Y2NlZWRpbmcgY2hpcCBhcyBhY3RpdmUgaWYgdGhlcmUgaXMgYSBjaGlwIG5leHQgdG8gdGhlIGN1cnJlbnQgY2hpcC5cbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdFtmb2N1c0luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICRjaGlwc0xpc3QuZ2V0KGZvY3VzSW5kZXgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHB1bGxlZEl0ZW1zID0gcHVsbEF0KHRoaXMuY2hpcHNMaXN0LCBpbmRleGVzKTtcblxuICAgICAgICBwdWxsZWRJdGVtcy5mb3JFYWNoKGRhdGFzZXRJdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGZpbHRlcih0aGlzLl9tb2RlbEJ5VmFsdWUsIHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoaXNPYmplY3QodmFsKSA/IGlzRXF1YWwodmFsLCBkYXRhc2V0SXRlbS52YWx1ZSkgOiB0b1N0cmluZyh2YWwpID09PSB0b1N0cmluZyhkYXRhc2V0SXRlbS52YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCB7JGV2ZW50LCBuZXdWYWw6IHRoaXMuZGF0YXZhbHVlLCBvbGRWYWw6IHByZXZEYXRhdmFsdWV9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dhcHMgaXRlbXMgaW4gYW4gYXJyYXkgaWYgcHJvdmlkZWQgd2l0aCBpbmRleGVzLlxuICAgICAqIEBwYXJhbSBkYXRhIDotIGFycmF5IHRvIGJlIHN3YXBwZWRcbiAgICAgKiBAcGFyYW0gbmV3SW5kZXggOi0gbmV3IGluZGV4IGZvciB0aGUgZWxlbWVudCB0byBiZSBwbGFjZWRcbiAgICAgKiBAcGFyYW0gY3VycmVudEluZGV4IDotIHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3dhcEVsZW1lbnRzSW5BcnJheShkYXRhOiBBcnJheTxhbnk+LCBuZXdJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHB1bGxBdChkYXRhLCBjdXJyZW50SW5kZXgpWzBdO1xuICAgICAgICBkYXRhLnNwbGljZShuZXdJbmRleCwgMCwgZHJhZ2dlZEl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbmNlbHMgdGhlIHJlb3JkZXIgYnkgcmVzZXRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2V0UmVvcmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdvbGRJbmRleCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHtpbnB1dERhdGF9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScgfHwgZXZlbnROYW1lID09PSAnYmVmb3JlcmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdjaGlwc2VsZWN0J1xuICAgICAgICAgICAgfHwgZXZlbnROYW1lID09PSAnY2hpcGNsaWNrJyB8fCBldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3Jlb3JkZXInIHx8IGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzKTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmVzIHRoZSByZW9yZGFibGUgZmVhdHVyZSBpbiBjaGlwcyB3aWRnZXRzLlxuICAgIHByaXZhdGUgY29uZmlndXJlRG5EKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaXRlbXM6ICc+IGxpOm5vdCguYXBwLWNoaXAtc2VhcmNoKScsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ2NoaXAtcGxhY2Vob2xkZXInXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uZmlndXJlRG5EKHRoaXMuJGVsZW1lbnQsIG9wdGlvbnMsIHRoaXMub25SZW9yZGVyU3RhcnQuYmluZCh0aGlzKSwgdGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcmVkIG9uIGRyYWcgc3RhcnQgd2hpbGUgcmVvcmRlcmluZy5cbiAgICBwcml2YXRlIG9uUmVvcmRlclN0YXJ0KGV2dDogRXZlbnQsIHVpOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgaGVscGVyID0gKHVpIGFzIGFueSkuaGVscGVyO1xuICAgICAgICAvLyBpbmNyZWFzaW5nIHRoZSB3aWR0aCBvZiB0aGUgZHJhZ2dlZCBpdGVtIGJ5IDFcbiAgICAgICAgaGVscGVyLndpZHRoKGhlbHBlci53aWR0aCgpICsgMSk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZGF0YSgnb2xkSW5kZXgnLCAodWkgYXMgYW55KS5pdGVtLmluZGV4KCkgLSAodGhpcy5pbnB1dHBvc2l0aW9uID09PSAnZmlyc3QnID8gMSA6IDApKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSBjaGlwc0xpc3QgYW5kIGRhdGF2YWx1ZSBvbiByZW9yZGVyLlxuICAgIHByaXZhdGUgdXBkYXRlKCRldmVudDogRXZlbnQsIHVpOiBPYmplY3QpIHtcbiAgICAgICAgbGV0IGNoYW5nZWRJdGVtLFxuICAgICAgICAgICAgbmV3SW5kZXgsXG4gICAgICAgICAgICBvbGRJbmRleDtcblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIGF0IHBvc2l0aW9uIGJlZm9yZSBkcmFnIGFuZCBhZnRlciB0aGUgcmVvcmRlci5cbiAgICAgICAgbmV3SW5kZXggPSAodWkgYXMgYW55KS5pdGVtLmluZGV4KCkgLSAodGhpcy5pbnB1dHBvc2l0aW9uID09PSAnZmlyc3QnID8gMSA6IDApO1xuICAgICAgICBvbGRJbmRleCA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnb2xkSW5kZXgnKTtcblxuICAgICAgICBuZXdJbmRleCA9IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA9PT0gbmV3SW5kZXggPyBuZXdJbmRleCAtIDEgOiBuZXdJbmRleDtcbiAgICAgICAgY2hhbmdlZEl0ZW0gPSB7XG4gICAgICAgICAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICBpdGVtOiB0aGlzLmNoaXBzTGlzdFtvbGRJbmRleF1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3SW5kZXggPT09IG9sZEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoYW5nZWRJdGVtLml0ZW0gPSB0aGlzLmNoaXBzTGlzdFtvbGRJbmRleF07XG5cbiAgICAgICAgY29uc3QgYWxsb3dSZW9yZGVyID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW9yZGVyJywgeyRldmVudCwgJGRhdGE6IHRoaXMuY2hpcHNMaXN0LCAkY2hhbmdlZEl0ZW06IGNoYW5nZWRJdGVtfSk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd1Jlb3JkZXIpICYmIHRvQm9vbGVhbihhbGxvd1Jlb3JkZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vZGlmeSB0aGUgY2hpcHNMaXN0IGFuZCBkYXRhdmFsdWUgYWZ0ZXIgdGhlIHJlb3JkZXIuXG4gICAgICAgIHRoaXMuc3dhcEVsZW1lbnRzSW5BcnJheSh0aGlzLmNoaXBzTGlzdCwgbmV3SW5kZXgsIG9sZEluZGV4KTtcbiAgICAgICAgdGhpcy5zd2FwRWxlbWVudHNJbkFycmF5KHRoaXMuX21vZGVsQnlWYWx1ZSwgbmV3SW5kZXgsIG9sZEluZGV4KTtcblxuICAgICAgICBjaGFuZ2VkSXRlbS5pdGVtID0gdGhpcy5jaGlwc0xpc3RbbmV3SW5kZXhdO1xuXG4gICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gWy4uLnRoaXMuY2hpcHNMaXN0XTtcblxuICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlb3JkZXInLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5jaGlwc0xpc3QsICRjaGFuZ2VkSXRlbTogY2hhbmdlZEl0ZW19KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YW9wdGlvbnMnKSB7XG4gICAgICAgICAgICAodGhpcy5zZWFyY2hDb21wb25lbnQgYXMgYW55KS5kYXRhb3B0aW9ucyA9IG52O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhZmllbGQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhZmllbGQgPSB0aGlzLmRhdGFmaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWZpZWxkJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGlzcGxheWxhYmVsID0gdGhpcy5kaXNwbGF5ZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlleHByZXNzaW9uJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlsYWJlbCA9IHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uID8gdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gOiB0aGlzLmRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5aW1hZ2VzcmMnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWltYWdlc3JjID0gdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjID8gdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjIDogdGhpcy5kaXNwbGF5aW1hZ2VzcmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubGltaXQgPSB0aGlzLmxpbWl0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdtYXRjaG1vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tYXRjaG1vZGUgPSB0aGlzLm1hdGNobW9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZ3JvdXBieScpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lmdyb3VwYnkgPSB0aGlzLmdyb3VwYnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2VuYWJsZXJlb3JkZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygndWktc29ydGFibGUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuc29ydGFibGUoJ29wdGlvbicsICdkaXNhYmxlZCcsICFudik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoaXMgYmxvY2sgdG8gaGFuZGxlIGRyYWcgcHJldmVudGlvblxuICAgICAgICAgICAgY29uc3QgY2hpcEVsZW1lbnRzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuY2hpcC1pdGVtIGEuYXBwLWNoaXAnKTtcbiAgICAgICAgICAgIGlmICghbnYpIHtcbiAgICAgICAgICAgICAgICBjaGlwRWxlbWVudHMuYWRkQ2xhc3MoJ25vLWRyYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgZHJhZyBiZWhhdmlvclxuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5vbignZHJhZ3N0YXJ0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5yZW1vdmVDbGFzcygnbm8tZHJhZycpO1xuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5vZmYoJ2RyYWdzdGFydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2lucHV0cG9zaXRpb24nKSB7XG4gICAgICAgICAgICBjb25zdCAkaW5wdXRFbCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuYXBwLWNoaXAtc2VhcmNoJyk7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdmaXJzdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnByZXBlbmQoJGlucHV0RWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkaW5wdXRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9mb2N1cycgJiYgbnYpIHtcbiAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIGF1dG9mb2N1cyBvbiB0aGUgaW5wdXQgb25jZSBhZnRlciBkb20gaXMgdXBkYXRlZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKTtcbiAgICAgICAgICAgICAgICBpZiAoJGNoaXBzTGlzdCAmJiAkY2hpcHNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiQGZvciAoaXRlbSBvZiBjaGlwc0xpc3Q7IHRyYWNrIGl0ZW0pIHtcbiAgPGxpIGNsYXNzPVwiY2hpcC1pdGVtIHt7Y2hpcGNsYXNzICYmICFiaW5kQ2hpcGNsYXNzID8gY2hpcGNsYXNzIDogJyd9fVwiXG4gICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpdGVtLmFjdGl2ZSwgJ2Rpc2FibGVkJzogZGlzYWJsZWR9XCI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiYXBwLWNoaXBcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNoaXBDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgkZXZlbnQsIGl0ZW0sICRpbmRleClcIlxuICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uQmFja3NwYWNlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwib25BcnJvd0xlZnQoaXRlbSwgJGluZGV4KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQXJyb3dSaWdodChpdGVtLCAkaW5kZXgpXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVDaGlwRm9jdXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAoYmx1cik9XCJyZWFkb25seSA/IDAgOiBpdGVtLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnbm8tZHJhZyc6ICFlbmFibGVyZW9yZGVyLCdjaGlwLWR1cGxpY2F0ZSBiZy1kYW5nZXInOiBpdGVtLmlzRHVwbGljYXRlLCAnY2hpcC1waWN0dXJlJzogaXRlbS5pbWdTcmN9XCI+XG4gICAgICBAaWYgKGl0ZW0uaW1nU3JjKSB7XG4gICAgICAgIDxpbWcgZGF0YS1pZGVudGlmaWVyPVwiaW1nXCIgYWx0PVwiQ2hpcCBJbWFnZVwiIGNsYXNzPVwiYnV0dG9uLWltYWdlLWljb25cIiBbc3JjXT1cIml0ZW0uaW1nU3JjXCIvPlxuICAgICAgfVxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtY2hpcC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCJpdGVtLmxhYmVsXCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj48L3NwYW4+XG4gICAgICBAaWYgKCFyZWFkb25seSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbGVhciAnICsgaXRlbS5sYWJlbFwiIGNsYXNzPVwiYnRuIGJ0bi10cmFuc3BhcmVudFwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oJGV2ZW50LCBpdGVtLCAkaW5kZXgpO1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gd2kgd2ktY2xvc2VcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvYT5cbiAgPC9saT5cbn1cbjxsaSBjbGFzcz1cImFwcC1jaGlwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cInsnZnVsbC13aWR0aCc6IGlucHV0d2lkdGggPT09ICdmdWxsJ31cIj5cbiAgPGRpdiAjc2VhcmNoIHdtU2VhcmNoIGNsYXNzPVwiYXBwLWNoaXAtaW5wdXRcIlxuICAgIG5hbWU9XCJhcHAtY2hpcC1zZWFyY2hcIlxuICAgIHN1Ym1pdC5ldmVudD1cImFkZEl0ZW0oJGV2ZW50LCB3aWRnZXQpXCJcbiAgICBiZWZvcmVzZXJ2aWNlY2FsbC5ldmVudD1cImludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKVwiXG4gICAgZGlzYWJsZWQuYmluZD1cImRpc2FibGVkIHx8IHJlYWRvbmx5IHx8IHNhdHVyYXRlXCJcbiAgICBkYXRhZmllbGQuYmluZD1cImRhdGFmaWVsZFwiXG4gICAgYWxsb3dvbmx5c2VsZWN0LmJpbmQ9XCJhbGxvd29ubHlzZWxlY3RcIlxuICAgIHNlYXJjaGtleS5iaW5kPVwic2VhcmNoa2V5XCJcbiAgICBvcmRlcmJ5LmJpbmQ9XCJvcmRlcmJ5XCJcbiAgICBwbGFjZWhvbGRlci5iaW5kPVwic2F0dXJhdGUgPyBtYXhTaXplUmVhY2hlZCA6IHBsYWNlaG9sZGVyXCJcbiAgICBzaG93c2VhcmNoaWNvbi5iaW5kPVwic2hvd3NlYXJjaGljb25cIlxuICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgbWluY2hhcnMuYmluZD1cIm1pbmNoYXJzXCJcbiAgICBkZWJvdW5jZXRpbWUuYmluZD1cImRlYm91bmNldGltZVwiXG4gICAgbWF0Y2htb2RlLmJpbmQ9XCJtYXRjaG1vZGVcIlxuICAgIGRhdGFjb21wbGV0ZW1zZy5iaW5kID0gXCJkYXRhY29tcGxldGVtc2dcIlxuICAgIGdyb3VwYnkuYmluZD1cImdyb3VwYnlcIlxuICAgIG1hdGNoLmJpbmQ9XCJtYXRjaFwiXG4gICAgZGF0ZWZvcm1hdC5iaW5kPVwiZGF0ZWZvcm1hdFwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwic3RvcEV2ZW50KCRldmVudClcIlxuICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvblRleHREZWxldGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uSW5wdXRDbGVhcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwib25BcnJvd0xlZnQoKVwiXG4gICAgKGtleWRvd24uYXJyb3dyaWdodCk9XCJvbkFycm93UmlnaHQoKVwiPlxuICA8L2Rpdj5cbjwvbGk+XG4iXX0=
696
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBRUgsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNILFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsRUFDWixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBZSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBaUIsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hMLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFDSCxLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxFQUFFLE9BQU8sRUFDaEIsT0FBTyxF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QkFBa0IsQ0FBQyxjQUFjLENBQUM7YUFDckM7O1lDdERMLG1HQXdCQztZQUVDLEFBREYsNkJBQThFLGdCQXdCcEM7WUFBdEMsQUFEQSxBQURBLEFBREEsQUFEQSxvSkFBaUIscUJBQWlCLEtBQUMseUlBQ2pCLHdCQUFvQixLQUFDLCtJQUNsQix3QkFBb0IsS0FBQyx5SUFDckIsaUJBQWEsS0FBQywySUFDYixrQkFBYyxLQUFDO1lBRXpDLEFBREUsaUJBQU0sRUFDSDs7WUFuREwsNEJBd0JDO1lBQzJCLGVBQWlEO1lBQWpELCtFQUFpRDs0QkR1QmpFLFlBQVksY0FBRSxrQkFBa0IsMkJBQUUsZUFBZTs7aUZBUWhELGNBQWM7Y0FWMUIsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLFlBQ2hELFdBQVcsYUFFVjtvQkFDUCxTQUFTLGlCQUFpQixpQkFBaUIsRUFBRSxJQUFJLENBQUM7b0JBQ2xELGtCQUFrQixnQkFBZ0I7aUJBQ3JDOztzQkF5Q0ksU0FBUzt1QkFBQyxtQkFBbUI7O3NCQUM3QixTQUFTO3VCQUFDLHdCQUF3Qjs7c0JBQ2xDLFNBQVM7dUJBQUMsc0JBQXNCOztzQkFDaEMsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixTQUFTO3VCQUFDLGNBQWM7O3NCQUN4QixTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTdCK0IsZUFBZTtrQkFBdEYsU0FBUzttQkFBQyxlQUFlLEVBQUUsMkJBQTJCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztrRkFoQjdELGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgZGVib3VuY2UsXG4gICAgaXNBcHBsZVByb2R1Y3QsXG4gICAgaXNEZWZpbmVkLFxuICAgIHRvQm9vbGVhblxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBBTExGSUVMRFMsIGNvbmZpZ3VyZURuRCwgRGF0YVNldEl0ZW0sIGdldENvbmRpdGlvbmFsQ2xhc3NlcywgZ2V0VW5pcU9ianNCeURhdGFGaWVsZCwgSVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIHN0eWxlciB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0JztcbmltcG9ydCB7IFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2ljL3NlYXJjaCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL2NoaXBzLnByb3BzJztcbmltcG9ydCB7XG4gICAgY2xvbmUsXG4gICAgZmlsdGVyLFxuICAgIGZpbmQsXG4gICAgZmluZEluZGV4LFxuICAgIGZvckVhY2gsIGlzQXJyYXksXG4gICAgaXNFcXVhbCxcbiAgICBpc09iamVjdCwgbWF4LCBwdWxsQXQsIHJlZHVjZSxcbiAgICBzbGljZSxcbiAgICB0b1N0cmluZyxcbiAgICB0cmltXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tY2hpcHMnLFxuICAgIGhvc3RDbGFzczogJ2FwcC1jaGlwcyBuYXYgbmF2LXBpbGxzIGxpc3QtaW5saW5lJ1xufTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFdtQ29tcG9uZW50c01vZHVsZSwgU2VhcmNoQ29tcG9uZW50XSxcbiAgICBzZWxlY3RvcjogJ1t3bUNoaXBzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKENoaXBzQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihDaGlwc0NvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENoaXBzQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgYWxsb3dvbmx5c2VsZWN0OiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVyZW9yZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYXhzaXplOiBudW1iZXI7XG4gICAgcHVibGljIGlucHV0d2lkdGg6IGFueTtcbiAgICBwcml2YXRlIGRlYm91bmNldGltZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNoaXBzTGlzdDogQXJyYXk8YW55PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZVJlYWNoZWQgPSAnTWF4IHNpemUgcmVhY2hlZCc7XG4gICAgcHJpdmF0ZSBzYXR1cmF0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIG5leHRJdGVtSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGdldFRyYW5zZm9ybWVkRGF0YTogKGRhdGEsIGl0ZW1JbmRleD8pID0+IERhdGFTZXRJdGVtW107XG4gICAgcHJpdmF0ZSBpbnB1dHBvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93c2VhcmNoaWNvbjogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGQoU2VhcmNoQ29tcG9uZW50LCAvKiBUT0RPOiBhZGQgc3RhdGljIGZsYWcgKi8ge3N0YXRpYzogdHJ1ZX0pIHNlYXJjaENvbXBvbmVudDogU2VhcmNoQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWFyY2hrZXk6IHN0cmluZztcbiAgICBwcml2YXRlIF9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWw6IGFueTtcbiAgICBwcml2YXRlIGxpbWl0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY2xhc3NFeHByOiBhbnk7XG4gICAgcHJpdmF0ZSBtaW5jaGFyczogbnVtYmVyO1xuICAgIHByaXZhdGUgbWF0Y2htb2RlOiBzdHJpbmc7XG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UobnYpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc291cmNlID0gbnY7XG4gICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCh0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5ZmllbGQuYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlGaWVsZCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWV4cHJlc3Npb24uYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlFeHByLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5aW1hZ2VzcmMuYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlJbWdTcmMsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFmaWVsZC5iaW5kJykgcHJpdmF0ZSBiaW5kRGF0YUZpZWxkLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwcml2YXRlIGJpbmREYXRhU2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdjaGlwY2xhc3MuYmluZCcpIHByaXZhdGUgYmluZENoaXBjbGFzcyxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBzaG93c2VhcmNoaWNvbiBhcyBmYWxzZSBieSBkZWZhdWx0LlxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLnNob3dzZWFyY2hpY29uKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93c2VhcmNoaWNvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMubmV4dEl0ZW1JbmRleCA9IDA7IC8vIGRlZmF1bHQgY2hpcCBpbmRleFxuXG4gICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCA9IGRlYm91bmNlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnlNb2RlbCh2YWwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJpbmRDaGlwY2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmNoaXBzTGlzdCwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhpdGVtLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxNTApO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgLy8gY2xlYXJpbmcgdGhlIGxhc3QgcmVzdWx0cyB3aGVuIGRhdGFzZXQgaXMgcmVhc3NpZ25lZFxuICAgICAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXggPSB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBkYXRhdmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGF2YWx1ZSQuc3Vic2NyaWJlKCh2YWw6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwYXJlbnRSZWYgaXMgYXZhaWxhYmxlLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmJpbmREaXNwbGF5SW1nU3JjO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlsYWJlbCA9IHRoaXMuYmluZERpc3BsYXlFeHByO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5bGFiZWwgPSB0aGlzLmRpc3BsYXlmaWVsZDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YWZpZWxkID0gdGhpcy5iaW5kRGF0YUZpZWxkIHx8IHRoaXMuZGF0YWZpZWxkO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGF0YXNldCA9IHRoaXMuYmluZERhdGFTZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LnNlYXJjaGtleSA9IHRoaXMuc2VhcmNoa2V5O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRlYm91bmNldGltZSA9IHRoaXMuZGVib3VuY2V0aW1lO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tYXRjaG1vZGUgPSB0aGlzLm1hdGNobW9kZTtcblxuICAgICAgICB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSA9ICh2YWwsIGlzQ3VzdG9tKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDb21wb25lbnQuZ2V0VHJhbnNmb3JtZWREYXRhKFt2YWxdLCB0aGlzLm5leHRJdGVtSW5kZXgrKywgaXNDdXN0b20pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gJGluZGV4IGluZGV4IG9mIHRoZSBjaGlwXG4gICAgICogQHBhcmFtIGl0ZW0gY2hpcCBvYmplY3QgY29udGFpbmluZyB0aGUga2V5LCB2YWx1ZSwgbGFiZWxcbiAgICAgKiBAcmV0dXJucyB7YW55fSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbiB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGl0ZW0sICRpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5iaW5kQ2hpcGNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9jaGlwSXRlbUNsYXNzXyR7JGluZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBzYW1lIGFzIGxpc3QgaXRlbSBjbGFzc1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5iaW5kQ2hpcGNsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtpdGVtLCAkaW5kZXh9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUl0ZW1DbGFzcyhnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgJGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUl0ZW1DbGFzcyh2YWwsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNoaXBJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jaGlwLWl0ZW0nKS5pdGVtKGluZGV4KTtcbiAgICAgICAgJChjaGlwSXRlbSkucmVtb3ZlQ2xhc3ModmFsLnRvUmVtb3ZlKS5hZGRDbGFzcyh2YWwudG9BZGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlcygpIHtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkKHRoaXMuY2hpcHNMaXN0LCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHF1ZXJ5TW9kZWwuXG4gICAgLy8gZGVmYXVsdCBjYWxsIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGNhbiBiZSBkb25lIG9ubHkgd2hlbiBkZWZhdWx0UXVlcnkgaXMgdHJ1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXJ5TW9kZWwoZGF0YTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsb25lIHRoZSBkYXRhIGFzIHRoZSB1cGRhdGlvbnMgb24gZGF0YSB3aWxsIGNoYW5nZSB0aGUgZGF0YXZhbHVlLlxuICAgICAgICBsZXQgZGF0YVZhbHVlID0gY2xvbmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZDaGlwc0xpc3QgPSB0aGlzLmNoaXBzTGlzdDtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIG1vZGVsIHdoZW4gbW9kZWwgaGFzIGl0ZW1zIG1vcmUgdGhhbiBtYXhzaXplXG4gICAgICAgIGlmICh0aGlzLm1heHNpemUgJiYgZGF0YVZhbHVlLmxlbmd0aCA+IHRoaXMubWF4c2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gZGF0YVZhbHVlID0gc2xpY2UoZGF0YVZhbHVlLCAwLCB0aGlzLm1heHNpemUpO1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZvciBlYWNoIHZhbHVlIGluIGRhdGF2YWx1ZSxcbiAgICAgICAgICogMS4gY2hlY2sgd2hldGhlciB2YWx1ZSBpcyBpbiBkYXRhc2V0SXRlbXMsIGlmIGl0ZW0gaXMgZm91bmQsIGFkZGQgdG8gdGhlIGNoaXBzTGlzdC5cbiAgICAgICAgICogMi4gZWxzZSBtYWtlIGEgZGVmYXVsdCBxdWVyeSB0byB0aGUgZmlsdGVyIGFuZCBnZXQgdGhlIHJlY29yZC5cbiAgICAgICAgICogMy4gSW4gc3RlcCAyLCBpZiBkYXRhdmFsdWUgaXMgbm90IEFMTEZJRUxEUywgdGhlbiBtYWtlIGEgcXVlcnkuIEV4dHJhY3QgdGhlIGNoaXBzTGlzdCBmcm9tIHRoZSBxdWVyeSByZXNwb25zZS5cbiAgICAgICAgICogNC4gSWYgdGhlcmUgaXMgbm8gcmVzcG9uc2UgZm9yIHRoZSB2YWx1ZSBhbmQgYWxsb3dvbmx5c2VsZWN0IGlzIHRydWUsIHJlbW92ZSB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YXZhbHVlLiBTbyB0aGF0IGRhdGF2YWx1ZSBqdXN0IGNvbnRhaW5zIHRoZSB2YWxpZCB2YWx1ZXMuXG4gICAgICAgICAqIDUuIEluIHN0ZXAgMiwgaWYgZGF0YXZhbHVlIGlzIEFMTEZJRUxEUyBhbmQgdmFsdWUgaXMgb2JqZWN0LCB0aGVuIGp1c3QgcHJlcGFyZSB0aGUgZGF0YXNldEl0ZW0gZnJvbSB0aGUgdmFsdWUuXG4gICAgICAgICAqIDYuIElmIHZhbHVlIGlzIG5vdCBvYmplY3QgYW5kIGFsbG93b25seXNlbGVjdCBpcyBmYWxzZSwgdGhlbiBjcmVhdGUgYSBjdXN0b21Nb2RlbCBhbmQgcmVwbGFjZSB0aGlzIHZhbHVlIHdpdGggY3VzdG9tTW9kZWwgYW5kIHByZXBhcmUgZGF0YXNldEl0ZW0gZnJvbSB0aGlzIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvdW5kID0gZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGl0ZW0udmFsdWUpID8gaXNFcXVhbChpdGVtLnZhbHVlLCB2YWwpIDogdG9TdHJpbmcoaXRlbS52YWx1ZSkgPT09IHRvU3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGl0ZW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goaXRlbUZvdW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LnB1c2godmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhT2JqLCBpc0N1c3RvbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gdGhpcy5jcmVhdGVDdXN0b21EYXRhTW9kZWwodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaXNDdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaSwgMSwgZGF0YU9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXN0b20gY2hpcHMgaXMgYWxyZWFkeSBnZW5lcmF0ZWQsIHZhbCB3aWxsIGJlIG9iamVjdCBhcyB7J2RhdGFGaWVsZF92YWwnOiAnZW50ZXJlZF92YWwnfVxuICAgICAgICAgICAgICAgICAgICAvLyBIZW5jZSBjaGVjayB0aGlzIHZhbCBpbiBwcmV2aW91cyBjaGlwTGlzdCBhbmQgYXNzaWduIHRoZSBpc2N1c3RvbSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZDaGlwT2JqID0gcHJldkNoaXBzTGlzdC5maW5kKG9iaiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChvYmoudmFsdWUsIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNoaXBPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tID0gcHJldkNoaXBPYmouaXNjdXN0b207XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGFPYmogfHwgdmFsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZGF0YU9iaiwgaXNDdXN0b20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIChjaGlwT2JqIGFzIGFueSkuaXNjdXN0b20gPSBpc0N1c3RvbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbWFrZSBkZWZhdWx0IHF1ZXJ5IHdpdGggYWxsIHRoZSB2YWx1ZXMgYW5kIGlmIHJlc3BvbnNlIGZvciB0aGUgdmFsdWUgaXMgbm90IGluIGRhdGF2YWx1ZSB0aGVuIGFkZCBhIGN1c3RvbSBjaGlwIG9iamVjdC5cbiAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmdldERlZmF1bHRNb2RlbChzZWFyY2hRdWVyeSwgdGhpcy5uZXh0SXRlbUluZGV4KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSB0aGlzLmNoaXBzTGlzdC5jb25jYXQocmVzcG9uc2UgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdHMgPSBmaW5kKHRoaXMuY2hpcHNMaXN0LCAob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai52YWx1ZS50b1N0cmluZygpID09PSB2YWwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dvbmx5c2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh2YWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBPYmogYXMgYW55KS5pc2N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBjaGlwIGRhdGEgaXMgYWRkaW5nIGZvY3VzIG9uIHRvIHRoZSBzZWFyY2ggaW5wdXQuIEhlbmNlIHRoaXMgZmxhZyBoZWxwcyBub3QgdG8gZm9jdXMuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCh0cnVlKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2hNb2RlbChkZWZhdWx0UXVlcnk/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICAvLyBjbGVhciBzZWFyY2ggd2lsbCBlbXB0eSB0aGUgcXVlcnkgbW9kZWwgYW5kIGdldHMgdGhlIGRhdGEgd2hlbiBtaW5jaGFycyBpcyAwIChpLmUuIGF1dG9jb21wbGV0ZSkgb24gZm9jdXNcbiAgICAgICAgLy8gZGVmYXVsdFF1ZXJ5IGZsYWcgaXMgc2V0IHdoZW4gd2lkZ2V0IGlzIG5vdCBhY3RpdmUuIFRoaXMgd2lsbCBvbmx5IGxvYWQgdGhlIGF1dG9jb21wbGV0ZSBkcm9wdXAgd2l0aCBtaW5jaGFycyBhcyAwIHdoZW4gd2lkZ2V0IGlzIGZvY3VzZWQvYWN0aXZlXG4gICAgICAgICh0aGlzLnNlYXJjaENvbXBvbmVudCBhcyBhbnkpLmNsZWFyU2VhcmNoKHVuZGVmaW5lZCwgIXRoaXMubWluY2hhcnMgJiYgIWRlZmF1bHRRdWVyeSk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIG5ld0l0ZW0gdG8gdGhlIGxpc3RcbiAgICBwcml2YXRlIGFkZEl0ZW0oJGV2ZW50OiBFdmVudCwgd2lkZ2V0PzogU2VhcmNoQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaENvbXBvbmVudCA9IHdpZGdldDtcbiAgICAgICAgbGV0IGFsbG93QWRkO1xuICAgICAgICBsZXQgY2hpcE9iajtcblxuICAgICAgICBpZiAoc2VhcmNoQ29tcG9uZW50ICYmIGlzRGVmaW5lZChzZWFyY2hDb21wb25lbnQuZGF0YXZhbHVlKSAmJiBzZWFyY2hDb21wb25lbnQucXVlcnlNb2RlbCAhPT0gJycpIHtcbiAgICAgICAgICAgIGlmICghc2VhcmNoQ29tcG9uZW50LnF1ZXJ5IHx8ICF0cmltKHNlYXJjaENvbXBvbmVudC5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlwT2JqID0gc2VhcmNoQ29tcG9uZW50LnF1ZXJ5TW9kZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd29ubHlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkgJiYgdHJpbSh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IHRoaXMuY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBjdXN0b20gY2hpcCBpcyBlbXB0eVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZGF0YU9iaiB8fCB0cmltKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICBjaGlwT2JqLmlzY3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKGNoaXBPYmopIHx8IGNoaXBPYmogPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhbGxvd0FkZCA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlYWRkJywgeyRldmVudCwgbmV3SXRlbTogY2hpcE9ian0pO1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dBZGQpICYmICF0b0Jvb2xlYW4oYWxsb3dBZGQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0R1cGxpY2F0ZShjaGlwT2JqKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlckNoaXBJdGVtQ2xhc3MoY2hpcE9iaiwgdGhpcy5jaGlwc0xpc3QubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcblxuICAgICAgICBpZiAoIXRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBbY2hpcE9iai52YWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBbLi4udGhpcy5fbW9kZWxCeVZhbHVlLCBjaGlwT2JqLnZhbHVlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwgJGV2ZW50IHx8IHt9LCB0cnVlKTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2FkZCcsIHskZXZlbnQsICRpdGVtOiBjaGlwT2JqfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG5cbiAgICAgICAgLy8gcmVzZXQgaW5wdXQgYm94IHdoZW4gaXRlbSBpcyBhZGRlZC5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG5cbiAgICAgICAgLy8gc3RvcCB0aGUgZXZlbnQgdG8gbm90IHRvIGNhbGwgdGhlIHN1Ym1pdCBldmVudCBvbiBlbnRlciBwcmVzcy5cbiAgICAgICAgaWYgKCRldmVudCAmJiAoKCRldmVudCBhcyBhbnkpLmtleSA9PT0gJ0VudGVyJyB8fCAoJGV2ZW50IGFzIGFueSkua2V5Q29kZSA9PT0gMTMpKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BFdmVudCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBkYXRhdmFsdWUgb2JqZWN0IGZyb20gYSBzdHJpbmcoanVuaykgdmFsdWUgd2hlbiBkYXRhZmllbGQgaXMgYWxsRmllbGRzLlxuICAgIHByaXZhdGUgY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZGlzcGxheWZpZWxkIHx8ICh0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTID8gdGhpcy5kYXRhZmllbGQgOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU9iaiA9IHt9O1xuICAgICAgICAgICAgY3VzdG9tT2JqW2tleV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tT2JqO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbmV3SXRlbSBhbHJlYWR5IGV4aXN0c1xuICAgIHByaXZhdGUgaXNEdXBsaWNhdGUoaXRlbTogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5jaGlwc0xpc3QsIHt2YWx1ZTogaXRlbS52YWx1ZX0pID4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLmNoaXBzTGlzdCwge2tleTogaXRlbS5rZXl9KSA+IC0xO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG1heCBzaXplIGlzIHJlYWNoZWRcbiAgICBwcml2YXRlIHVwZGF0ZU1heFNpemUoKSB7XG4gICAgICAgIHRoaXMuc2F0dXJhdGUgPSB0aGlzLm1heHNpemUgPiAwICYmIHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA9PT0gdGhpcy5tYXhzaXplO1xuICAgIH1cblxuICAgIC8vIE1ha2VzIGNhbGwgdG8gc2VhcmNoQ29tcG9uZW50IHRvIGZpbHRlciB0aGUgZGF0YVNvdXJjZSBiYXNlZCBvbiB0aGUgcXVlcnkuXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRNb2RlbChxdWVyeTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uZXh0SXRlbUluZGV4Kys7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaENvbXBvbmVudC5nZXREYXRhU291cmNlKHF1ZXJ5LCB0cnVlLCBpbmRleClcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKHF1ZXJ5LCBxdWVyeVZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmQocmVzcG9uc2UsIHt2YWx1ZTogcXVlcnlWYWx9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hpcENsaWNrKCRldmVudDogRXZlbnQsIGNoaXA6IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKCRldmVudC5jdXJyZW50VGFyZ2V0IGFzIGFueSkuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGlwY2xpY2snLCB7JGV2ZW50LCAkaXRlbTogY2hpcH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hpcEZvY3VzKCRldmVudDogRXZlbnQsIGNoaXA6IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKGNoaXAgYXMgYW55KS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoaXBzZWxlY3QnLCB7JGV2ZW50LCAkaXRlbTogY2hpcH0pO1xuICAgIH1cblxuICAgIC8vIFRvIGF2b2lkIGZvcm0gc3VibWl0IG9uIHByZXNzaW5nIGVudGVyIGtleVxuICAgIHB1YmxpYyBzdG9wRXZlbnQoJGV2ZW50OiBFdmVudCkge1xuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSA/PyAnJztcbiAgICAgIGlmKGlucHV0VmFsdWUudHJpbSgpKXtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25UZXh0RGVsZXRlKCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKGlzQXBwbGVQcm9kdWN0KSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDbGVhcigkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5wdXRDbGVhcigkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlwc0xpc3QgfHwgIXRoaXMuY2hpcHNMaXN0Lmxlbmd0aCB8fCB0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmxhc3QoKS5mb2N1cygpO1xuICAgICAgICB0aGlzLnN0b3BFdmVudCgkZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25CYWNrc3BhY2UoJGV2ZW50OiBFdmVudCwgJGl0ZW06IERhdGFTZXRJdGVtLCAkaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSgkZXZlbnQsICRpdGVtLCAkaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGUoJGV2ZW50OiBFdmVudCwgJGl0ZW06IERhdGFTZXRJdGVtLCAkaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSgkZXZlbnQsICRpdGVtLCAkaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFycm93TGVmdCgkaXRlbT86IERhdGFTZXRJdGVtLCAkaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGxlZnQgYXJyb3cgY2xpY2sgd2hlbiBzZWFyY2ggaW5wdXQgcXVlcnkgaXMgZW1wdHkuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkgJiYgIWlzRGVmaW5lZCgkaW5kZXgpICYmICFpc0RlZmluZWQoJGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5sYXN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkaW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5nZXQoJGluZGV4IC0gMSkuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFycm93UmlnaHQoJGl0ZW0/OiBEYXRhU2V0SXRlbSwgJGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gT24gcmlnaHQgYXJyb3cgY2xpY2sgd2hlbiBzZWFyY2ggaW5wdXQgcXVlcnkgaXMgZW1wdHkuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkgJiYgIWlzRGVmaW5lZCgkaW5kZXgpICYmICFpc0RlZmluZWQoJGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGluZGV4IDwgKHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5nZXQoJGluZGV4ICsgMSkuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBib3guXG4gICAgcHJpdmF0ZSBmb2N1c1NlYXJjaEJveCgpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLWNoaXAtaW5wdXQgPiBpbnB1dC5hcHAtdGV4dGJveCcpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBpdGVtIGZyb20gbGlzdFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbSgkZXZlbnQ6IEV2ZW50LCBpdGVtOiBEYXRhU2V0SXRlbSwgaW5kZXg6IG51bWJlciwgY2FuRm9jdXM/OiBib29sZWFuKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBpbmRleGVzID0gaXNBcnJheShpbmRleCkgPyBpbmRleCA6IFtpbmRleF07XG4gICAgICAgIGNvbnN0IGZvY3VzSW5kZXggPSBtYXgoaW5kZXhlcyk7XG5cbiAgICAgICAgY29uc3QgaXRlbXMgPSByZWR1Y2UoaW5kZXhlcywgKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jaGlwc0xpc3RbaV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIC8vIHByZXZlbnQgZGVsZXRpb24gaWYgdGhlIGJlZm9yZS1yZW1vdmUgZXZlbnQgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgICBjb25zdCBhbGxvd1JlbW92ZSA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVtb3ZlJywgeyRldmVudCwgJGl0ZW06IGl0ZW1zLmxlbmd0aCA9PT0gMSA/IGl0ZW1zWzBdIDogaXRlbXN9KTtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd1JlbW92ZSkgJiYgIXRvQm9vbGVhbihhbGxvd1JlbW92ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZEYXRhdmFsdWUgPSBjbG9uZSh0aGlzLmRhdGF2YWx1ZSk7XG5cbiAgICAgICAgLy8gZm9jdXMgbmV4dCBjaGlwIGFmdGVyIGRlbGV0aW9uLlxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gY2hpcHMgaW4gdGhlIGxpc3QgZm9jdXMgc2VhcmNoIGJveFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaXBzTGVuZ3RoID0gdGhpcy5jaGlwc0xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpO1xuXG4gICAgICAgICAgICBpZiAoIWNoaXBzTGVuZ3RoIHx8ICFjYW5Gb2N1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoaXBzTGVuZ3RoIC0gMSkgPCBmb2N1c0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9jdXMgaW5kZXggaXMgZ3JlYXRlciB0aGFuIGNoaXBzIGxlbmd0aCBzZWxlY3QgbGFzdCBjaGlwXG4gICAgICAgICAgICAgICAgJGNoaXBzTGlzdC5nZXQoY2hpcHNMZW5ndGggLSAxKS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBzZXQgdGhlIHN1Y2NlZWRpbmcgY2hpcCBhcyBhY3RpdmUgaWYgdGhlcmUgaXMgYSBjaGlwIG5leHQgdG8gdGhlIGN1cnJlbnQgY2hpcC5cbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdFtmb2N1c0luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICRjaGlwc0xpc3QuZ2V0KGZvY3VzSW5kZXgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHB1bGxlZEl0ZW1zID0gcHVsbEF0KHRoaXMuY2hpcHNMaXN0LCBpbmRleGVzKTtcblxuICAgICAgICBwdWxsZWRJdGVtcy5mb3JFYWNoKGRhdGFzZXRJdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGZpbHRlcih0aGlzLl9tb2RlbEJ5VmFsdWUsIHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoaXNPYmplY3QodmFsKSA/IGlzRXF1YWwodmFsLCBkYXRhc2V0SXRlbS52YWx1ZSkgOiB0b1N0cmluZyh2YWwpID09PSB0b1N0cmluZyhkYXRhc2V0SXRlbS52YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCB7JGV2ZW50LCBuZXdWYWw6IHRoaXMuZGF0YXZhbHVlLCBvbGRWYWw6IHByZXZEYXRhdmFsdWV9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dhcHMgaXRlbXMgaW4gYW4gYXJyYXkgaWYgcHJvdmlkZWQgd2l0aCBpbmRleGVzLlxuICAgICAqIEBwYXJhbSBkYXRhIDotIGFycmF5IHRvIGJlIHN3YXBwZWRcbiAgICAgKiBAcGFyYW0gbmV3SW5kZXggOi0gbmV3IGluZGV4IGZvciB0aGUgZWxlbWVudCB0byBiZSBwbGFjZWRcbiAgICAgKiBAcGFyYW0gY3VycmVudEluZGV4IDotIHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3dhcEVsZW1lbnRzSW5BcnJheShkYXRhOiBBcnJheTxhbnk+LCBuZXdJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHB1bGxBdChkYXRhLCBjdXJyZW50SW5kZXgpWzBdO1xuICAgICAgICBkYXRhLnNwbGljZShuZXdJbmRleCwgMCwgZHJhZ2dlZEl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbmNlbHMgdGhlIHJlb3JkZXIgYnkgcmVzZXRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2V0UmVvcmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdvbGRJbmRleCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHtpbnB1dERhdGF9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScgfHwgZXZlbnROYW1lID09PSAnYmVmb3JlcmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdjaGlwc2VsZWN0J1xuICAgICAgICAgICAgfHwgZXZlbnROYW1lID09PSAnY2hpcGNsaWNrJyB8fCBldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3Jlb3JkZXInIHx8IGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzKTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmVzIHRoZSByZW9yZGFibGUgZmVhdHVyZSBpbiBjaGlwcyB3aWRnZXRzLlxuICAgIHByaXZhdGUgY29uZmlndXJlRG5EKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaXRlbXM6ICc+IGxpOm5vdCguYXBwLWNoaXAtc2VhcmNoKScsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ2NoaXAtcGxhY2Vob2xkZXInXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uZmlndXJlRG5EKHRoaXMuJGVsZW1lbnQsIG9wdGlvbnMsIHRoaXMub25SZW9yZGVyU3RhcnQuYmluZCh0aGlzKSwgdGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcmVkIG9uIGRyYWcgc3RhcnQgd2hpbGUgcmVvcmRlcmluZy5cbiAgICBwcml2YXRlIG9uUmVvcmRlclN0YXJ0KGV2dDogRXZlbnQsIHVpOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgaGVscGVyID0gKHVpIGFzIGFueSkuaGVscGVyO1xuICAgICAgICAvLyBpbmNyZWFzaW5nIHRoZSB3aWR0aCBvZiB0aGUgZHJhZ2dlZCBpdGVtIGJ5IDFcbiAgICAgICAgaGVscGVyLndpZHRoKGhlbHBlci53aWR0aCgpICsgMSk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZGF0YSgnb2xkSW5kZXgnLCAodWkgYXMgYW55KS5pdGVtLmluZGV4KCkgLSAodGhpcy5pbnB1dHBvc2l0aW9uID09PSAnZmlyc3QnID8gMSA6IDApKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSBjaGlwc0xpc3QgYW5kIGRhdGF2YWx1ZSBvbiByZW9yZGVyLlxuICAgIHByaXZhdGUgdXBkYXRlKCRldmVudDogRXZlbnQsIHVpOiBPYmplY3QpIHtcbiAgICAgICAgbGV0IGNoYW5nZWRJdGVtLFxuICAgICAgICAgICAgbmV3SW5kZXgsXG4gICAgICAgICAgICBvbGRJbmRleDtcblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIGF0IHBvc2l0aW9uIGJlZm9yZSBkcmFnIGFuZCBhZnRlciB0aGUgcmVvcmRlci5cbiAgICAgICAgbmV3SW5kZXggPSAodWkgYXMgYW55KS5pdGVtLmluZGV4KCkgLSAodGhpcy5pbnB1dHBvc2l0aW9uID09PSAnZmlyc3QnID8gMSA6IDApO1xuICAgICAgICBvbGRJbmRleCA9IHRoaXMuJGVsZW1lbnQuZGF0YSgnb2xkSW5kZXgnKTtcblxuICAgICAgICBuZXdJbmRleCA9IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA9PT0gbmV3SW5kZXggPyBuZXdJbmRleCAtIDEgOiBuZXdJbmRleDtcbiAgICAgICAgY2hhbmdlZEl0ZW0gPSB7XG4gICAgICAgICAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICBpdGVtOiB0aGlzLmNoaXBzTGlzdFtvbGRJbmRleF1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3SW5kZXggPT09IG9sZEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoYW5nZWRJdGVtLml0ZW0gPSB0aGlzLmNoaXBzTGlzdFtvbGRJbmRleF07XG5cbiAgICAgICAgY29uc3QgYWxsb3dSZW9yZGVyID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW9yZGVyJywgeyRldmVudCwgJGRhdGE6IHRoaXMuY2hpcHNMaXN0LCAkY2hhbmdlZEl0ZW06IGNoYW5nZWRJdGVtfSk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd1Jlb3JkZXIpICYmIHRvQm9vbGVhbihhbGxvd1Jlb3JkZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vZGlmeSB0aGUgY2hpcHNMaXN0IGFuZCBkYXRhdmFsdWUgYWZ0ZXIgdGhlIHJlb3JkZXIuXG4gICAgICAgIHRoaXMuc3dhcEVsZW1lbnRzSW5BcnJheSh0aGlzLmNoaXBzTGlzdCwgbmV3SW5kZXgsIG9sZEluZGV4KTtcbiAgICAgICAgdGhpcy5zd2FwRWxlbWVudHNJbkFycmF5KHRoaXMuX21vZGVsQnlWYWx1ZSwgbmV3SW5kZXgsIG9sZEluZGV4KTtcblxuICAgICAgICBjaGFuZ2VkSXRlbS5pdGVtID0gdGhpcy5jaGlwc0xpc3RbbmV3SW5kZXhdO1xuXG4gICAgICAgIHRoaXMuY2hpcHNMaXN0ID0gWy4uLnRoaXMuY2hpcHNMaXN0XTtcblxuICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlb3JkZXInLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5jaGlwc0xpc3QsICRjaGFuZ2VkSXRlbTogY2hhbmdlZEl0ZW19KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YW9wdGlvbnMnKSB7XG4gICAgICAgICAgICAodGhpcy5zZWFyY2hDb21wb25lbnQgYXMgYW55KS5kYXRhb3B0aW9ucyA9IG52O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhZmllbGQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhZmllbGQgPSB0aGlzLmRhdGFmaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWZpZWxkJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGlzcGxheWxhYmVsID0gdGhpcy5kaXNwbGF5ZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlleHByZXNzaW9uJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlsYWJlbCA9IHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uID8gdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gOiB0aGlzLmRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5aW1hZ2VzcmMnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWltYWdlc3JjID0gdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjID8gdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjIDogdGhpcy5kaXNwbGF5aW1hZ2VzcmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubGltaXQgPSB0aGlzLmxpbWl0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdtYXRjaG1vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tYXRjaG1vZGUgPSB0aGlzLm1hdGNobW9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZ3JvdXBieScpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lmdyb3VwYnkgPSB0aGlzLmdyb3VwYnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2VuYWJsZXJlb3JkZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygndWktc29ydGFibGUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuc29ydGFibGUoJ29wdGlvbicsICdkaXNhYmxlZCcsICFudik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoaXMgYmxvY2sgdG8gaGFuZGxlIGRyYWcgcHJldmVudGlvblxuICAgICAgICAgICAgY29uc3QgY2hpcEVsZW1lbnRzID0gdGhpcy4kZWxlbWVudC5maW5kKCcuY2hpcC1pdGVtIGEuYXBwLWNoaXAnKTtcbiAgICAgICAgICAgIGlmICghbnYpIHtcbiAgICAgICAgICAgICAgICBjaGlwRWxlbWVudHMuYWRkQ2xhc3MoJ25vLWRyYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgZHJhZyBiZWhhdmlvclxuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5vbignZHJhZ3N0YXJ0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5yZW1vdmVDbGFzcygnbm8tZHJhZycpO1xuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5vZmYoJ2RyYWdzdGFydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2lucHV0cG9zaXRpb24nKSB7XG4gICAgICAgICAgICBjb25zdCAkaW5wdXRFbCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuYXBwLWNoaXAtc2VhcmNoJyk7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdmaXJzdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnByZXBlbmQoJGlucHV0RWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkaW5wdXRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9mb2N1cycgJiYgbnYpIHtcbiAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIGF1dG9mb2N1cyBvbiB0aGUgaW5wdXQgb25jZSBhZnRlciBkb20gaXMgdXBkYXRlZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKTtcbiAgICAgICAgICAgICAgICBpZiAoJGNoaXBzTGlzdCAmJiAkY2hpcHNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiQGZvciAoaXRlbSBvZiBjaGlwc0xpc3Q7IHRyYWNrIGl0ZW0pIHtcbiAgPGxpIGNsYXNzPVwiY2hpcC1pdGVtIHt7Y2hpcGNsYXNzICYmICFiaW5kQ2hpcGNsYXNzID8gY2hpcGNsYXNzIDogJyd9fVwiXG4gICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpdGVtLmFjdGl2ZSwgJ2Rpc2FibGVkJzogZGlzYWJsZWR9XCI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiYXBwLWNoaXBcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNoaXBDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgkZXZlbnQsIGl0ZW0sICRpbmRleClcIlxuICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uQmFja3NwYWNlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwib25BcnJvd0xlZnQoaXRlbSwgJGluZGV4KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQXJyb3dSaWdodChpdGVtLCAkaW5kZXgpXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVDaGlwRm9jdXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAoYmx1cik9XCJyZWFkb25seSA/IDAgOiBpdGVtLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnbm8tZHJhZyc6ICFlbmFibGVyZW9yZGVyLCdjaGlwLWR1cGxpY2F0ZSBiZy1kYW5nZXInOiBpdGVtLmlzRHVwbGljYXRlLCAnY2hpcC1waWN0dXJlJzogaXRlbS5pbWdTcmN9XCI+XG4gICAgICBAaWYgKGl0ZW0uaW1nU3JjKSB7XG4gICAgICAgIDxpbWcgZGF0YS1pZGVudGlmaWVyPVwiaW1nXCIgYWx0PVwiQ2hpcCBJbWFnZVwiIGNsYXNzPVwiYnV0dG9uLWltYWdlLWljb25cIiBbc3JjXT1cIml0ZW0uaW1nU3JjXCIvPlxuICAgICAgfVxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtY2hpcC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCJpdGVtLmxhYmVsXCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj48L3NwYW4+XG4gICAgICBAaWYgKCFyZWFkb25seSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbGVhciAnICsgaXRlbS5sYWJlbFwiIGNsYXNzPVwiYnRuIGJ0bi10cmFuc3BhcmVudFwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oJGV2ZW50LCBpdGVtLCAkaW5kZXgpO1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gd2kgd2ktY2xvc2VcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvYT5cbiAgPC9saT5cbn1cbjxsaSBjbGFzcz1cImFwcC1jaGlwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cInsnZnVsbC13aWR0aCc6IGlucHV0d2lkdGggPT09ICdmdWxsJ31cIj5cbiAgPGRpdiAjc2VhcmNoIHdtU2VhcmNoIGNsYXNzPVwiYXBwLWNoaXAtaW5wdXRcIlxuICAgIG5hbWU9XCJhcHAtY2hpcC1zZWFyY2hcIlxuICAgIHN1Ym1pdC5ldmVudD1cImFkZEl0ZW0oJGV2ZW50LCB3aWRnZXQpXCJcbiAgICBiZWZvcmVzZXJ2aWNlY2FsbC5ldmVudD1cImludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKVwiXG4gICAgZGlzYWJsZWQuYmluZD1cImRpc2FibGVkIHx8IHJlYWRvbmx5IHx8IHNhdHVyYXRlXCJcbiAgICBkYXRhZmllbGQuYmluZD1cImRhdGFmaWVsZFwiXG4gICAgYWxsb3dvbmx5c2VsZWN0LmJpbmQ9XCJhbGxvd29ubHlzZWxlY3RcIlxuICAgIHNlYXJjaGtleS5iaW5kPVwic2VhcmNoa2V5XCJcbiAgICBvcmRlcmJ5LmJpbmQ9XCJvcmRlcmJ5XCJcbiAgICBwbGFjZWhvbGRlci5iaW5kPVwic2F0dXJhdGUgPyBtYXhTaXplUmVhY2hlZCA6IHBsYWNlaG9sZGVyXCJcbiAgICBzaG93c2VhcmNoaWNvbi5iaW5kPVwic2hvd3NlYXJjaGljb25cIlxuICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgbWluY2hhcnMuYmluZD1cIm1pbmNoYXJzXCJcbiAgICBkZWJvdW5jZXRpbWUuYmluZD1cImRlYm91bmNldGltZVwiXG4gICAgbWF0Y2htb2RlLmJpbmQ9XCJtYXRjaG1vZGVcIlxuICAgIGRhdGFjb21wbGV0ZW1zZy5iaW5kID0gXCJkYXRhY29tcGxldGVtc2dcIlxuICAgIGdyb3VwYnkuYmluZD1cImdyb3VwYnlcIlxuICAgIG1hdGNoLmJpbmQ9XCJtYXRjaFwiXG4gICAgZGF0ZWZvcm1hdC5iaW5kPVwiZGF0ZWZvcm1hdFwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwic3RvcEV2ZW50KCRldmVudClcIlxuICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvblRleHREZWxldGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uSW5wdXRDbGVhcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwib25BcnJvd0xlZnQoKVwiXG4gICAgKGtleWRvd24uYXJyb3dyaWdodCk9XCJvbkFycm93UmlnaHQoKVwiPlxuICA8L2Rpdj5cbjwvbGk+XG4iXX0=
@@ -424,8 +424,11 @@ class ChipsComponent extends DatasetAwareFormComponent {
424
424
  }
425
425
  // To avoid form submit on pressing enter key
426
426
  stopEvent($event) {
427
- $event.stopPropagation();
428
- $event.preventDefault();
427
+ const inputValue = $event.target?.value ?? '';
428
+ if (inputValue.trim()) {
429
+ $event.stopPropagation();
430
+ $event.preventDefault();
431
+ }
429
432
  }
430
433
  onTextDelete($event) {
431
434
  if (isAppleProduct) {