@wavemaker/app-ng-runtime 11.11.0-rc.6109 → 11.11.0-rc.6113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/components/base/bundles/index.umd.js +3 -1
  2. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +4 -2
  3. package/components/base/fesm2022/index.mjs +3 -1
  4. package/components/base/fesm2022/index.mjs.map +1 -1
  5. package/components/containers/tabs/bundles/index.umd.js +28 -4
  6. package/components/containers/tabs/esm2022/tabs.component.mjs +27 -6
  7. package/components/containers/tabs/esm2022/tabs.props.mjs +2 -1
  8. package/components/containers/tabs/fesm2022/index.mjs +27 -5
  9. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  10. package/components/containers/tabs/tabs.component.d.ts +2 -0
  11. package/components/containers/wizard/bundles/index.umd.js +7 -7
  12. package/components/containers/wizard/esm2022/wizard.component.mjs +8 -8
  13. package/components/containers/wizard/fesm2022/index.mjs +7 -7
  14. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  15. package/components/containers/wizard/wizard.component.d.ts +2 -2
  16. package/components/data/table/bundles/index.umd.js +8 -7
  17. package/components/data/table/esm2022/table.component.mjs +6 -4
  18. package/components/data/table/fesm2022/index.mjs +5 -3
  19. package/components/data/table/fesm2022/index.mjs.map +1 -1
  20. package/components/input/calendar/bundles/index.umd.js +3 -0
  21. package/components/input/calendar/esm2022/calendar.component.mjs +4 -1
  22. package/components/input/calendar/fesm2022/index.mjs +3 -0
  23. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  24. package/npm-shrinkwrap.json +2 -2
  25. package/package-lock.json +2 -2
  26. package/package.json +1 -1
  27. package/runtime/base/bundles/index.umd.js +1 -0
  28. package/runtime/base/esm2022/services/i18n.service.mjs +2 -1
  29. package/runtime/base/fesm2022/index.mjs +1 -0
  30. package/runtime/base/fesm2022/index.mjs.map +1 -1
@@ -289,11 +289,12 @@ export class WizardComponent extends StylableComponent {
289
289
  }
290
290
  /**
291
291
  * This method is to remove the wizard step
292
- * @param stepName - index of the step
292
+ * @param step - index or name of the step
293
293
  */
