@eqproject/eqp-dynamic-module 2.10.100 → 2.10.102

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/README.md +891 -880
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +25 -25
  3. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +3 -3
  4. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +14 -14
  5. package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +7 -7
  6. package/esm2020/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.mjs +3 -3
  7. package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +5 -5
  8. package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +5 -5
  9. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +5 -5
  10. package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +10 -10
  11. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +3 -3
  12. package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +16 -9
  13. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +6 -6
  14. package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +6 -6
  15. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +5 -5
  16. package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +5 -5
  17. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +10 -10
  18. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +10 -10
  19. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +32 -9
  20. package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +7 -7
  21. package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +7 -7
  22. package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +3 -3
  23. package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +6 -6
  24. package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +17 -10
  25. package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +7 -7
  26. package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +7 -7
  27. package/esm2020/lib/components/private/graphs/graphs.component.mjs +3 -3
  28. package/esm2020/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +5 -5
  29. package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +6 -6
  30. package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +8 -8
  31. package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +3 -3
  32. package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +3 -3
  33. package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +3 -3
  34. package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +13 -6
  35. package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +7 -7
  36. package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +7 -7
  37. package/esm2020/lib/eqp-dynamic-module.module.mjs +18 -32
  38. package/esm2020/lib/models/dynAttachment.mjs +1 -1
  39. package/esm2020/lib/utils/google-fonts-injector.mjs +1 -1
  40. package/fesm2015/eqproject-eqp-dynamic-module.mjs +224 -193
  41. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  42. package/fesm2020/eqproject-eqp-dynamic-module.mjs +223 -193
  43. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  44. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +8 -8
  45. package/lib/components/private/add-form-field/add-form-field.component.d.ts +9 -9
  46. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +2 -2
  47. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +2 -2
  48. package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +2 -2
  49. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +2 -2
  50. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +2 -2
  51. package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +4 -3
  52. package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +2 -2
  53. package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +2 -2
  54. package/lib/eqp-dynamic-module.module.d.ts +6 -21
  55. package/lib/models/dynAttachment.d.ts +2 -2
  56. package/package.json +6 -13
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, ViewChild, Output, EventEmitter, } from "@angular/core";
2
- import { TypeColumn, } from "@eqproject/eqp-table";
2
+ import { TypeColumn, } from "tmw-table";
3
3
  import { FieldTypeEnum } from '../../../../models/baseField.model';
4
4
  import { Record } from "../../../../models/record.model";
5
5
  import { DateTimeTypeEnum, } from "../../../../models/fields/dateField.model";
@@ -190,7 +190,7 @@ export class HListFormRecordComponent {
190
190
  key: "action",
191
191
  display: "",
192
192
  type: TypeColumn.MenuAction,
193
- buttonMenuIcon: "more_vert",
193
+ buttonMenuIcon: "dots-vertical",
194
194
  styles: { flex: "0 0 6%" },
195
195
  actions: [],
196
196
  },
@@ -200,7 +200,7 @@ export class HListFormRecordComponent {
200
200
  .find((c) => c.key === "action")
201
201
  .actions.push({
202
202
  name: "Visualizza",
203
- icon: "info",
203
+ icon: "info-circle",
204
204
  fn: (element, index, col) => this.viewRecord(element),
205
205
  });
206
206
  }
@@ -227,7 +227,7 @@ export class HListFormRecordComponent {
227
227
  .find((c) => c.key === "action")
228
228
  .actions.push({
229
229
  name: "Elimina",
230
- icon: "delete",
230
+ icon: "trash",
231
231
  fn: (element, index, col) => this.deleteRecord(element),
232
232
  });
233
233
  }
@@ -813,4 +813,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
813
813
  }], onAfterDeleteRecord: [{
814
814
  type: Output
815
815
  }] } });
