carbon-components-angular 5.72.2 → 5.72.4

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 (141) hide show
  1. package/combobox/combobox.component.d.ts +1 -1
  2. package/datepicker/datepicker.component.d.ts +1 -1
  3. package/docs/documentation/components/ComboBox.html +49 -49
  4. package/docs/documentation/components/DatePicker.html +34 -34
  5. package/docs/documentation/components/Dropdown.html +161 -160
  6. package/docs/documentation/components/ProgressIndicator.html +13 -9
  7. package/docs/documentation/components/Toast.html +5 -5
  8. package/docs/documentation/coverage.html +36 -0
  9. package/docs/documentation/interfaces/ActionableContent.html +2 -2
  10. package/docs/documentation/interfaces/NotificationAction.html +2 -2
  11. package/docs/documentation/interfaces/NotificationContent.html +2 -2
  12. package/docs/documentation/interfaces/NotificationLink.html +2 -2
  13. package/docs/documentation/interfaces/ToastContent.html +14 -2
  14. package/docs/documentation/js/menu-wc_es5.js +1 -1
  15. package/docs/documentation/js/search/search_index.js +2 -2
  16. package/docs/documentation/miscellaneous/functions.html +257 -1
  17. package/docs/documentation/modules/CheckboxModule/dependencies.svg +42 -42
  18. package/docs/documentation/modules/CheckboxModule.html +42 -42
  19. package/docs/documentation/modules/CodeSnippetModule/dependencies.svg +4 -4
  20. package/docs/documentation/modules/CodeSnippetModule.html +4 -4
  21. package/docs/documentation/modules/ComboBoxModule/dependencies.svg +6 -6
  22. package/docs/documentation/modules/ComboBoxModule.html +6 -6
  23. package/docs/documentation/modules/ContentSwitcherModule/dependencies.svg +4 -4
  24. package/docs/documentation/modules/ContentSwitcherModule.html +4 -4
  25. package/docs/documentation/modules/ContextMenuModule/dependencies.svg +67 -67
  26. package/docs/documentation/modules/ContextMenuModule.html +67 -67
  27. package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +4 -4
  28. package/docs/documentation/modules/DatePickerInputModule.html +4 -4
  29. package/docs/documentation/modules/DatePickerModule/dependencies.svg +6 -6
  30. package/docs/documentation/modules/DatePickerModule.html +6 -6
  31. package/docs/documentation/modules/DialogModule/dependencies.svg +33 -33
  32. package/docs/documentation/modules/DialogModule.html +33 -33
  33. package/docs/documentation/modules/DocumentationModule/dependencies.svg +4 -4
  34. package/docs/documentation/modules/DocumentationModule.html +4 -4
  35. package/docs/documentation/modules/DropdownModule/dependencies.svg +68 -68
  36. package/docs/documentation/modules/DropdownModule.html +68 -68
  37. package/docs/documentation/modules/GridModule/dependencies.svg +64 -64
  38. package/docs/documentation/modules/GridModule.html +64 -64
  39. package/docs/documentation/modules/HeaderModule/dependencies.svg +4 -4
  40. package/docs/documentation/modules/HeaderModule.html +4 -4
  41. package/docs/documentation/modules/I18nModule/dependencies.svg +4 -4
  42. package/docs/documentation/modules/I18nModule.html +4 -4
  43. package/docs/documentation/modules/InputModule/dependencies.svg +4 -4
  44. package/docs/documentation/modules/InputModule.html +4 -4
  45. package/docs/documentation/modules/LayoutModule/dependencies.svg +4 -4
  46. package/docs/documentation/modules/LayoutModule.html +4 -4
  47. package/docs/documentation/modules/LinkModule/dependencies.svg +4 -4
  48. package/docs/documentation/modules/LinkModule.html +4 -4
  49. package/docs/documentation/modules/ListModule/dependencies.svg +4 -4
  50. package/docs/documentation/modules/ListModule.html +4 -4
  51. package/docs/documentation/modules/LoadingModule/dependencies.svg +4 -4
  52. package/docs/documentation/modules/LoadingModule.html +4 -4
  53. package/docs/documentation/modules/MenuButtonModule/dependencies.svg +4 -4
  54. package/docs/documentation/modules/MenuButtonModule.html +4 -4
  55. package/docs/documentation/modules/ModalModule/dependencies.svg +116 -116
  56. package/docs/documentation/modules/ModalModule.html +116 -116
  57. package/docs/documentation/modules/NotificationModule/dependencies.svg +124 -124
  58. package/docs/documentation/modules/NotificationModule.html +124 -124
  59. package/docs/documentation/modules/PaginationModule/dependencies.svg +4 -4
  60. package/docs/documentation/modules/PaginationModule.html +4 -4
  61. package/docs/documentation/modules/PanelModule/dependencies.svg +36 -36
  62. package/docs/documentation/modules/PanelModule.html +36 -36
  63. package/docs/documentation/modules/ProgressBarModule/dependencies.svg +12 -12
  64. package/docs/documentation/modules/ProgressBarModule.html +12 -12
  65. package/docs/documentation/modules/ProgressIndicatorModule/dependencies.svg +4 -4
  66. package/docs/documentation/modules/ProgressIndicatorModule.html +4 -4
  67. package/docs/documentation/modules/RadioModule/dependencies.svg +47 -47
  68. package/docs/documentation/modules/RadioModule.html +47 -47
  69. package/docs/documentation/modules/SearchModule/dependencies.svg +45 -49
  70. package/docs/documentation/modules/SearchModule.html +45 -49
  71. package/docs/documentation/modules/SelectModule/dependencies.svg +58 -58
  72. package/docs/documentation/modules/SelectModule.html +58 -58
  73. package/docs/documentation/modules/SliderModule/dependencies.svg +46 -42
  74. package/docs/documentation/modules/SliderModule.html +46 -42
  75. package/docs/documentation/modules/StructuredListModule/dependencies.svg +69 -69
  76. package/docs/documentation/modules/StructuredListModule.html +69 -69
  77. package/docs/documentation/modules/TabsModule/dependencies.svg +41 -41
  78. package/docs/documentation/modules/TabsModule.html +41 -41
  79. package/docs/documentation/modules/TagModule/dependencies.svg +4 -4
  80. package/docs/documentation/modules/TagModule.html +4 -4
  81. package/docs/documentation/modules/ThemeModule/dependencies.svg +13 -13
  82. package/docs/documentation/modules/ThemeModule.html +13 -13
  83. package/docs/documentation/modules/TilesModule/dependencies.svg +108 -108
  84. package/docs/documentation/modules/TilesModule.html +108 -108
  85. package/docs/documentation/modules/TimePickerModule/dependencies.svg +45 -41
  86. package/docs/documentation/modules/TimePickerModule.html +45 -41
  87. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +4 -4
  88. package/docs/documentation/modules/TimePickerSelectModule.html +4 -4
  89. package/docs/documentation/modules/ToggleModule/dependencies.svg +37 -41
  90. package/docs/documentation/modules/ToggleModule.html +37 -41
  91. package/docs/documentation/modules/ToggletipModule/dependencies.svg +39 -39
  92. package/docs/documentation/modules/ToggletipModule.html +39 -39
  93. package/docs/documentation/modules/TooltipModule/dependencies.svg +4 -4
  94. package/docs/documentation/modules/TooltipModule.html +4 -4
  95. package/docs/documentation/modules/TreeviewModule/dependencies.svg +30 -30
  96. package/docs/documentation/modules/TreeviewModule.html +30 -30
  97. package/docs/documentation.json +144 -649
  98. package/docs/storybook/{3224.14e2c79a.iframe.bundle.js → 3224.3c2075c3.iframe.bundle.js} +1 -1
  99. package/docs/storybook/{901.49ee92eb.iframe.bundle.js → 901.f208c589.iframe.bundle.js} +1 -1
  100. package/docs/storybook/{combobox-combobox-stories.e3d08f7d.iframe.bundle.js → combobox-combobox-stories.49ceebb5.iframe.bundle.js} +1 -1
  101. package/docs/storybook/{datepicker-datepicker-stories.559a71ec.iframe.bundle.js → datepicker-datepicker-stories.71ef84d0.iframe.bundle.js} +1 -1
  102. package/docs/storybook/iframe.html +12 -3
  103. package/docs/storybook/index.html +35 -39
  104. package/docs/storybook/main.ca0a416e.iframe.bundle.js +1 -0
  105. package/docs/storybook/{patterns-dialogs-modal-with-table-stories.b72796c6.iframe.bundle.js → patterns-dialogs-modal-with-table-stories.8acaa07a.iframe.bundle.js} +1 -1
  106. package/docs/storybook/{patterns-forms-multi-step-form-stories.2ea46e56.iframe.bundle.js → patterns-forms-multi-step-form-stories.495d62f5.iframe.bundle.js} +1 -1
  107. package/docs/storybook/{patterns-loading-large-loading-stories.e6ae3e31.iframe.bundle.js → patterns-loading-large-loading-stories.564e9ea6.iframe.bundle.js} +1 -1
  108. package/docs/storybook/{progress-indicator-progress-indicator-stories.dae29927.iframe.bundle.js → progress-indicator-progress-indicator-stories.f7da9e42.iframe.bundle.js} +1 -1
  109. package/docs/storybook/project.json +1 -1
  110. package/docs/storybook/{runtime~main.b11c471e.iframe.bundle.js → runtime~main.a709e446.iframe.bundle.js} +1 -1
  111. package/docs/storybook/sb-addons/essentials-controls-1/manager-bundle.js +31 -31
  112. package/dropdown/dropdown.component.d.ts +3 -3
  113. package/esm2020/combobox/combobox.component.mjs +5 -5
  114. package/esm2020/datepicker/datepicker.component.mjs +9 -9
  115. package/esm2020/dropdown/dropdown.component.mjs +13 -13
  116. package/esm2020/notification/notification-content.interface.mjs +1 -1
  117. package/esm2020/notification/toast.component.mjs +5 -5
  118. package/esm2020/progress-indicator/progress-indicator.component.mjs +8 -5
  119. package/fesm2015/carbon-components-angular-combobox.mjs +4 -4
  120. package/fesm2015/carbon-components-angular-combobox.mjs.map +1 -1
  121. package/fesm2015/carbon-components-angular-datepicker.mjs +8 -8
  122. package/fesm2015/carbon-components-angular-datepicker.mjs.map +1 -1
  123. package/fesm2015/carbon-components-angular-dropdown.mjs +12 -12
  124. package/fesm2015/carbon-components-angular-dropdown.mjs.map +1 -1
  125. package/fesm2015/carbon-components-angular-notification.mjs +4 -4
  126. package/fesm2015/carbon-components-angular-notification.mjs.map +1 -1
  127. package/fesm2015/carbon-components-angular-progress-indicator.mjs +7 -4
  128. package/fesm2015/carbon-components-angular-progress-indicator.mjs.map +1 -1
  129. package/fesm2020/carbon-components-angular-combobox.mjs +4 -4
  130. package/fesm2020/carbon-components-angular-combobox.mjs.map +1 -1
  131. package/fesm2020/carbon-components-angular-datepicker.mjs +8 -8
  132. package/fesm2020/carbon-components-angular-datepicker.mjs.map +1 -1
  133. package/fesm2020/carbon-components-angular-dropdown.mjs +12 -12
  134. package/fesm2020/carbon-components-angular-dropdown.mjs.map +1 -1
  135. package/fesm2020/carbon-components-angular-notification.mjs +4 -4
  136. package/fesm2020/carbon-components-angular-notification.mjs.map +1 -1
  137. package/fesm2020/carbon-components-angular-progress-indicator.mjs +7 -4
  138. package/fesm2020/carbon-components-angular-progress-indicator.mjs.map +1 -1
  139. package/notification/notification-content.interface.d.ts +2 -2
  140. package/package.json +1 -1
  141. package/docs/storybook/main.a1247bb8.iframe.bundle.js +0 -1
@@ -326,14 +326,6 @@ export class DatePicker {
326
326
  this.flatpickrInstance.open();
327
327
  }
328
328
  }