294
- removeStep(stepName) {
295
- const stepRef = this.getStepRefByName(stepName);
296
- stepRef ? stepRef.remove() : console.warn(`Could not find step with name '${stepName}'`);
294
+ removeStep(step) {
295
+ const stepRef = isString(step) ? this.getStepRefByName(step) : isNumber(step)
296
+ ? this.getStepRefByIndex(step) : null;
297
+ stepRef ? stepRef.remove() : console.warn(`Could not find step with name or index '${step}' to remove`);
297
298
  }
298
299
  /**
299
300
  * returns next valid step. the index passed is also checked if its valid step
@@ -432,11 +433,10 @@ export class WizardComponent extends StylableComponent {
432
433
  }
433
434
  }
434
435
  extendNextFn(currentStep, currentStepIndex) {
435
- let nextStep;
436
- nextStep = this.getNextValidStepFormIndex(currentStepIndex + 1);
437
- nextStep.isInitialized = true;
436
+ const nextStep = this.getNextValidStepFormIndex(currentStepIndex + 1);
438
437
  // If there are any steps which has show then only change state of current step else remain same
439
438
  if (nextStep) {
439
+ nextStep.isInitialized = true;
440
440
  currentStep.isDone = true;
441
441
  currentStep.done = true;
442
442
  nextStep.active = true;
@@ -662,4 +662,4 @@ export class WizardComponent extends StylableComponent {
662
662
  args: ['wizardAction', { read: TemplateRef, descendants: false }]
663
663
  }] }); })();
664
664
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WizardComponent, { className: "WizardComponent", filePath: "wizard.component.ts", lineNumber: 51 }); })();
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3dpemFyZC9zcmMvd2l6YXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3dpemFyZC9zcmMvd2l6YXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBSUgsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksRUFDSixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLDJCQUEyQixFQUFFLElBQUksRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLEVBQ0gsaUJBQWlCLEVBRWpCLGtCQUFrQixFQUNsQixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE9BQU8sRUFBRSxlQUFlLEVBQzNCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7OztJQ3JCdkUsMEJBQTJCOzs7SUFJekIsK0JBQW9CO0lBQUEsWUFBTztJQUFBLGlCQUFPOzs7SUFBZCxjQUFPO0lBQVAs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UEQsaURBT0M7WUFDRCxjQUVDO1lBRkQsMEZBRUM7NEJEdkJXLFlBQVksbUNBQUUsa0JBQWtCOztpRkFTL0IsZUFBZTtjQVgzQixTQUFTOzZCQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUMvQixlQUFlLGFBRWQ7b0JBQ1Asa0JBQWtCLGlCQUFpQjtvQkFDbkMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2lCQUNuRSxZQUNTLFVBQVU7O3NCQTJGK0QsSUFBSTs7c0JBQUksTUFBTTt1QkFBQyxPQUFPOztzQkFBeUIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBdEZoSSxLQUFLO2tCQUExQyxlQUFlO21CQUFDLG1CQUFtQjtZQUNxQyxZQUFZO2tCQUFwRixZQUFZO21CQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTs7a0ZBSjlELGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsIG5vb3B9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgSVdpZGdldENvbmZpZyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIENvbnRleHQsIGNyZWF0ZUFycmF5RnJvbVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vd2l6YXJkLnByb3BzJztcblxuaW1wb3J0IHtXaXphcmRTdGVwQ29tcG9uZW50fSBmcm9tIFwiLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnRcIjtcbmltcG9ydCB7ZmluZCwgZm9yRWFjaCwgZ2V0LCBpbmRleE9mLCBpc0FycmF5LCBpc051bWJlciwgaXNTdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXdpemFyZCBwYW5lbCBjbGVhcmZpeCc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS13aXphcmQnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnZGl2W3dtV2l6YXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihXaXphcmRDb21wb25lbnQpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXSxcbiAgICBleHBvcnRBczogJ3dtV2l6YXJkJ1xufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oV2l6YXJkU3RlcENvbXBvbmVudCkgc3RlcHM6IFF1ZXJ5TGlzdDxXaXphcmRTdGVwQ29tcG9uZW50PjtcbiAgICBAQ29udGVudENoaWxkKCd3aXphcmRBY3Rpb24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBkZXNjZW5kYW50czogZmFsc2UgfSkgd2l6YXJkQWN0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIG1lc3NhZ2U6IHtjYXB0aW9uOiBzdHJpbmcsIHR5cGU6IHN0cmluZ307XG4gICAgcHVibGljIGN1cnJlbnRTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50O1xuXG4gICAgcHVibGljIHN0ZXBDbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGFzcztcbiAgICBwdWJsaWMgbmFtZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlckZuOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgYWN0aW9uc2FsaWdubWVudDogYW55O1xuICAgIHB1YmxpYyBjYW5jZWxhYmxlOiBhbnk7XG4gICAgcHVibGljIGVuYWJsZW5leHQ6IGFueTtcbiAgICBwdWJsaWMgd2l6Q29udGV4dDogYW55O1xuICAgIHB1YmxpYyBjYW5jZWxidG5sYWJlbDogYW55O1xuICAgIHB1YmxpYyBkb25lYnRubGFiZWw6IGFueTtcbiAgICBwdWJsaWMgcHJldmlvdXNidG5sYWJlbDogYW55O1xuICAgIHB1YmxpYyBuZXh0YnRubGFiZWw6IGFueTtcbiAgICBwdWJsaWMgZGVmYXVsdHN0ZXA7XG4gICAgcHVibGljIGZpZWxkRGVmcztcbiAgICBwdWJsaWMgdHlwZTtcbiAgICBwdWJsaWMgbm9kYXRhbWVzc2FnZTtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIGR5bmFtaWNTdGVwSW5kZXg7XG4gICAgcHVibGljIGR5bmFtaWNXaXphcmQ7XG4gICAgcHVibGljIGRlZmF1bHRzdGVwaW5kZXg7XG4gICAgcHJpdmF0ZSBfaXNGaXJzdExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgZ2V0IGhhc1ByZXZTdGVwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2lzRmlyc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGdldCBoYXNOZXh0U3RlcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pc0xhc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGdldCBzaG93RG9uZUJ0bigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc05leHRTdGVwICYmIHRoaXMuY3VycmVudFN0ZXAuZW5hYmxlRG9uZTtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlUHJldigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuZW5hYmxlUHJldjtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlTmV4dCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlbmV4dCA/IHRydWUgOiAodGhpcy5jdXJyZW50U3RlcC5lbmFibGVOZXh0ICYmIHRoaXMuY3VycmVudFN0ZXAuaXNWYWxpZCk7XG4gICAgfVxuXG4gICAgZ2V0IGVuYWJsZURvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwLmVuYWJsZURvbmUgJiYgdGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgY3VycmVudCBzdGVwIGluZGV4IG9mIHRoZSBXaXphcmQncyBjdXJyZW50IHN0ZXBcbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFN0ZXBJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYodGhpcy5jdXJyZW50U3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB3ZWF0aGVyIHRoZSBjdXJyZW50IHN0ZXAgaXMgZmlyc3Qgc3RlcCBvciBub3RcbiAgICAgKi9cbiAgICBnZXQgaXNGaXJzdFN0ZXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ZpcnN0U3RlcCh0aGlzLmN1cnJlbnRTdGVwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHdlYXRoZXIgdGhlIGN1cnJlbnQgc3RlcCBpcyBsYXN0IHN0ZXAgb3Igbm90XG4gICAgICovXG4gICAgZ2V0IGlzTGFzdFN0ZXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xhc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLCBAU2VsZigpIEBJbmplY3QoQ29udGV4dCkgY29udGV4dHM6IEFycmF5PGFueT4sIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBsZXQgcmVzb2x2ZUZuOiBGdW5jdGlvbiA9IG5vb3A7XG5cbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuU0hFTEwpO1xuXG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBjYXB0aW9uOiAnJyxcbiAgICAgICAgICAgIHR5cGU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2l6Q29udGV4dCA9IGNvbnRleHRzWzBdO1xuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlciA9IGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICAgICAgdGhpcy5keW5hbWljV2l6YXJkID0gW107XG4gICAgICAgIHRoaXMuZHluYW1pY1N0ZXBJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZWdpc3RlciB0aGUgZHluYW1pYyBzdGVwcy5cbiAgICAgKiBBZnRlciBhbGwgc3RlcHMgYXJlIGluaXRpYWx6ZWQsIHVwZGF0ZSB0aGUgcXVlcnlsaXN0IG1hbnVhbGx5IGJhc2VkIG9uIGluZGV4LlxuICAgICAqIEBwYXJhbSBzdGVwUmVmIC0gcmVmcmVuY2Ugb2YgdGhlIHdpemFyZHN0ZXBcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJEeW5hbWljU3RlcChzdGVwUmVmKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1dpemFyZC5wdXNoKHN0ZXBSZWYpO1xuICAgICAgICBjb25zdCBpc0xhc3RTdGVwID0gIHRoaXMuZHluYW1pY1dpemFyZC5sZW5ndGggPT09IHRoaXMuZHluYW1pY1N0ZXBJbmRleDtcbiAgICAgICAgaWYgKGlzTGFzdFN0ZXApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5keW5hbWljV2l6YXJkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RlcFJlZiAgPSBmaW5kKHRoaXMuZHluYW1pY1dpemFyZCwgc3RlcCA9PiBzdGVwLmR5bmFtaWNTdGVwSW5kZXggPT09IGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RlcEFscmVhZHlFeGlzdCA9IGZpbmQodGhpcy5zdGVwcy50b0FycmF5KCksIG5ld1N0ZXBSZWYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNTdGVwQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMucmVzZXQoWy4uLnRoaXMuc3RlcHMudG9BcnJheSgpLCBuZXdTdGVwUmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGVwUmVmLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RlcFJlZi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIGFkZCB0aGUgd2l6YXJkIHN0ZXAgZHluYW1pY2FsbHlcbiAgICAgKiBAcGFyYW0gd2l6YXJkU3RlcHMgLSBsaXN0IG9mIHdpemFyZHN0ZXBzXG4gICAgICovXG4gICAgcHVibGljIGFkZFN0ZXAod2l6YXJkU3RlcHMpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHdpemFyZFN0ZXBzKSkge1xuICAgICAgICAgICAgd2l6YXJkU3RlcHMgPSBbd2l6YXJkU3RlcHNdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lc0xpc3QgPSBbXTtcbiAgICAgICAgZm9yRWFjaCh3aXphcmRTdGVwcywgKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1N0ZXBBbHJlYWR5Q3JlYXRlZCA9IGZpbmQodGhpcy5zdGVwcy50b0FycmF5KCksIHtuYW1lOiBzdGVwLm5hbWV9KTtcbiAgICAgICAgICAgIGNvbnN0IGlzU3RlcE5hbWVFeGlzdCA9IGluZGV4T2Yoc3RlcE5hbWVzTGlzdCwgc3RlcC5uYW1lKTtcbiAgICAgICAgICAgIC8vIElmIHVzZXIgdHJpZXMgdG8gYWRkIHdpemFyZHN0ZXAgd2l0aCB0aGUgc2FtZSBuYW1lIHdoaWNoIGlzIGFscmVhZHkgZXhpc3RzIHRoZW4gZG8gbm90IGNyZWF0ZSB0aGUgc3RlcFxuICAgICAgICAgICAgaWYgKGlzU3RlcEFscmVhZHlDcmVhdGVkIHx8IGlzU3RlcE5hbWVFeGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSB3aXphcmQgc3RlcCB3aXRoIG5hbWUgJHtzdGVwLm5hbWV9IGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGFyYW1NYXJrdXAgPSAnJztcbiAgICAgICAgICAgIGxldCBwcm9wc1RtcGwgPSAnJztcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1N0ZXBJbmRleCsrO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHN0ZXAubmFtZSA/IHN0ZXAubmFtZSA6IGB3aXphcmRzdGVwJHt0aGlzLnN0ZXBzLnRvQXJyYXkoKS5sZW5ndGggKyAoaW5kZXggKyAxKX1gO1xuICAgICAgICAgICAgc3RlcE5hbWVzTGlzdC5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbFBhcmFtcyA9IGdldChzdGVwLCAncGFyYW1zJyk7XG5cbiAgICAgICAgICAgIGZvckVhY2goc3RlcCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAncGFyYW1zJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wc1RtcGwgPSBgJHtwcm9wc1RtcGx9ICR7a2V5fT1cIiR7dmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3JFYWNoKHBhcnRpYWxQYXJhbXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyYW1NYXJrdXAgPSBgJHtwYXJhbU1hcmt1cH0gPHdtLXBhcmFtIG5hbWU9XCIke2tleX1cIiB2YWx1ZT1cIiR7dmFsdWV9XCI+PC93bS1wYXJhbT5gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrdXAgPSBgPHdtLXdpemFyZHN0ZXAgZHluYW1pY1N0ZXBJbmRleD1cIiR7dGhpcy5keW5hbWljU3RlcEluZGV4IC0gMX1cIiBpc2R5bmFtaWM9XCJ0cnVlXCIgbmFtZT1cIiR7bmFtZX1cIiAke3Byb3BzVG1wbH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJhbU1hcmt1cH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvd20td2l6YXJkc3RlcD5gO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBPYmplY3QuY3JlYXRlKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHRbdGhpcy5nZXRBdHRyKCd3bVdpemFyZCcpXSA9IHRoaXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmFkZENvbXBvbmVudCh0aGlzLmdldE5hdGl2ZUVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcuYXBwLXdpemFyZC1ib2R5JyksIG1hcmt1cCwgdGhpcy5fZHluYW1pY0NvbnRleHQsIHtpbmo6IHRoaXMuaW5qfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGVwTmFtZXNMaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIHJlbW92ZSB0aGUgd2l6YXJkIHN0ZXBcbiAgICAgKiBAcGFyYW0gc3RlcE5hbWUgLSBpbmRleCBvZiB0aGUgc3RlcFxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVTdGVwKHN0ZXBOYW1lKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBSZWYgPSB0aGlzLmdldFN0ZXBSZWZCeU5hbWUoc3RlcE5hbWUpO1xuICAgICAgICBzdGVwUmVmID8gc3RlcFJlZi5yZW1vdmUoKSA6IGNvbnNvbGUud2FybihgQ291bGQgbm90IGZpbmQgc3RlcCB3aXRoIG5hbWUgJyR7c3RlcE5hbWV9J2ApO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBuZXh0IHZhbGlkIHN0ZXAuIHRoZSBpbmRleCBwYXNzZWQgaXMgYWxzbyBjaGVja2VkIGlmIGl0cyB2YWxpZCBzdGVwXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge1dpemFyZFN0ZXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0VmFsaWRTdGVwRm9ybUluZGV4KGluZGV4OiBudW1iZXIpOiBXaXphcmRTdGVwQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy5zdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgoaSk7XG4gICAgICAgICAgICBpZiAoc3RlcC5zaG93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHByZXZpb3VzIHZhbGlkIHN0ZXAuIHRoZSBpbmRleCBwYXNzZWQgaXMgYWxzbyBjaGVja2VkIGlmIGl0cyB2YWxpZCBzdGVwXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge1dpemFyZFN0ZXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQcmV2aW91c1ZhbGlkU3RlcEZvcm1JbmRleChpbmRleDogbnVtYmVyKTogV2l6YXJkU3RlcENvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldFN0ZXBSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHN0ZXAuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBjdXJyZW50IHN0ZXAgaW5kZXggdmFsdWUuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEN1cnJlbnRTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYodGhpcy5jdXJyZW50U3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBzdGVwUmVmIHdoZW4gaW5kZXggaXMgcGFzc2VkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm5zIHtXaXphcmRTdGVwQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U3RlcFJlZkJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFdpemFyZFN0ZXBDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy50b0FycmF5KClbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhlIGluZGV4IHZhbHVlIG9mIHRoZSBzdGVwLlxuICAgICAqIEBwYXJhbSB7V2l6YXJkU3RlcENvbXBvbmVudH0gd2l6YXJkU3RlcFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTdGVwSW5kZXhCeVJlZih3aXphcmRTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMudG9BcnJheSgpLmluZGV4T2Yod2l6YXJkU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0cyBzdGVwUmVmIGJ5IHNlYXJjaGluZyBvbiB0aGUgbmFtZSBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqIEByZXR1cm5zIHtXaXphcmRTdGVwQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U3RlcFJlZkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBXaXphcmRTdGVwQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBkZWZhdWx0IHN0ZXAgYXMgY3VycmVudCBzdGVwIGlmIGNvbmZpZ3VyZWRcbiAgICAgKiBvciBmaW5kcyBmaXJzdCB2YWxpZCBzdGVwIGFuZCBzZXQgaXQgYXMgY3VycmVudCBzdGVwLlxuICAgICAqIEBwYXJhbSB7V2l6YXJkU3RlcENvbXBvbmVudH0gc3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0RGVmYXVsdFN0ZXAoc3RlcDogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdCBzdGVwIGhhcyBzaG93IHRydWUgdGhlbiBvbmx5IHVwZGF0ZSB0aGUgY3VycmVudFN0ZXBcbiAgICAgICAgaWYgKHN0ZXAgJiYgc3RlcC5zaG93KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gc3RlcDtcbiAgICAgICAgICAgIHN0ZXAuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0ZXAuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBNYXJrIGFsbCBwcmV2aW91cyBzdGVwIHN0YXR1cyBDT01QTEVURURcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYoc3RlcCkgLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHByZXZTdGVwLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZTdGVwLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZXQgbmV4dCB2YWxpZCBzdGVwIGFzIGN1cnJlbnQgc3RlcFxuICAgICAgICAgICAgc3RlcCA9IHRoaXMuZ2V0TmV4dFZhbGlkU3RlcEZvcm1JbmRleCgwKTtcbiAgICAgICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RlcChzdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZE1vcmVUZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aGUgYXNzb2NpYXRlZCBzdGVwIHdoZW4gdGhlIHdpemFyZCBoZWFkZXIgaXMgY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0gJGV2ZW50XG4gICAgICogQHBhcmFtIHtXaXphcmRTdGVwQ29tcG9uZW50fSBjdXJyZW50U3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgb25XaXphcmRIZWFkZXJDbGljaygkZXZlbnQ6IEV2ZW50LCBjdXJyZW50U3RlcDogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICAvLyBzZWxlY3QgdGhlIHN0ZXAgaWYgaXQncyBzdGF0dXMgaXMgZG9uZVxuICAgICAgICBpZiAoY3VycmVudFN0ZXAuZG9uZSkge1xuICAgICAgICAgICAgLy8gc2V0IGFsbCB0aGUgbmV4dCBzdGVwcyBzdGF0dXMgYXMgZGlzYWJsZWQgYW5kIHByZXZpb3VzIHN0ZXBzIGFzIGRvbmVcbiAgICAgICAgICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmdldFN0ZXBJbmRleEJ5UmVmKGN1cnJlbnRTdGVwKSkge1xuICAgICAgICAgICAgICAgICAgIHN0ZXAuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgc3RlcC5pc0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGVwLmlzRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzZWxlY3RlZCBzdGVwIGFzIGN1cnJlbnQgc3RlcCBhbmQgbWFrZSBpdCBhY3RpdmVcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjdXJyZW50U3RlcDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBuYXZpZ2F0ZSB0byBuZXh0IHN0ZXBcbiAgICBwdWJsaWMgYXN5bmMgbmV4dChldmVudE5hbWU6IHN0cmluZyA9ICduZXh0Jykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuY3VycmVudFN0ZXA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSB0aGlzLmdldEN1cnJlbnRTdGVwSW5kZXgoKTtcblxuICAgICAgICAvLyBhYm9ydCBpZiBvblNraXAgbWV0aG9kIHJldHVybnMgZmFsc2VcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3NraXAnKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGN1cnJlbnRTdGVwLmludm9rZVNraXBDQihjdXJyZW50U3RlcEluZGV4KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVuZE5leHRGbihjdXJyZW50U3RlcCwgY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkICYmIGV2ZW50TmFtZSA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSAgPSBhd2FpdCBjdXJyZW50U3RlcC5pbnZva2VOZXh0Q0IoY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHRlbmROZXh0Rm4oY3VycmVudFN0ZXAsIGN1cnJlbnRTdGVwSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5hYmxlbmV4dCAmJiAhdGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkKXtcbiAgICAgICAgICAgIEFycmF5LmZyb20oKDxhbnk+dGhpcykuY3VycmVudFN0ZXAuZ2V0QWxsRW1iZWRkZWRGb3JtcygpKT8uZm9yRWFjaCgoZm9ybTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtLndpZGdldC5oaWdobGlnaHRJbnZhbGlkRmllbGRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4dGVuZE5leHRGbihjdXJyZW50U3RlcCwgY3VycmVudFN0ZXBJbmRleCl7XG4gICAgICAgIGxldCBuZXh0U3RlcDogV2l6YXJkU3RlcENvbXBvbmVudDtcbiAgICAgICAgbmV4dFN0ZXAgPSB0aGlzLmdldE5leHRWYWxpZFN0ZXBGb3JtSW5kZXgoY3VycmVudFN0ZXBJbmRleCArIDEpO1xuICAgICAgICBuZXh0U3RlcC5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHN0ZXBzIHdoaWNoIGhhcyBzaG93IHRoZW4gb25seSBjaGFuZ2Ugc3RhdGUgb2YgY3VycmVudCBzdGVwIGVsc2UgcmVtYWluIHNhbWVcbiAgICAgICAgaWYgKG5leHRTdGVwKSB7XG4gICAgICAgICAgICBjdXJyZW50U3RlcC5pc0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgY3VycmVudFN0ZXAuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBuZXh0U3RlcC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IG5leHRTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICB9XG4gICAgLy8gTWV0aG9kIHRvIG5hdmlnYXRlIHRvIHByZXZpb3VzIHN0ZXBcbiAgICBwdWJsaWMgYXN5bmMgcHJldigpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U3RlcEluZGV4KCk7XG5cbiAgICAgICAgbGV0IHByZXZTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50O1xuXG4gICAgICAgIC8vIGFib3J0IGlmIG9uUHJldiBtZXRob2QgcmV0dXJucyBmYWxzZS5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50U3RlcC5pbnZva2VQcmV2Q0IoY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZTdGVwID0gdGhpcy5nZXRQcmV2aW91c1ZhbGlkU3RlcEZvcm1JbmRleChjdXJyZW50U3RlcEluZGV4IC0gMSk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aGljaCBoYXMgc2hvdyB0aGVuIG9ubHkgY2hhbmdlIHN0YXRlIG9mIGN1cnJlbnQgc3RlcCBlbHNlIHJlbWFpbiBzYW1lXG4gICAgICAgIGlmIChwcmV2U3RlcCkge1xuICAgICAgICAgICAgY3VycmVudFN0ZXAuaXNEb25lID0gZmFsc2U7XG4gICAgICAgICAgICBjdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBwcmV2U3RlcC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IHByZXZTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2tpcCgpIHtcbiAgICAgICAgdGhpcy5uZXh0KCdza2lwJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIHRoZSBnaXZlbiBzdGVwIGJhc2VkIG9uIHN0ZXAgbmFtZSBvciBzdGVwIGluZGV4XG4gICAgICogVGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgc3RlcCBpcyBhbHJlYWR5IGluIGRvbmUgc3RhdGVcbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHB1YmxpYyBnb3RvU3RlcChzdGVwOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgbGV0IGdvdG9TdGVwSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHN0ZXApKSB7XG4gICAgICAgICAgICBnb3RvU3RlcEluZGV4ID0gdGhpcy5zdGVwcy50b0FycmF5KCkubWFwKHN0ZXAgPT4gc3RlcC5uYW1lKS5pbmRleE9mKHN0ZXApO1xuICAgICAgICAgICAgaWYgKGdvdG9TdGVwSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IGZpbmQgc3RlcCAnJHtzdGVwfSdgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoc3RlcCkgJiYgc3RlcCA+PSAwKSB7XG4gICAgICAgICAgICBnb3RvU3RlcEluZGV4ID0gc3RlcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIHN0ZXAgbmFtZSBvciBpbmRleCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdvdG9TdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50ID0gdGhpcy5nZXRTdGVwUmVmQnlJbmRleChnb3RvU3RlcEluZGV4KTtcblxuICAgICAgICBpZiAoZ290b1N0ZXA/LnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMub25XaXphcmRIZWFkZXJDbGljayhldmVudCwgZ290b1N0ZXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBnb3RvU3RlcCBmdW5jdGlvbiBjYW5ub3QgbmF2aWdhdGUgdG8gaGlkZGVuIHN0ZXBzXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGludm9rZSBvbi1Eb25lIGV2ZW50IG9uIHdpemFyZFxuICAgIHB1YmxpYyBkb25lKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmlzRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZG9uZScsIHtzdGVwczogdGhpcy5zdGVwcy50b0FycmF5KCl9KTtcbiAgICB9XG4gICAgLy8gTWV0aG9kIHRvIGludm9rZSBvbi1DYW5jZWwgZXZlbnQgb24gd2l6YXJkXG4gICAgcHVibGljIGNhbmNlbCAoKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2FuY2VsJywge3N0ZXBzOiB0aGlzLnN0ZXBzLnRvQXJyYXkoKX0pO1xuICAgIH1cbiAgICBwdWJsaWMgYWRkTW9yZVRleHQoKXtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cblxuICAgICAgICB2YXIgbmV3V2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgaWYobmV3V2luZG93V2lkdGggPCA3Njgpe1xuICAgICAgICAkKFwiLmFwcC13aXphcmQtc3RlcC5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyIC5zdGVwLXRpdGxlXCIpLmNzcyh7XCJoZWlnaHRcIjpcImF1dG9cIixcImRpc3BsYXlcIjpcImJsb2NrXCJ9KTtcbiAgICAgICAgdmFyIHN1YnRpdGxlVGV4dExlbmd0aCA9ICQoXCIuYXBwLXdpemFyZC1zdGVwLmN1cnJlbnQgLnN1YnRpdGxlLXdyYXBwZXIgLnN0ZXAtdGl0bGVcIikuaGVpZ2h0KCk7XG4gICAgICAgICQoXCIucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIik7XG4gICAgICAgICQoXCIuY3VycmVudCAuc3VidGl0bGUtd3JhcHBlclwiKS5yZW1vdmVDbGFzcyhcInJlYWRtb3JlX3N1YnRpdGxlXCIpO1xuXG4gICAgICAgIGlmKHN1YnRpdGxlVGV4dExlbmd0aD40NCl7XG4gICAgICAgICAgICAkKFwiLmFwcC13aXphcmQtc3RlcC5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyIC5zdGVwLXRpdGxlXCIpLmNzcyh7XCJoZWlnaHRcIjpcIjQ0cHhcIixcImRpc3BsYXlcIjpcIi13ZWJraXQtYm94XCJ9KTtcbiAgICAgICAgICAgICQoXCIuY3VycmVudCAucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcImJsb2NrXCIpO1xuICAgICAgICAgICAgJChcIi5hY3RpdmUgLnJlYWRfbW9yZVwiKS5jc3MoXCJkaXNwbGF5XCIsXCJub25lXCIpO1xuICAgICAgICAgICAgJChcIi5kaXNhYmxlIC5yZWFkX21vcmVcIikuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKTtcbiAgICAgICAgICAgICQoXCIuYXBwLXdpemFyZC1zdGVwPmFcIikuY3NzKFwiaGVpZ2h0XCIsXCIxMDBweFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB9XG4gICAgcHVibGljIHJlYWRNb3JlU3VidGl0bGUoKXtcbiAgICAgICAgJChcIi5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyXCIpLmFkZENsYXNzKFwicmVhZG1vcmVfc3VidGl0bGVcIik7XG4gICAgICAgICQoXCIuY3VycmVudCAucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIik7XG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKGU6YW55KVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gJChcIi5zdWJ0aXRsZS13cmFwcGVyXCIpO1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRhcmdldCBvZiB0aGUgY2xpY2sgaXNuJ3QgdGhlIGNvbnRhaW5lciBub3IgYSBkZXNjZW5kYW50IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmlzKGUudGFyZ2V0KSAmJiBjb250YWluZXIuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJChcIi5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyXCIpLnJlbW92ZUNsYXNzKFwicmVhZG1vcmVfc3VidGl0bGVcIik7XG4gICAgICAgICAgICAgICAgJChcIi5jdXJyZW50IC5yZWFkX21vcmVcIikuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIik7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2V1cFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNGaXJzdFN0ZXAoc3RlcFJlZjogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy5maXJzdCA9PT0gc3RlcFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xhc3RTdGVwKHN0ZXBSZWY6IFdpemFyZFN0ZXBDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMubGFzdCA9PT0gc3RlcFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBjcmVhdGVBcnJheUZyb20obmV3VmFsKTtcbiAgICB9XG5cblxuICAgIC8vIERlZmluZSB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIuIFRoaXMgTWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHdpZGdldCBwcm9wZXJ0eVxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIC8vIE1vbml0b3JpbmcgY2hhbmdlcyBmb3IgcHJvcGVydGllcyBhbmQgYWNjb3JkaW5nbHkgaGFuZGxpbmcgcmVzcGVjdGl2ZSBjaGFuZ2VzXG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3N0ZXBzdHlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcENsYXNzID0gIG52ID09PSAnanVzdGlmaWVkJyA/ICduYXYtanVzdGlmaWVkJyA6ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGVmYXVsdHN0ZXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGVwKHRoaXMuZ2V0U3RlcFJlZkJ5TmFtZShudikpO1xuICAgICAgICB9ICBlbHNlIGlmIChrZXkgPT09ICdkZWZhdWx0c3RlcGluZGV4Jykge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RlcCh0aGlzLmdldFN0ZXBSZWZCeUluZGV4KG52KSk7XG4gICAgICAgIH0gIGVsc2UgaWYgKGtleSA9PT0gJ2FjdGlvbnNhbGlnbm1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmFwcC13aXphcmQtYWN0aW9ucycpPy5jbGFzc0xpc3QucmVwbGFjZShvdiwgbnYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlckZuKCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5oYXNOZXh0U3RlcCA9ICgpID0+IHRoaXMuaGFzTmV4dFN0ZXA7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5oYXNQcmV2aW91c1N0ZXAgPSAoKSA9PiB0aGlzLmhhc1ByZXZTdGVwO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuaGFzTm9OZXh0U3RlcCA9ICgpID0+IHRoaXMuc2hvd0RvbmVCdG47XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWxhYmxlID0gKCkgPT4gdGhpcy5jYW5jZWxhYmxlO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuc2tpcHBhYmxlID0gKCkgPT4gdGhpcy5jdXJyZW50U3RlcD8uZW5hYmxlc2tpcDtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0Lm5leHQgPSAoKSA9PiB0aGlzLm5leHQoKTtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0LnByZXZpb3VzID0gKCkgPT4gdGhpcy5wcmV2KCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5kb25lID0gKCkgPT4gdGhpcy5kb25lKCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWwgPSAoKSA9PiB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuc2tpcCA9ICgpID0+IHRoaXMuc2tpcCgpO1xuICAgICAgICB0aGlzLndpekNvbnRleHQubmV4dGJ0bmxhYmVsID0gKCkgPT4gdGhpcy5uZXh0YnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5wcmV2aW91c2J0bmxhYmVsID0gKCkgPT4gdGhpcy5wcmV2aW91c2J0bmxhYmVsO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZG9uZWJ0bmxhYmVsID0gKCkgPT4gdGhpcy5kb25lYnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWxidG5sYWJlbCA9ICgpID0+IHRoaXMuY2FuY2VsYnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5hY3Rpb25zYWxpZ25tZW50ID0gKCkgPT4gdGhpcy5hY3Rpb25zYWxpZ25tZW50O1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZGlzYWJsZU5leHQgPSAoKSA9PiAhdGhpcy5lbmFibGVOZXh0O1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZGlzYWJsZVByZXZpb3VzID0gKCkgPT4gIXRoaXMuZW5hYmxlUHJldjtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0LmRpc2FibGVEb25lID0gKCkgPT4gIXRoaXMuZW5hYmxlRG9uZTtcbiAgICAgICAgdGhpcy5zdGVwcy5jaGFuZ2VzLnN1YnNjcmliZSggc2xpZGVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCA+IDEgJiYgdGhpcy50eXBlID09PSAnZHluYW1pYycgJiYgdGhpcy5faXNGaXJzdExvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGVwKHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgodGhpcy5kZWZhdWx0c3RlcGluZGV4KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKFxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wYW5lbC1ib2R5JykgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgQVBQTFlfU1RZTEVTX1RZUEUuSU5ORVJfU0hFTExcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IGlmKCQod2luZG93KS53aWR0aCgpPDc2OCkge1xuICAgICAgICAgICAgJChcIi5hcHAtd2l6YXJkXCIpLnJlbW92ZUNsYXNzKFwidmVydGljYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5hcHAtd2l6YXJkLWFjdGlvbnMnKS5mb3JFYWNoKGVsID0+IGVsPy5jbGFzc0xpc3QuYWRkKHRoaXMuYWN0aW9uc2FsaWdubWVudCkpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LmFwcC13aXphcmQtYWN0aW9ucy1yaWdodCcpLmZvckVhY2goZWwgPT4gZWw/LmNsYXNzTGlzdC5yZW1vdmUoJ2FwcC1jb250YWluZXInKSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC13aXphcmQtaGVhZGluZ1wiPlxuICA8dWwgY2xhc3M9XCJhcHAtd2l6YXJkLXN0ZXBzIG5hdiBuYXYtcGlsbHMge3tzdGVwQ2xhc3N9fVwiPlxuICAgIEBmb3IgKHN0ZXAgb2Ygc3RlcHM7IHRyYWNrIHN0ZXA7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8bGkgY2xhc3M9XCJhcHAtd2l6YXJkLXN0ZXBcIiBbaGlkZGVuXT1cIiFzdGVwLnNob3dcIlxuICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiBzdGVwLmRvbmUsIGN1cnJlbnQ6IHN0ZXAuYWN0aXZlLCBkaXNhYmxlZDogc3RlcC5kaXNhYmxlZH1cIlxuICAgICAgICAoY2xpY2spPVwib25XaXphcmRIZWFkZXJDbGljaygkZXZlbnQsIHN0ZXApXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3RlcC5hY3RpdmUgPyAnc3RlcCcgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInN0ZXAuZGlzYWJsZWRcIiBbYXR0ci50aXRsZV09XCJzdGVwLnRpdGxlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3RpdGxlLWNlbnRlci1hbGlnbic6Y2xhc3MgJiYgY2xhc3MuaW5jbHVkZXMoJ2NsYXNzaWMnKSAmJiAhc3RlcC5zdWJ0aXRsZX1cIj5cbiAgICAgICAgICBAaWYgKGNsYXNzICYmIGNsYXNzLmluY2x1ZGVzKCdjbGFzc2ljJykpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2l6YXJkLXN0ZXAtbnVtYmVyXCI+XG4gICAgICAgICAgICBAaWYgKGNsYXNzICYmIGNsYXNzLmluY2x1ZGVzKCdudW1iZXInKSAmJiAhc3RlcC5pc0RvbmUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPnt7aSsxfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNsYXNzICYmIChjbGFzcy5pbmNsdWRlcygnZG90dGVkc3RlcHBlcicpIHx8IGNsYXNzLmluY2x1ZGVzKCd0ZXh0LWlubGluZScpICYmICFjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkgJiYgIXN0ZXAuaXNEb25lKSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZG90dGVkc3RlcHBlclwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoY2xhc3MgJiYgKGNsYXNzLmluY2x1ZGVzKCdkb3R0ZWRzdGVwcGVyJykgfHwgY2xhc3MuaW5jbHVkZXMoJ251bWJlcicpKSAmJiBzdGVwLmlzRG9uZSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIHdpLWRvbmVcIj48L2k+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKChjbGFzcyAmJiBjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkgJiYgKChzdGVwLmljb25jbGFzcyAmJiAhc3RlcC5pc0RvbmUpIHx8IChzdGVwLmljb25jbGFzcyAmJiBzdGVwLmlzRG9uZSAmJiBzdGVwLmRvbmVpY29uY2xhc3MgPT09JycpKSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHt7c3RlcC5pY29uY2xhc3N9fVwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc3RlcC5kb25laWNvbmNsYXNzICYmIHN0ZXAuaXNEb25lICYmIChjbGFzcyAmJiBjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkpIHtcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB7e3N0ZXAuZG9uZWljb25jbGFzc319XCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIEBpZiAoY2xhc3MgJiYgY2xhc3MuaW5jbHVkZXMoJ3RleHQtaW5saW5lJykpIHtcbiAgICAgICAgICAgICAgPHNwYW4+e3snMCcgKyAoaSsxKX19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLXRpdGxlXCIgW3RleHRDb250ZW50XT1cInN0ZXAudGl0bGVcIj48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIEBpZiAoc3RlcC5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZS13cmFwcGVyXCIgW2F0dHIudGl0bGVdPVwic3RlcC5zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwic3RlcC5zdWJ0aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJyZWFkX21vcmVcIiAoY2xpY2spPVwicmVhZE1vcmVTdWJ0aXRsZSgpXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5tb3JlPC9hPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICB9XG4gIDwvdWw+XG48L2Rpdj5cbkBpZiAodHlwZSAhPT0gJ2R5bmFtaWMnKSB7XG48ZGl2IGNsYXNzPVwiYXBwLXdpemFyZC1ib2R5IHBhbmVsLWJvZHlcIj5cbiAgQGlmIChtZXNzYWdlLmNhcHRpb24pIHtcbiAgICA8cCB3bU1lc3NhZ2UgY2FwdGlvbi5iaW5kPVwibWVzc2FnZS5jYXB0aW9uXCIgdHlwZS5iaW5kPVwibWVzc2FnZS50eXBlXCI+PC9wPlxuICB9XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwiZm9ybVt3bVdpemFyZFN0ZXBdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG59XG5AaWYgKHR5cGUgPT09ICdkeW5hbWljJykge1xuPGRpdiBjbGFzcz1cImFwcC13aXphcmQtYm9keSBwYW5lbC1ib2R5XCI+XG4gICAgQGlmKCFmaWVsZERlZnM/Lmxlbmd0aCkge1xuICAgIDxkaXY+e3tub2RhdGFtZXNzYWdlfX08L2Rpdj5cbiAgICB9XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2W3dtUmVwZWF0VGVtcGxhdGVdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG59XG5AaWYoZmllbGREZWZzICYmIGZpZWxkRGVmcy5sZW5ndGggfHwgdHlwZSAhPT0gJ2R5bmFtaWMnKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndpemFyZEFjdGlvblwiPjwvbmctY29udGFpbmVyPlxufVxuIl19
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3dpemFyZC9zcmMvd2l6YXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3dpemFyZC9zcmMvd2l6YXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBSUgsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksRUFDSixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLDJCQUEyQixFQUFFLElBQUksRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLEVBQ0gsaUJBQWlCLEVBRWpCLGtCQUFrQixFQUNsQixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE9BQU8sRUFBRSxlQUFlLEVBQzNCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7OztJQ3JCdkUsMEJBQTJCOzs7SUFJekIsK0JBQW9CO0lBQUEsWUFBTztJQUFBLGlCQUFPOzs7SUFBZCxjQUFPO0lBQVAs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RDtZQWlCTixBQVJBLEFBUkEsd0VBQTBCLDJEQVFBLGlFQVFnQzs7WUE3RHBELGNBQW9EO1lBQXBELCtFQUFvRDtZQUN0RCxjQXlDQztZQXpDRCx3QkF5Q0M7WUFHTCxlQU9DO1lBUEQsaURBT0M7WUFDRCxjQU9DO1lBUEQsaURBT0M7WUFDRCxjQUVDO1lBRkQsMEZBRUM7NEJEdkJXLFlBQVksbUNBQUUsa0JBQWtCOztpRkFTL0IsZUFBZTtjQVgzQixTQUFTOzZCQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUMvQixlQUFlLGFBRWQ7b0JBQ1Asa0JBQWtCLGlCQUFpQjtvQkFDbkMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2lCQUNuRSxZQUNTLFVBQVU7O3NCQTJGK0QsSUFBSTs7c0JBQUksTUFBTTt1QkFBQyxPQUFPOztzQkFBeUIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBdEZoSSxLQUFLO2tCQUExQyxlQUFlO21CQUFDLG1CQUFtQjtZQUNxQyxZQUFZO2tCQUFwRixZQUFZO21CQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTs7a0ZBSjlELGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsIG5vb3B9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgSVdpZGdldENvbmZpZyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIENvbnRleHQsIGNyZWF0ZUFycmF5RnJvbVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vd2l6YXJkLnByb3BzJztcblxuaW1wb3J0IHtXaXphcmRTdGVwQ29tcG9uZW50fSBmcm9tIFwiLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnRcIjtcbmltcG9ydCB7ZmluZCwgZm9yRWFjaCwgZ2V0LCBpbmRleE9mLCBpc0FycmF5LCBpc051bWJlciwgaXNTdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXdpemFyZCBwYW5lbCBjbGVhcmZpeCc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS13aXphcmQnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnZGl2W3dtV2l6YXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihXaXphcmRDb21wb25lbnQpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXSxcbiAgICBleHBvcnRBczogJ3dtV2l6YXJkJ1xufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oV2l6YXJkU3RlcENvbXBvbmVudCkgc3RlcHM6IFF1ZXJ5TGlzdDxXaXphcmRTdGVwQ29tcG9uZW50PjtcbiAgICBAQ29udGVudENoaWxkKCd3aXphcmRBY3Rpb24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBkZXNjZW5kYW50czogZmFsc2UgfSkgd2l6YXJkQWN0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIG1lc3NhZ2U6IHtjYXB0aW9uOiBzdHJpbmcsIHR5cGU6IHN0cmluZ307XG4gICAgcHVibGljIGN1cnJlbnRTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50O1xuXG4gICAgcHVibGljIHN0ZXBDbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGFzcztcbiAgICBwdWJsaWMgbmFtZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlckZuOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgYWN0aW9uc2FsaWdubWVudDogYW55O1xuICAgIHB1YmxpYyBjYW5jZWxhYmxlOiBhbnk7XG4gICAgcHVibGljIGVuYWJsZW5leHQ6IGFueTtcbiAgICBwdWJsaWMgd2l6Q29udGV4dDogYW55O1xuICAgIHB1YmxpYyBjYW5jZWxidG5sYWJlbDogYW55O1xuICAgIHB1YmxpYyBkb25lYnRubGFiZWw6IGFueTtcbiAgICBwdWJsaWMgcHJldmlvdXNidG5sYWJlbDogYW55O1xuICAgIHB1YmxpYyBuZXh0YnRubGFiZWw6IGFueTtcbiAgICBwdWJsaWMgZGVmYXVsdHN0ZXA7XG4gICAgcHVibGljIGZpZWxkRGVmcztcbiAgICBwdWJsaWMgdHlwZTtcbiAgICBwdWJsaWMgbm9kYXRhbWVzc2FnZTtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIGR5bmFtaWNTdGVwSW5kZXg7XG4gICAgcHVibGljIGR5bmFtaWNXaXphcmQ7XG4gICAgcHVibGljIGRlZmF1bHRzdGVwaW5kZXg7XG4gICAgcHJpdmF0ZSBfaXNGaXJzdExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgZ2V0IGhhc1ByZXZTdGVwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2lzRmlyc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGdldCBoYXNOZXh0U3RlcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pc0xhc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGdldCBzaG93RG9uZUJ0bigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc05leHRTdGVwICYmIHRoaXMuY3VycmVudFN0ZXAuZW5hYmxlRG9uZTtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlUHJldigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuZW5hYmxlUHJldjtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlTmV4dCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlbmV4dCA/IHRydWUgOiAodGhpcy5jdXJyZW50U3RlcC5lbmFibGVOZXh0ICYmIHRoaXMuY3VycmVudFN0ZXAuaXNWYWxpZCk7XG4gICAgfVxuXG4gICAgZ2V0IGVuYWJsZURvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwLmVuYWJsZURvbmUgJiYgdGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgY3VycmVudCBzdGVwIGluZGV4IG9mIHRoZSBXaXphcmQncyBjdXJyZW50IHN0ZXBcbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFN0ZXBJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYodGhpcy5jdXJyZW50U3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB3ZWF0aGVyIHRoZSBjdXJyZW50IHN0ZXAgaXMgZmlyc3Qgc3RlcCBvciBub3RcbiAgICAgKi9cbiAgICBnZXQgaXNGaXJzdFN0ZXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ZpcnN0U3RlcCh0aGlzLmN1cnJlbnRTdGVwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHdlYXRoZXIgdGhlIGN1cnJlbnQgc3RlcCBpcyBsYXN0IHN0ZXAgb3Igbm90XG4gICAgICovXG4gICAgZ2V0IGlzTGFzdFN0ZXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xhc3RTdGVwKHRoaXMuY3VycmVudFN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLCBAU2VsZigpIEBJbmplY3QoQ29udGV4dCkgY29udGV4dHM6IEFycmF5PGFueT4sIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBsZXQgcmVzb2x2ZUZuOiBGdW5jdGlvbiA9IG5vb3A7XG5cbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuU0hFTEwpO1xuXG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBjYXB0aW9uOiAnJyxcbiAgICAgICAgICAgIHR5cGU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2l6Q29udGV4dCA9IGNvbnRleHRzWzBdO1xuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlciA9IGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICAgICAgdGhpcy5keW5hbWljV2l6YXJkID0gW107XG4gICAgICAgIHRoaXMuZHluYW1pY1N0ZXBJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZWdpc3RlciB0aGUgZHluYW1pYyBzdGVwcy5cbiAgICAgKiBBZnRlciBhbGwgc3RlcHMgYXJlIGluaXRpYWx6ZWQsIHVwZGF0ZSB0aGUgcXVlcnlsaXN0IG1hbnVhbGx5IGJhc2VkIG9uIGluZGV4LlxuICAgICAqIEBwYXJhbSBzdGVwUmVmIC0gcmVmcmVuY2Ugb2YgdGhlIHdpemFyZHN0ZXBcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJEeW5hbWljU3RlcChzdGVwUmVmKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1dpemFyZC5wdXNoKHN0ZXBSZWYpO1xuICAgICAgICBjb25zdCBpc0xhc3RTdGVwID0gIHRoaXMuZHluYW1pY1dpemFyZC5sZW5ndGggPT09IHRoaXMuZHluYW1pY1N0ZXBJbmRleDtcbiAgICAgICAgaWYgKGlzTGFzdFN0ZXApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5keW5hbWljV2l6YXJkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RlcFJlZiAgPSBmaW5kKHRoaXMuZHluYW1pY1dpemFyZCwgc3RlcCA9PiBzdGVwLmR5bmFtaWNTdGVwSW5kZXggPT09IGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RlcEFscmVhZHlFeGlzdCA9IGZpbmQodGhpcy5zdGVwcy50b0FycmF5KCksIG5ld1N0ZXBSZWYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNTdGVwQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMucmVzZXQoWy4uLnRoaXMuc3RlcHMudG9BcnJheSgpLCBuZXdTdGVwUmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGVwUmVmLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RlcFJlZi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIGFkZCB0aGUgd2l6YXJkIHN0ZXAgZHluYW1pY2FsbHlcbiAgICAgKiBAcGFyYW0gd2l6YXJkU3RlcHMgLSBsaXN0IG9mIHdpemFyZHN0ZXBzXG4gICAgICovXG4gICAgcHVibGljIGFkZFN0ZXAod2l6YXJkU3RlcHMpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHdpemFyZFN0ZXBzKSkge1xuICAgICAgICAgICAgd2l6YXJkU3RlcHMgPSBbd2l6YXJkU3RlcHNdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lc0xpc3QgPSBbXTtcbiAgICAgICAgZm9yRWFjaCh3aXphcmRTdGVwcywgKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1N0ZXBBbHJlYWR5Q3JlYXRlZCA9IGZpbmQodGhpcy5zdGVwcy50b0FycmF5KCksIHtuYW1lOiBzdGVwLm5hbWV9KTtcbiAgICAgICAgICAgIGNvbnN0IGlzU3RlcE5hbWVFeGlzdCA9IGluZGV4T2Yoc3RlcE5hbWVzTGlzdCwgc3RlcC5uYW1lKTtcbiAgICAgICAgICAgIC8vIElmIHVzZXIgdHJpZXMgdG8gYWRkIHdpemFyZHN0ZXAgd2l0aCB0aGUgc2FtZSBuYW1lIHdoaWNoIGlzIGFscmVhZHkgZXhpc3RzIHRoZW4gZG8gbm90IGNyZWF0ZSB0aGUgc3RlcFxuICAgICAgICAgICAgaWYgKGlzU3RlcEFscmVhZHlDcmVhdGVkIHx8IGlzU3RlcE5hbWVFeGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSB3aXphcmQgc3RlcCB3aXRoIG5hbWUgJHtzdGVwLm5hbWV9IGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGFyYW1NYXJrdXAgPSAnJztcbiAgICAgICAgICAgIGxldCBwcm9wc1RtcGwgPSAnJztcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1N0ZXBJbmRleCsrO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHN0ZXAubmFtZSA/IHN0ZXAubmFtZSA6IGB3aXphcmRzdGVwJHt0aGlzLnN0ZXBzLnRvQXJyYXkoKS5sZW5ndGggKyAoaW5kZXggKyAxKX1gO1xuICAgICAgICAgICAgc3RlcE5hbWVzTGlzdC5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbFBhcmFtcyA9IGdldChzdGVwLCAncGFyYW1zJyk7XG5cbiAgICAgICAgICAgIGZvckVhY2goc3RlcCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAncGFyYW1zJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wc1RtcGwgPSBgJHtwcm9wc1RtcGx9ICR7a2V5fT1cIiR7dmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3JFYWNoKHBhcnRpYWxQYXJhbXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyYW1NYXJrdXAgPSBgJHtwYXJhbU1hcmt1cH0gPHdtLXBhcmFtIG5hbWU9XCIke2tleX1cIiB2YWx1ZT1cIiR7dmFsdWV9XCI+PC93bS1wYXJhbT5gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrdXAgPSBgPHdtLXdpemFyZHN0ZXAgZHluYW1pY1N0ZXBJbmRleD1cIiR7dGhpcy5keW5hbWljU3RlcEluZGV4IC0gMX1cIiBpc2R5bmFtaWM9XCJ0cnVlXCIgbmFtZT1cIiR7bmFtZX1cIiAke3Byb3BzVG1wbH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJhbU1hcmt1cH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvd20td2l6YXJkc3RlcD5gO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBPYmplY3QuY3JlYXRlKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHRbdGhpcy5nZXRBdHRyKCd3bVdpemFyZCcpXSA9IHRoaXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmFkZENvbXBvbmVudCh0aGlzLmdldE5hdGl2ZUVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcuYXBwLXdpemFyZC1ib2R5JyksIG1hcmt1cCwgdGhpcy5fZHluYW1pY0NvbnRleHQsIHtpbmo6IHRoaXMuaW5qfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGVwTmFtZXNMaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIHJlbW92ZSB0aGUgd2l6YXJkIHN0ZXBcbiAgICAgKiBAcGFyYW0gc3RlcCAtIGluZGV4IG9yIG5hbWUgb2YgdGhlIHN0ZXBcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlU3RlcChzdGVwOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3RlcFJlZiA9IGlzU3RyaW5nKHN0ZXApID8gdGhpcy5nZXRTdGVwUmVmQnlOYW1lKHN0ZXApIDogaXNOdW1iZXIoc3RlcClcbiAgICAgICAgICAgID8gdGhpcy5nZXRTdGVwUmVmQnlJbmRleChzdGVwKSA6IG51bGw7XG4gICAgICAgIHN0ZXBSZWYgPyBzdGVwUmVmLnJlbW92ZSgpIDogY29uc29sZS53YXJuKGBDb3VsZCBub3QgZmluZCBzdGVwIHdpdGggbmFtZSBvciBpbmRleCAnJHtzdGVwfScgdG8gcmVtb3ZlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBuZXh0IHZhbGlkIHN0ZXAuIHRoZSBpbmRleCBwYXNzZWQgaXMgYWxzbyBjaGVja2VkIGlmIGl0cyB2YWxpZCBzdGVwXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge1dpemFyZFN0ZXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0VmFsaWRTdGVwRm9ybUluZGV4KGluZGV4OiBudW1iZXIpOiBXaXphcmRTdGVwQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy5zdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgoaSk7XG4gICAgICAgICAgICBpZiAoc3RlcC5zaG93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHByZXZpb3VzIHZhbGlkIHN0ZXAuIHRoZSBpbmRleCBwYXNzZWQgaXMgYWxzbyBjaGVja2VkIGlmIGl0cyB2YWxpZCBzdGVwXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge1dpemFyZFN0ZXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQcmV2aW91c1ZhbGlkU3RlcEZvcm1JbmRleChpbmRleDogbnVtYmVyKTogV2l6YXJkU3RlcENvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldFN0ZXBSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHN0ZXAuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBjdXJyZW50IHN0ZXAgaW5kZXggdmFsdWUuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEN1cnJlbnRTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYodGhpcy5jdXJyZW50U3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBzdGVwUmVmIHdoZW4gaW5kZXggaXMgcGFzc2VkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm5zIHtXaXphcmRTdGVwQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U3RlcFJlZkJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFdpemFyZFN0ZXBDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy50b0FycmF5KClbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhlIGluZGV4IHZhbHVlIG9mIHRoZSBzdGVwLlxuICAgICAqIEBwYXJhbSB7V2l6YXJkU3RlcENvbXBvbmVudH0gd2l6YXJkU3RlcFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTdGVwSW5kZXhCeVJlZih3aXphcmRTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMudG9BcnJheSgpLmluZGV4T2Yod2l6YXJkU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0cyBzdGVwUmVmIGJ5IHNlYXJjaGluZyBvbiB0aGUgbmFtZSBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqIEByZXR1cm5zIHtXaXphcmRTdGVwQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U3RlcFJlZkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBXaXphcmRTdGVwQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBkZWZhdWx0IHN0ZXAgYXMgY3VycmVudCBzdGVwIGlmIGNvbmZpZ3VyZWRcbiAgICAgKiBvciBmaW5kcyBmaXJzdCB2YWxpZCBzdGVwIGFuZCBzZXQgaXQgYXMgY3VycmVudCBzdGVwLlxuICAgICAqIEBwYXJhbSB7V2l6YXJkU3RlcENvbXBvbmVudH0gc3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0RGVmYXVsdFN0ZXAoc3RlcDogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdCBzdGVwIGhhcyBzaG93IHRydWUgdGhlbiBvbmx5IHVwZGF0ZSB0aGUgY3VycmVudFN0ZXBcbiAgICAgICAgaWYgKHN0ZXAgJiYgc3RlcC5zaG93KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gc3RlcDtcbiAgICAgICAgICAgIHN0ZXAuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0ZXAuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBNYXJrIGFsbCBwcmV2aW91cyBzdGVwIHN0YXR1cyBDT01QTEVURURcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0U3RlcEluZGV4QnlSZWYoc3RlcCkgLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHByZXZTdGVwLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZTdGVwLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZXQgbmV4dCB2YWxpZCBzdGVwIGFzIGN1cnJlbnQgc3RlcFxuICAgICAgICAgICAgc3RlcCA9IHRoaXMuZ2V0TmV4dFZhbGlkU3RlcEZvcm1JbmRleCgwKTtcbiAgICAgICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RlcChzdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZE1vcmVUZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aGUgYXNzb2NpYXRlZCBzdGVwIHdoZW4gdGhlIHdpemFyZCBoZWFkZXIgaXMgY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0gJGV2ZW50XG4gICAgICogQHBhcmFtIHtXaXphcmRTdGVwQ29tcG9uZW50fSBjdXJyZW50U3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgb25XaXphcmRIZWFkZXJDbGljaygkZXZlbnQ6IEV2ZW50LCBjdXJyZW50U3RlcDogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICAvLyBzZWxlY3QgdGhlIHN0ZXAgaWYgaXQncyBzdGF0dXMgaXMgZG9uZVxuICAgICAgICBpZiAoY3VycmVudFN0ZXAuZG9uZSkge1xuICAgICAgICAgICAgLy8gc2V0IGFsbCB0aGUgbmV4dCBzdGVwcyBzdGF0dXMgYXMgZGlzYWJsZWQgYW5kIHByZXZpb3VzIHN0ZXBzIGFzIGRvbmVcbiAgICAgICAgICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmdldFN0ZXBJbmRleEJ5UmVmKGN1cnJlbnRTdGVwKSkge1xuICAgICAgICAgICAgICAgICAgIHN0ZXAuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgc3RlcC5pc0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGVwLmlzRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzZWxlY3RlZCBzdGVwIGFzIGN1cnJlbnQgc3RlcCBhbmQgbWFrZSBpdCBhY3RpdmVcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjdXJyZW50U3RlcDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBuYXZpZ2F0ZSB0byBuZXh0IHN0ZXBcbiAgICBwdWJsaWMgYXN5bmMgbmV4dChldmVudE5hbWU6IHN0cmluZyA9ICduZXh0Jykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuY3VycmVudFN0ZXA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSB0aGlzLmdldEN1cnJlbnRTdGVwSW5kZXgoKTtcblxuICAgICAgICAvLyBhYm9ydCBpZiBvblNraXAgbWV0aG9kIHJldHVybnMgZmFsc2VcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3NraXAnKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGN1cnJlbnRTdGVwLmludm9rZVNraXBDQihjdXJyZW50U3RlcEluZGV4KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVuZE5leHRGbihjdXJyZW50U3RlcCwgY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkICYmIGV2ZW50TmFtZSA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSAgPSBhd2FpdCBjdXJyZW50U3RlcC5pbnZva2VOZXh0Q0IoY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHRlbmROZXh0Rm4oY3VycmVudFN0ZXAsIGN1cnJlbnRTdGVwSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5hYmxlbmV4dCAmJiAhdGhpcy5jdXJyZW50U3RlcC5pc1ZhbGlkKXtcbiAgICAgICAgICAgIEFycmF5LmZyb20oKDxhbnk+dGhpcykuY3VycmVudFN0ZXAuZ2V0QWxsRW1iZWRkZWRGb3JtcygpKT8uZm9yRWFjaCgoZm9ybTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtLndpZGdldC5oaWdobGlnaHRJbnZhbGlkRmllbGRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4dGVuZE5leHRGbihjdXJyZW50U3RlcCwgY3VycmVudFN0ZXBJbmRleCl7XG4gICAgICAgIGNvbnN0IG5leHRTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50ID0gdGhpcy5nZXROZXh0VmFsaWRTdGVwRm9ybUluZGV4KGN1cnJlbnRTdGVwSW5kZXggKyAxKTtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aGljaCBoYXMgc2hvdyB0aGVuIG9ubHkgY2hhbmdlIHN0YXRlIG9mIGN1cnJlbnQgc3RlcCBlbHNlIHJlbWFpbiBzYW1lXG4gICAgICAgIGlmIChuZXh0U3RlcCkge1xuICAgICAgICAgICAgbmV4dFN0ZXAuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICBjdXJyZW50U3RlcC5pc0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgY3VycmVudFN0ZXAuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBuZXh0U3RlcC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IG5leHRTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICB9XG4gICAgLy8gTWV0aG9kIHRvIG5hdmlnYXRlIHRvIHByZXZpb3VzIHN0ZXBcbiAgICBwdWJsaWMgYXN5bmMgcHJldigpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U3RlcEluZGV4KCk7XG5cbiAgICAgICAgbGV0IHByZXZTdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50O1xuXG4gICAgICAgIC8vIGFib3J0IGlmIG9uUHJldiBtZXRob2QgcmV0dXJucyBmYWxzZS5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50U3RlcC5pbnZva2VQcmV2Q0IoY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZTdGVwID0gdGhpcy5nZXRQcmV2aW91c1ZhbGlkU3RlcEZvcm1JbmRleChjdXJyZW50U3RlcEluZGV4IC0gMSk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aGljaCBoYXMgc2hvdyB0aGVuIG9ubHkgY2hhbmdlIHN0YXRlIG9mIGN1cnJlbnQgc3RlcCBlbHNlIHJlbWFpbiBzYW1lXG4gICAgICAgIGlmIChwcmV2U3RlcCkge1xuICAgICAgICAgICAgY3VycmVudFN0ZXAuaXNEb25lID0gZmFsc2U7XG4gICAgICAgICAgICBjdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBwcmV2U3RlcC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IHByZXZTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkTW9yZVRleHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2tpcCgpIHtcbiAgICAgICAgdGhpcy5uZXh0KCdza2lwJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIHRoZSBnaXZlbiBzdGVwIGJhc2VkIG9uIHN0ZXAgbmFtZSBvciBzdGVwIGluZGV4XG4gICAgICogVGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgc3RlcCBpcyBhbHJlYWR5IGluIGRvbmUgc3RhdGVcbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHB1YmxpYyBnb3RvU3RlcChzdGVwOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgbGV0IGdvdG9TdGVwSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHN0ZXApKSB7XG4gICAgICAgICAgICBnb3RvU3RlcEluZGV4ID0gdGhpcy5zdGVwcy50b0FycmF5KCkubWFwKHN0ZXAgPT4gc3RlcC5uYW1lKS5pbmRleE9mKHN0ZXApO1xuICAgICAgICAgICAgaWYgKGdvdG9TdGVwSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IGZpbmQgc3RlcCAnJHtzdGVwfSdgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoc3RlcCkgJiYgc3RlcCA+PSAwKSB7XG4gICAgICAgICAgICBnb3RvU3RlcEluZGV4ID0gc3RlcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIHN0ZXAgbmFtZSBvciBpbmRleCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdvdG9TdGVwOiBXaXphcmRTdGVwQ29tcG9uZW50ID0gdGhpcy5nZXRTdGVwUmVmQnlJbmRleChnb3RvU3RlcEluZGV4KTtcblxuICAgICAgICBpZiAoZ290b1N0ZXA/LnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMub25XaXphcmRIZWFkZXJDbGljayhldmVudCwgZ290b1N0ZXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBnb3RvU3RlcCBmdW5jdGlvbiBjYW5ub3QgbmF2aWdhdGUgdG8gaGlkZGVuIHN0ZXBzXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGludm9rZSBvbi1Eb25lIGV2ZW50IG9uIHdpemFyZFxuICAgIHB1YmxpYyBkb25lKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmlzRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZG9uZScsIHtzdGVwczogdGhpcy5zdGVwcy50b0FycmF5KCl9KTtcbiAgICB9XG4gICAgLy8gTWV0aG9kIHRvIGludm9rZSBvbi1DYW5jZWwgZXZlbnQgb24gd2l6YXJkXG4gICAgcHVibGljIGNhbmNlbCAoKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2FuY2VsJywge3N0ZXBzOiB0aGlzLnN0ZXBzLnRvQXJyYXkoKX0pO1xuICAgIH1cbiAgICBwdWJsaWMgYWRkTW9yZVRleHQoKXtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cblxuICAgICAgICB2YXIgbmV3V2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgaWYobmV3V2luZG93V2lkdGggPCA3Njgpe1xuICAgICAgICAkKFwiLmFwcC13aXphcmQtc3RlcC5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyIC5zdGVwLXRpdGxlXCIpLmNzcyh7XCJoZWlnaHRcIjpcImF1dG9cIixcImRpc3BsYXlcIjpcImJsb2NrXCJ9KTtcbiAgICAgICAgdmFyIHN1YnRpdGxlVGV4dExlbmd0aCA9ICQoXCIuYXBwLXdpemFyZC1zdGVwLmN1cnJlbnQgLnN1YnRpdGxlLXdyYXBwZXIgLnN0ZXAtdGl0bGVcIikuaGVpZ2h0KCk7XG4gICAgICAgICQoXCIucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIik7XG4gICAgICAgICQoXCIuY3VycmVudCAuc3VidGl0bGUtd3JhcHBlclwiKS5yZW1vdmVDbGFzcyhcInJlYWRtb3JlX3N1YnRpdGxlXCIpO1xuXG4gICAgICAgIGlmKHN1YnRpdGxlVGV4dExlbmd0aD40NCl7XG4gICAgICAgICAgICAkKFwiLmFwcC13aXphcmQtc3RlcC5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyIC5zdGVwLXRpdGxlXCIpLmNzcyh7XCJoZWlnaHRcIjpcIjQ0cHhcIixcImRpc3BsYXlcIjpcIi13ZWJraXQtYm94XCJ9KTtcbiAgICAgICAgICAgICQoXCIuY3VycmVudCAucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcImJsb2NrXCIpO1xuICAgICAgICAgICAgJChcIi5hY3RpdmUgLnJlYWRfbW9yZVwiKS5jc3MoXCJkaXNwbGF5XCIsXCJub25lXCIpO1xuICAgICAgICAgICAgJChcIi5kaXNhYmxlIC5yZWFkX21vcmVcIikuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKTtcbiAgICAgICAgICAgICQoXCIuYXBwLXdpemFyZC1zdGVwPmFcIikuY3NzKFwiaGVpZ2h0XCIsXCIxMDBweFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB9XG4gICAgcHVibGljIHJlYWRNb3JlU3VidGl0bGUoKXtcbiAgICAgICAgJChcIi5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyXCIpLmFkZENsYXNzKFwicmVhZG1vcmVfc3VidGl0bGVcIik7XG4gICAgICAgICQoXCIuY3VycmVudCAucmVhZF9tb3JlXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIik7XG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKGU6YW55KVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gJChcIi5zdWJ0aXRsZS13cmFwcGVyXCIpO1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRhcmdldCBvZiB0aGUgY2xpY2sgaXNuJ3QgdGhlIGNvbnRhaW5lciBub3IgYSBkZXNjZW5kYW50IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmlzKGUudGFyZ2V0KSAmJiBjb250YWluZXIuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJChcIi5jdXJyZW50IC5zdWJ0aXRsZS13cmFwcGVyXCIpLnJlbW92ZUNsYXNzKFwicmVhZG1vcmVfc3VidGl0bGVcIik7XG4gICAgICAgICAgICAgICAgJChcIi5jdXJyZW50IC5yZWFkX21vcmVcIikuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIik7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2V1cFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNGaXJzdFN0ZXAoc3RlcFJlZjogV2l6YXJkU3RlcENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwcy5maXJzdCA9PT0gc3RlcFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xhc3RTdGVwKHN0ZXBSZWY6IFdpemFyZFN0ZXBDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMubGFzdCA9PT0gc3RlcFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBjcmVhdGVBcnJheUZyb20obmV3VmFsKTtcbiAgICB9XG5cblxuICAgIC8vIERlZmluZSB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIuIFRoaXMgTWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHdpZGdldCBwcm9wZXJ0eVxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIC8vIE1vbml0b3JpbmcgY2hhbmdlcyBmb3IgcHJvcGVydGllcyBhbmQgYWNjb3JkaW5nbHkgaGFuZGxpbmcgcmVzcGVjdGl2ZSBjaGFuZ2VzXG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3N0ZXBzdHlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcENsYXNzID0gIG52ID09PSAnanVzdGlmaWVkJyA/ICduYXYtanVzdGlmaWVkJyA6ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGVmYXVsdHN0ZXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGVwKHRoaXMuZ2V0U3RlcFJlZkJ5TmFtZShudikpO1xuICAgICAgICB9ICBlbHNlIGlmIChrZXkgPT09ICdkZWZhdWx0c3RlcGluZGV4Jykge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RlcCh0aGlzLmdldFN0ZXBSZWZCeUluZGV4KG52KSk7XG4gICAgICAgIH0gIGVsc2UgaWYgKGtleSA9PT0gJ2FjdGlvbnNhbGlnbm1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmFwcC13aXphcmQtYWN0aW9ucycpPy5jbGFzc0xpc3QucmVwbGFjZShvdiwgbnYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlckZuKCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5oYXNOZXh0U3RlcCA9ICgpID0+IHRoaXMuaGFzTmV4dFN0ZXA7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5oYXNQcmV2aW91c1N0ZXAgPSAoKSA9PiB0aGlzLmhhc1ByZXZTdGVwO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuaGFzTm9OZXh0U3RlcCA9ICgpID0+IHRoaXMuc2hvd0RvbmVCdG47XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWxhYmxlID0gKCkgPT4gdGhpcy5jYW5jZWxhYmxlO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuc2tpcHBhYmxlID0gKCkgPT4gdGhpcy5jdXJyZW50U3RlcD8uZW5hYmxlc2tpcDtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0Lm5leHQgPSAoKSA9PiB0aGlzLm5leHQoKTtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0LnByZXZpb3VzID0gKCkgPT4gdGhpcy5wcmV2KCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5kb25lID0gKCkgPT4gdGhpcy5kb25lKCk7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWwgPSAoKSA9PiB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuc2tpcCA9ICgpID0+IHRoaXMuc2tpcCgpO1xuICAgICAgICB0aGlzLndpekNvbnRleHQubmV4dGJ0bmxhYmVsID0gKCkgPT4gdGhpcy5uZXh0YnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5wcmV2aW91c2J0bmxhYmVsID0gKCkgPT4gdGhpcy5wcmV2aW91c2J0bmxhYmVsO1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZG9uZWJ0bmxhYmVsID0gKCkgPT4gdGhpcy5kb25lYnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5jYW5jZWxidG5sYWJlbCA9ICgpID0+IHRoaXMuY2FuY2VsYnRubGFiZWw7XG4gICAgICAgIHRoaXMud2l6Q29udGV4dC5hY3Rpb25zYWxpZ25tZW50ID0gKCkgPT4gdGhpcy5hY3Rpb25zYWxpZ25tZW50O1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZGlzYWJsZU5leHQgPSAoKSA9PiAhdGhpcy5lbmFibGVOZXh0O1xuICAgICAgICB0aGlzLndpekNvbnRleHQuZGlzYWJsZVByZXZpb3VzID0gKCkgPT4gIXRoaXMuZW5hYmxlUHJldjtcbiAgICAgICAgdGhpcy53aXpDb250ZXh0LmRpc2FibGVEb25lID0gKCkgPT4gIXRoaXMuZW5hYmxlRG9uZTtcbiAgICAgICAgdGhpcy5zdGVwcy5jaGFuZ2VzLnN1YnNjcmliZSggc2xpZGVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCA+IDEgJiYgdGhpcy50eXBlID09PSAnZHluYW1pYycgJiYgdGhpcy5faXNGaXJzdExvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGVwKHRoaXMuZ2V0U3RlcFJlZkJ5SW5kZXgodGhpcy5kZWZhdWx0c3RlcGluZGV4KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKFxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wYW5lbC1ib2R5JykgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgQVBQTFlfU1RZTEVTX1RZUEUuSU5ORVJfU0hFTExcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IGlmKCQod2luZG93KS53aWR0aCgpPDc2OCkge1xuICAgICAgICAgICAgJChcIi5hcHAtd2l6YXJkXCIpLnJlbW92ZUNsYXNzKFwidmVydGljYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5hcHAtd2l6YXJkLWFjdGlvbnMnKS5mb3JFYWNoKGVsID0+IGVsPy5jbGFzc0xpc3QuYWRkKHRoaXMuYWN0aW9uc2FsaWdubWVudCkpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LmFwcC13aXphcmQtYWN0aW9ucy1yaWdodCcpLmZvckVhY2goZWwgPT4gZWw/LmNsYXNzTGlzdC5yZW1vdmUoJ2FwcC1jb250YWluZXInKSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC13aXphcmQtaGVhZGluZ1wiPlxuICA8dWwgY2xhc3M9XCJhcHAtd2l6YXJkLXN0ZXBzIG5hdiBuYXYtcGlsbHMge3tzdGVwQ2xhc3N9fVwiPlxuICAgIEBmb3IgKHN0ZXAgb2Ygc3RlcHM7IHRyYWNrIHN0ZXA7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8bGkgY2xhc3M9XCJhcHAtd2l6YXJkLXN0ZXBcIiBbaGlkZGVuXT1cIiFzdGVwLnNob3dcIlxuICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiBzdGVwLmRvbmUsIGN1cnJlbnQ6IHN0ZXAuYWN0aXZlLCBkaXNhYmxlZDogc3RlcC5kaXNhYmxlZH1cIlxuICAgICAgICAoY2xpY2spPVwib25XaXphcmRIZWFkZXJDbGljaygkZXZlbnQsIHN0ZXApXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3RlcC5hY3RpdmUgPyAnc3RlcCcgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInN0ZXAuZGlzYWJsZWRcIiBbYXR0ci50aXRsZV09XCJzdGVwLnRpdGxlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3RpdGxlLWNlbnRlci1hbGlnbic6Y2xhc3MgJiYgY2xhc3MuaW5jbHVkZXMoJ2NsYXNzaWMnKSAmJiAhc3RlcC5zdWJ0aXRsZX1cIj5cbiAgICAgICAgICBAaWYgKGNsYXNzICYmIGNsYXNzLmluY2x1ZGVzKCdjbGFzc2ljJykpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj48L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2l6YXJkLXN0ZXAtbnVtYmVyXCI+XG4gICAgICAgICAgICBAaWYgKGNsYXNzICYmIGNsYXNzLmluY2x1ZGVzKCdudW1iZXInKSAmJiAhc3RlcC5pc0RvbmUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPnt7aSsxfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNsYXNzICYmIChjbGFzcy5pbmNsdWRlcygnZG90dGVkc3RlcHBlcicpIHx8IGNsYXNzLmluY2x1ZGVzKCd0ZXh0LWlubGluZScpICYmICFjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkgJiYgIXN0ZXAuaXNEb25lKSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZG90dGVkc3RlcHBlclwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoY2xhc3MgJiYgKGNsYXNzLmluY2x1ZGVzKCdkb3R0ZWRzdGVwcGVyJykgfHwgY2xhc3MuaW5jbHVkZXMoJ251bWJlcicpKSAmJiBzdGVwLmlzRG9uZSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIHdpLWRvbmVcIj48L2k+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKChjbGFzcyAmJiBjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkgJiYgKChzdGVwLmljb25jbGFzcyAmJiAhc3RlcC5pc0RvbmUpIHx8IChzdGVwLmljb25jbGFzcyAmJiBzdGVwLmlzRG9uZSAmJiBzdGVwLmRvbmVpY29uY2xhc3MgPT09JycpKSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHt7c3RlcC5pY29uY2xhc3N9fVwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc3RlcC5kb25laWNvbmNsYXNzICYmIHN0ZXAuaXNEb25lICYmIChjbGFzcyAmJiBjbGFzcy5pbmNsdWRlcygnaWNvbnN0ZXBwZXInKSkpIHtcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB7e3N0ZXAuZG9uZWljb25jbGFzc319XCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIEBpZiAoY2xhc3MgJiYgY2xhc3MuaW5jbHVkZXMoJ3RleHQtaW5saW5lJykpIHtcbiAgICAgICAgICAgICAgPHNwYW4+e3snMCcgKyAoaSsxKX19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLXRpdGxlXCIgW3RleHRDb250ZW50XT1cInN0ZXAudGl0bGVcIj48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIEBpZiAoc3RlcC5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZS13cmFwcGVyXCIgW2F0dHIudGl0bGVdPVwic3RlcC5zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwic3RlcC5zdWJ0aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJyZWFkX21vcmVcIiAoY2xpY2spPVwicmVhZE1vcmVTdWJ0aXRsZSgpXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5tb3JlPC9hPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICB9XG4gIDwvdWw+XG48L2Rpdj5cbkBpZiAodHlwZSAhPT0gJ2R5bmFtaWMnKSB7XG48ZGl2IGNsYXNzPVwiYXBwLXdpemFyZC1ib2R5IHBhbmVsLWJvZHlcIj5cbiAgQGlmIChtZXNzYWdlLmNhcHRpb24pIHtcbiAgICA8cCB3bU1lc3NhZ2UgY2FwdGlvbi5iaW5kPVwibWVzc2FnZS5jYXB0aW9uXCIgdHlwZS5iaW5kPVwibWVzc2FnZS50eXBlXCI+PC9wPlxuICB9XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwiZm9ybVt3bVdpemFyZFN0ZXBdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG59XG5AaWYgKHR5cGUgPT09ICdkeW5hbWljJykge1xuPGRpdiBjbGFzcz1cImFwcC13aXphcmQtYm9keSBwYW5lbC1ib2R5XCI+XG4gICAgQGlmKCFmaWVsZERlZnM/Lmxlbmd0aCkge1xuICAgIDxkaXY+e3tub2RhdGFtZXNzYWdlfX08L2Rpdj5cbiAgICB9XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2W3dtUmVwZWF0VGVtcGxhdGVdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG59XG5AaWYoZmllbGREZWZzICYmIGZpZWxkRGVmcy5sZW5ndGggfHwgdHlwZSAhPT0gJ2R5bmFtaWMnKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndpemFyZEFjdGlvblwiPjwvbmctY29udGFpbmVyPlxufVxuIl19
@@ -494,11 +494,12 @@ class WizardComponent extends StylableComponent {
494
494
  }
495
495
  /**
496
496
  * This method is to remove the wizard step
497
- * @param stepName - index of the step
497
+ * @param step - index or name of the step
498
498
  */
499
- removeStep(stepName) {
500
- const stepRef = this.getStepRefByName(stepName);
501
- stepRef ? stepRef.remove() : console.warn(`Could not find step with name '${stepName}'`);
499
+ removeStep(step) {
500
+ const stepRef = isString(step) ? this.getStepRefByName(step) : isNumber(step)
501
+ ? this.getStepRefByIndex(step) : null;
502
+ stepRef ? stepRef.remove() : console.warn(`Could not find step with name or index '${step}' to remove`);
502
503
  }
503
504
  /**
504
505
  * returns next valid step. the index passed is also checked if its valid step
@@ -637,11 +638,10 @@ class WizardComponent extends StylableComponent {
637
638
  }
638
639
  }
639
640
  extendNextFn(currentStep, currentStepIndex) {
640
- let nextStep;
641
- nextStep = this.getNextValidStepFormIndex(currentStepIndex + 1);
642
- nextStep.isInitialized = true;
641
+ const nextStep = this.getNextValidStepFormIndex(currentStepIndex + 1);
643
642
  // If there are any steps which has show then only change state of current step else remain same
644
643
  if (nextStep) {
644
+ nextStep.isInitialized = true;
645
645
  currentStep.isDone = true;
646
646
  currentStep.done = true;
647
647
  nextStep.active = true;