816
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGxpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9obGlzdC1mb3JtLXJlY29yZC9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2hsaXN0LWZvcm0tcmVjb3JkL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFlLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3RDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9D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QUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzlDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztnQkFDbEIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEEvMEJVLHdCQUF3QjswR0FBeEIsd0JBQXdCLGlsQkMvQ3JDLG8vTEFpS0E7NEZEbEhhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUI7a0tBS3BCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS3VDLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFNakMsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0sIEFuc3dlclN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEltYWdlU2VsZWN0b3JGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50XCI7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiaGxpc3QtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJobGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhMaXN0Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcblxyXG4gIC8vIGwndW5hIG8gbCdhbHRyYSBwZXIgZHVlIG1vZGFsaXTDoCBkJ3Vzb1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsOyAvLyBib2ggbWEgYydlcmEgcHJpbWFcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBsb2FkZWRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGVkVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVmlld1JlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuOyB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBtb2RlcyA9IE1vZGVFbnVtO1xyXG4gIG1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIG1heERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAvLyBsZSBwcm9wcmlldMOgIGRlbGxhIHJpc3Bvc3RhIGRhIHN0YW1wYXJlIG5lbGxlIHJpZ2hlXHJcbiAgcHJvcGVydGllcyA9IFtdO1xyXG4gIC8vIGxlIGxhYmVsIGFzc29jaWF0ZSBhbGxlIHByb3ByaWV0w6AgZGEgc3RhbXBhcmUgY2hlIGNvbmRpdmlkb25vIGxvIHN0ZXNzbyBpbmRpY2VcclxuICBwcm9wZXJ0aWVzTGFiZWwgPSBbXTtcclxuICBzZWxlY3RlZFByb3BlcnRpZXM6IHN0cmluZ1tdO1xyXG5cclxuICAvLyBpIGRhdGkgZGVsbGUgcmlzcG9zdGUgZGEgc3RhbXBhcmVcclxuICBmaWx0ZXJlZEFuc3dlcnMgLy9sZSByaXNwb3N0ZSBmaWx0cmF0ZSBcclxuXHJcbiAgLy8gQ29sb25uZSBkYSB2aXN1YWxpenphcmUgKGZpc3NhIGxhIHByaW1hIGNvbG9ubmEgZSBnZW5lcmEgZGluYW1pY2FtZW50ZSBsZSBhbHRyZSlcclxuICBkaXNwbGF5ZWRDb2x1bW5zID0gW107XHJcbiAgZXhpc3RpbmdBZ2dyZWdhdGlvbnM6IEFycmF5PE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtPiA9IG51bGw7XHJcbiAgbnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0gPSBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bTtcclxuXHJcbiAgLy8jcmVnaW9uIENvbnN0cnVjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRlcGlwZTogRGF0ZVBpcGVcclxuICApIHtcclxuICAgIC8vIHRoaXMucHJvcGVydGllc0xhYmVsW1wiQW5zd2VyRGF0ZVwiXSA9IFwiRGF0YVwiO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gQ29uc3RydWN0b3JcclxuXHJcbiAgLy8jcmVnaW9uIG5nT25JbnRpdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25JbnRpdFxyXG5cclxuICAvLyNyZWdpb24gbmdPbkNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY2hhbmdlcycsIGNoYW5nZXMpO1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddLmN1cnJlbnRWYWx1ZTtcclxuICAgIC8vICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25DaGFuZ2VzXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRGb3JtQnlJRFxyXG4gIGFzeW5jIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGdldEZvcm1CeUlEJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldEZvcm1CeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICAvKipcclxuICAgICAqIHByZW5kZSBsZSByaXNwb3N0ZSBlIGxlIHJlbmRlIHBpYXR0ZSwgYWRhdHRlIGEgZGl2ZW50YXJlIHVuYSByaWdhIGRhIHRhYmVsbGFcclxuICAgICAqIG1ldHRlIHR1dHRlIGxlIHJpc3Bvc3RlIG5lbGxlIHN0cnV0dHVyZSBuZWNlc3NhcmllIHBlciBpbCByZWN1cGVybyBlIGxhIHZpc3VhbGl6emF6aW9uZVxyXG4gICAgICogQHBhcmFtIGFuc3dlcnMgXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzID0gKGFuc3dlcnMpID0+IHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgICBhbnN3ZXJzLmZvckVhY2goKGFuc3dlcikgPT4ge1xyXG4gICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKGFuc3dlci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0bXBSZWMuSUQgPSBhbnN3ZXIuSUQ7XHJcbiAgICAgICAgdG1wUmVjLkVudElEID0gYW5zd2VyLkVudElEO1xyXG4gICAgICAgIHRtcFJlYy5WZXJzaW9uID0gYW5zd2VyLlZlcnNpb247XHJcbiAgICAgICAgdG1wUmVjLnVzZXJJRCA9IGFuc3dlci51c2VySUQ7XHJcbiAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSBhbnN3ZXIuQW5zd2VyRGF0ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcHJlcGFyYSBsYSBsaXN0YSBkZWxsZSBjb2xvbm5lIGRhIG1vc3RyYXJlICh1bmEgcGVyIG9nbmkgcmlzcG9zdGEsIHBpw7kgbGEgY29sb25uYSBkZWxsZSBwcm9wcmlldMOgKVxyXG4gICAgICogaW1wb3N0YSBsYSBsaXN0YSBkZWxsZSByaXNwb3N0ZSBkYSB2aXN1YWxpenphcmVcclxuICAgICAqIGxpYmVyYSBsZSB2YXJpYWJpbGkgZGkgY2FyaWNhbWVudG8gcGVyIG1vc3RyYXJlIGkgY29udGVudXRpIGRlbGxhIHZpc3RhXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG5hbWVDb2x1bW5zQW5kU3RhcnRWaWV3ID0gKCkgPT4ge1xyXG4gICAgICAvL2Rlc3RydXR0dXJhIGwnYXJyYXkgcmlzcG9zdGUgZSBwZXIgb2duaSByaXNwb3N0YSBnZW5lcmEgdW4gZWxlbWVudG8gY29sW2ldXHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtcInByb3BlcnR5XCIsIC4uLnRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCgoXywgaSkgPT4gYGNvbCR7aX1gKV07XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXM7XHJcbiAgICAgIHRoaXMuc2V0TWluTWF4RGF0ZXMoKTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGVkRmlsdGVycyA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGVkVGFibGUgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzKSB7XHJcbiAgICAgIC8vIHZlbmdvIGRhIHVuJ2FsdHJhIHZpc3VhbGl6emF6aW9uZSBjaGUgaGEgZ2nDoCByZWN1cGVyYXRvIGxlIHJpc3Bvc3RlXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJoTGlzdCAtIGdldFJlY29yZHNCeUZvcm1JRCBBXCIsIHRoaXMuY29uZmlndXJhdGlvbnMpXHJcbiAgICAgIG5hbWVDb2x1bW5zQW5kU3RhcnRWaWV3KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzb25vIGluIHVuYSBudW92YSBpc3RhbnphIGluIGN1aSBkZXZvIHJlY3VwZXJhcmUgbGUgcmlzcG9zdGVcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhMaXN0IC0gZ2V0UmVjb3Jkc0J5Rm9ybUlEIEJcIiwgdGhpcy5jb25maWd1cmF0aW9ucylcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBub24gaG8gc3BlY2lmaWNhdG8gdW4gdXRlbnRlXHJcbiAgICAgICAgICAgIC8vIHZlZG8gdHV0dGUgbGUgcmlzcG9zdGUgZGVsIG1vZHVsb1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWFycmFuZ2VBbnN3ZXJzQW5kUG9wdWxhdGVMaXN0cyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgICAgICAgIC8vIHZvZ2xpbyBzb2xhbWVudGUgbGUgc3VlIHJpc3Bvc3RlXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWFycmFuZ2VBbnN3ZXJzQW5kUG9wdWxhdGVMaXN0cyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbicsIGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJpbmZvXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld1JlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld09yRWRpdFJlY29yZChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlID09IHRydWUpIHtcclxuICAgICAgLyp0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkR1cGxpY2FcIixcclxuICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pOyovXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZVJlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmV4dGVybmFsQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogYnV0dG9uLnRleHQsXHJcbiAgICAgICAgICBpY29uOiBidXR0b24uaWNvbixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gYnV0dG9uLmZuKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuXHJcbiAgLy8jcmVnaW9uIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpdW5nZXJlIG5lbGxhIGNvbG9ubmEgXCJhY3Rpb25cIiBkZWxsYSBlcXAtdGFibGUgbGUgYXppb25pIHN1aSByZWNvcmRcclxuICAgKiBkZWZpbml0ZSBkYWxsJ3V0ZW50ZSBhbGwnaW50ZXJubyBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkICYmIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICA6IDBcclxuICAgICAgKS5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBhY3Rpb24uTmFtZSxcclxuICAgICAgICAgICAgaWNvbjogYWN0aW9uLkljb24sXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlYyA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3R4ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dDtcclxuICAgICAgICAgICAgICBldmFsKGFjdGlvbi5BY3Rpb24pO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE86IHNhbHZhcmUgbGUgbW9kaWZpY2hlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVBZGRpdGlvbmFsQWN0aW9uc1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAgKiBJbmRpdmlkdWEgaSBCYXNlRmllbGQgZGEgbW9zdHJhcmUgZSBsaSB1c2EgcGVyIGNyZWFyZSBsZSBDb25maWdDb2x1bW4uXHJcbiAgICogTGUgY29sb25uZSB2ZW5nb25vIGNyZWF0ZSBwZXIgaSBCYXNlRmllbGQgY29uIGlsIGZsYWcgSW5MaXN0VmlldyBhIFRSVUVcclxuICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAgKiBzZWxlemlvbmEgaSBwcmltaSA2LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcycsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IHtcclxuICAgICAgLy9uYXNjb25kZXJlIGNhbXBpIGV0aWNoZXR0YVxyXG4gICAgICBpZihmLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRXRpY2hldHRhXCJdKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGYuQW5zd2VyU3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZi5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmLkluTGlzdFZpZXc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMgPSBbXTtcclxuXHJcbiAgICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICAgID8gLTFcclxuICAgICAgICAgICAgOiAwXHJcbiAgICAgIClcclxuICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gdGhpcy5jb2x1bW5zLnB1c2godGhpcy5jcmVhdGVGaWVsZENvbHVtbihmaWVsZCkpO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHsgbGFiZWw6IGZpZWxkLkxhYmVsLCB0eXBlOiBmaWVsZC5GaWVsZFR5cGUsIGNvbmZpZzogZmllbGQgfSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzTGFiZWxbZmllbGQuTGFiZWxdID0gZmllbGQuRGVzY3JpcHRpb247XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5BZ2dyZWdhdGlvbnMgIT0gbnVsbCAmJiBmaWVsZC5BZ2dyZWdhdGlvbnMubGVuZ3RoID4gMCApe1xyXG4gICAgICAgICAgZmllbGQuQWdncmVnYXRpb25zLmZvckVhY2goKGFnZ3JlZ2F0aW9uKSA9PiB7ICBcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMuaW5kZXhPZihhZ2dyZWdhdGlvbikgPT0gLTEpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMucHVzaChhZ2dyZWdhdGlvbik7XHJcbiAgICAgICAgICAgICAgLy90aGlzLnByb3BlcnRpZXNMYWJlbFtOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVthZ2dyZWdhdGlvbl0udG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpXSA9IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTsgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgLy8gcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAvLyAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gIC8vICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgLy8gICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgLy8gICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgLy8gICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAvLyAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgLy8gICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gIC8vICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAvLyAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gIC8vICAgICAgICkge1xyXG4gIC8vICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgLy8gICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAvLyAgICAgICAgICkge1xyXG4gIC8vICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKFxyXG4gIC8vICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAvLyAgICAgICAgICkge1xyXG4gIC8vICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gIC8vICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gIC8vICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAvLyAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAvLyAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuXHJcbiAgLy8gICAgICAgLypcclxuICAvLyAgICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAvLyAgICAgICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAvLyAgICAgICAgICAgICAoKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24gJiZcclxuICAvLyAgICAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2gpXHJcbiAgLy8gICAgICAgICAgICkge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilcclxuICAvLyAgICAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLkZpbGVOYW1lKVxyXG4gIC8vICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcclxuICAvLyAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gIC8vICAgICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pWzBdLkZpbGVOYW1lXHJcbiAgLy8gICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH07XHJcbiAgLy8gICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgICovXHJcblxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgLy8gICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCFlbGVtZW50W2ZpZWxkLk5hbWVdIHx8IGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID09IDApIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKVxyXG4gIC8vICAgICAgICAgICAgICAgLmZpbHRlcigoaykgPT5cclxuICAvLyAgICAgICAgICAgICAgICAgZWxlbWVudFtmaWVsZC5OYW1lXS5pbmNsdWRlcyhcclxuICAvLyAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba11cclxuICAvLyAgICAgICAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykuZmluZChcclxuICAvLyAgICAgICAgICAgICAoaykgPT5cclxuICAvLyAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdXHJcbiAgLy8gICAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gIC8vICAgICAgIC8vIFRPRE9cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBjb2x1bW47XHJcbiAgLy8gfVxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG5cclxuICAvLyNyZWdpb24gdmlld1JlY29yZFxyXG4gIHZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMub25WaWV3UmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHZpZXdSZWNvcmRcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLm9uRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkVGFibGVzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uU2VsZWN0aW9uQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgY2hlIHZpZW5lIGNoaWFtYXRhIGFsIGNhbWJpbyBkaSBzZWxlemlvbmUgZGVpIHBhcmFtZXRyaSBkYSBtb3N0cmFyZVxyXG4gICAqIGFnZ2lvcm5hIGxhIGxpc3RhIGRlbGxlIHByb3ByaWV0w6Agc2VsZXppb25hdGUgY2hlIGdlc3Rpc2NlIGxlIHJpZ2hlIG1vc3RyYXRlIHBlciBvZ25pIHJpc3Bvc3RhXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUHJvcGVydGllcyBcclxuICAgKi9cclxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFByb3BlcnRpZXMpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvblNlbGVjdGlvbkNoYW5nZSBzZWxlY3RlZFByb3BlcnRpZXMudmFsdWVcIixzZWxlY3RlZFByb3BlcnRpZXMudmFsdWUpO1xyXG4gICAgaWYgKHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9wZXJ0aWVzID0gc2VsZWN0ZWRQcm9wZXJ0aWVzLnZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgYXNzZWduYXRhXCIsdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25TZWxlY3Rpb25DaGFuZ2VcclxuXHJcbiAgLy8jcmVnaW9uIGZpbHRlckRhdGFBbnN3ZXJzXHJcbiAgLyoqXHJcbiAgICogZnVuemlvbmUgY2hlIGZpbHRyYSBsZSByaXNwb3N0ZSBpbiBiYXNlIGFsIHJhbmdlIGRpIGRhdGUgYmFzYW5kb3NpIHN1bCBjYW1wbyBmaXNzbyBBbnN3ZXJEYXRlIHBlciBpbCBwYXJhZ29uZVxyXG4gICAqL1xyXG4gIGZpbHRlckRhdGFBbnN3ZXJzKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzID0gW107XHJcblxyXG4gICAgICBpZighdGhpcy5taW5EYXRlKXtcclxuICAgICAgICAvLyBDb252ZXJ0byBsZSBkYXRlIGRpIEFuc3dlckRhdGUgaW4gb2dnZXR0aSBEYXRlIGUgb3JkaW5vXHJcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5tYXAodmFsdWUgPT4gbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkpOyAgICBcclxuICAgICAgICAvLyBUcm92byBsYSBkYXRhIHBpw7kgcmVjZW50ZSAobWF4KSBlIGxhIHBpw7kgdmVjY2hpYSAobWluKVxyXG4gICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKE1hdGgubWluKC4uLmRhdGVzLm1hcChkYXRlID0+IGRhdGUuZ2V0VGltZSgpKSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZighdGhpcy5tYXhEYXRlKXtcclxuICAgICAgICAvLyBDb252ZXJ0byBsZSBkYXRlIGRpIEFuc3dlckRhdGUgaW4gb2dnZXR0aSBEYXRlIGUgb3JkaW5vXHJcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5tYXAodmFsdWUgPT4gbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkpOyAgICBcclxuICAgICAgICAvLyBUcm92byBsYSBkYXRhIHBpw7kgcmVjZW50ZSAobWF4KSBlIGxhIHBpw7kgdmVjY2hpYSAobWluKVxyXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKE1hdGgubWF4KC4uLmRhdGVzLm1hcChkYXRlID0+IGRhdGUuZ2V0VGltZSgpKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF4RGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA1OSk7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcmVkQW5zd2VycyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLmZpbHRlciggdmFsdWUgPT4gbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkgPj0gdGhpcy5taW5EYXRlICYmIG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpIDw9IHRoaXMubWF4RGF0ZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucyAhPSBudWxsICYmIHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMuZm9yRWFjaCgoYWdncmVnYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcmVkQW5zd2Vyc1swXSkpO1xyXG4gICAgICAgICAgICAgIHJlY29yZC5JRCA9IFwiMFwiO1xyXG4gICAgICAgICAgICAgIHJlY29yZC5BbnN3ZXJEYXRlID0gTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bYWdncmVnYXRpb25dLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5wdXNoKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5maWxsQWdncmVnYXRpb25Db2x1bW5zKCk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbXCJwcm9wZXJ0eVwiLCAuLi50aGlzLmZpbHRlcmVkQW5zd2Vycy5tYXAoKF8sIGkpID0+IGBjb2wke2l9YCldO1xyXG5cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBmaWx0ZXJEYXRhQW5zd2Vyc1xyXG5cclxuICAvLyNyZWdpb24gc2V0TWluTWF4RGF0ZXNcclxuICAvLyBGdW56aW9uZSBwZXIgb3R0ZW5lcmUgbGEgZGF0YSBwacO5IHJlY2VudGUgZSBxdWVsbGEgcGnDuSB2ZWNjaGlhXHJcbiAgc2V0TWluTWF4RGF0ZXMoKSB7XHJcbiAgICAvLyBDb252ZXJ0byBsZSBkYXRlIGRpIEFuc3dlckRhdGUgaW4gb2dnZXR0aSBEYXRlIGUgb3JkaW5vXHJcbiAgICBjb25zdCBkYXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCh2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSk7XHJcblxyXG4gICAgLy8gVHJvdm8gbGEgZGF0YSBwacO5IHJlY2VudGUgKG1heCkgZSBsYSBwacO5IHZlY2NoaWEgKG1pbilcclxuICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKE1hdGgubWluKC4uLmRhdGVzLm1hcChkYXRlID0+IGRhdGUuZ2V0VGltZSgpKSkpO1xyXG4gICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoTWF0aC5tYXgoLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzZXRNaW5NYXhEYXRlc1xyXG5cclxuICAvLyNyZWdpb24gZmlsbEFnZ3JlZ2F0aW9uQ29sdW1uc1xyXG4gIGZpbGxBZ2dyZWdhdGlvbkNvbHVtbnMoKXtcclxuICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgPT0gJzAnKS5mb3JFYWNoKChhZ2dyQ29sKSA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGFnZ3JDb2wpLmZvckVhY2goKGtleSkgPT4ge1xyXG5cclxuICAgICAgICAvL2lmIChrZXkgIT0gXCJBbnN3ZXJEYXRlXCIpeyBhZ2dyQ29sW2tleV0gPSBcIlwiOyB9XHJcblxyXG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuZmluZCh4ID0+IHguTGFiZWwgPT0ga2V5KTtcclxuICAgICAgICBpZiAoZmllbGQgPT0gbnVsbCl7IHJldHVybjsgfVxyXG4gICAgICAgIHZhciBhZ2dyZWdhdGlvbnM6IGFueSA9IGZpZWxkLkFnZ3JlZ2F0aW9ucztcclxuXHJcbiAgICAgICAgaWYgKGFnZ3JlZ2F0aW9ucyAhPSBudWxsKXtcclxuICAgICAgICAgIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJDT1VOVFwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiQ09VTlRcIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnKS5sZW5ndGg7ICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiU1VNXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJTVU1cIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciBzdW0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IHN1bSArPSBwYXJzZUludChlbFtrZXldKTsgfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IHN1bTsgICAgICAgICAgXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiQVZHXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJBVkdcIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciBhdmcgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IGF2ZyArPSBwYXJzZUludChlbFtrZXldKTsgfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IGF2ZyAvIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5sZW5ndGg7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiTUlOXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJNSU5cIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IGlmIChtaW4gPT0gbnVsbCB8fCBlbFtrZXldIDwgbWluKSB7IG1pbiA9IGVsW2tleV07IH0gfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IG1pbjsgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIk1BWFwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiTUFYXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBpZiAobWluID09IG51bGwgfHwgZWxba2V5XSA+IG1heCkgeyBtYXggPSBlbFtrZXldOyB9IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBtYXg7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJTVERFVlwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiU1RERVZcIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyB2YWx1ZXMucHVzaChwYXJzZUludChlbFtrZXldKSk7IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSB0aGlzLnN0YW5kYXJkRGV2aWF0aW9uKHZhbHVlcyk7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gXCJcIjtcclxuICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIGlmIChhZ2dyZWdhdGlvbnMgPT0gbnVsbCB8fCBhZ2dyZWdhdGlvbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBmaWxsQWdncmVnYXRpb25Db2x1bW5zXHJcblxyXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGFyciwgdXNlUG9wdWxhdGlvbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBtZWFuID0gYXJyLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCkgLyBhcnIubGVuZ3RoO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgYXJyXHJcbiAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQoKHZhbCAtIG1lYW4pICoqIDIpLCBbXSlcclxuICAgICAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvXHJcbiAgICAgICAgKGFyci5sZW5ndGggLSAodXNlUG9wdWxhdGlvbiA/IDAgOiAxKSlcclxuICAgICk7XHJcbiAgfTsgICBcclxuXHJcbiAgLy8jcmVnaW9uIHByaW50VmFsdWVcclxuICBwcmludFZhbHVlKGZpZWxkVHlwZSwgdmFsdWUsIGZpZWxkY29uZmlnLCByZWNvcmQpIHtcclxuICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXToge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKXsgcmV0dXJuIHZhbHVlOyB9XHJcbiAgICAgICAgaWYoIXZhbHVlKXtcclxuICAgICAgICAgIHJldHVybiBcIk4vQVwiO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgbGV0IG91dHB1dDtcclxuICAgICAgICBsZXQgVmFsdWVQYWlyczoge1trZXk6c3RyaW5nXTogYW55O30gPSBbXTtcclxuICAgICAgICAvLyBQUkVQQVJPL0xFR0dPIEkgVkFMVUVQQUlSU1xyXG4gICAgICAgIGlmIChmaWVsZGNvbmZpZy5Gb3JtdWxhICE9IG51bGwgJiYgZmllbGRjb25maWcuRm9ybXVsYSkge1xyXG4gICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgZmllbGRjb25maWcuRm9ybXVsYSxcclxuICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaWYodHlwZW9mIHRlbXAgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBsZXQgdGVtcDIgPSB0ZW1wLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgIHRlbXAgPSBbXVxyXG4gICAgICAgICAgdGVtcDIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXJySXRlbSA9IGl0ZW0uc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICBpZihhcnJJdGVtLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgIHRlbXBbYXJySXRlbVsxXS50cmltKCldID0gYXJySXRlbVswXS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGVtcFthcnJJdGVtWzBdLnRyaW0oKV0gPSBhcnJJdGVtWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgICAgICAgVmFsdWVQYWlyc1t0ZW1wW2tleTJdXSA9IGtleTI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVBhaXJzICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVQYWlycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyB2YSBiZW5lIGNvc8OsXHJcbiAgICAgICAgICBWYWx1ZVBhaXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVBhaXJzKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVN0cmluZyAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgICAgIC8vIHZhIHByZXNhIGxhIHN0cmlnbmEgZSByaW1hcHBhdGEgbmVsIGRpYXJpb1xyXG4gICAgICAgICAgVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlU3RyaW5nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElOVkVSVE8gSSBWQUxVRVBBSVJTIENISUFWRS9WQUxPUkUgSU4gVkFMUk9FL0NISUFWRVxyXG4gICAgICAgIGxldCBpbnZlcnRlZCA9IHt9O1xyXG4gICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIig8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNcIiwgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyk7XHJcbiAgICAgICAgLy8gVmFsdWVQYWlyczoge1NpOiAnU2knLCBObzogJ05vJ31cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgaW52ZXJ0ZWRbVmFsdWVQYWlyc1trZXldXSA9IGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmFsdWVQYWlycyA9IGludmVydGVkO1xyXG5cclxuICAgICAgICAvLyBMRUdHTyBJIFZBTE9SSSBDSEUgVk9HTElPIFNUQU1QQVJFIFxyXG4gICAgICAgIGlmIChyZWNvcmRbZmllbGRjb25maWcuTmFtZV0gIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICAgICAgLy8gY2FzbyBNVUxUSVNDRUxUQVxyXG4gICAgICAgICAgbGV0IG91dFZhbHVlID0gXCJcIjtcclxuICAgICAgICAgIHJlY29yZFtmaWVsZGNvbmZpZy5OYW1lXS5mb3JFYWNoKChlbGVtZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIG91dFZhbHVlICs9IFZhbHVlUGFpcnNbZWxlbWVudF07XHJcbiAgICAgICAgICAgIG91dFZhbHVlICs9IGkgPT0gcmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdLmxlbmd0aCAtIDEgPyBcIlwiIDogXCIsIFwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIG91dHB1dCA9IG91dFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBjYXNvIFNDRUxUQSBTSU5HT0xBXHJcbiAgICAgICAgICBvdXRwdXQgPSBWYWx1ZVBhaXJzW3JlY29yZFtmaWVsZGNvbmZpZy5OYW1lXV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgIH07XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOiB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpeyByZXR1cm4gdmFsdWU7IH1cclxuICAgICAgICBpZiAoKDxOdW1lcmljRmllbGQ+ZmllbGRjb25maWcpLklzSW50ZWdlcikge1xyXG4gICAgICAgICAgaWYgKCg8TnVtZXJpY0ZpZWxkPmZpZWxkY29uZmlnKS5EZWNpbWFsU2VwYXJhdG9yID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBmaWVsZGNvbmZpZy5EZWNpbWFsUHJlY2lzaW9uICogMTA7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZGVjaW1hbHMpIC8gZGVjaW1hbHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGRlY2ltYWxzID0gZmllbGRjb25maWcuRGVjaW1hbFByZWNpc2lvbiAqIDEwO1xyXG4gICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkZWNpbWFscykgLyBkZWNpbWFscztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lJ106IHtcclxuICAgICAgICByZXR1cm4gXCJpbW1hZ2luZVwiO1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJpbW1hZ2luZSBcIiArIGZpZWxkY29uZmlnLk5hbWUgKyBcIiA6IFwiICsgdmFsdWUpXHJcbiAgICAgICAgLy8gLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAvLyB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiICsgdmFsdWUuRmlsZUV4dGVuc2lvbiArIFwiO2Jhc2U2NCxcIiArIHZhbHVlLkZpbGVEYXRhQmFzZTY0KTtcclxuXHJcbiAgICAgICAgLy8gLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAvLyByZXR1cm4gXCI8aW1nIHNyYz0nXCIgKyByZXNpemVkQmFzZTY0ICsgXCInIHN0eWxlPSdoZWlnaHQ6IFwiICsgdmFsdWUuUmVzaXplZEltYWdlSGVpZ2h0UHggKyBcInB4Jz5cIjtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcblxyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydBbGxlZ2F0byddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiQWxsZWdhdG9cIjtcclxuICAgICAgICAvLyBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWxsZWdhdG8gXCIgKyBmaWVsZC5OYW1lICsgXCIgOiBcIiArIHZhbHVlLCByZWNvcmQpXHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBsZXQgcmVzaXplZEJhc2U2NDtcclxuICAgICAgICAgIC8vIGlmICh2YWx1ZVswXS5Jc0ltYWdlKSB7XHJcbiAgICAgICAgICAvLyAgIC8vIFJlY3VwZXJvIGlsIEJBU0U2NCBkZWxsJ2ltbWFnaW5lIFJlc2l6ZWQgdmlhIHByb21pc2UgY2xpZW50XHJcbiAgICAgICAgICAvLyAgIHJlc2l6ZWRCYXNlNjQgPSBhd2FpdCB0aGlzLnJlc2l6ZUJhc2U2NEltYWdlKFwiZGF0YTppbWFnZS9cIiArIHZhbHVlWzBdLkZpbGVFeHRlbnNpb24gKyBcIjtiYXNlNjQsXCIgKyB2YWx1ZVswXS5GaWxlRGF0YUJhc2U2NCk7XHJcbiAgICAgICAgICAvLyAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBbGxlZ2F0byByZXNpemVkQmFzZTY0XCIsIHJlc2l6ZWRCYXNlNjQpXHJcbiAgICAgICAgICAvLyAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAvLyAgIHJldHVybiAnPGltZyBjbGFzcz1cImltYWdlLXByZXZpZXdcIiBzcmM9XCInICsgcmVzaXplZEJhc2U2NCArICdcIiBzdHlsZT1cImhlaWdodDogJyArIHZhbHVlWzBdLlJlc2l6ZWRJbWFnZUhlaWdodFB4ICsgJ3B4XCI+JztcclxuICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWVbMF0uRmlsZUNvbnRlbnRUeXBlID09IFwiYXBwbGljYXRpb24vcGRmXCIpIHtcclxuICAgICAgICAgIC8vICAgcmV0dXJuICc8aWZyYW1lIHNyYz1cImRhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwnICsgdmFsdWVbMF0uRmlsZURhdGFCYXNlNjQgKyAnXCJzdHlsZT1cIm1pbi1oZWlnaHQ6IDMwMHB4OyBoZWlnaHQ6IDEwMCU7XCI+PC9pZnJhbWU+JztcclxuICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiAnPGlmcmFtZSBzcmM9XCJkYXRhOlwiJyArIHZhbHVlWzBdLkZpbGVFeHRlbnNpb24gKyAnXCI7YmFzZTY0LCcgKyB2YWx1ZVswXS5GaWxlRGF0YUJhc2U2NCArICdcInN0eWxlPVwibWluLWhlaWdodDogMzAwcHg7IGhlaWdodDogMTAwJTtcIj48L2lmcmFtZT4nO1xyXG4gICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAvLyByZXR1cm4gIFwiPGltZyBzcmM9J1wiICsgcmVzaXplZEJhc2U2NCArIFwiJyBzdHlsZT0naGVpZ2h0OiBcIiArIHZhbHVlWzBdLlJlc2l6ZWRJbWFnZUhlaWdodFB4ICsgXCJweCc+XCI7XHJcbiAgICAgICAgICAvLyBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWxsZWdhdG8gb3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXToge1xyXG4gICAgICAgIHJldHVybiBcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCI7XHJcblxyXG4gICAgICAgIC8vIFJlY3VwZXJvIGlsIEJBU0U2NCBkZWxsJ2ltbWFnaW5lIFJlc2l6ZWQgdmlhIHByb21pc2UgY2xpZW50XHJcbiAgICAgICAgLy8gdmFyIHJlc2l6ZWRCYXNlNjQgPSBhd2FpdCB0aGlzLnJlc2l6ZUJhc2U2NEltYWdlKFwiZGF0YTppbWFnZS9cIiArIHZhbHVlLkZpbGVFeHRlbnNpb24gKyBcIjtiYXNlNjQsXCIgKyB2YWx1ZS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgLy8gcmV0dXJuIFwiPGltZyBzcmM9J1wiICsgcmVzaXplZEJhc2U2NCArIFwiJyBzdHlsZT0naGVpZ2h0OiBcIiArIHZhbHVlLlJlc2l6ZWRJbWFnZUhlaWdodFB4ICsgXCJweCc+XCI7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gaW1tYWdpbmknXToge1xyXG4gICAgICAgIHJldHVybiBcIkVsZW5jbyBpbW1hZ2luaVwiO1xyXG4gICAgICAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheSA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKDxJbWFnZVNlbGVjdG9yRmllbGQ+ZmllbGRjb25maWcpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpbWFnZW9iajogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBhdHRhY2htZW50SW5Gb3JtOiBEeW5BdHRhY2htZW50ID0gKDxJbWFnZVNlbGVjdG9yRmllbGQ+ZmllbGRjb25maWcpLkF0dGFjaG1lbnRMaXN0LmZpbmQoeCA9PiB4LklEID09IGltYWdlb2JqKTtcclxuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5ICs9IGF0dGFjaG1lbnRJbkZvcm0uQnV0dG9uS2V5ICsgXCIsIFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHZhciBwYXJ0cyA9IG91dHB1dFZhbHVlc0FycmF5LnNwbGl0KFwiLCBcIik7XHJcbiAgICAgICAgICByZXR1cm4gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSkuam9pbihcIiwgXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhciBhdHRhY2htZW50SW5Gb3JtOiBEeW5BdHRhY2htZW50ID0gKDxJbWFnZVNlbGVjdG9yRmllbGQ+ZmllbGRjb25maWcpLkF0dGFjaG1lbnRMaXN0LmZpbmQoeCA9PiB4LklEID09IHZhbHVlKTtcclxuICAgICAgICAgIGlmIChhdHRhY2htZW50SW5Gb3JtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRJbkZvcm0uQnV0dG9uS2V5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ106IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJcIil7IHJldHVybiB2YWx1ZTsgfVxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJEYXRhIGUvbyBvcmFcIiwgZmllbGRjb25maWcpO1xyXG4gICAgICAgIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuRGF0ZUZvcm1hdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBsZXQgZml4RGF0ZUZvcm1hdCA9ICg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHZhbHVlLCBmaXhEYXRlRm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHZhbHVlLCBcImRkL01NL3l5eXlcIik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIFwiZGQvTU0veXl5eSBISDptbVwiKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBvcmFyaW8nXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIFwiSEg6bW1cIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcHJpbnRWYWx1ZVxyXG5cclxuICAvLyNyZWdpb24gcmVzaXplQmFzZTY0SW1hZ2VcclxuICBwcml2YXRlIGFzeW5jIHJlc2l6ZUJhc2U2NEltYWdlKGJhc2U2NEltYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltYWdldHlwZSA9IC9kYXRhOmltYWdlXFwvKFtcXHddKyk7LztcclxuICAgICAgY29uc3QgbWF0Y2ggPSBiYXNlNjRJbWFnZS5tYXRjaChpbWFnZXR5cGUpO1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IGJhc2U2NEltYWdlO1xyXG4gICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuICAgICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSAxMjg7XHJcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbztcclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XHJcbiAgICAgICAgbGV0IHF1YWxpdHkgPSAwLjg7XHJcbiAgICAgICAgbGV0IGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS8nICsgbWF0Y2hbMV0sIHF1YWxpdHkpO1xyXG4gICAgICAgIHJlc29sdmUoZGF0YVVSTCk7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHJlc2l6ZUJhc2U2NEltYWdlXHJcbn1cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cImxvYWRlZEZpbHRlcnMgJiYgc2hvd1RpdGxlXCJcclxuICAgICAgPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L21hdC1jYXJkLXRpdGxlXHJcbiAgICA+XHJcbiAgICA8IS0tIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KG51bGwpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+IC0tPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPCEtLSNyZWdpb24gRklMVEVSUyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiICpuZ0lmPVwibG9hZGVkRmlsdGVyc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIGFsaWduLWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICAgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBpbml6aW8nXCJcclxuICAgICAgICAgIFtsYWJlbF09XCInUGVyaW9kbyBpbml6aW8nXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibWluRGF0ZVwiXHJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInZGQvTU0veXl5eSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIGFsaWduLWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICAgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJtYXhEYXRlXCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImZpbHRlckRhdGFBbnN3ZXJzKClcIlxyXG4gICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiXHJcbiAgICAgICAgICBbb3V0cHV0Rm9ybWF0XT1cIidkZC9NTS95eXl5J1wiXHJcbiAgICAgICAgICBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VsZXppb25lIGRlaSBjYW1waTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzXCIgW3ZhbHVlXT1cInByb3BlcnR5XCI+XHJcbiAgICAgICAgICAgICAge3sgcHJvcGVydGllc0xhYmVsW3Byb3BlcnR5LmxhYmVsXSB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICBzZWxlY3RlZFByb3BlcnRpZXMgPT0gbnVsbCB8fCBzZWxlY3RlZFByb3BlcnRpZXMubGVuZ3RoID09IDBcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZ3JhcGgtZ2VuZXJhdGUgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBHZW5lcmFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBGSUxURVJTIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFRBQkxFIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgKm5nSWY9XCJmaWx0ZXJlZEFuc3dlcnMgJiYgZmlsdGVyZWRBbnN3ZXJzLmxlbmd0aCA+IDA7IGVsc2Ugbm9fYW5zd2Vyc1wiXHJcbiAgICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIG10LTMgbWItMlwiXHJcbiAgICA+XHJcbiAgICAgIDx0YWJsZVxyXG4gICAgICAgIG1hdC10YWJsZVxyXG4gICAgICAgIFtkYXRhU291cmNlXT1cInNlbGVjdGVkUHJvcGVydGllc1wiXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4IG1hdC10YWJsZS1maXhlZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIENvbG9ubmEgZmlzc2EgcGVyIGxlIHByb3ByaWV0w6AgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcm9wZXJ0eVwiIHN0aWNreT5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJzdGlja3ktY29sdW1uXCI+XHJcbiAgICAgICAgICAgIERhdGEgSW5zZXJpbWVudG9cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgc2VsZWN0ZWRQcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktY29sdW1uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgcHJvcGVydGllc0xhYmVsW3NlbGVjdGVkUHJvcGVydGllcy5sYWJlbF0gfX1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gR2VuZXJhIGRpbmFtaWNhbWVudGUgbGUgY29sb25uZSBwZXIgb2duaSByaXNwb3N0YSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRBbnN3ZXJzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIFttYXRDb2x1bW5EZWZdPVwiJ2NvbCcgKyBpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLklEICE9ICcwJ1wiPnt7IHZhbHVlLkFuc3dlckRhdGUgfCBkYXRlIDogXCJkZC9NTS95eXl5IEhIOm1tXCIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUuSUQgPT0gJzAnXCI+e3sgdmFsdWUuQW5zd2VyRGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8IS0tIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IHt7IHZhbHVlLkFuc3dlckRhdGUgfCBkYXRlOidkZC9NTS95eXl5IEhIOm1tJyB9fSA8L3RoPiAtLT5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBzZWxlY3RlZFByb3BlcnRpZXNcIj5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBzZWxlY3RlZFByb3BlcnRpZXMubGFiZWwgPT09IFwiQW5zd2VyRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZSA6IFwiZGQvTU0veXl5eSBISDptbVwiKVxyXG4gICAgICAgICAgICAgICAgOiBwcmludFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvcGVydGllcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW3NlbGVjdGVkUHJvcGVydGllcy5sYWJlbF0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzLmNvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICApID8/IFwiTi9BXCJcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPCEtLSAtIFxyXG4gICAgICAgICAgICB7e3NlbGVjdGVkUHJvcGVydGllcy50eXBlfX1cclxuICAgICAgICAgICAge3tzZWxlY3RlZFByb3BlcnRpZXMubGFiZWx9fSAtLT5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gSGVhZGVyIGRlbGxhIHRhYmVsbGEgLS0+XHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuXHJcbiAgICAgICAgPCEtLSBSaWdoZSBkZWxsYSB0YWJlbGxhIC0tPlxyXG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9fYW5zd2Vycz5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMiB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxzcGFuPiBOb24gY2kgc29ubyByaXNwb3N0ZSA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFRBQkxFIC0tPlxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gICAgPCEtLSA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj4gLS0+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG48IS0tIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGxpc3QtZm9ybS1yZWNvcmQtaGVhZGVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICA8aDQgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgPGI+RWxlbmNvIHt7IGZvcm0uTmFtZSB9fTwvYj5cclxuICAgIDwvaDQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHRleHQtcmlnaHRcIiAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdChudWxsKVwiPlxyXG4gICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGVxcC10YWJsZSBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmQtdGFibGVcIiAjdGFibGVSZWNvcmRzICpuZ0lmPVwibG9hZGVyICYmIGNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiXHJcbiAgW2RhdGFdPVwiY29uZmlndXJhdGlvbnMudmFsdWVzXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiPjwvZXFwLXRhYmxlPiAtLT5cclxuIl19
816
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGxpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9obGlzdC1mb3JtLXJlY29yZC9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2hsaXN0LWZvcm0tcmVjb3JkL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxVQUFVLEdBQ1gsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUFhLGFBQWEsRUFBZSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNGLE9BQU8sRUFBYSxNQUFNLEVBQWdCLE1BQU0saUNBQWlDLENBQUM7QUFDbEYsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLDJDQUEyQyxDQUFDO0FBR25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBRXpILE9BQU8sRUFHTCxhQUFhLEdBQ2QsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUt0QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFRbkYsTUFBTSxPQUFPLHdCQUF3QjtJQTRDbkMscUJBQXFCO0lBQ3JCLFlBQ1Usb0JBQTBDLEVBQzFDLGNBQWlDLEVBQ2pDLFFBQWtCO1FBRmxCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUExQ25CLFNBQUksR0FBUyxJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFDeEMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsb0JBQWUsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDakUsa0JBQWEsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFeEUsdUJBQWtCLEdBQ2hCLElBQUkseUNBQXlDLEVBQUUsQ0FBQztRQUNsRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLFlBQU8sR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUNwQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVuQixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hFLHdCQUFtQixHQUF5RCxJQUFJLFlBQVksRUFBeUMsQ0FBQztRQUV0SSxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xFLHdCQUFtQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWpGLFVBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsWUFBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFckIsc0RBQXNEO1FBQ3RELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsaUZBQWlGO1FBQ2pGLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBTXJCLG1GQUFtRjtRQUNuRixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIseUJBQW9CLEdBQXlDLElBQUksQ0FBQztRQUNsRSxrQ0FBNkIsR0FBRyw2QkFBNkIsQ0FBQztRQVE1RCwrQ0FBK0M7SUFDakQsQ0FBQztJQUNELHdCQUF3QjtJQUV4QixtQkFBbUI7SUFDbkIsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFNUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxzQkFBc0I7SUFFdEIscUJBQXFCO0lBQ3JCLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxhQUFhLENBQUMsUUFBUSxDQUFDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlELDBFQUEwRTtRQUMxRSxrR0FBa0c7UUFDbEcseUVBQXlFO1FBQ3pFLHlCQUF5QjtRQUN6QixJQUFJO0lBQ04sQ0FBQztJQUNELHdCQUF3QjtJQUV4QixxQkFBcUI7SUFDckIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFhLElBQUksQ0FBQyxNQUFNO1FBQ3hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2IsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFDRCx3QkFBd0I7SUFFeEIsNEJBQTRCO0lBQzVCOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQjtRQUN0Qjs7OztXQUlHO1FBQ0gsTUFBTSxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7WUFDakQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6QixJQUFJLE1BQU0sR0FBVyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUM5QixNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVEOzs7O1dBSUc7UUFDSCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtZQUNuQyw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUNsRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ3RCLENBQUMsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsc0VBQXNFO1lBQ3RFLGFBQWEsQ0FBQyxRQUFRLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzNFLHVCQUF1QixFQUFFLENBQUM7U0FDM0I7YUFBTTtZQUNMLCtEQUErRDtZQUMvRCxhQUFhLENBQUMsUUFBUSxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUMzRSxJQUFJO2dCQUNGLElBQ0UsSUFBSSxDQUFDLHFCQUFxQjtvQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU87b0JBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3REO29CQUNBLElBQUksbUJBQW1CLEdBQUc7d0JBQ3hCOzRCQUNFLFNBQVMsRUFBRSxPQUFPOzRCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUN4QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzt5QkFDeEM7cUJBQ0YsQ0FBQztvQkFDRixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTt3QkFDdEMsK0JBQStCO3dCQUMvQixvQ0FBb0M7d0JBQ3BDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDdEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFOzRCQUN4QixnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdEMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQyxDQUNGLENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsbUJBQW1CO3dCQUNuQixtQ0FBbUM7d0JBQ25DLG1CQUFtQixDQUFDLElBQUksQ0FDdEI7NEJBQ0UsU0FBUyxFQUFFLFFBQVE7NEJBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07NEJBQ3RDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO3lCQUN4QyxDQUFDLENBQUM7d0JBQ0wsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUMvRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFxQixFQUFFLEVBQUU7NEJBQ3hCLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0Qyx1QkFBdUIsRUFBRSxDQUFDO3dCQUM1QixDQUFDLENBQ0YsQ0FBQztxQkFFSDtpQkFDRjthQUNGO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUE7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFDRCwrQkFBK0I7SUFHL0IsMEJBQTBCO0lBQzFCOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYjtnQkFDRSxHQUFHLEVBQUUsUUFBUTtnQkFDYixPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVU7Z0JBQzNCLGNBQWMsRUFBRSxlQUFlO2dCQUMvQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUMxQixPQUFPLEVBQUUsRUFBRTthQUNaO1NBQ0YsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU87aUJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUN0RCxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU87aUJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQ25FLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUM3Qzs7Ozs7O21CQU1PO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzFDLElBQUksQ0FBQyxPQUFPO2lCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3hELENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTztpQkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO2lCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTthQUN6QyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCw2QkFBNkI7SUFFN0IsaUNBQWlDO0lBQ2pDOzs7T0FHRztJQUNLLHVCQUF1QjtRQUM3QixhQUFhLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3RDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlO29CQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU87cUJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztxQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTt3QkFDMUIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO3dCQUNwQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3BCLDZCQUE2QjtvQkFDL0IsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUNELG9DQUFvQztJQUdwQyxxQ0FBcUM7SUFDckM7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCO1FBQ2pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBGLElBQUksZ0JBQWtDLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsNEJBQTRCO1lBQzVCLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUM7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLGdCQUFnQjthQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNiLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZTtnQkFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFFakIsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUV0RCxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM1Qyw4RkFBOEY7cUJBQy9GO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFJSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBRTVDLENBQUM7SUFDRCx3Q0FBd0M7SUFFeEMsMkJBQTJCO0lBQzNCOzs7O09BSUc7SUFDSCw4REFBOEQ7SUFDOUQsMEVBQTBFO0lBQzFFLCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGlDQUFpQztJQUNqQyw0REFBNEQ7SUFDNUQsNkRBQTZEO0lBQzdELFdBQVc7SUFDWCwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLG1EQUFtRDtJQUNuRCxXQUFXO0lBQ1gsZUFBZTtJQUNmLDBDQUEwQztJQUMxQyxhQUFhO0lBQ2IsNkVBQTZFO0lBQzdFLFlBQVk7SUFDWix5Q0FBeUM7SUFDekMsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSxjQUFjO0lBQ2QsZ0RBQWdEO0lBQ2hELHNCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsY0FBYztJQUNkLDREQUE0RDtJQUM1RCxvRUFBb0U7SUFDcEUsOEJBQThCO0lBQzlCLFlBQVk7SUFDWixVQUFVO0lBQ1YsZUFBZTtJQUNmLDRDQUE0QztJQUM1QyxzREFBc0Q7SUFDdEQseURBQXlEO0lBQ3pELDRFQUE0RTtJQUM1RSx5REFBeUQ7SUFDekQsd0RBQXdEO0lBQ3hELFVBQVU7SUFDVixlQUFlO0lBQ2Ysc0NBQXNDO0lBQ3RDLHNDQUFzQztJQUV0QyxXQUFXO0lBQ1gsZ0RBQWdEO0lBQ2hELGlCQUFpQjtJQUNqQiwwREFBMEQ7SUFDMUQseURBQXlEO0lBQ3pELHNFQUFzRTtJQUN0RSxnQkFBZ0I7SUFDaEIsbUZBQW1GO0lBQ25GLGlFQUFpRTtJQUNqRSw0Q0FBNEM7SUFDNUMsZ0NBQWdDO0lBQ2hDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsbUZBQW1GO0lBQ25GLDZFQUE2RTtJQUM3RSx3QkFBd0I7SUFDeEIsY0FBYztJQUNkLGFBQWE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQXVDO0lBQ3ZDLFdBQVc7SUFFWCxlQUFlO0lBQ2YsNkNBQTZDO0lBQzdDLDhDQUE4QztJQUM5QywwREFBMEQ7SUFDMUQsMkVBQTJFO0lBQzNFLDJCQUEyQjtJQUMzQixxQkFBcUI7SUFDckIsdUVBQXVFO0lBQ3ZFLCtCQUErQjtJQUMvQixnREFBZ0Q7SUFDaEQsNERBQTREO0lBQzVELG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsNkJBQTZCO0lBQzdCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQiwrRUFBK0U7SUFDL0UsZUFBZTtJQUNmLFlBQVk7SUFDWixXQUFXO0lBQ1gsbUNBQW1DO0lBQ25DLHFDQUFxQztJQUNyQyxlQUFlO0lBQ2Ysb0NBQW9DO0lBQ3BDLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsTUFBTTtJQUNOLG1CQUFtQjtJQUNuQixJQUFJO0lBQ0osOEJBQThCO0lBRTlCLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsTUFBYztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWlCO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCwyQkFBMkI7SUFDM0I7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLGtCQUFrQjtRQUNsQyxhQUFhLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxFQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlGLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDM0M7UUFDRCxhQUFhLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxFQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCw4QkFBOEI7SUFFOUIsMkJBQTJCO0lBQzNCOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBRTFCLElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNmLDBEQUEwRDtnQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUVELElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNmLDBEQUEwRDtnQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU3SixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ3hFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDaEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDeEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ25DO1lBR0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0QsOEJBQThCO0lBRTlCLHdCQUF3QjtJQUN4QixpRUFBaUU7SUFDakUsY0FBYztRQUNaLDBEQUEwRDtRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVsRix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCwyQkFBMkI7SUFFM0IsZ0NBQWdDO0lBQ2hDLHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFFbkMsZ0RBQWdEO2dCQUVoRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUM7b0JBQUUsT0FBTztpQkFBRTtnQkFDN0IsSUFBSSxZQUFZLEdBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFFM0MsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFDO29CQUN2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQzt3QkFDdEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQ3JFO3lCQUNJLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0csT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDcEI7eUJBQ0ksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDWixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3RyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQzdGO3lCQUNJLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFOzRCQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDcEI7eUJBQ0ksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUU7NEJBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4SSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO3FCQUNwQjt5QkFDSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQzt3QkFDM0csSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNuQjtpQkFDRjtxQkFBTSxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ25CO1lBSUgsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVDLE9BQU87SUFDYixDQUFDO0lBQ0QsbUNBQW1DO0lBRW5DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxhQUFhLEdBQUcsS0FBSztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxHQUFHO2FBQ0EsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDdkQsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBQUEsQ0FBQztJQUVGLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTTtRQUM5QyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFBRTtvQkFDckMsSUFBSSxLQUFLLElBQUksRUFBRSxFQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqQyxJQUFHLENBQUMsS0FBSyxFQUFDO3dCQUNSLE9BQU8sS0FBSyxDQUFDO3FCQUNkO29CQUNELElBQUksTUFBTSxDQUFDO29CQUNYLElBQUksVUFBVSxHQUF5QixFQUFFLENBQUM7b0JBQzFDLDZCQUE2QjtvQkFDN0IsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO3dCQUN0RCxJQUFJLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FDbEQsV0FBVyxDQUFDLE9BQU8sRUFDbkIsTUFBTSxFQUNOLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7d0JBQ0osSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7NEJBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVCLElBQUksR0FBRyxFQUFFLENBQUE7NEJBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDaEMsSUFBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDN0M7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDN0M7NEJBQ0gsQ0FBQyxDQUFDLENBQUE7eUJBQ0g7d0JBRUQsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7NEJBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQzdCO3FCQUNGO3lCQUFNLElBQXFCLFdBQVksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFxQixXQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2xILGVBQWU7d0JBQ2YsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBa0IsV0FBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUJBQ25GO3lCQUFNLElBQXFCLFdBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFxQixXQUFZLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTt3QkFDL0csNkNBQTZDO3dCQUM3QyxVQUFVLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFrQixXQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQzFGO29CQUVELHNEQUFzRDtvQkFDdEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO29CQUNsQix5R0FBeUc7b0JBQ3pHLG1DQUFtQztvQkFDbkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7d0JBQzFCLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7cUJBQ2pDO29CQUNELFVBQVUsR0FBRyxRQUFRLENBQUM7b0JBRXRCLHNDQUFzQztvQkFDdEMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBcUIsV0FBWSxDQUFDLGNBQWMsRUFBRTt3QkFDcEYsbUJBQW1CO3dCQUNuQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUM5QyxRQUFRLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7d0JBQ2xFLENBQUMsQ0FBQyxDQUFDO3dCQUNILE1BQU0sR0FBRyxRQUFRLENBQUM7cUJBQ25CO3lCQUFNO3dCQUNMLHNCQUFzQjt3QkFDdEIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQy9DO29CQUNELE9BQU8sTUFBTSxDQUFDO2lCQUNmO2dCQUFBLENBQUM7WUFDRixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFBRTtvQkFDcEMsSUFBSSxLQUFLLElBQUksRUFBRSxFQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqQyxJQUFtQixXQUFZLENBQUMsU0FBUyxFQUFFO3dCQUN6QyxJQUFtQixXQUFZLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFOzRCQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzFCOzZCQUFNOzRCQUNMLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7NEJBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO3lCQUNoRDtxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO3dCQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztxQkFDaEQ7b0JBQ0QsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUFFO29CQUM5QixPQUFPLFVBQVUsQ0FBQztvQkFDbEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUE7b0JBQ3RFLGlFQUFpRTtvQkFDakUsNkhBQTZIO29CQUU3SCx5Q0FBeUM7b0JBQ3pDLG1HQUFtRztvQkFFbkcsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBR0YsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUFFO29CQUM5QixPQUFPLFVBQVUsQ0FBQztvQkFDbEIsMkVBQTJFO29CQUUzRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7d0JBQ2pCLElBQUksYUFBYSxDQUFDO3dCQUNsQiwwQkFBMEI7d0JBQzFCLG1FQUFtRTt3QkFDbkUsaUlBQWlJO3dCQUNqSSx1RUFBdUU7d0JBQ3ZFLDJDQUEyQzt3QkFDM0MsOEhBQThIO3dCQUM5SCw4REFBOEQ7d0JBQzlELDBJQUEwSTt3QkFDMUksV0FBVzt3QkFDWCwySkFBMko7d0JBQzNKLElBQUk7d0JBRUosc0NBQXNDO3dCQUN0Qyx1R0FBdUc7d0JBQ3ZHLHNGQUFzRjtxQkFDdkY7b0JBRUQsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7Z0JBQUU7b0JBQzFDLE9BQU8sc0JBQXNCLENBQUM7b0JBRTlCLDhEQUE4RDtvQkFDOUQsNkhBQTZIO29CQUU3SCxzQ0FBc0M7b0JBQ3RDLG1HQUFtRztvQkFFbkcsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBQUU7b0JBQ3JDLE9BQU8saUJBQWlCLENBQUM7b0JBQ3pCLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLElBQXlCLFdBQVksQ0FBQyxjQUFjLEVBQUU7d0JBQ3JFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7NEJBQ2pDLElBQUksZ0JBQWdCLEdBQXVDLFdBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQzs0QkFDbkgsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Z0NBQzVCLGlCQUFpQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7NkJBQ3hEO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDcEQ7eUJBQ0k7d0JBQ0gsSUFBSSxnQkFBZ0IsR0FBdUMsV0FBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO3dCQUNoSCxJQUFJLGdCQUFnQixJQUFJLElBQUksRUFBRTs0QkFDNUIsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7eUJBQ25DO3FCQUNGO29CQUVELE1BQU07aUJBQ1A7Z0JBQUEsQ0FBQztZQUNGLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztpQkFBRTtnQkFDakMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELElBQWdCLFdBQVksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO29CQUMvQyxJQUFJLGFBQWEsR0FBZSxXQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzVFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUN0RDtxQkFDSTtvQkFDSCxJQUFnQixXQUFZLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUN4RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztxQkFDckQ7eUJBQU0sSUFBZ0IsV0FBWSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDaEYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztxQkFDM0Q7eUJBQU0sSUFBZ0IsV0FBWSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDakYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ2hEO2lCQUNGO2dCQUNELE1BQU07YUFDUDtZQUVELE9BQU8sQ0FBQyxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUVILENBQUM7SUFDRCx1QkFBdUI7SUFFdkIsMkJBQTJCO0lBQ25CLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNqRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztZQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHO2dCQUNYLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBRW5DLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQztnQkFFekMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUMxQixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3NIQS8wQlUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsaWxCQy9DckMsby9MQWlLQTs0RkRsSGEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLG1CQUFtQjtrS0FLcEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1qQyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpZ0NvbHVtbixcclxuICBUbXdUYWJsZUNvbXBvbmVudCxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJ0bXctdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0sIEFuc3dlclN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEltYWdlU2VsZWN0b3JGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50XCI7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiaGxpc3QtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJobGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhMaXN0Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcblxyXG4gIC8vIGwndW5hIG8gbCdhbHRyYSBwZXIgZHVlIG1vZGFsaXTDoCBkJ3Vzb1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsOyAvLyBib2ggbWEgYydlcmEgcHJpbWFcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IFRtd1RhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBsb2FkZWRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGVkVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVmlld1JlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuOyB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBtb2RlcyA9IE1vZGVFbnVtO1xyXG4gIG1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIG1heERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAvLyBsZSBwcm9wcmlldMOgIGRlbGxhIHJpc3Bvc3RhIGRhIHN0YW1wYXJlIG5lbGxlIHJpZ2hlXHJcbiAgcHJvcGVydGllcyA9IFtdO1xyXG4gIC8vIGxlIGxhYmVsIGFzc29jaWF0ZSBhbGxlIHByb3ByaWV0w6AgZGEgc3RhbXBhcmUgY2hlIGNvbmRpdmlkb25vIGxvIHN0ZXNzbyBpbmRpY2VcclxuICBwcm9wZXJ0aWVzTGFiZWwgPSBbXTtcclxuICBzZWxlY3RlZFByb3BlcnRpZXM6IHN0cmluZ1tdO1xyXG5cclxuICAvLyBpIGRhdGkgZGVsbGUgcmlzcG9zdGUgZGEgc3RhbXBhcmVcclxuICBmaWx0ZXJlZEFuc3dlcnMgLy9sZSByaXNwb3N0ZSBmaWx0cmF0ZSBcclxuXHJcbiAgLy8gQ29sb25uZSBkYSB2aXN1YWxpenphcmUgKGZpc3NhIGxhIHByaW1hIGNvbG9ubmEgZSBnZW5lcmEgZGluYW1pY2FtZW50ZSBsZSBhbHRyZSlcclxuICBkaXNwbGF5ZWRDb2x1bW5zID0gW107XHJcbiAgZXhpc3RpbmdBZ2dyZWdhdGlvbnM6IEFycmF5PE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtPiA9IG51bGw7XHJcbiAgbnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0gPSBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bTtcclxuXHJcbiAgLy8jcmVnaW9uIENvbnN0cnVjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRlcGlwZTogRGF0ZVBpcGVcclxuICApIHtcclxuICAgIC8vIHRoaXMucHJvcGVydGllc0xhYmVsW1wiQW5zd2VyRGF0ZVwiXSA9IFwiRGF0YVwiO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gQ29uc3RydWN0b3JcclxuXHJcbiAgLy8jcmVnaW9uIG5nT25JbnRpdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25JbnRpdFxyXG5cclxuICAvLyNyZWdpb24gbmdPbkNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY2hhbmdlcycsIGNoYW5nZXMpO1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddLmN1cnJlbnRWYWx1ZTtcclxuICAgIC8vICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25DaGFuZ2VzXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRGb3JtQnlJRFxyXG4gIGFzeW5jIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGdldEZvcm1CeUlEJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldEZvcm1CeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICAvKipcclxuICAgICAqIHByZW5kZSBsZSByaXNwb3N0ZSBlIGxlIHJlbmRlIHBpYXR0ZSwgYWRhdHRlIGEgZGl2ZW50YXJlIHVuYSByaWdhIGRhIHRhYmVsbGFcclxuICAgICAqIG1ldHRlIHR1dHRlIGxlIHJpc3Bvc3RlIG5lbGxlIHN0cnV0dHVyZSBuZWNlc3NhcmllIHBlciBpbCByZWN1cGVybyBlIGxhIHZpc3VhbGl6emF6aW9uZVxyXG4gICAgICogQHBhcmFtIGFuc3dlcnMgXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzID0gKGFuc3dlcnMpID0+IHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgICBhbnN3ZXJzLmZvckVhY2goKGFuc3dlcikgPT4ge1xyXG4gICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKGFuc3dlci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0bXBSZWMuSUQgPSBhbnN3ZXIuSUQ7XHJcbiAgICAgICAgdG1wUmVjLkVudElEID0gYW5zd2VyLkVudElEO1xyXG4gICAgICAgIHRtcFJlYy5WZXJzaW9uID0gYW5zd2VyLlZlcnNpb247XHJcbiAgICAgICAgdG1wUmVjLnVzZXJJRCA9IGFuc3dlci51c2VySUQ7XHJcbiAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSBhbnN3ZXIuQW5zd2VyRGF0ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcHJlcGFyYSBsYSBsaXN0YSBkZWxsZSBjb2xvbm5lIGRhIG1vc3RyYXJlICh1bmEgcGVyIG9nbmkgcmlzcG9zdGEsIHBpw7kgbGEgY29sb25uYSBkZWxsZSBwcm9wcmlldMOgKVxyXG4gICAgICogaW1wb3N0YSBsYSBsaXN0YSBkZWxsZSByaXNwb3N0ZSBkYSB2aXN1YWxpenphcmVcclxuICAgICAqIGxpYmVyYSBsZSB2YXJpYWJpbGkgZGkgY2FyaWNhbWVudG8gcGVyIG1vc3RyYXJlIGkgY29udGVudXRpIGRlbGxhIHZpc3RhXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG5hbWVDb2x1bW5zQW5kU3RhcnRWaWV3ID0gKCkgPT4ge1xyXG4gICAgICAvL2Rlc3RydXR0dXJhIGwnYXJyYXkgcmlzcG9zdGUgZSBwZXIgb2duaSByaXNwb3N0YSBnZW5lcmEgdW4gZWxlbWVudG8gY29sW2ldXHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtcInByb3BlcnR5XCIsIC4uLnRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCgoXywgaSkgPT4gYGNvbCR7aX1gKV07XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXM7XHJcbiAgICAgIHRoaXMuc2V0TWluTWF4RGF0ZXMoKTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGVkRmlsdGVycyA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGVkVGFibGUgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzKSB7XHJcbiAgICAgIC8vIHZlbmdvIGRhIHVuJ2FsdHJhIHZpc3VhbGl6emF6aW9uZSBjaGUgaGEgZ2nDoCByZWN1cGVyYXRvIGxlIHJpc3Bvc3RlXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJoTGlzdCAtIGdldFJlY29yZHNCeUZvcm1JRCBBXCIsIHRoaXMuY29uZmlndXJhdGlvbnMpXHJcbiAgICAgIG5hbWVDb2x1bW5zQW5kU3RhcnRWaWV3KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzb25vIGluIHVuYSBudW92YSBpc3RhbnphIGluIGN1aSBkZXZvIHJlY3VwZXJhcmUgbGUgcmlzcG9zdGVcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhMaXN0IC0gZ2V0UmVjb3Jkc0J5Rm9ybUlEIEJcIiwgdGhpcy5jb25maWd1cmF0aW9ucylcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBub24gaG8gc3BlY2lmaWNhdG8gdW4gdXRlbnRlXHJcbiAgICAgICAgICAgIC8vIHZlZG8gdHV0dGUgbGUgcmlzcG9zdGUgZGVsIG1vZHVsb1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWFycmFuZ2VBbnN3ZXJzQW5kUG9wdWxhdGVMaXN0cyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgICAgICAgIC8vIHZvZ2xpbyBzb2xhbWVudGUgbGUgc3VlIHJpc3Bvc3RlXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWFycmFuZ2VBbnN3ZXJzQW5kUG9wdWxhdGVMaXN0cyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbicsIGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJkb3RzLXZlcnRpY2FsXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIlZpc3VhbGl6emFcIixcclxuICAgICAgICAgIGljb246IFwiaW5mby1jaXJjbGVcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3UmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3T3JFZGl0UmVjb3JkKGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICAvKnRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7Ki9cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgIGljb246IFwidHJhc2hcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5leHRlcm5hbEJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IGJ1dHRvbi50ZXh0LFxyXG4gICAgICAgICAgaWNvbjogYnV0dG9uLmljb24sXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IGJ1dHRvbi5mbigpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25maWd1cmVDb2x1bW5zXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVBZGRpdGlvbmFsQWN0aW9uc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaXVuZ2VyZSBuZWxsYSBjb2xvbm5hIFwiYWN0aW9uXCIgZGVsbGEgZXFwLXRhYmxlIGxlIGF6aW9uaSBzdWkgcmVjb3JkXHJcbiAgICogZGVmaW5pdGUgZGFsbCd1dGVudGUgYWxsJ2ludGVybm8gZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJiB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICAgID8gLTFcclxuICAgICAgICAgICAgOiAwXHJcbiAgICAgICkuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogYWN0aW9uLk5hbWUsXHJcbiAgICAgICAgICAgIGljb246IGFjdGlvbi5JY29uLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZWMgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQ7XHJcbiAgICAgICAgICAgICAgZXZhbChhY3Rpb24uQWN0aW9uKTtcclxuICAgICAgICAgICAgICAvLyBUT0RPOiBzYWx2YXJlIGxlIG1vZGlmaWNoZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnNcclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiB7XHJcbiAgICAgIC8vbmFzY29uZGVyZSBjYW1waSBldGljaGV0dGFcclxuICAgICAgaWYoZi5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkV0aWNoZXR0YVwiXSl7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmLkFuc3dlclN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGYuQW5zd2VyU3R5bGUuSW5MaXN0VmlldztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZi5Jbkxpc3RWaWV3O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zID0gW107XHJcblxyXG4gICAgZmllbGRzRm9yQ29sdW1uc1xyXG4gICAgICAuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IDFcclxuICAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICAgIDogMFxyXG4gICAgICApXHJcbiAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaCh7IGxhYmVsOiBmaWVsZC5MYWJlbCwgdHlwZTogZmllbGQuRmllbGRUeXBlLCBjb25maWc6IGZpZWxkIH0pO1xyXG4gICAgICAgIHRoaXMucHJvcGVydGllc0xhYmVsW2ZpZWxkLkxhYmVsXSA9IGZpZWxkLkRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuQWdncmVnYXRpb25zICE9IG51bGwgJiYgZmllbGQuQWdncmVnYXRpb25zLmxlbmd0aCA+IDAgKXtcclxuICAgICAgICAgIGZpZWxkLkFnZ3JlZ2F0aW9ucy5mb3JFYWNoKChhZ2dyZWdhdGlvbikgPT4geyAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zLmluZGV4T2YoYWdncmVnYXRpb24pID09IC0xKXtcclxuICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zLnB1c2goYWdncmVnYXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5wcm9wZXJ0aWVzTGFiZWxbTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bYWdncmVnYXRpb25dLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKV0gPSBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHNcclxuXHJcbiAgLy8jcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbCdvZ2dldHRvIENvbmZpZ3VyZUNvbHVtbiBjaGUgcmFwcHJlc2VudGEgaWwgQmFzZUZpZWxkIHBhc3NhdG8gaW4gaW5wdXQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBsYSBjb2xvbm5hIG5lbGxhIGVxcC10YWJsZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIGVxcC10YWJsZVxyXG4gICAqL1xyXG4gIC8vIHByaXZhdGUgY3JlYXRlRmllbGRDb2x1bW4oZmllbGQ6IEJhc2VGaWVsZCk6IENvbmZpZ0NvbHVtbiB7XHJcbiAgLy8gICB2YXIgY29sdW1uOiBDb25maWdDb2x1bW4gPSB7IGtleTogZmllbGQuTmFtZSwgZGlzcGxheTogZmllbGQuTGFiZWwgfTtcclxuICAvLyAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gIC8vICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5Cb29sZWFuO1xyXG4gIC8vICAgICAgIGNvbHVtbi5ib29sZWFuVmFsdWVzID0ge1xyXG4gIC8vICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgLy8gICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBjb2x1bW4uc3R5bGVzID0ge1xyXG4gIC8vICAgICAgICAgZmxleDogXCIwIDAgNyVcIixcclxuICAvLyAgICAgICAgIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUixcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgLy8gICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSAhPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl1cclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5EYXRlO1xyXG4gIC8vICAgICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJEYXRhIGUgb3JhXCJdXHJcbiAgLy8gICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IFwiZGQvTU0veXl5eSBISDptbVwiO1xyXG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdXHJcbiAgLy8gICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXRcclxuICAvLyAgICAgICAgICAgICA/IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIilcclxuICAvLyAgICAgICAgICAgICA6IFwiZGQvTU0veXl5eVwiO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgLy8gICAgICAgaWYgKChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuQ1VSUkVOQ1k7XHJcbiAgLy8gICAgICAgICBjb2x1bW4uY3VycmVuY3lQaXBlQ29kZSA9IChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sO1xyXG4gIC8vICAgICAgIH0gZWxzZSBpZiAoIShmaWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcikge1xyXG4gIC8vICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkRFQ0lNQUw7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcblxyXG4gIC8vICAgICAgIC8qXHJcbiAgLy8gICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgLy8gICAgICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uICYmXHJcbiAgLy8gICAgICAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoKVxyXG4gIC8vICAgICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gIC8vICAgICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS5GaWxlTmFtZSlcclxuICAvLyAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXHJcbiAgLy8gICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgLy8gICAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAvLyAgICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVswXS5GaWxlTmFtZVxyXG4gIC8vICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICAqL1xyXG5cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gIC8vICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAvLyAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gICAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAvLyAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgLy8gICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgLy8gICAgICAgICAgICAgICAgIClcclxuICAvLyAgICAgICAgICAgICAgIClcclxuICAvLyAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgLy8gICAgICAgICAgICAgKGspID0+XHJcbiAgLy8gICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gIC8vICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAvLyAgICAgICAvLyBUT0RPXHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gY29sdW1uO1xyXG4gIC8vIH1cclxuICAvLyNlbmRyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuXHJcbiAgLy8jcmVnaW9uIHZpZXdSZWNvcmRcclxuICB2aWV3UmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLm9uVmlld1JlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB2aWV3UmVjb3JkXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvblNlbGVjdGlvbkNoYW5nZVxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGNoZSB2aWVuZSBjaGlhbWF0YSBhbCBjYW1iaW8gZGkgc2VsZXppb25lIGRlaSBwYXJhbWV0cmkgZGEgbW9zdHJhcmVcclxuICAgKiBhZ2dpb3JuYSBsYSBsaXN0YSBkZWxsZSBwcm9wcmlldMOgIHNlbGV6aW9uYXRlIGNoZSBnZXN0aXNjZSBsZSByaWdoZSBtb3N0cmF0ZSBwZXIgb2duaSByaXNwb3N0YVxyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnRpZXMgXHJcbiAgICovXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0ZWRQcm9wZXJ0aWVzLnZhbHVlXCIsc2VsZWN0ZWRQcm9wZXJ0aWVzLnZhbHVlKTtcclxuICAgIGlmIChzZWxlY3RlZFByb3BlcnRpZXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvcGVydGllcyA9IHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInRoaXMuc2VsZWN0ZWRQcm9wZXJ0aWVzIGFzc2VnbmF0YVwiLHRoaXMuc2VsZWN0ZWRQcm9wZXJ0aWVzKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uU2VsZWN0aW9uQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBmaWx0ZXJEYXRhQW5zd2Vyc1xyXG4gIC8qKlxyXG4gICAqIGZ1bnppb25lIGNoZSBmaWx0cmEgbGUgcmlzcG9zdGUgaW4gYmFzZSBhbCByYW5nZSBkaSBkYXRlIGJhc2FuZG9zaSBzdWwgY2FtcG8gZmlzc28gQW5zd2VyRGF0ZSBwZXIgaWwgcGFyYWdvbmVcclxuICAgKi9cclxuICBmaWx0ZXJEYXRhQW5zd2VycygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkQW5zd2VycyA9IFtdO1xyXG5cclxuICAgICAgaWYoIXRoaXMubWluRGF0ZSl7XHJcbiAgICAgICAgLy8gQ29udmVydG8gbGUgZGF0ZSBkaSBBbnN3ZXJEYXRlIGluIG9nZ2V0dGkgRGF0ZSBlIG9yZGlub1xyXG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKHZhbHVlID0+IG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpKTsgICAgXHJcbiAgICAgICAgLy8gVHJvdm8gbGEgZGF0YSBwacO5IHJlY2VudGUgKG1heCkgZSBsYSBwacO5IHZlY2NoaWEgKG1pbilcclxuICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShNYXRoLm1pbiguLi5kYXRlcy5tYXAoZGF0ZSA9PiBkYXRlLmdldFRpbWUoKSkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIXRoaXMubWF4RGF0ZSl7XHJcbiAgICAgICAgLy8gQ29udmVydG8gbGUgZGF0ZSBkaSBBbnN3ZXJEYXRlIGluIG9nZ2V0dGkgRGF0ZSBlIG9yZGlub1xyXG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKHZhbHVlID0+IG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpKTsgICAgXHJcbiAgICAgICAgLy8gVHJvdm8gbGEgZGF0YSBwacO5IHJlY2VudGUgKG1heCkgZSBsYSBwacO5IHZlY2NoaWEgKG1pbilcclxuICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZShNYXRoLm1heCguLi5kYXRlcy5tYXAoZGF0ZSA9PiBkYXRlLmdldFRpbWUoKSkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1heERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgNTkpO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5maWx0ZXIoIHZhbHVlID0+IG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpID49IHRoaXMubWluRGF0ZSAmJiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSA8PSB0aGlzLm1heERhdGUpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZXhpc3RpbmdBZ2dyZWdhdGlvbnMgIT0gbnVsbCAmJiB0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zLmZvckVhY2goKGFnZ3JlZ2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJlZEFuc3dlcnNbMF0pKTtcclxuICAgICAgICAgICAgICByZWNvcmQuSUQgPSBcIjBcIjtcclxuICAgICAgICAgICAgICByZWNvcmQuQW5zd2VyRGF0ZSA9IE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW2FnZ3JlZ2F0aW9uXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMucHVzaChyZWNvcmQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsbEFnZ3JlZ2F0aW9uQ29sdW1ucygpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gW1wicHJvcGVydHlcIiwgLi4udGhpcy5maWx0ZXJlZEFuc3dlcnMubWFwKChfLCBpKSA9PiBgY29sJHtpfWApXTtcclxuXHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZmlsdGVyRGF0YUFuc3dlcnNcclxuXHJcbiAgLy8jcmVnaW9uIHNldE1pbk1heERhdGVzXHJcbiAgLy8gRnVuemlvbmUgcGVyIG90dGVuZXJlIGxhIGRhdGEgcGnDuSByZWNlbnRlIGUgcXVlbGxhIHBpw7kgdmVjY2hpYVxyXG4gIHNldE1pbk1heERhdGVzKCkge1xyXG4gICAgLy8gQ29udmVydG8gbGUgZGF0ZSBkaSBBbnN3ZXJEYXRlIGluIG9nZ2V0dGkgRGF0ZSBlIG9yZGlub1xyXG4gICAgY29uc3QgZGF0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5tYXAodmFsdWUgPT4gbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkpO1xyXG5cclxuICAgIC8vIFRyb3ZvIGxhIGRhdGEgcGnDuSByZWNlbnRlIChtYXgpIGUgbGEgcGnDuSB2ZWNjaGlhIChtaW4pXHJcbiAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShNYXRoLm1pbiguLi5kYXRlcy5tYXAoZGF0ZSA9PiBkYXRlLmdldFRpbWUoKSkpKTtcclxuICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKE1hdGgubWF4KC4uLmRhdGVzLm1hcChkYXRlID0+IGRhdGUuZ2V0VGltZSgpKSkpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gc2V0TWluTWF4RGF0ZXNcclxuXHJcbiAgLy8jcmVnaW9uIGZpbGxBZ2dyZWdhdGlvbkNvbHVtbnNcclxuICBmaWxsQWdncmVnYXRpb25Db2x1bW5zKCl7XHJcbiAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEID09ICcwJykuZm9yRWFjaCgoYWdnckNvbCkgPT4ge1xyXG4gICAgICBPYmplY3Qua2V5cyhhZ2dyQ29sKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHJcbiAgICAgICAgLy9pZiAoa2V5ICE9IFwiQW5zd2VyRGF0ZVwiKXsgYWdnckNvbFtrZXldID0gXCJcIjsgfVxyXG5cclxuICAgICAgICB2YXIgZmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoeCA9PiB4LkxhYmVsID09IGtleSk7XHJcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpeyByZXR1cm47IH1cclxuICAgICAgICB2YXIgYWdncmVnYXRpb25zOiBhbnkgPSBmaWVsZC5BZ2dyZWdhdGlvbnM7XHJcblxyXG4gICAgICAgIGlmIChhZ2dyZWdhdGlvbnMgIT0gbnVsbCl7XHJcbiAgICAgICAgICBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiQ09VTlRcIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIkNPVU5UXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJykubGVuZ3RoOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIlNVTVwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiU1VNXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgc3VtID0gMDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBzdW0gKz0gcGFyc2VJbnQoZWxba2V5XSk7IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBzdW07ICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIkFWR1wiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiQVZHXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgYXZnID0gMDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBhdmcgKz0gcGFyc2VJbnQoZWxba2V5XSk7IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBhdmcgLyB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkubGVuZ3RoOyAgICAgICAgICBcclxuICAgICAgICAgIH0gICBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIk1JTlwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiTUlOXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgbWluID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBpZiAobWluID09IG51bGwgfHwgZWxba2V5XSA8IG1pbikgeyBtaW4gPSBlbFtrZXldOyB9IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBtaW47ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJNQVhcIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIk1BWFwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIG1heCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgaWYgKG1pbiA9PSBudWxsIHx8IGVsW2tleV0gPiBtYXgpIHsgbWF4ID0gZWxba2V5XTsgfSB9KTtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gbWF4OyAgICAgICAgICBcclxuICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiU1RERVZcIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIlNUREVWXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgdmFsdWVzLnB1c2gocGFyc2VJbnQoZWxba2V5XSkpOyB9KTtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gdGhpcy5zdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpOyAgICAgICAgICBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IFwiXCI7XHJcbiAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYWdncmVnYXRpb25zID09IG51bGwgfHwgYWdncmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZmlsbEFnZ3JlZ2F0aW9uQ29sdW1uc1xyXG5cclxuICBzdGFuZGFyZERldmlhdGlvbihhcnIsIHVzZVBvcHVsYXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgbWVhbiA9IGFyci5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gYXJyLmxlbmd0aDtcclxuICAgIHJldHVybiBNYXRoLnNxcnQoXHJcbiAgICAgIGFyclxyXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MuY29uY2F0KCh2YWwgLSBtZWFuKSAqKiAyKSwgW10pXHJcbiAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCkgL1xyXG4gICAgICAgIChhcnIubGVuZ3RoIC0gKHVzZVBvcHVsYXRpb24gPyAwIDogMSkpXHJcbiAgICApO1xyXG4gIH07ICAgXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmludFZhbHVlXHJcbiAgcHJpbnRWYWx1ZShmaWVsZFR5cGUsIHZhbHVlLCBmaWVsZGNvbmZpZywgcmVjb3JkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJcIil7IHJldHVybiB2YWx1ZTsgfVxyXG4gICAgICAgIGlmKCF2YWx1ZSl7XHJcbiAgICAgICAgICByZXR1cm4gXCJOL0FcIjtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGxldCBvdXRwdXQ7XHJcbiAgICAgICAgbGV0IFZhbHVlUGFpcnM6IHtba2V5OnN0cmluZ106IGFueTt9ID0gW107XHJcbiAgICAgICAgLy8gUFJFUEFSTy9MRUdHTyBJIFZBTFVFUEFJUlNcclxuICAgICAgICBpZiAoZmllbGRjb25maWcuRm9ybXVsYSAhPSBudWxsICYmIGZpZWxkY29uZmlnLkZvcm11bGEpIHtcclxuICAgICAgICAgIHZhciB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgIGZpZWxkY29uZmlnLkZvcm11bGEsXHJcbiAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGlmKHR5cGVvZiB0ZW1wID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgbGV0IHRlbXAyID0gdGVtcC5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICB0ZW1wID0gW11cclxuICAgICAgICAgIHRlbXAyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyckl0ZW0gPSBpdGVtLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgaWYoYXJySXRlbS5sZW5ndGggPiAxKXtcclxuICAgICAgICAgICAgICB0ZW1wW2Fyckl0ZW1bMV0udHJpbSgpXSA9IGFyckl0ZW1bMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRlbXBbYXJySXRlbVswXS50cmltKCldID0gYXJySXRlbVswXS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBrZXkyIGluIHRlbXApIHtcclxuICAgICAgICAgIFZhbHVlUGFpcnNbdGVtcFtrZXkyXV0gPSBrZXkyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVQYWlycyAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlUGFpcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gdmEgYmVuZSBjb3PDrFxyXG4gICAgICAgICAgVmFsdWVQYWlycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVQYWlycykpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVN0cmluZyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAvLyB2YSBwcmVzYSBsYSBzdHJpZ25hIGUgcmltYXBwYXRhIG5lbCBkaWFyaW9cclxuICAgICAgICAgIFZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycygoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJTlZFUlRPIEkgVkFMVUVQQUlSUyBDSElBVkUvVkFMT1JFIElOIFZBTFJPRS9DSElBVkVcclxuICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzXCIsICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMpO1xyXG4gICAgICAgIC8vIFZhbHVlUGFpcnM6IHtTaTogJ1NpJywgTm86ICdObyd9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIFZhbHVlUGFpcnMpIHtcclxuICAgICAgICAgIGludmVydGVkW1ZhbHVlUGFpcnNba2V5XV0gPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuXHJcbiAgICAgICAgLy8gTEVHR08gSSBWQUxPUkkgQ0hFIFZPR0xJTyBTVEFNUEFSRSBcclxuICAgICAgICBpZiAocmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgIC8vIGNhc28gTVVMVElTQ0VMVEFcclxuICAgICAgICAgIGxldCBvdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICByZWNvcmRbZmllbGRjb25maWcuTmFtZV0uZm9yRWFjaCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBvdXRWYWx1ZSArPSBWYWx1ZVBhaXJzW2VsZW1lbnRdO1xyXG4gICAgICAgICAgICBvdXRWYWx1ZSArPSBpID09IHJlY29yZFtmaWVsZGNvbmZpZy5OYW1lXS5sZW5ndGggLSAxID8gXCJcIiA6IFwiLCBcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBvdXRwdXQgPSBvdXRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY2FzbyBTQ0VMVEEgU0lOR09MQVxyXG4gICAgICAgICAgb3V0cHV0ID0gVmFsdWVQYWlyc1tyZWNvcmRbZmllbGRjb25maWcuTmFtZV1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICB9O1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXToge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKXsgcmV0dXJuIHZhbHVlOyB9XHJcbiAgICAgICAgaWYgKCg8TnVtZXJpY0ZpZWxkPmZpZWxkY29uZmlnKS5Jc0ludGVnZXIpIHtcclxuICAgICAgICAgIGlmICgoPE51bWVyaWNGaWVsZD5maWVsZGNvbmZpZykuRGVjaW1hbFNlcGFyYXRvciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbHVlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxzID0gZmllbGRjb25maWcuRGVjaW1hbFByZWNpc2lvbiAqIDEwO1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRlY2ltYWxzKSAvIGRlY2ltYWxzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IGZpZWxkY29uZmlnLkRlY2ltYWxQcmVjaXNpb24gKiAxMDtcclxuICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZGVjaW1hbHMpIC8gZGVjaW1hbHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiaW1tYWdpbmVcIjtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaW1tYWdpbmUgXCIgKyBmaWVsZGNvbmZpZy5OYW1lICsgXCIgOiBcIiArIHZhbHVlKVxyXG4gICAgICAgIC8vIC8vIFJlY3VwZXJvIGlsIEJBU0U2NCBkZWxsJ2ltbWFnaW5lIFJlc2l6ZWQgdmlhIHByb21pc2UgY2xpZW50XHJcbiAgICAgICAgLy8gdmFyIHJlc2l6ZWRCYXNlNjQgPSBhd2FpdCB0aGlzLnJlc2l6ZUJhc2U2NEltYWdlKFwiZGF0YTppbWFnZS9cIiArIHZhbHVlLkZpbGVFeHRlbnNpb24gKyBcIjtiYXNlNjQsXCIgKyB2YWx1ZS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgIC8vIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgLy8gcmV0dXJuIFwiPGltZyBzcmM9J1wiICsgcmVzaXplZEJhc2U2NCArIFwiJyBzdHlsZT0naGVpZ2h0OiBcIiArIHZhbHVlLlJlc2l6ZWRJbWFnZUhlaWdodFB4ICsgXCJweCc+XCI7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnQWxsZWdhdG8nXToge1xyXG4gICAgICAgIHJldHVybiBcIkFsbGVnYXRvXCI7XHJcbiAgICAgICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFsbGVnYXRvIFwiICsgZmllbGQuTmFtZSArIFwiIDogXCIgKyB2YWx1ZSwgcmVjb3JkKVxyXG5cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IHJlc2l6ZWRCYXNlNjQ7XHJcbiAgICAgICAgICAvLyBpZiAodmFsdWVbMF0uSXNJbWFnZSkge1xyXG4gICAgICAgICAgLy8gICAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgICAgLy8gICByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIgKyB2YWx1ZVswXS5GaWxlRXh0ZW5zaW9uICsgXCI7YmFzZTY0LFwiICsgdmFsdWVbMF0uRmlsZURhdGFCYXNlNjQpO1xyXG4gICAgICAgICAgLy8gICAvLyBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWxsZWdhdG8gcmVzaXplZEJhc2U2NFwiLCByZXNpemVkQmFzZTY0KVxyXG4gICAgICAgICAgLy8gICAvLyBBZ2dpdW5nbyBsJ0hUTUwgY29uIGlsIG51b3ZvIEJBU0U2NFxyXG4gICAgICAgICAgLy8gICByZXR1cm4gJzxpbWcgY2xhc3M9XCJpbWFnZS1wcmV2aWV3XCIgc3JjPVwiJyArIHJlc2l6ZWRCYXNlNjQgKyAnXCIgc3R5bGU9XCJoZWlnaHQ6ICcgKyB2YWx1ZVswXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCArICdweFwiPic7XHJcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlWzBdLkZpbGVDb250ZW50VHlwZSA9PSBcImFwcGxpY2F0aW9uL3BkZlwiKSB7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiAnPGlmcmFtZSBzcmM9XCJkYXRhOmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsJyArIHZhbHVlWzBdLkZpbGVEYXRhQmFzZTY0ICsgJ1wic3R5bGU9XCJtaW4taGVpZ2h0OiAzMDBweDsgaGVpZ2h0OiAxMDAlO1wiPjwvaWZyYW1lPic7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICByZXR1cm4gJzxpZnJhbWUgc3JjPVwiZGF0YTpcIicgKyB2YWx1ZVswXS5GaWxlRXh0ZW5zaW9uICsgJ1wiO2Jhc2U2NCwnICsgdmFsdWVbMF0uRmlsZURhdGFCYXNlNjQgKyAnXCJzdHlsZT1cIm1pbi1oZWlnaHQ6IDMwMHB4OyBoZWlnaHQ6IDEwMCU7XCI+PC9pZnJhbWU+JztcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAvLyBBZ2dpdW5nbyBsJ0hUTUwgY29uIGlsIG51b3ZvIEJBU0U2NFxyXG4gICAgICAgICAgLy8gcmV0dXJuICBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQgKyBcIicgc3R5bGU9J2hlaWdodDogXCIgKyB2YWx1ZVswXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCArIFwicHgnPlwiO1xyXG4gICAgICAgICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFsbGVnYXRvIG91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ106IHtcclxuICAgICAgICByZXR1cm4gXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiO1xyXG5cclxuICAgICAgICAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgIC8vIHZhciByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIgKyB2YWx1ZS5GaWxlRXh0ZW5zaW9uICsgXCI7YmFzZTY0LFwiICsgdmFsdWUuRmlsZURhdGFCYXNlNjQpO1xyXG5cclxuICAgICAgICAvLyBBZ2dpdW5nbyBsJ0hUTUwgY29uIGlsIG51b3ZvIEJBU0U2NFxyXG4gICAgICAgIC8vIHJldHVybiBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQgKyBcIicgc3R5bGU9J2hlaWdodDogXCIgKyB2YWx1ZS5SZXNpemVkSW1hZ2VIZWlnaHRQeCArIFwicHgnPlwiO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ106IHtcclxuICAgICAgICByZXR1cm4gXCJFbGVuY28gaW1tYWdpbmlcIjtcclxuICAgICAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXkgPSBcIlwiO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkY29uZmlnKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaW1hZ2VvYmo6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkY29uZmlnKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBpbWFnZW9iaik7XHJcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50SW5Gb3JtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheSArPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleSArIFwiLCBcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB2YXIgcGFydHMgPSBvdXRwdXRWYWx1ZXNBcnJheS5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpLmpvaW4oXCIsIFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkY29uZmlnKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSB2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0RhdGEgZS9vIG9yYSddOiB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpeyByZXR1cm4gdmFsdWU7IH1cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiRGF0YSBlL28gb3JhXCIsIGZpZWxkY29uZmlnKTtcclxuICAgICAgICBpZiAoKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLkRhdGVGb3JtYXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IGZpeERhdGVGb3JtYXQgPSAoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZml4RGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgXCJkZC9NTS95eXl5XCIpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydEYXRhIGUgb3JhJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHZhbHVlLCBcImRkL01NL3l5eXkgSEg6bW1cIik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHZhbHVlLCBcIkhIOm1tXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHByaW50VmFsdWVcclxuXHJcbiAgLy8jcmVnaW9uIHJlc2l6ZUJhc2U2NEltYWdlXHJcbiAgcHJpdmF0ZSBhc3luYyByZXNpemVCYXNlNjRJbWFnZShiYXNlNjRJbWFnZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBpbWFnZXR5cGUgPSAvZGF0YTppbWFnZVxcLyhbXFx3XSspOy87XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gYmFzZTY0SW1hZ2UubWF0Y2goaW1hZ2V0eXBlKTtcclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltZy5zcmMgPSBiYXNlNjRJbWFnZTtcclxuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgYXNwZWN0UmF0aW8gPSB3aWR0aCAvIGhlaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gMTI4O1xyXG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogYXNwZWN0UmF0aW87XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xyXG4gICAgICAgIGxldCBxdWFsaXR5ID0gMC44O1xyXG4gICAgICAgIGxldCBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvJyArIG1hdGNoWzFdLCBxdWFsaXR5KTtcclxuICAgICAgICByZXNvbHZlKGRhdGFVUkwpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiByZXNpemVCYXNlNjRJbWFnZVxyXG59XHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJsb2FkZWRGaWx0ZXJzICYmIHNob3dUaXRsZVwiXHJcbiAgICAgID5FbGVuY28ge3sgZm9ybS5OYW1lIH19PC9tYXQtY2FyZC10aXRsZVxyXG4gICAgPlxyXG4gICAgPCEtLSA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdChudWxsKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPiAtLT5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgIDwhLS0jcmVnaW9uIEZJTFRFUlMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiAqbmdJZj1cImxvYWRlZEZpbHRlcnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBhbGlnbi1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXJcclxuICAgICAgICAgIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiZmlsdGVyRGF0YUFuc3dlcnMoKVwiXHJcbiAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCJcclxuICAgICAgICAgIFtvdXRwdXRGb3JtYXRdPVwiJ2RkL01NL3l5eXknXCJcclxuICAgICAgICAgIFtzaG93U2Vjb25kc109XCJmYWxzZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBhbGlnbi1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXJcclxuICAgICAgICAgIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIidQZXJpb2RvIGZpbmUnXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibWF4RGF0ZVwiXHJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInZGQvTU0veXl5eSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlNlbGV6aW9uZSBkZWkgY2FtcGk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgcHJvcGVydGllc1wiIFt2YWx1ZV09XCJwcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtwcm9wZXJ0eS5sYWJlbF0gfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzID09IG51bGwgfHwgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRGF0YUFuc3dlcnMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRklMVEVSUyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICAgIDxkaXZcclxuICAgICpuZ0lmPVwiZmlsdGVyZWRBbnN3ZXJzICYmIGZpbHRlcmVkQW5zd2Vycy5sZW5ndGggPiAwOyBlbHNlIG5vX2Fuc3dlcnNcIlxyXG4gICAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBtdC0zIG1iLTJcIlxyXG4gICAgPlxyXG4gICAgICA8dGFibGVcclxuICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICBbZGF0YVNvdXJjZV09XCJzZWxlY3RlZFByb3BlcnRpZXNcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBtYXQtdGFibGUtZml4ZWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBDb2xvbm5hIGZpc3NhIHBlciBsZSBwcm9wcmlldMOgIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicHJvcGVydHlcIiBzdGlja3k+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiPlxyXG4gICAgICAgICAgICBEYXRhIEluc2VyaW1lbnRvXHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHNlbGVjdGVkUHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdIH19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEdlbmVyYSBkaW5hbWljYW1lbnRlIGxlIGNvbG9ubmUgcGVyIG9nbmkgcmlzcG9zdGEgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkQW5zd2VyczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cIidjb2wnICsgaVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2YWx1ZS5JRCAhPSAnMCdcIj57eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZSA6IFwiZGQvTU0veXl5eSBISDptbVwiIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLklEID09ICcwJ1wiPnt7IHZhbHVlLkFuc3dlckRhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPCEtLSA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiB7eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX0gPC90aD4gLS0+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgc2VsZWN0ZWRQcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsID09PSBcIkFuc3dlckRhdGVcIlxyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUuQW5zd2VyRGF0ZSB8IGRhdGUgOiBcImRkL01NL3l5eXkgSEg6bW1cIilcclxuICAgICAgICAgICAgICAgIDogcHJpbnRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFByb3BlcnRpZXMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvcGVydGllcy5jb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgKSA/PyBcIk4vQVwiXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwhLS0gLSBcclxuICAgICAgICAgICAge3tzZWxlY3RlZFByb3BlcnRpZXMudHlwZX19XHJcbiAgICAgICAgICAgIHt7c2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsfX0gLS0+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEhlYWRlciBkZWxsYSB0YWJlbGxhIC0tPlxyXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcblxyXG4gICAgICAgIDwhLS0gUmlnaGUgZGVsbGEgdGFiZWxsYSAtLT5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI25vX2Fuc3dlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8c3Bhbj4gTm9uIGNpIHNvbm8gcmlzcG9zdGUgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICAgIDwhLS0gPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBsaXN0LWZvcm0tcmVjb3JkLWhlYWRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgPGg0ICpuZ0lmPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgIDxiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L2I+XHJcbiAgICA8L2g0PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LXJpZ2h0XCIgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxlcXAtdGFibGUgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cImxvYWRlciAmJiBjb25maWd1cmF0aW9ucy52YWx1ZXNcIlxyXG4gIFtkYXRhXT1cImNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIj48L2VxcC10YWJsZT4gLS0+XHJcbiJdfQ==