ontimize-web-ngx 15.3.5 → 15.4.1

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 (56) hide show
  1. package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +8 -2
  2. package/esm2020/lib/components/grid/o-grid.component.mjs +2 -1
  3. package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +240 -218
  4. package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +3 -5
  5. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +353 -0
  6. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +381 -0
  7. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +21 -0
  8. package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +1009 -0
  9. package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.config.mjs +2 -0
  10. package/esm2020/lib/components/input/index.mjs +7 -5
  11. package/esm2020/lib/components/list/o-list.component.mjs +2 -1
  12. package/esm2020/lib/components/o-service-base-component.class.mjs +24 -9
  13. package/esm2020/lib/components/o-service-component.class.mjs +2 -1
  14. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +26 -4
  15. package/esm2020/lib/components/table/o-table.component.mjs +7 -3
  16. package/esm2020/lib/config/o-modules.mjs +5 -3
  17. package/esm2020/lib/i18n/i18n.mjs +9 -3
  18. package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +2 -0
  19. package/esm2020/lib/interfaces/index.mjs +3 -1
  20. package/esm2020/lib/interfaces/pagination-context.interface.mjs +2 -0
  21. package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
  22. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +1 -1
  23. package/esm2020/lib/ontimize-web-ngx.module.mjs +7 -6
  24. package/esm2020/lib/services/base-service.class.mjs +12 -1
  25. package/esm2020/lib/services/index.mjs +2 -1
  26. package/esm2020/lib/services/pagination-context.service.mjs +25 -0
  27. package/fesm2015/ontimize-web-ngx.mjs +496 -42
  28. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  29. package/fesm2020/ontimize-web-ngx.mjs +487 -42
  30. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  31. package/lib/components/input/date-range/o-daterange-input.component.d.ts +47 -33
  32. package/lib/components/input/date-range/o-daterange-input.module.d.ts +4 -6
  33. package/lib/components/input/date-range-legacy/o-daterange-input.component.d.ts +70 -0
  34. package/lib/components/input/date-range-legacy/o-daterange-input.module.d.ts +11 -0
  35. package/lib/components/input/index.d.ts +6 -4
  36. package/lib/components/o-service-base-component.class.d.ts +1 -0
  37. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  38. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +4 -2
  39. package/lib/i18n/i18n.d.ts +6 -0
  40. package/lib/interfaces/form-layout-manager.interface.d.ts +43 -0
  41. package/lib/interfaces/index.d.ts +2 -0
  42. package/lib/interfaces/pagination-context.interface.d.ts +6 -0
  43. package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +30 -12
  44. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
  45. package/lib/ontimize-web-ngx.module.d.ts +5 -4
  46. package/lib/services/base-service.class.d.ts +6 -0
  47. package/lib/services/index.d.ts +1 -0
  48. package/lib/services/pagination-context.service.d.ts +11 -0
  49. package/package.json +1 -1
  50. package/theme.scss +2 -2
  51. package/esm2020/lib/components/input/date-range/o-daterange-input.directive.mjs +0 -381
  52. package/esm2020/lib/components/input/date-range/o-daterange-picker.component.mjs +0 -1009
  53. package/esm2020/lib/components/input/date-range/o-daterange-picker.config.mjs +0 -2
  54. /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-input.directive.d.ts +0 -0
  55. /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-picker.component.d.ts +0 -0
  56. /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-picker.config.d.ts +0 -0
@@ -213,8 +213,14 @@ export class OFormNavigationClass {
213
213
  }
214
214
  const navData = this.navigationService.getLastItem();
215
215
  if (navData) {
216
- const extras = {};
216
+ let extras = {};
217
217
  extras[Codes.QUERY_PARAMS] = navData.queryParams;
218
+ if (options?.exitWithoutConfirmation) {
219
+ const ignore = { [Codes.IGNORE_CAN_DEACTIVATE]: options.exitWithoutConfirmation };
220
+ extras.queryParams = {
221
+ ...extras.queryParams, ...ignore
222
+ };
223
+ }
218
224
  this.router.navigate([navData.url], extras);
219
225
  }
220
226
  }
@@ -413,4 +419,4 @@ export class OFormNavigationClass {
413
419
  }, activeMode);
414
420
  }