329
- isDecoratorClick(event) {
330
- if (!event?.target) {
331
- return false;
332
- }
333
- const t = event.target;
334
- const el = t instanceof Element ? t : t.parentElement;
335
- return el?.closest(".cds--date-picker-input-inner-wrapper--decorator") != null;
336
- }
337
329
  updateCalendarListeners() {
338
330
  const calendarContainer = document.querySelectorAll(".flatpickr-calendar");
339
331
  Array.from(calendarContainer).forEach(calendar => {
@@ -556,6 +548,14 @@ export class DatePicker {
556
548
  <rect width="16" height="16" style="fill:none" />
557
549
  </svg>`;
558
550
  }
551
+ isDecoratorClick(event) {
552
+ if (!event?.target) {
553
+ return false;
554
+ }
555
+ const t = event.target;
556
+ const el = t instanceof Element ? t : t.parentElement;
557
+ return el?.closest(".cds--date-picker-input-inner-wrapper--decorator") != null;
558
+ }
559
559
  }
560
560
  DatePicker.datePickerCount = 0;
561
561
  DatePicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DatePicker, deps: [{ token: i0.ElementRef }, { token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component });
@@ -773,4 +773,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
773
773
  type: HostListener,
774
774
  args: ["focusout"]
775
775
  }] } });
776
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUdqQixZQUFZLEVBTVosU0FBUyxFQUdULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLG9DQUFvQyxDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRixPQUFPLEtBQUssU0FBUyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUt2RDs7Ozs7OztHQU9HO0FBQ0gsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUU7SUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQXNCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUgsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7Q0FDSDtBQUVEOzs7Ozs7OztHQVFHO0FBd0VILE1BQU0sT0FBTyxVQUFVO0lBeUx0QixZQUNXLFVBQXNCLEVBQ3RCLElBQVU7UUFEVixlQUFVLEdBQVYs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QUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLEVBQUU7c0JBQVYsS0FBSztnQkFFTyxLQUFLO3NCQUFqQixLQUFLO2dCQWVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBcUJnQyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1gsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUViLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsT0FBTztzQkFBaEIsTUFBTTtnQkF3R1AsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVM7Z0JBZ0J2QixVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0RWxlbWVudFJlZixcblx0T25EZXN0cm95LFxuXHRIb3N0TGlzdGVuZXIsXG5cdFRlbXBsYXRlUmVmLFxuXHRPbkNoYW5nZXMsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdEFmdGVyVmlld0NoZWNrZWQsXG5cdEFmdGVyVmlld0luaXQsXG5cdFZpZXdDaGlsZCxcblx0T25Jbml0LFxuXHRTaW1wbGVDaGFuZ2Vcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCByYW5nZVBsdWdpbiBmcm9tIFwiZmxhdHBpY2tyL2Rpc3QvcGx1Z2lucy9yYW5nZVBsdWdpblwiO1xuaW1wb3J0IGZsYXRwaWNrciBmcm9tIFwiZmxhdHBpY2tyXCI7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgY2FyYm9uRmxhdHBpY2tyTW9udGhTZWxlY3RQbHVnaW4gfSBmcm9tIFwiLi9jYXJib24tZmxhdHBpY2tyLW1vbnRoLXNlbGVjdFwiO1xuaW1wb3J0ICogYXMgbGFuZ3VhZ2VzIGZyb20gXCJmbGF0cGlja3IvZGlzdC9sMTBuL2luZGV4XCI7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcImZsYXRwaWNrci9kaXN0L3R5cGVzL29wdGlvbnNcIjtcbmltcG9ydCB7IERhdGVQaWNrZXJJbnB1dCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2RhdGVwaWNrZXItaW5wdXRcIjtcbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5cbi8qKlxuICogRHVlIHRvIHR5cGUgZXJyb3IsIHdlIGhhdmUgdG8gdXNlIHNxdWFyZSBicmFja2V0cyBwcm9wZXJ0eSBhY2Nlc3NvclxuICogVGhlcmUgaXMgYSB3ZWJwYWNrIGlzc3VlIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgZXhwb3J0ZWQgbGFuZ3VhZ2VzIGZyb20gZmxhdHBpY2tyIGwxMG4gQW5ndWxhciAxNCsgYXBwc1xuICogbGFuZ3VhZ2VzLmRlZmF1bHRbbG9jYWxlXSBmYWlscyBpbiBhcHAgY29uc3VtaW5nIENDQSBsaWJyYXJ5IGJ1dCBwYXNzZXMgaW4gdGVzdFxuICogbGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtsb2NhbGVdIGZhaWxzIGluIHRlc3QgYnV0IHdvcmtzIGluIGFwcCBjb25zdW1pbmcgQ0NBIGxpYnJhcnkuXG4gKlxuICogVG8gcGxlYXNlIGJvdGggc2NlbmFyaW9zLCB3ZSBhcmUgYWRkaW5nIGEgY29uZGl0aW9uIHRvIHByZXZlbnQgdGVzdHMgZnJvbSBmYWlsaW5nXG4gKi9cbmlmIChsYW5ndWFnZXMuZGVmYXVsdD8uZGVmYXVsdFtcImVuXCJdPy53ZWVrZGF5cykge1xuXHQobGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtcImVuXCJdLndlZWtkYXlzLnNob3J0aGFuZCBhcyBzdHJpbmdbXSkgPSBsYW5ndWFnZXMuZGVmYXVsdC5kZWZhdWx0W1wiZW5cIl0ud2Vla2RheXMubG9uZ2hhbmQubWFwKGRheSA9PiB7XG5cdFx0aWYgKGRheSA9PT0gXCJUaHVyc2RheVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJUaFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF5LmNoYXJBdCgwKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWRhdGUtcGlja2VyLS1zaW5nbGUpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtZGF0ZS1waWNrZXIsIGlibS1kYXRlLXBpY2tlclwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW1cIj5cblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tcmFuZ2UnIDogcmFuZ2UsXG5cdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1zaW5nbGUnIDogIXJhbmdlLFxuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tbGlnaHQnIDogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJyA6IHNrZWxldG9uXG5cdFx0XHR9XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGNkcy1kYXRlLXBpY2tlci1pbnB1dFxuXHRcdFx0XHRcdCNpbnB1dFxuXHRcdFx0XHRcdFtsYWJlbF09XCJsYWJlbFwiXG5cdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRbcGF0dGVybl09XCJpbnB1dFBhdHRlcm5cIlxuXHRcdFx0XHRcdFtpZF09XCJpZCArICctaW5wdXQnXCJcblx0XHRcdFx0XHRbc2l6ZV09XCJzaXplXCJcblx0XHRcdFx0XHRbdHlwZV09XCIocmFuZ2UgPyAncmFuZ2UnIDogJ3NpbmdsZScpXCJcblx0XHRcdFx0XHRbaGFzSWNvbl09XCIocmFuZ2UgPyBmYWxzZSA6IHRydWUpXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFtyZWFkb25seV09XCJyZWFkb25seVwiXG5cdFx0XHRcdFx0W2ludmFsaWRdPVwiaW52YWxpZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRUZXh0XT1cImludmFsaWRUZXh0XCJcblx0XHRcdFx0XHRbd2Fybl09XCJ3YXJuXCJcblx0XHRcdFx0XHRbd2FyblRleHRdPVwid2FyblRleHRcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2hlbHBlclRleHRdPVwiaGVscGVyVGV4dFwiXG5cdFx0XHRcdFx0W2RlY29yYXRvcl09XCJkZWNvcmF0b3JcIlxuXHRcdFx0XHRcdCh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIoaW5wdXQsICRldmVudClcIj5cblx0XHRcdFx0PC9jZHMtZGF0ZS1waWNrZXItaW5wdXQ+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiAqbmdJZj1cInJhbmdlXCIgY2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8Y2RzLWRhdGUtcGlja2VyLWlucHV0XG5cdFx0XHRcdFx0I3JhbmdlSW5wdXRcblx0XHRcdFx0XHRbbGFiZWxdPVwicmFuZ2VMYWJlbFwiXG5cdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRbcGF0dGVybl09XCJpbnB1dFBhdHRlcm5cIlxuXHRcdFx0XHRcdFtpZF09XCJpZCArICctcmFuZ2VJbnB1dCdcIlxuXHRcdFx0XHRcdFtzaXplXT1cInNpemVcIlxuXHRcdFx0XHRcdFt0eXBlXT1cIihyYW5nZSA/ICdyYW5nZScgOiAnc2luZ2xlJylcIlxuXHRcdFx0XHRcdFtoYXNJY29uXT1cIihyYW5nZSA/IHRydWUgOiBudWxsKVwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRcdFtpbnZhbGlkXT1cInJhbmdlSW52YWxpZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRUZXh0XT1cInJhbmdlSW52YWxpZFRleHRcIlxuXHRcdFx0XHRcdFt3YXJuXT1cInJhbmdlV2FyblwiXG5cdFx0XHRcdFx0W3dhcm5UZXh0XT1cInJhbmdlV2FyblRleHRcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2hlbHBlclRleHRdPVwicmFuZ2VIZWxwZXJUZXh0XCJcblx0XHRcdFx0XHRbZGVjb3JhdG9yXT1cInJhbmdlRGVjb3JhdG9yXCJcblx0XHRcdFx0XHQodmFsdWVDaGFuZ2UpPVwib25SYW5nZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIocmFuZ2VJbnB1dCwgJGV2ZW50KVwiPlxuXHRcdFx0XHQ8L2Nkcy1kYXRlLXBpY2tlci1pbnB1dD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0YCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogRGF0ZVBpY2tlcixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXIgaW1wbGVtZW50c1xuXHRPbkluaXQsXG5cdE9uRGVzdHJveSxcblx0T25DaGFuZ2VzLFxuXHRBZnRlclZpZXdDaGVja2VkLFxuXHRBZnRlclZpZXdJbml0IHtcblx0cHJpdmF0ZSBzdGF0aWMgZGF0ZVBpY2tlckNvdW50ID0gMDtcblxuXHQvKipcblx0ICogU2VsZWN0IGNhbGVuZGFyIHJhbmdlIG1vZGVcblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEZvcm1hdCBvZiBkYXRlXG5cdCAqXG5cdCAqIEZvciByZWZlcmVuY2U6IGh0dHBzOi8vZmxhdHBpY2tyLmpzLm9yZy9mb3JtYXR0aW5nL1xuXHQgKi9cblx0QElucHV0KCkgZGF0ZUZvcm1hdCA9IFwibS9kL1lcIjtcblxuXHQvKipcblx0ICogTGFuZ3VhZ2Ugb2YgdGhlIGZsYXRwaWNrciBjYWxlbmRhci5cblx0ICpcblx0ICogRm9yIHJlZmVyZW5jZSBvZiB0aGUgcG9zc2libGUgbG9jYWxlczpcblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwaWNrci9mbGF0cGlja3IvYmxvYi9tYXN0ZXIvc3JjL2wxMG4vaW5kZXgudHNcblx0ICovXG5cdEBJbnB1dCgpIGxhbmd1YWdlID0gXCJlblwiO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogKipFeHBlcmltZW50YWwqKjogT3B0aW9uYWwgZGVjb3JhdG9yIChlLmcuIEFJIGxhYmVsKS5cblx0ICovXG5cdEBJbnB1dCgpIGRlY29yYXRvcjogVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqICoqRXhwZXJpbWVudGFsKio6IE9wdGlvbmFsIGRlY29yYXRvciAoZS5nLiBBSSBsYWJlbCkgb24gdGhlIHJhbmdlIGVuZCBmaWVsZCB3aGVuIGByYW5nZWAgaXMgYHRydWVgLlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VEZWNvcmF0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cdEBJbnB1dCgpIHJhbmdlSGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgcmFuZ2VMYWJlbDogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJtbS9kZC95eXl5XCI7XG5cblx0LyoqXG5cdCAqIEFyaWEgbGFiZWwgYWRkZWQgdG8gZGF0ZXBpY2tlcidzIGNhbGVuZGFyIGNvbnRhaW5lci5cblx0ICovXG5cdEBJbnB1dCgpIGFyaWFMYWJlbCA9IFwiY2FsZW5kYXIgY29udGFpbmVyXCI7XG5cblx0LyoqXG5cdCAqIFRoZSBwYXR0ZXJuIGZvciB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50XG5cdCAqL1xuXHRASW5wdXQoKSBpbnB1dFBhdHRlcm4gPSBcIl5cXFxcZHsxLDJ9L1xcXFxkezEsMn0vXFxcXGR7NH0kXCI7XG5cblx0QElucHV0KCkgaWQgPSBgZGF0ZXBpY2tlci0ke0RhdGVQaWNrZXIuZGF0ZVBpY2tlckNvdW50Kyt9YDtcblxuXHRASW5wdXQoKSBzZXQgdmFsdWUodjogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHRpZiAoIXYpIHtcblx0XHRcdHYgPSBbXTtcblx0XHR9XG5cdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHR9XG5cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl92YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIFNldCB0byBgXCJsaWdodFwiYCB0byBhcHBseSB0aGUgbGlnaHQgc3R5bGVcblx0ICovXG5cdEBJbnB1dCgpIHRoZW1lOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSB0aGUgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkYXRlcGlja2VyIGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc3BsYXkgdGhlIGludmFsaWQgc3RhdGUgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dC5cblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlSW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VJbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIGluIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCAoY29udGVudHMgc2V0IGJ5IHJhbmdlV2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dFxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHBsdWdpbnMgPSBbXTtcblxuXHRASW5wdXQoKVxuXHRzZXQgZmxhdHBpY2tyT3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KSB7XG5cdFx0dGhpcy5fZmxhdHBpY2tyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2ZsYXRwaWNrck9wdGlvbnMsIG9wdGlvbnMpO1xuXHR9XG5cdGdldCBmbGF0cGlja3JPcHRpb25zKCk6IFBhcnRpYWw8T3B0aW9ucz4ge1xuXHRcdGNvbnN0IHBsdWdpbnMgPSBbLi4udGhpcy5wbHVnaW5zLCBjYXJib25GbGF0cGlja3JNb250aFNlbGVjdFBsdWdpbl07XG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdHBsdWdpbnMucHVzaChyYW5nZVBsdWdpbih7IGlucHV0OiBgIyR7dGhpcy5pZH0tcmFuZ2VJbnB1dGAsIHBvc2l0aW9uOiBcImxlZnRcIiB9KSk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9mbGF0cGlja3JPcHRpb25zLCB0aGlzLmZsYXRwaWNrckJhc2VPcHRpb25zLCB7XG5cdFx0XHRtb2RlOiB0aGlzLnJhbmdlID8gXCJyYW5nZVwiIDogXCJzaW5nbGVcIixcblx0XHRcdHBsdWdpbnMsXG5cdFx0XHRkYXRlRm9ybWF0OiB0aGlzLmRhdGVGb3JtYXQsXG5cdFx0XHRsb2NhbGU6IGxhbmd1YWdlcy5kZWZhdWx0Py5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdIHx8IGxhbmd1YWdlcy5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuXHRcdFx0Ly8gTGl0dGxlIHRyaWNrIGZvcmNlIFwicmVhZG9ubHkgbW9kZVwiIG9uIGRhdGVwaWNrZXIgaW5wdXQuXG5cdFx0XHQvLyBEb2NzOiBXaGV0aGVyIGNsaWNraW5nIG9uIHRoZSBpbnB1dCBzaG91bGQgb3BlbiB0aGUgcGlja2VyLlxuXHRcdFx0Ly8gWW91IGNvdWxkIGRpc2FibGUgdGhpcyBpZiB5b3Ugd2lzaCB0byBvcGVuIHRoZSBjYWxlbmRhciBtYW51YWxseSB3aXRoLm9wZW4oKS5cblx0XHRcdGNsaWNrT3BlbnM6ICF0aGlzLnJlYWRvbmx5XG5cdFx0fSk7XG5cdH1cblxuXHRAVmlld0NoaWxkKFwiaW5wdXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ6IERhdGVQaWNrZXJJbnB1dDtcblx0QFZpZXdDaGlsZChcInJhbmdlSW5wdXRcIikgcmFuZ2VJbnB1dDogRGF0ZVBpY2tlcklucHV0O1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdlIGFyZSBvdmVycmlkaW5nIG9uQ2xvc2UgZXZlbnQgZXZlbiBpZiB1c2VycyBwYXNzIGl0IHZpYSBmbGF0cGlja3Igb3B0aW9uc1xuXHQgKiBFbWl0cyBhbiBldmVudCB3aGVuIGRhdGUgcGlja2VyIGNsb3Nlc1xuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHByb3RlY3RlZCBfdmFsdWUgPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2ZsYXRwaWNrck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG5cdFx0YWxsb3dJbnB1dDogdHJ1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JCYXNlT3B0aW9ucyA9IHtcblx0XHRtb2RlOiBcInNpbmdsZVwiLFxuXHRcdGRhdGVGb3JtYXQ6IFwibS9kL1lcIixcblx0XHRwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG5cdFx0b25PcGVuOiAoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNsYXNzTmFtZXMoKTtcblx0XHRcdHRoaXMudXBkYXRlQXR0cmlidXRlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVDYWxlbmRhckxpc3RlbmVycygpO1xuXHRcdH0sXG5cdFx0b25DbG9zZTogKGRhdGUpID0+IHtcblx0XHRcdC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBgZmxhdHBpY2tySW5zdGFuY2Ugc2VsZWN0ZWREYXRlc2AgYXJlIGluIHN5bmMgd2l0aCB0aGUgdmFsdWVzIG9mXG5cdFx0XHQvLyB0aGUgaW5wdXRzIHdoZW4gdGhlIGNhbGVuZGFyIGNsb3Nlcy5cblx0XHRcdGlmICh0aGlzLnJhbmdlICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgcmFuZ2VJbnB1dFZhbHVlID0gdGhpcy5yYW5nZUlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGlmIChpbnB1dFZhbHVlIHx8IHJhbmdlSW5wdXRWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlRGF0ZSA9IChkYXRlOiBzdHJpbmcpID0+IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKGRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtwYXJzZURhdGUoaW5wdXRWYWx1ZSksIHBhcnNlRGF0ZShyYW5nZUlucHV0VmFsdWUgfHwgaW5wdXRWYWx1ZSldKTtcblx0XHRcdFx0XHR0aGlzLmRvU2VsZWN0KHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMub25DbG9zZS5lbWl0KGRhdGUpO1xuXHRcdH0sXG5cdFx0b25EYXlDcmVhdGU6IChfZE9iaiwgX2RTdHIsIF9mcCwgZGF5RWxlbSkgPT4ge1xuXHRcdFx0ZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5XCIpO1xuXHRcdH0sXG5cdFx0bmV4dEFycm93OiB0aGlzLnJpZ2h0QXJyb3dIVE1MKCksXG5cdFx0cHJldkFycm93OiB0aGlzLmxlZnRBcnJvd0hUTUwoKSxcblx0XHR2YWx1ZTogdGhpcy52YWx1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JJbnN0YW5jZSA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG5cblx0KSB7IH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHQvLyBpZiBpMThuIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIGVuIHdlJ2xsIHdhbnQgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZVxuXHRcdC8vIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHVzZSB0aGUgbG9jYWwgc2V0dGluZ1xuXHRcdGlmICh0aGlzLmkxOG4uZ2V0TG9jYWxlKCkgIT09IFwiZW5cIikge1xuXHRcdFx0dGhpcy5pMThuLmdldExvY2FsZU9ic2VydmFibGUoKS5zdWJzY3JpYmUobG9jYWxlID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZSA9IGxvY2FsZTtcblx0XHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0Ly8gUmVzZXQgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBvbiBpbnB1dCBjaGFuZ2VzIHRoYXQgYWZmZWN0IGZsYXRwaWNrci5cblx0XHRjb25zdCBmbGF0cGlja3JDaGFuZ2VLZXlzID0gW1xuXHRcdFx0XCJyYW5nZVwiLFxuXHRcdFx0XCJkYXRlRm9ybWF0XCIsXG5cdFx0XHRcImxhbmd1YWdlXCIsXG5cdFx0XHRcImlkXCIsXG5cdFx0XHRcInZhbHVlXCIsXG5cdFx0XHRcInBsdWdpbnNcIixcblx0XHRcdFwiZmxhdHBpY2tyT3B0aW9uc1wiLFxuXHRcdFx0XCJyZWFkb25seVwiXG5cdFx0XTtcblx0XHRjb25zdCBjaGFuZ2VLZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlcyk7XG5cdFx0aWYgKGNoYW5nZUtleXMuc29tZShrZXkgPT4gZmxhdHBpY2tyQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSkge1xuXHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKGNoYW5nZXMudmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHtcblx0XHRcdHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlWzBdID8/IFwiXCI7XG5cdFx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0XHR0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlWzFdID8/IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZGRJbnB1dExpc3RlbmVycygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0Ly8gYmVjYXVzZSB0aGUgYWN0dWFsIHZpZXcgbWF5IGJlIGRlbGF5ZWQgaW4gbG9hZGluZyAodGhpbmsgcHJvamVjdGlvbiBpbnRvIGEgdGFiIHBhbmUpXG5cdC8vIGFuZCBiZWNhdXNlIHdlIHJlbHkgb24gYSBsaWJyYXJ5IHRoYXQgb3BlcmF0ZXMgb3V0c2lkZSB0aGUgQW5ndWxhciB2aWV3IG9mIHRoZSB3b3JsZFxuXHQvLyB3ZSBuZWVkIHRvIGtlZXAgdHJ5aW5nIHRvIGxvYWQgdGhlIGxpYnJhcnksIHVudGlsIHRoZSByZWxldmFudCBET00gaXMgYWN0dWFsbHkgbGl2ZVxuXHRuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG5cdFx0aWYgKCF0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgdHMgaXMgdW5oYXBweSB3aXRoIHRoZSBiZWxvdyBjYWxsIHRvIGBmbGF0cGlja3JgXG5cdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlID0gZmxhdHBpY2tyKGAjJHt0aGlzLmlkfS1pbnB1dGAsIHRoaXMuZmxhdHBpY2tyT3B0aW9ucyk7XG5cdFx0XHQvLyBpZiAoYW5kIG9ubHkgaWYpIHRoZSBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIHdlIGNhbiBzZXQgdGhlIGRhdGUgdmFsdWVzXG5cdFx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRcdGlmICh0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXModGhpcy52YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZm9jdXNpblwiKVxuXHRvbkZvY3VzKCkge1xuXHRcdC8vIFVwZGF0ZXMgdGhlIG1vbnRoIG1hbnVhbGx5IHdoZW4gY2FsZW5kYXIgbW9kZSBpcyByYW5nZSBiZWNhdXNlIG1vbnRoXG5cdFx0Ly8gd2lsbCBub3QgdXBkYXRlIHByb3Blcmx5IHdpdGhvdXQgbWFudWFsbHkgdXBkYXRpbmcgdGhlbSBvbiBmb2N1cy5cblx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0aWYgKHRoaXMucmFuZ2VJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0uZ2V0TW9udGgoKTtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0TW9udGgoKTtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZm9jdXNvdXRcIilcblx0b25Gb2N1c091dCgpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlcyBhIHZhbHVlIGZyb20gdGhlIG1vZGVsIHRvIHRoZSBjb21wb25lbnQuIEV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGBudWxsYCBvciBgKERhdGUgfCBzdHJpbmcpW11gXG5cdCAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSBtb2RlbFxuXHQgKi9cblx0d3JpdGVWYWx1ZSh2YWx1ZTogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY29uZmlnKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyh0aGlzLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIG1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGUgdGhlIERhdGVQaWNrZXIuXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlEYXRlUGlja2VyXCIpLmRpc2FibGUoKTtgXG5cdCAqXG5cdCAqIEBwYXJhbSBpc0Rpc2FibGVkIGB0cnVlYCB0byBkaXNhYmxlIHRoZSBEYXRlUGlja2VyXG5cdCAqL1xuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHQvKipcblx0ICogQ2xlYW5zIHVwIG91ciBmbGF0cGlja3IgaW5zdGFuY2Vcblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7IHJldHVybjsgfVxuXHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGB2YWx1ZUNoYW5nZWAgZXZlbnQgZnJvbSB0aGUgcHJpbWFyeS9zaW5nbGUgaW5wdXRcblx0ICovXG5cdG9uVmFsdWVDaGFuZ2UoZXZlbnQ6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZShldmVudCwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdGlmICh0aGlzLnJhbmdlKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyhbZGF0ZSwgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW2RhdGVdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZG9TZWxlY3QodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYHZhbHVlQ2hhbmdlYCBldmVudCBmcm9tIHRoZSByYW5nZSBpbnB1dFxuXHQgKi9cblx0b25SYW5nZVZhbHVlQ2hhbmdlKGV2ZW50OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuaXNPcGVuKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUoZXZlbnQsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW3RoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgZGF0ZV0pO1xuXHRcdFx0dGhpcy5kb1NlbGVjdCh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY2FsZW5kYXIgXCJwcm9wZXJseVwiIHdoZW4gdGhlIGNhbGVuZGFyIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW4uXG5cdCAqL1xuXHRvcGVuQ2FsZW5kYXIoZGF0ZXBpY2tlcklucHV0OiBEYXRlUGlja2VySW5wdXQsIGV2ZW50PzogRXZlbnQpIHtcblx0XHRpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnNrZWxldG9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gU2tpcHMgb3BlbmluZyB3aGVuIHRoZSBjbGljayBpcyBvbiB0aGUgZGVjb3JhdG9yIHJlZ2lvbiBzbyB0aGUgQUkgbGFiZWwgdHJpZ2dlcnNcblx0XHRpZiAodGhpcy5pc0RlY29yYXRvckNsaWNrKGV2ZW50KSkge1xuXHRcdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmlzT3Blbikge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdGRhdGVwaWNrZXJJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG5cblx0XHRcdC8vIElmIHRoZSBmaXJzdCBpbnB1dCdzIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZCB3aGVuIGNhbGVuZGFyIGlzIGluIHJhbmdlIG1vZGUsIHRoZW5cblx0XHRcdC8vIHRoZSBtb250aCBhbmQgeWVhciBuZWVkcyB0byBiZSBtYW51YWxseSBjaGFuZ2VkIHRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIG1vbnRoIGFuZFxuXHRcdFx0Ly8geWVhciBvdGhlcndpc2UgdGhlIGNhbGVuZGFyIHZpZXcgd2lsbCBub3QgYmUgdXBkYXRlZCB1cG9uIG9wZW5pbmcuXG5cdFx0XHRpZiAoZGF0ZXBpY2tlcklucHV0ID09PSB0aGlzLmlucHV0ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0TW9udGgoKTtcblxuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmN1cnJlbnRZZWFyID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldEZ1bGxZZWFyKCk7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNpbmdsZS1tb2RlIGZsYXRwaWNrciBoYW5kbGVzIG1vdXNlZG93biBidXQgbm90IGNsaWNrLCBzbyBuYXRpdmVFbGVtZW50LmNsaWNrKCkgd29uJ3Rcblx0XHRcdC8vIHdvcmsgd2hlbiB0aGUgY2FsZW5kYXIgaWNvbiBpcyBjbGlja2VkLiBJbiB0aGlzIGNhc2Ugd2Ugc2ltcGx5IHVzZSBmbGF0cGlja3Iub3BlbigpLlxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc0RlY29yYXRvckNsaWNrKGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmICghZXZlbnQ/LnRhcmdldCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IGVsID0gdCBpbnN0YW5jZW9mIEVsZW1lbnQgPyB0IDogKHQgYXMgTm9kZSkucGFyZW50RWxlbWVudDtcblx0XHRyZXR1cm4gZWw/LmNsb3Nlc3QoXCIuY2RzLS1kYXRlLXBpY2tlci1pbnB1dC1pbm5lci13cmFwcGVyLS1kZWNvcmF0b3JcIikgIT0gbnVsbDtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVDYWxlbmRhckxpc3RlbmVycygpIHtcblx0XHRjb25zdCBjYWxlbmRhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuXHRcdEFycmF5LmZyb20oY2FsZW5kYXJDb250YWluZXIpLmZvckVhY2goY2FsZW5kYXIgPT4ge1xuXHRcdFx0Y2FsZW5kYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMucHJldmVudENhbGVuZGFyQ2xvc2UpO1xuXHRcdFx0Y2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMucHJldmVudENhbGVuZGFyQ2xvc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIHJhbmdlIGlucHV0IGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBhZGRJbnB1dExpc3RlbmVycygpIHtcblx0XHRpZiAoIXRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93cyBmb2N1cyB0cmFuc2l0aW9uIGZyb20gdGhlIGRhdGVwaWNrZXIgaW5wdXQgb3IgcmFuZ2UgaW5wdXQgZmllbGQgdG9cblx0XHQvLyBmbGF0cGlja3IgY2FsZW5kYXIgdXNpbmcgYSBrZXlib2FyZC5cblx0XHRjb25zdCBhZGRGb2N1c0NhbGVuZGFyTGlzdGVuZXIgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gTGlzdGVuZXJzIGFyZSBhZGRlZCBqdXN0IG9uY2UsIHNvIGEgY2hlY2sgaXMgbmVlZGVkIGhlcmUuXG5cdFx0XHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5pc09wZW4pIHtcblx0XHRcdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uub3BlbigpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jYWxlbmRhckNvbnRhaW5lcjtcblx0XHRcdFx0XHRjb25zdCBkYXlFbGVtZW50ID0gY2FsZW5kYXJDb250YWluZXIgJiYgY2FsZW5kYXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5mbGF0cGlja3ItZGF5W3RhYmluZGV4XVwiKTtcblx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZERhdGVFbGVtID0gY2FsZW5kYXJDb250YWluZXIgJiYgY2FsZW5kYXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5zZWxlY3RlZFwiKTtcblx0XHRcdFx0XHRjb25zdCB0b2RheURhdGVFbGVtID0gY2FsZW5kYXJDb250YWluZXIgJiYgY2FsZW5kYXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi50b2RheVwiKTtcblxuXHRcdFx0XHRcdGlmIChkYXlFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHQodG9kYXlEYXRlRWxlbSB8fCBzZWxlY3RlZERhdGVFbGVtIHx8IGRheUVsZW1lbnQpLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSB1c2VyIG1hbnVhbGx5IGlucHV0cyBhIHZhbHVlIGludG8gdGhlIGRhdGUgZmllbGQgYW5kIHByZXNzZXMgYXJyb3cgZG93bixcblx0XHRcdFx0XHRcdC8vIGRhdGVwaWNrZXIgaW5wdXQgb25jaGFuZ2Ugd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBmb2N1cyBpcyByZW1vdmVkIGZyb20gaXQgYW5kXG5cdFx0XHRcdFx0XHQvLyBgZmxhdHBpY2tySW5zdGFuY2Uuc2V0RGF0ZWAgYW5kIGBmbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aGAgd2lsbCBiZSBpbnZva2VkXG5cdFx0XHRcdFx0XHQvLyB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgY2hhbmdlIGZvY3VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LlxuXHRcdFx0XHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGRheUVsZW1lbnQgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuaW5wdXQpIHtcblx0XHRcdGFkZEZvY3VzQ2FsZW5kYXJMaXN0ZW5lcih0aGlzLmlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJhbmdlSW5wdXQgJiYgdGhpcy5yYW5nZUlucHV0LmlucHV0KSB7XG5cdFx0XHRhZGRGb2N1c0NhbGVuZGFyTGlzdGVuZXIodGhpcy5yYW5nZUlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSB3aGlsZSBrZWVwaW5nIHRoZSBkYXRlIHZhbHVlcyAob3IgdXBkYXRpbmcgdGhlbSBpZiBuZXdEYXRlcyBpcyBwcm92aWRlZClcblx0ICpcblx0ICogVXNlZCB0byBwaWNrIHVwIGlucHV0IGNoYW5nZXMgb3IgbG9jYWxlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBuZXdEYXRlcyBBbiBvcHRpb25hbCBTaW1wbGVDaGFuZ2Ugb2YgZGF0ZSB2YWx1ZXNcblx0ICovXG5cdHByb3RlY3RlZCByZXNldEZsYXRwaWNrckluc3RhbmNlKG5ld0RhdGVzPzogU2ltcGxlQ2hhbmdlKSB7XG5cdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0bGV0IGRhdGVzID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzO1xuXHRcdFx0aWYgKG5ld0RhdGVzICYmIHRoaXMuZGlkRGF0ZVZhbHVlQ2hhbmdlKG5ld0RhdGVzLmN1cnJlbnRWYWx1ZSwgbmV3RGF0ZXMucHJldmlvdXNWYWx1ZSkpIHtcblx0XHRcdFx0ZGF0ZXMgPSBuZXdEYXRlcy5jdXJyZW50VmFsdWU7XG5cdFx0XHR9XG5cdFx0XHQvLyBvbmx5IHJlc2V0IHRoZSBmbGF0cGlja3IgaW5zdGFuY2Ugb24gSW5wdXQgY2hhbmdlc1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSB0cyBpcyB1bmhhcHB5IHdpdGggdGhlIGJlbG93IGNhbGwgdG8gYGZsYXRwaWNrcmBcblx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UgPSBmbGF0cGlja3IoYCMke3RoaXMuaWR9LWlucHV0YCwgdGhpcy5mbGF0cGlja3JPcHRpb25zKTtcblx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyhkYXRlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhcmJvbiB1c2VzIGEgbnVtYmVyIG9mIHNwZWNpZmljIGNsYXNzbmFtZXMgZm9yIHBhcnRzIG9mIHRoZSBmbGF0cGlja3IgLSB0aGlzIGlkZW1wb3RlbnQgbWV0aG9kIGFwcGxpZXMgdGhlbSBpZiBuZWVkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgdXBkYXRlQ2xhc3NOYW1lcygpIHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudFJlZikgeyByZXR1cm47IH1cblx0XHQvLyBnZXQgYWxsIHRoZSBwb3NzaWJsZSBmbGF0cGlja3JzIGluIHRoZSBkb2N1bWVudCAtIHdlIG5lZWQgdG8gYWRkIGNsYXNzZXMgdG8gKHBvdGVudGlhbGx5KSBhbGwgb2YgdGhlbVxuXHRcdGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItY2FsZW5kYXJcIik7XG5cdFx0Y29uc3QgbW9udGhDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1tb250aFwiKTtcblx0XHRjb25zdCB3ZWVrZGF5c0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLXdlZWtkYXlzXCIpO1xuXHRcdGNvbnN0IHdlZWtkYXlDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci13ZWVrZGF5XCIpO1xuXHRcdGNvbnN0IGRheXNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1kYXlzXCIpO1xuXHRcdGNvbnN0IGRheUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWRheVwiKTtcblxuXHRcdC8vIGFkZCBjbGFzc2VzIHRvIGxpc3RzIG9mIGVsZW1lbnRzXG5cdFx0Y29uc3QgYWRkQ2xhc3NJZk5vdEV4aXN0cyA9IChjbGFzc25hbWU6IHN0cmluZywgZWxlbWVudExpc3Q6IE5vZGVMaXN0T2Y8RWxlbWVudD4pID0+IHtcblx0XHRcdEFycmF5LmZyb20oZWxlbWVudExpc3QpLmZvckVhY2goZWxlbWVudCA9PiB7XG5cdFx0XHRcdGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NuYW1lKSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc25hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0Ly8gYWRkIGNsYXNzZXMgKGJ1dCBvbmx5IGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHNtYWxsIHBlcmYgd2luKVxuXHRcdGFkZENsYXNzSWZOb3RFeGlzdHMoXCJjZHMtLWRhdGUtcGlja2VyX19jYWxlbmRhclwiLCBjYWxlbmRhckNvbnRhaW5lcik7XG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX21vbnRoXCIsIG1vbnRoQ29udGFpbmVyKTtcblx0XHRhZGRDbGFzc0lmTm90RXhpc3RzKFwiY2RzLS1kYXRlLXBpY2tlcl9fd2Vla2RheXNcIiwgd2Vla2RheXNDb250YWluZXIpO1xuXHRcdGFkZENsYXNzSWZOb3RFeGlzdHMoXCJjZHMtLWRhdGUtcGlja2VyX19kYXlzXCIsIGRheXNDb250YWluZXIpO1xuXG5cdFx0Ly8gYWRkIHdlZWtkYXkgY2xhc3NlcyBhbmQgZm9ybWF0IHRoZSB0ZXh0XG5cdFx0QXJyYXkuZnJvbSh3ZWVrZGF5Q29udGFpbmVyKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXHRcdFx0ZWxlbWVudC5pbm5lckhUTUwgPSBlbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuXHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fd2Vla2RheVwiKTtcblx0XHR9KTtcblxuXHRcdC8vIGFkZCBkYXkgY2xhc3NlcyBhbmQgc3BlY2lhbCBjYXNlIHRoZSBcInRvZGF5XCIgZWxlbWVudCBiYXNlZCBvbiBgdGhpcy52YWx1ZWBcblx0XHRBcnJheS5mcm9tKGRheUNvbnRhaW5lcikuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcImJ1dHRvblwiKTtcblx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNkcy0tZGF0ZS1waWNrZXJfX2RheVwiKTtcblx0XHRcdGlmICghdGhpcy52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJ0b2RheVwiKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibm8tYm9yZGVyXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInRvZGF5XCIpICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcIm5vLWJvcmRlclwiKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItY2FsZW5kYXJcIik7XG5cdFx0QXJyYXkuZnJvbShjYWxlbmRhckNvbnRhaW5lcikuZm9yRWFjaChjYWxlbmRhciA9PiB7XG5cdFx0XHRjYWxlbmRhci5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwiYXBwbGljYXRpb25cIik7XG5cdFx0XHRjYWxlbmRhci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHRoaXMuYXJpYUxhYmVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiBkYXRlIHZhbHVlIGFycmF5IHRvIGJvdGggdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBhbmQgdGhlIGBpbnB1dGAocylcblx0ICogQHBhcmFtIGRhdGVzIHRoZSBkYXRlIHZhbHVlcyB0byBhcHBseVxuXHQgKi9cblx0cHJvdGVjdGVkIHNldERhdGVWYWx1ZXMoZGF0ZXM6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0Y29uc3Qgc2luZ2xlSW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLmlkfS1pbnB1dGApO1xuXHRcdFx0Y29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMuaWR9LXJhbmdlSW5wdXRgKTtcblxuXHRcdFx0Ly8gYGZsYXRwaWNrckluc3RhbmNlLnNldERhdGVgIHJlbW92ZXMgdGhlIGZvY3VzIG9uIHRoZSBzZWxlY3RlZCBkYXRlIGVsZW1lbnQgYW5kIHdpbGxcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgY2hhbmdlIGZvY3VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LiBJZiBhIHNlbGVjdGVkIGRhdGUgaXNcblx0XHRcdC8vIGZvY3VzZWQgYmVmb3JlIGBmbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlYCBpcyBpbnZva2VkIHRoZW4gaXQgc2hvdWxkIHJlbWFpbiBmb2N1c2VkLlxuXHRcdFx0bGV0IHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuXHRcdFx0Ly8gc2V0IHRoZSBkYXRlIG9uIHRoZSBpbnN0YW5jZVxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlKGRhdGVzKTtcblxuXHRcdFx0aWYgKHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gd2UgY2FuIGVpdGhlciBzZXQgYSBkYXRlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZywgc28gd2Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdGxldCBzaW5nbGVEYXRlID0gXCJcIjtcblx0XHRcdC8vIGlmIGRhdGUgaXMgYSBzdHJpbmcsIHBhcnNlIGFuZCBmb3JtYXRcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHNpbmdsZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdHNpbmdsZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUoc2luZ2xlRGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdC8vIGlmIGRhdGUgaXMgbm90IGEgc3RyaW5nIHdlIGNhbiBhc3N1bWUgaXQncyBhIERhdGUgYW5kIHdlIHNob3VsZCBmb3JtYXRcblx0XHRcdH0gZWxzZSBpZiAoISF0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZm9ybWF0RGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyYW5nZUlucHV0KSB7XG5cdFx0XHRcdC8vIHdlIGNhbiBlaXRoZXIgc2V0IGEgZGF0ZSB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcsIHNvIHdlIHN0YXJ0IHdpdGggYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHRcdGxldCByYW5nZURhdGUgPSBcIlwiO1xuXHRcdFx0XHQvLyBpZiBkYXRlIGlzIGEgc3RyaW5nLCBwYXJzZSBhbmQgZm9ybWF0XG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdLnRvU3RyaW5nKCksIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHJhbmdlRGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0Ly8gaWYgZGF0ZSBpcyBub3QgYSBzdHJpbmcgd2UgY2FuIGFzc3VtZSBpdCdzIGEgRGF0ZSBhbmQgd2Ugc2hvdWxkIGZvcm1hdFxuXHRcdFx0XHR9IGVsc2UgaWYgKCEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdKSB7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHQvLyBhcHBseSB0aGUgdmFsdWVzXG5cdFx0XHRcdFx0cmFuZ2VJbnB1dC52YWx1ZSA9IHJhbmdlRGF0ZTtcblx0XHRcdFx0XHRzaW5nbGVJbnB1dC52YWx1ZSA9IHNpbmdsZURhdGU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBwcmV2ZW50Q2FsZW5kYXJDbG9zZSA9IGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdHByb3RlY3RlZCBkb1NlbGVjdChzZWxlY3RlZFZhbHVlOiAoRGF0ZSB8IHN0cmluZylbXSkge1xuXHRcdC8vIEluIHJhbmdlIG1vZGUsIGlmIGEgZGF0ZSBpcyBzZWxlY3RlZCBmcm9tIHRoZSBmaXJzdCBjYWxlbmRhciB0aGF0IGlzIGZyb20gdGhlIHByZXZpb3VzIG1vbnRoLFxuXHRcdC8vIHRoZSBtb250aCB3aWxsIG5vdCBiZSB1cGRhdGVkIG9uIHRoZSBjYWxlbmRhciB1bnRpbCB0aGUgY2FsZW5kYXIgaXMgcmUtb3BlbmVkLlxuXHRcdC8vIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIGNhbGVuZGFyIGlzIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBtb250aC5cblx0XHRpZiAodGhpcy5yYW5nZSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRNb250aCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXS5nZXRNb250aCgpO1xuXG5cdFx0XHQvLyBgZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGhgIHJlbW92ZXMgdGhlIGZvY3VzIG9uIHRoZSBzZWxlY3RlZCBkYXRlIGVsZW1lbnQgYW5kIHdpbGxcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgY2hhbmdlIGZvY3VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LiBJZiBhIHNlbGVjdGVkIGRhdGUgaXNcblx0XHRcdC8vIGZvY3VzZWQgYmVmb3JlIGBmbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aGAgaXMgaW52b2tlZCB0aGVuIGl0IHNob3VsZCByZW1haW4gZm9jdXNlZC5cblx0XHRcdGxldCBzaG91bGRSZWZvY3VzRGF0ZUVsZW1lbnQgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cblx0XHRcdGlmIChzaG91bGRSZWZvY3VzRGF0ZUVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG5cdFx0XHR9XG5cblx0XHR9XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KHNlbGVjdGVkVmFsdWUpO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHNlbGVjdGVkVmFsdWUpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGRpZERhdGVWYWx1ZUNoYW5nZShjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpIHtcblx0XHRyZXR1cm4gY3VycmVudFZhbHVlWzBdICE9PSBwcmV2aW91c1ZhbHVlWzBdIHx8IGN1cnJlbnRWYWx1ZVsxXSAhPT0gcHJldmlvdXNWYWx1ZVsxXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3JlIGFkdmFuY2VkIGNoZWNraW5nIG9mIHRoZSBsb2FkZWQgc3RhdGUgb2YgZmxhdHBpY2tyXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaXNGbGF0cGlja3JMb2FkZWQoKSB7XG5cdFx0Ly8gY2FzdCB0aGUgaW5zdGFuY2UgdG8gYSBib29sZWFuLCBhbmQgc29tZSBtZXRob2QgdGhhdCBoYXMgdG8gZXhpc3QgZm9yIHRoZSBsaWJyYXJ5IHRvIGJlIGxvYWRlZCBpbiB0aGlzIGNhc2UgYHNldERhdGVgXG5cdFx0cmV0dXJuICEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZSAmJiAhIXRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2V0RGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSaWdodCBhcnJvdyBIVE1MIHBhc3NlZCB0byBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCByaWdodEFycm93SFRNTCgpIHtcblx0XHRyZXR1cm4gYFxuXHRcdFx0PHN2ZyB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuXHRcdFx0XHQ8cG9seWdvbiBwb2ludHM9XCIxMSw4IDYsMTMgNS4zLDEyLjMgOS42LDggNS4zLDMuNyA2LDMgXCIvPlxuXHRcdFx0XHQ8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBzdHlsZT1cImZpbGw6bm9uZVwiIC8+XG5cdFx0XHQ8L3N2Zz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIExlZnQgYXJyb3cgSFRNTCBwYXNzZWQgdG8gZmxhdHBpY2tyXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbGVmdEFycm93SFRNTCgpIHtcblx0XHRyZXR1cm4gYFxuXHRcdFx0PHN2ZyB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuXHRcdFx0XHQ8cG9seWdvbiBwb2ludHM9XCI1LDggMTAsMyAxMC43LDMuNyA2LjQsOCAxMC43LDEyLjMgMTAsMTMgXCIvPlxuXHRcdFx0XHQ8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBzdHlsZT1cImZpbGw6bm9uZVwiIC8+XG5cdFx0XHQ8L3N2Zz5gO1xuXHR9XG59XG4iXX0=
776
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUdqQixZQUFZLEVBTVosU0FBUyxFQUdULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLG9DQUFvQyxDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRixPQUFPLEtBQUssU0FBUyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUt2RDs7Ozs7OztHQU9HO0FBQ0gsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUU7SUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQXNCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUgsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7Q0FDSDtBQUVEOzs7Ozs7OztHQVFHO0FBd0VILE1BQU0sT0FBTyxVQUFVO0lBeUx0QixZQUNXLFVBQXNCLEVBQ3RCLElBQVU7UUFEVixlQUFVLEdBQVYs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QUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLEVBQUU7c0JBQVYsS0FBSztnQkFFTyxLQUFLO3NCQUFqQixLQUFLO2dCQWVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBcUJnQyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1gsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUViLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsT0FBTztzQkFBaEIsTUFBTTtnQkF3R1AsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVM7Z0JBZ0J2QixVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0RWxlbWVudFJlZixcblx0T25EZXN0cm95LFxuXHRIb3N0TGlzdGVuZXIsXG5cdFRlbXBsYXRlUmVmLFxuXHRPbkNoYW5nZXMsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdEFmdGVyVmlld0NoZWNrZWQsXG5cdEFmdGVyVmlld0luaXQsXG5cdFZpZXdDaGlsZCxcblx0T25Jbml0LFxuXHRTaW1wbGVDaGFuZ2Vcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCByYW5nZVBsdWdpbiBmcm9tIFwiZmxhdHBpY2tyL2Rpc3QvcGx1Z2lucy9yYW5nZVBsdWdpblwiO1xuaW1wb3J0IGZsYXRwaWNrciBmcm9tIFwiZmxhdHBpY2tyXCI7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgY2FyYm9uRmxhdHBpY2tyTW9udGhTZWxlY3RQbHVnaW4gfSBmcm9tIFwiLi9jYXJib24tZmxhdHBpY2tyLW1vbnRoLXNlbGVjdFwiO1xuaW1wb3J0ICogYXMgbGFuZ3VhZ2VzIGZyb20gXCJmbGF0cGlja3IvZGlzdC9sMTBuL2luZGV4XCI7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcImZsYXRwaWNrci9kaXN0L3R5cGVzL29wdGlvbnNcIjtcbmltcG9ydCB7IERhdGVQaWNrZXJJbnB1dCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2RhdGVwaWNrZXItaW5wdXRcIjtcbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5cbi8qKlxuICogRHVlIHRvIHR5cGUgZXJyb3IsIHdlIGhhdmUgdG8gdXNlIHNxdWFyZSBicmFja2V0cyBwcm9wZXJ0eSBhY2Nlc3NvclxuICogVGhlcmUgaXMgYSB3ZWJwYWNrIGlzc3VlIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgZXhwb3J0ZWQgbGFuZ3VhZ2VzIGZyb20gZmxhdHBpY2tyIGwxMG4gQW5ndWxhciAxNCsgYXBwc1xuICogbGFuZ3VhZ2VzLmRlZmF1bHRbbG9jYWxlXSBmYWlscyBpbiBhcHAgY29uc3VtaW5nIENDQSBsaWJyYXJ5IGJ1dCBwYXNzZXMgaW4gdGVzdFxuICogbGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtsb2NhbGVdIGZhaWxzIGluIHRlc3QgYnV0IHdvcmtzIGluIGFwcCBjb25zdW1pbmcgQ0NBIGxpYnJhcnkuXG4gKlxuICogVG8gcGxlYXNlIGJvdGggc2NlbmFyaW9zLCB3ZSBhcmUgYWRkaW5nIGEgY29uZGl0aW9uIHRvIHByZXZlbnQgdGVzdHMgZnJvbSBmYWlsaW5nXG4gKi9cbmlmIChsYW5ndWFnZXMuZGVmYXVsdD8uZGVmYXVsdFtcImVuXCJdPy53ZWVrZGF5cykge1xuXHQobGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtcImVuXCJdLndlZWtkYXlzLnNob3J0aGFuZCBhcyBzdHJpbmdbXSkgPSBsYW5ndWFnZXMuZGVmYXVsdC5kZWZhdWx0W1wiZW5cIl0ud2Vla2RheXMubG9uZ2hhbmQubWFwKGRheSA9PiB7XG5cdFx0aWYgKGRheSA9PT0gXCJUaHVyc2RheVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJUaFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF5LmNoYXJBdCgwKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWRhdGUtcGlja2VyLS1zaW5nbGUpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtZGF0ZS1waWNrZXIsIGlibS1kYXRlLXBpY2tlclwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW1cIj5cblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tcmFuZ2UnIDogcmFuZ2UsXG5cdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1zaW5nbGUnIDogIXJhbmdlLFxuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tbGlnaHQnIDogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJyA6IHNrZWxldG9uXG5cdFx0XHR9XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGNkcy1kYXRlLXBpY2tlci1pbnB1dFxuXHRcdFx0XHRcdCNpbnB1dFxuXHRcdFx0XHRcdFtsYWJlbF09XCJsYWJlbFwiXG5cdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRbcGF0dGVybl09XCJpbnB1dFBhdHRlcm5cIlxuXHRcdFx0XHRcdFtpZF09XCJpZCArICctaW5wdXQnXCJcblx0XHRcdFx0XHRbc2l6ZV09XCJzaXplXCJcblx0XHRcdFx0XHRbdHlwZV09XCIocmFuZ2UgPyAncmFuZ2UnIDogJ3NpbmdsZScpXCJcblx0XHRcdFx0XHRbaGFzSWNvbl09XCIocmFuZ2UgPyBmYWxzZSA6IHRydWUpXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFtyZWFkb25seV09XCJyZWFkb25seVwiXG5cdFx0XHRcdFx0W2ludmFsaWRdPVwiaW52YWxpZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRUZXh0XT1cImludmFsaWRUZXh0XCJcblx0XHRcdFx0XHRbd2Fybl09XCJ3YXJuXCJcblx0XHRcdFx0XHRbd2FyblRleHRdPVwid2FyblRleHRcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2hlbHBlclRleHRdPVwiaGVscGVyVGV4dFwiXG5cdFx0XHRcdFx0W2RlY29yYXRvcl09XCJkZWNvcmF0b3JcIlxuXHRcdFx0XHRcdCh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIoaW5wdXQsICRldmVudClcIj5cblx0XHRcdFx0PC9jZHMtZGF0ZS1waWNrZXItaW5wdXQ+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiAqbmdJZj1cInJhbmdlXCIgY2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8Y2RzLWRhdGUtcGlja2VyLWlucHV0XG5cdFx0XHRcdFx0I3JhbmdlSW5wdXRcblx0XHRcdFx0XHRbbGFiZWxdPVwicmFuZ2VMYWJlbFwiXG5cdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRbcGF0dGVybl09XCJpbnB1dFBhdHRlcm5cIlxuXHRcdFx0XHRcdFtpZF09XCJpZCArICctcmFuZ2VJbnB1dCdcIlxuXHRcdFx0XHRcdFtzaXplXT1cInNpemVcIlxuXHRcdFx0XHRcdFt0eXBlXT1cIihyYW5nZSA/ICdyYW5nZScgOiAnc2luZ2xlJylcIlxuXHRcdFx0XHRcdFtoYXNJY29uXT1cIihyYW5nZSA/IHRydWUgOiBudWxsKVwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRcdFtpbnZhbGlkXT1cInJhbmdlSW52YWxpZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRUZXh0XT1cInJhbmdlSW52YWxpZFRleHRcIlxuXHRcdFx0XHRcdFt3YXJuXT1cInJhbmdlV2FyblwiXG5cdFx0XHRcdFx0W3dhcm5UZXh0XT1cInJhbmdlV2FyblRleHRcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2hlbHBlclRleHRdPVwicmFuZ2VIZWxwZXJUZXh0XCJcblx0XHRcdFx0XHRbZGVjb3JhdG9yXT1cInJhbmdlRGVjb3JhdG9yXCJcblx0XHRcdFx0XHQodmFsdWVDaGFuZ2UpPVwib25SYW5nZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIocmFuZ2VJbnB1dCwgJGV2ZW50KVwiPlxuXHRcdFx0XHQ8L2Nkcy1kYXRlLXBpY2tlci1pbnB1dD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0YCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogRGF0ZVBpY2tlcixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXIgaW1wbGVtZW50c1xuXHRPbkluaXQsXG5cdE9uRGVzdHJveSxcblx0T25DaGFuZ2VzLFxuXHRBZnRlclZpZXdDaGVja2VkLFxuXHRBZnRlclZpZXdJbml0IHtcblx0cHJpdmF0ZSBzdGF0aWMgZGF0ZVBpY2tlckNvdW50ID0gMDtcblxuXHQvKipcblx0ICogU2VsZWN0IGNhbGVuZGFyIHJhbmdlIG1vZGVcblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEZvcm1hdCBvZiBkYXRlXG5cdCAqXG5cdCAqIEZvciByZWZlcmVuY2U6IGh0dHBzOi8vZmxhdHBpY2tyLmpzLm9yZy9mb3JtYXR0aW5nL1xuXHQgKi9cblx0QElucHV0KCkgZGF0ZUZvcm1hdCA9IFwibS9kL1lcIjtcblxuXHQvKipcblx0ICogTGFuZ3VhZ2Ugb2YgdGhlIGZsYXRwaWNrciBjYWxlbmRhci5cblx0ICpcblx0ICogRm9yIHJlZmVyZW5jZSBvZiB0aGUgcG9zc2libGUgbG9jYWxlczpcblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwaWNrci9mbGF0cGlja3IvYmxvYi9tYXN0ZXIvc3JjL2wxMG4vaW5kZXgudHNcblx0ICovXG5cdEBJbnB1dCgpIGxhbmd1YWdlID0gXCJlblwiO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogKipFeHBlcmltZW50YWwqKjogT3B0aW9uYWwgZGVjb3JhdG9yIChlLmcuIEFJIGxhYmVsKS5cblx0ICovXG5cdEBJbnB1dCgpIGRlY29yYXRvcjogVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqICoqRXhwZXJpbWVudGFsKio6IE9wdGlvbmFsIGRlY29yYXRvciAoZS5nLiBBSSBsYWJlbCkgb24gdGhlIHJhbmdlIGVuZCBmaWVsZCB3aGVuIGByYW5nZWAgaXMgYHRydWVgLlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VEZWNvcmF0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cdEBJbnB1dCgpIHJhbmdlSGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgcmFuZ2VMYWJlbDogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJtbS9kZC95eXl5XCI7XG5cblx0LyoqXG5cdCAqIEFyaWEgbGFiZWwgYWRkZWQgdG8gZGF0ZXBpY2tlcidzIGNhbGVuZGFyIGNvbnRhaW5lci5cblx0ICovXG5cdEBJbnB1dCgpIGFyaWFMYWJlbCA9IFwiY2FsZW5kYXIgY29udGFpbmVyXCI7XG5cblx0LyoqXG5cdCAqIFRoZSBwYXR0ZXJuIGZvciB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50XG5cdCAqL1xuXHRASW5wdXQoKSBpbnB1dFBhdHRlcm4gPSBcIl5cXFxcZHsxLDJ9L1xcXFxkezEsMn0vXFxcXGR7NH0kXCI7XG5cblx0QElucHV0KCkgaWQgPSBgZGF0ZXBpY2tlci0ke0RhdGVQaWNrZXIuZGF0ZVBpY2tlckNvdW50Kyt9YDtcblxuXHRASW5wdXQoKSBzZXQgdmFsdWUodjogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHRpZiAoIXYpIHtcblx0XHRcdHYgPSBbXTtcblx0XHR9XG5cdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHR9XG5cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl92YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIFNldCB0byBgXCJsaWdodFwiYCB0byBhcHBseSB0aGUgbGlnaHQgc3R5bGVcblx0ICovXG5cdEBJbnB1dCgpIHRoZW1lOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSB0aGUgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkYXRlcGlja2VyIGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc3BsYXkgdGhlIGludmFsaWQgc3RhdGUgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dC5cblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlSW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VJbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIGluIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCAoY29udGVudHMgc2V0IGJ5IHJhbmdlV2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dFxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHBsdWdpbnMgPSBbXTtcblxuXHRASW5wdXQoKVxuXHRzZXQgZmxhdHBpY2tyT3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KSB7XG5cdFx0dGhpcy5fZmxhdHBpY2tyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2ZsYXRwaWNrck9wdGlvbnMsIG9wdGlvbnMpO1xuXHR9XG5cdGdldCBmbGF0cGlja3JPcHRpb25zKCk6IFBhcnRpYWw8T3B0aW9ucz4ge1xuXHRcdGNvbnN0IHBsdWdpbnMgPSBbLi4udGhpcy5wbHVnaW5zLCBjYXJib25GbGF0cGlja3JNb250aFNlbGVjdFBsdWdpbl07XG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdHBsdWdpbnMucHVzaChyYW5nZVBsdWdpbih7IGlucHV0OiBgIyR7dGhpcy5pZH0tcmFuZ2VJbnB1dGAsIHBvc2l0aW9uOiBcImxlZnRcIiB9KSk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9mbGF0cGlja3JPcHRpb25zLCB0aGlzLmZsYXRwaWNrckJhc2VPcHRpb25zLCB7XG5cdFx0XHRtb2RlOiB0aGlzLnJhbmdlID8gXCJyYW5nZVwiIDogXCJzaW5nbGVcIixcblx0XHRcdHBsdWdpbnMsXG5cdFx0XHRkYXRlRm9ybWF0OiB0aGlzLmRhdGVGb3JtYXQsXG5cdFx0XHRsb2NhbGU6IGxhbmd1YWdlcy5kZWZhdWx0Py5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdIHx8IGxhbmd1YWdlcy5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuXHRcdFx0Ly8gTGl0dGxlIHRyaWNrIGZvcmNlIFwicmVhZG9ubHkgbW9kZVwiIG9uIGRhdGVwaWNrZXIgaW5wdXQuXG5cdFx0XHQvLyBEb2NzOiBXaGV0aGVyIGNsaWNraW5nIG9uIHRoZSBpbnB1dCBzaG91bGQgb3BlbiB0aGUgcGlja2VyLlxuXHRcdFx0Ly8gWW91IGNvdWxkIGRpc2FibGUgdGhpcyBpZiB5b3Ugd2lzaCB0byBvcGVuIHRoZSBjYWxlbmRhciBtYW51YWxseSB3aXRoLm9wZW4oKS5cblx0XHRcdGNsaWNrT3BlbnM6ICF0aGlzLnJlYWRvbmx5XG5cdFx0fSk7XG5cdH1cblxuXHRAVmlld0NoaWxkKFwiaW5wdXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ6IERhdGVQaWNrZXJJbnB1dDtcblx0QFZpZXdDaGlsZChcInJhbmdlSW5wdXRcIikgcmFuZ2VJbnB1dDogRGF0ZVBpY2tlcklucHV0O1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdlIGFyZSBvdmVycmlkaW5nIG9uQ2xvc2UgZXZlbnQgZXZlbiBpZiB1c2VycyBwYXNzIGl0IHZpYSBmbGF0cGlja3Igb3B0aW9uc1xuXHQgKiBFbWl0cyBhbiBldmVudCB3aGVuIGRhdGUgcGlja2VyIGNsb3Nlc1xuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHByb3RlY3RlZCBfdmFsdWUgPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2ZsYXRwaWNrck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG5cdFx0YWxsb3dJbnB1dDogdHJ1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JCYXNlT3B0aW9ucyA9IHtcblx0XHRtb2RlOiBcInNpbmdsZVwiLFxuXHRcdGRhdGVGb3JtYXQ6IFwibS9kL1lcIixcblx0XHRwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG5cdFx0b25PcGVuOiAoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNsYXNzTmFtZXMoKTtcblx0XHRcdHRoaXMudXBkYXRlQXR0cmlidXRlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVDYWxlbmRhckxpc3RlbmVycygpO1xuXHRcdH0sXG5cdFx0b25DbG9zZTogKGRhdGUpID0+IHtcblx0XHRcdC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBgZmxhdHBpY2tySW5zdGFuY2Ugc2VsZWN0ZWREYXRlc2AgYXJlIGluIHN5bmMgd2l0aCB0aGUgdmFsdWVzIG9mXG5cdFx0XHQvLyB0aGUgaW5wdXRzIHdoZW4gdGhlIGNhbGVuZGFyIGNsb3Nlcy5cblx0XHRcdGlmICh0aGlzLnJhbmdlICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgcmFuZ2VJbnB1dFZhbHVlID0gdGhpcy5yYW5nZUlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGlmIChpbnB1dFZhbHVlIHx8IHJhbmdlSW5wdXRWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlRGF0ZSA9IChkYXRlOiBzdHJpbmcpID0+IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKGRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtwYXJzZURhdGUoaW5wdXRWYWx1ZSksIHBhcnNlRGF0ZShyYW5nZUlucHV0VmFsdWUgfHwgaW5wdXRWYWx1ZSldKTtcblx0XHRcdFx0XHR0aGlzLmRvU2VsZWN0KHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMub25DbG9zZS5lbWl0KGRhdGUpO1xuXHRcdH0sXG5cdFx0b25EYXlDcmVhdGU6IChfZE9iaiwgX2RTdHIsIF9mcCwgZGF5RWxlbSkgPT4ge1xuXHRcdFx0ZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5XCIpO1xuXHRcdH0sXG5cdFx0bmV4dEFycm93OiB0aGlzLnJpZ2h0QXJyb3dIVE1MKCksXG5cdFx0cHJldkFycm93OiB0aGlzLmxlZnRBcnJvd0hUTUwoKSxcblx0XHR2YWx1ZTogdGhpcy52YWx1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JJbnN0YW5jZSA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG5cblx0KSB7IH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHQvLyBpZiBpMThuIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIGVuIHdlJ2xsIHdhbnQgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZVxuXHRcdC8vIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHVzZSB0aGUgbG9jYWwgc2V0dGluZ1xuXHRcdGlmICh0aGlzLmkxOG4uZ2V0TG9jYWxlKCkgIT09IFwiZW5cIikge1xuXHRcdFx0dGhpcy5pMThuLmdldExvY2FsZU9ic2VydmFibGUoKS5zdWJzY3JpYmUobG9jYWxlID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZSA9IGxvY2FsZTtcblx0XHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0Ly8gUmVzZXQgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBvbiBpbnB1dCBjaGFuZ2VzIHRoYXQgYWZmZWN0IGZsYXRwaWNrci5cblx0XHRjb25zdCBmbGF0cGlja3JDaGFuZ2VLZXlzID0gW1xuXHRcdFx0XCJyYW5nZVwiLFxuXHRcdFx0XCJkYXRlRm9ybWF0XCIsXG5cdFx0XHRcImxhbmd1YWdlXCIsXG5cdFx0XHRcImlkXCIsXG5cdFx0XHRcInZhbHVlXCIsXG5cdFx0XHRcInBsdWdpbnNcIixcblx0XHRcdFwiZmxhdHBpY2tyT3B0aW9uc1wiLFxuXHRcdFx0XCJyZWFkb25seVwiXG5cdFx0XTtcblx0XHRjb25zdCBjaGFuZ2VLZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlcyk7XG5cdFx0aWYgKGNoYW5nZUtleXMuc29tZShrZXkgPT4gZmxhdHBpY2tyQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSkge1xuXHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKGNoYW5nZXMudmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHtcblx0XHRcdHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlWzBdID8/IFwiXCI7XG5cdFx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0XHR0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlWzFdID8/IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZGRJbnB1dExpc3RlbmVycygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0Ly8gYmVjYXVzZSB0aGUgYWN0dWFsIHZpZXcgbWF5IGJlIGRlbGF5ZWQgaW4gbG9hZGluZyAodGhpbmsgcHJvamVjdGlvbiBpbnRvIGEgdGFiIHBhbmUpXG5cdC8vIGFuZCBiZWNhdXNlIHdlIHJlbHkgb24gYSBsaWJyYXJ5IHRoYXQgb3BlcmF0ZXMgb3V0c2lkZSB0aGUgQW5ndWxhciB2aWV3IG9mIHRoZSB3b3JsZFxuXHQvLyB3ZSBuZWVkIHRvIGtlZXAgdHJ5aW5nIHRvIGxvYWQgdGhlIGxpYnJhcnksIHVudGlsIHRoZSByZWxldmFudCBET00gaXMgYWN0dWFsbHkgbGl2ZVxuXHRuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG5cdFx0aWYgKCF0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgdHMgaXMgdW5oYXBweSB3aXRoIHRoZSBiZWxvdyBjYWxsIHRvIGBmbGF0cGlja3JgXG5cdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlID0gZmxhdHBpY2tyKGAjJHt0aGlzLmlkfS1pbnB1dGAsIHRoaXMuZmxhdHBpY2tyT3B0aW9ucyk7XG5cdFx0XHQvLyBpZiAoYW5kIG9ubHkgaWYpIHRoZSBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIHdlIGNhbiBzZXQgdGhlIGRhdGUgdmFsdWVzXG5cdFx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRcdGlmICh0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXModGhpcy52YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZm9jdXNpblwiKVxuXHRvbkZvY3VzKCkge1xuXHRcdC8vIFVwZGF0ZXMgdGhlIG1vbnRoIG1hbnVhbGx5IHdoZW4gY2FsZW5kYXIgbW9kZSBpcyByYW5nZSBiZWNhdXNlIG1vbnRoXG5cdFx0Ly8gd2lsbCBub3QgdXBkYXRlIHByb3Blcmx5IHdpdGhvdXQgbWFudWFsbHkgdXBkYXRpbmcgdGhlbSBvbiBmb2N1cy5cblx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0aWYgKHRoaXMucmFuZ2VJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0uZ2V0TW9udGgoKTtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0TW9udGgoKTtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZm9jdXNvdXRcIilcblx0b25Gb2N1c091dCgpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlcyBhIHZhbHVlIGZyb20gdGhlIG1vZGVsIHRvIHRoZSBjb21wb25lbnQuIEV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGBudWxsYCBvciBgKERhdGUgfCBzdHJpbmcpW11gXG5cdCAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSBtb2RlbFxuXHQgKi9cblx0d3JpdGVWYWx1ZSh2YWx1ZTogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY29uZmlnKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyh0aGlzLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIG1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGUgdGhlIERhdGVQaWNrZXIuXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlEYXRlUGlja2VyXCIpLmRpc2FibGUoKTtgXG5cdCAqXG5cdCAqIEBwYXJhbSBpc0Rpc2FibGVkIGB0cnVlYCB0byBkaXNhYmxlIHRoZSBEYXRlUGlja2VyXG5cdCAqL1xuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHQvKipcblx0ICogQ2xlYW5zIHVwIG91ciBmbGF0cGlja3IgaW5zdGFuY2Vcblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7IHJldHVybjsgfVxuXHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGB2YWx1ZUNoYW5nZWAgZXZlbnQgZnJvbSB0aGUgcHJpbWFyeS9zaW5nbGUgaW5wdXRcblx0ICovXG5cdG9uVmFsdWVDaGFuZ2UoZXZlbnQ6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZShldmVudCwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdGlmICh0aGlzLnJhbmdlKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyhbZGF0ZSwgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW2RhdGVdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZG9TZWxlY3QodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYHZhbHVlQ2hhbmdlYCBldmVudCBmcm9tIHRoZSByYW5nZSBpbnB1dFxuXHQgKi9cblx0b25SYW5nZVZhbHVlQ2hhbmdlKGV2ZW50OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuaXNPcGVuKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUoZXZlbnQsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW3RoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgZGF0ZV0pO1xuXHRcdFx0dGhpcy5kb1NlbGVjdCh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY2FsZW5kYXIgXCJwcm9wZXJseVwiIHdoZW4gdGhlIGNhbGVuZGFyIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW4uXG5cdCAqL1xuXHRvcGVuQ2FsZW5kYXIoZGF0ZXBpY2tlcklucHV0OiBEYXRlUGlja2VySW5wdXQsIGV2ZW50PzogRXZlbnQpIHtcblx0XHRpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnNrZWxldG9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gU2tpcHMgb3BlbmluZyB3aGVuIHRoZSBjbGljayBpcyBvbiB0aGUgZGVjb3JhdG9yIHJlZ2lvbiBzbyB0aGUgQUkgbGFiZWwgdHJpZ2dlcnNcblx0XHRpZiAodGhpcy5pc0RlY29yYXRvckNsaWNrKGV2ZW50KSkge1xuXHRcdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmlzT3Blbikge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdGRhdGVwaWNrZXJJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG5cblx0XHRcdC8vIElmIHRoZSBmaXJzdCBpbnB1dCdzIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZCB3aGVuIGNhbGVuZGFyIGlzIGluIHJhbmdlIG1vZGUsIHRoZW5cblx0XHRcdC8vIHRoZSBtb250aCBhbmQgeWVhciBuZWVkcyB0byBiZSBtYW51YWxseSBjaGFuZ2VkIHRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIG1vbnRoIGFuZFxuXHRcdFx0Ly8geWVhciBvdGhlcndpc2UgdGhlIGNhbGVuZGFyIHZpZXcgd2lsbCBub3QgYmUgdXBkYXRlZCB1cG9uIG9wZW5pbmcuXG5cdFx0XHRpZiAoZGF0ZXBpY2tlcklucHV0ID09PSB0aGlzLmlucHV0ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0TW9udGgoKTtcblxuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmN1cnJlbnRZZWFyID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldEZ1bGxZZWFyKCk7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNpbmdsZS1tb2RlIGZsYXRwaWNrciBoYW5kbGVzIG1vdXNlZG93biBidXQgbm90IGNsaWNrLCBzbyBuYXRpdmVFbGVtZW50LmNsaWNrKCkgd29uJ3Rcblx0XHRcdC8vIHdvcmsgd2hlbiB0aGUgY2FsZW5kYXIgaWNvbiBpcyBjbGlja2VkLiBJbiB0aGlzIGNhc2Ugd2Ugc2ltcGx5IHVzZSBmbGF0cGlja3Iub3BlbigpLlxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUNhbGVuZGFyTGlzdGVuZXJzKCkge1xuXHRcdGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItY2FsZW5kYXJcIik7XG5cdFx0QXJyYXkuZnJvbShjYWxlbmRhckNvbnRhaW5lcikuZm9yRWFjaChjYWxlbmRhciA9PiB7XG5cdFx0XHRjYWxlbmRhci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wcmV2ZW50Q2FsZW5kYXJDbG9zZSk7XG5cdFx0XHRjYWxlbmRhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wcmV2ZW50Q2FsZW5kYXJDbG9zZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGUgZGF0ZXBpY2tlciBpbnB1dCBhbmQgcmFuZ2UgaW5wdXQgZmllbGRzLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFkZElucHV0TGlzdGVuZXJzKCkge1xuXHRcdGlmICghdGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3dzIGZvY3VzIHRyYW5zaXRpb24gZnJvbSB0aGUgZGF0ZXBpY2tlciBpbnB1dCBvciByYW5nZSBpbnB1dCBmaWVsZCB0b1xuXHRcdC8vIGZsYXRwaWNrciBjYWxlbmRhciB1c2luZyBhIGtleWJvYXJkLlxuXHRcdGNvbnN0IGFkZEZvY3VzQ2FsZW5kYXJMaXN0ZW5lciA9IChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBMaXN0ZW5lcnMgYXJlIGFkZGVkIGp1c3Qgb25jZSwgc28gYSBjaGVjayBpcyBuZWVkZWQgaGVyZS5cblx0XHRcdFx0aWYgKHRoaXMucmVhZG9ubHkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmZsYXRwaWNrckluc3RhbmNlLmlzT3Blbikge1xuXHRcdFx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5vcGVuKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNhbGVuZGFyQ29udGFpbmVyO1xuXHRcdFx0XHRcdGNvbnN0IGRheUVsZW1lbnQgPSBjYWxlbmRhckNvbnRhaW5lciAmJiBjYWxlbmRhckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmZsYXRwaWNrci1kYXlbdGFiaW5kZXhdXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkRGF0ZUVsZW0gPSBjYWxlbmRhckNvbnRhaW5lciAmJiBjYWxlbmRhckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnNlbGVjdGVkXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHRvZGF5RGF0ZUVsZW0gPSBjYWxlbmRhckNvbnRhaW5lciAmJiBjYWxlbmRhckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnRvZGF5XCIpO1xuXG5cdFx0XHRcdFx0aWYgKGRheUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdCh0b2RheURhdGVFbGVtIHx8IHNlbGVjdGVkRGF0ZUVsZW0gfHwgZGF5RWxlbWVudCkuZm9jdXMoKTtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgbWFudWFsbHkgaW5wdXRzIGEgdmFsdWUgaW50byB0aGUgZGF0ZSBmaWVsZCBhbmQgcHJlc3NlcyBhcnJvdyBkb3duLFxuXHRcdFx0XHRcdFx0Ly8gZGF0ZXBpY2tlciBpbnB1dCBvbmNoYW5nZSB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGZvY3VzIGlzIHJlbW92ZWQgZnJvbSBpdCBhbmRcblx0XHRcdFx0XHRcdC8vIGBmbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlYCBhbmQgYGZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoYCB3aWxsIGJlIGludm9rZWRcblx0XHRcdFx0XHRcdC8vIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZGF5RWxlbWVudCAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5pbnB1dCkge1xuXHRcdFx0YWRkRm9jdXNDYWxlbmRhckxpc3RlbmVyKHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmFuZ2VJbnB1dCAmJiB0aGlzLnJhbmdlSW5wdXQuaW5wdXQpIHtcblx0XHRcdGFkZEZvY3VzQ2FsZW5kYXJMaXN0ZW5lcih0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgZmxhdHBpY2tyIGluc3RhbmNlIHdoaWxlIGtlZXBpbmcgdGhlIGRhdGUgdmFsdWVzIChvciB1cGRhdGluZyB0aGVtIGlmIG5ld0RhdGVzIGlzIHByb3ZpZGVkKVxuXHQgKlxuXHQgKiBVc2VkIHRvIHBpY2sgdXAgaW5wdXQgY2hhbmdlcyBvciBsb2NhbGUgY2hhbmdlcy5cblx0ICpcblx0ICogQHBhcmFtIG5ld0RhdGVzIEFuIG9wdGlvbmFsIFNpbXBsZUNoYW5nZSBvZiBkYXRlIHZhbHVlc1xuXHQgKi9cblx0cHJvdGVjdGVkIHJlc2V0RmxhdHBpY2tySW5zdGFuY2UobmV3RGF0ZXM/OiBTaW1wbGVDaGFuZ2UpIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRsZXQgZGF0ZXMgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXM7XG5cdFx0XHRpZiAobmV3RGF0ZXMgJiYgdGhpcy5kaWREYXRlVmFsdWVDaGFuZ2UobmV3RGF0ZXMuY3VycmVudFZhbHVlLCBuZXdEYXRlcy5wcmV2aW91c1ZhbHVlKSkge1xuXHRcdFx0XHRkYXRlcyA9IG5ld0RhdGVzLmN1cnJlbnRWYWx1ZTtcblx0XHRcdH1cblx0XHRcdC8vIG9ubHkgcmVzZXQgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBvbiBJbnB1dCBjaGFuZ2VzXG5cdFx0XHQvLyBAdHMtaWdub3JlIHRzIGlzIHVuaGFwcHkgd2l0aCB0aGUgYmVsb3cgY2FsbCB0byBgZmxhdHBpY2tyYFxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZSA9IGZsYXRwaWNrcihgIyR7dGhpcy5pZH0taW5wdXRgLCB0aGlzLmZsYXRwaWNrck9wdGlvbnMpO1xuXHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKGRhdGVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FyYm9uIHVzZXMgYSBudW1iZXIgb2Ygc3BlY2lmaWMgY2xhc3NuYW1lcyBmb3IgcGFydHMgb2YgdGhlIGZsYXRwaWNrciAtIHRoaXMgaWRlbXBvdGVudCBtZXRob2QgYXBwbGllcyB0aGVtIGlmIG5lZWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCB1cGRhdGVDbGFzc05hbWVzKCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmKSB7IHJldHVybjsgfVxuXHRcdC8vIGdldCBhbGwgdGhlIHBvc3NpYmxlIGZsYXRwaWNrcnMgaW4gdGhlIGRvY3VtZW50IC0gd2UgbmVlZCB0byBhZGQgY2xhc3NlcyB0byAocG90ZW50aWFsbHkpIGFsbCBvZiB0aGVtXG5cdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1jYWxlbmRhclwiKTtcblx0XHRjb25zdCBtb250aENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLW1vbnRoXCIpO1xuXHRcdGNvbnN0IHdlZWtkYXlzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3Itd2Vla2RheXNcIik7XG5cdFx0Y29uc3Qgd2Vla2RheUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLXdlZWtkYXlcIik7XG5cdFx0Y29uc3QgZGF5c0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWRheXNcIik7XG5cdFx0Y29uc3QgZGF5Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItZGF5XCIpO1xuXG5cdFx0Ly8gYWRkIGNsYXNzZXMgdG8gbGlzdHMgb2YgZWxlbWVudHNcblx0XHRjb25zdCBhZGRDbGFzc0lmTm90RXhpc3RzID0gKGNsYXNzbmFtZTogc3RyaW5nLCBlbGVtZW50TGlzdDogTm9kZUxpc3RPZjxFbGVtZW50PikgPT4ge1xuXHRcdFx0QXJyYXkuZnJvbShlbGVtZW50TGlzdCkuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0aWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc25hbWUpKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzbmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHQvLyBhZGQgY2xhc3NlcyAoYnV0IG9ubHkgaWYgdGhleSBkb24ndCBleGlzdCwgc21hbGwgcGVyZiB3aW4pXG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX2NhbGVuZGFyXCIsIGNhbGVuZGFyQ29udGFpbmVyKTtcblx0XHRhZGRDbGFzc0lmTm90RXhpc3RzKFwiY2RzLS1kYXRlLXBpY2tlcl9fbW9udGhcIiwgbW9udGhDb250YWluZXIpO1xuXHRcdGFkZENsYXNzSWZOb3RFeGlzdHMoXCJjZHMtLWRhdGUtcGlja2VyX193ZWVrZGF5c1wiLCB3ZWVrZGF5c0NvbnRhaW5lcik7XG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX2RheXNcIiwgZGF5c0NvbnRhaW5lcik7XG5cblx0XHQvLyBhZGQgd2Vla2RheSBjbGFzc2VzIGFuZCBmb3JtYXQgdGhlIHRleHRcblx0XHRBcnJheS5mcm9tKHdlZWtkYXlDb250YWluZXIpLmZvckVhY2goZWxlbWVudCA9PiB7XG5cdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IGVsZW1lbnQuaW5uZXJIVE1MLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG5cdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjZHMtLWRhdGUtcGlja2VyX193ZWVrZGF5XCIpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGRheSBjbGFzc2VzIGFuZCBzcGVjaWFsIGNhc2UgdGhlIFwidG9kYXlcIiBlbGVtZW50IGJhc2VkIG9uIGB0aGlzLnZhbHVlYFxuXHRcdEFycmF5LmZyb20oZGF5Q29udGFpbmVyKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuXHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5XCIpO1xuXHRcdFx0aWYgKCF0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInRvZGF5XCIpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJuby1ib3JkZXJcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwidG9kYXlcIikgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYm9yZGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1jYWxlbmRhclwiKTtcblx0XHRBcnJheS5mcm9tKGNhbGVuZGFyQ29udGFpbmVyKS5mb3JFYWNoKGNhbGVuZGFyID0+IHtcblx0XHRcdGNhbGVuZGFyLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJhcHBsaWNhdGlvblwiKTtcblx0XHRcdGNhbGVuZGFyLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGhpcy5hcmlhTGFiZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGxpZXMgdGhlIGdpdmVuIGRhdGUgdmFsdWUgYXJyYXkgdG8gYm90aCB0aGUgZmxhdHBpY2tyIGluc3RhbmNlIGFuZCB0aGUgYGlucHV0YChzKVxuXHQgKiBAcGFyYW0gZGF0ZXMgdGhlIGRhdGUgdmFsdWVzIHRvIGFwcGx5XG5cdCAqL1xuXHRwcm90ZWN0ZWQgc2V0RGF0ZVZhbHVlcyhkYXRlczogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRjb25zdCBzaW5nbGVJbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMuaWR9LWlucHV0YCk7XG5cdFx0XHRjb25zdCByYW5nZUlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5pZH0tcmFuZ2VJbnB1dGApO1xuXG5cdFx0XHQvLyBgZmxhdHBpY2tySW5zdGFuY2Uuc2V0RGF0ZWAgcmVtb3ZlcyB0aGUgZm9jdXMgb24gdGhlIHNlbGVjdGVkIGRhdGUgZWxlbWVudCBhbmQgd2lsbFxuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuIElmIGEgc2VsZWN0ZWQgZGF0ZSBpc1xuXHRcdFx0Ly8gZm9jdXNlZCBiZWZvcmUgYGZsYXRwaWNrckluc3RhbmNlLnNldERhdGVgIGlzIGludm9rZWQgdGhlbiBpdCBzaG91bGQgcmVtYWluIGZvY3VzZWQuXG5cdFx0XHRsZXQgc2hvdWxkUmVmb2N1c0RhdGVFbGVtZW50ID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHQvLyBzZXQgdGhlIGRhdGUgb24gdGhlIGluc3RhbmNlXG5cdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNldERhdGUoZGF0ZXMpO1xuXG5cdFx0XHRpZiAoc2hvdWxkUmVmb2N1c0RhdGVFbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBjYW4gZWl0aGVyIHNldCBhIGRhdGUgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5IHN0cmluZ1xuXHRcdFx0bGV0IHNpbmdsZURhdGUgPSBcIlwiO1xuXHRcdFx0Ly8gaWYgZGF0ZSBpcyBhIHN0cmluZywgcGFyc2UgYW5kIGZvcm1hdFxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZm9ybWF0RGF0ZShzaW5nbGVEYXRlLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0Ly8gaWYgZGF0ZSBpcyBub3QgYSBzdHJpbmcgd2UgY2FuIGFzc3VtZSBpdCdzIGEgRGF0ZSBhbmQgd2Ugc2hvdWxkIGZvcm1hdFxuXHRcdFx0fSBlbHNlIGlmICghIXRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRzaW5nbGVEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJhbmdlSW5wdXQpIHtcblx0XHRcdFx0Ly8gd2UgY2FuIGVpdGhlciBzZXQgYSBkYXRlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZywgc28gd2Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdFx0bGV0IHJhbmdlRGF0ZSA9IFwiXCI7XG5cdFx0XHRcdC8vIGlmIGRhdGUgaXMgYSBzdHJpbmcsIHBhcnNlIGFuZCBmb3JtYXRcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0udG9TdHJpbmcoKSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUocmFuZ2VEYXRlLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0XHQvLyBpZiBkYXRlIGlzIG5vdCBhIHN0cmluZyB3ZSBjYW4gYXNzdW1lIGl0J3MgYSBEYXRlIGFuZCB3ZSBzaG91bGQgZm9ybWF0XG5cdFx0XHRcdH0gZWxzZSBpZiAoISF0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0pIHtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGFwcGx5IHRoZSB2YWx1ZXNcblx0XHRcdFx0XHRyYW5nZUlucHV0LnZhbHVlID0gcmFuZ2VEYXRlO1xuXHRcdFx0XHRcdHNpbmdsZUlucHV0LnZhbHVlID0gc2luZ2xlRGF0ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHByZXZlbnRDYWxlbmRhckNsb3NlID0gZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0cHJvdGVjdGVkIGRvU2VsZWN0KHNlbGVjdGVkVmFsdWU6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0Ly8gSW4gcmFuZ2UgbW9kZSwgaWYgYSBkYXRlIGlzIHNlbGVjdGVkIGZyb20gdGhlIGZpcnN0IGNhbGVuZGFyIHRoYXQgaXMgZnJvbSB0aGUgcHJldmlvdXMgbW9udGgsXG5cdFx0Ly8gdGhlIG1vbnRoIHdpbGwgbm90IGJlIHVwZGF0ZWQgb24gdGhlIGNhbGVuZGFyIHVudGlsIHRoZSBjYWxlbmRhciBpcyByZS1vcGVuZWQuXG5cdFx0Ly8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgY2FsZW5kYXIgaXMgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZWN0IG1vbnRoLlxuXHRcdGlmICh0aGlzLnJhbmdlICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0Y29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldE1vbnRoKCk7XG5cblx0XHRcdC8vIGBmbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aGAgcmVtb3ZlcyB0aGUgZm9jdXMgb24gdGhlIHNlbGVjdGVkIGRhdGUgZWxlbWVudCBhbmQgd2lsbFxuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuIElmIGEgc2VsZWN0ZWQgZGF0ZSBpc1xuXHRcdFx0Ly8gZm9jdXNlZCBiZWZvcmUgYGZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoYCBpcyBpbnZva2VkIHRoZW4gaXQgc2hvdWxkIHJlbWFpbiBmb2N1c2VkLlxuXHRcdFx0bGV0IHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblxuXHRcdFx0aWYgKHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdH1cblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoc2VsZWN0ZWRWYWx1ZSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2Uoc2VsZWN0ZWRWYWx1ZSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGlkRGF0ZVZhbHVlQ2hhbmdlKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkge1xuXHRcdHJldHVybiBjdXJyZW50VmFsdWVbMF0gIT09IHByZXZpb3VzVmFsdWVbMF0gfHwgY3VycmVudFZhbHVlWzFdICE9PSBwcmV2aW91c1ZhbHVlWzFdO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vcmUgYWR2YW5jZWQgY2hlY2tpbmcgb2YgdGhlIGxvYWRlZCBzdGF0ZSBvZiBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCBpc0ZsYXRwaWNrckxvYWRlZCgpIHtcblx0XHQvLyBjYXN0IHRoZSBpbnN0YW5jZSB0byBhIGJvb2xlYW4sIGFuZCBzb21lIG1ldGhvZCB0aGF0IGhhcyB0byBleGlzdCBmb3IgdGhlIGxpYnJhcnkgdG8gYmUgbG9hZGVkIGluIHRoaXMgY2FzZSBgc2V0RGF0ZWBcblx0XHRyZXR1cm4gISF0aGlzLmZsYXRwaWNrckluc3RhbmNlICYmICEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJpZ2h0IGFycm93IEhUTUwgcGFzc2VkIHRvIGZsYXRwaWNrclxuXHQgKi9cblx0cHJvdGVjdGVkIHJpZ2h0QXJyb3dIVE1MKCkge1xuXHRcdHJldHVybiBgXG5cdFx0XHQ8c3ZnIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG5cdFx0XHRcdDxwb2x5Z29uIHBvaW50cz1cIjExLDggNiwxMyA1LjMsMTIuMyA5LjYsOCA1LjMsMy43IDYsMyBcIi8+XG5cdFx0XHRcdDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHN0eWxlPVwiZmlsbDpub25lXCIgLz5cblx0XHRcdDwvc3ZnPmA7XG5cdH1cblxuXHQvKipcblx0ICogTGVmdCBhcnJvdyBIVE1MIHBhc3NlZCB0byBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCBsZWZ0QXJyb3dIVE1MKCkge1xuXHRcdHJldHVybiBgXG5cdFx0XHQ8c3ZnIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG5cdFx0XHRcdDxwb2x5Z29uIHBvaW50cz1cIjUsOCAxMCwzIDEwLjcsMy43IDYuNCw4IDEwLjcsMTIuMyAxMCwxMyBcIi8+XG5cdFx0XHRcdDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHN0eWxlPVwiZmlsbDpub25lXCIgLz5cblx0XHRcdDwvc3ZnPmA7XG5cdH1cblxuXHRwcml2YXRlIGlzRGVjb3JhdG9yQ2xpY2soZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFldmVudD8udGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHQgPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3QgZWwgPSB0IGluc3RhbmNlb2YgRWxlbWVudCA/IHQgOiAodCBhcyBOb2RlKS5wYXJlbnRFbGVtZW50O1xuXHRcdHJldHVybiBlbD8uY2xvc2VzdChcIi5jZHMtLWRhdGUtcGlja2VyLWlucHV0LWlubmVyLXdyYXBwZXItLWRlY29yYXRvclwiKSAhPSBudWxsO1xuXHR9XG59XG4iXX0=