@wavemaker/app-ng-runtime 11.4.0-next.25720 → 11.4.0-next.25724

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 (38) hide show
  1. app-ng-runtime/components/base/bundles/index.umd.js +15 -4
  2. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/components/base/esm2015/directives/show-in-device.directive.js +16 -5
  4. app-ng-runtime/components/base/fesm2015/index.js +15 -4
  5. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/chart/bundles/index.umd.js +1 -1
  7. app-ng-runtime/components/chart/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/chart/esm2015/chart.component.js +2 -2
  9. app-ng-runtime/components/chart/fesm2015/index.js +1 -1
  10. app-ng-runtime/components/chart/fesm2015/index.js.map +1 -1
  11. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +43 -2
  12. app-ng-runtime/components/containers/wizard/bundles/index.umd.js.map +1 -1
  13. app-ng-runtime/components/containers/wizard/esm2015/wizard-step/wizard-step.props.js +3 -2
  14. app-ng-runtime/components/containers/wizard/esm2015/wizard.component.js +42 -2
  15. app-ng-runtime/components/containers/wizard/fesm2015/index.js +43 -2
  16. app-ng-runtime/components/containers/wizard/fesm2015/index.js.map +1 -1
  17. app-ng-runtime/components/containers/wizard/index.metadata.json +1 -1
  18. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -0
  19. app-ng-runtime/core/bundles/index.umd.js +12 -2
  20. app-ng-runtime/core/bundles/index.umd.js.map +1 -1
  21. app-ng-runtime/core/esm2015/services/viewport.service.js +6 -4
  22. app-ng-runtime/core/esm2015/utils/utils.js +11 -3
  23. app-ng-runtime/core/fesm2015/index.js +15 -5
  24. app-ng-runtime/core/fesm2015/index.js.map +1 -1
  25. app-ng-runtime/core/index.metadata.json +1 -1
  26. app-ng-runtime/core/utils/utils.d.ts +2 -2
  27. app-ng-runtime/package.json +1 -1
  28. app-ng-runtime/runtime/base/bundles/index.umd.js +163 -132
  29. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  30. app-ng-runtime/runtime/base/esm2015/public_api.js +2 -1
  31. app-ng-runtime/runtime/base/esm2015/runtime-base.module.js +3 -1
  32. app-ng-runtime/runtime/base/esm2015/services/app.service.js +3 -1
  33. app-ng-runtime/runtime/base/esm2015/services/pipe.service.js +33 -0
  34. app-ng-runtime/runtime/base/fesm2015/index.js +148 -119
  35. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  36. app-ng-runtime/runtime/base/index.metadata.json +1 -1
  37. app-ng-runtime/runtime/base/public_api.d.ts +1 -0
  38. app-ng-runtime/runtime/base/services/pipe.service.d.ts +9 -0
@@ -128,7 +128,7 @@ export class ChartComponent extends StylableComponent {
128
128
  if (isLineTypeChart(this.type) && !isNumberType(this.xAxisDataType)) {
129
129
  // Verification to get the unique data keys
130
130
  this.xDataKeyArr.push(value);
131
- return index;
131
+ return value;
132
132
  }
133
133
  return value;
134
134
  }
@@ -944,4 +944,4 @@ ChartComponent.propDecorators = {
944
944
  title: [{ type: HostBinding, args: ['class.panel',] }]
945
945
  };
946
946
  export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4 };