415
421
  }
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLm5hdmlnYXRpb24uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL25hdmlnYXRpb24vby1mb3JtLm5hdmlnYXRpb24uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sc0NBQXNDLENBQUM7QUFLMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFdkcsTUFBTSxPQUFPLG9CQUFvQjtJQTBCL0IsWUFDWSxRQUFrQixFQUNsQixJQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQXdCO1FBSHhCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQUNmLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQWYxQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUl0Qiw0QkFBdUIsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVoRixxQkFBZ0IsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQVczRSxJQUFJLENBQUMsaUJB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LE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztZQUNyQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CO1lBQ3JGLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDL0UsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQjtZQUNyRiw4QkFBOEI7U0FDL0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyLCBVcmxTZWdtZW50R3JvdXAgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0cy9mb3JtLWxheW91dC9kaWFsb2cvby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlLCBPTmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyxcbiAgRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGFcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZm9ybS1sYXlvdXQtZGV0YWlsLWNvbXBvbmVudC1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29uZmlybUV4aXRTZXJ2aWNlIH0gZnJvbSAnLi9vLWZvcm0tY29uZmlybS1leGl0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1CYXNlIH0gZnJvbSAnLi4vby1mb3JtLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgT0Zvcm1OYXZpZ2F0aW9uQ2xhc3Mge1xuXG4gIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlO1xuICBmb3JtTGF5b3V0RGlhbG9nOiBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgY29uZmlybUV4aXRTZXJ2aWNlOiBPRm9ybUNvbmZpcm1FeGl0U2VydmljZTtcblxuICBwcm90ZWN0ZWQgcVBhcmFtU3ViOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBxdWVyeVBhcmFtczogYW55O1xuXG4gIHByb3RlY3RlZCB1cmxQYXJhbVN1YjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdXJsUGFyYW1zOiBvYmplY3Q7XG5cbiAgcHJvdGVjdGVkIHVybFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdXJsU2VnbWVudHM6IGFueSA9IFtdO1xuXG4gIHByb3RlY3RlZCBjb21iaW5lZE5hdmlnYXRpb25TdHJlYW06IE9ic2VydmFibGU8YW55PjtcbiAgcHJvdGVjdGVkIGNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25VcmxQYXJhbUNoYW5nZWRTdHJlYW06IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgbmF2aWdhdGlvblN0cmVhbTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByb3RlY3RlZCBvbkNsb3NlVGFiU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjYWNoZVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybTogT0Zvcm1CYXNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgYWN0Um91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuY29uZmlybUV4aXRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE9Gb3JtQ29uZmlybUV4aXRTZXJ2aWNlKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gcGFyZW50IGZvcm1MYXlvdXRNYW5hZ2VyXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZm9ybUxheW91dERpYWxvZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBObyBwYXJlbnQgZm9ybSBsYXlvdXQgZGlhbG9nXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUxheW91dERpYWxvZyAmJiAhdGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuZm9ybUxheW91dERpYWxvZy5mb3JtTGF5b3V0TWFuYWdlcjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbSA9IGNvbWJpbmVMYXRlc3QoW3NlbGYub25VcmxQYXJhbUNoYW5nZWRTdHJlYW0uYXNPYnNlcnZhYmxlKCldKTtcblxuICAgIHRoaXMuY29tYmluZWROYXZpZ2F0aW9uU3RyZWFtLnN1YnNjcmliZSh2YWxBcnIgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNBcnJheSh2YWxBcnIpICYmIHZhbEFyci5sZW5ndGggPT09IDEgJiYgdmFsQXJyWzBdKSB7XG4gICAgICAgIHNlbGYubmF2aWdhdGlvblN0cmVhbS5lbWl0KHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucVBhcmFtU3ViKSB7XG4gICAgICB0aGlzLnFQYXJhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmxQYXJhbVN1Yikge1xuICAgICAgdGhpcy51cmxQYXJhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmxTdWIpIHtcbiAgICAgIHRoaXMudXJsU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb21iaW5lZE5hdmlnYXRpb25TdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zKCkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBjYWNoZURhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRGb3JtQ2FjaGVEYXRhKCk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2FjaGVEYXRhKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gY2FjaGVEYXRhLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuICAgICAgICB0aGlzLnBhcnNlUXVlcnlQYXJhbXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnFQYXJhbVN1YiA9IHRoaXMuYWN0Um91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBzZWxmLnF1ZXJ5UGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgIHNlbGYucGFyc2VRdWVyeVBhcmFtcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgaXNEZXRhaWwgPSB0aGlzLnF1ZXJ5UGFyYW1zW0NvZGVzLklTX0RFVEFJTF07XG4gICAgLy8gZW5zdXJpbmcgaXNkZXRhaWwgPSBmYWxzZSB3aGVuIHVzaW5nIGZvcm0gbGF5b3V0IG1hbmFnZXJcbiAgICB0aGlzLmZvcm0uaXNEZXRhaWxGb3JtID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA/IGZhbHNlIDogKGlzRGV0YWlsID09PSAndHJ1ZScpO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9VcmxQYXJhbXMoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgIGNvbnN0IGNhY2hlRGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldEZvcm1DYWNoZURhdGEoKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjYWNoZURhdGEpKSB7XG4gICAgICAgIHRoaXMudXJsUGFyYW1zID0gY2FjaGVEYXRhLnBhcmFtcztcbiAgICAgICAgdGhpcy5wYXJzZVVybFBhcmFtcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXJsUGFyYW1TdWIgPSB0aGlzLmFjdFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgc2VsZi51cmxQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIHRoaXMucGFyc2VVcmxQYXJhbXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VVcmxQYXJhbXMoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudXJsUGFyYW1zKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnVybFBhcmFtc1tDb2Rlcy5QQVJFTlRfS0VZU19LRVldKSkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1QYXJlbnRLZXlzVmFsdWVzID0gVXRpbC5kZWNvZGVQYXJlbnRLZXlzKHRoaXMudXJsUGFyYW1zW0NvZGVzLlBBUkVOVF9LRVlTX0tFWV0pO1xuICAgIH1cbiAgICAvLyBUT0RPIE9idGFpbiAnZGF0YXR5cGUnIG9mIGVhY2gga2V5IGNvbnRhaW5lZCBpbnRvIHVybFBhcmFtcyBmb3JcbiAgICAvLyBmb3IgYnVpbGRpbmcgY29ycmVjdGx5IHF1ZXJ5IGZpbHRlciEhISFcbiAgICBpZiAodGhpcy51cmxQYXJhbXMpIHtcbiAgICAgIHRoaXMub25VcmxQYXJhbUNoYW5nZWRTdHJlYW0uZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb1VybCgpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgY29uc3QgY2FjaGVEYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Rm9ybUNhY2hlRGF0YSgpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNhY2hlRGF0YSkpIHtcbiAgICAgICAgdGhpcy51cmxTZWdtZW50cyA9IGNhY2hlRGF0YS51cmxTZWdtZW50cztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVybFN1YiA9IHRoaXMuYWN0Um91dGUudXJsLnN1YnNjcmliZSh1cmxTZWdtZW50cyA9PiB7XG4gICAgICAgIHNlbGYudXJsU2VnbWVudHMgPSB1cmxTZWdtZW50cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRvQ2FjaGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGZvcm1DYWNoZSA9IHRoaXMuZm9ybS5nZXRGb3JtQ2FjaGUoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGZvcm1DYWNoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWNoZVN0YXRlU3Vic2NyaXB0aW9uID0gZm9ybUNhY2hlLm9uQ2FjaGVTdGF0ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZUNoYW5nZWQgPSB0aGlzLmZvcm0uaXNJbml0aWFsU3RhdGVDaGFuZ2VkKCk7XG4gICAgICBjb25zdCB0cmlnZ2VyRXhpdENvbmZpcm0gPSB0aGlzLmZvcm0uY29uZmlybUV4aXQgJiYgdGhpcy5mb3JtLmlzSW5pdGlhbFN0YXRlQ2hhbmdlZCh0aGlzLmZvcm0uaWdub3JlT25FeGl0KTtcbiAgICAgIHRoaXMuc2V0TW9kaWZpZWRTdGF0ZShpbml0aWFsU3RhdGVDaGFuZ2VkLCB0cmlnZ2VyRXhpdENvbmZpcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VycmVudEtleXNWYWx1ZXMoKTogb2JqZWN0IHtcbiAgICBsZXQgZmlsdGVyID0ge307XG4gICAgaWYgKHRoaXMudXJsUGFyYW1zKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLmdldEZpbHRlckZyb21PYmplY3QodGhpcy51cmxQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJGcm9tT2JqZWN0KG9iamVjdFBhcmFtOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcbiAgICBpZiAoIW9iamVjdFBhcmFtIHx8IE9iamVjdC5rZXlzKG9iamVjdFBhcmFtKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm0ua2V5c0FycmF5KSB7XG4gICAgICB0aGlzLmZvcm0ua2V5c0FycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdFBhcmFtW2tleV0pIHtcbiAgICAgICAgICBmaWx0ZXJba2V5XSA9IFNRTFR5cGVzLnBhcnNlVXNpbmdTUUxUeXBlKG9iamVjdFBhcmFtW2tleV0sIHRoaXMuZm9ybS5rZXlzU3FsVHlwZXNBcnJheVtpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtLl9wS2V5c0VxdWl2KS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdXJsVmFsID0gb2JqZWN0UGFyYW1bdGhpcy5mb3JtLl9wS2V5c0VxdWl2W2l0ZW1dXTtcbiAgICAgIGlmICh1cmxWYWwpIHtcbiAgICAgICAgZmlsdGVyW2l0ZW1dID0gU1FMVHlwZXMucGFyc2VVc2luZ1NRTFR5cGUodXJsVmFsLCB0aGlzLmZvcm0ua2V5c1NxbFR5cGVzQXJyYXlbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgZ2V0RmlsdGVyRnJvbVVybFBhcmFtcygpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFVybFBhcmFtcygpIHx8IHt9KTtcbiAgICBjb25zdCB1cmxQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoZmlsdGVyIHx8IHt9KTtcbiAgICBpZiAodXJsUGFyYW1zS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB1cmxQYXJhbXNLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gQ29kZXMuUEFSRU5UX0tFWVNfS0VZKSB7XG4gICAgICAgICAgZGVsZXRlIGZpbHRlcltrZXldO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmlsdGVyLCB0aGlzLmZvcm0uZm9ybVBhcmVudEtleXNWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGdldFVybFNlZ21lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnVybFNlZ21lbnRzO1xuICB9XG5cbiAgZ2V0UXVlcnlQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXM7XG4gIH1cblxuICBzZXRVcmxQYXJhbXModmFsOiBvYmplY3QpIHtcbiAgICB0aGlzLnVybFBhcmFtcyA9IHZhbDtcbiAgfVxuXG4gIGdldFVybFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy51cmxQYXJhbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0TW9kaWZpZWRTdGF0ZShtb2RpZmllZDogYm9vbGVhbiwgY29uZmlybUV4aXQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5zZXRNb2RpZmllZFN0YXRlKHRoaXMuZm9ybS5nZXRBdHRyaWJ1dGUoKSwgbW9kaWZpZWQsIGNvbmZpcm1FeGl0KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBpc0luSW5zZXJ0TW9kZSA9IHRoaXMuZm9ybS5pc0luSW5zZXJ0TW9kZSgpO1xuICAgICAgbGV0IGZvcm1EYXRhO1xuICAgICAgaWYgKGlzSW5JbnNlcnRNb2RlKSB7XG4gICAgICAgIGZvcm1EYXRhID0ge307XG4gICAgICAgIGZvcm1EYXRhLm5ld190YWJfdGl0bGUgPSAnTEFZT1VUX01BTkFOR0VSLklOU0VSVElPTl9NT0RFX1RJVExFJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd1RvVXBkYXRlTmF2aWdhdGlvbih0aGlzLmZvcm0uZ2V0QXR0cmlidXRlKCkpKSB7XG4gICAgICAgIGZvcm1EYXRhID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5mb3JtRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZvcm1EYXRhW2tleV0gPSB0aGlzLmZvcm0uZm9ybURhdGFba2V5XS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybURhdGEpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci51cGRhdGVOYXZpZ2F0aW9uKGZvcm1EYXRhLCB0aGlzLmZvcm0uZ2V0S2V5c1ZhbHVlcygpLCBpc0luSW5zZXJ0TW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVCYWNrKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbChvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICBjb25zdCBleHRyYXMgPSB7fTtcbiAgICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBuYXZEYXRhLnF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmF2RGF0YS51cmxdLCBleHRyYXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsb3NlRGV0YWlsQWN0aW9uKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbChvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZm9ybS5iZWZvcmVDbG9zZURldGFpbC5lbWl0KCk7XG4gICAgICAvLyBgcmVtb3ZlTGFzdEl0ZW1zVW50aWxNYWluYCBtYXkgbm90IHJlbW92ZSBhbGwgbmVjZXNzYXJ5IGl0ZW1zIHNvIGN1cnJlbnQgcm91dGUgd2lsbCBiZSBjaGVja2VkIGJlbG93XG4gICAgICBpZiAoIXRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW1zVW50aWxNYWluKCkpIHtcbiAgICAgICAgLy8gYHJlbW92ZUxhc3RJdGVtc1VudGlsTWFpbmAgZGlkbid0IGZpbmQgdGhlIG1haW4gbmF2aWdhdGlvbiBpdGVtXG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgbmF2RGF0YTogT05hdmlnYXRpb25JdGVtID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRMYXN0SXRlbSgpO1xuICAgICAgaWYgKG5hdkRhdGEpIHtcbiAgICAgICAgLy8gaWYgbmF2RGF0YSByb3V0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCByb3V0ZSwgcmVtb3ZlIGxhc3QgaXRlbVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc0N1cnJlbnRSb3V0ZShuYXZEYXRhLnVybCkpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlbW92ZUxhc3RJdGVtKCk7XG4gICAgICAgICAgbmF2RGF0YSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TGFzdEl0ZW0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge307XG4gICAgICAgIGV4dHJhcy5xdWVyeVBhcmFtcyA9IHsgLi4ubmF2RGF0YS5xdWVyeVBhcmFtcyB9O1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmV4aXRXaXRob3V0Q29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlID0geyBbQ29kZXMuSUdOT1JFX0NBTl9ERUFDVElWQVRFXTogb3B0aW9ucy5leGl0V2l0aG91dENvbmZpcm1hdGlvbiB9O1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXh0cmFzLnF1ZXJ5UGFyYW1zLCBpZ25vcmUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZEYXRhLnVybF0sIGV4dHJhcykudGhlbih2YWwgPT4ge1xuICAgICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmNoYW5nZVRvb2xiYXJNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0Rm9ybVRvb2xiYXIoKS5zZXRJbml0aWFsTW9kZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RheUluUmVjb3JkQWZ0ZXJJbnNlcnQoaW5zZXJ0ZWRLZXlzOiBvYmplY3QpIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZSAmJiB0aGlzLmZvcm0ua2V5c0FycmF5ICYmIGluc2VydGVkS2V5cykge1xuICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgY29uc3QgY2xvc2VPcHRzOiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zID0geyBleGl0V2l0aG91dENvbmZpcm1hdGlvbjogdHJ1ZSB9O1xuICAgICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmNsb3NlRGV0YWlsKGNsb3NlT3B0cyk7XG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlICduZXcnIG5hdmlnYXRpb24gaXRlbSBmcm9tIGhpc3RvcnlcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZW1vdmVMYXN0SXRlbSgpO1xuICAgICAgfVxuICAgICAgbGV0IHBhcmFtczogYW55W10gPSBbXTtcbiAgICAgIHRoaXMuZm9ybS5rZXlzQXJyYXkuZm9yRWFjaCgoY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoaW5zZXJ0ZWRLZXlzW2N1cnJlbnRdKSB7XG4gICAgICAgICAgcGFyYW1zLnB1c2goaW5zZXJ0ZWRLZXlzW2N1cnJlbnRdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgZXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge307XG4gICAgICBsZXQgcVBhcmFtczogYW55ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRRdWVyeVBhcmFtcygpLCBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpKTtcbiAgICAgIC8vIGRlbGV0aW5nIGluc2VydGlvbk1vZGUgY3VycmVudCBxdWVyeVBhcmFtXG4gICAgICBkZWxldGUgcVBhcmFtc1tDb2Rlcy5JTlNFUlRJT05fTU9ERV07XG4gICAgICAvLyBJZ25vcmluZyBjdXJyZW50IGNsb3NlZCBmb3JtICh0aGUgaW5zZXJ0aW9uIGZvcm0pXG4gICAgICBxUGFyYW1zW0NvZGVzLklHTk9SRV9DQU5fREVBQ1RJVkFURV0gPSB0cnVlO1xuICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBxUGFyYW1zO1xuICAgICAgbGV0IHJvdXRlID0gW107XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RNYWluTmF2aWdhdGlvblJvdXRlRGF0YSgpO1xuICAgICAgaWYgKG5hdkRhdGEpIHtcbiAgICAgICAgbGV0IHVybCA9IG5hdkRhdGEudXJsO1xuICAgICAgICBjb25zdCBkZXRhaWxSb3V0ZSA9IG5hdkRhdGEuZ2V0RGV0YWlsRm9ybVJvdXRlKCk7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChkZXRhaWxSb3V0ZSkpIHtcbiAgICAgICAgICByb3V0ZS5wdXNoKGRldGFpbFJvdXRlKTtcbiAgICAgICAgICBjb25zdCBkZXRhaWxJbmRleCA9IHVybC5sYXN0SW5kZXhPZignLycgKyBkZXRhaWxSb3V0ZSk7XG4gICAgICAgICAgaWYgKGRldGFpbEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygwLCBkZXRhaWxJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJvdXRlLnVuc2hpZnQodXJsKTtcbiAgICAgICAgcm91dGUucHVzaCguLi5wYXJhbXMpO1xuICAgICAgICAvLyBkZWxldGluZyBpbnNlcnRGb3JtUm91dGUgYXMgYWN0aXZlIG1vZGUgKGJlY2F1c2Ugc3RheUluUmVjb3JkQWZ0ZXJJbnNlcnQgY2hhbmdlcyBpdClcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5kZWxldGVBY3RpdmVGb3JtTW9kZShuYXZEYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhcy5yZWxhdGl2ZVRvID0gdGhpcy5hY3RSb3V0ZTtcbiAgICAgICAgcm91dGUgPSBbJy4uLycsIC4uLnBhcmFtc107XG4gICAgICB9XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSwgZXh0cmFzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvICdpbnNlcnQnIG1vZGVcbiAgICovXG4gIGdvSW5zZXJ0TW9kZShvcHRpb25zPzogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd05hdmlnYXRpb24oKSkge1xuICAgICAgdGhpcy5mb3JtLnNldEluc2VydE1vZGUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm91dGUgPSBbXTtcbiAgICAgIGNvbnN0IGV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHt9O1xuICAgICAgY29uc3QgbmF2RGF0YTogT05hdmlnYXRpb25JdGVtID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRMYXN0TWFpbk5hdmlnYXRpb25Sb3V0ZURhdGEoKTtcbiAgICAgIGlmICghdGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiBuYXZEYXRhKSB7XG4gICAgICAgIHJvdXRlLnB1c2gobmF2RGF0YS51cmwpO1xuICAgICAgICBjb25zdCBkZXRhaWxSb3V0ZSA9IG5hdkRhdGEuZ2V0RGV0YWlsRm9ybVJvdXRlKCk7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChkZXRhaWxSb3V0ZSkpIHtcbiAgICAgICAgICByb3V0ZS5wdXNoKGRldGFpbFJvdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByb3V0ZS5wdXNoKG5hdkRhdGEuZ2V0SW5zZXJ0Rm9ybVJvdXRlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0cmFzLnJlbGF0aXZlVG8gPSB0aGlzLmFjdFJvdXRlO1xuICAgICAgICByb3V0ZSA9IFtDb2Rlcy5ERUZBVUxUX0lOU0VSVF9ST1VURV07XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNUYWJNb2RlKCkpIHtcbiAgICAgICAgICBleHRyYXMucXVlcnlQYXJhbXMgPSB7fTtcbiAgICAgICAgICBleHRyYXMucXVlcnlQYXJhbXNbQ29kZXMuSU5TRVJUSU9OX01PREVdID0gJ3RydWUnO1xuICAgICAgICAgIGV4dHJhcy5xdWVyeVBhcmFtc1tDb2Rlcy5JR05PUkVfQ0FOX0RFQUNUSVZBVEVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKCdpbnNlcnRGb3JtUm91dGUnLCAhIXRoaXMuZm9ybUxheW91dE1hbmFnZXIpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykudGhlbigodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmNoYW5nZVRvb2xiYXJNb2RlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldEZvcm1Ub29sYmFyKCkuc2V0SW5zZXJ0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvICdlZGl0JyBtb2RlXG4gICAqL1xuICBnb0VkaXRNb2RlKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmFsbG93TmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmZvcm0uc2V0VXBkYXRlTW9kZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgbGV0IHJvdXRlID0gW107XG4gICAgICBjb25zdCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgIGlmICh0aGlzLmZvcm0uaXNEZXRhaWxGb3JtKSB7XG4gICAgICAgIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdID0gQ29kZXMuZ2V0SXNEZXRhaWxPYmplY3QoKTtcbiAgICAgIH1cbiAgICAgIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRRdWVyeVBhcmFtcygpLCBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSB8fCB7fSk7XG5cbiAgICAgIGNvbnN0IHBhcmFtczogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZ2V0VXJsUGFyYW1zKCk7XG4gICAgICB0aGlzLmZvcm0ua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHVybFBhcmFtc1trZXldKSB7XG4gICAgICAgICAgcGFyYW1zLnB1c2godXJsUGFyYW1zW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5hdkRhdGE6IE9OYXZpZ2F0aW9uSXRlbSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJldmlvdXNSb3V0ZURhdGEoKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChuYXZEYXRhKSkge1xuICAgICAgICByb3V0ZS5wdXNoKG5hdkRhdGEudXJsKTtcbiAgICAgICAgY29uc3QgZGV0YWlsUm91dGUgPSBuYXZEYXRhLmdldERldGFpbEZvcm1Sb3V0ZSgpO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoZGV0YWlsUm91dGUpKSB7XG4gICAgICAgICAgcm91dGUucHVzaChkZXRhaWxSb3V0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcm91dGUucHVzaCguLi5wYXJhbXMpO1xuICAgICAgICByb3V0ZS5wdXNoKG5hdkRhdGEuZ2V0RWRpdEZvcm1Sb3V0ZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhcy5yZWxhdGl2ZVRvID0gdGhpcy5hY3RSb3V0ZTtcbiAgICAgICAgcm91dGUgPSBbJy4uLycsIC4uLnBhcmFtcywgQ29kZXMuREVGQVVMVF9FRElUX1JPVVRFXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcygnZWRpdEZvcm1Sb3V0ZScpO1xuICAgICAgdGhpcy5mb3JtLmJlZm9yZVVwZGF0ZU1vZGUuZW1pdCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykudGhlbigodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmNoYW5nZVRvb2xiYXJNb2RlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldEZvcm1Ub29sYmFyKCkuc2V0RWRpdE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXROZXN0ZWRMZXZlbHNOdW1iZXIoKSB7XG4gICAgbGV0IGFjdFJvdXRlID0gdGhpcy5hY3RSb3V0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGFjdFJvdXRlLnBhcmVudCkge1xuICAgICAgYWN0Um91dGUgPSBhY3RSb3V0ZS5wYXJlbnQ7XG4gICAgICBhY3RSb3V0ZS51cmwuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ICYmIHgubGVuZ3RoKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGdldEZ1bGxVcmxTZWdtZW50cygpIHtcbiAgICBsZXQgZnVsbFVybFNlZ21lbnRzID0gW107XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5yb3V0ZXI7XG4gICAgaWYgKHJvdXRlciAmJiByb3V0ZXIudXJsICYmIHJvdXRlci51cmwubGVuZ3RoKSB7XG4gICAgICBjb25zdCByb290OiBVcmxTZWdtZW50R3JvdXAgPSByb3V0ZXIucGFyc2VVcmwocm91dGVyLnVybCkucm9vdDtcbiAgICAgIGlmIChyb290ICYmIHJvb3QuaGFzQ2hpbGRyZW4oKSAmJiByb290LmNoaWxkcmVuLnByaW1hcnkpIHtcbiAgICAgICAgZnVsbFVybFNlZ21lbnRzID0gcm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVsbFVybFNlZ21lbnRzO1xuICB9XG5cbiAgc2hvd0NvbmZpcm1EaXNjYXJkQ2hhbmdlcyhpZ25vcmVBdHRyczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpcm1FeGl0U2VydmljZS5zdWJzY3JpYmVUb0Rpc2NhcmRDaGFuZ2VzKHRoaXMuZm9ybSwgaWdub3JlQXR0cnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoYWN0aXZlTW9kZTogc3RyaW5nLCBtYWluRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcHJldlJvdXRlRGF0YSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJldmlvdXNSb3V0ZURhdGEoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHByZXZSb3V0ZURhdGEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcm1Sb3V0ZXMgPSBwcmV2Um91dGVEYXRhLmZvcm1Sb3V0ZXM7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zdG9yZUZvcm1Sb3V0ZXMoe1xuICAgICAgZGV0YWlsRm9ybVJvdXRlOiBmb3JtUm91dGVzID8gZm9ybVJvdXRlcy5kZXRhaWxGb3JtUm91dGUgOiBDb2Rlcy5ERUZBVUxUX0RFVEFJTF9ST1VURSxcbiAgICAgIGVkaXRGb3JtUm91dGU6IGZvcm1Sb3V0ZXMgPyBmb3JtUm91dGVzLmVkaXRGb3JtUm91dGUgOiBDb2Rlcy5ERUZBVUxUX0VESVRfUk9VVEUsXG4gICAgICBpbnNlcnRGb3JtUm91dGU6IGZvcm1Sb3V0ZXMgPyBmb3JtUm91dGVzLmluc2VydEZvcm1Sb3V0ZSA6IENvZGVzLkRFRkFVTFRfSU5TRVJUX1JPVVRFLFxuICAgICAgbWFpbkZvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50XG4gICAgfSwgYWN0aXZlTW9kZSk7XG4gIH1cblxufVxuIl19
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLm5hdmlnYXRpb24uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL25hdmlnYXRpb24vby1mb3JtLm5hdmlnYXRpb24uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sc0NBQXNDLENBQUM7QUFLMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFdkcsTUFBTSxPQUFPLG9CQUFvQjtJQTBCL0IsWUFDWSxRQUFrQixFQUNsQixJQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQXdCO1FBSHhCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQUNmLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQWYxQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUl0Qiw0QkFBdUIsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVoRixxQkFBZ0IsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQVczRSxJQUFJLENBQUMsaUJB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Q0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVTLHlCQUF5QixDQUFDLFVBQWtCLEVBQUUsOEJBQXdDO1FBQzlGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUNELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztZQUNyQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CO1lBQ3JGLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDL0UsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQjtZQUNyRiw4QkFBOEI7U0FDL0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyLCBVcmxTZWdtZW50R3JvdXAgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0cy9mb3JtLWxheW91dC9kaWFsb2cvby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlLCBPTmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyxcbiAgRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGFcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZm9ybS1sYXlvdXQtZGV0YWlsLWNvbXBvbmVudC1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29uZmlybUV4aXRTZXJ2aWNlIH0gZnJvbSAnLi9vLWZvcm0tY29uZmlybS1leGl0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1CYXNlIH0gZnJvbSAnLi4vby1mb3JtLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgT0Zvcm1OYXZpZ2F0aW9uQ2xhc3Mge1xuXG4gIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlO1xuICBmb3JtTGF5b3V0RGlhbG9nOiBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgY29uZmlybUV4aXRTZXJ2aWNlOiBPRm9ybUNvbmZpcm1FeGl0U2VydmljZTtcblxuICBwcm90ZWN0ZWQgcVBhcmFtU3ViOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBxdWVyeVBhcmFtczogYW55O1xuXG4gIHByb3RlY3RlZCB1cmxQYXJhbVN1YjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdXJsUGFyYW1zOiBvYmplY3Q7XG5cbiAgcHJvdGVjdGVkIHVybFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdXJsU2VnbWVudHM6IGFueSA9IFtdO1xuXG4gIHByb3RlY3RlZCBjb21iaW5lZE5hdmlnYXRpb25TdHJlYW06IE9ic2VydmFibGU8YW55PjtcbiAgcHJvdGVjdGVkIGNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25VcmxQYXJhbUNoYW5nZWRTdHJlYW06IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgbmF2aWdhdGlvblN0cmVhbTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByb3RlY3RlZCBvbkNsb3NlVGFiU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjYWNoZVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybTogT0Zvcm1CYXNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgYWN0Um91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuY29uZmlybUV4aXRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE9Gb3JtQ29uZmlybUV4aXRTZXJ2aWNlKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gcGFyZW50IGZvcm1MYXlvdXRNYW5hZ2VyXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZm9ybUxheW91dERpYWxvZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBObyBwYXJlbnQgZm9ybSBsYXlvdXQgZGlhbG9nXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUxheW91dERpYWxvZyAmJiAhdGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuZm9ybUxheW91dERpYWxvZy5mb3JtTGF5b3V0TWFuYWdlcjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbSA9IGNvbWJpbmVMYXRlc3QoW3NlbGYub25VcmxQYXJhbUNoYW5nZWRTdHJlYW0uYXNPYnNlcnZhYmxlKCldKTtcblxuICAgIHRoaXMuY29tYmluZWROYXZpZ2F0aW9uU3RyZWFtLnN1YnNjcmliZSh2YWxBcnIgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNBcnJheSh2YWxBcnIpICYmIHZhbEFyci5sZW5ndGggPT09IDEgJiYgdmFsQXJyWzBdKSB7XG4gICAgICAgIHNlbGYubmF2aWdhdGlvblN0cmVhbS5lbWl0KHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucVBhcmFtU3ViKSB7XG4gICAgICB0aGlzLnFQYXJhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmxQYXJhbVN1Yikge1xuICAgICAgdGhpcy51cmxQYXJhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmxTdWIpIHtcbiAgICAgIHRoaXMudXJsU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbWJpbmVkTmF2aWdhdGlvblN0cmVhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb21iaW5lZE5hdmlnYXRpb25TdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zKCkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBjYWNoZURhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRGb3JtQ2FjaGVEYXRhKCk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2FjaGVEYXRhKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gY2FjaGVEYXRhLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuICAgICAgICB0aGlzLnBhcnNlUXVlcnlQYXJhbXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnFQYXJhbVN1YiA9IHRoaXMuYWN0Um91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBzZWxmLnF1ZXJ5UGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgIHNlbGYucGFyc2VRdWVyeVBhcmFtcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgaXNEZXRhaWwgPSB0aGlzLnF1ZXJ5UGFyYW1zW0NvZGVzLklTX0RFVEFJTF07XG4gICAgLy8gZW5zdXJpbmcgaXNkZXRhaWwgPSBmYWxzZSB3aGVuIHVzaW5nIGZvcm0gbGF5b3V0IG1hbmFnZXJcbiAgICB0aGlzLmZvcm0uaXNEZXRhaWxGb3JtID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA/IGZhbHNlIDogKGlzRGV0YWlsID09PSAndHJ1ZScpO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9VcmxQYXJhbXMoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgIGNvbnN0IGNhY2hlRGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldEZvcm1DYWNoZURhdGEoKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjYWNoZURhdGEpKSB7XG4gICAgICAgIHRoaXMudXJsUGFyYW1zID0gY2FjaGVEYXRhLnBhcmFtcztcbiAgICAgICAgdGhpcy5wYXJzZVVybFBhcmFtcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXJsUGFyYW1TdWIgPSB0aGlzLmFjdFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgc2VsZi51cmxQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIHRoaXMucGFyc2VVcmxQYXJhbXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VVcmxQYXJhbXMoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudXJsUGFyYW1zKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnVybFBhcmFtc1tDb2Rlcy5QQVJFTlRfS0VZU19LRVldKSkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1QYXJlbnRLZXlzVmFsdWVzID0gVXRpbC5kZWNvZGVQYXJlbnRLZXlzKHRoaXMudXJsUGFyYW1zW0NvZGVzLlBBUkVOVF9LRVlTX0tFWV0pO1xuICAgIH1cbiAgICAvLyBUT0RPIE9idGFpbiAnZGF0YXR5cGUnIG9mIGVhY2gga2V5IGNvbnRhaW5lZCBpbnRvIHVybFBhcmFtcyBmb3JcbiAgICAvLyBmb3IgYnVpbGRpbmcgY29ycmVjdGx5IHF1ZXJ5IGZpbHRlciEhISFcbiAgICBpZiAodGhpcy51cmxQYXJhbXMpIHtcbiAgICAgIHRoaXMub25VcmxQYXJhbUNoYW5nZWRTdHJlYW0uZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb1VybCgpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgY29uc3QgY2FjaGVEYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Rm9ybUNhY2hlRGF0YSgpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNhY2hlRGF0YSkpIHtcbiAgICAgICAgdGhpcy51cmxTZWdtZW50cyA9IGNhY2hlRGF0YS51cmxTZWdtZW50cztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVybFN1YiA9IHRoaXMuYWN0Um91dGUudXJsLnN1YnNjcmliZSh1cmxTZWdtZW50cyA9PiB7XG4gICAgICAgIHNlbGYudXJsU2VnbWVudHMgPSB1cmxTZWdtZW50cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRvQ2FjaGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGZvcm1DYWNoZSA9IHRoaXMuZm9ybS5nZXRGb3JtQ2FjaGUoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGZvcm1DYWNoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWNoZVN0YXRlU3Vic2NyaXB0aW9uID0gZm9ybUNhY2hlLm9uQ2FjaGVTdGF0ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZUNoYW5nZWQgPSB0aGlzLmZvcm0uaXNJbml0aWFsU3RhdGVDaGFuZ2VkKCk7XG4gICAgICBjb25zdCB0cmlnZ2VyRXhpdENvbmZpcm0gPSB0aGlzLmZvcm0uY29uZmlybUV4aXQgJiYgdGhpcy5mb3JtLmlzSW5pdGlhbFN0YXRlQ2hhbmdlZCh0aGlzLmZvcm0uaWdub3JlT25FeGl0KTtcbiAgICAgIHRoaXMuc2V0TW9kaWZpZWRTdGF0ZShpbml0aWFsU3RhdGVDaGFuZ2VkLCB0cmlnZ2VyRXhpdENvbmZpcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VycmVudEtleXNWYWx1ZXMoKTogb2JqZWN0IHtcbiAgICBsZXQgZmlsdGVyID0ge307XG4gICAgaWYgKHRoaXMudXJsUGFyYW1zKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLmdldEZpbHRlckZyb21PYmplY3QodGhpcy51cmxQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJGcm9tT2JqZWN0KG9iamVjdFBhcmFtOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcbiAgICBpZiAoIW9iamVjdFBhcmFtIHx8IE9iamVjdC5rZXlzKG9iamVjdFBhcmFtKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm0ua2V5c0FycmF5KSB7XG4gICAgICB0aGlzLmZvcm0ua2V5c0FycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdFBhcmFtW2tleV0pIHtcbiAgICAgICAgICBmaWx0ZXJba2V5XSA9IFNRTFR5cGVzLnBhcnNlVXNpbmdTUUxUeXBlKG9iamVjdFBhcmFtW2tleV0sIHRoaXMuZm9ybS5rZXlzU3FsVHlwZXNBcnJheVtpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtLl9wS2V5c0VxdWl2KS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdXJsVmFsID0gb2JqZWN0UGFyYW1bdGhpcy5mb3JtLl9wS2V5c0VxdWl2W2l0ZW1dXTtcbiAgICAgIGlmICh1cmxWYWwpIHtcbiAgICAgICAgZmlsdGVyW2l0ZW1dID0gU1FMVHlwZXMucGFyc2VVc2luZ1NRTFR5cGUodXJsVmFsLCB0aGlzLmZvcm0ua2V5c1NxbFR5cGVzQXJyYXlbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgZ2V0RmlsdGVyRnJvbVVybFBhcmFtcygpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFVybFBhcmFtcygpIHx8IHt9KTtcbiAgICBjb25zdCB1cmxQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoZmlsdGVyIHx8IHt9KTtcbiAgICBpZiAodXJsUGFyYW1zS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB1cmxQYXJhbXNLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gQ29kZXMuUEFSRU5UX0tFWVNfS0VZKSB7XG4gICAgICAgICAgZGVsZXRlIGZpbHRlcltrZXldO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmlsdGVyLCB0aGlzLmZvcm0uZm9ybVBhcmVudEtleXNWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGdldFVybFNlZ21lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnVybFNlZ21lbnRzO1xuICB9XG5cbiAgZ2V0UXVlcnlQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXM7XG4gIH1cblxuICBzZXRVcmxQYXJhbXModmFsOiBvYmplY3QpIHtcbiAgICB0aGlzLnVybFBhcmFtcyA9IHZhbDtcbiAgfVxuXG4gIGdldFVybFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy51cmxQYXJhbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0TW9kaWZpZWRTdGF0ZShtb2RpZmllZDogYm9vbGVhbiwgY29uZmlybUV4aXQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5zZXRNb2RpZmllZFN0YXRlKHRoaXMuZm9ybS5nZXRBdHRyaWJ1dGUoKSwgbW9kaWZpZWQsIGNvbmZpcm1FeGl0KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBpc0luSW5zZXJ0TW9kZSA9IHRoaXMuZm9ybS5pc0luSW5zZXJ0TW9kZSgpO1xuICAgICAgbGV0IGZvcm1EYXRhO1xuICAgICAgaWYgKGlzSW5JbnNlcnRNb2RlKSB7XG4gICAgICAgIGZvcm1EYXRhID0ge307XG4gICAgICAgIGZvcm1EYXRhLm5ld190YWJfdGl0bGUgPSAnTEFZT1VUX01BTkFOR0VSLklOU0VSVElPTl9NT0RFX1RJVExFJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd1RvVXBkYXRlTmF2aWdhdGlvbih0aGlzLmZvcm0uZ2V0QXR0cmlidXRlKCkpKSB7XG4gICAgICAgIGZvcm1EYXRhID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5mb3JtRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZvcm1EYXRhW2tleV0gPSB0aGlzLmZvcm0uZm9ybURhdGFba2V5XS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybURhdGEpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci51cGRhdGVOYXZpZ2F0aW9uKGZvcm1EYXRhLCB0aGlzLmZvcm0uZ2V0S2V5c1ZhbHVlcygpLCBpc0luSW5zZXJ0TW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVCYWNrKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbChvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICBsZXQgZXh0cmFzOk5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBuYXZEYXRhLnF1ZXJ5UGFyYW1zO1xuICAgICAgICBpZiAob3B0aW9ucz8uZXhpdFdpdGhvdXRDb25maXJtYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBpZ25vcmUgPSB7IFtDb2Rlcy5JR05PUkVfQ0FOX0RFQUNUSVZBVEVdOiBvcHRpb25zLmV4aXRXaXRob3V0Q29uZmlybWF0aW9uIH07XG4gICAgICAgICAgZXh0cmFzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgLi4uZXh0cmFzLnF1ZXJ5UGFyYW1zLCAuLi5pZ25vcmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZEYXRhLnVybF0sIGV4dHJhcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvc2VEZXRhaWxBY3Rpb24ob3B0aW9ucz86IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmNsb3NlRGV0YWlsKG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgdGhpcy5mb3JtLmJlZm9yZUNsb3NlRGV0YWlsLmVtaXQoKTtcbiAgICAgIC8vIGByZW1vdmVMYXN0SXRlbXNVbnRpbE1haW5gIG1heSBub3QgcmVtb3ZlIGFsbCBuZWNlc3NhcnkgaXRlbXMgc28gY3VycmVudCByb3V0ZSB3aWxsIGJlIGNoZWNrZWQgYmVsb3dcbiAgICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZW1vdmVMYXN0SXRlbXNVbnRpbE1haW4oKSkge1xuICAgICAgICAvLyBgcmVtb3ZlTGFzdEl0ZW1zVW50aWxNYWluYCBkaWRuJ3QgZmluZCB0aGUgbWFpbiBuYXZpZ2F0aW9uIGl0ZW1cbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZW1vdmVMYXN0SXRlbSgpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pZ25vcmVOYXZpZ2F0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICAvLyBpZiBuYXZEYXRhIHJvdXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHJvdXRlLCByZW1vdmUgbGFzdCBpdGVtXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzQ3VycmVudFJvdXRlKG5hdkRhdGEudXJsKSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgICAgICBuYXZEYXRhID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRMYXN0SXRlbSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgICAgZXh0cmFzLnF1ZXJ5UGFyYW1zID0geyAuLi5uYXZEYXRhLnF1ZXJ5UGFyYW1zIH07XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhpdFdpdGhvdXRDb25maXJtYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBpZ25vcmUgPSB7IFtDb2Rlcy5JR05PUkVfQ0FOX0RFQUNUSVZBVEVdOiBvcHRpb25zLmV4aXRXaXRob3V0Q29uZmlybWF0aW9uIH07XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihleHRyYXMucXVlcnlQYXJhbXMsIGlnbm9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25hdkRhdGEudXJsXSwgZXh0cmFzKS50aGVuKHZhbCA9PiB7XG4gICAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zICYmIG9wdGlvbnMuY2hhbmdlVG9vbGJhck1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXRGb3JtVG9vbGJhcigpLnNldEluaXRpYWxNb2RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF5SW5SZWNvcmRBZnRlckluc2VydChpbnNlcnRlZEtleXM6IG9iamVjdCkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlICYmIHRoaXMuZm9ybS5rZXlzQXJyYXkgJiYgaW5zZXJ0ZWRLZXlzKSB7XG4gICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgICBjb25zdCBjbG9zZU9wdHM6IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMgPSB7IGV4aXRXaXRob3V0Q29uZmlybWF0aW9uOiB0cnVlIH07XG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuY2xvc2VEZXRhaWwoY2xvc2VPcHRzKTtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5zZXRBc0FjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgJ25ldycgbmF2aWdhdGlvbiBpdGVtIGZyb20gaGlzdG9yeVxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlbW92ZUxhc3RJdGVtKCk7XG4gICAgICB9XG4gICAgICBsZXQgcGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgICAgdGhpcy5mb3JtLmtleXNBcnJheS5mb3JFYWNoKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGlmIChpbnNlcnRlZEtleXNbY3VycmVudF0pIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChpbnNlcnRlZEtleXNbY3VycmVudF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgIGxldCBxUGFyYW1zOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFF1ZXJ5UGFyYW1zKCksIENvZGVzLmdldElzRGV0YWlsT2JqZWN0KCkpO1xuICAgICAgLy8gZGVsZXRpbmcgaW5zZXJ0aW9uTW9kZSBjdXJyZW50IHF1ZXJ5UGFyYW1cbiAgICAgIGRlbGV0ZSBxUGFyYW1zW0NvZGVzLklOU0VSVElPTl9NT0RFXTtcbiAgICAgIC8vIElnbm9yaW5nIGN1cnJlbnQgY2xvc2VkIGZvcm0gKHRoZSBpbnNlcnRpb24gZm9ybSlcbiAgICAgIHFQYXJhbXNbQ29kZXMuSUdOT1JFX0NBTl9ERUFDVElWQVRFXSA9IHRydWU7XG4gICAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IHFQYXJhbXM7XG4gICAgICBsZXQgcm91dGUgPSBbXTtcbiAgICAgIGNvbnN0IG5hdkRhdGE6IE9OYXZpZ2F0aW9uSXRlbSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TGFzdE1haW5OYXZpZ2F0aW9uUm91dGVEYXRhKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICBsZXQgdXJsID0gbmF2RGF0YS51cmw7XG4gICAgICAgIGNvbnN0IGRldGFpbFJvdXRlID0gbmF2RGF0YS5nZXREZXRhaWxGb3JtUm91dGUoKTtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGRldGFpbFJvdXRlKSkge1xuICAgICAgICAgIHJvdXRlLnB1c2goZGV0YWlsUm91dGUpO1xuICAgICAgICAgIGNvbnN0IGRldGFpbEluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyArIGRldGFpbFJvdXRlKTtcbiAgICAgICAgICBpZiAoZGV0YWlsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIGRldGFpbEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcm91dGUudW5zaGlmdCh1cmwpO1xuICAgICAgICByb3V0ZS5wdXNoKC4uLnBhcmFtcyk7XG4gICAgICAgIC8vIGRlbGV0aW5nIGluc2VydEZvcm1Sb3V0ZSBhcyBhY3RpdmUgbW9kZSAoYmVjYXVzZSBzdGF5SW5SZWNvcmRBZnRlckluc2VydCBjaGFuZ2VzIGl0KVxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmRlbGV0ZUFjdGl2ZUZvcm1Nb2RlKG5hdkRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0cmFzLnJlbGF0aXZlVG8gPSB0aGlzLmFjdFJvdXRlO1xuICAgICAgICByb3V0ZSA9IFsnLi4vJywgLi4ucGFyYW1zXTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJvdXRlLCBleHRyYXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gJ2luc2VydCcgbW9kZVxuICAgKi9cbiAgZ29JbnNlcnRNb2RlKG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmFsbG93TmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmZvcm0uc2V0SW5zZXJ0TW9kZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5zZXRBc0FjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3V0ZSA9IFtdO1xuICAgICAgY29uc3QgZXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge307XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RNYWluTmF2aWdhdGlvblJvdXRlRGF0YSgpO1xuICAgICAgaWYgKCF0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIG5hdkRhdGEpIHtcbiAgICAgICAgcm91dGUucHVzaChuYXZEYXRhLnVybCk7XG4gICAgICAgIGNvbnN0IGRldGFpbFJvdXRlID0gbmF2RGF0YS5nZXREZXRhaWxGb3JtUm91dGUoKTtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGRldGFpbFJvdXRlKSkge1xuICAgICAgICAgIHJvdXRlLnB1c2goZGV0YWlsUm91dGUpO1xuICAgICAgICB9XG4gICAgICAgIHJvdXRlLnB1c2gobmF2RGF0YS5nZXRJbnNlcnRGb3JtUm91dGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRyYXMucmVsYXRpdmVUbyA9IHRoaXMuYWN0Um91dGU7XG4gICAgICAgIHJvdXRlID0gW0NvZGVzLkRFRkFVTFRfSU5TRVJUX1JPVVRFXTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc1RhYk1vZGUoKSkge1xuICAgICAgICAgIGV4dHJhcy5xdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgICAgIGV4dHJhcy5xdWVyeVBhcmFtc1tDb2Rlcy5JTlNFUlRJT05fTU9ERV0gPSAndHJ1ZSc7XG4gICAgICAgICAgZXh0cmFzLnF1ZXJ5UGFyYW1zW0NvZGVzLklHTk9SRV9DQU5fREVBQ1RJVkFURV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoJ2luc2VydEZvcm1Sb3V0ZScsICEhdGhpcy5mb3JtTGF5b3V0TWFuYWdlcik7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSwgZXh0cmFzKS50aGVuKCh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zICYmIG9wdGlvbnMuY2hhbmdlVG9vbGJhck1vZGUpIHtcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0Rm9ybVRvb2xiYXIoKS5zZXRJbnNlcnRNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gJ2VkaXQnIG1vZGVcbiAgICovXG4gIGdvRWRpdE1vZGUob3B0aW9ucz86IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuYWxsb3dOYXZpZ2F0aW9uKCkpIHtcbiAgICAgIHRoaXMuZm9ybS5zZXRVcGRhdGVNb2RlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICBsZXQgcm91dGUgPSBbXTtcbiAgICAgIGNvbnN0IGV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHt9O1xuICAgICAgaWYgKHRoaXMuZm9ybS5pc0RldGFpbEZvcm0pIHtcbiAgICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuICAgICAgfVxuICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFF1ZXJ5UGFyYW1zKCksIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdIHx8IHt9KTtcblxuICAgICAgY29uc3QgcGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRVcmxQYXJhbXMoKTtcbiAgICAgIHRoaXMuZm9ybS5rZXlzQXJyYXkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1zW2tleV0pIHtcbiAgICAgICAgICBwYXJhbXMucHVzaCh1cmxQYXJhbXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmF2RGF0YTogT05hdmlnYXRpb25JdGVtID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c1JvdXRlRGF0YSgpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG5hdkRhdGEpKSB7XG4gICAgICAgIHJvdXRlLnB1c2gobmF2RGF0YS51cmwpO1xuICAgICAgICBjb25zdCBkZXRhaWxSb3V0ZSA9IG5hdkRhdGEuZ2V0RGV0YWlsRm9ybVJvdXRlKCk7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChkZXRhaWxSb3V0ZSkpIHtcbiAgICAgICAgICByb3V0ZS5wdXNoKGRldGFpbFJvdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByb3V0ZS5wdXNoKC4uLnBhcmFtcyk7XG4gICAgICAgIHJvdXRlLnB1c2gobmF2RGF0YS5nZXRFZGl0Rm9ybVJvdXRlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0cmFzLnJlbGF0aXZlVG8gPSB0aGlzLmFjdFJvdXRlO1xuICAgICAgICByb3V0ZSA9IFsnLi4vJywgLi4ucGFyYW1zLCBDb2Rlcy5ERUZBVUxUX0VESVRfUk9VVEVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKCdlZGl0Rm9ybVJvdXRlJyk7XG4gICAgICB0aGlzLmZvcm0uYmVmb3JlVXBkYXRlTW9kZS5lbWl0KCk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSwgZXh0cmFzKS50aGVuKCh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zICYmIG9wdGlvbnMuY2hhbmdlVG9vbGJhck1vZGUpIHtcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0Rm9ybVRvb2xiYXIoKS5zZXRFZGl0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGdldE5lc3RlZExldmVsc051bWJlcigpIHtcbiAgICBsZXQgYWN0Um91dGUgPSB0aGlzLmFjdFJvdXRlO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoYWN0Um91dGUucGFyZW50KSB7XG4gICAgICBhY3RSb3V0ZSA9IGFjdFJvdXRlLnBhcmVudDtcbiAgICAgIGFjdFJvdXRlLnVybC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgaWYgKHggJiYgeC5sZW5ndGgpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0RnVsbFVybFNlZ21lbnRzKCkge1xuICAgIGxldCBmdWxsVXJsU2VnbWVudHMgPSBbXTtcbiAgICBjb25zdCByb3V0ZXIgPSB0aGlzLnJvdXRlcjtcbiAgICBpZiAocm91dGVyICYmIHJvdXRlci51cmwgJiYgcm91dGVyLnVybC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJvb3Q6IFVybFNlZ21lbnRHcm91cCA9IHJvdXRlci5wYXJzZVVybChyb3V0ZXIudXJsKS5yb290O1xuICAgICAgaWYgKHJvb3QgJiYgcm9vdC5oYXNDaGlsZHJlbigpICYmIHJvb3QuY2hpbGRyZW4ucHJpbWFyeSkge1xuICAgICAgICBmdWxsVXJsU2VnbWVudHMgPSByb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdWxsVXJsU2VnbWVudHM7XG4gIH1cblxuICBzaG93Q29uZmlybURpc2NhcmRDaGFuZ2VzKGlnbm9yZUF0dHJzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlybUV4aXRTZXJ2aWNlLnN1YnNjcmliZVRvRGlzY2FyZENoYW5nZXModGhpcy5mb3JtLCBpZ25vcmVBdHRycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcyhhY3RpdmVNb2RlOiBzdHJpbmcsIG1haW5Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwcmV2Um91dGVEYXRhID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c1JvdXRlRGF0YSgpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQocHJldlJvdXRlRGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJvdXRlcyA9IHByZXZSb3V0ZURhdGEuZm9ybVJvdXRlcztcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnN0b3JlRm9ybVJvdXRlcyh7XG4gICAgICBkZXRhaWxGb3JtUm91dGU6IGZvcm1Sb3V0ZXMgPyBmb3JtUm91dGVzLmRldGFpbEZvcm1Sb3V0ZSA6IENvZGVzLkRFRkFVTFRfREVUQUlMX1JPVVRFLFxuICAgICAgZWRpdEZvcm1Sb3V0ZTogZm9ybVJvdXRlcyA/IGZvcm1Sb3V0ZXMuZWRpdEZvcm1Sb3V0ZSA6IENvZGVzLkRFRkFVTFRfRURJVF9ST1VURSxcbiAgICAgIGluc2VydEZvcm1Sb3V0ZTogZm9ybVJvdXRlcyA/IGZvcm1Sb3V0ZXMuaW5zZXJ0Rm9ybVJvdXRlIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEUsXG4gICAgICBtYWluRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRcbiAgICB9LCBhY3RpdmVNb2RlKTtcbiAgfVxuXG59XG4iXX0=
@@ -218,6 +218,7 @@ export class OGridComponent extends AbstractOServiceComponent {
218
218
  offset: this.state.queryRecordOffset,
219
219
  length: this.queryRows
220
220
  };