947
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxVQUFVLENBQUM7QUFDdEssT0FBTyxFQUFFLGlCQUFpQixFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEdBQUksTUFBTSxxQkFBcUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJak8sTUFBTSxhQUFhLEdBQUcsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztBQUV2RSxNQUFNLE9BQU8sR0FBRztJQUNSLFFBQVEsRUFBRyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDckMsRUFDRCxJQUFJLEdBQUcsTUFBTSxFQUNiLGdCQUFnQixHQUFHLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7QUFDN0UscURBQXFEO0FBQ3JELG1CQUFtQixHQUFH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QUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFDLEVBQUU7WUFDdkMsWUFBWSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7QUF0L0JNLDhCQUFlLEdBQUcsYUFBYSxFQUFFLENBQUM7O1lBVjVDLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsK3pCQUFxQztnQkFFckMsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztpQkFDckM7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3hDOzs7WUFqRzBELFFBQVE7WUFFMUQsR0FBRzs7O29CQW1KUCxXQUFXLFNBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcCwgRGF0YVNvdXJjZSwgZ2V0Q2xvbmVkT2JqZWN0LCBpc0RhdGFTb3VyY2VFcXVhbCwgaXNFbXB0eU9iamVjdCwgaXNOdW1iZXJUeXBlLCBwcmV0dGlmeUxhYmVscywgcmVtb3ZlQXR0ciwgdHJpZ2dlckZuLCBpc01vYmlsZUFwcCwgbm9vcCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBJUmVkcmF3YWJsZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyLCAgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vY2hhcnQucHJvcHMnO1xuaW1wb3J0IHsgYWxsU2hhcGVzLCBnZXREYXRlTGlzdCwgZ2V0U2FtcGxlRGF0YSwgaW5pdENoYXJ0LCBpc0FyZWFDaGFydCwgaXNBeGlzRG9tYWluVmFsaWQsIGlzQmFyQ2hhcnQsIGlzQnViYmxlQ2hhcnQsIGlzQ2hhcnREYXRhQXJyYXksIGlzQ2hhcnREYXRhSlNPTiwgaXNMaW5lVHlwZUNoYXJ0LCBpc1BpZVR5cGUsIHBvc3RQbG90Q2hhcnRQcm9jZXNzIH0gZnJvbSAnLi9jaGFydC51dGlscyc7XG5cbmRlY2xhcmUgY29uc3QgJCwgXywgZDMsIG52O1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1jaGFydCcsIGhvc3RDbGFzczogJ2FwcC1jaGFydCd9O1xuXG5jb25zdCBvcHRpb25zID0ge1xuICAgICAgICAnQnViYmxlJyA6IFsnYnViYmxlc2l6ZScsICdzaGFwZSddXG4gICAgfSxcbiAgICBOT05FID0gJ25vbmUnLFxuICAgIGFkdmFuY2VEYXRhUHJvcHMgPSBbJ2FnZ3JlZ2F0aW9uJywgJ2FnZ3JlZ2F0aW9uY29sdW1uJywgJ2dyb3VwYnknLCAnb3JkZXJieSddLFxuICAgIC8vIFhQYXRocyB0byBnZXQgYWN0dWFsIGRhdGEgb2YgZGF0YSBwb2ludHMgaW4gY2hhcnRzXG4gICAgY2hhcnREYXRhUG9pbnRYcGF0aCA9IHtcbiAgICAgICAgJ0NvbHVtbicgICAgICAgICA6ICdyZWN0Lm52LWJhcicsXG4gICAgICAgICdCYXInICAgICAgICAgICAgOiAnZy5udi1iYXInLFxuICAgICAgICAnQXJlYScgICAgICAgICAgIDogJy5udi1zdGFja2VkYXJlYSAubnYtcG9pbnQnLFxuICAgICAgICAnQ3VtdWxhdGl2ZSBMaW5lJzogJy5udi1jdW11bGF0aXZlTGluZSAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdMaW5lJyAgICAgICAgICAgOiAnLm52LWxpbmVDaGFydCAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdQaWUnICAgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0RvbnV0JyAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnQnViYmxlJyAgICAgICAgIDogJy5udi1zY2F0dGVyQ2hhcnQgLm52LXBvaW50LXBhdGhzIHBhdGgnXG4gICAgfSxcbiAgICAvLyBhbGwgcHJvcGVydGllcyBvZiB0aGUgY2hhcnRcbiAgICBhbGxPcHRpb25zID0gWydidWJibGVzaXplJywgJ3NoYXBlJ10sXG4gICAgc3R5bGVQcm9wcyA9IHtcbiAgICAgICAgJ2ZvbnR1bml0JyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdmb250c2l6ZScgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnY29sb3InICAgICAgICAgOiAnZmlsbCcsXG4gICAgICAgICdmb250ZmFtaWx5JyAgICA6ICdmb250LWZhbWlseScsXG4gICAgICAgICdmb250d2VpZ2h0JyAgICA6ICdmb250LXdlaWdodCcsXG4gICAgICAgICdmb250c3R5bGUnICAgICA6ICdmb250LXN0eWxlJyxcbiAgICAgICAgJ3RleHRkZWNvcmF0aW9uJzogJ3RleHQtZGVjb3JhdGlvbidcbiAgICB9LFxuICAgIC8vIEdldHRpbmcgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICBhZ2dyZWdhdGlvbkZuTWFwID0ge1xuICAgICAgICAnYXZlcmFnZScgOiAnQVZHJyxcbiAgICAgICAgJ2NvdW50JyAgIDogJ0NPVU5UJyxcbiAgICAgICAgJ21heGltdW0nIDogJ01BWCcsXG4gICAgICAgICdtaW5pbXVtJyA6ICdNSU4nLFxuICAgICAgICAnc3VtJyAgICAgOiAnU1VNJ1xuICAgIH07XG5cbmNvbnN0IGdldEJvb2xlYW5WYWx1ZSA9IHZhbCA9PiB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIHJldHVybnMgb3JkZXJieSBjb2x1bW5zIGFuZCB0aGVpciBvcmRlcnMgaW4gdHdvIHNlcGFyYXRlIGFycmF5c1xuY29uc3QgZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCA9IG9yZGVyYnkgPT4ge1xuICAgIGxldCBjb2x1bW5zO1xuICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5zID0gW10sXG4gICAgICAgIG9yZGVycyA9IFtdO1xuXG4gICAgXy5mb3JFYWNoKF8uc3BsaXQob3JkZXJieSwgJywnKSwgZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICBjb2x1bW5zID0gXy5zcGxpdChjb2wsICc6Jyk7XG4gICAgICAgIG9yZGVyQnlDb2x1bW5zLnB1c2goY29sdW1uc1swXSk7XG4gICAgICAgIG9yZGVycy5wdXNoKGNvbHVtbnNbMV0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICdjb2x1bW5zJyA6IG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAnb3JkZXJzJyAgOiBvcmRlcnNcbiAgICB9O1xufTtcblxuLy8gUmVwbGFjaW5nIHRoZSAnLicgYnkgdGhlICckJyBiZWNhdXNlICcuJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBhbGlhcyBuYW1lc1xuY29uc3QgZ2V0VmFsaWRBbGlhc05hbWUgPSBhbGlhc05hbWUgPT4gYWxpYXNOYW1lID8gYWxpYXNOYW1lLnJlcGxhY2UoL1xcLi9nLCAnJCcpIDogbnVsbDtcblxuLy8gQXBwbHlpbmcgdGhlIGZvbnQgcmVsYXRlZCBzdHlsZXMgZm9yIHRoZSBjaGFydFxuY29uc3Qgc2V0VGV4dFN0eWxlID0gKHByb3BlcnRpZXMsIGlkKSA9PiB7XG4gICAgY29uc3QgY2hhcnR0ZXh0ID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyBpZCArICcgc3ZnJykuc2VsZWN0QWxsKCd0ZXh0Jyk7XG4gICAgY2hhcnR0ZXh0LnN0eWxlKHByb3BlcnRpZXMpO1xufTtcblxuY29uc3QgYW5nbGUgPSBkID0+IHtcbiAgICBjb25zdCBhID0gKGQuc3RhcnRBbmdsZSArIGQuZW5kQW5nbGUpICogOTAgLyBNYXRoLlBJIC0gOTA7XG4gICAgcmV0dXJuIGEgPiA5MCA/IGEgLSAxODAgOiBhO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkaXZbd21DaGFydF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad2F2ZW1ha2VyLmNvbS9udmQzL2J1aWxkL252LmQzLm1pbi5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoYXJ0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJUmVkcmF3YWJsZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHhheGlzZGF0YWtleTtcbiAgICB5YXhpc2RhdGFrZXk7XG4gICAgZ3JvdXBieTtcbiAgICBhZ2dyZWdhdGlvbjtcbiAgICBhZ2dyZWdhdGlvbmNvbHVtbjtcbiAgICBpc1Zpc3VhbGx5R3JvdXBlZDtcbiAgICBvcmRlcmJ5O1xuICAgIGljb25jbGFzcyA9ICcnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBzaG93Q29udGVudExvYWRFcnJvcjtcbiAgICBpbnZhbGlkQ29uZmlnO1xuICAgIGVyck1zZztcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGRhdGFzb3VyY2U6IGFueTtcbiAgICBmb250c2l6ZTogc3RyaW5nO1xuICAgIHNlbGVjdGVkaXRlbTogYW55O1xuICAgIGZvbnR1bml0OiBzdHJpbmc7XG4gICAgb2Zmc2V0dG9wOiBudW1iZXI7XG4gICAgb2Zmc2V0bGVmdDogbnVtYmVyO1xuICAgIG9mZnNldHJpZ2h0OiBudW1iZXI7XG4gICAgb2Zmc2V0Ym90dG9tOiBudW1iZXI7XG4gICAgc2hvd2xhYmVsczogYW55O1xuICAgIHRoZW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlICRpZDtcbiAgICBwcml2YXRlIHNjb3BlZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYmluZGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIHNob3dsYWJlbHNvdXRzaWRlOiBhbnk7XG4gICAgcHJpdmF0ZSBfcmVzaXplRm46IGFueTtcbiAgICBwcml2YXRlIGNoYXJ0OiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhckNhbnZhczogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXNMb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpbHRlckZpZWxkczogYm9vbGVhbiB8IGFueTtcbiAgICBwcml2YXRlIGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGF4aXNvcHRpb25zOiBhbnk7XG4gICAgcHJpdmF0ZSBudW1lcmljQ29sdW1uczogYW55O1xuICAgIHByaXZhdGUgbm9uUHJpbWFyeUNvbHVtbnM6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodDogYW55O1xuICAgIHByaXZhdGUgY2hhcnRSZWFkeTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHhEYXRhS2V5QXJyOiBhbnkgPSBbXTtcbiAgICBwcml2YXRlIHhBeGlzRGF0YVR5cGU6IHN0cmluZztcbiAgICBwcml2YXRlIGJ1YmJsZXNpemU6IGFueTtcbiAgICBwdWJsaWMgc2hvd05vRGF0YU1zZzogYW55O1xuICAgIHByaXZhdGUgc2FtcGxlRGF0YTogYW55W107XG4gICAgcHJpdmF0ZSBjaGFydERhdGE6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBfcHJvY2Vzc2VkRGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9zdWJzY2lwdGlvbnM6IGFueSA9IFtdO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYW5lbCcpIHRpdGxlO1xuXG4gICAgaXNHcm91cEJ5RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHggYW5kIHkgYXhpcyB0aGF0IGFyZSBjaG9zZW4gYXJlIHZhbGlkIHRvIHBsb3QgY2hhcnRcbiAgICBpc1ZhbGlkQXhpcygpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgeCBheGlzIGFuZCB5IGF4aXMgYXJlIGNob3NlbiBhbmQgYXJlIG5vdCBlcXVhbFxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kZGF0YXNldCA/ICh0aGlzLnhheGlzZGF0YWtleSAmJiB0aGlzLnlheGlzZGF0YWtleSkgOiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGlzIGNob3NlblxuICAgIGlzQWdncmVnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEoKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09IE5PTkUgJiYgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGVpdGhlciBncm91cGJ5LCBhZ2dyZWdhdGlvbiBvciBvcmRlcmJ5IGlzIGNob3NlblxuICAgIGlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSB7XG4gICAgICAgIC8qUXVlcnkgbmVlZCB0byBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2FzZXMgc2F0aXNmeVxuICAgICAgICAqIDEuIEdyb3VwIEJ5IGFuZCBhZ2dyZWdhdGlvbiBib3RoIGNob3NlblxuICAgICAgICAqIDIuIE9ubHkgT3JkZXIgQnkgaXMgY2hvc2VuXG4gICAgICAgICogKi9cblxuICAgICAgICByZXR1cm4gdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpIHx8ICghdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiB0aGlzLm9yZGVyYnkpO1xuICAgIH1cblxuICAgIC8qQ2hhcnRzIGxpa2UgTGluZSxBcmVhLEN1bXVsYXRpdmUgTGluZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBkYXRhdHlwZVxuICAgICAgICBvdGhlciB0aGFuIGludGVnZXIgdW5saWtlIHRoZSBjb2x1bW4gYW5kIGJhci5JdCBpcyBhIG52ZDMgaXNzdWUuIElub3JkZXIgdG9cbiAgICAgICAgc3VwcG9ydCB0aGF0IHRoaXMgaXMgYSBmaXgqL1xuICAgIGdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeEtleSk7XG4gICAgICAgIC8vIElmIHggYXhpcyBpcyBvdGhlciB0aGFuIG51bWJlciB0eXBlIHRoZW4gYWRkIGluZGV4ZXNcbiAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh0aGlzLnR5cGUpICYmICFpc051bWJlclR5cGUodGhpcy54QXhpc0RhdGFUeXBlKSkge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2F0aW9uIHRvIGdldCB0aGUgdW5pcXVlIGRhdGEga2V5c1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIGFtb25nIGFsbCB0aGUgeCB2YWx1ZXNcbiAgICBnZXRYTWluTWF4VmFsdWVzKGRhdHVtKSB7XG4gICAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4VmFsdWVzOiBhbnkgPSB7fTtcbiAgICAgICAgLypcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1pbiB4IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dXG4gICAgICAgICAgICBtaW4geDogMVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dO1xuICAgICAgICAgICAgbWluIHg6IDEwXG4gICAgICAgICovXG4gICAgICAgIHhWYWx1ZXMubWluID0gXy5taW5CeShkYXR1bS52YWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC54IHx8IGRhdGFPYmplY3RbMF0pO1xuICAgICAgICAvKlxuICAgICAgICAgY29tcHV0ZSB0aGUgbWF4IHggdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV1cbiAgICAgICAgICAgIG1heCB4OiAzXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV07XG4gICAgICAgICAgICBtYXggeDogMzBcbiAgICAgICAgICovXG4gICAgICAgIHhWYWx1ZXMubWF4ID0gXy5tYXhCeShkYXR1bS52YWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC54IHx8IGRhdGFPYmplY3RbMF0pO1xuICAgICAgICByZXR1cm4geFZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSB5IHZhbHVlc1xuICAgIGdldFlNaW5NYXhWYWx1ZXMoZGF0dW0pIHtcbiAgICAgICAgY29uc3QgeVZhbHVlczogYW55ID0ge30sXG4gICAgICAgICAgICBtaW5WYWx1ZXMgPSBbXSxcbiAgICAgICAgICAgIG1heFZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgR2V0dGluZyB0aGUgbWluIGFuZCBtYXggeSB2YWx1ZXMgYW1vbmcgYWxsIHRoZSBzZXJpZXMgb2YgZGF0YVxuICAgICAgICAgY29tcHV0ZSB0aGUgbWluIHkgdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dLCBbe3g6MiwgeTozfSwge3g6MywgeTo0fSwge3g6NCwgeTo1fV1dXG4gICAgICAgICAgICBtaW4geSB2YWx1ZXMgOiAnMicoYW1vbmcgZmlyc3Qgc2V0KSAmICczJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgICAgbWF4IHkgdmFsdWVzIDogJzQnKGFtb25nIGZpcnN0IHNldCkgJiAnNScoYW1vbmcgc2Vjb25kIHNldClcblxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1tbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXSwgW1syMCwgMzBdLCBbMzAsIDQwXSwgWzQwLCA1MF1dXVxuICAgICAgICAgICAgbWluIHkgdmFsdWVzIDogJzIwJyhhbW9uZyBmaXJzdCBzZXQpICYgJzMwJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgICAgbWF4IHkgdmFsdWVzIDogJzQwJyhhbW9uZyBmaXJzdCBzZXQpICYgJzUwJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgKi9cblxuICAgICAgICBfLmZvckVhY2goZGF0dW0sIGRhdGEgPT4ge1xuICAgICAgICAgICAgbWluVmFsdWVzLnB1c2goXy5taW5CeShkYXRhLnZhbHVlcywgZnVuY3Rpb24gKGRhdGFPYmplY3QpIHsgcmV0dXJuIGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdOyB9KSk7XG4gICAgICAgICAgICBtYXhWYWx1ZXMucHVzaChfLm1heEJ5KGRhdGEudmFsdWVzLCBmdW5jdGlvbiAoZGF0YU9iamVjdCkgeyByZXR1cm4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV07IH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdldHMgdGhlIGxlYXN0IGFuZCBoaWdoZXN0IHZhbHVlcyBhbW9uZyBhbGwgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiByZXNwZWN0aXZlIHNlcmllcyBvZiBkYXRhXG4gICAgICAgIHlWYWx1ZXMubWluID0gXy5taW5CeShtaW5WYWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV0pO1xuICAgICAgICB5VmFsdWVzLm1heCA9IF8ubWF4QnkobWF4VmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdKTtcbiAgICAgICAgcmV0dXJuIHlWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHgtYXhpcyB2YWx1ZXMgYXJlIHVuZGVmaW5lZCwgd2UgcmV0dXJuIGVtcHR5IGFycmF5IGVsc2Ugd2UgcmV0dXJuIHRoZSB2YWx1ZXNcbiAgICBnZXRWYWxpZERhdGEodmFsdWVzKSB7XG4gICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZXNbMF0gPT09IHVuZGVmaW5lZCkgPyBbXSA6IHZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBzaW5nbGUgZGF0YSBwb2ludCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgZGF0YSBjaGFydCBhY2NlcHRzXG4gICAgdmFsdWVGaW5kZXIoZGF0YU9iaiwgeEtleSwgeUtleSwgaW5kZXg/LCBzaGFwZT8pIHtcbiAgICAgICAgY29uc3QgeFZhbCA9IHRoaXMuZ2V0eEF4aXNWYWwoZGF0YU9iaiwgeEtleSwgaW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSBfLmdldChkYXRhT2JqLCB5S2V5KSxcbiAgICAgICAgICAgIHlWYWwgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCB2YWx1ZSxcbiAgICAgICAgICAgIHNpemUgPSBwYXJzZUZsb2F0KGRhdGFPYmpbdGhpcy5idWJibGVzaXplXSkgfHwgMjtcbiAgICAgICAgbGV0IGRhdGFQb2ludDogYW55ID0ge307XG5cbiAgICAgICAgaWYgKGlzQ2hhcnREYXRhSlNPTih0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhUG9pbnQueCA9IHhWYWw7XG4gICAgICAgICAgICBkYXRhUG9pbnQueSA9IHlWYWw7XG4gICAgICAgICAgICAvLyBvbmx5IEJ1YmJsZSBjaGFydCBoYXMgdGhlIHRoaXJkIGRpbWVuc2lvblxuICAgICAgICAgICAgaWYgKGlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludC5zaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQuc2hhcGUgPSBzaGFwZSB8fCAnY2lyY2xlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0NoYXJ0RGF0YUFycmF5KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIGRhdGFQb2ludCA9IFt4VmFsLCB5VmFsXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGRpbmcgYWN0dWFsIHVud3JhcHBlZCBkYXRhIHRvIGNoYXJ0IGRhdGEgdG8gdXNlIGF0IHRoZSB0aW1lIG9mIHNlbGVjdGVkIGRhdGEgcG9pbnQgb2YgY2hhcnQgZXZlbnRcbiAgICAgICAgZGF0YVBvaW50Ll9kYXRhT2JqID0gZGF0YU9iajtcbiAgICAgICAgcmV0dXJuIGRhdGFQb2ludDtcbiAgICB9XG5cbiAgICAvLyBTZXR0aW5nIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2VzXG4gICAgc2V0RXJyTXNnKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd05vRGF0YU1zZykge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29udGVudExvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRDb25maWcgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2V0IHRoZSBsb2NhbGUgZnJvbSB0aGUgbWVzc2FnZVxuICAgICAgICAgICAgdGhpcy5lcnJNc2cgPSAnJzsgLy8gJHJvb3RTY29wZS5sb2NhbGVbbWVzc2FnZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzQ2hhcnREYXRhKCkge1xuICAgICAgICB0aGlzLnNhbXBsZURhdGEgPSBnZXRTYW1wbGVEYXRhKHRoaXMpO1xuICAgICAgICAvLyBzY29wZSB2YXJpYWJsZXMgdXNlZCB0byBrZWVwIHRoZSBhY3R1YWwga2V5IHZhbHVlcyBmb3IgeC1heGlzXG4gICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBbXTtcbiAgICAgICAgLy8gUGxvdHRpbmcgdGhlIGNoYXJ0IHdpdGggc2FtcGxlIGRhdGEgd2hlbiB0aGUgY2hhcnQgZGF0YXNldCBpcyBub3QgYm91bmRcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gZ2V0RGF0ZUxpc3QoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhbXBsZURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY2hhcnREYXRhIHx8ICF0aGlzLmNoYXJ0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXR1bSA9IFtdLFxuICAgICAgICAgICAgeUF4aXNLZXksXG4gICAgICAgICAgICBzaGFwZXM6IGFueSA9IFtdLFxuICAgICAgICAgICAgdmFsdWVzOiBhbnkgPSBbXTtcbiAgICAgICAgY29uc3QgeEF4aXNLZXkgPSB0aGlzLnhheGlzZGF0YWtleSxcbiAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgZGF0YVNldCA9IHRoaXMuY2hhcnREYXRhO1xuXG4gICAgICAgIGlmIChfLmlzQXJyYXkoZGF0YVNldCkpIHtcbiAgICAgICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHlBeGlzS2V5ID0geUF4aXNLZXlzWzBdO1xuICAgICAgICAgICAgICAgIGRhdHVtID0gXy5tYXAoZGF0YVNldCwgKGRhdGFPYmosIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdChkYXRhU2V0W2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRmluZGVyKGRhdGFTZXRbaW5kZXhdLCB4QXhpc0tleSwgeUF4aXNLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGF0dW0gPSB0aGlzLmdldFZhbGlkRGF0YShkYXR1bSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVzID0gdGhpcy5zaGFwZSA9PT0gJ3JhbmRvbScgPyBhbGxTaGFwZXMgOiB0aGlzLnNoYXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCgoeUF4aXNLZXksIHNlcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSAgXy5tYXAoZGF0YVNldCwgKGRhdGFPYmosIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QoZGF0YVNldFtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGaW5kZXIoZGF0YVNldFtpbmRleF0sIHhBeGlzS2V5LCB5QXhpc0tleSwgaW5kZXgsIChfLmlzQXJyYXkoc2hhcGVzKSAmJiBzaGFwZXNbc2VyaWVzXSkgfHwgdGhpcy5zaGFwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmdldFZhbGlkRGF0YSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICBkYXR1bS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBwcmV0dGlmeUxhYmVscyh5QXhpc0tleSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdHVtO1xuICAgIH1cblxuICAgIHNldENoYXJ0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENoYXJ0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NlZERhdGE7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0aW5nIHRoZSBncm91cGVkIGRhdGEgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiBvZiBvcmRlcmJ5LCB4ICYgeSBheGlzXG4gICAgZ2V0VmlzdWFsbHlHcm91cGVkRGF0YShxdWVyeVJlc3BvbnNlLCBncm91cGluZ0NvbHVtbikge1xuICAgICAgICBsZXQgZ3JvdXBEYXRhOiBhbnkgPSB7fSxcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIG9yZGVyQnlEZXRhaWxzLFxuICAgICAgICAgICAgbWF4TGVuZ3RoO1xuICAgICAgICBjb25zdCBjaGFydERhdGE6IGFueSA9IFtdLFxuICAgICAgICAgICAgX2lzQXJlYUNoYXJ0ID0gaXNBcmVhQ2hhcnQodGhpcy50eXBlKSxcbiAgICAgICAgICAgIHlBeGlzS2V5ID0gXy5maXJzdChfLnNwbGl0KHRoaXMueWF4aXNkYXRha2V5LCAnLCcpKTtcbiAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IFtdO1xuICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5vcmRlckJ5KHF1ZXJ5UmVzcG9uc2UsIF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpKTtcbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgb3JkZXJCeURldGFpbHMgPSBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0KHRoaXMub3JkZXJieSk7XG4gICAgICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5vcmRlckJ5KHF1ZXJ5UmVzcG9uc2UsIG9yZGVyQnlEZXRhaWxzLmNvbHVtbnMsIG9yZGVyQnlEZXRhaWxzLm9yZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8uZ3JvdXBCeShxdWVyeVJlc3BvbnNlLCBncm91cGluZ0NvbHVtbik7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYXJlYSBjaGFydCBhbGwgdGhlIHNlcmllcyBkYXRhIHNob3VsZCBiZSBvZiBzYW1lIGxlbmd0aFxuICAgICAgICBpZiAoX2lzQXJlYUNoYXJ0KSB7XG4gICAgICAgICAgICBtYXhMZW5ndGggPSBfLm1heChfLm1hcChxdWVyeVJlc3BvbnNlLCBvYmogPT4gb2JqLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaChxdWVyeVJlc3BvbnNlLCAodmFsdWVzLCBncm91cEtleSkgPT4ge1xuICAgICAgICAgICAgZ3JvdXBWYWx1ZXMgPSBpc0FyZWFDaGFydCA/IF8uZmlsbChuZXcgQXJyYXkobWF4TGVuZ3RoKSwgWzAsIDBdKSA6IFtdO1xuICAgICAgICAgICAgXy5mb3JFYWNoUmlnaHQodmFsdWVzLCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZ3JvdXBWYWx1ZXNbaW5kZXhdID0gdGhpcy52YWx1ZUZpbmRlcih2YWx1ZSwgdGhpcy54YXhpc2RhdGFrZXksIHlBeGlzS2V5LCBpbmRleCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3VwRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBrZXkgOiBncm91cEtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgOiBncm91cFZhbHVlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNoYXJ0RGF0YS5wdXNoKGdyb3VwRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2hhcnREYXRhO1xuICAgIH1cblxuICAgIC8qRGVjaWRlcyB3aGV0aGVyIHRoZSBkYXRhIHNob3VsZCBiZSB2aXN1YWxseSBncm91cGVkIG9yIG5vdFxuICAgICAgICAgICAgVmlzdWFsbHkgZ3JvdXBlZCB3aGVuIGEgZGlmZmVyZW50IGNvbHVtbiBpcyBjaG9vc2VuIGluIHRoZSBncm91cCBieSBvdGhlciB0aGFuIHggYW5kIHkgYXhpcyBhbmQgYWdncmVnYXRpb24gaXMgbm90IGNob3NlbiovXG4gICAgZ2V0R3JvdXBpbmdEZXRhaWxzKCkge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgIXRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgbGV0IGlzVmlzdWFsbHlHcm91cGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW4sXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IGFueSA9IFtdLFxuICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBncm91cGJ5Q29sdW1ucyA9IHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUgPyB0aGlzLmdyb3VwYnkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBieUNvbHVtbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8qR2V0dGluZyB0aGUgZ3JvdXAgYnkgY29sdW1uIHdoaWNoIGlzIG5vdCBzZWxlY3RlZCBlaXRoZXIgaW4geCBvciB5IGF4aXMqL1xuICAgICAgICAgICAgICAgIGdyb3VwYnlDb2x1bW5zLmV2ZXJ5KChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnhheGlzZGF0YWtleSAhPT0gY29sdW1uICYmICQuaW5BcnJheShjb2x1bW4sIHlBeGlzS2V5cykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYnlDb2x1bW5zLnNwbGljZShncm91cGluZ0NvbHVtbkluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3RpbmcgdGhlIGdyb3VwYnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIGlmICh2aXN1YWxHcm91cGluZ0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godmlzdWFsR3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncm91cGJ5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IF8uY29uY2F0KGNvbHVtbnMsIGdyb3VwYnlDb2x1bW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB4IGFuZCB5IGF4aXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhZ2dyZWdhdGlvbiBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIGdyb3VwYnlcbiAgICAgICAgICAgIGlmICh0aGlzLnhheGlzZGF0YWtleSAhPT0gdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0aGlzLnhheGlzZGF0YWtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfLmZvckVhY2goeUF4aXNLZXlzLCBrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IHRoaXMuYWdncmVnYXRpb25jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb24gPSAgY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgaXNWaXN1YWxseUdyb3VwZWQgZmxhZyBpbiBzY29wZSBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLmlzVmlzdWFsbHlHcm91cGVkID0gaXNWaXN1YWxseUdyb3VwZWQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZ3JvdXBpbmdFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkOiBpc1Zpc3VhbGx5R3JvdXBlZCxcbiAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbjogdmlzdWFsR3JvdXBpbmdDb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICcnLFxuICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW46ICcnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBhZ2dyZWdhdGVkIGRhdGEgYWZ0ZXIgYXBwbHlpbmcgdGhlIGFnZ3JlZ2F0aW9uICYgZ3JvdXAgYnkgb3Igb3JkZXIgYnkgb3BlcmF0aW9ucy5cbiAgICBnZXRBZ2dyZWdhdGVkRGF0YShjYWxsYmFjaykge1xuICAgICAgICBjb25zdCB2YXJpYWJsZTogYW55ID0gdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgbGV0IHNvcnRFeHByLFxuICAgICAgICAgICAgY29sdW1uczogYW55ID0gW10sXG4gICAgICAgICAgICBjb2xBbGlhcyxcbiAgICAgICAgICAgIG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAgICAgZ3JvdXBCeUZpZWxkczogYW55ID0gW107XG5cbiAgICAgICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgZ3JvdXBCeUZpZWxkcyA9IF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIHNvcnRFeHByID0gXy5yZXBsYWNlKHRoaXMub3JkZXJieSwgLzovZywgJyAnKTtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBfLnVuaXEoXy5jb25jYXQoY29sdW1ucywgZ3JvdXBCeUZpZWxkcywgW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dKSk7XG4gICAgICAgICAgICBvcmRlckJ5Q29sdW1ucyA9IGdldExvZGFzaE9yZGVyQnlGb3JtYXQodGhpcy5vcmRlcmJ5KS5jb2x1bW5zO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG9yZGVyYnkgY29sdW1uIGlzIGNob3NlbiBlaXRoZXIgaW4gZ3JvdXBieSBvciBvcmRlcmJ5IHRoZW4gcmVwbGFjZSAuIHdpdGggJCBmb3IgdGhhdCBjb2x1bW5cbiAgICAgICAgICAgIF8uZm9yRWFjaChfLmludGVyc2VjdGlvbihjb2x1bW5zLCBvcmRlckJ5Q29sdW1ucyksIGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgY29sQWxpYXMgPSBnZXRWYWxpZEFsaWFzTmFtZShjb2wpO1xuICAgICAgICAgICAgICAgIHNvcnRFeHByID0gXy5yZXBsYWNlKHNvcnRFeHByLCBjb2wsIGNvbEFsaWFzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIC8vIFNlbmQgdGhlIGdyb3VwIGJ5IGluIHRoZSBhZ2dyZWdhdGlvbnMgYXBpIG9ubHkgaWYgYWdncmVnYXRpb24gaXMgYWxzbyBjaG9zZW5cbiAgICAgICAgICAgIGRhdGEuZ3JvdXBCeUZpZWxkcyA9IGdyb3VwQnlGaWVsZHM7XG4gICAgICAgICAgICBkYXRhLmFnZ3JlZ2F0aW9ucyA9ICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICBhZ2dyZWdhdGlvbkZuTWFwW3RoaXMuYWdncmVnYXRpb25dLFxuICAgICAgICAgICAgICAgICAgICAnYWxpYXMnOiBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICAgIHZhcmlhYmxlLmV4ZWN1dGUoJ2dldEFnZ3JlZ2F0ZWREYXRhJywge1xuICAgICAgICAgICAgJ2FnZ3JlZ2F0aW9ucycgOiBkYXRhLFxuICAgICAgICAgICAgJ3NvcnQnICAgICAgICAgOiBzb3J0RXhwclxuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gYSBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBjaGFydC5cbiAgICAgICAgICAgIGNvbnN0IGNoYXJ0RGF0YTogYW55ID0gW10sXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25BbGlhczogYW55ID0gZ2V0VmFsaWRBbGlhc05hbWUodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbiksXG4gICAgICAgICAgICAgICAgeEF4aXNBbGlhc0tleSA9IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMueGF4aXNkYXRha2V5KSxcbiAgICAgICAgICAgICAgICB5QXhpc0FsaWFzS2V5cyA9IFtdO1xuXG4gICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCh5QXhpc0tleSA9PiB5QXhpc0FsaWFzS2V5cy5wdXNoKGdldFZhbGlkQWxpYXNOYW1lKHlBeGlzS2V5KSkpO1xuXG4gICAgICAgICAgICBfLmZvckVhY2gocmVzcG9uc2UuYm9keS5jb250ZW50LCAocmVzcG9uc2VDb250ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSByZXNwb25zZSBpbiB0aGUgY2hhcnREYXRhIGJhc2VkIG9uICdhZ2dyZWdhdGlvbkNvbHVtbicsICd4QXhpc0RhdGFLZXknICYgJ3lBeGlzRGF0YUtleScuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0gPSByZXNwb25zZUNvbnRlbnRbYWdncmVnYXRpb25BbGlhc107XG4gICAgICAgICAgICAgICAgICAgIG9ialt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgYWdncmVnYXRpb25BbGlhcykgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYmpbdGhpcy54YXhpc2RhdGFrZXldID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCB4QXhpc0FsaWFzS2V5KSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHRoaXMueGF4aXNkYXRha2V5KTtcblxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKCh5QXhpc0tleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3lBeGlzS2V5XSA9IHJlc3BvbnNlQ29udGVudFt5QXhpc0FsaWFzS2V5c1tpbmRleF1dO1xuICAgICAgICAgICAgICAgICAgICBvYmpbeUF4aXNLZXldID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCB5QXhpc0FsaWFzS2V5c1tpbmRleF0pIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeUF4aXNLZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcblxuICAgICAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyTXNnKCdNRVNTQUdFX0VSUk9SX0ZFVENIX0RBVEEnKTtcbiAgICAgICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBtYXhpbXVtIHdpZHRoIGZvciB0aGUgbGFiZWxzIHRoYXQgY2FuIGJlIGRpc3BsYXllZC5UaGlzIHdpbGwgaGVscGZ1bCB3aGVuIHRoZXkgYXJlIG92ZXJsYXBwaW5nXG4gICAgc2V0TGFiZWxzTWF4V2lkdGgoKSB7XG4gICAgICAgIGxldCB4VGlja3MsXG4gICAgICAgICAgICB0aWNrV2lkdGgsXG4gICAgICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgICAgICB4RGlzdCxcbiAgICAgICAgICAgIHlEaXN0LFxuICAgICAgICAgICAgdG90YWxIZWlnaHQsXG4gICAgICAgICAgICBtYXhOb0xhYmVscyxcbiAgICAgICAgICAgIG50aEVsZW1lbnQsXG4gICAgICAgICAgICBsYWJlbHNBdmFpbGFibGVXaWR0aCxcbiAgICAgICAgICAgIGJhcldyYXBwZXIsXG4gICAgICAgICAgICB5QXhpc1dyYXBwZXIsXG4gICAgICAgICAgICBzdmdXcmFwcGVyO1xuICAgICAgICBjb25zdCBmb250c2l6ZSA9IHBhcnNlSW50KHRoaXMuZm9udHNpemUsIDEwKSB8fCAxMixcbiAgICAgICAgICAgIGlzQmFyY2hhcnQgPSBpc0JhckNoYXJ0KHRoaXMudHlwZSk7XG4gICAgICAgIC8vIGdldHRpbmcgdGhlIHggdGlja3MgaW4gdGhlIGNoYXJ0XG4gICAgICAgIHhUaWNrcyA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5maW5kKCdnLm52LXgnKS5maW5kKCdnLnRpY2snKS5maW5kKCd0ZXh0Jyk7XG5cbiAgICAgICAgLy8gZ2V0dGluZyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIHZpc2libGUgdGlja3MgYXNzb2NpYXRlZCB3aXRoIHZpc2libGUgdGV4dFxuICAgICAgICB4VGlja3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB4VGljayA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgeFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aWNrRGlzdDtcbiAgICAgICAgICAgIGlmICh4VGljay50ZXh0KCkgJiYgeFRpY2suY3NzKCdvcGFjaXR5JykgPT09ICcxJykge1xuICAgICAgICAgICAgICAgIHhUcmFuc2Zvcm0gPSB4VGljay5wYXJlbnQoKS5hdHRyKCd0cmFuc2Zvcm0nKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHhEaXN0ID0gcGFyc2VGbG9hdCh4VHJhbnNmb3JtWzBdLnN1YnN0cigxMCkpO1xuICAgICAgICAgICAgICAgIHlEaXN0ID0gcGFyc2VGbG9hdCh4VHJhbnNmb3JtWzFdIHx8ICcwJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0JhcmNoYXJ0ICYmIHhEaXN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRGlzdCA9IHhEaXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeURpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tEaXN0ID0geURpc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aWNrV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja1dpZHRoID0gdGlja0Rpc3QgLSB0aWNrV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGlja1dpZHRoID0gdGlja0Rpc3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYmFyIGNoYXJ0IGdldHRpbmcgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGxhYmVscyB0byBiZSBkaXNwbGF5ZWRcbiAgICAgICAgaWYgKGlzQmFyY2hhcnQpIHtcbiAgICAgICAgICAgIGJhcldyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnPmcubnYtd3JhcD5nPmcubnYtYmFyc1dyYXAnKVswXTtcbiAgICAgICAgICAgIHlBeGlzV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmc+Zy5udi13cmFwPmc+Zy5udi15JylbMF07XG4gICAgICAgICAgICBzdmdXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpWzBdO1xuICAgICAgICAgICAgLy8gZ2V0dGluZyB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBjaGFydFxuICAgICAgICAgICAgdG90YWxIZWlnaHQgPSBiYXJXcmFwcGVyID8gYmFyV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiAwO1xuICAgICAgICAgICAgLy8gZ2V0dGluZyB0aGUgbGFiZWxzIGF2YWlsYWJsZSBzcGFjZVxuICAgICAgICAgICAgbGFiZWxzQXZhaWxhYmxlV2lkdGggPSB5QXhpc1dyYXBwZXIgPyBzdmdXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0geUF4aXNXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIDogc3ZnV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG1heCBsZW5ndGggZm9yIHRoZSBsYWJlbFxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5yb3VuZChsYWJlbHNBdmFpbGFibGVXaWR0aCAvIGZvbnRzaXplKTtcbiAgICAgICAgICAgIC8vIGlmIGF2YWlsYWJsZSBzcGFjZSBmb3IgZWFjaCBsYWJlbCBpcyBsZXNzIHRoYW4gdGhlIGZvbnQtc2l6ZVxuICAgICAgICAgICAgLy8gdGhlbiBsaW1pdGluZyB0aGUgbGFiZWxzIHRvIGJlIGRpc3BsYXllZFxuICAgICAgICAgICAgaWYgKHRpY2tXaWR0aCA8IGZvbnRzaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtYXhpbXVtIG5vIG9mIGxhYmVscyB0byBiZSBmaXR0ZWRcbiAgICAgICAgICAgICAgICBtYXhOb0xhYmVscyA9IHRvdGFsSGVpZ2h0IC8gZm9udHNpemU7XG4gICAgICAgICAgICAgICAgLy8gc2hvd2luZyBvbmx5IHRoZSBudGggZWxlbWVudFxuICAgICAgICAgICAgICAgIG50aEVsZW1lbnQgPSBNYXRoLmNlaWwodGhpcy5jaGFydERhdGEubGVuZ3RoIC8gbWF4Tm9MYWJlbHMpO1xuICAgICAgICAgICAgICAgIC8vIHNob3dpbmcgdXAgb25seSBzb21lIGxhYmVsc1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLnNlbGVjdCgnZy5udi14Jykuc2VsZWN0QWxsKCdnLnRpY2snKS5zZWxlY3QoJ3RleHQnKS5lYWNoKGZ1bmN0aW9uICh0ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhpZGluZyBldmVyeSBub24gbnRoIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSBudGhFbGVtZW50ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cignb3BhY2l0eScsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBtYXggbGVuZ3RoIGZvciB0aGUgbGFiZWxcbiAgICAgICAgICAgIG1heExlbmd0aCA9IE1hdGgucm91bmQodGlja1dpZHRoIC8gZm9udHNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF4TGVuZ3RoIHNob3VsZCBhbHdheXMgYmUgYSBwb3NpdGl2ZSBudW1iZXJcbiAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5hYnMobWF4TGVuZ3RoKTtcbiAgICAgICAgLy8gVmFsaWRhdGluZyBpZiBldmVyeSBsYWJlbCBleGNlZWRzIHRoZSBtYXggbGVuZ3RoIGFuZCBpZiBzbyBsaW1pdGluZyB0aGUgbGVuZ3RoIGFuZCBhZGRpbmcgZWxsaXBzaXNcbiAgICAgICAgeFRpY2tzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dENvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHRoaXMudGV4dENvbnRlbnQuc3Vic3RyKDAsIG1heExlbmd0aCkgKyAnLi4uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgY29sdW1ucyBvZiB0aGF0IGNhbiBiZSBjaG9vc2VuIGluIHRoZSB4IGFuZCB5IGF4aXNcbiAgICBnZXREZWZhdWx0Q29sdW1ucygpIHtcbiAgICAgICAgbGV0IHR5cGUsXG4gICAgICAgICAgICBzdHJpbmdDb2x1bW4sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdGVtcDtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXSxcbiAgICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJPUEVSVElFU19NQVApIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aCAmJiBkZWZhdWx0Q29sdW1ucy5sZW5ndGggPD0gMjsgaSArPSAxKSB7XG4gICAgICAgICAgICB0eXBlID0gY29sdW1uc1tpXS50eXBlO1xuICAgICAgICAgICAgaWYgKCFjb2x1bW5zW2ldLmlzUmVsYXRlZCAmJiAoaXNOdW1iZXJUeXBlKHR5cGUpKSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zLnB1c2goY29sdW1uc1tpXS5maWVsZE5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiAhc3RyaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nQ29sdW1uID0gY29sdW1uc1tpXS5maWVsZE5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgdGhhbiBidWJibGUgY2hhcnQgeDogc3RyaW5nIHR5cGUgeTogbnVtYmVyIHR5cGVcbiAgICAgICAgLy8gQnViYmxlIGNoYXJ0IHg6IG51bWJlciB0eXBlIHk6IG51bWJlciB0eXBlXG4gICAgICAgIGlmIChzdHJpbmdDb2x1bW4gJiYgZGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMCAmJiAhaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0ZW1wID0gZGVmYXVsdENvbHVtbnNbMF07XG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uc1swXSA9IHN0cmluZ0NvbHVtbjtcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zWzFdID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgICB9XG5cbiAgICAvLyBDYWxsIHVzZXIgZGVmaW5lZCBqYXZhc2NyaXB0IGZ1bmN0aW9uIHdoZW4gdXNlciBsaW5rcyBpdCB0byBjbGljayBldmVudCBvZiB0aGUgd2lkZ2V0LlxuICAgIGF0dGFjaENsaWNrRXZlbnQoKSB7XG4gICAgICAgIGxldCBkYXRhT2JqO1xuICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5zZWxlY3RBbGwoY2hhcnREYXRhUG9pbnRYcGF0aFt0aGlzLnR5cGVdKS5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnYWxsJylcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb2x1bW4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdCYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGllJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRG9udXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VtdWxhdGl2ZSBMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YVswXS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCdWJibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5wb2ludFs0XS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGRhdGFPYmo7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7JGV2ZW50OiBkMy5ldmVudCwgc2VsZWN0ZWRDaGFydEl0ZW06IGRhdGEsIHNlbGVjdGVkSXRlbTogdGhpcy5zZWxlY3RlZGl0ZW19KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyogIFJldHVybnMgWSBTY2FsZSBtaW4gdmFsdWVcbiAgICAgICAgICAgRXg6IElucHV0ICAgOiA4Ljk3XG4gICAgICAgICAgICAgICBPdXRwdXQgIDogOC44N1xuXG4gICAgICAgICAgICAgICBJbnB1dCAgIDogOFxuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDdcbiAgICAgICAqL1xuXG4gICAgcG9zdFBsb3RQcm9jZXNzKGNoYXJ0KSB7XG4gICAgICAgIGxldCBjaGFydFN2ZyxcbiAgICAgICAgICAgIHBpZUxhYmVscyxcbiAgICAgICAgICAgIHBpZUdyb3VwcyxcbiAgICAgICAgICAgIGFuZ2xlQXJyYXk7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuXG4gICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuXG4gICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zaG93bGFiZWxzb3V0c2lkZSkge1xuICAgICAgICAgICAgLyoqIE52ZDMgaGFzIGEgaXNzdWUgaW4gcm90YXRpbmcgdGV4dC4gU28gd2Ugd2lsbCB1c2UgdGhpcyBhcyBhIHRlbXAgZml4LlxuICAgICAgICAgICAgICogSWYgdGhlIGlzc3VlIGlzIHJlc29sdmVkIHRoZXJlLCB3ZSBjYW4gcmVtb3ZlIHRoaXMuKi9cbiAgICAgICAgICAgIC8qIElmIGl0IGlzIGEgZG9udXQgY2hhcnQsIHRoZW4gcm90YXRlIHRoZSB0ZXh0IGFuZCBwb3NpdGlvbiB0aGVtKi9cbiAgICAgICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG4gICAgICAgICAgICBwaWVMYWJlbHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi1waWVMYWJlbHMnKS5zZWxlY3RBbGwoJy5udi1sYWJlbCcpO1xuICAgICAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllJykuc2VsZWN0QWxsKCcubnYtc2xpY2UnKTtcbiAgICAgICAgICAgIGFuZ2xlQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGlmIChwaWVHcm91cHMgJiYgcGllR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBpZUdyb3Vwcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUFycmF5LnB1c2goYW5nbGUoZCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwaWVMYWJlbHMuZWFjaChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJChncm91cFswXVswXSkuZmluZCgndGV4dCcpLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoJyArIGFuZ2xlQXJyYXlbaV0gKyAnKScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJlcGFyZSB0ZXh0IHN0eWxlIHByb3BzIG9iamVjdCBhbmQgc2V0XG4gICAgICAgIF8uZm9yRWFjaChzdHlsZVByb3BzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZU9ialt2YWx1ZV0gPSB0aGlzLmZvbnRzaXplICsgdGhpcy5mb250dW5pdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogYWxsb3cgd2luZG93LXJlc2l6ZSBmdW5jdGlvbmFsaXR5LCBmb3Igb25seS1ydW4gbW9kZSBhc1xuICAgICAgICAgKiB1cGRhdGluZyBjaGFydCBpcyBiZWluZyBoYW5kbGVkIGJ5IHdhdGNoZXJzIG9mIGhlaWdodCAmIHdpZHRoIGluIHN0dWRpby1tb2RlXG4gICAgICAgICAqICovXG4gICAgICAgIHRyaWdnZXJGbih0aGlzLl9yZXNpemVGbiAmJiB0aGlzLl9yZXNpemVGbi5jbGVhcik7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUZuID0gbnYudXRpbHMud2luZG93UmVzaXplKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYWJlbHNNYXhXaWR0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZ2V0IHBhcmVudHMgb2YgYWNjb3JkaW9uIHR5cGVcbiAgICAgICAgICAgICAgICAvKmxldCBwYXJlbnQgPSBlbGVtZW50LmNsb3Nlc3QoJy5hcHAtYWNjb3JkaW9uLXBhbmVsLCAudGFiLXBhbmUnKS5pc29sYXRlU2NvcGUoKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBwcmVwYXJlcyBhbmQgY29uZmlndXJlcyB0aGUgY2hhcnQgcHJvcGVydGllc1xuICAgIGNvbmZpZ3VyZUNoYXJ0KCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBkYXRhIG9ubHkgaW4gY2FzZSBvZiBwaWUgY2hhcnQgd2l0aCBkZWZhdWx0IGRhdGFcbiAgICAgICAgLy8gUmVhc29uIDogd2hlbiBtdWx0aXBsZSBwaWUgY2hhcnRzIGFyZSBib3VuZCB0byBzYW1lIGRhdGEsIGZpcnN0IGNoYXJ0IHRoZW1lIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgY2hhcnRzXG4gICAgICAgIGxldCB4RG9tYWluVmFsdWVzO1xuICAgICAgICBsZXQgeURvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IGNoYXJ0O1xuICAgICAgICBsZXQgYmVmb3JlUmVuZGVyVmFsO1xuICAgICAgICBjb25zdCB5Zm9ybWF0T3B0aW9uczogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NlZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzQXhpc0RvbWFpblZhbGlkKHRoaXMsICd4JykpIHtcbiAgICAgICAgICAgICAgICB4RG9tYWluVmFsdWVzID0gdGhpcy5iaW5kZGF0YXNldCA/IHRoaXMuZ2V0WE1pbk1heFZhbHVlcyh0aGlzLl9wcm9jZXNzZWREYXRhWzBdKSA6IHsgJ21pbicgOiB7J3gnOiAxfSwgICdtYXgnIDogeyd4JyA6IDV9fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneScpKSB7XG4gICAgICAgICAgICAgICAgeURvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFlNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YSkgOiB7ICdtaW4nIDogeyd5JyA6IDF9LCAnbWF4JyA6IHsneScgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkgJiYgKCF0aGlzLmJpbmRkYXRhc2V0IHx8ICF0aGlzLnNjb3BlZGF0YXNldCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5zY29wZWRhdGFzZXQgfHwgdGhpcy5fcHJvY2Vzc2VkRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIGNoYXJ0IG9iamVjdFxuICAgICAgICBjaGFydCA9IGluaXRDaGFydCh0aGlzLCB4RG9tYWluVmFsdWVzLCB5RG9tYWluVmFsdWVzLCBudWxsLCAhdGhpcy5iaW5kZGF0YXNldCk7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheSh0aGlzLl9wcm9jZXNzZWREYXRhKSkge1xuICAgICAgICAgICAgLy8gV01TLTE5NDk5OiAgVG8gcmVtb3ZlIGNoYXJ0IFgtYXhpcyBvbGQgdGlja3Mgd2hlbiBjaGFydCBkYXRhIGxvYWRlZCBkeW5hbWljYWxseS5cbiAgICAgICAgICAgIGNvbnN0IG9sZGdUaWNrcyA9ICAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJyk7XG4gICAgICAgICAgICBpZiAob2xkZ1RpY2tzICYmIG9sZGdUaWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvbGRnVGlja3MucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVSZW5kZXJWYWwgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbmRlcicsIHsgJ2NoYXJ0SW5zdGFuY2UnIDogY2hhcnR9KTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVSZW5kZXJWYWwpIHtcbiAgICAgICAgICAgICAgICBjaGFydCA9IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIHRoZSBkZWZhdWx0IG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylcbiAgICAgICAgICAgICAgICAuZGF0dW0odGhpcy5fcHJvY2Vzc2VkRGF0YSlcbiAgICAgICAgICAgICAgICAuY2FsbCh0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMucG9zdFBsb3RQcm9jZXNzKGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBjaGFydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNldCBvZiB0aGUgcHJvcGVydGllcyBzZXQgdG8gaXRcbiAgICBwbG90Q2hhcnQoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICAvLyBjYWxsIHVzZXItdHJhbnNmb3JtZWQgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSAodGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCd0cmFuc2Zvcm0nKSkgfHwgdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXIgYnkgZGF0YSBvbmx5IGluIHJ1biBtb2RlLiBUaGUgb3JkZXIgYnkgYXBwbGllcyBmb3IgYWxsIHRoZSBjaGFydHMgb3RoZXIgdGhhbiBwaWUgYW5kIGRvbnV0IGNoYXJ0c1xuICAgICAgICBpZiAodGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiAhaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLmNoYXJ0RGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLnByb2Nlc3NDaGFydERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVja2luZyB0aGUgcGFyZW50IGNvbnRhaW5lciBiZWZvcmUgcGxvdHRpbmcgdGhlIGNoYXJ0XG4gICAgICAgIGlmICghZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGVhckNhbnZhcykge1xuICAgICAgICAgICAgLy8gZW1wdHkgc3ZnIHRvIGFkZC1uZXcgY2hhcnRcbiAgICAgICAgICAgIGVsZW1lbnQuZmluZCgnc3ZnJykucmVwbGFjZVdpdGgoJzxzdmc+PC9zdmc+Jyk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGludmFsaWQgYXhpcyBzaG93IG5vIGRhdGEgYXZhaWxhYmxlIG1lc3NhZ2VcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBeGlzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBudi5hZGRHcmFwaCgoKSA9PiB0aGlzLmNvbmZpZ3VyZUNoYXJ0KCksICAoKSA9PiB7XG4gICAgICAgICAgICAvKkJ1YmJsZSBjaGFydCBoYXMgYW4gdGltZSBvdXQgZGVsYXkgb2YgMzAwbXMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24gZHVlIHRvIHdoaWNoIHdlXG4gICAgICAgICAgICAqIHdvbid0IGJlIGdldHRpbmcgcmVxdWlyZWQgZGF0YSBwb2ludHMgb24gYXR0YWNoaW5nIGV2ZW50c1xuICAgICAgICAgICAgKiBoZW5jZSBkZWxheWluZyBpdCA2MDBtcyovXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRPRE86IE5lZWQgd2F5IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGRhdGFzb3VyY2UgaXMgYSBsaXZlIHNvdXJjZVxuICAgIGdldCBpc0xpdmVWYXJpYWJsZSgpIHtcbiAgICAgICAgLy8gc2V0dGluZyB0aGUgZmxhZyBmb3IgdGhlIGxpdmUgdmFyaWFibGUgaW4gdGhlIHNjb3BlIGZvciB0aGUgY2hlY2tzXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlT2JqID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICByZXR1cm4gdmFyaWFibGVPYmogJiYgdmFyaWFibGVPYmouY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnO1xuICAgIH1cblxuICAgIHBsb3RDaGFydFByb3h5KCkge1xuICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVja2luZyBpZiB4IGFuZCB5IGF4aXMgYXJlIGNob3NlblxuICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCBncm91cGluZ0RldGFpbHMgPSB0aGlzLmdldEdyb3VwaW5nRGV0YWlscygpO1xuICAgICAgICAvLyBJZiBhZ2dyZWdhdGlvbi9ncm91cCBieS9vcmRlciBieSBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBzZXQsIHRoZW4gZ2V0IHRoZSBhZ2dyZWdhdGVkIGRhdGEgYW5kIHBsb3QgdGhlIHJlc3VsdCBpbiB0aGUgY2hhcnQuXG4gICAgICAgIC8vIFRPRE86IGRhdGFzb3VyY2UgZm9yIGxpdmUgdmFyaWFibGUgZGV0ZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgKHRoaXMuZmlsdGVyRmllbGRzIHx8IHRoaXMuaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGVkRGF0YSgoKSA9PiB0aGlzLnBsb3RDaGFydCgpKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gRWxzZSwgc2ltcGx5IHBsb3QgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHJlc2V0dGluZyB0aGUgYWdncmVnYXRlZCBkYXRhIHRvIHRoZSBub3JtYWwgZGF0YXNldCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgZ3JvdXBpbmdEZXRhaWxzLmlzVmlzdWFsbHlHcm91cGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5nZXRWaXN1YWxseUdyb3VwZWREYXRhKHRoaXMuY2hhcnREYXRhLCBncm91cGluZ0RldGFpbHMudmlzdWFsR3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbG90Q2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgeCBhbmQgeSBheGlzIG9wdGlvbnNcbiAgICBzZXREZWZhdWx0QXhpc09wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucygpO1xuICAgICAgICAvLyBJZiB3ZSBnZXQgdGhlIHZhbGlkIGRlZmF1bHQgY29sdW1ucyB0aGVuIGFzc2lnbiB0aGVtIGFzIHRoZSB4IGFuZCB5IGF4aXNcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBzZXJ2aWNlIHZhcmlhYmxlIHdlIG1heSBub3QgZ2V0IHRoZSB2YWxpZCBjb2x1bW5zIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgdGhlIGRhdGF0eXBlc1xuICAgICAgICB0aGlzLnhheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzBdIHx8IG51bGw7XG4gICAgICAgIHRoaXMueWF4aXNkYXRha2V5ID0gZGVmYXVsdENvbHVtbnNbMV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXRvbWl6ZWRPcHRpb25zKHByb3AsIGZpZWxkcykge1xuICAgICAgICBjb25zdCBncm91cEJ5Q29sdW1ucyA9IF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpLFxuICAgICAgICAgICAgYWdnQ29sdW1ucyA9IF8uc3BsaXQodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbiwgJywnKTtcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5heGlzb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3T3B0aW9ucztcbiAgICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgICAgICBjYXNlICd4YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGdyb3VwYnkgd2lsbCBiZSBwb3B1bGF0ZWQgaW4geCBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IGdyb3VwQnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3lheGlzZGF0YWtleSc6XG4gICAgICAgICAgICAgICAgLy8gSWYgYWdncmVnYXRpb24gYnkgZW5hYmxlZCwgY29sdW1ucyBjaG9zZW4gaW4gYWdncmVnYXRpb24gd2lsbCBiZSBwb3B1bGF0ZWQgaW4geSBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBhZ2dDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxpdmUgdmFyaWFibGUgcG9wdWxhdGluZyBvbmx5IG51bWVyaWMgY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcbiAgICAgICAgICAgICAgICAvLyBGaWx0ZXJpbmcgb25seSBub24gcHJpbWFyeSBrZXkgY29sdW1uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgJiYgdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRpb25jb2x1bW4nOlxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgJ2FnZ3JlZ2F0aW9uQ29sdW1uJyB0byBzaG93IGFsbCBrZXlzIGluIGNhc2Ugb2YgYWdncmVnYXRpb24gZnVuY3Rpb24gaXMgY291bnQgb3IgdG8gbnVtZXJpYyBrZXlzIGluIGFsbCBvdGhlciBjYXNlcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcmJ5JzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBfLnVuaXEoXy5jb25jYXQoZ3JvdXBCeUNvbHVtbnMsIGFnZ0NvbHVtbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdidWJibGVzaXplJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1lcmljQ29sdW1ucyAmJiB0aGlzLm51bWVyaWNDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T3B0aW9ucyB8fCBmaWVsZHMgfHwgdGhpcy5heGlzb3B0aW9ucztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCB0aGVuIGZldGNoaW5nIHRoZSBudW1lcmljIGFuZCBub24gcHJpbWFyeSBjb2x1bW5zIGFtb25nIHRoZW1cbiAgICBzZXROdW1lcmljYW5kTm9uUHJpbWFyeUNvbHVtbnMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zLFxuICAgICAgICAgICAgdHlwZTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllc01hcCA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCk7XG4gICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IFtdO1xuICAgICAgICAvLyBGZXRjaGluZyBhbGwgdGhlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiAhXy5pc0VtcHR5KHByb3BlcnRpZXNNYXApKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gW107IC8vIFRPRE86IGZldGNoUHJvcGVydGllc01hcENvbHVtbnMocHJvcGVydGllc01hcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1ucykge1xuICAgICAgICAgICAgLy8gSXRlcmF0aW5nIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgIF8uZm9yRWFjaChPYmplY3Qua2V5cyhjb2x1bW5zKSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2tleV0udHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIaWRpbmcgb25seSB0YWJsZSdzIHByaW1hcnkga2V5XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNba2V5XS5pc1JlbGF0ZWRQayA9PT0gJ3RydWUnIHx8ICFjb2x1bW5zW2tleV0uaXNQcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnMuc29ydCgpO1xuICAgICAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnMuc29ydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcGxvdCB0aGUgY2hhcnRcbiAgICBoYW5kbGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmVyck1zZyA9ICcnO1xuICAgICAgICAvLyBSZXNldHRpbmcgdGhlIGZsYWcgdG8gZmFsc2Ugd2hlbiB0aGUgYmluZGluZyB3YXMgcmVtb3ZlZFxuICAgICAgICBpZiAoIW5ld1ZhbCAmJiAhdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaXZlVmFyaWFibGVzIGNvbnRhaW4gZGF0YSBpbiAnZGF0YScgcHJvcGVydHknIG9mIHRoZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuaXNMaXZlVmFyaWFibGUgPyBuZXdWYWwgfHwgJycgOiAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnICYmIF8ua2V5cyhuZXdWYWwpLmxlbmd0aCA9PT0gMSkgPyAnJyA6IG5ld1ZhbDtcblxuICAgICAgICAvLyBpZiB0aGUgZGF0YSByZXR1cm5lZCBpcyBhbiBvYmplY3QgbWFrZSBpdCBhbiBhcnJheSBvZiBvYmplY3RcbiAgICAgICAgaWYgKCFfLmlzQXJyYXkodGhpcy5jaGFydERhdGEpICYmIF8uaXNPYmplY3QodGhpcy5jaGFydERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFt0aGlzLmNoYXJ0RGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsICYmIG5ld1ZhbC5maWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gbmV3VmFsLmZpbHRlckZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBsb3RjaGFydCBmb3Igb25seSB2YWxpZCBkYXRhIGFuZCBvbmx5IGFmdGVyIGJvdW5kIHZhcmlhYmxlIHJldHVybnMgZGF0YVxuICAgICAgICBpZiAodGhpcy5jaGFydERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGxvdENoYXJ0UHJveHkgPSBfLmRlYm91bmNlKHRoaXMucGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKSwgMTAwKTtcblxuICAgIC8vIHNldHMgdGhlIGNlbnRlciBsYWJlbCBmb3IgZG9udXQgY2hhcnQgdHlwZVxuICAgIHNldERvbnV0Q2VudGVyTGFiZWwobGFiZWxWYWx1ZSkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsIHBpZUdyb3VwcztcbiAgICAgICAgY2hhcnRTdmcgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKTtcblxuICAgICAgICBwaWVHcm91cHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi13cmFwLm52LXBpZScpLnNlbGVjdCgnLm52LXBpZScpO1xuICAgICAgICBwaWVHcm91cHMudGV4dCgnJyk7XG4gICAgICAgIHBpZUdyb3Vwcy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgJy4zNWVtJylcbiAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ252LXBpZS10aXRsZScpXG4gICAgICAgICAgICAudGV4dChsYWJlbFZhbHVlKVxuICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDN0ZXh0ID0gZDMuc2VsZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGNpcmMgPSBkMy5zZWxlY3QodGhpcy5wYXJlbnRFbGVtZW50KSxcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoID0gTnVtYmVyKGNpcmMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSxcbiAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgcmluZyB3aWR0aCBmcm9tIHRvdGFsIHdpZHRoXG4gICAgICAgICAgICAgICAgYXZhaWxXaWR0aCA9IHRvdGFsV2lkdGggLSAzMCxcbiAgICAgICAgICAgICAgICB0ZXh0V2lkdGggPSB0aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGQzdGV4dC5hdHRyKFwiZGF0YS1zY2FsZVwiLCBhdmFpbFdpZHRoIC8gdGV4dFdpZHRoKTtcbiAgICAgICAgICAgICAgfSkuc3R5bGUoXCJmb250LXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gMTYgaXMgdGhlIGRlZmF1bHQgZm9udCBzaXplIHRvIG11bHRpcGx5IHdpdGggdGhlIHNjYWxlZCB2YWx1ZSBhbmQgMjQgaXMgdGhlIG1heGltdW0gZm9udCBzaXplIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSAxNiAqIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0YS1zY2FsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9udFNpemUgPiAyNCA/IDI0IDogZm9udFNpemUgKyBcInB4XCI7IFxuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWw/KSB7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlbnRlcmxhYmVsJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LnRpdGxlKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RG9udXRDZW50ZXJMYWJlbChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBjaGFuZ2UgaW4gdHlwZSBkZWNpZGluZyB0aGUgZGVmYXVsdCBtYXJnaW5zXG4gICAgICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT09ICdQaWUnIHx8IG9sZFZhbCA9PT0gJ0RvbnV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDc1O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW4gc3R1ZGlvIG1vZGUsIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIGRlcGVuZGVudCBvbiBjaGFydCB0eXBlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gSW4gUnVuTW9kZSwgdGhlIHBsb3RjaGFydCBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBhbGwgcHJvcGVydHkgY2hhbmdlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhhZHZhbmNlRGF0YVByb3BzLCBrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKGRhdGEudmFyaWFibGUsIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGRhdGEuYWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGhpZGVUb29sdGlwKCkge1xuICAgICAgICBkMy5zZWxlY3RBbGwoJy5udnRvb2x0aXAnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZm9udHNpemUnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHVuaXQnOlxuICAgICAgICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICAgICAgY2FzZSAnZm9udGZhbWlseSc6XG4gICAgICAgICAgICBjYXNlICdmb250d2VpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRzdHlsZSc6XG4gICAgICAgICAgICBjYXNlICd0ZXh0ZGVjb3JhdGlvbic6XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbc3R5bGVQcm9wc1trZXldXSA9IChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSA/IHRoaXMuZm9udHNpemUgKyB0aGlzLmZvbnR1bml0IDogbmV3VmFsO1xuICAgICAgICAgICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBhcHA6IEFwcCkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIsIFsnZm9udHNpemUnLCAnZm9udHVuaXQnLCAnY29sb3InLCAnZm9udGZhbWlseScsICdmb250d2VpZ2h0JywgJ2ZvbnRzdHlsZScsICd0ZXh0ZGVjb3JhdGlvbiddKTtcblxuICAgICAgICAvLyBnZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy4kaWQgPSB0aGlzLndpZGdldElkIHx8IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aXRsZSBhdHRyaWJ1dGUgYXMgdGhlIGVsZW1lbnQgb24gaG92ZXIgc2hvd3MgeW91IHRoZSBoaW50IHRocm91Z2gtb3V0IHRoZSBlbGVtZW50XG4gICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcbiAgICAgICAgdGhpcy5jaGFydFJlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKTtcbiAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIHRoaXMuaGFuZGxlTG9hZGluZy5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vIFdpbGwgaGlkZSB0b2xsdGlwIG9mIGEgY2hhcnQgaW4gbW9iaWxlIHdoZW4gdGhlIHVzZXIgc2Nyb2xscy5cbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCdpc2Nyb2xsLXN0YXJ0JywgKCkgPT4ge3RoaXMuaGlkZVRvb2x0aXAoKTt9KSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgLy8gRm9yIG9sZCBwcm9qZWN0c1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydvdXRzaWRlJywgJ2luc2lkZScsICdoaWRlJ10sIHRoaXMuc2hvd2xhYmVscykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVscyAgICAgICAgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzb3V0c2lkZSk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gdGhpcy5zaG93bGFiZWxzID8gKHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPyAnb3V0c2lkZScgOiAnaW5zaWRlJykgOiAnaGlkZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGhlbWUpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlbWUgZm9yIHBpZS9kb251dCBpcyBBenVyZSBhbmQgZm9yIG90aGVyIGl0IGlzIFRlcnJlc3RyaWFsXG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gaXNQaWVUeXBlKHRoaXMudHlwZSkgPyAnQXp1cmUnIDogJ1RlcnJlc3RyaWFsJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3dtQ2hhcnQnICsgdGhpcy4kaWQpO1xuICAgICAgICAvLyBXaGVuIHRoZXJlIGlzIG5vdCB2YWx1ZSBiaW5kaW5nLCB0aGVuIHBsb3QgdGhlIGNoYXJ0IHdpdGggc2FtcGxlIGRhdGFcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0ICYmICF0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzY29wZWRhdGFzZXQnKSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBkZXN0cm95IGFsbCBzdWJzY3JpcHRpb25zIHRvIHByZXZlbnQgbWVtb3J5IGxlYWsuXG4gICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbik9PntcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgcmVkcmF3ID0gdGhpcy5fcGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKTtcbn1cbiJdfQ==
947
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxVQUFVLENBQUM7QUFDdEssT0FBTyxFQUFFLGlCQUFpQixFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEdBQUksTUFBTSxxQkFBcUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJak8sTUFBTSxhQUFhLEdBQUcsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztBQUV2RSxNQUFNLE9BQU8sR0FBRztJQUNSLFFBQVEsRUFBRyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDckMsRUFDRCxJQUFJLEdBQUcsTUFBTSxFQUNiLGdCQUFnQixHQUFHLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7QUFDN0UscURBQXFEO0FBQ3JELG1CQUFtQixHQUFH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QUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFDLEVBQUU7WUFDdkMsWUFBWSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7QUF0L0JNLDhCQUFlLEdBQUcsYUFBYSxFQUFFLENBQUM7O1lBVjVDLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsK3pCQUFxQztnQkFFckMsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztpQkFDckM7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3hDOzs7WUFqRzBELFFBQVE7WUFFMUQsR0FBRzs7O29CQW1KUCxXQUFXLFNBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcCwgRGF0YVNvdXJjZSwgZ2V0Q2xvbmVkT2JqZWN0LCBpc0RhdGFTb3VyY2VFcXVhbCwgaXNFbXB0eU9iamVjdCwgaXNOdW1iZXJUeXBlLCBwcmV0dGlmeUxhYmVscywgcmVtb3ZlQXR0ciwgdHJpZ2dlckZuLCBpc01vYmlsZUFwcCwgbm9vcCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBJUmVkcmF3YWJsZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyLCAgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vY2hhcnQucHJvcHMnO1xuaW1wb3J0IHsgYWxsU2hhcGVzLCBnZXREYXRlTGlzdCwgZ2V0U2FtcGxlRGF0YSwgaW5pdENoYXJ0LCBpc0FyZWFDaGFydCwgaXNBeGlzRG9tYWluVmFsaWQsIGlzQmFyQ2hhcnQsIGlzQnViYmxlQ2hhcnQsIGlzQ2hhcnREYXRhQXJyYXksIGlzQ2hhcnREYXRhSlNPTiwgaXNMaW5lVHlwZUNoYXJ0LCBpc1BpZVR5cGUsIHBvc3RQbG90Q2hhcnRQcm9jZXNzIH0gZnJvbSAnLi9jaGFydC51dGlscyc7XG5cbmRlY2xhcmUgY29uc3QgJCwgXywgZDMsIG52O1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1jaGFydCcsIGhvc3RDbGFzczogJ2FwcC1jaGFydCd9O1xuXG5jb25zdCBvcHRpb25zID0ge1xuICAgICAgICAnQnViYmxlJyA6IFsnYnViYmxlc2l6ZScsICdzaGFwZSddXG4gICAgfSxcbiAgICBOT05FID0gJ25vbmUnLFxuICAgIGFkdmFuY2VEYXRhUHJvcHMgPSBbJ2FnZ3JlZ2F0aW9uJywgJ2FnZ3JlZ2F0aW9uY29sdW1uJywgJ2dyb3VwYnknLCAnb3JkZXJieSddLFxuICAgIC8vIFhQYXRocyB0byBnZXQgYWN0dWFsIGRhdGEgb2YgZGF0YSBwb2ludHMgaW4gY2hhcnRzXG4gICAgY2hhcnREYXRhUG9pbnRYcGF0aCA9IHtcbiAgICAgICAgJ0NvbHVtbicgICAgICAgICA6ICdyZWN0Lm52LWJhcicsXG4gICAgICAgICdCYXInICAgICAgICAgICAgOiAnZy5udi1iYXInLFxuICAgICAgICAnQXJlYScgICAgICAgICAgIDogJy5udi1zdGFja2VkYXJlYSAubnYtcG9pbnQnLFxuICAgICAgICAnQ3VtdWxhdGl2ZSBMaW5lJzogJy5udi1jdW11bGF0aXZlTGluZSAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdMaW5lJyAgICAgICAgICAgOiAnLm52LWxpbmVDaGFydCAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdQaWUnICAgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0RvbnV0JyAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnQnViYmxlJyAgICAgICAgIDogJy5udi1zY2F0dGVyQ2hhcnQgLm52LXBvaW50LXBhdGhzIHBhdGgnXG4gICAgfSxcbiAgICAvLyBhbGwgcHJvcGVydGllcyBvZiB0aGUgY2hhcnRcbiAgICBhbGxPcHRpb25zID0gWydidWJibGVzaXplJywgJ3NoYXBlJ10sXG4gICAgc3R5bGVQcm9wcyA9IHtcbiAgICAgICAgJ2ZvbnR1bml0JyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdmb250c2l6ZScgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnY29sb3InICAgICAgICAgOiAnZmlsbCcsXG4gICAgICAgICdmb250ZmFtaWx5JyAgICA6ICdmb250LWZhbWlseScsXG4gICAgICAgICdmb250d2VpZ2h0JyAgICA6ICdmb250LXdlaWdodCcsXG4gICAgICAgICdmb250c3R5bGUnICAgICA6ICdmb250LXN0eWxlJyxcbiAgICAgICAgJ3RleHRkZWNvcmF0aW9uJzogJ3RleHQtZGVjb3JhdGlvbidcbiAgICB9LFxuICAgIC8vIEdldHRpbmcgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICBhZ2dyZWdhdGlvbkZuTWFwID0ge1xuICAgICAgICAnYXZlcmFnZScgOiAnQVZHJyxcbiAgICAgICAgJ2NvdW50JyAgIDogJ0NPVU5UJyxcbiAgICAgICAgJ21heGltdW0nIDogJ01BWCcsXG4gICAgICAgICdtaW5pbXVtJyA6ICdNSU4nLFxuICAgICAgICAnc3VtJyAgICAgOiAnU1VNJ1xuICAgIH07XG5cbmNvbnN0IGdldEJvb2xlYW5WYWx1ZSA9IHZhbCA9PiB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIHJldHVybnMgb3JkZXJieSBjb2x1bW5zIGFuZCB0aGVpciBvcmRlcnMgaW4gdHdvIHNlcGFyYXRlIGFycmF5c1xuY29uc3QgZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCA9IG9yZGVyYnkgPT4ge1xuICAgIGxldCBjb2x1bW5zO1xuICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5zID0gW10sXG4gICAgICAgIG9yZGVycyA9IFtdO1xuXG4gICAgXy5mb3JFYWNoKF8uc3BsaXQob3JkZXJieSwgJywnKSwgZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICBjb2x1bW5zID0gXy5zcGxpdChjb2wsICc6Jyk7XG4gICAgICAgIG9yZGVyQnlDb2x1bW5zLnB1c2goY29sdW1uc1swXSk7XG4gICAgICAgIG9yZGVycy5wdXNoKGNvbHVtbnNbMV0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICdjb2x1bW5zJyA6IG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAnb3JkZXJzJyAgOiBvcmRlcnNcbiAgICB9O1xufTtcblxuLy8gUmVwbGFjaW5nIHRoZSAnLicgYnkgdGhlICckJyBiZWNhdXNlICcuJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBhbGlhcyBuYW1lc1xuY29uc3QgZ2V0VmFsaWRBbGlhc05hbWUgPSBhbGlhc05hbWUgPT4gYWxpYXNOYW1lID8gYWxpYXNOYW1lLnJlcGxhY2UoL1xcLi9nLCAnJCcpIDogbnVsbDtcblxuLy8gQXBwbHlpbmcgdGhlIGZvbnQgcmVsYXRlZCBzdHlsZXMgZm9yIHRoZSBjaGFydFxuY29uc3Qgc2V0VGV4dFN0eWxlID0gKHByb3BlcnRpZXMsIGlkKSA9PiB7XG4gICAgY29uc3QgY2hhcnR0ZXh0ID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyBpZCArICcgc3ZnJykuc2VsZWN0QWxsKCd0ZXh0Jyk7XG4gICAgY2hhcnR0ZXh0LnN0eWxlKHByb3BlcnRpZXMpO1xufTtcblxuY29uc3QgYW5nbGUgPSBkID0+IHtcbiAgICBjb25zdCBhID0gKGQuc3RhcnRBbmdsZSArIGQuZW5kQW5nbGUpICogOTAgLyBNYXRoLlBJIC0gOTA7XG4gICAgcmV0dXJuIGEgPiA5MCA/IGEgLSAxODAgOiBhO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkaXZbd21DaGFydF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad2F2ZW1ha2VyLmNvbS9udmQzL2J1aWxkL252LmQzLm1pbi5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoYXJ0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJUmVkcmF3YWJsZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHhheGlzZGF0YWtleTtcbiAgICB5YXhpc2RhdGFrZXk7XG4gICAgZ3JvdXBieTtcbiAgICBhZ2dyZWdhdGlvbjtcbiAgICBhZ2dyZWdhdGlvbmNvbHVtbjtcbiAgICBpc1Zpc3VhbGx5R3JvdXBlZDtcbiAgICBvcmRlcmJ5O1xuICAgIGljb25jbGFzcyA9ICcnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBzaG93Q29udGVudExvYWRFcnJvcjtcbiAgICBpbnZhbGlkQ29uZmlnO1xuICAgIGVyck1zZztcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGRhdGFzb3VyY2U6IGFueTtcbiAgICBmb250c2l6ZTogc3RyaW5nO1xuICAgIHNlbGVjdGVkaXRlbTogYW55O1xuICAgIGZvbnR1bml0OiBzdHJpbmc7XG4gICAgb2Zmc2V0dG9wOiBudW1iZXI7XG4gICAgb2Zmc2V0bGVmdDogbnVtYmVyO1xuICAgIG9mZnNldHJpZ2h0OiBudW1iZXI7XG4gICAgb2Zmc2V0Ym90dG9tOiBudW1iZXI7XG4gICAgc2hvd2xhYmVsczogYW55O1xuICAgIHRoZW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlICRpZDtcbiAgICBwcml2YXRlIHNjb3BlZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYmluZGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIHNob3dsYWJlbHNvdXRzaWRlOiBhbnk7XG4gICAgcHJpdmF0ZSBfcmVzaXplRm46IGFueTtcbiAgICBwcml2YXRlIGNoYXJ0OiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhckNhbnZhczogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXNMb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpbHRlckZpZWxkczogYm9vbGVhbiB8IGFueTtcbiAgICBwcml2YXRlIGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGF4aXNvcHRpb25zOiBhbnk7XG4gICAgcHJpdmF0ZSBudW1lcmljQ29sdW1uczogYW55O1xuICAgIHByaXZhdGUgbm9uUHJpbWFyeUNvbHVtbnM6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodDogYW55O1xuICAgIHByaXZhdGUgY2hhcnRSZWFkeTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHhEYXRhS2V5QXJyOiBhbnkgPSBbXTtcbiAgICBwcml2YXRlIHhBeGlzRGF0YVR5cGU6IHN0cmluZztcbiAgICBwcml2YXRlIGJ1YmJsZXNpemU6IGFueTtcbiAgICBwdWJsaWMgc2hvd05vRGF0YU1zZzogYW55O1xuICAgIHByaXZhdGUgc2FtcGxlRGF0YTogYW55W107XG4gICAgcHJpdmF0ZSBjaGFydERhdGE6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBfcHJvY2Vzc2VkRGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9zdWJzY2lwdGlvbnM6IGFueSA9IFtdO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYW5lbCcpIHRpdGxlO1xuXG4gICAgaXNHcm91cEJ5RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHggYW5kIHkgYXhpcyB0aGF0IGFyZSBjaG9zZW4gYXJlIHZhbGlkIHRvIHBsb3QgY2hhcnRcbiAgICBpc1ZhbGlkQXhpcygpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgeCBheGlzIGFuZCB5IGF4aXMgYXJlIGNob3NlbiBhbmQgYXJlIG5vdCBlcXVhbFxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kZGF0YXNldCA/ICh0aGlzLnhheGlzZGF0YWtleSAmJiB0aGlzLnlheGlzZGF0YWtleSkgOiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGlzIGNob3NlblxuICAgIGlzQWdncmVnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEoKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09IE5PTkUgJiYgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGVpdGhlciBncm91cGJ5LCBhZ2dyZWdhdGlvbiBvciBvcmRlcmJ5IGlzIGNob3NlblxuICAgIGlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSB7XG4gICAgICAgIC8qUXVlcnkgbmVlZCB0byBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2FzZXMgc2F0aXNmeVxuICAgICAgICAqIDEuIEdyb3VwIEJ5IGFuZCBhZ2dyZWdhdGlvbiBib3RoIGNob3NlblxuICAgICAgICAqIDIuIE9ubHkgT3JkZXIgQnkgaXMgY2hvc2VuXG4gICAgICAgICogKi9cblxuICAgICAgICByZXR1cm4gdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpIHx8ICghdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiB0aGlzLm9yZGVyYnkpO1xuICAgIH1cblxuICAgIC8qQ2hhcnRzIGxpa2UgTGluZSxBcmVhLEN1bXVsYXRpdmUgTGluZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBkYXRhdHlwZVxuICAgICAgICBvdGhlciB0aGFuIGludGVnZXIgdW5saWtlIHRoZSBjb2x1bW4gYW5kIGJhci5JdCBpcyBhIG52ZDMgaXNzdWUuIElub3JkZXIgdG9cbiAgICAgICAgc3VwcG9ydCB0aGF0IHRoaXMgaXMgYSBmaXgqL1xuICAgIGdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeEtleSk7XG4gICAgICAgIC8vIElmIHggYXhpcyBpcyBvdGhlciB0aGFuIG51bWJlciB0eXBlIHRoZW4gYWRkIGluZGV4ZXNcbiAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh0aGlzLnR5cGUpICYmICFpc051bWJlclR5cGUodGhpcy54QXhpc0RhdGFUeXBlKSkge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2F0aW9uIHRvIGdldCB0aGUgdW5pcXVlIGRhdGEga2V5c1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIGFtb25nIGFsbCB0aGUgeCB2YWx1ZXNcbiAgICBnZXRYTWluTWF4VmFsdWVzKGRhdHVtKSB7XG4gICAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4VmFsdWVzOiBhbnkgPSB7fTtcbiAgICAgICAgLypcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1pbiB4IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dXG4gICAgICAgICAgICBtaW4geDogMVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dO1xuICAgICAgICAgICAgbWluIHg6IDEwXG4gICAgICAgICovXG4gICAgICAgIHhWYWx1ZXMubWluID0gXy5taW5CeShkYXR1bS52YWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC54IHx8IGRhdGFPYmplY3RbMF0pO1xuICAgICAgICAvKlxuICAgICAgICAgY29tcHV0ZSB0aGUgbWF4IHggdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV1cbiAgICAgICAgICAgIG1heCB4OiAzXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV07XG4gICAgICAgICAgICBtYXggeDogMzBcbiAgICAgICAgICovXG4gICAgICAgIHhWYWx1ZXMubWF4ID0gXy5tYXhCeShkYXR1bS52YWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC54IHx8IGRhdGFPYmplY3RbMF0pO1xuICAgICAgICByZXR1cm4geFZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSB5IHZhbHVlc1xuICAgIGdldFlNaW5NYXhWYWx1ZXMoZGF0dW0pIHtcbiAgICAgICAgY29uc3QgeVZhbHVlczogYW55ID0ge30sXG4gICAgICAgICAgICBtaW5WYWx1ZXMgPSBbXSxcbiAgICAgICAgICAgIG1heFZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgR2V0dGluZyB0aGUgbWluIGFuZCBtYXggeSB2YWx1ZXMgYW1vbmcgYWxsIHRoZSBzZXJpZXMgb2YgZGF0YVxuICAgICAgICAgY29tcHV0ZSB0aGUgbWluIHkgdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dLCBbe3g6MiwgeTozfSwge3g6MywgeTo0fSwge3g6NCwgeTo1fV1dXG4gICAgICAgICAgICBtaW4geSB2YWx1ZXMgOiAnMicoYW1vbmcgZmlyc3Qgc2V0KSAmICczJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgICAgbWF4IHkgdmFsdWVzIDogJzQnKGFtb25nIGZpcnN0IHNldCkgJiAnNScoYW1vbmcgc2Vjb25kIHNldClcblxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1tbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXSwgW1syMCwgMzBdLCBbMzAsIDQwXSwgWzQwLCA1MF1dXVxuICAgICAgICAgICAgbWluIHkgdmFsdWVzIDogJzIwJyhhbW9uZyBmaXJzdCBzZXQpICYgJzMwJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgICAgbWF4IHkgdmFsdWVzIDogJzQwJyhhbW9uZyBmaXJzdCBzZXQpICYgJzUwJyhhbW9uZyBzZWNvbmQgc2V0KVxuICAgICAgICAgKi9cblxuICAgICAgICBfLmZvckVhY2goZGF0dW0sIGRhdGEgPT4ge1xuICAgICAgICAgICAgbWluVmFsdWVzLnB1c2goXy5taW5CeShkYXRhLnZhbHVlcywgZnVuY3Rpb24gKGRhdGFPYmplY3QpIHsgcmV0dXJuIGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdOyB9KSk7XG4gICAgICAgICAgICBtYXhWYWx1ZXMucHVzaChfLm1heEJ5KGRhdGEudmFsdWVzLCBmdW5jdGlvbiAoZGF0YU9iamVjdCkgeyByZXR1cm4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV07IH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdldHMgdGhlIGxlYXN0IGFuZCBoaWdoZXN0IHZhbHVlcyBhbW9uZyBhbGwgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiByZXNwZWN0aXZlIHNlcmllcyBvZiBkYXRhXG4gICAgICAgIHlWYWx1ZXMubWluID0gXy5taW5CeShtaW5WYWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV0pO1xuICAgICAgICB5VmFsdWVzLm1heCA9IF8ubWF4QnkobWF4VmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdKTtcbiAgICAgICAgcmV0dXJuIHlWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHgtYXhpcyB2YWx1ZXMgYXJlIHVuZGVmaW5lZCwgd2UgcmV0dXJuIGVtcHR5IGFycmF5IGVsc2Ugd2UgcmV0dXJuIHRoZSB2YWx1ZXNcbiAgICBnZXRWYWxpZERhdGEodmFsdWVzKSB7XG4gICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZXNbMF0gPT09IHVuZGVmaW5lZCkgPyBbXSA6IHZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBzaW5nbGUgZGF0YSBwb2ludCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgZGF0YSBjaGFydCBhY2NlcHRzXG4gICAgdmFsdWVGaW5kZXIoZGF0YU9iaiwgeEtleSwgeUtleSwgaW5kZXg/LCBzaGFwZT8pIHtcbiAgICAgICAgY29uc3QgeFZhbCA9IHRoaXMuZ2V0eEF4aXNWYWwoZGF0YU9iaiwgeEtleSwgaW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSBfLmdldChkYXRhT2JqLCB5S2V5KSxcbiAgICAgICAgICAgIHlWYWwgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCB2YWx1ZSxcbiAgICAgICAgICAgIHNpemUgPSBwYXJzZUZsb2F0KGRhdGFPYmpbdGhpcy5idWJibGVzaXplXSkgfHwgMjtcbiAgICAgICAgbGV0IGRhdGFQb2ludDogYW55ID0ge307XG5cbiAgICAgICAgaWYgKGlzQ2hhcnREYXRhSlNPTih0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhUG9pbnQueCA9IHhWYWw7XG4gICAgICAgICAgICBkYXRhUG9pbnQueSA9IHlWYWw7XG4gICAgICAgICAgICAvLyBvbmx5IEJ1YmJsZSBjaGFydCBoYXMgdGhlIHRoaXJkIGRpbWVuc2lvblxuICAgICAgICAgICAgaWYgKGlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludC5zaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQuc2hhcGUgPSBzaGFwZSB8fCAnY2lyY2xlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0NoYXJ0RGF0YUFycmF5KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIGRhdGFQb2ludCA9IFt4VmFsLCB5VmFsXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGRpbmcgYWN0dWFsIHVud3JhcHBlZCBkYXRhIHRvIGNoYXJ0IGRhdGEgdG8gdXNlIGF0IHRoZSB0aW1lIG9mIHNlbGVjdGVkIGRhdGEgcG9pbnQgb2YgY2hhcnQgZXZlbnRcbiAgICAgICAgZGF0YVBvaW50Ll9kYXRhT2JqID0gZGF0YU9iajtcbiAgICAgICAgcmV0dXJuIGRhdGFQb2ludDtcbiAgICB9XG5cbiAgICAvLyBTZXR0aW5nIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2VzXG4gICAgc2V0RXJyTXNnKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd05vRGF0YU1zZykge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29udGVudExvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRDb25maWcgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2V0IHRoZSBsb2NhbGUgZnJvbSB0aGUgbWVzc2FnZVxuICAgICAgICAgICAgdGhpcy5lcnJNc2cgPSAnJzsgLy8gJHJvb3RTY29wZS5sb2NhbGVbbWVzc2FnZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzQ2hhcnREYXRhKCkge1xuICAgICAgICB0aGlzLnNhbXBsZURhdGEgPSBnZXRTYW1wbGVEYXRhKHRoaXMpO1xuICAgICAgICAvLyBzY29wZSB2YXJpYWJsZXMgdXNlZCB0byBrZWVwIHRoZSBhY3R1YWwga2V5IHZhbHVlcyBmb3IgeC1heGlzXG4gICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBbXTtcbiAgICAgICAgLy8gUGxvdHRpbmcgdGhlIGNoYXJ0IHdpdGggc2FtcGxlIGRhdGEgd2hlbiB0aGUgY2hhcnQgZGF0YXNldCBpcyBub3QgYm91bmRcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gZ2V0RGF0ZUxpc3QoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhbXBsZURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY2hhcnREYXRhIHx8ICF0aGlzLmNoYXJ0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXR1bSA9IFtdLFxuICAgICAgICAgICAgeUF4aXNLZXksXG4gICAgICAgICAgICBzaGFwZXM6IGFueSA9IFtdLFxuICAgICAgICAgICAgdmFsdWVzOiBhbnkgPSBbXTtcbiAgICAgICAgY29uc3QgeEF4aXNLZXkgPSB0aGlzLnhheGlzZGF0YWtleSxcbiAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgZGF0YVNldCA9IHRoaXMuY2hhcnREYXRhO1xuXG4gICAgICAgIGlmIChfLmlzQXJyYXkoZGF0YVNldCkpIHtcbiAgICAgICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHlBeGlzS2V5ID0geUF4aXNLZXlzWzBdO1xuICAgICAgICAgICAgICAgIGRhdHVtID0gXy5tYXAoZGF0YVNldCwgKGRhdGFPYmosIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdChkYXRhU2V0W2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRmluZGVyKGRhdGFTZXRbaW5kZXhdLCB4QXhpc0tleSwgeUF4aXNLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGF0dW0gPSB0aGlzLmdldFZhbGlkRGF0YShkYXR1bSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVzID0gdGhpcy5zaGFwZSA9PT0gJ3JhbmRvbScgPyBhbGxTaGFwZXMgOiB0aGlzLnNoYXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCgoeUF4aXNLZXksIHNlcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSAgXy5tYXAoZGF0YVNldCwgKGRhdGFPYmosIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QoZGF0YVNldFtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGaW5kZXIoZGF0YVNldFtpbmRleF0sIHhBeGlzS2V5LCB5QXhpc0tleSwgaW5kZXgsIChfLmlzQXJyYXkoc2hhcGVzKSAmJiBzaGFwZXNbc2VyaWVzXSkgfHwgdGhpcy5zaGFwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmdldFZhbGlkRGF0YSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICBkYXR1bS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBwcmV0dGlmeUxhYmVscyh5QXhpc0tleSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdHVtO1xuICAgIH1cblxuICAgIHNldENoYXJ0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENoYXJ0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NlZERhdGE7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0aW5nIHRoZSBncm91cGVkIGRhdGEgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiBvZiBvcmRlcmJ5LCB4ICYgeSBheGlzXG4gICAgZ2V0VmlzdWFsbHlHcm91cGVkRGF0YShxdWVyeVJlc3BvbnNlLCBncm91cGluZ0NvbHVtbikge1xuICAgICAgICBsZXQgZ3JvdXBEYXRhOiBhbnkgPSB7fSxcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIG9yZGVyQnlEZXRhaWxzLFxuICAgICAgICAgICAgbWF4TGVuZ3RoO1xuICAgICAgICBjb25zdCBjaGFydERhdGE6IGFueSA9IFtdLFxuICAgICAgICAgICAgX2lzQXJlYUNoYXJ0ID0gaXNBcmVhQ2hhcnQodGhpcy50eXBlKSxcbiAgICAgICAgICAgIHlBeGlzS2V5ID0gXy5maXJzdChfLnNwbGl0KHRoaXMueWF4aXNkYXRha2V5LCAnLCcpKTtcbiAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IFtdO1xuICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5vcmRlckJ5KHF1ZXJ5UmVzcG9uc2UsIF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpKTtcbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgb3JkZXJCeURldGFpbHMgPSBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0KHRoaXMub3JkZXJieSk7XG4gICAgICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5vcmRlckJ5KHF1ZXJ5UmVzcG9uc2UsIG9yZGVyQnlEZXRhaWxzLmNvbHVtbnMsIG9yZGVyQnlEZXRhaWxzLm9yZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8uZ3JvdXBCeShxdWVyeVJlc3BvbnNlLCBncm91cGluZ0NvbHVtbik7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYXJlYSBjaGFydCBhbGwgdGhlIHNlcmllcyBkYXRhIHNob3VsZCBiZSBvZiBzYW1lIGxlbmd0aFxuICAgICAgICBpZiAoX2lzQXJlYUNoYXJ0KSB7XG4gICAgICAgICAgICBtYXhMZW5ndGggPSBfLm1heChfLm1hcChxdWVyeVJlc3BvbnNlLCBvYmogPT4gb2JqLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaChxdWVyeVJlc3BvbnNlLCAodmFsdWVzLCBncm91cEtleSkgPT4ge1xuICAgICAgICAgICAgZ3JvdXBWYWx1ZXMgPSBpc0FyZWFDaGFydCA/IF8uZmlsbChuZXcgQXJyYXkobWF4TGVuZ3RoKSwgWzAsIDBdKSA6IFtdO1xuICAgICAgICAgICAgXy5mb3JFYWNoUmlnaHQodmFsdWVzLCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZ3JvdXBWYWx1ZXNbaW5kZXhdID0gdGhpcy52YWx1ZUZpbmRlcih2YWx1ZSwgdGhpcy54YXhpc2RhdGFrZXksIHlBeGlzS2V5LCBpbmRleCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3VwRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBrZXkgOiBncm91cEtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgOiBncm91cFZhbHVlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNoYXJ0RGF0YS5wdXNoKGdyb3VwRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2hhcnREYXRhO1xuICAgIH1cblxuICAgIC8qRGVjaWRlcyB3aGV0aGVyIHRoZSBkYXRhIHNob3VsZCBiZSB2aXN1YWxseSBncm91cGVkIG9yIG5vdFxuICAgICAgICAgICAgVmlzdWFsbHkgZ3JvdXBlZCB3aGVuIGEgZGlmZmVyZW50IGNvbHVtbiBpcyBjaG9vc2VuIGluIHRoZSBncm91cCBieSBvdGhlciB0aGFuIHggYW5kIHkgYXhpcyBhbmQgYWdncmVnYXRpb24gaXMgbm90IGNob3NlbiovXG4gICAgZ2V0R3JvdXBpbmdEZXRhaWxzKCkge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgIXRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgbGV0IGlzVmlzdWFsbHlHcm91cGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW4sXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IGFueSA9IFtdLFxuICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBncm91cGJ5Q29sdW1ucyA9IHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUgPyB0aGlzLmdyb3VwYnkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBieUNvbHVtbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8qR2V0dGluZyB0aGUgZ3JvdXAgYnkgY29sdW1uIHdoaWNoIGlzIG5vdCBzZWxlY3RlZCBlaXRoZXIgaW4geCBvciB5IGF4aXMqL1xuICAgICAgICAgICAgICAgIGdyb3VwYnlDb2x1bW5zLmV2ZXJ5KChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnhheGlzZGF0YWtleSAhPT0gY29sdW1uICYmICQuaW5BcnJheShjb2x1bW4sIHlBeGlzS2V5cykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYnlDb2x1bW5zLnNwbGljZShncm91cGluZ0NvbHVtbkluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3RpbmcgdGhlIGdyb3VwYnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIGlmICh2aXN1YWxHcm91cGluZ0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godmlzdWFsR3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncm91cGJ5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IF8uY29uY2F0KGNvbHVtbnMsIGdyb3VwYnlDb2x1bW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB4IGFuZCB5IGF4aXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhZ2dyZWdhdGlvbiBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIGdyb3VwYnlcbiAgICAgICAgICAgIGlmICh0aGlzLnhheGlzZGF0YWtleSAhPT0gdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0aGlzLnhheGlzZGF0YWtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfLmZvckVhY2goeUF4aXNLZXlzLCBrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IHRoaXMuYWdncmVnYXRpb25jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb24gPSAgY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgaXNWaXN1YWxseUdyb3VwZWQgZmxhZyBpbiBzY29wZSBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLmlzVmlzdWFsbHlHcm91cGVkID0gaXNWaXN1YWxseUdyb3VwZWQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZ3JvdXBpbmdFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkOiBpc1Zpc3VhbGx5R3JvdXBlZCxcbiAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbjogdmlzdWFsR3JvdXBpbmdDb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICcnLFxuICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW46ICcnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBhZ2dyZWdhdGVkIGRhdGEgYWZ0ZXIgYXBwbHlpbmcgdGhlIGFnZ3JlZ2F0aW9uICYgZ3JvdXAgYnkgb3Igb3JkZXIgYnkgb3BlcmF0aW9ucy5cbiAgICBnZXRBZ2dyZWdhdGVkRGF0YShjYWxsYmFjaykge1xuICAgICAgICBjb25zdCB2YXJpYWJsZTogYW55ID0gdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgbGV0IHNvcnRFeHByLFxuICAgICAgICAgICAgY29sdW1uczogYW55ID0gW10sXG4gICAgICAgICAgICBjb2xBbGlhcyxcbiAgICAgICAgICAgIG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAgICAgZ3JvdXBCeUZpZWxkczogYW55ID0gW107XG5cbiAgICAgICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgZ3JvdXBCeUZpZWxkcyA9IF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIHNvcnRFeHByID0gXy5yZXBsYWNlKHRoaXMub3JkZXJieSwgLzovZywgJyAnKTtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBfLnVuaXEoXy5jb25jYXQoY29sdW1ucywgZ3JvdXBCeUZpZWxkcywgW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dKSk7XG4gICAgICAgICAgICBvcmRlckJ5Q29sdW1ucyA9IGdldExvZGFzaE9yZGVyQnlGb3JtYXQodGhpcy5vcmRlcmJ5KS5jb2x1bW5zO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG9yZGVyYnkgY29sdW1uIGlzIGNob3NlbiBlaXRoZXIgaW4gZ3JvdXBieSBvciBvcmRlcmJ5IHRoZW4gcmVwbGFjZSAuIHdpdGggJCBmb3IgdGhhdCBjb2x1bW5cbiAgICAgICAgICAgIF8uZm9yRWFjaChfLmludGVyc2VjdGlvbihjb2x1bW5zLCBvcmRlckJ5Q29sdW1ucyksIGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgY29sQWxpYXMgPSBnZXRWYWxpZEFsaWFzTmFtZShjb2wpO1xuICAgICAgICAgICAgICAgIHNvcnRFeHByID0gXy5yZXBsYWNlKHNvcnRFeHByLCBjb2wsIGNvbEFsaWFzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIC8vIFNlbmQgdGhlIGdyb3VwIGJ5IGluIHRoZSBhZ2dyZWdhdGlvbnMgYXBpIG9ubHkgaWYgYWdncmVnYXRpb24gaXMgYWxzbyBjaG9zZW5cbiAgICAgICAgICAgIGRhdGEuZ3JvdXBCeUZpZWxkcyA9IGdyb3VwQnlGaWVsZHM7XG4gICAgICAgICAgICBkYXRhLmFnZ3JlZ2F0aW9ucyA9ICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICBhZ2dyZWdhdGlvbkZuTWFwW3RoaXMuYWdncmVnYXRpb25dLFxuICAgICAgICAgICAgICAgICAgICAnYWxpYXMnOiBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICAgIHZhcmlhYmxlLmV4ZWN1dGUoJ2dldEFnZ3JlZ2F0ZWREYXRhJywge1xuICAgICAgICAgICAgJ2FnZ3JlZ2F0aW9ucycgOiBkYXRhLFxuICAgICAgICAgICAgJ3NvcnQnICAgICAgICAgOiBzb3J0RXhwclxuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gYSBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBjaGFydC5cbiAgICAgICAgICAgIGNvbnN0IGNoYXJ0RGF0YTogYW55ID0gW10sXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25BbGlhczogYW55ID0gZ2V0VmFsaWRBbGlhc05hbWUodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbiksXG4gICAgICAgICAgICAgICAgeEF4aXNBbGlhc0tleSA9IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMueGF4aXNkYXRha2V5KSxcbiAgICAgICAgICAgICAgICB5QXhpc0FsaWFzS2V5cyA9IFtdO1xuXG4gICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCh5QXhpc0tleSA9PiB5QXhpc0FsaWFzS2V5cy5wdXNoKGdldFZhbGlkQWxpYXNOYW1lKHlBeGlzS2V5KSkpO1xuXG4gICAgICAgICAgICBfLmZvckVhY2gocmVzcG9uc2UuYm9keS5jb250ZW50LCAocmVzcG9uc2VDb250ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSByZXNwb25zZSBpbiB0aGUgY2hhcnREYXRhIGJhc2VkIG9uICdhZ2dyZWdhdGlvbkNvbHVtbicsICd4QXhpc0RhdGFLZXknICYgJ3lBeGlzRGF0YUtleScuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0gPSByZXNwb25zZUNvbnRlbnRbYWdncmVnYXRpb25BbGlhc107XG4gICAgICAgICAgICAgICAgICAgIG9ialt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgYWdncmVnYXRpb25BbGlhcykgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYmpbdGhpcy54YXhpc2RhdGFrZXldID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCB4QXhpc0FsaWFzS2V5KSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHRoaXMueGF4aXNkYXRha2V5KTtcblxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKCh5QXhpc0tleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3lBeGlzS2V5XSA9IHJlc3BvbnNlQ29udGVudFt5QXhpc0FsaWFzS2V5c1tpbmRleF1dO1xuICAgICAgICAgICAgICAgICAgICBvYmpbeUF4aXNLZXldID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCB5QXhpc0FsaWFzS2V5c1tpbmRleF0pIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeUF4aXNLZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcblxuICAgICAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyTXNnKCdNRVNTQUdFX0VSUk9SX0ZFVENIX0RBVEEnKTtcbiAgICAgICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBtYXhpbXVtIHdpZHRoIGZvciB0aGUgbGFiZWxzIHRoYXQgY2FuIGJlIGRpc3BsYXllZC5UaGlzIHdpbGwgaGVscGZ1bCB3aGVuIHRoZXkgYXJlIG92ZXJsYXBwaW5nXG4gICAgc2V0TGFiZWxzTWF4V2lkdGgoKSB7XG4gICAgICAgIGxldCB4VGlja3MsXG4gICAgICAgICAgICB0aWNrV2lkdGgsXG4gICAgICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgICAgICB4RGlzdCxcbiAgICAgICAgICAgIHlEaXN0LFxuICAgICAgICAgICAgdG90YWxIZWlnaHQsXG4gICAgICAgICAgICBtYXhOb0xhYmVscyxcbiAgICAgICAgICAgIG50aEVsZW1lbnQsXG4gICAgICAgICAgICBsYWJlbHNBdmFpbGFibGVXaWR0aCxcbiAgICAgICAgICAgIGJhcldyYXBwZXIsXG4gICAgICAgICAgICB5QXhpc1dyYXBwZXIsXG4gICAgICAgICAgICBzdmdXcmFwcGVyO1xuICAgICAgICBjb25zdCBmb250c2l6ZSA9IHBhcnNlSW50KHRoaXMuZm9udHNpemUsIDEwKSB8fCAxMixcbiAgICAgICAgICAgIGlzQmFyY2hhcnQgPSBpc0JhckNoYXJ0KHRoaXMudHlwZSk7XG4gICAgICAgIC8vIGdldHRpbmcgdGhlIHggdGlja3MgaW4gdGhlIGNoYXJ0XG4gICAgICAgIHhUaWNrcyA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5maW5kKCdnLm52LXgnKS5maW5kKCdnLnRpY2snKS5maW5kKCd0ZXh0Jyk7XG5cbiAgICAgICAgLy8gZ2V0dGluZyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIHZpc2libGUgdGlja3MgYXNzb2NpYXRlZCB3aXRoIHZpc2libGUgdGV4dFxuICAgICAgICB4VGlja3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB4VGljayA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgeFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aWNrRGlzdDtcbiAgICAgICAgICAgIGlmICh4VGljay50ZXh0KCkgJiYgeFRpY2suY3NzKCdvcGFjaXR5JykgPT09ICcxJykge1xuICAgICAgICAgICAgICAgIHhUcmFuc2Zvcm0gPSB4VGljay5wYXJlbnQoKS5hdHRyKCd0cmFuc2Zvcm0nKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHhEaXN0ID0gcGFyc2VGbG9hdCh4VHJhbnNmb3JtWzBdLnN1YnN0cigxMCkpO1xuICAgICAgICAgICAgICAgIHlEaXN0ID0gcGFyc2VGbG9hdCh4VHJhbnNmb3JtWzFdIHx8ICcwJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0JhcmNoYXJ0ICYmIHhEaXN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRGlzdCA9IHhEaXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeURpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tEaXN0ID0geURpc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aWNrV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja1dpZHRoID0gdGlja0Rpc3QgLSB0aWNrV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGlja1dpZHRoID0gdGlja0Rpc3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYmFyIGNoYXJ0IGdldHRpbmcgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGxhYmVscyB0byBiZSBkaXNwbGF5ZWRcbiAgICAgICAgaWYgKGlzQmFyY2hhcnQpIHtcbiAgICAgICAgICAgIGJhcldyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnPmcubnYtd3JhcD5nPmcubnYtYmFyc1dyYXAnKVswXTtcbiAgICAgICAgICAgIHlBeGlzV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmc+Zy5udi13cmFwPmc+Zy5udi15JylbMF07XG4gICAgICAgICAgICBzdmdXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpWzBdO1xuICAgICAgICAgICAgLy8gZ2V0dGluZyB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBjaGFydFxuICAgICAgICAgICAgdG90YWxIZWlnaHQgPSBiYXJXcmFwcGVyID8gYmFyV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiAwO1xuICAgICAgICAgICAgLy8gZ2V0dGluZyB0aGUgbGFiZWxzIGF2YWlsYWJsZSBzcGFjZVxuICAgICAgICAgICAgbGFiZWxzQXZhaWxhYmxlV2lkdGggPSB5QXhpc1dyYXBwZXIgPyBzdmdXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0geUF4aXNXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIDogc3ZnV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG1heCBsZW5ndGggZm9yIHRoZSBsYWJlbFxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5yb3VuZChsYWJlbHNBdmFpbGFibGVXaWR0aCAvIGZvbnRzaXplKTtcbiAgICAgICAgICAgIC8vIGlmIGF2YWlsYWJsZSBzcGFjZSBmb3IgZWFjaCBsYWJlbCBpcyBsZXNzIHRoYW4gdGhlIGZvbnQtc2l6ZVxuICAgICAgICAgICAgLy8gdGhlbiBsaW1pdGluZyB0aGUgbGFiZWxzIHRvIGJlIGRpc3BsYXllZFxuICAgICAgICAgICAgaWYgKHRpY2tXaWR0aCA8IGZvbnRzaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtYXhpbXVtIG5vIG9mIGxhYmVscyB0byBiZSBmaXR0ZWRcbiAgICAgICAgICAgICAgICBtYXhOb0xhYmVscyA9IHRvdGFsSGVpZ2h0IC8gZm9udHNpemU7XG4gICAgICAgICAgICAgICAgLy8gc2hvd2luZyBvbmx5IHRoZSBudGggZWxlbWVudFxuICAgICAgICAgICAgICAgIG50aEVsZW1lbnQgPSBNYXRoLmNlaWwodGhpcy5jaGFydERhdGEubGVuZ3RoIC8gbWF4Tm9MYWJlbHMpO1xuICAgICAgICAgICAgICAgIC8vIHNob3dpbmcgdXAgb25seSBzb21lIGxhYmVsc1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLnNlbGVjdCgnZy5udi14Jykuc2VsZWN0QWxsKCdnLnRpY2snKS5zZWxlY3QoJ3RleHQnKS5lYWNoKGZ1bmN0aW9uICh0ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhpZGluZyBldmVyeSBub24gbnRoIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSBudGhFbGVtZW50ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cignb3BhY2l0eScsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBtYXggbGVuZ3RoIGZvciB0aGUgbGFiZWxcbiAgICAgICAgICAgIG1heExlbmd0aCA9IE1hdGgucm91bmQodGlja1dpZHRoIC8gZm9udHNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF4TGVuZ3RoIHNob3VsZCBhbHdheXMgYmUgYSBwb3NpdGl2ZSBudW1iZXJcbiAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5hYnMobWF4TGVuZ3RoKTtcbiAgICAgICAgLy8gVmFsaWRhdGluZyBpZiBldmVyeSBsYWJlbCBleGNlZWRzIHRoZSBtYXggbGVuZ3RoIGFuZCBpZiBzbyBsaW1pdGluZyB0aGUgbGVuZ3RoIGFuZCBhZGRpbmcgZWxsaXBzaXNcbiAgICAgICAgeFRpY2tzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dENvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHRoaXMudGV4dENvbnRlbnQuc3Vic3RyKDAsIG1heExlbmd0aCkgKyAnLi4uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgY29sdW1ucyBvZiB0aGF0IGNhbiBiZSBjaG9vc2VuIGluIHRoZSB4IGFuZCB5IGF4aXNcbiAgICBnZXREZWZhdWx0Q29sdW1ucygpIHtcbiAgICAgICAgbGV0IHR5cGUsXG4gICAgICAgICAgICBzdHJpbmdDb2x1bW4sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdGVtcDtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXSxcbiAgICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJPUEVSVElFU19NQVApIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aCAmJiBkZWZhdWx0Q29sdW1ucy5sZW5ndGggPD0gMjsgaSArPSAxKSB7XG4gICAgICAgICAgICB0eXBlID0gY29sdW1uc1tpXS50eXBlO1xuICAgICAgICAgICAgaWYgKCFjb2x1bW5zW2ldLmlzUmVsYXRlZCAmJiAoaXNOdW1iZXJUeXBlKHR5cGUpKSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zLnB1c2goY29sdW1uc1tpXS5maWVsZE5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiAhc3RyaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nQ29sdW1uID0gY29sdW1uc1tpXS5maWVsZE5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgdGhhbiBidWJibGUgY2hhcnQgeDogc3RyaW5nIHR5cGUgeTogbnVtYmVyIHR5cGVcbiAgICAgICAgLy8gQnViYmxlIGNoYXJ0IHg6IG51bWJlciB0eXBlIHk6IG51bWJlciB0eXBlXG4gICAgICAgIGlmIChzdHJpbmdDb2x1bW4gJiYgZGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMCAmJiAhaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0ZW1wID0gZGVmYXVsdENvbHVtbnNbMF07XG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uc1swXSA9IHN0cmluZ0NvbHVtbjtcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zWzFdID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgICB9XG5cbiAgICAvLyBDYWxsIHVzZXIgZGVmaW5lZCBqYXZhc2NyaXB0IGZ1bmN0aW9uIHdoZW4gdXNlciBsaW5rcyBpdCB0byBjbGljayBldmVudCBvZiB0aGUgd2lkZ2V0LlxuICAgIGF0dGFjaENsaWNrRXZlbnQoKSB7XG4gICAgICAgIGxldCBkYXRhT2JqO1xuICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5zZWxlY3RBbGwoY2hhcnREYXRhUG9pbnRYcGF0aFt0aGlzLnR5cGVdKS5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnYWxsJylcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb2x1bW4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdCYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGllJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRG9udXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VtdWxhdGl2ZSBMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YVswXS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCdWJibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5wb2ludFs0XS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGRhdGFPYmo7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7JGV2ZW50OiBkMy5ldmVudCwgc2VsZWN0ZWRDaGFydEl0ZW06IGRhdGEsIHNlbGVjdGVkSXRlbTogdGhpcy5zZWxlY3RlZGl0ZW19KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyogIFJldHVybnMgWSBTY2FsZSBtaW4gdmFsdWVcbiAgICAgICAgICAgRXg6IElucHV0ICAgOiA4Ljk3XG4gICAgICAgICAgICAgICBPdXRwdXQgIDogOC44N1xuXG4gICAgICAgICAgICAgICBJbnB1dCAgIDogOFxuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDdcbiAgICAgICAqL1xuXG4gICAgcG9zdFBsb3RQcm9jZXNzKGNoYXJ0KSB7XG4gICAgICAgIGxldCBjaGFydFN2ZyxcbiAgICAgICAgICAgIHBpZUxhYmVscyxcbiAgICAgICAgICAgIHBpZUdyb3VwcyxcbiAgICAgICAgICAgIGFuZ2xlQXJyYXk7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuXG4gICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuXG4gICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zaG93bGFiZWxzb3V0c2lkZSkge1xuICAgICAgICAgICAgLyoqIE52ZDMgaGFzIGEgaXNzdWUgaW4gcm90YXRpbmcgdGV4dC4gU28gd2Ugd2lsbCB1c2UgdGhpcyBhcyBhIHRlbXAgZml4LlxuICAgICAgICAgICAgICogSWYgdGhlIGlzc3VlIGlzIHJlc29sdmVkIHRoZXJlLCB3ZSBjYW4gcmVtb3ZlIHRoaXMuKi9cbiAgICAgICAgICAgIC8qIElmIGl0IGlzIGEgZG9udXQgY2hhcnQsIHRoZW4gcm90YXRlIHRoZSB0ZXh0IGFuZCBwb3NpdGlvbiB0aGVtKi9cbiAgICAgICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG4gICAgICAgICAgICBwaWVMYWJlbHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi1waWVMYWJlbHMnKS5zZWxlY3RBbGwoJy5udi1sYWJlbCcpO1xuICAgICAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllJykuc2VsZWN0QWxsKCcubnYtc2xpY2UnKTtcbiAgICAgICAgICAgIGFuZ2xlQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGlmIChwaWVHcm91cHMgJiYgcGllR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBpZUdyb3Vwcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUFycmF5LnB1c2goYW5nbGUoZCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwaWVMYWJlbHMuZWFjaChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJChncm91cFswXVswXSkuZmluZCgndGV4dCcpLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoJyArIGFuZ2xlQXJyYXlbaV0gKyAnKScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJlcGFyZSB0ZXh0IHN0eWxlIHByb3BzIG9iamVjdCBhbmQgc2V0XG4gICAgICAgIF8uZm9yRWFjaChzdHlsZVByb3BzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZU9ialt2YWx1ZV0gPSB0aGlzLmZvbnRzaXplICsgdGhpcy5mb250dW5pdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogYWxsb3cgd2luZG93LXJlc2l6ZSBmdW5jdGlvbmFsaXR5LCBmb3Igb25seS1ydW4gbW9kZSBhc1xuICAgICAgICAgKiB1cGRhdGluZyBjaGFydCBpcyBiZWluZyBoYW5kbGVkIGJ5IHdhdGNoZXJzIG9mIGhlaWdodCAmIHdpZHRoIGluIHN0dWRpby1tb2RlXG4gICAgICAgICAqICovXG4gICAgICAgIHRyaWdnZXJGbih0aGlzLl9yZXNpemVGbiAmJiB0aGlzLl9yZXNpemVGbi5jbGVhcik7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUZuID0gbnYudXRpbHMud2luZG93UmVzaXplKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYWJlbHNNYXhXaWR0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZ2V0IHBhcmVudHMgb2YgYWNjb3JkaW9uIHR5cGVcbiAgICAgICAgICAgICAgICAvKmxldCBwYXJlbnQgPSBlbGVtZW50LmNsb3Nlc3QoJy5hcHAtYWNjb3JkaW9uLXBhbmVsLCAudGFiLXBhbmUnKS5pc29sYXRlU2NvcGUoKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBwcmVwYXJlcyBhbmQgY29uZmlndXJlcyB0aGUgY2hhcnQgcHJvcGVydGllc1xuICAgIGNvbmZpZ3VyZUNoYXJ0KCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBkYXRhIG9ubHkgaW4gY2FzZSBvZiBwaWUgY2hhcnQgd2l0aCBkZWZhdWx0IGRhdGFcbiAgICAgICAgLy8gUmVhc29uIDogd2hlbiBtdWx0aXBsZSBwaWUgY2hhcnRzIGFyZSBib3VuZCB0byBzYW1lIGRhdGEsIGZpcnN0IGNoYXJ0IHRoZW1lIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgY2hhcnRzXG4gICAgICAgIGxldCB4RG9tYWluVmFsdWVzO1xuICAgICAgICBsZXQgeURvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IGNoYXJ0O1xuICAgICAgICBsZXQgYmVmb3JlUmVuZGVyVmFsO1xuICAgICAgICBjb25zdCB5Zm9ybWF0T3B0aW9uczogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NlZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzQXhpc0RvbWFpblZhbGlkKHRoaXMsICd4JykpIHtcbiAgICAgICAgICAgICAgICB4RG9tYWluVmFsdWVzID0gdGhpcy5iaW5kZGF0YXNldCA/IHRoaXMuZ2V0WE1pbk1heFZhbHVlcyh0aGlzLl9wcm9jZXNzZWREYXRhWzBdKSA6IHsgJ21pbicgOiB7J3gnOiAxfSwgICdtYXgnIDogeyd4JyA6IDV9fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneScpKSB7XG4gICAgICAgICAgICAgICAgeURvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFlNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YSkgOiB7ICdtaW4nIDogeyd5JyA6IDF9LCAnbWF4JyA6IHsneScgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkgJiYgKCF0aGlzLmJpbmRkYXRhc2V0IHx8ICF0aGlzLnNjb3BlZGF0YXNldCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5zY29wZWRhdGFzZXQgfHwgdGhpcy5fcHJvY2Vzc2VkRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIGNoYXJ0IG9iamVjdFxuICAgICAgICBjaGFydCA9IGluaXRDaGFydCh0aGlzLCB4RG9tYWluVmFsdWVzLCB5RG9tYWluVmFsdWVzLCBudWxsLCAhdGhpcy5iaW5kZGF0YXNldCk7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheSh0aGlzLl9wcm9jZXNzZWREYXRhKSkge1xuICAgICAgICAgICAgLy8gV01TLTE5NDk5OiAgVG8gcmVtb3ZlIGNoYXJ0IFgtYXhpcyBvbGQgdGlja3Mgd2hlbiBjaGFydCBkYXRhIGxvYWRlZCBkeW5hbWljYWxseS5cbiAgICAgICAgICAgIGNvbnN0IG9sZGdUaWNrcyA9ICAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJyk7XG4gICAgICAgICAgICBpZiAob2xkZ1RpY2tzICYmIG9sZGdUaWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvbGRnVGlja3MucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVSZW5kZXJWYWwgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbmRlcicsIHsgJ2NoYXJ0SW5zdGFuY2UnIDogY2hhcnR9KTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVSZW5kZXJWYWwpIHtcbiAgICAgICAgICAgICAgICBjaGFydCA9IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIHRoZSBkZWZhdWx0IG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylcbiAgICAgICAgICAgICAgICAuZGF0dW0odGhpcy5fcHJvY2Vzc2VkRGF0YSlcbiAgICAgICAgICAgICAgICAuY2FsbCh0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMucG9zdFBsb3RQcm9jZXNzKGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBjaGFydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNldCBvZiB0aGUgcHJvcGVydGllcyBzZXQgdG8gaXRcbiAgICBwbG90Q2hhcnQoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICAvLyBjYWxsIHVzZXItdHJhbnNmb3JtZWQgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSAodGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCd0cmFuc2Zvcm0nKSkgfHwgdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXIgYnkgZGF0YSBvbmx5IGluIHJ1biBtb2RlLiBUaGUgb3JkZXIgYnkgYXBwbGllcyBmb3IgYWxsIHRoZSBjaGFydHMgb3RoZXIgdGhhbiBwaWUgYW5kIGRvbnV0IGNoYXJ0c1xuICAgICAgICBpZiAodGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiAhaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLmNoYXJ0RGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLnByb2Nlc3NDaGFydERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVja2luZyB0aGUgcGFyZW50IGNvbnRhaW5lciBiZWZvcmUgcGxvdHRpbmcgdGhlIGNoYXJ0XG4gICAgICAgIGlmICghZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGVhckNhbnZhcykge1xuICAgICAgICAgICAgLy8gZW1wdHkgc3ZnIHRvIGFkZC1uZXcgY2hhcnRcbiAgICAgICAgICAgIGVsZW1lbnQuZmluZCgnc3ZnJykucmVwbGFjZVdpdGgoJzxzdmc+PC9zdmc+Jyk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGludmFsaWQgYXhpcyBzaG93IG5vIGRhdGEgYXZhaWxhYmxlIG1lc3NhZ2VcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBeGlzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBudi5hZGRHcmFwaCgoKSA9PiB0aGlzLmNvbmZpZ3VyZUNoYXJ0KCksICAoKSA9PiB7XG4gICAgICAgICAgICAvKkJ1YmJsZSBjaGFydCBoYXMgYW4gdGltZSBvdXQgZGVsYXkgb2YgMzAwbXMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24gZHVlIHRvIHdoaWNoIHdlXG4gICAgICAgICAgICAqIHdvbid0IGJlIGdldHRpbmcgcmVxdWlyZWQgZGF0YSBwb2ludHMgb24gYXR0YWNoaW5nIGV2ZW50c1xuICAgICAgICAgICAgKiBoZW5jZSBkZWxheWluZyBpdCA2MDBtcyovXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRPRE86IE5lZWQgd2F5IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGRhdGFzb3VyY2UgaXMgYSBsaXZlIHNvdXJjZVxuICAgIGdldCBpc0xpdmVWYXJpYWJsZSgpIHtcbiAgICAgICAgLy8gc2V0dGluZyB0aGUgZmxhZyBmb3IgdGhlIGxpdmUgdmFyaWFibGUgaW4gdGhlIHNjb3BlIGZvciB0aGUgY2hlY2tzXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlT2JqID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICByZXR1cm4gdmFyaWFibGVPYmogJiYgdmFyaWFibGVPYmouY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnO1xuICAgIH1cblxuICAgIHBsb3RDaGFydFByb3h5KCkge1xuICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVja2luZyBpZiB4IGFuZCB5IGF4aXMgYXJlIGNob3NlblxuICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCBncm91cGluZ0RldGFpbHMgPSB0aGlzLmdldEdyb3VwaW5nRGV0YWlscygpO1xuICAgICAgICAvLyBJZiBhZ2dyZWdhdGlvbi9ncm91cCBieS9vcmRlciBieSBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBzZXQsIHRoZW4gZ2V0IHRoZSBhZ2dyZWdhdGVkIGRhdGEgYW5kIHBsb3QgdGhlIHJlc3VsdCBpbiB0aGUgY2hhcnQuXG4gICAgICAgIC8vIFRPRE86IGRhdGFzb3VyY2UgZm9yIGxpdmUgdmFyaWFibGUgZGV0ZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgKHRoaXMuZmlsdGVyRmllbGRzIHx8IHRoaXMuaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGVkRGF0YSgoKSA9PiB0aGlzLnBsb3RDaGFydCgpKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gRWxzZSwgc2ltcGx5IHBsb3QgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHJlc2V0dGluZyB0aGUgYWdncmVnYXRlZCBkYXRhIHRvIHRoZSBub3JtYWwgZGF0YXNldCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgZ3JvdXBpbmdEZXRhaWxzLmlzVmlzdWFsbHlHcm91cGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5nZXRWaXN1YWxseUdyb3VwZWREYXRhKHRoaXMuY2hhcnREYXRhLCBncm91cGluZ0RldGFpbHMudmlzdWFsR3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbG90Q2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgeCBhbmQgeSBheGlzIG9wdGlvbnNcbiAgICBzZXREZWZhdWx0QXhpc09wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucygpO1xuICAgICAgICAvLyBJZiB3ZSBnZXQgdGhlIHZhbGlkIGRlZmF1bHQgY29sdW1ucyB0aGVuIGFzc2lnbiB0aGVtIGFzIHRoZSB4IGFuZCB5IGF4aXNcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBzZXJ2aWNlIHZhcmlhYmxlIHdlIG1heSBub3QgZ2V0IHRoZSB2YWxpZCBjb2x1bW5zIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgdGhlIGRhdGF0eXBlc1xuICAgICAgICB0aGlzLnhheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzBdIHx8IG51bGw7XG4gICAgICAgIHRoaXMueWF4aXNkYXRha2V5ID0gZGVmYXVsdENvbHVtbnNbMV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXRvbWl6ZWRPcHRpb25zKHByb3AsIGZpZWxkcykge1xuICAgICAgICBjb25zdCBncm91cEJ5Q29sdW1ucyA9IF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpLFxuICAgICAgICAgICAgYWdnQ29sdW1ucyA9IF8uc3BsaXQodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbiwgJywnKTtcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5heGlzb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3T3B0aW9ucztcbiAgICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgICAgICBjYXNlICd4YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGdyb3VwYnkgd2lsbCBiZSBwb3B1bGF0ZWQgaW4geCBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IGdyb3VwQnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3lheGlzZGF0YWtleSc6XG4gICAgICAgICAgICAgICAgLy8gSWYgYWdncmVnYXRpb24gYnkgZW5hYmxlZCwgY29sdW1ucyBjaG9zZW4gaW4gYWdncmVnYXRpb24gd2lsbCBiZSBwb3B1bGF0ZWQgaW4geSBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBhZ2dDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxpdmUgdmFyaWFibGUgcG9wdWxhdGluZyBvbmx5IG51bWVyaWMgY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcbiAgICAgICAgICAgICAgICAvLyBGaWx0ZXJpbmcgb25seSBub24gcHJpbWFyeSBrZXkgY29sdW1uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgJiYgdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRpb25jb2x1bW4nOlxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgJ2FnZ3JlZ2F0aW9uQ29sdW1uJyB0byBzaG93IGFsbCBrZXlzIGluIGNhc2Ugb2YgYWdncmVnYXRpb24gZnVuY3Rpb24gaXMgY291bnQgb3IgdG8gbnVtZXJpYyBrZXlzIGluIGFsbCBvdGhlciBjYXNlcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcmJ5JzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBfLnVuaXEoXy5jb25jYXQoZ3JvdXBCeUNvbHVtbnMsIGFnZ0NvbHVtbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdidWJibGVzaXplJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1lcmljQ29sdW1ucyAmJiB0aGlzLm51bWVyaWNDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T3B0aW9ucyB8fCBmaWVsZHMgfHwgdGhpcy5heGlzb3B0aW9ucztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCB0aGVuIGZldGNoaW5nIHRoZSBudW1lcmljIGFuZCBub24gcHJpbWFyeSBjb2x1bW5zIGFtb25nIHRoZW1cbiAgICBzZXROdW1lcmljYW5kTm9uUHJpbWFyeUNvbHVtbnMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zLFxuICAgICAgICAgICAgdHlwZTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllc01hcCA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCk7XG4gICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IFtdO1xuICAgICAgICAvLyBGZXRjaGluZyBhbGwgdGhlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiAhXy5pc0VtcHR5KHByb3BlcnRpZXNNYXApKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gW107IC8vIFRPRE86IGZldGNoUHJvcGVydGllc01hcENvbHVtbnMocHJvcGVydGllc01hcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1ucykge1xuICAgICAgICAgICAgLy8gSXRlcmF0aW5nIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgIF8uZm9yRWFjaChPYmplY3Qua2V5cyhjb2x1bW5zKSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2tleV0udHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIaWRpbmcgb25seSB0YWJsZSdzIHByaW1hcnkga2V5XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNba2V5XS5pc1JlbGF0ZWRQayA9PT0gJ3RydWUnIHx8ICFjb2x1bW5zW2tleV0uaXNQcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnMuc29ydCgpO1xuICAgICAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnMuc29ydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcGxvdCB0aGUgY2hhcnRcbiAgICBoYW5kbGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmVyck1zZyA9ICcnO1xuICAgICAgICAvLyBSZXNldHRpbmcgdGhlIGZsYWcgdG8gZmFsc2Ugd2hlbiB0aGUgYmluZGluZyB3YXMgcmVtb3ZlZFxuICAgICAgICBpZiAoIW5ld1ZhbCAmJiAhdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaXZlVmFyaWFibGVzIGNvbnRhaW4gZGF0YSBpbiAnZGF0YScgcHJvcGVydHknIG9mIHRoZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuaXNMaXZlVmFyaWFibGUgPyBuZXdWYWwgfHwgJycgOiAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnICYmIF8ua2V5cyhuZXdWYWwpLmxlbmd0aCA9PT0gMSkgPyAnJyA6IG5ld1ZhbDtcblxuICAgICAgICAvLyBpZiB0aGUgZGF0YSByZXR1cm5lZCBpcyBhbiBvYmplY3QgbWFrZSBpdCBhbiBhcnJheSBvZiBvYmplY3RcbiAgICAgICAgaWYgKCFfLmlzQXJyYXkodGhpcy5jaGFydERhdGEpICYmIF8uaXNPYmplY3QodGhpcy5jaGFydERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFt0aGlzLmNoYXJ0RGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsICYmIG5ld1ZhbC5maWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gbmV3VmFsLmZpbHRlckZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBsb3RjaGFydCBmb3Igb25seSB2YWxpZCBkYXRhIGFuZCBvbmx5IGFmdGVyIGJvdW5kIHZhcmlhYmxlIHJldHVybnMgZGF0YVxuICAgICAgICBpZiAodGhpcy5jaGFydERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGxvdENoYXJ0UHJveHkgPSBfLmRlYm91bmNlKHRoaXMucGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKSwgMTAwKTtcblxuICAgIC8vIHNldHMgdGhlIGNlbnRlciBsYWJlbCBmb3IgZG9udXQgY2hhcnQgdHlwZVxuICAgIHNldERvbnV0Q2VudGVyTGFiZWwobGFiZWxWYWx1ZSkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsIHBpZUdyb3VwcztcbiAgICAgICAgY2hhcnRTdmcgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKTtcblxuICAgICAgICBwaWVHcm91cHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi13cmFwLm52LXBpZScpLnNlbGVjdCgnLm52LXBpZScpO1xuICAgICAgICBwaWVHcm91cHMudGV4dCgnJyk7XG4gICAgICAgIHBpZUdyb3Vwcy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgJy4zNWVtJylcbiAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ252LXBpZS10aXRsZScpXG4gICAgICAgICAgICAudGV4dChsYWJlbFZhbHVlKVxuICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDN0ZXh0ID0gZDMuc2VsZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGNpcmMgPSBkMy5zZWxlY3QodGhpcy5wYXJlbnRFbGVtZW50KSxcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoID0gTnVtYmVyKGNpcmMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSxcbiAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgcmluZyB3aWR0aCBmcm9tIHRvdGFsIHdpZHRoXG4gICAgICAgICAgICAgICAgYXZhaWxXaWR0aCA9IHRvdGFsV2lkdGggLSAzMCxcbiAgICAgICAgICAgICAgICB0ZXh0V2lkdGggPSB0aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGQzdGV4dC5hdHRyKFwiZGF0YS1zY2FsZVwiLCBhdmFpbFdpZHRoIC8gdGV4dFdpZHRoKTtcbiAgICAgICAgICAgICAgfSkuc3R5bGUoXCJmb250LXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gMTYgaXMgdGhlIGRlZmF1bHQgZm9udCBzaXplIHRvIG11bHRpcGx5IHdpdGggdGhlIHNjYWxlZCB2YWx1ZSBhbmQgMjQgaXMgdGhlIG1heGltdW0gZm9udCBzaXplIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSAxNiAqIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0YS1zY2FsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9udFNpemUgPiAyNCA/IDI0IDogZm9udFNpemUgKyBcInB4XCI7XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbD8pIHtcbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2VudGVybGFiZWwnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudGl0bGUobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREb251dENlbnRlckxhYmVsKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgICAgICAgICAgLy8gQmFzZWQgb24gdGhlIGNoYW5nZSBpbiB0eXBlIGRlY2lkaW5nIHRoZSBkZWZhdWx0IG1hcmdpbnNcbiAgICAgICAgICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXR0b3AgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRyaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRsZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCA9PT0gJ1BpZScgfHwgb2xkVmFsID09PSAnRG9udXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRib3R0b20gPSA1NTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRsZWZ0ID0gNzU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJDYW52YXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJbiBzdHVkaW8gbW9kZSwgY29uZmlndXJlIHByb3BlcnRpZXMgZGVwZW5kZW50IG9uIGNoYXJ0IHR5cGVcbiAgICAgICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBJbiBSdW5Nb2RlLCB0aGUgcGxvdGNoYXJ0IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGFsbCBwcm9wZXJ0eSBjaGFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGFkdmFuY2VEYXRhUHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVMb2FkaW5nKGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgaXNEYXRhU291cmNlRXF1YWwoZGF0YS52YXJpYWJsZSwgZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gZGF0YS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlVG9vbHRpcCgpIHtcbiAgICAgICAgZDMuc2VsZWN0QWxsKCcubnZ0b29sdGlwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVPYmogPSB7fTtcbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRzaXplJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnR1bml0JzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRmYW1pbHknOlxuICAgICAgICAgICAgY2FzZSAnZm9udHdlaWdodCc6XG4gICAgICAgICAgICBjYXNlICdmb250c3R5bGUnOlxuICAgICAgICAgICAgY2FzZSAndGV4dGRlY29yYXRpb24nOlxuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3N0eWxlUHJvcHNba2V5XV0gPSAoa2V5ID09PSAnZm9udHNpemUnIHx8IGtleSA9PT0gJ2ZvbnR1bml0JykgPyB0aGlzLmZvbnRzaXplICsgdGhpcy5mb250dW5pdCA6IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICBzZXRUZXh0U3R5bGUoc3R5bGVPYmosIHRoaXMuJGlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSLCBbJ2ZvbnRzaXplJywgJ2ZvbnR1bml0JywgJ2NvbG9yJywgJ2ZvbnRmYW1pbHknLCAnZm9udHdlaWdodCcsICdmb250c3R5bGUnLCAndGV4dGRlY29yYXRpb24nXSk7XG5cbiAgICAgICAgLy8gZ2VuZXJhdGUgdW5pcXVlIGlkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuJGlkID0gdGhpcy53aWRnZXRJZCB8fCBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAvLyByZW1vdmUgdGl0bGUgYXR0cmlidXRlIGFzIHRoZSBlbGVtZW50IG9uIGhvdmVyIHNob3dzIHlvdSB0aGUgaGludCB0aHJvdWdoLW91dCB0aGUgZWxlbWVudFxuICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJyk7XG4gICAgICAgIHRoaXMuY2hhcnRSZWFkeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJyk7XG4gICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB0aGlzLmhhbmRsZUxvYWRpbmcuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyBXaWxsIGhpZGUgdG9sbHRpcCBvZiBhIGNoYXJ0IGluIG1vYmlsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMuXG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgnaXNjcm9sbC1zdGFydCcsICgpID0+IHt0aGlzLmhpZGVUb29sdGlwKCk7fSkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIEZvciBvbGQgcHJvamVjdHNcbiAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnb3V0c2lkZScsICdpbnNpZGUnLCAnaGlkZSddLCB0aGlzLnNob3dsYWJlbHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVscyk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHNvdXRzaWRlID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVsc291dHNpZGUpO1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzICAgICAgICA9IHRoaXMuc2hvd2xhYmVscyA/ICh0aGlzLnNob3dsYWJlbHNvdXRzaWRlID8gJ291dHNpZGUnIDogJ2luc2lkZScpIDogJ2hpZGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRoZW1lKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRoZW1lIGZvciBwaWUvZG9udXQgaXMgQXp1cmUgYW5kIGZvciBvdGhlciBpdCBpcyBUZXJyZXN0cmlhbFxuICAgICAgICAgICAgdGhpcy50aGVtZSA9IGlzUGllVHlwZSh0aGlzLnR5cGUpID8gJ0F6dXJlJyA6ICdUZXJyZXN0cmlhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICd3bUNoYXJ0JyArIHRoaXMuJGlkKTtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBub3QgdmFsdWUgYmluZGluZywgdGhlbiBwbG90IHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCAmJiAhdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2NvcGVkYXRhc2V0JykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gZGVzdHJveSBhbGwgc3Vic2NyaXB0aW9ucyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrLlxuICAgICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIHJlZHJhdyA9IHRoaXMuX3Bsb3RDaGFydFByb3h5LmJpbmQodGhpcyk7XG59XG4iXX0=
@@ -876,7 +876,7 @@ class ChartComponent extends StylableComponent {
876
876
  if (isLineTypeChart(this.type) && !isNumberType(this.xAxisDataType)) {
877
877
  // Verification to get the unique data keys
878
878
  this.xDataKeyArr.push(value);
879
- return index;
879
+ return value;
880
880
  }
881
881
  return value;
882
882
  }