221
+ this.dataService?.setPaginationContext({ pageNumber: this.dataService?.getPaginationContext().pageNumber + 1 });
221
222
  this.queryData(void 0, queryArgs);
222
223
  }
223
224
  else {
@@ -390,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
390
391
  type: ViewChild,
391
392
  args: [MatPaginator]
392
393
  }] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFLakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdkUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFFbkMsTUFBTTtJQUVOLDhCQUE4QjtJQUU5QixxQkFBcUI7SUFFckIsbUNBQW1DO0lBRW5DLHlCQUF5QjtJQUV6QiwwQ0FBMEM7SUFFMUMsa0NBQWtDO0lBRWxDLCtCQUErQjtJQUUvQix3QkFBd0I7SUFFeEIsMEJBQTBCO0lBRTFCLHdCQUF3QjtJQUV4Qiw2Q0FBNkM7SUFFN0MsK0NBQStDO0lBRS9DLG9DQUFvQztDQUNyQyxDQUFDO0FBR0YsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQWtCOUMsTUFBTSxPQUFPLGNBQWUsU0FBUSx5QkFBcUQ7SUFtQ3ZGLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEdBQUc7UUFDckIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUF1QkQsSUFBSSxTQUFTLENBQUMsS0FBa0I7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBWUQsWUFDRSxRQUFrQixFQUNsQixLQUFpQixFQUNxQyxJQUFvQjtRQUUxRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQTlGckIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUduQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUc5QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFM0IsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFHckMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHdkIsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRzdDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRTFCLHlCQUFvQixHQUFxQixRQUFRLENBQUM7UUFDekQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDaEIsMkJBQXNCLEdBQTJCLFNBQVMsQ0FBQztRQThCM0QscUJBQWdCLEdBQWUsRUFBRSxDQUFDO1FBS2xDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLGlCQUFpQixDQUFDO1FBRTlCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQVVuQyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUU3QixpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBY3hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJTSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTSxlQUFlO1FBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzNCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFxQixFQUFFLEVBQUU7WUFDbEYsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQ3pCLEtBQUssSUFBSSxDQUFDO29CQUNWLEtBQUssSUFBSTt3QkFDUCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDUixLQUFLLElBQUk7d0JBQ1AsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7d0JBQ3RCLE1BQU07b0JBQ1IsS0FBSyxJQUFJLENBQUM7b0JBQ1YsS0FBSyxJQUFJO3dCQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxTQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDakMsU0FBUyxHQUFHO2dCQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztnQkFDL0QsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSw0QkFBNEI7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVTLHNCQUFzQixDQUFDLFNBQWdCO1FBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLHlCQUF5QixDQUFDLElBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDRjtJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUF3QjtRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxJQUF3QjtRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxPQUFPO1FBQ1osS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQW1CO2dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUzthQUN2QixDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFHTSxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7UUFDaEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzFGO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsQ0FBQyxHQUFXO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsY0FBd0I7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsVUFBVTtlQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBYTtRQUNwQyxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksVUFBVSxHQUFHLGdCQUFnQixHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUN6QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsVUFBVSxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEdBQUc7UUFDUixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVTLGtCQUFrQixDQUFDLElBQVcsRUFBRSxPQUFpQjtRQUN6RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVTLGdDQUFnQztRQUN4QyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFUyx5QkFBeUI7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUEyQixFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMvRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFzQjtRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBQ00sbUJBQW1CLENBQUMsR0FBUTtRQUNqQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ3BHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRVMsMEJBQTBCLENBQUMsU0FBZ0I7UUFDbkQsSUFBSSxNQUFhLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5RTthQUFNO1lBQ0wsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs0R0F6V1UsY0FBYyxvRUErRkgsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztnR0EvRjNDLGNBQWMsbzFCQWRkO1FBQ1QsdUJBQXVCO1FBQ3ZCLDZCQUE2QjtRQUM3QixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUU7S0FDN0UsNEZBa0VpQyxrQkFBa0IsK0VBSXpDLFlBQVksd0VBRlQsa0JBQWtCLHVFQ3JKbEMscTlNQXVIQTtBRHZCRTtJQUFDLHFCQUFxQixFQUFFOzttREFDWTtBQUVwQztJQUFDLHFCQUFxQixFQUFFOztvREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztnREFDUztBQUVqQztJQUFDLHFCQUFxQixFQUFFOztrREFDVTtBQUlsQztJQUFDLHFCQUFxQixFQUFFOztxREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztvREFDTTtBQUU5QjtJQUFDLHFCQUFxQixFQUFFOzs2REFDcUI7QUFFN0M7SUFBQyxxQkFBcUIsRUFBRTs7dURBQ1M7NEZBN0J0QixjQUFjO2tCQWhCMUIsU0FBUzsrQkFDRSxRQUFRLGFBQ1A7d0JBQ1QsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7d0JBQzdCLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRTtxQkFDN0UsVUFDTyxxQkFBcUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixnQkFBZ0IsRUFBRSxNQUFNO3dCQUN4QixzQkFBc0IsRUFBRSxhQUFhO3FCQUN0Qzs7MEJBaUdFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzs0Q0F6Ri9DLFdBQVcsTUFHWCxZQUFZLE1BR1osUUFBUSxNQUdSLFVBQVUsTUFLVixhQUFhLE1BR3BCLFlBQVksTUFHTCxxQkFBcUIsTUFHNUIsZUFBZSxNQTRCUixjQUFjO3NCQURwQixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFHOUMsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFHekIsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUdyaWRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9HcmlkQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWdyaWQtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0dyaWRQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tZ3JpZC1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuLi90YWJsZS9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPR3JpZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtaXRlbS9vLWdyaWQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0dyaWRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWl0ZW0vby1ncmlkLWl0ZW0uZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fR1JJRCA9IFtcbiAgLy8gY29sczogQW1vdW50IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQgbGlzdC4gRGVmYXVsdCBpbiBleHRyYSBzbWFsbCBhbmQgc21hbGwgc2NyZWVuIGlzIDEsIGluIG1lZGl1bSBzY3JlZW4gaXMgMiwgaW4gbGFyZ2Ugc2NyZWVuIGlzIDMgYW5kIGV4dHJhIGxhcmdlIHNjcmVlbiBpcyA0LlxuICAnY29scycsXG4gIC8vIHNob3ctcGFnZS1zaXplOldoZXRoZXIgdG8gaGlkZSB0aGUgcGFnZSBzaXplIHNlbGVjdGlvbiBVSSBmcm9tIHRoZSB1c2VyLlxuICAnc2hvd1BhZ2VTaXplOiBzaG93LXBhZ2Utc2l6ZScsXG4gIC8vIHNob3ctc29ydDp3aGV0aGVyIG9yIG5vdCB0aGUgc29ydCBzZWxlY3QgaXMgc2hvd24gaW4gdGhlIHRvb2xiYXJcbiAgJ3Nob3dTb3J0OiBvcmRlcmFibGUnLFxuICAvLyBzb3J0YWJsZVtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydGFibGVDb2x1bW5zOiBzb3J0YWJsZS1jb2x1bW5zJyxcbiAgLy8gc29ydENvbHVtbnNbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgc29ydGluZ2NvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydENvbHVtbjogc29ydC1jb2x1bW4nLFxuICAvLyBxdWljay1maWx0ZXItY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1aWNrRmlsdGVyQ29sdW1uczogcXVpY2stZmlsdGVyLWNvbHVtbnMnLFxuICAvLyAgZ3JpZC1pdGVtLWhlaWdodFtzdHJpbmddOiBTZXQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Ygcm93IGhlaWdodCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlLi4gRGVmYXVsdDogMToxLlxuICAnZ3JpZEl0ZW1IZWlnaHQ6IGdyaWQtaXRlbS1oZWlnaHQnLFxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuICAvLyBndXR0ZXJTaXplOiBTaXplIG9mIHRoZSBncmlkIGxpc3QncyBndXR0ZXIgaW4gcGl4ZWxzLlxuICAnZ3V0dGVyU2l6ZTpndXR0ZXItc2l6ZScsXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgZm9vdGVyIHdoZW4gdGhlIGNvbnRlbnQgaXMgZ3JlYXRoZXIgdGhhbiBpdHMgb3duIGhlaWdodC4gRGVmYXVsdDogbm8uXG4gICdmaXhlZEhlYWRlcjpmaXhlZC1oZWFkZXInLFxuICAvLyBzaG93LWZvb3RlcjpJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZm9vdGVyOkRlZmF1bHQ6dHJ1ZVxuICAnc2hvd0Zvb3RlcjpzaG93LWZvb3RlcicsXG4gIC8vIGluc2VydC1idXR0b24tcG9zaXRpb24gWyB0b3AgfCBib3R0b20gXTogcG9zaXRpb24gb2YgdGhlIGluc2VydCBidXR0b24uIERlZmF1bHQ6ICdib3R0b20nXG4gICdpbnNlcnRCdXR0b25Qb3NpdGlvbjppbnNlcnQtYnV0dG9uLXBvc2l0aW9uJyxcbiAgLy8gaW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUgW25vfHllc106IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBwb3NpdGlvbiBvZiB0aGUgaW5zZXJ0IGJ1dHRvbiBpcyBmbG9hdGluZyAuIERlZmF1bHQ6ICd5ZXMnXG4gICdpbnNlcnRCdXR0b25GbG9hdGFibGU6aW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUnLFxuICAvLyBzaG93LWJ1dHRvbnMtdGV4dCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHRleHQgb2YgYnV0dG9ucy4gRGVmYXVsdDogbm8uXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0J1xuXTtcblxuXG5jb25zdCBQQUdFX1NJWkVfT1BUSU9OUyA9IFs4LCAxNiwgMjQsIDMyLCA2NF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZ3JpZCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9HcmlkQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19HUklELFxuICB0ZW1wbGF0ZVVybDogJy4vby1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZ3JpZF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5vLWdyaWQtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9HcmlkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSAzMjtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGZpeGVkSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93UGFnZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93Rm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZ3JpZEl0ZW1IZWlnaHQgPSAnMToxJztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGluc2VydEJ1dHRvbkZsb2F0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dCdXR0b25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbnNlcnRCdXR0b25Qb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBwYWdpbmF0aW9uQ29udHJvbHMgPSBmYWxzZTtcbiAgcHVibGljIGd1dHRlclNpemUgPSAnMXB4JztcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XG4gIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHMgfHwgdGhpcy5fY29sc0RlZmF1bHQ7XG4gIH1cbiAgc2V0IGNvbHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3J0YWJsZUNvbHVtbnMoKTogU1FMT3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRhYmxlQ29sdW1ucztcbiAgfVxuICBzZXQgc29ydGFibGVDb2x1bW5zKHZhbCkge1xuICAgIGxldCBwYXJzZWQgPSBbXTtcbiAgICBpZiAoIVV0aWwuaXNBcnJheSh2YWwpKSB7XG4gICAgICBwYXJzZWQgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyhTdHJpbmcodmFsKSk7XG4gICAgfVxuICAgIHRoaXMuX3NvcnRhYmxlQ29sdW1ucyA9IHBhcnNlZDtcbiAgfVxuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbHVtbnM6IHN0cmluZztcbiAgLyogRW5kIElucHV0cyAqL1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBPR3JpZEl0ZW1Db21wb25lbnQpKVxuICBwdWJsaWMgaW5wdXRHcmlkSXRlbXM6IFF1ZXJ5TGlzdDxPR3JpZEl0ZW1Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE9HcmlkSXRlbURpcmVjdGl2ZSlcbiAgcHVibGljIGdyaWRJdGVtRGlyZWN0aXZlczogUXVlcnlMaXN0PE9HcmlkSXRlbURpcmVjdGl2ZT47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxuICBwdWJsaWMgbWF0cGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyogUGFyc2VkIElucHV0cyAqL1xuICBwcm90ZWN0ZWQgX3NvcnRhYmxlQ29sdW1uczogU1FMT3JkZXJbXSA9IFtdO1xuICBwdWJsaWMgc29ydENvbHVtbk9yZGVyOiBTUUxPcmRlcjtcbiAgLyogRW5kIHBhcnNlZCBJbnB1dHMgKi9cblxuICBwcm90ZWN0ZWQgX2NvbHM7XG4gIHByb3RlY3RlZCBfY29sc0RlZmF1bHQgPSAxO1xuICBfcGFnZVNpemVPcHRpb25zID0gUEFHRV9TSVpFX09QVElPTlM7XG4gIHByb3RlY3RlZCBzb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHB1YmxpYyBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNldCBncmlkSXRlbXModmFsdWU6IElHcmlkSXRlbVtdKSB7XG4gICAgdGhpcy5fZ3JpZEl0ZW1zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ3JpZEl0ZW1zKCk6IElHcmlkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ncmlkSXRlbXM6IElHcmlkSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgbWVkaWE6IE1lZGlhT2JzZXJ2ZXI7XG5cbiAgcHJvdGVjdGVkIG9NYXRTb3J0OiBPTWF0U29ydDtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPR3JpZFBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgYWN0aW9uc1Blcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLm9NYXRTb3J0ID0gbmV3IE9NYXRTb3J0KCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyaWRQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgICB0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMpO1xuICAgIHRoaXMuc2V0QnV0dG9uUGVybWlzc2lvbnModGhpcy5hY3Rpb25zUGVybWlzc2lvbnMpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNvcnRDb2x1bW4pKSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSB0aGlzLnN0YXRlLnNvcnRDb2x1bW47XG4gICAgfVxuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1uKCk7XG5cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gdGhpcy5xdWVyeVJvd3MpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZXhpc3RpbmdPcHRpb24pKSB7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMuc29ydCgoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgLSBqKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUpID9cbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA6XG4gICAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgdGhpcy5zZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VDdXN0b21QZXJtaXNzaW9ucyh0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucywgJ1tvLWdyaWQtdG9vbGJhcl0nKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbXMgPSB0aGlzLmlucHV0R3JpZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbnB1dEdyaWRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShxdWVyeUNoYW5nZXMgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbXMgPSBxdWVyeUNoYW5nZXMuX3Jlc3VsdHM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTWVkaWFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lZGlhLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoY2hhbmdlOiBNZWRpYUNoYW5nZVtdKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlICYmIGNoYW5nZVswXSkge1xuICAgICAgICBzd2l0Y2ggKGNoYW5nZVswXS5tcUFsaWFzKSB7XG4gICAgICAgICAgY2FzZSAneHMnOlxuICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICBsZXQgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHt9O1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gMDtcbiAgICAgIHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpIDogMCxcbiAgICAgICAgbGVuZ3RoOiBNYXRoLm1heCh0aGlzLnF1ZXJ5Um93cywgdGhpcy5kYXRhUmVzcG9uc2VBcnJheS5sZW5ndGgpLFxuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmRhdGFSZXNwb25zZUFycmF5ID0gW107XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW5PcmRlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLm9NYXRTb3J0LmdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGFBcnJheSwgW3RoaXMuc29ydENvbHVtbk9yZGVyXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spIHtcbiAgICAgICAgaXRlbS5vbkNsaWNrKGdyaWRJdGVtID0+IHRoaXMub25JdGVtRGV0YWlsQ2xpY2soZ3JpZEl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKSB7XG4gICAgICAgIGl0ZW0ub25Eb3VibGVDbGljayhncmlkSXRlbSA9PiB0aGlzLm9uSXRlbURldGFpbERibENsaWNrKGdyaWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbERibENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbURibENsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSArPSAxO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3NcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSh2b2lkIDAsIHRydWUpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogYW55W10ge1xuICAgIGNvbnN0IHF1ZXJ5QXJndW1lbnRzID0gc3VwZXIuZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0Q29sdW1uKSkge1xuICAgICAgcXVlcnlBcmd1bWVudHNbNl0gPSB0aGlzLnNvcnRDb2x1bW5PcmRlciA/IFt0aGlzLnNvcnRDb2x1bW5PcmRlcl0gOiB0aGlzLnNvcnRDb2x1bW5PcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5QXJndW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHBhcnNlU29ydENvbHVtbigpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSAoU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zb3J0Q29sdW1uKSB8fCBbXSlbMF07XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHBhcnNlZCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGluZGV4KSAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbk9yZGVyID0gcGFyc2VkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjdXJyZW50T3JkZXJDb2x1bW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU29ydGFibGVDb2x1bW5JbmRleCh0aGlzLnNvcnRDb2x1bW5PcmRlcik7XG4gIH1cblxuICBzZXQgY3VycmVudE9yZGVyQ29sdW1uKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSB0aGlzLnNvcnRhYmxlQ29sdW1uc1t2YWxdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHNvcnRhYmxlQ29sdW1uOiBTUUxPcmRlcik6IG51bWJlciB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0YWJsZUNvbHVtbikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3J0YWJsZUNvbHVtbnNcbiAgICAgIC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmNvbHVtbk5hbWUgPT09IHNvcnRhYmxlQ29sdW1uLmNvbHVtbk5hbWVcbiAgICAgICAgJiYgaXRlbS5hc2NlbmRlbnQgPT09IHNvcnRhYmxlQ29sdW1uLmFzY2VuZGVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0T3B0aW9uVGV4dChjb2w6IFNRTE9yZGVyKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBjb2xUZXh0S2V5ID0gYEdSSUQuU09SVF9CWV8ke2NvbC5jb2x1bW5OYW1lLnRvVXBwZXJDYXNlKCl9X2AgKyAoY29sLmFzY2VuZGVudCA/ICdBU0MnIDogJ0RFU0MnKTtcbiAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbFRleHRLZXkpO1xuICAgIGlmIChyZXN1bHQgIT09IGNvbFRleHRLZXkpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbFRleHRLZXkgPSAnR1JJRC5TT1JUX0JZXycgKyAoY29sLmFzY2VuZGVudCA/ICdBU0MnIDogJ0RFU0MnKTtcbiAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbFRleHRLZXksIFsodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChjb2wuY29sdW1uTmFtZSkgfHwgJycpXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhZGQoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5zZXJ0RGV0YWlsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZUFycmF5KGRhdGE6IGFueVtdLCByZXBsYWNlPzogYm9vbGVhbikge1xuICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlICYmICFyZXBsYWNlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/IGRhdGEgOiAodGhpcy5kYXRhUmVzcG9uc2VBcnJheSB8fCBbXSkuY29uY2F0KGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHJlc3VsdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgc3VwZXIuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB0aGlzLnN0b3JlUGFnaW5hdGlvblN0YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEl0ZW1EaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEl0ZW1EaXJlY3RpdmVzLnRvQXJyYXkoKS5mb3JFYWNoKChlbGVtZW50OiBPR3JpZEl0ZW1EaXJlY3RpdmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0SXRlbURhdGEodGhpcy5kYXRhQXJyYXlbaW5kZXhdKTtcbiAgICAgICAgZWxlbWVudC5zZXRHcmlkQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyR3JpZEl0ZW1EaXJlY3RpdmUoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlU2l6ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc29ydENvbHVtbkNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSkge1xuICAgIHRoaXMuY3VycmVudE9yZGVyQ29sdW1uID0gZXZlbnQudmFsdWU7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5yZWdpc3RlclF1aWNrRmlsdGVyKGFyZyk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJBY3RpdmVDb2x1bW5zKSkge1xuICAgICAgY29uc3QgcGFyc2VkQXJyID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJBY3RpdmVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuc2V0QWN0aXZlQ29sdW1ucyhwYXJzZWRBcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQ6IGFueVtdO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgcmVzdWx0ID0gZGF0YUFycmF5LnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMucXVlcnlSb3dzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZGF0YUFycmF5LnNwbGljZSgwLCB0aGlzLnF1ZXJ5Um93cyAqICh0aGlzLmN1cnJlbnRQYWdlICsgMSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cImlzVmlzaWJsZSgpPyAnJyA6ICdub25lJ1wiIGNsYXNzPVwiby1ncmlkLWNvbnRhaW5lclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIj5cblxuICA8IS0tVE9PTEJBUi0tPlxuICA8by1kYXRhLXRvb2xiYXIgKm5nSWY9XCJoYXNDb250cm9scygpXCIgY2xhc3M9XCJvLWdyaWQtdG9vbGJhclwiIFt0aXRsZV09XCJ0aXRsZVwiIFtzaG93LXRpdGxlXT1cImhhc1RpdGxlKClcIj5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tc3RhcnQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0J1dHRvbnNUZXh0O2Vsc2Ugc2hvd0J1dHRvbnNXaXRob3V0VGV4dFwiPlxuICAgICAgICA8IS0tIGJ1dHRvbiBuZXctLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiAhaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZEluc2VydEJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYWRkLWJ1dHRvbiBvLWdyaWQtYnV0dG9uIHRleHRcIiBtYXQtc3Ryb2tlZC1idXR0b24gYXJpYS1sYWJlbD1cIkluc2VydFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnQUREJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS1idXR0b24gcmVmcmVzaC0tPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gYXJpYS1sYWJlbD1cIlJlZnJlc2hcIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRSZWZyZXNoQnV0dG9uXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIHRleHRcIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmF1dG9yZW5ld1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ1JFRlJFU0gnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzaG93QnV0dG9uc1dpdGhvdXRUZXh0PlxuICAgICAgICA8IS0tIGJ1dHRvbiBuZXctLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiAhaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIG8tZ3JpZC1hZGQtYnV0dG9uIG5vLXRleHRcIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkluc2VydFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFJlZnJlc2hCdXR0b25cIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCIgKm5nSWY9XCJyZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gbm8tdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tTy1HUklELVBBR0lOQVRPUi0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1wYWdpbmF0b3JcIiAqbmdJZj1cInNob3dQYWdlU2l6ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2Utc2l6ZS1sYWJlbFwiPnt7ICdHUklELklURU1TX1BFUl9QQUdFJyB8IG9UcmFuc2xhdGUgfX06PC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm8tZ3JpZC1zZWxlY3QtcGFnZVwiPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiXCIgI3BhZ2VTaXplU2VsZWN0IFsodmFsdWUpXT1cInF1ZXJ5Um93c1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwicGFnZVNpemVDaGFuZ2VkKClcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHBhZ2VTaXplT3B0aW9uc1wiIFt2YWx1ZV09XCJwYWdlXCI+XG4gICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLU8tR1JJRC1TT1JULS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXNvcnRcIiAqbmdJZj1cInNob3dTb3J0ICYmIHNvcnRhYmxlQ29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm8tZ3JpZC1zZWxlY3Qtc29ydFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c29ydDwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgI3NvcnRTZWxlY3QgW3ZhbHVlXT1cImN1cnJlbnRPcmRlckNvbHVtblwiIChzZWxlY3Rpb25DaGFuZ2UpPVwic29ydENvbHVtbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7eyAnR1JJRC5TT1JUX0JZJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygc29ydGFibGVDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgICAge3sgZ2V0U29ydE9wdGlvblRleHQoY29sdW1uKSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tZ3JpZC10b29sYmFyXVtwb3NpdGlvbj1zdGFydF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tZ3JpZC10b29sYmFyXVtwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tZW5kXVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tc3RhcnRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1lbmQ+XG4gICAgICA8by1zZWFyY2gtaW5wdXQgKm5nSWY9XCJxdWlja0ZpbHRlclwiIFtjb2x1bW5zXT1cInF1aWNrRmlsdGVyQ29sdW1uc1wiIFtmaWx0ZXItY2FzZS1zZW5zaXRpdmVdPVwiZmlsdGVyQ2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgIFtzaG93LWNhc2Utc2Vuc2l0aXZlLWNoZWNrYm94XT1cInNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKVwiIFtwbGFjZWhvbGRlcl09XCJxdWlja0ZpbHRlclBsYWNlaG9sZGVyXCIgW2FwcGVhcmFuY2VdPVwicXVpY2tGaWx0ZXJBcHBlYXJhbmNlXCJcbiAgICAgICAgZmxvYXQtbGFiZWw9XCJuZXZlclwiPjwvby1zZWFyY2gtaW5wdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvby1kYXRhLXRvb2xiYXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nIHwgYXN5bmMpPT09ZmFsc2VcIj5cbiAgICA8IS0tbm8gcmVzdWx0cy0tPlxuICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtbm8tcmVzdWx0cyBmaWxsLXJlbWFpbmluZ1wiICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA9PT0gMFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIiBsYXlvdXQtcGFkZGluZz5cbiAgICAgIHt7J0dSSUQuRU1QVFknIHwgb1RyYW5zbGF0ZX19XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tGaWx0ZXIgJiYgc2VhcmNoSW5wdXRDb21wb25lbnQgJiYgc2VhcmNoSW5wdXRDb21wb25lbnQuZ2V0VmFsdWUoKSAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpLmxlbmd0aCA+IDBcIj5cbiAgICAgICAge3sgJ0dSSUQuRU1QVFlfVVNJTkdfRklMVEVSJyB8IG9UcmFuc2xhdGUgOiB7IHZhbHVlczogWyBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpXSB9IH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLU1BVC1HUklELUxJU1QtLT5cbiAgICA8bWF0LWdyaWQtbGlzdCBbY29sc109XCJjb2xzXCIgW2d1dHRlclNpemVdPVwiZ3V0dGVyU2l6ZVwiIFtyb3dIZWlnaHRdPVwiZ3JpZEl0ZW1IZWlnaHRcIiBjbGFzcz1cIm8tbWF0LWdyaWQtbGlzdCBmaWxsLXJlbWFpbmluZ1wiXG4gICAgICAqbmdJZj1cImdyaWRJdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICA8bWF0LWdyaWQtdGlsZSBvLWdyaWQtaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncmlkSXRlbXNcIiBbY29sc3Bhbl09XCJpdGVtLmNvbHNwYW5cIiBbcm93c3Bhbl09XCJpdGVtLnJvd3NwYW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkluc2VydFwiICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmIGluc2VydEJ1dHRvbkZsb2F0YWJsZVwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZEluc2VydEJ1dHRvblwiIG1hdC1mYWIgKGNsaWNrKT1cImFkZCgpXCJcbiAgICAgIGNsYXNzPVwiby1ncmlkLWFkZC1mbG9hdGFibGUtYnV0dG9uXCIgW2NsYXNzLm8tZ3JpZC1hZGQtYm90dG9tLWZsb2F0YWJsZS1idXR0b25dPVwiaW5zZXJ0QnV0dG9uUG9zaXRpb24gPT09J2JvdHRvbSdcIlxuICAgICAgW2NsYXNzLm8tZ3JpZC1hZGQtdG9wLWZsb2F0YWJsZS1idXR0b25dPVwiaW5zZXJ0QnV0dG9uUG9zaXRpb24gPT09J3RvcCdcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gR1JJRCBGT09URVIgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFwYWdpbmF0aW9uQ29udHJvbHMgJiYgc2hvd0Zvb3RlciAmJiAobG9hZGluZyB8IGFzeW5jKT09PWZhbHNlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiby1ncmlkLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAqbmdJZj1cImdldERhdGFBcnJheSgpLmxlbmd0aCA8IHRvdGFsUmVjb3JkcyAmJiBnZXREYXRhQXJyYXkoKS5sZW5ndGg+MFwiIChjbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgY2xhc3M9XCJtYXQtcmFpc2VkLWJ1dHRvblwiPlxuICAgICAgICB7eyAnR1JJRC5CVVRUT05fTkVYVCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cIm8tZ3JpZC10b3RhbHNcIj57eyAnR1JJRC5URVhUX1NIT1dOX0lURU1TJyB8IG9UcmFuc2xhdGUgOnt2YWx1ZXM6IFtnZXREYXRhQXJyYXkoKS5sZW5ndGgsIHRvdGFsUmVjb3Jkc119XG4gICAgICAgIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgY2xhc3M9XCJvLW1hdC1wYWdpbmF0b3JcIiAjcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdGlvbkNvbnRyb2xzICYmIHNob3dGb290ZXJcIiBbbGVuZ3RoXT1cInRvdGFsUmVjb3Jkc1wiIFtwYWdlU2l6ZV09XCJxdWVyeVJvd3NcIlxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBbcGFnZUluZGV4XT1cImN1cnJlbnRQYWdlXCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiPjwvbWF0LXBhZ2luYXRvcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nIHwgYXN5bmNcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgZW5kXCIgY2xhc3M9XCJvLWxvYWRpbmctYmxvY2tlclwiPlxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBbY2xhc3Muby1zcGlubmVyLWNvbnRhaW5lci1jb250cm9sc109XCJoYXNDb250cm9scygpXCIgY2xhc3M9XCJvLXNwaW5uZXItY29udGFpbmVyXCI+XG4gICAgICA8by1ncmlkLXNrZWxldG9uPjwvby1ncmlkLXNrZWxldG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG48L2Rpdj5cbiJdfQ==
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFLakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxN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ekIsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUdyaWRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9HcmlkQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWdyaWQtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0dyaWRQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tZ3JpZC1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuLi90YWJsZS9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPR3JpZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtaXRlbS9vLWdyaWQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0dyaWRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWl0ZW0vby1ncmlkLWl0ZW0uZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fR1JJRCA9IFtcbiAgLy8gY29sczogQW1vdW50IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQgbGlzdC4gRGVmYXVsdCBpbiBleHRyYSBzbWFsbCBhbmQgc21hbGwgc2NyZWVuIGlzIDEsIGluIG1lZGl1bSBzY3JlZW4gaXMgMiwgaW4gbGFyZ2Ugc2NyZWVuIGlzIDMgYW5kIGV4dHJhIGxhcmdlIHNjcmVlbiBpcyA0LlxuICAnY29scycsXG4gIC8vIHNob3ctcGFnZS1zaXplOldoZXRoZXIgdG8gaGlkZSB0aGUgcGFnZSBzaXplIHNlbGVjdGlvbiBVSSBmcm9tIHRoZSB1c2VyLlxuICAnc2hvd1BhZ2VTaXplOiBzaG93LXBhZ2Utc2l6ZScsXG4gIC8vIHNob3ctc29ydDp3aGV0aGVyIG9yIG5vdCB0aGUgc29ydCBzZWxlY3QgaXMgc2hvd24gaW4gdGhlIHRvb2xiYXJcbiAgJ3Nob3dTb3J0OiBvcmRlcmFibGUnLFxuICAvLyBzb3J0YWJsZVtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydGFibGVDb2x1bW5zOiBzb3J0YWJsZS1jb2x1bW5zJyxcbiAgLy8gc29ydENvbHVtbnNbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgc29ydGluZ2NvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydENvbHVtbjogc29ydC1jb2x1bW4nLFxuICAvLyBxdWljay1maWx0ZXItY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1aWNrRmlsdGVyQ29sdW1uczogcXVpY2stZmlsdGVyLWNvbHVtbnMnLFxuICAvLyAgZ3JpZC1pdGVtLWhlaWdodFtzdHJpbmddOiBTZXQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Ygcm93IGhlaWdodCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlLi4gRGVmYXVsdDogMToxLlxuICAnZ3JpZEl0ZW1IZWlnaHQ6IGdyaWQtaXRlbS1oZWlnaHQnLFxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuICAvLyBndXR0ZXJTaXplOiBTaXplIG9mIHRoZSBncmlkIGxpc3QncyBndXR0ZXIgaW4gcGl4ZWxzLlxuICAnZ3V0dGVyU2l6ZTpndXR0ZXItc2l6ZScsXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgZm9vdGVyIHdoZW4gdGhlIGNvbnRlbnQgaXMgZ3JlYXRoZXIgdGhhbiBpdHMgb3duIGhlaWdodC4gRGVmYXVsdDogbm8uXG4gICdmaXhlZEhlYWRlcjpmaXhlZC1oZWFkZXInLFxuICAvLyBzaG93LWZvb3RlcjpJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZm9vdGVyOkRlZmF1bHQ6dHJ1ZVxuICAnc2hvd0Zvb3RlcjpzaG93LWZvb3RlcicsXG4gIC8vIGluc2VydC1idXR0b24tcG9zaXRpb24gWyB0b3AgfCBib3R0b20gXTogcG9zaXRpb24gb2YgdGhlIGluc2VydCBidXR0b24uIERlZmF1bHQ6ICdib3R0b20nXG4gICdpbnNlcnRCdXR0b25Qb3NpdGlvbjppbnNlcnQtYnV0dG9uLXBvc2l0aW9uJyxcbiAgLy8gaW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUgW25vfHllc106IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBwb3NpdGlvbiBvZiB0aGUgaW5zZXJ0IGJ1dHRvbiBpcyBmbG9hdGluZyAuIERlZmF1bHQ6ICd5ZXMnXG4gICdpbnNlcnRCdXR0b25GbG9hdGFibGU6aW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUnLFxuICAvLyBzaG93LWJ1dHRvbnMtdGV4dCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHRleHQgb2YgYnV0dG9ucy4gRGVmYXVsdDogbm8uXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0J1xuXTtcblxuXG5jb25zdCBQQUdFX1NJWkVfT1BUSU9OUyA9IFs4LCAxNiwgMjQsIDMyLCA2NF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZ3JpZCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9HcmlkQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19HUklELFxuICB0ZW1wbGF0ZVVybDogJy4vby1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZ3JpZF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5vLWdyaWQtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9HcmlkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSAzMjtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGZpeGVkSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93UGFnZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93Rm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZ3JpZEl0ZW1IZWlnaHQgPSAnMToxJztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGluc2VydEJ1dHRvbkZsb2F0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dCdXR0b25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbnNlcnRCdXR0b25Qb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBwYWdpbmF0aW9uQ29udHJvbHMgPSBmYWxzZTtcbiAgcHVibGljIGd1dHRlclNpemUgPSAnMXB4JztcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XG4gIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHMgfHwgdGhpcy5fY29sc0RlZmF1bHQ7XG4gIH1cbiAgc2V0IGNvbHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3J0YWJsZUNvbHVtbnMoKTogU1FMT3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRhYmxlQ29sdW1ucztcbiAgfVxuICBzZXQgc29ydGFibGVDb2x1bW5zKHZhbCkge1xuICAgIGxldCBwYXJzZWQgPSBbXTtcbiAgICBpZiAoIVV0aWwuaXNBcnJheSh2YWwpKSB7XG4gICAgICBwYXJzZWQgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyhTdHJpbmcodmFsKSk7XG4gICAgfVxuICAgIHRoaXMuX3NvcnRhYmxlQ29sdW1ucyA9IHBhcnNlZDtcbiAgfVxuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbHVtbnM6IHN0cmluZztcbiAgLyogRW5kIElucHV0cyAqL1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBPR3JpZEl0ZW1Db21wb25lbnQpKVxuICBwdWJsaWMgaW5wdXRHcmlkSXRlbXM6IFF1ZXJ5TGlzdDxPR3JpZEl0ZW1Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE9HcmlkSXRlbURpcmVjdGl2ZSlcbiAgcHVibGljIGdyaWRJdGVtRGlyZWN0aXZlczogUXVlcnlMaXN0PE9HcmlkSXRlbURpcmVjdGl2ZT47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxuICBwdWJsaWMgbWF0cGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyogUGFyc2VkIElucHV0cyAqL1xuICBwcm90ZWN0ZWQgX3NvcnRhYmxlQ29sdW1uczogU1FMT3JkZXJbXSA9IFtdO1xuICBwdWJsaWMgc29ydENvbHVtbk9yZGVyOiBTUUxPcmRlcjtcbiAgLyogRW5kIHBhcnNlZCBJbnB1dHMgKi9cblxuICBwcm90ZWN0ZWQgX2NvbHM7XG4gIHByb3RlY3RlZCBfY29sc0RlZmF1bHQgPSAxO1xuICBfcGFnZVNpemVPcHRpb25zID0gUEFHRV9TSVpFX09QVElPTlM7XG4gIHByb3RlY3RlZCBzb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHB1YmxpYyBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNldCBncmlkSXRlbXModmFsdWU6IElHcmlkSXRlbVtdKSB7XG4gICAgdGhpcy5fZ3JpZEl0ZW1zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ3JpZEl0ZW1zKCk6IElHcmlkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ncmlkSXRlbXM6IElHcmlkSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgbWVkaWE6IE1lZGlhT2JzZXJ2ZXI7XG5cbiAgcHJvdGVjdGVkIG9NYXRTb3J0OiBPTWF0U29ydDtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPR3JpZFBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgYWN0aW9uc1Blcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLm9NYXRTb3J0ID0gbmV3IE9NYXRTb3J0KCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyaWRQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgICB0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMpO1xuICAgIHRoaXMuc2V0QnV0dG9uUGVybWlzc2lvbnModGhpcy5hY3Rpb25zUGVybWlzc2lvbnMpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNvcnRDb2x1bW4pKSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSB0aGlzLnN0YXRlLnNvcnRDb2x1bW47XG4gICAgfVxuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1uKCk7XG5cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gdGhpcy5xdWVyeVJvd3MpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZXhpc3RpbmdPcHRpb24pKSB7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMuc29ydCgoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgLSBqKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUpID9cbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA6XG4gICAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgdGhpcy5zZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VDdXN0b21QZXJtaXNzaW9ucyh0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucywgJ1tvLWdyaWQtdG9vbGJhcl0nKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbXMgPSB0aGlzLmlucHV0R3JpZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbnB1dEdyaWRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShxdWVyeUNoYW5nZXMgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbXMgPSBxdWVyeUNoYW5nZXMuX3Jlc3VsdHM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTWVkaWFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lZGlhLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoY2hhbmdlOiBNZWRpYUNoYW5nZVtdKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlICYmIGNoYW5nZVswXSkge1xuICAgICAgICBzd2l0Y2ggKGNoYW5nZVswXS5tcUFsaWFzKSB7XG4gICAgICAgICAgY2FzZSAneHMnOlxuICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICBsZXQgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHt9O1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gMDtcbiAgICAgIHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpIDogMCxcbiAgICAgICAgbGVuZ3RoOiBNYXRoLm1heCh0aGlzLnF1ZXJ5Um93cywgdGhpcy5kYXRhUmVzcG9uc2VBcnJheS5sZW5ndGgpLFxuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmRhdGFSZXNwb25zZUFycmF5ID0gW107XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW5PcmRlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLm9NYXRTb3J0LmdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGFBcnJheSwgW3RoaXMuc29ydENvbHVtbk9yZGVyXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spIHtcbiAgICAgICAgaXRlbS5vbkNsaWNrKGdyaWRJdGVtID0+IHRoaXMub25JdGVtRGV0YWlsQ2xpY2soZ3JpZEl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKSB7XG4gICAgICAgIGl0ZW0ub25Eb3VibGVDbGljayhncmlkSXRlbSA9PiB0aGlzLm9uSXRlbURldGFpbERibENsaWNrKGdyaWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbERibENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbURibENsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSArPSAxO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3NcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dCh7IHBhZ2VOdW1iZXI6IHRoaXMuZGF0YVNlcnZpY2U/LmdldFBhZ2luYXRpb25Db250ZXh0KCkucGFnZU51bWJlciArIDEgfSk7XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSh2b2lkIDAsIHRydWUpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogYW55W10ge1xuICAgIGNvbnN0IHF1ZXJ5QXJndW1lbnRzID0gc3VwZXIuZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0Q29sdW1uKSkge1xuICAgICAgcXVlcnlBcmd1bWVudHNbNl0gPSB0aGlzLnNvcnRDb2x1bW5PcmRlciA/IFt0aGlzLnNvcnRDb2x1bW5PcmRlcl0gOiB0aGlzLnNvcnRDb2x1bW5PcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5QXJndW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHBhcnNlU29ydENvbHVtbigpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSAoU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zb3J0Q29sdW1uKSB8fCBbXSlbMF07XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHBhcnNlZCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGluZGV4KSAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbk9yZGVyID0gcGFyc2VkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjdXJyZW50T3JkZXJDb2x1bW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU29ydGFibGVDb2x1bW5JbmRleCh0aGlzLnNvcnRDb2x1bW5PcmRlcik7XG4gIH1cblxuICBzZXQgY3VycmVudE9yZGVyQ29sdW1uKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSB0aGlzLnNvcnRhYmxlQ29sdW1uc1t2YWxdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHNvcnRhYmxlQ29sdW1uOiBTUUxPcmRlcik6IG51bWJlciB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzb3J0YWJsZUNvbHVtbikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3J0YWJsZUNvbHVtbnNcbiAgICAgIC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmNvbHVtbk5hbWUgPT09IHNvcnRhYmxlQ29sdW1uLmNvbHVtbk5hbWVcbiAgICAgICAgJiYgaXRlbS5hc2NlbmRlbnQgPT09IHNvcnRhYmxlQ29sdW1uLmFzY2VuZGVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0T3B0aW9uVGV4dChjb2w6IFNRTE9yZGVyKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBjb2xUZXh0S2V5ID0gYEdSSUQuU09SVF9CWV8ke2NvbC5jb2x1bW5OYW1lLnRvVXBwZXJDYXNlKCl9X2AgKyAoY29sLmFzY2VuZGVudCA/ICdBU0MnIDogJ0RFU0MnKTtcbiAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbFRleHRLZXkpO1xuICAgIGlmIChyZXN1bHQgIT09IGNvbFRleHRLZXkpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbFRleHRLZXkgPSAnR1JJRC5TT1JUX0JZXycgKyAoY29sLmFzY2VuZGVudCA/ICdBU0MnIDogJ0RFU0MnKTtcbiAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbFRleHRLZXksIFsodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChjb2wuY29sdW1uTmFtZSkgfHwgJycpXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhZGQoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5zZXJ0RGV0YWlsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZUFycmF5KGRhdGE6IGFueVtdLCByZXBsYWNlPzogYm9vbGVhbikge1xuICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlICYmICFyZXBsYWNlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/IGRhdGEgOiAodGhpcy5kYXRhUmVzcG9uc2VBcnJheSB8fCBbXSkuY29uY2F0KGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHJlc3VsdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgc3VwZXIuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB0aGlzLnN0b3JlUGFnaW5hdGlvblN0YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEl0ZW1EaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEl0ZW1EaXJlY3RpdmVzLnRvQXJyYXkoKS5mb3JFYWNoKChlbGVtZW50OiBPR3JpZEl0ZW1EaXJlY3RpdmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0SXRlbURhdGEodGhpcy5kYXRhQXJyYXlbaW5kZXhdKTtcbiAgICAgICAgZWxlbWVudC5zZXRHcmlkQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyR3JpZEl0ZW1EaXJlY3RpdmUoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlU2l6ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc29ydENvbHVtbkNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSkge1xuICAgIHRoaXMuY3VycmVudE9yZGVyQ29sdW1uID0gZXZlbnQudmFsdWU7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5yZWdpc3RlclF1aWNrRmlsdGVyKGFyZyk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJBY3RpdmVDb2x1bW5zKSkge1xuICAgICAgY29uc3QgcGFyc2VkQXJyID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJBY3RpdmVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuc2V0QWN0aXZlQ29sdW1ucyhwYXJzZWRBcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQ6IGFueVtdO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgcmVzdWx0ID0gZGF0YUFycmF5LnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMucXVlcnlSb3dzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZGF0YUFycmF5LnNwbGljZSgwLCB0aGlzLnF1ZXJ5Um93cyAqICh0aGlzLmN1cnJlbnRQYWdlICsgMSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cImlzVmlzaWJsZSgpPyAnJyA6ICdub25lJ1wiIGNsYXNzPVwiby1ncmlkLWNvbnRhaW5lclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIj5cblxuICA8IS0tVE9PTEJBUi0tPlxuICA8by1kYXRhLXRvb2xiYXIgKm5nSWY9XCJoYXNDb250cm9scygpXCIgY2xhc3M9XCJvLWdyaWQtdG9vbGJhclwiIFt0aXRsZV09XCJ0aXRsZVwiIFtzaG93LXRpdGxlXT1cImhhc1RpdGxlKClcIj5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tc3RhcnQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0J1dHRvbnNUZXh0O2Vsc2Ugc2hvd0J1dHRvbnNXaXRob3V0VGV4dFwiPlxuICAgICAgICA8IS0tIGJ1dHRvbiBuZXctLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiAhaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZEluc2VydEJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYWRkLWJ1dHRvbiBvLWdyaWQtYnV0dG9uIHRleHRcIiBtYXQtc3Ryb2tlZC1idXR0b24gYXJpYS1sYWJlbD1cIkluc2VydFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnQUREJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS1idXR0b24gcmVmcmVzaC0tPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gYXJpYS1sYWJlbD1cIlJlZnJlc2hcIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRSZWZyZXNoQnV0dG9uXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIHRleHRcIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmF1dG9yZW5ld1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ1JFRlJFU0gnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzaG93QnV0dG9uc1dpdGhvdXRUZXh0PlxuICAgICAgICA8IS0tIGJ1dHRvbiBuZXctLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluc2VydEJ1dHRvbiAmJiAhaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJvLWdyaWQtYnV0dG9uIG8tZ3JpZC1hZGQtYnV0dG9uIG5vLXRleHRcIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkluc2VydFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFJlZnJlc2hCdXR0b25cIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCIgKm5nSWY9XCJyZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gbm8tdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tTy1HUklELVBBR0lOQVRPUi0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1wYWdpbmF0b3JcIiAqbmdJZj1cInNob3dQYWdlU2l6ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2Utc2l6ZS1sYWJlbFwiPnt7ICdHUklELklURU1TX1BFUl9QQUdFJyB8IG9UcmFuc2xhdGUgfX06PC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm8tZ3JpZC1zZWxlY3QtcGFnZVwiPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiXCIgI3BhZ2VTaXplU2VsZWN0IFsodmFsdWUpXT1cInF1ZXJ5Um93c1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwicGFnZVNpemVDaGFuZ2VkKClcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHBhZ2VTaXplT3B0aW9uc1wiIFt2YWx1ZV09XCJwYWdlXCI+XG4gICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLU8tR1JJRC1TT1JULS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXNvcnRcIiAqbmdJZj1cInNob3dTb3J0ICYmIHNvcnRhYmxlQ29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm8tZ3JpZC1zZWxlY3Qtc29ydFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c29ydDwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgI3NvcnRTZWxlY3QgW3ZhbHVlXT1cImN1cnJlbnRPcmRlckNvbHVtblwiIChzZWxlY3Rpb25DaGFuZ2UpPVwic29ydENvbHVtbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7eyAnR1JJRC5TT1JUX0JZJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygc29ydGFibGVDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgICAge3sgZ2V0U29ydE9wdGlvblRleHQoY29sdW1uKSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tZ3JpZC10b29sYmFyXVtwb3NpdGlvbj1zdGFydF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tZ3JpZC10b29sYmFyXVtwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tZW5kXVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tc3RhcnRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1lbmQ+XG4gICAgICA8by1zZWFyY2gtaW5wdXQgKm5nSWY9XCJxdWlja0ZpbHRlclwiIFtjb2x1bW5zXT1cInF1aWNrRmlsdGVyQ29sdW1uc1wiIFtmaWx0ZXItY2FzZS1zZW5zaXRpdmVdPVwiZmlsdGVyQ2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgIFtzaG93LWNhc2Utc2Vuc2l0aXZlLWNoZWNrYm94XT1cInNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKVwiIFtwbGFjZWhvbGRlcl09XCJxdWlja0ZpbHRlclBsYWNlaG9sZGVyXCIgW2FwcGVhcmFuY2VdPVwicXVpY2tGaWx0ZXJBcHBlYXJhbmNlXCJcbiAgICAgICAgZmxvYXQtbGFiZWw9XCJuZXZlclwiPjwvby1zZWFyY2gtaW5wdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvby1kYXRhLXRvb2xiYXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nIHwgYXN5bmMpPT09ZmFsc2VcIj5cbiAgICA8IS0tbm8gcmVzdWx0cy0tPlxuICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtbm8tcmVzdWx0cyBmaWxsLXJlbWFpbmluZ1wiICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA9PT0gMFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIiBsYXlvdXQtcGFkZGluZz5cbiAgICAgIHt7J0dSSUQuRU1QVFknIHwgb1RyYW5zbGF0ZX19XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tGaWx0ZXIgJiYgc2VhcmNoSW5wdXRDb21wb25lbnQgJiYgc2VhcmNoSW5wdXRDb21wb25lbnQuZ2V0VmFsdWUoKSAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpLmxlbmd0aCA+IDBcIj5cbiAgICAgICAge3sgJ0dSSUQuRU1QVFlfVVNJTkdfRklMVEVSJyB8IG9UcmFuc2xhdGUgOiB7IHZhbHVlczogWyBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpXSB9IH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLU1BVC1HUklELUxJU1QtLT5cbiAgICA8bWF0LWdyaWQtbGlzdCBbY29sc109XCJjb2xzXCIgW2d1dHRlclNpemVdPVwiZ3V0dGVyU2l6ZVwiIFtyb3dIZWlnaHRdPVwiZ3JpZEl0ZW1IZWlnaHRcIiBjbGFzcz1cIm8tbWF0LWdyaWQtbGlzdCBmaWxsLXJlbWFpbmluZ1wiXG4gICAgICAqbmdJZj1cImdyaWRJdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICA8bWF0LWdyaWQtdGlsZSBvLWdyaWQtaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncmlkSXRlbXNcIiBbY29sc3Bhbl09XCJpdGVtLmNvbHNwYW5cIiBbcm93c3Bhbl09XCJpdGVtLnJvd3NwYW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkluc2VydFwiICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmIGluc2VydEJ1dHRvbkZsb2F0YWJsZVwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZEluc2VydEJ1dHRvblwiIG1hdC1mYWIgKGNsaWNrKT1cImFkZCgpXCJcbiAgICAgIGNsYXNzPVwiby1ncmlkLWFkZC1mbG9hdGFibGUtYnV0dG9uXCIgW2NsYXNzLm8tZ3JpZC1hZGQtYm90dG9tLWZsb2F0YWJsZS1idXR0b25dPVwiaW5zZXJ0QnV0dG9uUG9zaXRpb24gPT09J2JvdHRvbSdcIlxuICAgICAgW2NsYXNzLm8tZ3JpZC1hZGQtdG9wLWZsb2F0YWJsZS1idXR0b25dPVwiaW5zZXJ0QnV0dG9uUG9zaXRpb24gPT09J3RvcCdcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gR1JJRCBGT09URVIgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFwYWdpbmF0aW9uQ29udHJvbHMgJiYgc2hvd0Zvb3RlciAmJiAobG9hZGluZyB8IGFzeW5jKT09PWZhbHNlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiby1ncmlkLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAqbmdJZj1cImdldERhdGFBcnJheSgpLmxlbmd0aCA8IHRvdGFsUmVjb3JkcyAmJiBnZXREYXRhQXJyYXkoKS5sZW5ndGg+MFwiIChjbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgY2xhc3M9XCJtYXQtcmFpc2VkLWJ1dHRvblwiPlxuICAgICAgICB7eyAnR1JJRC5CVVRUT05fTkVYVCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cIm8tZ3JpZC10b3RhbHNcIj57eyAnR1JJRC5URVhUX1NIT1dOX0lURU1TJyB8IG9UcmFuc2xhdGUgOnt2YWx1ZXM6IFtnZXREYXRhQXJyYXkoKS5sZW5ndGgsIHRvdGFsUmVjb3Jkc119XG4gICAgICAgIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgY2xhc3M9XCJvLW1hdC1wYWdpbmF0b3JcIiAjcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdGlvbkNvbnRyb2xzICYmIHNob3dGb290ZXJcIiBbbGVuZ3RoXT1cInRvdGFsUmVjb3Jkc1wiIFtwYWdlU2l6ZV09XCJxdWVyeVJvd3NcIlxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBbcGFnZUluZGV4XT1cImN1cnJlbnRQYWdlXCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiPjwvbWF0LXBhZ2luYXRvcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nIHwgYXN5bmNcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgZW5kXCIgY2xhc3M9XCJvLWxvYWRpbmctYmxvY2tlclwiPlxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBbY2xhc3Muby1zcGlubmVyLWNvbnRhaW5lci1jb250cm9sc109XCJoYXNDb250cm9scygpXCIgY2xhc3M9XCJvLXNwaW5uZXItY29udGFpbmVyXCI+XG4gICAgICA8by1ncmlkLXNrZWxldG9uPjwvby1ncmlkLXNrZWxldG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG48L2Rpdj5cbiJdfQ==