@sbb-esta/lyne-elements 2.5.0 → 2.6.0

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 (245) hide show
  1. package/autocomplete/autocomplete-base-element.d.ts +19 -21
  2. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  3. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  4. package/autocomplete-grid/autocomplete-grid-button.js +7 -7
  5. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  6. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  7. package/autocomplete.js +145 -136
  8. package/chip/chip/chip.d.ts +32 -0
  9. package/chip/chip/chip.d.ts.map +1 -0
  10. package/chip/chip-group/chip-group.d.ts +100 -0
  11. package/chip/chip-group/chip-group.d.ts.map +1 -0
  12. package/chip/chip-group.d.ts +2 -0
  13. package/chip/chip-group.d.ts.map +1 -0
  14. package/chip/chip-group.js +225 -0
  15. package/chip/chip.d.ts +2 -0
  16. package/chip/chip.d.ts.map +1 -0
  17. package/chip/chip.js +85 -0
  18. package/chip.d.ts +3 -0
  19. package/chip.d.ts.map +1 -0
  20. package/chip.js +2 -0
  21. package/clock/clock.d.ts.map +1 -1
  22. package/clock.js +1 -1
  23. package/core/base-elements/button-base-element.d.ts +5 -0
  24. package/core/base-elements/button-base-element.d.ts.map +1 -1
  25. package/core/base-elements.js +94 -79
  26. package/core/controllers/id-observer-controller.d.ts +21 -0
  27. package/core/controllers/id-observer-controller.d.ts.map +1 -0
  28. package/core/controllers/media-matchers-controller.d.ts.map +1 -1
  29. package/core/controllers.d.ts +2 -1
  30. package/core/controllers.d.ts.map +1 -1
  31. package/core/controllers.js +135 -80
  32. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  33. package/core/datetime.js +8 -3
  34. package/core/dom/find-referenced-element.d.ts +1 -0
  35. package/core/dom/find-referenced-element.d.ts.map +1 -1
  36. package/core/dom/input-element.d.ts +3 -1
  37. package/core/dom/input-element.d.ts.map +1 -1
  38. package/core/dom/platform.d.ts +5 -0
  39. package/core/dom/platform.d.ts.map +1 -1
  40. package/core/dom.js +10 -9
  41. package/core/i18n/i18n.d.ts +3 -0
  42. package/core/i18n/i18n.d.ts.map +1 -1
  43. package/core/i18n.js +135 -117
  44. package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  45. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  46. package/core/mixins.js +71 -63
  47. package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  48. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  49. package/core/overlay/position.d.ts +1 -1
  50. package/core/overlay/position.d.ts.map +1 -1
  51. package/core/styles/core.scss +89 -24
  52. package/core/styles/image.scss +1 -1
  53. package/core/styles/mixins/table.scss +63 -26
  54. package/core/styles/table.scss +16 -0
  55. package/core/testing/scroll.d.ts +1 -0
  56. package/core/testing/scroll.d.ts.map +1 -1
  57. package/core/testing/wait-for-image-ready.d.ts.map +1 -1
  58. package/core/testing.js +8 -5
  59. package/core.css +90 -34
  60. package/custom-elements.json +2568 -740
  61. package/datepicker/datepicker/datepicker.d.ts +4 -4
  62. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  63. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  64. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  65. package/datepicker/datepicker-toggle.js +30 -34
  66. package/datepicker/datepicker.js +103 -105
  67. package/development/autocomplete/autocomplete-base-element.d.ts +19 -21
  68. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  69. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  70. package/development/autocomplete-grid/autocomplete-grid-button.js +3 -3
  71. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  72. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  73. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +1 -1
  74. package/development/autocomplete.js +104 -82
  75. package/development/chip/chip/chip.d.ts +32 -0
  76. package/development/chip/chip/chip.d.ts.map +1 -0
  77. package/development/chip/chip-group/chip-group.d.ts +100 -0
  78. package/development/chip/chip-group/chip-group.d.ts.map +1 -0
  79. package/development/chip/chip-group.d.ts +2 -0
  80. package/development/chip/chip-group.d.ts.map +1 -0
  81. package/development/chip/chip-group.js +349 -0
  82. package/development/chip/chip.d.ts +2 -0
  83. package/development/chip/chip.d.ts.map +1 -0
  84. package/development/chip/chip.js +212 -0
  85. package/development/chip.d.ts +3 -0
  86. package/development/chip.d.ts.map +1 -0
  87. package/development/chip.js +3 -0
  88. package/development/clock/clock.d.ts.map +1 -1
  89. package/development/clock.js +5 -2
  90. package/development/core/base-elements/button-base-element.d.ts +5 -0
  91. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  92. package/development/core/base-elements.js +38 -10
  93. package/development/core/controllers/id-observer-controller.d.ts +21 -0
  94. package/development/core/controllers/id-observer-controller.d.ts.map +1 -0
  95. package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
  96. package/development/core/controllers.d.ts +2 -1
  97. package/development/core/controllers.d.ts.map +1 -1
  98. package/development/core/controllers.js +116 -44
  99. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  100. package/development/core/datetime.js +6 -2
  101. package/development/core/dom/find-referenced-element.d.ts +1 -0
  102. package/development/core/dom/find-referenced-element.d.ts.map +1 -1
  103. package/development/core/dom/input-element.d.ts +3 -1
  104. package/development/core/dom/input-element.d.ts.map +1 -1
  105. package/development/core/dom/platform.d.ts +5 -0
  106. package/development/core/dom/platform.d.ts.map +1 -1
  107. package/development/core/dom.js +3 -1
  108. package/development/core/i18n/i18n.d.ts +3 -0
  109. package/development/core/i18n/i18n.d.ts.map +1 -1
  110. package/development/core/i18n.js +23 -2
  111. package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  112. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  113. package/development/core/mixins.js +19 -6
  114. package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  115. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  116. package/development/core/overlay/position.d.ts +1 -1
  117. package/development/core/overlay/position.d.ts.map +1 -1
  118. package/development/core/overlay.js +1 -1
  119. package/development/core/testing/scroll.d.ts +1 -0
  120. package/development/core/testing/scroll.d.ts.map +1 -1
  121. package/development/core/testing/wait-for-image-ready.d.ts.map +1 -1
  122. package/development/core/testing.js +6 -2
  123. package/development/datepicker/datepicker/datepicker.d.ts +4 -4
  124. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  125. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  126. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  127. package/development/datepicker/datepicker-toggle.js +4 -12
  128. package/development/datepicker/datepicker.js +46 -43
  129. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  130. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  131. package/development/dialog/dialog-title.js +2 -5
  132. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  133. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  134. package/development/expansion-panel/expansion-panel.js +2 -7
  135. package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  136. package/development/flip-card/flip-card-details.js +3 -3
  137. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  138. package/development/form-field/form-field.js +13 -146
  139. package/development/header/header/header.d.ts +6 -7
  140. package/development/header/header/header.d.ts.map +1 -1
  141. package/development/header/header.js +45 -34
  142. package/development/menu/menu/menu.d.ts +7 -8
  143. package/development/menu/menu/menu.d.ts.map +1 -1
  144. package/development/menu/menu.js +42 -41
  145. package/development/navigation/navigation/navigation.d.ts +7 -8
  146. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  147. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  148. package/development/navigation/navigation-marker.js +3 -3
  149. package/development/navigation/navigation-section/navigation-section.d.ts +8 -9
  150. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  151. package/development/navigation/navigation-section.js +50 -47
  152. package/development/navigation/navigation.js +42 -40
  153. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  154. package/development/option/optgroup/optgroup.d.ts +2 -2
  155. package/development/option/optgroup/optgroup.d.ts.map +1 -1
  156. package/development/option/optgroup.js +3 -3
  157. package/development/option/option/option-base-element.d.ts.map +1 -1
  158. package/development/option/option.js +3 -3
  159. package/development/paginator/paginator.js +12 -1
  160. package/development/popover/popover/popover.d.ts +8 -7
  161. package/development/popover/popover/popover.d.ts.map +1 -1
  162. package/development/popover/popover.js +28 -35
  163. package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  164. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  165. package/development/radio-button/radio-button-group.js +3 -5
  166. package/development/select/select.d.ts +6 -3
  167. package/development/select/select.d.ts.map +1 -1
  168. package/development/select.js +20 -18
  169. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  170. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  171. package/development/selection-expansion-panel.js +2 -7
  172. package/development/sidebar/sidebar/sidebar.d.ts.map +1 -1
  173. package/development/sidebar/sidebar.js +3 -3
  174. package/development/stepper/step/step.d.ts +13 -1
  175. package/development/stepper/step/step.d.ts.map +1 -1
  176. package/development/stepper/step-label.js +2 -2
  177. package/development/stepper/step.js +21 -6
  178. package/development/stepper/stepper/stepper.d.ts +1 -0
  179. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  180. package/development/stepper/stepper.js +5 -1
  181. package/development/table/table-wrapper.js +2 -1
  182. package/development/time-input/time-input.d.ts +6 -8
  183. package/development/time-input/time-input.d.ts.map +1 -1
  184. package/development/time-input.js +42 -44
  185. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  186. package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  187. package/dialog/dialog-title.js +18 -21
  188. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  189. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  190. package/expansion-panel/expansion-panel.js +53 -56
  191. package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  192. package/flip-card/flip-card-details.js +8 -8
  193. package/form-field/form-field/form-field.d.ts.map +1 -1
  194. package/form-field/form-field.js +103 -98
  195. package/header/header/header.d.ts +6 -7
  196. package/header/header/header.d.ts.map +1 -1
  197. package/header/header.js +72 -70
  198. package/index.d.ts +4 -0
  199. package/index.js +4 -0
  200. package/menu/menu/menu.d.ts +7 -8
  201. package/menu/menu/menu.d.ts.map +1 -1
  202. package/menu/menu.js +73 -73
  203. package/navigation/navigation/navigation.d.ts +7 -8
  204. package/navigation/navigation/navigation.d.ts.map +1 -1
  205. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  206. package/navigation/navigation-marker.js +4 -4
  207. package/navigation/navigation-section/navigation-section.d.ts +8 -9
  208. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  209. package/navigation/navigation-section.js +75 -77
  210. package/navigation/navigation.js +70 -70
  211. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  212. package/option/optgroup/optgroup.d.ts +2 -2
  213. package/option/optgroup/optgroup.d.ts.map +1 -1
  214. package/option/optgroup.js +13 -13
  215. package/option/option/option-base-element.d.ts.map +1 -1
  216. package/option/option.js +2 -2
  217. package/package.json +16 -1
  218. package/paginator/paginator.js +44 -44
  219. package/popover/popover/popover.d.ts +8 -7
  220. package/popover/popover/popover.d.ts.map +1 -1
  221. package/popover/popover.js +73 -73
  222. package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  223. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  224. package/radio-button/radio-button-group.js +8 -8
  225. package/select/select.d.ts +6 -3
  226. package/select/select.d.ts.map +1 -1
  227. package/select.js +73 -73
  228. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  229. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  230. package/selection-expansion-panel.js +10 -13
  231. package/sidebar/sidebar/sidebar.d.ts.map +1 -1
  232. package/sidebar/sidebar.js +2 -2
  233. package/standard-theme.css +166 -79
  234. package/stepper/step/step.d.ts +13 -1
  235. package/stepper/step/step.d.ts.map +1 -1
  236. package/stepper/step-label.js +1 -1
  237. package/stepper/step.js +34 -23
  238. package/stepper/stepper/stepper.d.ts +1 -0
  239. package/stepper/stepper/stepper.d.ts.map +1 -1
  240. package/stepper/stepper.js +19 -16
  241. package/table/table-wrapper.js +4 -4
  242. package/table.css +75 -44
  243. package/time-input/time-input.d.ts +6 -8
  244. package/time-input/time-input.d.ts.map +1 -1
  245. package/time-input.js +66 -73
@@ -95,7 +95,9 @@ let SbbButtonBaseElement = (() => {
95
95
  }
96
96
  /** The `<form>` element to associate the button with. */
97
97
  set form(value) {
98
+ var _a2;
98
99
  this._formId = value;
100
+ (_a2 = this.form) == null ? void 0 : _a2.addEventListener("keydown", this._formKeyDown, { capture: true });
99
101
  }
100
102
  get form() {
101
103
  var _a2, _b;
@@ -103,7 +105,8 @@ let SbbButtonBaseElement = (() => {
103
105
  }
104
106
  constructor() {
105
107
  super();
106
- this._formId = (__runInitializers(this, _instanceExtraInitializers), "");
108
+ this._elementsOnWhichEnterPressTriggersSubmit = (__runInitializers(this, _instanceExtraInitializers), ["input", "sbb-date-input"]);
109
+ this._formId = "";
107
110
  this._handleButtonClick = async (event) => {
108
111
  if (this.type === "button" || await isEventPrevented(event)) {
109
112
  return;
@@ -112,14 +115,7 @@ let SbbButtonBaseElement = (() => {
112
115
  if (!form) {
113
116
  return;
114
117
  } else if (this.type === "submit") {
115
- const submitButtonClone = document.createElement("button");
116
- submitButtonClone.inert = true;
117
- submitButtonClone.hidden = true;
118
- submitButtonClone.name = this.name;
119
- submitButtonClone.value = this.value ?? "";
120
- form.append(submitButtonClone);
121
- form.requestSubmit(submitButtonClone);
122
- submitButtonClone.remove();
118
+ this._requestSubmit(form);
123
119
  } else if (this.type === "reset") {
124
120
  form.reset();
125
121
  }
@@ -139,6 +135,18 @@ let SbbButtonBaseElement = (() => {
139
135
  this._dispatchClickEvent(event);
140
136
  }
141
137
  };
138
+ this._formKeyDown = (event) => {
139
+ var _a2;
140
+ const form = this.form;
141
+ if (this.type === "submit" && form && (event.key === "Enter" || event.key === "\n") && this._elementsOnWhichEnterPressTriggersSubmit.includes((_a2 = event.target) == null ? void 0 : _a2.localName) && event.isTrusted) {
142
+ event.stopImmediatePropagation();
143
+ event.preventDefault();
144
+ const eventOrigin = event.composedPath()[0];
145
+ if (eventOrigin.dispatchEvent(new KeyboardEvent(event.type, event)) && !this.matches(":disabled")) {
146
+ this._requestSubmit(form);
147
+ }
148
+ }
149
+ };
142
150
  this._dispatchClickEvent = (event) => {
143
151
  const { altKey, ctrlKey, metaKey, shiftKey } = event;
144
152
  event.target.dispatchEvent(new PointerEvent("click", {
@@ -168,6 +176,26 @@ let SbbButtonBaseElement = (() => {
168
176
  }, passiveOptions);
169
177
  }
170
178
  }
179
+ connectedCallback() {
180
+ var _a2;
181
+ super.connectedCallback();
182
+ (_a2 = this.form) == null ? void 0 : _a2.addEventListener("keydown", this._formKeyDown, { capture: true });
183
+ }
184
+ disconnectedCallback() {
185
+ var _a2;
186
+ super.disconnectedCallback();
187
+ (_a2 = this.form) == null ? void 0 : _a2.removeEventListener("keydown", this._formKeyDown, { capture: true });
188
+ }
189
+ _requestSubmit(form) {
190
+ const submitButtonClone = document.createElement("button");
191
+ submitButtonClone.inert = true;
192
+ submitButtonClone.hidden = true;
193
+ submitButtonClone.name = this.name;
194
+ submitButtonClone.value = this.value ?? "";
195
+ form.append(submitButtonClone);
196
+ form.requestSubmit(submitButtonClone);
197
+ submitButtonClone.remove();
198
+ }
171
199
  attributeChangedCallback(name, old, value) {
172
200
  if (!["name", "value"].includes(name) || old !== value) {
173
201
  super.attributeChangedCallback(name, old, value);
@@ -412,4 +440,4 @@ export {
412
440
  SbbLinkBaseElement,
413
441
  SbbOpenCloseBaseElement
414
442
  };
415
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbGVtZW50cy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9hY3Rpb24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9idXR0b24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9saW5rLWJhc2UtZWxlbWVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2Jhc2UtZWxlbWVudHMvb3Blbi1jbG9zZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogV2hlbmV2ZXIgYW4gZWxlbWVudCBjYW4gYmUgZGlzYWJsZWQgaXQgaGFzIGRpc2FibGVkIHByb3BlcnR5XG4gKiBvciBmb3JtRGlzYWJsZWQgaWYgaXQncyBhIGZvcm0gZWxlbWVudC5cbiAqIEJlY2F1c2Ugd2UgY2FuJ3QgdXNlIHR5cGVzIGhlcmUgZGlyZWN0bHkgd2UgY3JlYXRlZCB0aGlzIGhlbHBlciB0eXBlLlxuICovXG50eXBlIE1heWJlRGlzYWJsZWQgPSB7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZm9ybURpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnRcbkBob3N0QXR0cmlidXRlcyh7XG4gICdkYXRhLWFjdGlvbic6ICcnLFxufSlcbmFic3RyYWN0IGNsYXNzIFNiYkFjdGlvbkJhc2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgbWF5YmVEaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtYXliZURpc2FibGVkID0gdGhpcyBhcyBNYXliZURpc2FibGVkO1xuICAgIHJldHVybiBtYXliZURpc2FibGVkLmRpc2FibGVkIHx8IG1heWJlRGlzYWJsZWQuZm9ybURpc2FibGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBtYXliZURpc2FibGVkSW50ZXJhY3RpdmUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuICh0aGlzIGFzIE1heWJlRGlzYWJsZWQpLmRpc2FibGVkSW50ZXJhY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChcbiAgICAgIGltcG9ydC5tZXRhLmVudi5ERVYgJiZcbiAgICAgICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1saW5rJykgfHwgdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uJykpICYmXG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ1tkYXRhLWxpbmtdLCBbZGF0YS1idXR0b25dLCBhLCBidXR0b24nKVxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTmVzdGVkIGFjdGlvbiBlbGVtZW50IGRldGVjdGVkICgke3RoaXMubG9jYWxOYW1lfSBpbnNpZGUgJHt0aGlzLnBhcmVudEVsZW1lbnQhLmNsb3Nlc3QoJ1tkYXRhLWxpbmtdLCBbZGF0YS1idXR0b25dLCBhLCBidXR0b24nKSEubG9jYWxOYW1lfSkuIE1heWJlIHVzZSBhIHN0YXRpYyB2YXJpYW50IGZvciB0aGUgaW5uZXIgYWN0aW9uIGVsZW1lbnQ/YCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwQmFzZUV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tYXliZURpc2FibGVkICYmICF0aGlzLm1heWJlRGlzYWJsZWRJbnRlcmFjdGl2ZSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBjYXB0dXJlIGlzIG5lY2Vzc2FyeSBoZXJlLCBhcyB0aGlzIGV2ZW50IGhhbmRsZXIgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIGFueSBvdGhlclxuICAgICAgLy8gaW4gb3JkZXIgdG8gc3RvcCBpbW1lZGlhdGUgcHJvcGFnYXRpb24gaW4gdGhlIGRpc2FibGVkIGNhc2UuXG4gICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJlbmRlciB0aGUgY29tcG9uZW50IHRlbXBsYXRlLiAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyVGVtcGxhdGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1wbGVtZW50YXRpb24gbmVlZGVkIScpO1xuICB9XG5cbiAgLyoqIERlZmF1bHQgcmVuZGVyIG1ldGhvZCBmb3IgYnV0dG9uLWxpa2UgY29tcG9uZW50cy4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItYWN0aW9uLWJhc2UgJHt0aGlzLmxvY2FsTmFtZX1cIj4ke3RoaXMucmVuZGVyVGVtcGxhdGUoKX08L3NwYW4+YDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0V2ZW50UHJldmVudGVkIH0gZnJvbSAnLi4vZXZlbnRpbmcuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuLi9taXhpbnMuanMnO1xuXG5pbXBvcnQgeyBTYmJBY3Rpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vYWN0aW9uLWJhc2UtZWxlbWVudC5qcyc7XG5cbi8qKiBFbnVtZXJhdGlvbiBmb3IgdHlwZSBhdHRyaWJ1dGUgaW4gPGJ1dHRvbj4gSFRNTCB0YWcuICovXG5leHBvcnQgdHlwZSBTYmJCdXR0b25UeXBlID0gJ2J1dHRvbicgfCAncmVzZXQnIHwgJ3N1Ym1pdCc7XG5cbi8qKiBCdXR0b24gYmFzZSBjbGFzcy4gKi9cbmV4cG9ydFxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgdGFiaW5kZXg6ICcwJyxcbiAgJ2RhdGEtYnV0dG9uJzogJycsXG59KVxuYWJzdHJhY3QgY2xhc3MgU2JiQnV0dG9uQmFzZUVsZW1lbnQgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkFjdGlvbkJhc2VFbGVtZW50KSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBhdHRyaWJ1dGUgdG8gdXNlIGZvciB0aGUgYnV0dG9uLlxuICAgKiBAZGVmYXVsdCAnYnV0dG9uJ1xuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIG92ZXJyaWRlIHNldCB0eXBlKG5hbWU6IFNiYkJ1dHRvblR5cGUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgndHlwZScsIGAke25hbWV9YCk7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlIGdldCB0eXBlKCk6IFNiYkJ1dHRvblR5cGUge1xuICAgIHJldHVybiAodGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSBhcyBTYmJCdXR0b25UeXBlKSA/PyAnYnV0dG9uJztcbiAgfVxuXG4gIC8qKiBUaGUgYDxmb3JtPmAgZWxlbWVudCB0byBhc3NvY2lhdGUgdGhlIGJ1dHRvbiB3aXRoLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZvcm0odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Zvcm1JZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyBVc2UgcXVlcnlTZWxlY3RvciB3aXRoIGZvcm0gYW5kIGlkIHNlbGVjdG9yLCBhcyB0aGUgZm9ybSBwcm9wZXJ0eSBtdXN0XG4gICAgLy8gcmVmZXJlbmNlIGEgdmFsaWQgPGZvcm0+IGVsZW1lbnRcbiAgICByZXR1cm4gdGhpcy5fZm9ybUlkXG4gICAgICA/ICgodGhpcy5vd25lckRvY3VtZW50Py5xdWVyeVNlbGVjdG9yPy4oYGZvcm0jJHt0aGlzLl9mb3JtSWR9YCkgYXMgSFRNTEZvcm1FbGVtZW50KSA/PyBudWxsKVxuICAgICAgOiB0aGlzLmludGVybmFscy5mb3JtO1xuICB9XG4gIHByaXZhdGUgX2Zvcm1JZDogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICdidXR0b24nO1xuXG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgdGhpcy5zZXR1cEJhc2VFdmVudEhhbmRsZXJzKCk7XG5cbiAgICAgIGNvbnN0IHBhc3NpdmVPcHRpb25zID0geyBwYXNzaXZlOiB0cnVlIH07XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlQnV0dG9uQ2xpY2spO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fcHJldmVudFNjcm9sbE9uU3BhY2VLZXlkb3duKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9kaXNwYXRjaENsaWNrRXZlbnRPblNwYWNlS2V5dXAsIHBhc3NpdmVPcHRpb25zKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX3JlbW92ZUFjdGl2ZU1hcmtlciwgcGFzc2l2ZU9wdGlvbnMpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAna2V5cHJlc3MnLFxuICAgICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2xpY2tFdmVudChldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwYXNzaXZlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2hhbmRsZUJ1dHRvbkNsaWNrID0gYXN5bmMgKGV2ZW50OiBNb3VzZUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2J1dHRvbicgfHwgKGF3YWl0IGlzRXZlbnRQcmV2ZW50ZWQoZXZlbnQpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm07XG4gICAgaWYgKCFmb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdzdWJtaXQnKSB7XG4gICAgICAvLyBgZm9ybS5yZXF1ZXN0U3VibWl0KGVsZW1lbnQpO2Agc2VlbXMgbm90IHRvIHdvcmsgZm9yIEN1c3RvbUVsZW1lbnRzLCBzbyB0aGUgYGVsZW1lbnRgIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkO1xuICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgc29sdmVkIGluIGFueSB3YXksIHNlZSBodHRwczovL2dpdGh1Yi5jb20vV0lDRy93ZWJjb21wb25lbnRzL2lzc3Vlcy84MTQjaXNzdWVjb21tZW50LTEyMTg0NTIxMzdcbiAgICAgIC8vIFdlIHVzZSB0aGUgd29ya2Fyb3VuZCBkZXNjcmliZWQgaW4gdGhlIGdpdGh1YiBpc3N1ZSBieSBjbG9uaW5nIHRoZSBzdWJtaXQgYnV0dG9uIGFuZCBwYXNzIHRoaXMgb25lIGFzIGFuIGFyZ3VtZW50LlxuXG4gICAgICBjb25zdCBzdWJtaXRCdXR0b25DbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgc3VibWl0QnV0dG9uQ2xvbmUuaW5lcnQgPSB0cnVlO1xuICAgICAgc3VibWl0QnV0dG9uQ2xvbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgIHN1Ym1pdEJ1dHRvbkNsb25lLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICBzdWJtaXRCdXR0b25DbG9uZS52YWx1ZSA9IHRoaXMudmFsdWUgPz8gJyc7XG5cbiAgICAgIGZvcm0uYXBwZW5kKHN1Ym1pdEJ1dHRvbkNsb25lKTtcbiAgICAgIGZvcm0ucmVxdWVzdFN1Ym1pdChzdWJtaXRCdXR0b25DbG9uZSk7XG4gICAgICBzdWJtaXRCdXR0b25DbG9uZS5yZW1vdmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgICAgZm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUHJldmVudHMgc2Nyb2xsaW5nIGZyb20gcHJlc3NpbmcgU3BhY2UsIHdoZW4gdGhlIGV2ZW50IHRhcmdldCBpcyBhbiBhY3Rpb24gZWxlbWVudC5cbiAgICogQWxzbyBzZXRzIGRhdGEtYWN0aXZlIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBvcmlnaW4gZXZlbnQuXG4gICAqL1xuICBwcml2YXRlIF9wcmV2ZW50U2Nyb2xsT25TcGFjZUtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX3JlbW92ZUFjdGl2ZU1hcmtlciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYSAnY2xpY2snIFBvaW50ZXJFdmVudCBpZiB0aGUgb3JpZ2luYWwga2V5Ym9hcmQgZXZlbnQgaXMgYSAnU3BhY2UnIHByZXNzLlxuICAgKiBBcyB2ZXJpZmllZCB3aXRoIHRoZSBuYXRpdmUgYnV0dG9uLCB3aGVuICdTcGFjZScgaXMgcHJlc3NlZCwgYSAnY2xpY2snIGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgICogYWZ0ZXIgdGhlICdrZXl1cCcgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hDbGlja0V2ZW50T25TcGFjZUtleXVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLl9yZW1vdmVBY3RpdmVNYXJrZXIoZXZlbnQpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hDbGlja0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hDbGlja0V2ZW50ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBhbHRLZXksIGN0cmxLZXksIG1ldGFLZXksIHNoaWZ0S2V5IH0gPSBldmVudDtcbiAgICAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgUG9pbnRlckV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIHBvaW50ZXJJZDogLTEsXG4gICAgICAgIHBvaW50ZXJUeXBlOiAnJyxcbiAgICAgICAgYWx0S2V5LFxuICAgICAgICBjdHJsS2V5LFxuICAgICAgICBtZXRhS2V5LFxuICAgICAgICBzaGlmdEtleSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH07XG5cbiAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkOiBzdHJpbmcgfCBudWxsLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIVsnbmFtZScsICd2YWx1ZSddLmluY2x1ZGVzKG5hbWUpIHx8IG9sZCAhPT0gdmFsdWUpIHtcbiAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZW50aW9uYWxseSBlbXB0eSwgYXMgYnV0dG9ucyBhcmUgbm90IHRhcmdldGVkIGJ5IGZvcm0gcmVzZXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBJbnRlbnRpb25hbGx5IGVtcHR5LCBhcyBidXR0b25zIGFyZSBub3QgdGFyZ2V0ZWQgYnkgZm9ybSByZXN0b3JlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBfc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEludGVudGlvbmFsbHkgZW1wdHksIGFzIGJ1dHRvbiBkb2VzIG5vdCB3cml0ZSBpdHMgZGF0YSBpbiBmb3JtLlxuICAgKiBUaGUgZGF0YSBpcyBvbmx5IGFwcGxpZWQgb24gc3VibWl0IGJ1dHRvbiBjbGljayBhcyBzdWJtaXR0ZXIgb2YgcmVxdWVzdFN1Ym1pdCgpO1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7fVxufVxuIiwiaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIG5vdGhpbmcsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaG9zdEF0dHJpYnV0ZXMsIG9taXRFbXB0eUNvbnZlcnRlciB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaTE4blRhcmdldE9wZW5zSW5OZXdXaW5kb3cgfSBmcm9tICcuLi9pMThuLmpzJztcblxuaW1wb3J0IHsgU2JiQWN0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuL2FjdGlvbi1iYXNlLWVsZW1lbnQuanMnO1xuXG5pbXBvcnQgJy4uLy4uL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5cbi8qKiBFbnVtZXJhdGlvbiBmb3IgJ3RhcmdldCcgYXR0cmlidXRlIGluIDxhPiBIVE1MIHRhZy4gKi9cbmV4cG9ydCB0eXBlIExpbmtUYXJnZXRUeXBlID0gJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnO1xuXG4vKiogTGluayBiYXNlIGNsYXNzLiAqL1xuZXhwb3J0XG5AaG9zdEF0dHJpYnV0ZXMoe1xuICAnZGF0YS1saW5rJzogJycsXG59KVxuYWJzdHJhY3QgY2xhc3MgU2JiTGlua0Jhc2VFbGVtZW50IGV4dGVuZHMgU2JiQWN0aW9uQmFzZUVsZW1lbnQge1xuICAvKiogVGhlIGhyZWYgdmFsdWUgeW91IHdhbnQgdG8gbGluayB0by4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIGNvbnZlcnRlcjogb21pdEVtcHR5Q29udmVydGVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBocmVmOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hlcmUgdG8gZGlzcGxheSB0aGUgbGlua2VkIFVSTC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIGNvbnZlcnRlcjogb21pdEVtcHR5Q29udmVydGVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciB0YXJnZXQ6IExpbmtUYXJnZXRUeXBlIHwgc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIGxpbmtlZCBVUkwgYXMgc3BhY2Utc2VwYXJhdGVkIGxpbmsgdHlwZXMuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgcmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciB0aGUgYnJvd3NlciB3aWxsIHNob3cgdGhlIGRvd25sb2FkIGRpYWxvZyBvbiBjbGljay4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGRvd25sb2FkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgaW5uZXIgYW5jaG9yIGVsZW1lbnQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWN1cnJlbnQgdG8gdGhlIGlubmVyIGFuY2hvciBlbGVtZW50LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1jdXJyZW50JyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUN1cnJlbnQ6IHN0cmluZyA9ICcnO1xuXG4gIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgdGhpcy5zZXR1cEJhc2VFdmVudEhhbmRsZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oJ2EnKT8uZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBvdmVycmlkZSBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oJ2EnKT8uYmx1cigpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgY2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PignYScpPy5jbGljaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXZhbHVhdGVSZWxBdHRyaWJ1dGUgPSAoKTogc3RyaW5nIHwgdHlwZW9mIG5vdGhpbmcgPT4ge1xuICAgIHJldHVybiB0aGlzLnJlbCA/IHRoaXMucmVsIDogdGhpcy50YXJnZXQgPT09ICdfYmxhbmsnID8gJ2V4dGVybmFsIG5vb3BlbmVyIG5vZm9sbG93JyA6IG5vdGhpbmc7XG4gIH07XG5cbiAgLyoqIERlZmF1bHQgcmVuZGVyIG1ldGhvZCBmb3IgbGluay1saWtlIGNvbXBvbmVudHMuIENhbiBiZSBvdmVycmlkZGVuIGlmIHRoZSBMaW5rUmVuZGVyVmFyaWFibGVzIGFyZSBub3QgbmVlZGVkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJMaW5rKHRoaXMucmVuZGVyVGVtcGxhdGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyTGluayhyZW5kZXJDb250ZW50OiBUZW1wbGF0ZVJlc3VsdCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxhXG4gICAgICAgIGNsYXNzPVwic2JiLWFjdGlvbi1iYXNlICR7dGhpcy5sb2NhbE5hbWV9XCJcbiAgICAgICAgaHJlZj0ke3RoaXMuaHJlZiB8fCBub3RoaW5nfVxuICAgICAgICA/ZG93bmxvYWQ9JHt0aGlzLmRvd25sb2FkfVxuICAgICAgICB0YXJnZXQ9JHt0aGlzLnRhcmdldCB8fCBub3RoaW5nfVxuICAgICAgICByZWw9JHt0aGlzLl9ldmFsdWF0ZVJlbEF0dHJpYnV0ZSgpfVxuICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5TGFiZWwgfHwgbm90aGluZ31cbiAgICAgICAgYXJpYS1jdXJyZW50PSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q3VycmVudCB8fCBub3RoaW5nfVxuICAgICAgICB0YWJpbmRleD0ke3RoaXMubWF5YmVEaXNhYmxlZCAmJiAhdGhpcy5tYXliZURpc2FibGVkSW50ZXJhY3RpdmUgPyAnLTEnIDogbm90aGluZ31cbiAgICAgICAgYXJpYS1kaXNhYmxlZD0ke3RoaXMubWF5YmVEaXNhYmxlZCA/ICd0cnVlJyA6IG5vdGhpbmd9XG4gICAgICA+XG4gICAgICAgICR7cmVuZGVyQ29udGVudH1cbiAgICAgICAgJHshIXRoaXMuaHJlZiAmJiB0aGlzLnRhcmdldCA9PT0gJ19ibGFuaydcbiAgICAgICAgICA/IGh0bWxgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAgICAgICAgPi4gJHtpMThuVGFyZ2V0T3BlbnNJbk5ld1dpbmRvd1t0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seVxuICAgICAgICAgICAgPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L2E+XG4gICAgYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uL2V2ZW50aW5nLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzLmpzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBvdmVybGF5IGNvbXBvbmVudHMuXG4gKlxuICogQGV2ZW50IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIG9wZW5lZC5cbiAqIEBldmVudCB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQgZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHdpbGxPcGVuOiAnd2lsbE9wZW4nLFxuICAgIGRpZE9wZW46ICdkaWRPcGVuJyxcbiAgICB3aWxsQ2xvc2U6ICd3aWxsQ2xvc2UnLFxuICAgIGRpZENsb3NlOiAnZGlkQ2xvc2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJvdGVjdGVkIHNldCBzdGF0ZShzdGF0ZTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsIHN0YXRlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN0YXRlKCk6IFNiYk9wZW5lZENsb3NlZFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnKSBhcyBTYmJPcGVuZWRDbG9zZWRTdGF0ZTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIG9wZW4uICovXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnb3BlbmVkJztcbiAgfVxuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiAqL1xuICBwcm90ZWN0ZWQgd2lsbE9wZW46IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudC5ldmVudHMud2lsbE9wZW4sXG4gICAgeyBjYW5jZWxhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgaXMgb3BlbmVkLiAqL1xuICBwcm90ZWN0ZWQgZGlkT3BlbjogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudC5ldmVudHMuZGlkT3Blbiwge1xuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiAqL1xuICBwcm90ZWN0ZWQgd2lsbENsb3NlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQuZXZlbnRzLndpbGxDbG9zZSxcbiAgICB7IGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBpcyBjbG9zZWQuICovXG4gIHByb3RlY3RlZCBkaWRDbG9zZTogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LmV2ZW50cy5kaWRDbG9zZSxcbiAgICB7IGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKiogT3BlbnMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIGFic3RyYWN0IG9wZW4oKTogdm9pZDtcbiAgLyoqIENsb3NlcyB0aGUgY29tcG9uZW50LiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY2xvc2UoKTogdm9pZDtcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnN0YXRlIHx8PSAnY2xvc2VkJztcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIHdpbGxPcGVuOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgICB3aWxsQ2xvc2U6IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZE9wZW46IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZENsb3NlOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0lBbUJlLHdCQUFvQixNQUFBOztBQUhsQyxNQUFBLG1CQUFBLENBQUEsZUFBZTtBQUFBLElBQ2QsZUFBZTtBQUFBLEVBQUEsQ0FDaEIsQ0FBQzs7OztvQkFDMEM7QUFBUixFQUFBLG1CQUFRLFlBQVU7QUFBQSxJQUNwRCxJQUFjLGdCQUFhO0FBQ3pCLFlBQU0sZ0JBQWdCO0FBQ2YsYUFBQSxjQUFjLFlBQVksY0FBYztBQUFBLElBQUE7QUFBQSxJQUdqRCxJQUFjLDJCQUF3QjtBQUNwQyxhQUFRLEtBQXVCO0FBQUEsSUFBQTtBQUFBLElBR2pCLG9CQUFpQjs7QUFDL0IsWUFBTSxrQkFBaUI7QUFFdkIsV0FFRyxLQUFLLGFBQWEsV0FBVyxLQUFLLEtBQUssYUFBYSxhQUFhLFFBQ2xFQSxNQUFBLEtBQUssa0JBQUwsZ0JBQUFBLElBQW9CLFFBQVEsMkNBQzVCO0FBQ0EsZ0JBQVEsS0FDTixtQ0FBbUMsS0FBSyxTQUFTLFdBQVcsS0FBSyxjQUFlLFFBQVEsdUNBQXVDLEVBQUcsU0FBUywrREFDM0ksSUFBSTtBQUFBLE1BQUE7QUFBQSxJQUVSO0FBQUEsSUFHUSx5QkFBc0I7QUFDekIsV0FBQTtBQUFBLFFBQ0g7QUFBQSxRQUNBLENBQUMsVUFBUztBQUNSLGNBQUksS0FBSyxpQkFBaUIsQ0FBQyxLQUFLLDBCQUEwQjtBQUN4RCxrQkFBTSxlQUFjO0FBQ3BCLGtCQUFNLHlCQUF3QjtBQUFBLFVBQUE7QUFBQSxRQUVsQztBQUFBO0FBQUE7QUFBQSxRQUdBLEVBQUUsU0FBUyxLQUFJO0FBQUEsTUFBRTtBQUFBLElBQUE7QUFBQTtBQUFBLElBS1gsaUJBQWM7QUFDaEIsWUFBQSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsSUFBQTtBQUFBO0FB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
443
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbGVtZW50cy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9hY3Rpb24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9idXR0b24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy9saW5rLWJhc2UtZWxlbWVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2Jhc2UtZWxlbWVudHMvb3Blbi1jbG9zZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogV2hlbmV2ZXIgYW4gZWxlbWVudCBjYW4gYmUgZGlzYWJsZWQgaXQgaGFzIGRpc2FibGVkIHByb3BlcnR5XG4gKiBvciBmb3JtRGlzYWJsZWQgaWYgaXQncyBhIGZvcm0gZWxlbWVudC5cbiAqIEJlY2F1c2Ugd2UgY2FuJ3QgdXNlIHR5cGVzIGhlcmUgZGlyZWN0bHkgd2UgY3JlYXRlZCB0aGlzIGhlbHBlciB0eXBlLlxuICovXG50eXBlIE1heWJlRGlzYWJsZWQgPSB7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZm9ybURpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnRcbkBob3N0QXR0cmlidXRlcyh7XG4gICdkYXRhLWFjdGlvbic6ICcnLFxufSlcbmFic3RyYWN0IGNsYXNzIFNiYkFjdGlvbkJhc2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgbWF5YmVEaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtYXliZURpc2FibGVkID0gdGhpcyBhcyBNYXliZURpc2FibGVkO1xuICAgIHJldHVybiBtYXliZURpc2FibGVkLmRpc2FibGVkIHx8IG1heWJlRGlzYWJsZWQuZm9ybURpc2FibGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBtYXliZURpc2FibGVkSW50ZXJhY3RpdmUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuICh0aGlzIGFzIE1heWJlRGlzYWJsZWQpLmRpc2FibGVkSW50ZXJhY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChcbiAgICAgIGltcG9ydC5tZXRhLmVudi5ERVYgJiZcbiAgICAgICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1saW5rJykgfHwgdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uJykpICYmXG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ1tkYXRhLWxpbmtdLCBbZGF0YS1idXR0b25dLCBhLCBidXR0b24nKVxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTmVzdGVkIGFjdGlvbiBlbGVtZW50IGRldGVjdGVkICgke3RoaXMubG9jYWxOYW1lfSBpbnNpZGUgJHt0aGlzLnBhcmVudEVsZW1lbnQhLmNsb3Nlc3QoJ1tkYXRhLWxpbmtdLCBbZGF0YS1idXR0b25dLCBhLCBidXR0b24nKSEubG9jYWxOYW1lfSkuIE1heWJlIHVzZSBhIHN0YXRpYyB2YXJpYW50IGZvciB0aGUgaW5uZXIgYWN0aW9uIGVsZW1lbnQ/YCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwQmFzZUV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tYXliZURpc2FibGVkICYmICF0aGlzLm1heWJlRGlzYWJsZWRJbnRlcmFjdGl2ZSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBjYXB0dXJlIGlzIG5lY2Vzc2FyeSBoZXJlLCBhcyB0aGlzIGV2ZW50IGhhbmRsZXIgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIGFueSBvdGhlclxuICAgICAgLy8gaW4gb3JkZXIgdG8gc3RvcCBpbW1lZGlhdGUgcHJvcGFnYXRpb24gaW4gdGhlIGRpc2FibGVkIGNhc2UuXG4gICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJlbmRlciB0aGUgY29tcG9uZW50IHRlbXBsYXRlLiAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyVGVtcGxhdGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1wbGVtZW50YXRpb24gbmVlZGVkIScpO1xuICB9XG5cbiAgLyoqIERlZmF1bHQgcmVuZGVyIG1ldGhvZCBmb3IgYnV0dG9uLWxpa2UgY29tcG9uZW50cy4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItYWN0aW9uLWJhc2UgJHt0aGlzLmxvY2FsTmFtZX1cIj4ke3RoaXMucmVuZGVyVGVtcGxhdGUoKX08L3NwYW4+YDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0V2ZW50UHJldmVudGVkIH0gZnJvbSAnLi4vZXZlbnRpbmcuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuLi9taXhpbnMuanMnO1xuXG5pbXBvcnQgeyBTYmJBY3Rpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vYWN0aW9uLWJhc2UtZWxlbWVudC5qcyc7XG5cbi8qKiBFbnVtZXJhdGlvbiBmb3IgdHlwZSBhdHRyaWJ1dGUgaW4gPGJ1dHRvbj4gSFRNTCB0YWcuICovXG5leHBvcnQgdHlwZSBTYmJCdXR0b25UeXBlID0gJ2J1dHRvbicgfCAncmVzZXQnIHwgJ3N1Ym1pdCc7XG5cbi8qKiBCdXR0b24gYmFzZSBjbGFzcy4gKi9cbmV4cG9ydFxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgdGFiaW5kZXg6ICcwJyxcbiAgJ2RhdGEtYnV0dG9uJzogJycsXG59KVxuYWJzdHJhY3QgY2xhc3MgU2JiQnV0dG9uQmFzZUVsZW1lbnQgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkFjdGlvbkJhc2VFbGVtZW50KSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRzT25XaGljaEVudGVyUHJlc3NUcmlnZ2Vyc1N1Ym1pdCA9IFsnaW5wdXQnLCAnc2JiLWRhdGUtaW5wdXQnXTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgYXR0cmlidXRlIHRvIHVzZSBmb3IgdGhlIGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgJ2J1dHRvbidcbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdHlwZShuYW1lOiBTYmJCdXR0b25UeXBlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBgJHtuYW1lfWApO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBTYmJCdXR0b25UeXBlIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJykgYXMgU2JiQnV0dG9uVHlwZSkgPz8gJ2J1dHRvbic7XG4gIH1cblxuICAvKiogVGhlIGA8Zm9ybT5gIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHRoZSBidXR0b24gd2l0aC4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIG92ZXJyaWRlIHNldCBmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mb3JtSWQgPSB2YWx1ZTtcbiAgICB0aGlzLmZvcm0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9mb3JtS2V5RG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyBVc2UgcXVlcnlTZWxlY3RvciB3aXRoIGZvcm0gYW5kIGlkIHNlbGVjdG9yLCBhcyB0aGUgZm9ybSBwcm9wZXJ0eSBtdXN0XG4gICAgLy8gcmVmZXJlbmNlIGEgdmFsaWQgPGZvcm0+IGVsZW1lbnRcbiAgICByZXR1cm4gdGhpcy5fZm9ybUlkXG4gICAgICA/ICgodGhpcy5vd25lckRvY3VtZW50Py5xdWVyeVNlbGVjdG9yPy4oYGZvcm0jJHt0aGlzLl9mb3JtSWR9YCkgYXMgSFRNTEZvcm1FbGVtZW50KSA/PyBudWxsKVxuICAgICAgOiB0aGlzLmludGVybmFscy5mb3JtO1xuICB9XG4gIHByaXZhdGUgX2Zvcm1JZDogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICdidXR0b24nO1xuXG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgdGhpcy5zZXR1cEJhc2VFdmVudEhhbmRsZXJzKCk7XG5cbiAgICAgIGNvbnN0IHBhc3NpdmVPcHRpb25zID0geyBwYXNzaXZlOiB0cnVlIH07XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlQnV0dG9uQ2xpY2spO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fcHJldmVudFNjcm9sbE9uU3BhY2VLZXlkb3duKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9kaXNwYXRjaENsaWNrRXZlbnRPblNwYWNlS2V5dXAsIHBhc3NpdmVPcHRpb25zKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX3JlbW92ZUFjdGl2ZU1hcmtlciwgcGFzc2l2ZU9wdGlvbnMpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAna2V5cHJlc3MnLFxuICAgICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2xpY2tFdmVudChldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwYXNzaXZlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmZvcm0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9mb3JtS2V5RG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmZvcm0/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9mb3JtS2V5RG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQnV0dG9uQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IE1vdXNlRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodGhpcy50eXBlID09PSAnYnV0dG9uJyB8fCAoYXdhaXQgaXNFdmVudFByZXZlbnRlZChldmVudCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcbiAgICBpZiAoIWZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3N1Ym1pdCcpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3RTdWJtaXQoZm9ybSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAgIGZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfcmVxdWVzdFN1Ym1pdChmb3JtOiBIVE1MRm9ybUVsZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBgZm9ybS5yZXF1ZXN0U3VibWl0KGVsZW1lbnQpO2Agc2VlbXMgbm90IHRvIHdvcmsgZm9yIEN1c3RvbUVsZW1lbnRzLCBzbyB0aGUgYGVsZW1lbnRgIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkO1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHNvbHZlZCBpbiBhbnkgd2F5LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50cy9pc3N1ZXMvODE0I2lzc3VlY29tbWVudC0xMjE4NDUyMTM3XG4gICAgLy8gV2UgdXNlIHRoZSB3b3JrYXJvdW5kIGRlc2NyaWJlZCBpbiB0aGUgZ2l0aHViIGlzc3VlIGJ5IGNsb25pbmcgdGhlIHN1Ym1pdCBidXR0b24gYW5kIHBhc3MgdGhpcyBvbmUgYXMgYW4gYXJndW1lbnQuXG5cbiAgICBjb25zdCBzdWJtaXRCdXR0b25DbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIHN1Ym1pdEJ1dHRvbkNsb25lLmluZXJ0ID0gdHJ1ZTtcbiAgICBzdWJtaXRCdXR0b25DbG9uZS5oaWRkZW4gPSB0cnVlO1xuICAgIHN1Ym1pdEJ1dHRvbkNsb25lLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgc3VibWl0QnV0dG9uQ2xvbmUudmFsdWUgPSB0aGlzLnZhbHVlID8/ICcnO1xuXG4gICAgZm9ybS5hcHBlbmQoc3VibWl0QnV0dG9uQ2xvbmUpO1xuICAgIGZvcm0ucmVxdWVzdFN1Ym1pdChzdWJtaXRCdXR0b25DbG9uZSk7XG4gICAgc3VibWl0QnV0dG9uQ2xvbmUucmVtb3ZlKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudHMgc2Nyb2xsaW5nIGZyb20gcHJlc3NpbmcgU3BhY2UsIHdoZW4gdGhlIGV2ZW50IHRhcmdldCBpcyBhbiBhY3Rpb24gZWxlbWVudC5cbiAgICogQWxzbyBzZXRzIGRhdGEtYWN0aXZlIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBvcmlnaW4gZXZlbnQuXG4gICAqL1xuICBwcml2YXRlIF9wcmV2ZW50U2Nyb2xsT25TcGFjZUtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX3JlbW92ZUFjdGl2ZU1hcmtlciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYSAnY2xpY2snIFBvaW50ZXJFdmVudCBpZiB0aGUgb3JpZ2luYWwga2V5Ym9hcmQgZXZlbnQgaXMgYSAnU3BhY2UnIHByZXNzLlxuICAgKiBBcyB2ZXJpZmllZCB3aXRoIHRoZSBuYXRpdmUgYnV0dG9uLCB3aGVuICdTcGFjZScgaXMgcHJlc3NlZCwgYSAnY2xpY2snIGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgICogYWZ0ZXIgdGhlICdrZXl1cCcgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hDbGlja0V2ZW50T25TcGFjZUtleXVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLl9yZW1vdmVBY3RpdmVNYXJrZXIoZXZlbnQpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hDbGlja0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfZm9ybUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuICAgIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3N1Ym1pdCcgJiZcbiAgICAgIGZvcm0gJiZcbiAgICAgIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiZcbiAgICAgIHRoaXMuX2VsZW1lbnRzT25XaGljaEVudGVyUHJlc3NUcmlnZ2Vyc1N1Ym1pdC5pbmNsdWRlcyhcbiAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmxvY2FsTmFtZSxcbiAgICAgICkgJiZcbiAgICAgIGV2ZW50LmlzVHJ1c3RlZFxuICAgICkge1xuICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgZm9ybSBlbGVtZW50LCBhbiBlbnRlciBwcmVzcyBzdWJtaXRzIHRoZSBmb3JtLlxuICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgd2Ugb25seSBoYXZlIG9uZSBpbnB1dCBhbmQgdGhpcyBidXR0b24gYXMgYSBzdWJtaXQgYnV0dG9uLFxuICAgICAgLy8gd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGZ1bmN0aW9uYWxpdHkgb2Ygc3VibWl0dGluZyB0aGUgZm9ybSBiZWNhdXNlXG4gICAgICAvLyB3aGlsZSB0aGlzIGJ1dHRvbiBzaG91bGQgYmUgcmVjb2duaXplZCBhcyBhIHN1Ym1pdCBlbGVtZW50LCB0aGF0IGlzIG5vdCBuYXRpdmVseSB0aGUgY2FzZVxuICAgICAgLy8gYW5kIHRoZXJlZm9yZSB3ZSBtYW51YWxseSBoYW5kbGUgdGhpcyBjYXNlIGhlcmUuXG4gICAgICAvLyBJZiB0aGlzIGJ1dHRvbiBpcyBub3QgZGlzYWJsZWQgd2Ugd2lsbCB0aGVuIHJlcXVlc3QgYSBzdWJtaXQgZnVydGhlciBkb3duIGJlbG93LlxuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBldmVudE9yaWdpbiA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpWzBdO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50T3JpZ2luLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoZXZlbnQudHlwZSwgZXZlbnQpKSAmJlxuICAgICAgICAhdGhpcy5tYXRjaGVzKCc6ZGlzYWJsZWQnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RTdWJtaXQoZm9ybSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX2Rpc3BhdGNoQ2xpY2tFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgYWx0S2V5LCBjdHJsS2V5LCBtZXRhS2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XG4gICAgKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IFBvaW50ZXJFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBwb2ludGVySWQ6IC0xLFxuICAgICAgICBwb2ludGVyVHlwZTogJycsXG4gICAgICAgIGFsdEtleSxcbiAgICAgICAgY3RybEtleSxcbiAgICAgICAgbWV0YUtleSxcbiAgICAgICAgc2hpZnRLZXksXG4gICAgICB9KSxcbiAgICApO1xuICB9O1xuXG4gIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFbJ25hbWUnLCAndmFsdWUnXS5pbmNsdWRlcyhuYW1lKSB8fCBvbGQgIT09IHZhbHVlKSB7XG4gICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVudGlvbmFsbHkgZW1wdHksIGFzIGJ1dHRvbnMgYXJlIG5vdCB0YXJnZXRlZCBieSBmb3JtIHJlc2V0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge31cblxuICAvKipcbiAgICogSW50ZW50aW9uYWxseSBlbXB0eSwgYXMgYnV0dG9ucyBhcmUgbm90IHRhcmdldGVkIGJ5IGZvcm0gcmVzdG9yZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgX3N0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBJbnRlbnRpb25hbGx5IGVtcHR5LCBhcyBidXR0b24gZG9lcyBub3Qgd3JpdGUgaXRzIGRhdGEgaW4gZm9ybS5cbiAgICogVGhlIGRhdGEgaXMgb25seSBhcHBsaWVkIG9uIHN1Ym1pdCBidXR0b24gY2xpY2sgYXMgc3VibWl0dGVyIG9mIHJlcXVlc3RTdWJtaXQoKTtcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge31cbn1cbiIsImltcG9ydCB7IGh0bWwsIGlzU2VydmVyLCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzLCBvbWl0RW1wdHlDb252ZXJ0ZXIgfSBmcm9tICcuLi9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGkxOG5UYXJnZXRPcGVuc0luTmV3V2luZG93IH0gZnJvbSAnLi4vaTE4bi5qcyc7XG5cbmltcG9ydCB7IFNiYkFjdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi9hY3Rpb24tYmFzZS1lbGVtZW50LmpzJztcblxuaW1wb3J0ICcuLi8uLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG4vKiogRW51bWVyYXRpb24gZm9yICd0YXJnZXQnIGF0dHJpYnV0ZSBpbiA8YT4gSFRNTCB0YWcuICovXG5leHBvcnQgdHlwZSBMaW5rVGFyZ2V0VHlwZSA9ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJztcblxuLyoqIExpbmsgYmFzZSBjbGFzcy4gKi9cbmV4cG9ydFxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgJ2RhdGEtbGluayc6ICcnLFxufSlcbmFic3RyYWN0IGNsYXNzIFNiYkxpbmtCYXNlRWxlbWVudCBleHRlbmRzIFNiYkFjdGlvbkJhc2VFbGVtZW50IHtcbiAgLyoqIFRoZSBocmVmIHZhbHVlIHlvdSB3YW50IHRvIGxpbmsgdG8uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaHJlZjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFdoZXJlIHRvIGRpc3BsYXkgdGhlIGxpbmtlZCBVUkwuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgdGFyZ2V0OiBMaW5rVGFyZ2V0VHlwZSB8IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBsaW5rZWQgVVJMIGFzIHNwYWNlLXNlcGFyYXRlZCBsaW5rIHR5cGVzLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgY29udmVydGVyOiBvbWl0RW1wdHlDb252ZXJ0ZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIHJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJyb3dzZXIgd2lsbCBzaG93IHRoZSBkb3dubG9hZCBkaWFsb2cgb24gY2xpY2suICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkb3dubG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGlubmVyIGFuY2hvciBlbGVtZW50LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1jdXJyZW50IHRvIHRoZSBpbm5lciBhbmNob3IgZWxlbWVudC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktY3VycmVudCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlDdXJyZW50OiBzdHJpbmcgPSAnJztcblxuICBwcm90ZWN0ZWQgbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgIHRoaXMuc2V0dXBCYXNlRXZlbnRIYW5kbGVycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KCdhJyk/LmZvY3VzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KCdhJyk/LmJsdXIoKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIGNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oJ2EnKT8uY2xpY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2YWx1YXRlUmVsQXR0cmlidXRlID0gKCk6IHN0cmluZyB8IHR5cGVvZiBub3RoaW5nID0+IHtcbiAgICByZXR1cm4gdGhpcy5yZWwgPyB0aGlzLnJlbCA6IHRoaXMudGFyZ2V0ID09PSAnX2JsYW5rJyA/ICdleHRlcm5hbCBub29wZW5lciBub2ZvbGxvdycgOiBub3RoaW5nO1xuICB9O1xuXG4gIC8qKiBEZWZhdWx0IHJlbmRlciBtZXRob2QgZm9yIGxpbmstbGlrZSBjb21wb25lbnRzLiBDYW4gYmUgb3ZlcnJpZGRlbiBpZiB0aGUgTGlua1JlbmRlclZhcmlhYmxlcyBhcmUgbm90IG5lZWRlZC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTGluayh0aGlzLnJlbmRlclRlbXBsYXRlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckxpbmsocmVuZGVyQ29udGVudDogVGVtcGxhdGVSZXN1bHQpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cInNiYi1hY3Rpb24tYmFzZSAke3RoaXMubG9jYWxOYW1lfVwiXG4gICAgICAgIGhyZWY9JHt0aGlzLmhyZWYgfHwgbm90aGluZ31cbiAgICAgICAgP2Rvd25sb2FkPSR7dGhpcy5kb3dubG9hZH1cbiAgICAgICAgdGFyZ2V0PSR7dGhpcy50YXJnZXQgfHwgbm90aGluZ31cbiAgICAgICAgcmVsPSR7dGhpcy5fZXZhbHVhdGVSZWxBdHRyaWJ1dGUoKX1cbiAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUxhYmVsIHx8IG5vdGhpbmd9XG4gICAgICAgIGFyaWEtY3VycmVudD0ke3RoaXMuYWNjZXNzaWJpbGl0eUN1cnJlbnQgfHwgbm90aGluZ31cbiAgICAgICAgdGFiaW5kZXg9JHt0aGlzLm1heWJlRGlzYWJsZWQgJiYgIXRoaXMubWF5YmVEaXNhYmxlZEludGVyYWN0aXZlID8gJy0xJyA6IG5vdGhpbmd9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLm1heWJlRGlzYWJsZWQgPyAndHJ1ZScgOiBub3RoaW5nfVxuICAgICAgPlxuICAgICAgICAke3JlbmRlckNvbnRlbnR9XG4gICAgICAgICR7ISF0aGlzLmhyZWYgJiYgdGhpcy50YXJnZXQgPT09ICdfYmxhbmsnXG4gICAgICAgICAgPyBodG1sYDxzYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgID4uICR7aTE4blRhcmdldE9wZW5zSW5OZXdXaW5kb3dbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX08L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAgICAgID5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgPC9hPlxuICAgIGA7XG4gIH1cbn1cbiIsImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wZW5lZENsb3NlZFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy5qcyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3Igb3ZlcmxheSBjb21wb25lbnRzLlxuICpcbiAqIEBldmVudCB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQgd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBpcyBjbG9zZWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gIHByb3RlY3RlZCBzZXQgc3RhdGUoc3RhdGU6IFNiYk9wZW5lZENsb3NlZFN0YXRlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnLCBzdGF0ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdGF0ZSgpOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJykgYXMgU2JiT3BlbmVkQ2xvc2VkU3RhdGU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyBvcGVuLiAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCc7XG4gIH1cblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gKi9cbiAgcHJvdGVjdGVkIHdpbGxPcGVuOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQuZXZlbnRzLndpbGxPcGVuLFxuICAgIHsgY2FuY2VsYWJsZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIG9wZW5lZC4gKi9cbiAgcHJvdGVjdGVkIGRpZE9wZW46IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIodGhpcywgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQuZXZlbnRzLmRpZE9wZW4sIHtcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICB9KTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gKi9cbiAgcHJvdGVjdGVkIHdpbGxDbG9zZTogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LmV2ZW50cy53aWxsQ2xvc2UsXG4gICAgeyBjYW5jZWxhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudC5ldmVudHMuZGlkQ2xvc2UsXG4gICAgeyBjYW5jZWxhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqIE9wZW5zIHRoZSBjb21wb25lbnQuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBvcGVuKCk6IHZvaWQ7XG4gIC8qKiBDbG9zZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIGFic3RyYWN0IGNsb3NlKCk6IHZvaWQ7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdGF0ZSB8fD0gJ2Nsb3NlZCc7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgR2xvYmFsRXZlbnRIYW5kbGVyc0V2ZW50TWFwIHtcbiAgICB3aWxsT3BlbjogQ3VzdG9tRXZlbnQ8dm9pZD47XG4gICAgd2lsbENsb3NlOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgICBkaWRPcGVuOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgICBkaWRDbG9zZTogQ3VzdG9tRXZlbnQ8dm9pZD47XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztJQW1CZSx3QkFBb0IsTUFBQTs7QUFIbEMsTUFBQSxtQkFBQSxDQUFBLGVBQWU7QUFBQSxJQUNkLGVBQWU7QUFBQSxFQUFBLENBQ2hCLENBQUM7Ozs7b0JBQzBDO0FBQVIsRUFBQSxtQkFBUSxZQUFVO0FBQUEsSUFDcEQsSUFBYyxnQkFBYTtBQUN6QixZQUFNLGdCQUFnQjtBQUNmLGFBQUEsY0FBYyxZQUFZLGNBQWM7QUFBQSxJQUFBO0FBQUEsSUFHakQsSUFBYywyQkFBd0I7QUFDcEMsYUFBUSxLQUF1QjtBQUFBLElBQUE7QUFBQSxJQUdqQixvQkFBaUI7O0FBQy9CLFlBQU0sa0JBQWlCO0FBRXZCLFdBRUcsS0FBSyxhQUFhLFdBQVcsS0FBSyxLQUFLLGFBQWEsYUFBYSxRQUNsRUEsTUFBQSxLQUFLLGtCQUFMLGdCQUFBQSxJQUFvQixRQUFRLDJDQUM1QjtBQUNBLGdCQUFRLEtBQ04sbUNBQW1DLEtBQUssU0FBUyxXQUFXLEtBQUssY0FBZSxRQUFRLHVDQUF1QyxFQUFHLFNBQVMsK0RBQzNJLElBQUk7QUFBQSxNQUFBO0FBQUEsSUFFUjtBQUFBLElBR1EseUJBQXNCO0FBQ3pCLFdBQUE7QUFBQSxRQUNIO0FBQUEsUUFDQSxDQUFDLFVBQVM7QUFDUixjQUFJLEtBQUssaUJBQWlCLENBQUMsS0FBSywwQkFBMEI7QUFDeEQsa0JBQU0sZUFBYztBQUNwQixrQkFBTSx5QkFBd0I7QUFBQSxVQUFBO0FBQUEsUUFFbEM7QUFBQTtBQUFBO0FBQUEsUUFHQSxFQUFFLFNBQVMsS0FBSTtBQUFBLE1BQUU7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUtYLGlCQUFjO0FBQ2hCLFlBQUEsSUFBSSxNQUFNLHdCQUF3QjtBQUFBLElBQUE7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QUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxVQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxNQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLE9BQWtCO0FBQUEsU0FBQSxVQUFBLGFBQUEsb0JBQUEsdUJBQUE7QUFLbEIsaUJBQUEsSUFBQSxNQUFBLG9CQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsVUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxZQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxRQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLFNBQXFDO0FBQUEsU0FBQSxVQUFBLGFBQUEsc0JBQUEseUJBQUE7QUFLckMsaUJBQUEsSUFBQSxNQUFBLGlCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsT0FBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxTQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxLQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLE1BQWlCO0FBQUEsU0FBQSxVQUFBLGFBQUEsbUJBQUEsc0JBQUE7QUFLakIsaUJBQUEsSUFBQSxNQUFBLHNCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsWUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxVQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLFdBQTBCO0FBQUEsU0FBQSxVQUFBLGFBQUEsd0JBQUEsMkJBQUE7QUFLMUIsaUJBQUEsSUFBQSxNQUFBLGdDQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsc0JBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsd0JBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLG9CQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLHFCQUFnQztBQUFBLFNBQUEsVUFBQSxhQUFBLGtDQUFBLHFDQUFBO0FBS2hDLGlCQUFBLElBQUEsTUFBQSxrQ0FBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLHdCQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLDBCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxzQkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSx1QkFBa0M7QUFBQSxTQUFBLFVBQUEsYUFBQSxvQ0FBQSx1Q0FBQTtBQTdCcEQsaUJBc0ZDLE1BQUEsbUJBQUEsRUFBQSxPQUFBLFdBQUEsR0FBQSxrQkFBQSxFQUFBLE1BQUEsU0FBQSxNQUFBLFdBQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxNQUFBLHVCQUFBOzs7QUF0RmMsc0JBQWtCLFlBQUEsdUJBQUE7QUFBQSxFQUFBLE1BQUM7OztBQ041QixNQUFnQiwyQkFBaEIsTUFBZ0IsaUNBQWdDLFdBQVU7QUFBQSxFQUFoRSxjQUFBOztBQXNCWSxTQUFBLFdBQXlCLElBQUksYUFDckMsTUFDQSx5QkFBd0IsT0FBTyxVQUMvQixFQUFFLFlBQVksTUFBTTtBQUlaLFNBQU8sVUFBaUIsSUFBSSxhQUFhLE1BQU0seUJBQXdCLE9BQU8sU0FBUztBQUFBLE1BQy9GLFlBQVk7QUFBQSxJQUFBLENBQ2I7QUFHUyxTQUFBLFlBQTBCLElBQUksYUFDdEMsTUFDQSx5QkFBd0IsT0FBTyxXQUMvQixFQUFFLFlBQVksTUFBTTtBQUlaLFNBQUEsV0FBeUIsSUFBSSxhQUNyQyxNQUNBLHlCQUF3QixPQUFPLFVBQy9CLEVBQUUsWUFBWSxNQUFNO0FBQUEsRUFBQTtBQUFBO0FBQUEsRUFuQ3RCLElBQWMsTUFBTSxPQUEyQjtBQUN4QyxTQUFBLGFBQWEsY0FBYyxLQUFLO0FBQUEsRUFBQTtBQUFBLEVBRXZDLElBQWMsUUFBSztBQUNWLFdBQUEsS0FBSyxhQUFhLFlBQVk7QUFBQSxFQUFBO0FBQUE7QUFBQSxFQUl2QyxJQUFXLFNBQU07QUFDZixXQUFPLEtBQUssVUFBVTtBQUFBLEVBQUE7QUFBQSxFQWtDUixvQkFBaUI7QUFDL0IsVUFBTSxrQkFBaUI7QUFDdkIsU0FBSyxVQUFMLEtBQUssUUFBVTtBQUFBLEVBQUE7O0FBckRNLHlCQUFBLFNBQVM7QUFBQSxFQUM5QixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQ0Y7QUFOTixJQUFnQiwwQkFBaEI7In0=
@@ -0,0 +1,21 @@
1
+ import { LitElement, ReactiveController } from 'lit';
2
+ /**
3
+ * Tracks id changes in the DOM and calls component when matching with requestUpdate().
4
+ */
5
+ export declare class SbbIdReferenceController<T extends LitElement> implements ReactiveController {
6
+ private _host;
7
+ private _idRef;
8
+ private _observers;
9
+ private _rootNode;
10
+ constructor(_host: T, _idRef: keyof T, _observers?: WeakMap<Node, {
11
+ observer: MutationObserver;
12
+ controllers: Set<SbbIdReferenceController<any>>;
13
+ }>);
14
+ hostConnected(): void;
15
+ hostDisconnected(): void;
16
+ /**
17
+ * Find the element by id in the current document fragment
18
+ */
19
+ find(): HTMLElement | null;
20
+ }
21
+ //# sourceMappingURL=id-observer-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-observer-controller.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/controllers/id-observer-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAOzE;;GAEG;AACH,qBAAa,wBAAwB,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,kBAAkB;IAIrF,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,SAAS,CAAsC;gBAG7C,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,MAAM,CAAC,EACf,UAAU;kBAZR,gBAAgB;qBAAe,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;MAY7C;IAKzB,aAAa,IAAI,IAAI;IAgDrB,gBAAgB,IAAI,IAAI;IAoB/B;;OAEG;IACI,IAAI,IAAI,WAAW,GAAG,IAAI;CAQlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"media-matchers-controller.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/controllers/media-matchers-controller.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAKrF,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAC9D,eAAO,MAAM,qCAAqC,QAAuD,CAAC;AAC1G,eAAO,MAAM,oCAAoC,QAAsD,CAAC;AAGxG;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAehE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAGhE,OAAO,CAAC,QAAQ;gBADhB,IAAI,EAAE,sBAAsB,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAK1D;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAYtC,aAAa,IAAI,IAAI;IAoBrB,gBAAgB,IAAI,IAAI;CAWhC"}
1
+ {"version":3,"file":"media-matchers-controller.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/controllers/media-matchers-controller.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAKrF,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAC9D,eAAO,MAAM,qCAAqC,QAAuD,CAAC;AAC1G,eAAO,MAAM,oCAAoC,QAAsD,CAAC;AAGxG;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAehE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAGhE,OAAO,CAAC,QAAQ;gBADhB,IAAI,EAAE,sBAAsB,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAK1D;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAMtC,aAAa,IAAI,IAAI;IAoBrB,gBAAgB,IAAI,IAAI;CAWhC"}
@@ -1,7 +1,8 @@
1
1
  export * from './controllers/connected-abort-controller.js';
2
+ export * from './controllers/escapable-overlay-controller.js';
3
+ export * from './controllers/id-observer-controller.js';
2
4
  export * from './controllers/inert-controller.js';
3
5
  export * from './controllers/language-controller.js';
4
6
  export * from './controllers/media-matchers-controller.js';
5
- export * from './controllers/escapable-overlay-controller.js';
6
7
  export * from './controllers/slot-state-controller.js';
7
8
  //# sourceMappingURL=controllers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.d.ts","sourceRoot":"","sources":["../../../../src/elements/core/controllers.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,wCAAwC,CAAC"}
1
+ {"version":3,"file":"controllers.d.ts","sourceRoot":"","sources":["../../../../src/elements/core/controllers.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC"}
@@ -22,6 +22,119 @@ class SbbConnectedAbortController {
22
22
  this._abortController = void 0;
23
23
  }
24
24
  }
25
+ const overlayStack = new Array();
26
+ if (!isServer) {
27
+ window.addEventListener("keydown", (event) => {
28
+ var _a;
29
+ if (event.key === "Escape" && !event.defaultPrevented) {
30
+ event.preventDefault();
31
+ (_a = overlayStack.at(-1)) == null ? void 0 : _a.close();
32
+ }
33
+ });
34
+ }
35
+ class SbbEscapableOverlayController {
36
+ constructor(_host, _overlayStack = overlayStack) {
37
+ var _a, _b;
38
+ this._host = _host;
39
+ this._overlayStack = _overlayStack;
40
+ (_b = (_a = this._host).addController) == null ? void 0 : _b.call(_a, this);
41
+ }
42
+ hostDisconnected() {
43
+ this.disconnect();
44
+ }
45
+ // This must be called when the overlay is opened
46
+ connect() {
47
+ this._overlayStack.push(this._host);
48
+ }
49
+ // This must be called when the overlay is closed
50
+ disconnect() {
51
+ if (this._overlayStack.length) {
52
+ const findElIndex = this._overlayStack.findIndex((e) => e === this._host);
53
+ if (findElIndex !== -1) {
54
+ this._overlayStack.splice(findElIndex, 1);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ const observers = /* @__PURE__ */ new WeakMap();
60
+ class SbbIdReferenceController {
61
+ constructor(_host, _idRef, _observers = observers) {
62
+ this._host = _host;
63
+ this._idRef = _idRef;
64
+ this._observers = _observers;
65
+ this._rootNode = null;
66
+ this._host.addController(this);
67
+ }
68
+ hostConnected() {
69
+ if (isServer) {
70
+ return;
71
+ }
72
+ this._rootNode = this._host.getRootNode();
73
+ const observerContext = this._observers.get(this._rootNode);
74
+ if (observerContext) {
75
+ observerContext.controllers.add(this);
76
+ } else {
77
+ const controllers = /* @__PURE__ */ new Set([this]);
78
+ const observer = new MutationObserver((mutations) => {
79
+ const mutatedIds = /* @__PURE__ */ new Set();
80
+ for (const mutation of mutations) {
81
+ if (mutation.type === "attributes") {
82
+ mutatedIds.add(mutation.oldValue);
83
+ mutatedIds.add(mutation.target.id);
84
+ } else if (mutation.type === "childList") {
85
+ for (const node of [...mutation.addedNodes, ...mutation.removedNodes]) {
86
+ if (node instanceof HTMLElement) {
87
+ mutatedIds.add(node.id);
88
+ node.querySelectorAll("[id]").forEach((e) => mutatedIds.add(e.id));
89
+ }
90
+ }
91
+ }
92
+ }
93
+ for (const controller of controllers) {
94
+ const id = controller._host[controller._idRef];
95
+ if (id && typeof id === "string" && mutatedIds.has(id)) {
96
+ controller._host.requestUpdate();
97
+ }
98
+ }
99
+ });
100
+ observer.observe(this._rootNode, {
101
+ attributeFilter: ["id"],
102
+ childList: true,
103
+ subtree: true,
104
+ attributeOldValue: true
105
+ });
106
+ this._observers.set(this._rootNode, { observer, controllers });
107
+ }
108
+ }
109
+ hostDisconnected() {
110
+ if (isServer || !this._rootNode) {
111
+ return;
112
+ }
113
+ const observerContext = this._observers.get(this._rootNode);
114
+ if (!observerContext) {
115
+ this._rootNode = null;
116
+ return;
117
+ }
118
+ observerContext.controllers.delete(this);
119
+ if (observerContext.controllers.size === 0) {
120
+ observerContext.observer.disconnect();
121
+ this._observers.delete(this._rootNode);
122
+ }
123
+ this._rootNode = null;
124
+ }
125
+ /**
126
+ * Find the element by id in the current document fragment
127
+ */
128
+ find() {
129
+ var _a;
130
+ if (isServer || !this._rootNode) {
131
+ return null;
132
+ } else {
133
+ const id = this._host[this._idRef];
134
+ return typeof id == "string" ? (_a = this._rootNode) == null ? void 0 : _a.querySelector(`#${id}`) : null;
135
+ }
136
+ }
137
+ }
25
138
  const IGNORED_ELEMENTS = ["script", "head", "template", "style"];
26
139
  const inertElements = /* @__PURE__ */ new Set();
27
140
  const inertOverlays = /* @__PURE__ */ new Set();
@@ -185,15 +298,7 @@ class SbbMediaMatcherController {
185
298
  * @returns Whether the query matches or null with SSR.
186
299
  */
187
300
  matches(query) {
188
- if (isServer) {
189
- return null;
190
- }
191
- const mediaQuery = mediaQueryRegistry.get(query);
192
- if (mediaQuery) {
193
- return mediaQuery.mediaQueryList.matches;
194
- } else {
195
- return matchMedia(query).matches;
196
- }
301
+ return isServer ? null : matchMedia(query).matches;
197
302
  }
198
303
  hostConnected() {
199
304
  if (isServer) {
@@ -224,40 +329,6 @@ class SbbMediaMatcherController {
224
329
  }
225
330
  }
226
331
  }
227
- const overlayStack = new Array();
228
- if (!isServer) {
229
- window.addEventListener("keydown", (event) => {
230
- var _a;
231
- if (event.key === "Escape" && !event.defaultPrevented) {
232
- event.preventDefault();
233
- (_a = overlayStack.at(-1)) == null ? void 0 : _a.close();
234
- }
235
- });
236
- }
237
- class SbbEscapableOverlayController {
238
- constructor(_host, _overlayStack = overlayStack) {
239
- var _a, _b;
240
- this._host = _host;
241
- this._overlayStack = _overlayStack;
242
- (_b = (_a = this._host).addController) == null ? void 0 : _b.call(_a, this);
243
- }
244
- hostDisconnected() {
245
- this.disconnect();
246
- }
247
- // This must be called when the overlay is opened
248
- connect() {
249
- this._overlayStack.push(this._host);
250
- }
251
- // This must be called when the overlay is closed
252
- disconnect() {
253
- if (this._overlayStack.length) {
254
- const findElIndex = this._overlayStack.findIndex((e) => e === this._host);
255
- if (findElIndex !== -1) {
256
- this._overlayStack.splice(findElIndex, 1);
257
- }
258
- }
259
- }
260
- }
261
332
  class SbbSlotStateController {
262
333
  constructor(_host, _onChangeCallback = null) {
263
334
  this._host = _host;
@@ -305,6 +376,7 @@ class SbbSlotStateController {
305
376
  export {
306
377
  SbbConnectedAbortController,
307
378
  SbbEscapableOverlayController,
379
+ SbbIdReferenceController,
308
380
  SbbInertController,
309
381
  SbbLanguageController,
310
382
  SbbMediaMatcherController,
@@ -315,4 +387,4 @@ export {
315
387
  SbbMediaQueryPointerCoarse,
316
388
  SbbSlotStateController
317
389
  };
318
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL2Nvbm5lY3RlZC1hYm9ydC1jb250cm9sbGVyLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMvaW5lcnQtY29udHJvbGxlci50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL2xhbmd1YWdlLWNvbnRyb2xsZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9jb250cm9sbGVycy9tZWRpYS1tYXRjaGVycy1jb250cm9sbGVyLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMvZXNjYXBhYmxlLW92ZXJsYXktY29udHJvbGxlci50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL3Nsb3Qtc3RhdGUtY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlYWN0aXZlQ29udHJvbGxlciwgUmVhY3RpdmVDb250cm9sbGVySG9zdCB9IGZyb20gJ2xpdCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgTm8gcmVwbGFjZW1lbnQgc2hvdWxkIGJlIG5lY2Vzc2FyeSwgYXMgdGhpcyB3YXMgaW50ZW5kZWRcbiAqICAgZm9yIGV2ZW50IGxpc3RlbmVycywgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgY2xhc3MgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyIGltcGxlbWVudHMgUmVhY3RpdmVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBfYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHB1YmxpYyBnZXQgc2lnbmFsKCk6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYWJvcnRDb250cm9sbGVyPy5zaWduYWw7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfaG9zdDogUmVhY3RpdmVDb250cm9sbGVySG9zdCkge1xuICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhvc3REaXNjb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZUNvbnRyb2xsZXIsIFJlYWN0aXZlQ29udHJvbGxlckhvc3QgfSBmcm9tICdsaXQnO1xuXG5jb25zdCBJR05PUkVEX0VMRU1FTlRTID0gWydzY3JpcHQnLCAnaGVhZCcsICd0ZW1wbGF0ZScsICdzdHlsZSddO1xuY29uc3QgaW5lcnRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XG5jb25zdCBpbmVydE92ZXJsYXlzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcblxuZXhwb3J0IGNsYXNzIFNiYkluZXJ0Q29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ob3N0OiBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0ICYgSFRNTEVsZW1lbnQsXG4gICAgcHJpdmF0ZSBfaW5lcnRFbGVtZW50cyA9IGluZXJ0RWxlbWVudHMsXG4gICAgcHJpdmF0ZSBfaW5lcnRPdmVybGF5cyA9IGluZXJ0T3ZlcmxheXMsXG4gICkge1xuICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcj8uKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGhvc3REaXNjb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbmVydCgpKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQXBwbGllcyBpbmVydCBzdGF0ZSB0byBldmVyeSBvdGhlciBlbGVtZW50IG9uIHRoZSBwYWdlIGV4Y2VwdCB0aGUgb3ZlcmxheS4gKi9cbiAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBpbmVydCBzdGF0ZSBmcm9tIHByZXZpb3VzIG9wZW5lZCBvdmVybGF5XG4gICAgaWYgKHRoaXMuX2luZXJ0T3ZlcmxheXMuc2l6ZSkge1xuICAgICAgdGhpcy5fcmVtb3ZlSW5lcnRBdHRyaWJ1dGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5lcnRPdmVybGF5cy5hZGQodGhpcy5faG9zdCk7XG4gICAgdGhpcy5fYWRkSW5lcnRBdHRyaWJ1dGVzKCk7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBpbmVydCBzdGF0ZS4gKi9cbiAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRPdmVybGF5KCkgIT09IHRoaXMuX2hvc3QpIHtcbiAgICAgIC8vIElmIGUuZy4gYSBjb21wb25lbnQgZ2V0cyBkaXNjb25uZWN0ZWQsIGl0IGNvdWxkIGJlIHRoYXQgaXQgaXMgbm90IHRoZSB0b3AgbW9zdC5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGRpcmVjdGx5IHJlbW92ZSBpdCwgYXMgdGhlcmUgaXMgY3VycmVudGx5IG5vIGluZXJ0IHN0YXRlIGFwcGxpZWQuXG4gICAgICBpZiAodGhpcy5faW5lcnRPdmVybGF5cy5oYXModGhpcy5faG9zdCkpIHtcbiAgICAgICAgdGhpcy5faW5lcnRPdmVybGF5cy5kZWxldGUodGhpcy5faG9zdCk7XG4gICAgICB9IGVsc2UgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUcnlpbmcgdG8gcmVtb3ZlIGluZXJ0IHN0YXRlIG9mIGFuIG92ZXJsYXkgd2hpY2ggbmV2ZXIgaGFkIGFuIGFwcGxpZWQgaW5lcnQgc3RhdGUuJyxcbiAgICAgICAgICB0aGlzLl9ob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVtb3ZlSW5lcnRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5faW5lcnRPdmVybGF5cy5kZWxldGUodGhpcy5faG9zdCk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhcyBwcmV2aW91cyBvcGVuZWQgb3ZlcmxheSwgc2V0IGl0cyBpbmVydCBzdGF0ZSBhZ2Fpbi5cbiAgICBpZiAodGhpcy5faW5lcnRPdmVybGF5cy5zaXplKSB7XG4gICAgICB0aGlzLl9hZGRJbmVydEF0dHJpYnV0ZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYXNzaWduZWQgaG9zdCBpcyBjdXJyZW50bHkgaW5lcnQgKi9cbiAgcHVibGljIGlzSW5lcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luZXJ0T3ZlcmxheXMuaGFzKHRoaXMuX2hvc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3VycmVudE92ZXJsYXkoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2luZXJ0T3ZlcmxheXNdLnBvcCgpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVJbmVydEF0dHJpYnV0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5lcnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpKSB7XG4gICAgICAgIGVsZW1lbnQuaW5lcnQgPSBmYWxzZTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWluZXJ0Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItYXJpYS1oaWRkZW4nKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5faW5lcnRFbGVtZW50cy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkSW5lcnRBdHRyaWJ1dGVzKCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IHRoaXMuX2N1cnJlbnRPdmVybGF5KCk7XG5cbiAgICB3aGlsZSAoZWxlbWVudCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIEFycmF5LmZyb20oKGVsZW1lbnQ/LnBhcmVudEVsZW1lbnQgPz8gZWxlbWVudD8uZ2V0Um9vdE5vZGUoKSk/LmNoaWxkTm9kZXMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGNoaWxkKTogY2hpbGQgaXMgSFRNTEVsZW1lbnQgPT5cbiAgICAgICAgICAgIGNoaWxkICE9PSBlbGVtZW50ICYmXG4gICAgICAgICAgICBjaGlsZCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCAmJlxuICAgICAgICAgICAgIUlHTk9SRURfRUxFTUVOVFMuaW5jbHVkZXMoY2hpbGQubG9jYWxOYW1lKSxcbiAgICAgICAgKVxuICAgICAgICAuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2luZXJ0RWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKCFlbGVtZW50LmluZXJ0KSB7XG4gICAgICAgICAgICBlbGVtZW50LmluZXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcsIHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zYmItYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIHBpZXJjZSB0aHJvdWdoIFNoYWRvdyBET00gYm91bmRhcnlcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50Py5wYXJlbnRFbGVtZW50ID8/IChlbGVtZW50Py5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5ob3N0ID8/IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBSZWFjdGl2ZUNvbnRyb2xsZXIsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVySG9zdCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICcuLi9jb25maWcuanMnO1xuXG4vKipcbiAqIFRoZSBMYW5ndWFnZUNvbnRyb2xsZXIgaXMgYSByZWFjdGl2ZSBjb250cm9sbGVyIHRoYXQgb2JzZXJ2ZXMgdGhlIFwibGFuZ1wiIGF0dHJpYnV0ZVxuICogb2YgdGhlIDxodG1sPiB0YWcuXG4gKiBPbiBjaGFuZ2Ugb2YgdGhlIFwibGFuZ1wiIGF0dHJpYnV0ZSwgaXQgd2lsbCByZXF1ZXN0IGFuIHVwZGF0ZSBvZiBjb25uZWN0ZWRcbiAqIGNvbXBvbmVudHMuXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2xhbmdcbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkxhbmd1YWdlQ29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc3VwcG9ydGVkTG9jYWxlcyA9IFsnZW4nLCAnZGUnLCAnZnInLCAnaXQnXTtcblxuICAvKiogQSBzZXQgb2YgY29ubmVjdGVkIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgbm90aWZpZWQgb24gbGFuZ3VhZ2UgY2hhbmdlLiAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbGlzdGVuZXJzID0gbmV3IFNldDxTYmJMYW5ndWFnZUNvbnRyb2xsZXI+KCk7XG5cbiAgLyoqIE11dGF0aW9uT2JzZXJ2ZXIgdGhhdCBvYnNlcnZlcyB0aGUgXCJsYW5nXCIgYXR0cmlidXRlIG9mIHRoZSA8aHRtbD4gZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX29ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnNbMF0ub2xkVmFsdWUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSkge1xuICAgICAgICAgIFNiYkxhbmd1YWdlQ29udHJvbGxlci5fbGlzdGVuZXJzLmZvckVhY2goKGwpID0+IGwuX2NhbGxIYW5kbGVycygpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9vYnNlcnZlckNvbmZpZyA9IHtcbiAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnbGFuZyddLFxuICAgIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuICB9O1xuXG4gIC8qKiBHZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGN1cnJlbnQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9XG4gICAgICAocmVhZENvbmZpZygpLmxhbmd1YWdlID8/XG4gICAgICAgIChpc1NlcnZlclxuICAgICAgICAgID8gU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSkpIHx8XG4gICAgICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX2RlZmF1bHRMYW5ndWFnZTtcblxuICAgIC8vIFN1cHBvcnQgZS5nLiBjYXNlcyBsaWtlIGBkZS1jaGAuXG4gICAgY29uc3QgbGFuZ0F0dHJpYnV0ZU5vcm1hbGl6ZWQgPSBsYW5ndWFnZS5zcGxpdCgnLScpWzBdO1xuICAgIHJldHVybiBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX3N1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMobGFuZ0F0dHJpYnV0ZU5vcm1hbGl6ZWQpXG4gICAgICA/IGxhbmdBdHRyaWJ1dGVOb3JtYWxpemVkXG4gICAgICA6IFNiYkxhbmd1YWdlQ29udHJvbGxlci5fZGVmYXVsdExhbmd1YWdlO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY3VycmVudCBsYW5ndWFnZS4gKi9cbiAgcHVibGljIGdldCBjdXJyZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNiYkxhbmd1YWdlQ29udHJvbGxlci5jdXJyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNMYW5ndWFnZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfaGFuZGxlcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IFJlYWN0aXZlQ29udHJvbGxlckhvc3QpIHtcbiAgICB0aGlzLl9ob3N0LmFkZENvbnRyb2xsZXIodGhpcyk7XG4gIH1cblxuICAvKiogQWRkIGEgbGFuZ3VhZ2UgY2hhbmdlIGhhbmRsZXIuICovXG4gIHB1YmxpYyB3aXRoSGFuZGxlcihoYW5kbGVyOiAoKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgLy8gV2UgdXNlIHVuc2hpZnQgaGVyZSwgdG8gcHJlcGVuZCBhZGRpdGlvbmFsIGhhbmRsZXJzLlxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHJlcXVlc3RVcGRhdGUgaXMgY2FsbGVkIGFmdGVyIHRoZSBvdGhlciBoYW5kbGVycy5cbiAgICB0aGlzLl9oYW5kbGVycy51bnNoaWZ0KGhhbmRsZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGhvc3RDb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9saXN0ZW5lcnMuc2l6ZSkge1xuICAgICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9vYnNlcnZlciEub2JzZXJ2ZShcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX29ic2VydmVyQ29uZmlnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX2xpc3RlbmVycy5hZGQodGhpcyk7XG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzTGFuZ3VhZ2UgIT09IHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5fY2FsbEhhbmRsZXJzKHRoaXMuX3ByZXZpb3VzTGFuZ3VhZ2UgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhvc3REaXNjb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ByZXZpb3VzTGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnQ7XG4gICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9saXN0ZW5lcnMuZGVsZXRlKHRoaXMpO1xuICAgIGlmICghU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9saXN0ZW5lcnMuc2l6ZSkge1xuICAgICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9vYnNlcnZlciEuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhbGxIYW5kbGVycyhyZXF1ZXN0VXBkYXRlID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuX2hhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoKSk7XG4gICAgaWYgKHJlcXVlc3RVcGRhdGUpIHtcbiAgICAgIHRoaXMuX2hvc3QucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludFNtYWxsTWF4LFxuICBTYmJUeXBvU2NhbGVEZWZhdWx0LFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zJztcbmltcG9ydCB7IGlzU2VydmVyLCB0eXBlIFJlYWN0aXZlQ29udHJvbGxlciwgdHlwZSBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0IH0gZnJvbSAnbGl0JztcblxuY29uc3QgcHhUb1JlbSA9IChweDogbnVtYmVyKTogbnVtYmVyID0+IHB4IC8gU2JiVHlwb1NjYWxlRGVmYXVsdDtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5leHBvcnQgY29uc3QgU2JiTWVkaWFRdWVyeUZvcmNlZENvbG9ycyA9ICcoZm9yY2VkLWNvbG9yczogYWN0aXZlKSc7XG5leHBvcnQgY29uc3QgU2JiTWVkaWFRdWVyeUhvdmVyID0gJyhhbnktaG92ZXI6IGhvdmVyKSc7XG5leHBvcnQgY29uc3QgU2JiTWVkaWFRdWVyeVBvaW50ZXJDb2Fyc2UgPSAnKHBvaW50ZXI6IGNvYXJzZSknO1xuZXhwb3J0IGNvbnN0IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50TWVkaXVtQW5kQWJvdmUgPSBgKG1pbi13aWR0aDogJHtweFRvUmVtKFNiYkJyZWFrcG9pbnRNZWRpdW1NaW4pfXJlbSlgO1xuZXhwb3J0IGNvbnN0IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRCZWxvdyA9IGAobWF4LXdpZHRoOiAke3B4VG9SZW0oU2JiQnJlYWtwb2ludFNtYWxsTWF4KX1yZW0pYDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogQSBjYWxsYmFjaywgd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIG1lZGlhIHF1ZXJ5IG1hdGNoXG4gKiBzdGF0dXMgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU2JiTWVkaWFNYXRjaGVySGFuZGxlciA9IChtYXRjaGVzOiBib29sZWFuKSA9PiB2b2lkO1xuXG5pbnRlcmZhY2UgTWVkaWFRdWVyeUVudHJ5IHtcbiAgbWVkaWFRdWVyeUxpc3Q6IE1lZGlhUXVlcnlMaXN0O1xuICBldmVudEhhbmRsZXI6IChldmVudDogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gdm9pZDtcbiAgaGFuZGxlcnM6IFNldDxTYmJNZWRpYU1hdGNoZXJIYW5kbGVyPjtcbn1cblxuLyoqXG4gKiBXZSB3YW50IHRvIGNhY2hlIE1lZGlhUXVlcnlMaXN0IGluc3RhbmNlcyBhbmQgY29ycmVzcG9uZGluZ1xuICogZXZlbnQgaGFuZGxlcnMsIGFzIGEgbXVsdGl0dWRlIG9mIGV2ZW50IGhhbmRsZXJzIG9uIGdsb2JhbCBvYmplY3RzXG4gKiBjYW4gZGVncmFkZSBwZXJmb3JtYW5jZSB3aXRoIHRpbWUuXG4gKi9cbmNvbnN0IG1lZGlhUXVlcnlSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBNZWRpYVF1ZXJ5RW50cnk+KCk7XG5cbi8qKlxuICogVGhpcyBjb250cm9sbGVyIGFsbG93cyBsaXN0ZW5pbmcgdG8gbWVkaWEgcXVlcnkgY2hhbmdlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFNiYk1lZGlhTWF0Y2hlckNvbnRyb2xsZXIodGhpcywge1xuICogICBbU2JiRm9yY2VkQ29sb3JzUXVlcnldOiAobWF0Y2hlcykgPT4gZG9Tb21ldGhpbmcobWF0Y2hlcyksXG4gKiB9KVxuICovXG5leHBvcnQgY2xhc3MgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBob3N0OiBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0LFxuICAgIHByaXZhdGUgX3F1ZXJpZXM6IFJlY29yZDxzdHJpbmcsIFNiYk1lZGlhTWF0Y2hlckhhbmRsZXI+LFxuICApIHtcbiAgICBob3N0LmFkZENvbnRyb2xsZXIodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBxdWVyeSBtYXRjaGVzLiBSZXR1cm5zIG51bGwgd2l0aCBTU1IuXG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgcXVlcnkgbWF0Y2hlcyBvciBudWxsIHdpdGggU1NSLlxuICAgKi9cbiAgcHVibGljIG1hdGNoZXMocXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gbWVkaWFRdWVyeVJlZ2lzdHJ5LmdldChxdWVyeSk7XG4gICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgIHJldHVybiBtZWRpYVF1ZXJ5Lm1lZGlhUXVlcnlMaXN0Lm1hdGNoZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3F1ZXJ5LCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9xdWVyaWVzKSkge1xuICAgICAgY29uc3QgbWVkaWFRdWVyeSA9IG1lZGlhUXVlcnlSZWdpc3RyeS5nZXQocXVlcnkpO1xuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgbWVkaWFRdWVyeS5oYW5kbGVycy5hZGQoaGFuZGxlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpO1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBTZXQoW2hhbmRsZXJdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gKGU6IE1lZGlhUXVlcnlMaXN0RXZlbnQpOiB2b2lkID0+XG4gICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaChlLm1hdGNoZXMpKTtcbiAgICAgICAgbWVkaWFRdWVyeUxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgbWVkaWFRdWVyeVJlZ2lzdHJ5LnNldChxdWVyeSwgeyBtZWRpYVF1ZXJ5TGlzdCwgaGFuZGxlcnMsIGV2ZW50SGFuZGxlciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaG9zdERpc2Nvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtxdWVyeSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fcXVlcmllcykpIHtcbiAgICAgIGNvbnN0IG1lZGlhUXVlcnkgPSBtZWRpYVF1ZXJ5UmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIG1lZGlhUXVlcnkuaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xuICAgICAgICBpZiAoIW1lZGlhUXVlcnkuaGFuZGxlcnMuc2l6ZSkge1xuICAgICAgICAgIG1lZGlhUXVlcnlSZWdpc3RyeS5kZWxldGUocXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBSZWFjdGl2ZUNvbnRyb2xsZXIsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVySG9zdCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9iYXNlLWVsZW1lbnRzL29wZW4tY2xvc2UtYmFzZS1lbGVtZW50LmpzJztcblxuY29uc3Qgb3ZlcmxheVN0YWNrID0gbmV3IEFycmF5PFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50PigpO1xuXG5pZiAoIWlzU2VydmVyKSB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvdmVybGF5U3RhY2suYXQoLTEpPy5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ob3N0OiBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0ICYgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN0YWNrOiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudFtdID0gb3ZlcmxheVN0YWNrLFxuICApIHtcbiAgICB0aGlzLl9ob3N0LmFkZENvbnRyb2xsZXI/Lih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBvdmVybGF5IGlzIG9wZW5lZFxuICBwdWJsaWMgY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vdmVybGF5U3RhY2sucHVzaCh0aGlzLl9ob3N0KTtcbiAgfVxuXG4gIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgb3ZlcmxheSBpcyBjbG9zZWRcbiAgcHVibGljIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlTdGFjay5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmRFbEluZGV4ID0gdGhpcy5fb3ZlcmxheVN0YWNrLmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gdGhpcy5faG9zdCk7XG4gICAgICBpZiAoZmluZEVsSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTdGFjay5zcGxpY2UoZmluZEVsSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZUNvbnRyb2xsZXIsIFJlYWN0aXZlQ29udHJvbGxlckhvc3QgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIFRoaXMgY29udHJvbGxlciBjaGVja3MgZm9yIHNsb3R0ZWQgY2hpbGRyZW4uIEZyb20gdGhlc2UgaXQgZ2VuZXJhdGVzXG4gKiBhIGxpc3Qgb2YgdXNlZCBzbG90IG5hbWVzIChgdW5uYW1lZGAgZm9yIGNoaWxkcmVuIHdpdGhvdXQgYSBzbG90IGF0dHJpYnV0ZSlcbiAqIGFuZCBhZGRzIHRoaXMgdG8gdGhlIGBkYXRhLXNsb3QtbmFtZXNgIGF0dHJpYnV0ZSwgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdC5cbiAqXG4gKiBUaGlzIGFsbG93cyBDU1MgYXR0cmlidXRlIHNlbGVjdG9yIHRvIGRpc3BsYXkvaGlkZS9jb25maWd1cmUgYSBzZWN0aW9uXG4gKiBvZiB0aGUgY29tcG9uZW50IGFzIHJlcXVpcmVkIChzZWUgW2F0dHJ+PXZhbHVlXSBzZWxlY3RvciBzcGVjaWZpY2FsbHkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiAuZXhhbXBsZSB7XG4gKiAgIGRpc3BsYXk6IG5vbmU7XG4gKlxuICogICA6aG9zdChbZGF0YS1zbG90LW5hbWVzfj1cImljb25cIl0pICYge1xuICogICAgIGRpc3BsYXk6IGlubGluZTtcbiAqICAgfVxuICogfVxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9BdHRyaWJ1dGVfc2VsZWN0b3JzXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJTbG90U3RhdGVDb250cm9sbGVyIGltcGxlbWVudHMgUmVhY3RpdmVDb250cm9sbGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHNsb3RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2hvc3Q6IFJlYWN0aXZlQ29udHJvbGxlckhvc3QgJiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gICAgdGhpcy5faG9zdC5hZGRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGhvc3RDb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyByZWFsbHkgbmVlZGVkIHdpdGggU1NSLlxuICAgIHRoaXMuX3N5bmNTbG90cyguLi50aGlzLl9ob3N0LnF1ZXJ5U2VsZWN0b3JBbGwhKCdzbG90JykpO1xuICAgIHRoaXMuX2hvc3Quc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX3Nsb3RjaGFuZ2VIYW5kbGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2hvc3Quc2hhZG93Um9vdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX3Nsb3RjaGFuZ2VIYW5kbGVyKTtcbiAgfVxuXG4gIC8vIFdlIGF2b2lkIHVzaW5nIEFib3J0Q29udHJvbGxlciBoZXJlLCBhcyBpdCB3b3VsZCBtZWFuIGNyZWF0aW5nXG4gIC8vIGEgbmV3IGluc3RhbmNlIGZvciBldmVyeSBTYmJTbG90U3RhdGVDb250cm9sbGVyIGluc3RhbmNlLlxuICBwcml2YXRlIF9zbG90Y2hhbmdlSGFuZGxlciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9zeW5jU2xvdHMoZXZlbnQudGFyZ2V0IGFzIEhUTUxTbG90RWxlbWVudCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfc3luY1Nsb3RzKC4uLnNsb3RzOiBIVE1MU2xvdEVsZW1lbnRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2xvdCBvZiBzbG90cykge1xuICAgICAgY29uc3Qgc2xvdE5hbWUgPSBzbG90Lm5hbWUgfHwgJ3VubmFtZWQnO1xuICAgICAgLy8gV2Ugd2FudCB0byBjaGVjaywgd2hldGhlciBhbiBlbGVtZW50IGlzIHNsb3R0ZWQgb3IgYSB0ZXh0IG5vZGUgd2l0aCBhY3R1YWwgY29udGVudC5cbiAgICAgIGlmIChzbG90LmFzc2lnbmVkTm9kZXMoKS5zb21lKChuKSA9PiAndGFnTmFtZScgaW4gbiB8fCBuLnRleHRDb250ZW50Py50cmltKCkpKSB7XG4gICAgICAgIHRoaXMuc2xvdHMuYWRkKHNsb3ROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2xvdHMuZGVsZXRlKHNsb3ROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX2hvc3QuZ2V0QXR0cmlidXRlKCdkYXRhLXNsb3QtbmFtZXMnKTtcbiAgICBjb25zdCBqb2luZWRTbG90TmFtZXMgPSBbLi4udGhpcy5zbG90c10uc29ydCgpLmpvaW4oJyAnKTtcbiAgICBpZiAoIWpvaW5lZFNsb3ROYW1lcykge1xuICAgICAgdGhpcy5faG9zdC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2xvdC1uYW1lcycpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faG9zdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xvdC1uYW1lcycpICE9PSBqb2luZWRTbG90TmFtZXMpIHtcbiAgICAgIHRoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXNsb3QtbmFtZXMnLCBqb2luZWRTbG90TmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChqb2luZWRTbG90TmFtZXMgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPy4oKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJlbGVtZW50IiwiX2EiXSwibWFwcGluZ3MiOiI7OztNQU1hLDRCQUEyQjtBQUFBLEVBR3RDLElBQVcsU0FBTTs7QUFDZixZQUFPLFVBQUsscUJBQUwsbUJBQXVCO0FBQUEsRUFBQTtBQUFBLEVBR2hDLFlBQTJCLE9BQTZCO0FBQTdCLFNBQUssUUFBTDtBQU5uQixTQUFBLG1CQUFxQyxJQUFJLGdCQUFlO0FBT3pELFNBQUEsTUFBTSxjQUFjLElBQUk7QUFBQSxFQUFBO0FBQUEsRUFHeEIsZ0JBQWE7QUFDZCxRQUFBLENBQUMsS0FBSyxrQkFBa0I7QUFDckIsV0FBQSxtQkFBbUIsSUFBSTs7RUFDOUI7QUFBQSxFQUdLLG1CQUFnQjs7QUFDckIsZUFBSyxxQkFBTCxtQkFBdUI7QUFDdkIsU0FBSyxtQkFBbUI7QUFBQSxFQUFBO0FBRTNCO0FDekJELE1BQU0sbUJBQW1CLENBQUMsVUFBVSxRQUFRLFlBQVksT0FBTztBQUMvRCxNQUFNLG9DQUFvQjtBQUMxQixNQUFNLG9DQUFvQjtNQUViLG1CQUFrQjtBQUFBLEVBQzdCLFlBQ1UsT0FDQSxpQkFBaUIsZUFDakIsaUJBQWlCLGVBQWE7O0FBRjlCLFNBQUssUUFBTDtBQUNBLFNBQWMsaUJBQWQ7QUFDQSxTQUFjLGlCQUFkO0FBRUgscUJBQUEsT0FBTSxrQkFBTiw0QkFB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
390
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL2Nvbm5lY3RlZC1hYm9ydC1jb250cm9sbGVyLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMvZXNjYXBhYmxlLW92ZXJsYXktY29udHJvbGxlci50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL2lkLW9ic2VydmVyLWNvbnRyb2xsZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9jb250cm9sbGVycy9pbmVydC1jb250cm9sbGVyLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMvbGFuZ3VhZ2UtY29udHJvbGxlci50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzL21lZGlhLW1hdGNoZXJzLWNvbnRyb2xsZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9jb250cm9sbGVycy9zbG90LXN0YXRlLWNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZUNvbnRyb2xsZXIsIFJlYWN0aXZlQ29udHJvbGxlckhvc3QgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE5vIHJlcGxhY2VtZW50IHNob3VsZCBiZSBuZWNlc3NhcnksIGFzIHRoaXMgd2FzIGludGVuZGVkXG4gKiAgIGZvciBldmVudCBsaXN0ZW5lcnMsIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgX2Fib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBwdWJsaWMgZ2V0IHNpZ25hbCgpOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fib3J0Q29udHJvbGxlcj8uc2lnbmFsO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IFJlYWN0aXZlQ29udHJvbGxlckhvc3QpIHtcbiAgICB0aGlzLl9ob3N0LmFkZENvbnRyb2xsZXIodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgaG9zdENvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzU2VydmVyLCB0eXBlIFJlYWN0aXZlQ29udHJvbGxlciwgdHlwZSBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0IH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHR5cGUgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2Jhc2UtZWxlbWVudHMvb3Blbi1jbG9zZS1iYXNlLWVsZW1lbnQuanMnO1xuXG5jb25zdCBvdmVybGF5U3RhY2sgPSBuZXcgQXJyYXk8U2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQ+KCk7XG5cbmlmICghaXNTZXJ2ZXIpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG92ZXJsYXlTdGFjay5hdCgtMSk/LmNsb3NlKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyIGltcGxlbWVudHMgUmVhY3RpdmVDb250cm9sbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2hvc3Q6IFJlYWN0aXZlQ29udHJvbGxlckhvc3QgJiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCxcbiAgICBwcml2YXRlIF9vdmVybGF5U3RhY2s6IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50W10gPSBvdmVybGF5U3RhY2ssXG4gICkge1xuICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcj8uKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGhvc3REaXNjb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgb3BlbmVkXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsYXlTdGFjay5wdXNoKHRoaXMuX2hvc3QpO1xuICB9XG5cbiAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBvdmVybGF5IGlzIGNsb3NlZFxuICBwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmluZEVsSW5kZXggPSB0aGlzLl9vdmVybGF5U3RhY2suZmluZEluZGV4KChlKSA9PiBlID09PSB0aGlzLl9ob3N0KTtcbiAgICAgIGlmIChmaW5kRWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVN0YWNrLnNwbGljZShmaW5kRWxJbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBMaXRFbGVtZW50LCB0eXBlIFJlYWN0aXZlQ29udHJvbGxlciB9IGZyb20gJ2xpdCc7XG5cbmNvbnN0IG9ic2VydmVycyA9IG5ldyBXZWFrTWFwPFxuICBOb2RlLFxuICB7IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyOyBjb250cm9sbGVyczogU2V0PFNiYklkUmVmZXJlbmNlQ29udHJvbGxlcjxhbnk+PiB9XG4+KCk7XG5cbi8qKlxuICogVHJhY2tzIGlkIGNoYW5nZXMgaW4gdGhlIERPTSBhbmQgY2FsbHMgY29tcG9uZW50IHdoZW4gbWF0Y2hpbmcgd2l0aCByZXF1ZXN0VXBkYXRlKCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJJZFJlZmVyZW5jZUNvbnRyb2xsZXI8VCBleHRlbmRzIExpdEVsZW1lbnQ+IGltcGxlbWVudHMgUmVhY3RpdmVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBfcm9vdE5vZGU6IERvY3VtZW50IHwgU2hhZG93Um9vdCB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ob3N0OiBULFxuICAgIHByaXZhdGUgX2lkUmVmOiBrZXlvZiBULFxuICAgIHByaXZhdGUgX29ic2VydmVycyA9IG9ic2VydmVycyxcbiAgKSB7XG4gICAgdGhpcy5faG9zdC5hZGRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGhvc3RDb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcm9vdE5vZGUgPSB0aGlzLl9ob3N0LmdldFJvb3ROb2RlKCkgYXMgRG9jdW1lbnQgfCBTaGFkb3dSb290O1xuICAgIGNvbnN0IG9ic2VydmVyQ29udGV4dCA9IHRoaXMuX29ic2VydmVycy5nZXQodGhpcy5fcm9vdE5vZGUpO1xuXG4gICAgaWYgKG9ic2VydmVyQ29udGV4dCkge1xuICAgICAgb2JzZXJ2ZXJDb250ZXh0LmNvbnRyb2xsZXJzLmFkZCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udHJvbGxlcnMgPSBuZXcgU2V0KFt0aGlzXSk7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgbXV0YXRlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgICAgbXV0YXRlZElkcy5hZGQobXV0YXRpb24ub2xkVmFsdWUhKTtcbiAgICAgICAgICAgIG11dGF0ZWRJZHMuYWRkKChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgWy4uLm11dGF0aW9uLmFkZGVkTm9kZXMsIC4uLm11dGF0aW9uLnJlbW92ZWROb2Rlc10pIHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG11dGF0ZWRJZHMuYWRkKG5vZGUuaWQpO1xuICAgICAgICAgICAgICAgIG5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpLmZvckVhY2goKGUpID0+IG11dGF0ZWRJZHMuYWRkKGUuaWQpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiBjb250cm9sbGVycykge1xuICAgICAgICAgIGNvbnN0IGlkID0gY29udHJvbGxlci5faG9zdFtjb250cm9sbGVyLl9pZFJlZl07XG4gICAgICAgICAgaWYgKGlkICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgbXV0YXRlZElkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9ob3N0LnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuX3Jvb3ROb2RlLCB7XG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydpZCddLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX29ic2VydmVycy5zZXQodGhpcy5fcm9vdE5vZGUsIHsgb2JzZXJ2ZXIsIGNvbnRyb2xsZXJzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5fcm9vdE5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlckNvbnRleHQgPSB0aGlzLl9vYnNlcnZlcnMuZ2V0KHRoaXMuX3Jvb3ROb2RlKTtcbiAgICBpZiAoIW9ic2VydmVyQ29udGV4dCkge1xuICAgICAgdGhpcy5fcm9vdE5vZGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9ic2VydmVyQ29udGV4dC5jb250cm9sbGVycy5kZWxldGUodGhpcyk7XG4gICAgaWYgKG9ic2VydmVyQ29udGV4dC5jb250cm9sbGVycy5zaXplID09PSAwKSB7XG4gICAgICBvYnNlcnZlckNvbnRleHQub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLmRlbGV0ZSh0aGlzLl9yb290Tm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm9vdE5vZGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGVsZW1lbnQgYnkgaWQgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgZnJhZ21lbnRcbiAgICovXG4gIHB1YmxpYyBmaW5kKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKGlzU2VydmVyIHx8ICF0aGlzLl9yb290Tm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5faG9zdFt0aGlzLl9pZFJlZl07XG4gICAgICByZXR1cm4gdHlwZW9mIGlkID09ICdzdHJpbmcnID8gdGhpcy5fcm9vdE5vZGU/LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApIDogbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUmVhY3RpdmVDb250cm9sbGVyLCBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0IH0gZnJvbSAnbGl0JztcblxuY29uc3QgSUdOT1JFRF9FTEVNRU5UUyA9IFsnc2NyaXB0JywgJ2hlYWQnLCAndGVtcGxhdGUnLCAnc3R5bGUnXTtcbmNvbnN0IGluZXJ0RWxlbWVudHMgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuY29uc3QgaW5lcnRPdmVybGF5cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XG5cbmV4cG9ydCBjbGFzcyBTYmJJbmVydENvbnRyb2xsZXIgaW1wbGVtZW50cyBSZWFjdGl2ZUNvbnRyb2xsZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfaG9zdDogUmVhY3RpdmVDb250cm9sbGVySG9zdCAmIEhUTUxFbGVtZW50LFxuICAgIHByaXZhdGUgX2luZXJ0RWxlbWVudHMgPSBpbmVydEVsZW1lbnRzLFxuICAgIHByaXZhdGUgX2luZXJ0T3ZlcmxheXMgPSBpbmVydE92ZXJsYXlzLFxuICApIHtcbiAgICB0aGlzLl9ob3N0LmFkZENvbnRyb2xsZXI/Lih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5lcnQoKSkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFwcGxpZXMgaW5lcnQgc3RhdGUgdG8gZXZlcnkgb3RoZXIgZWxlbWVudCBvbiB0aGUgcGFnZSBleGNlcHQgdGhlIG92ZXJsYXkuICovXG4gIHB1YmxpYyBhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgaW5lcnQgc3RhdGUgZnJvbSBwcmV2aW91cyBvcGVuZWQgb3ZlcmxheVxuICAgIGlmICh0aGlzLl9pbmVydE92ZXJsYXlzLnNpemUpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUluZXJ0QXR0cmlidXRlcygpO1xuICAgIH1cblxuICAgIHRoaXMuX2luZXJ0T3ZlcmxheXMuYWRkKHRoaXMuX2hvc3QpO1xuICAgIHRoaXMuX2FkZEluZXJ0QXR0cmlidXRlcygpO1xuICB9XG5cbiAgLyoqIFJlbW92ZXMgaW5lcnQgc3RhdGUuICovXG4gIHB1YmxpYyBkZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50T3ZlcmxheSgpICE9PSB0aGlzLl9ob3N0KSB7XG4gICAgICAvLyBJZiBlLmcuIGEgY29tcG9uZW50IGdldHMgZGlzY29ubmVjdGVkLCBpdCBjb3VsZCBiZSB0aGF0IGl0IGlzIG5vdCB0aGUgdG9wIG1vc3QuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiBkaXJlY3RseSByZW1vdmUgaXQsIGFzIHRoZXJlIGlzIGN1cnJlbnRseSBubyBpbmVydCBzdGF0ZSBhcHBsaWVkLlxuICAgICAgaWYgKHRoaXMuX2luZXJ0T3ZlcmxheXMuaGFzKHRoaXMuX2hvc3QpKSB7XG4gICAgICAgIHRoaXMuX2luZXJ0T3ZlcmxheXMuZGVsZXRlKHRoaXMuX2hvc3QpO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVHJ5aW5nIHRvIHJlbW92ZSBpbmVydCBzdGF0ZSBvZiBhbiBvdmVybGF5IHdoaWNoIG5ldmVyIGhhZCBhbiBhcHBsaWVkIGluZXJ0IHN0YXRlLicsXG4gICAgICAgICAgdGhpcy5faG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbW92ZUluZXJ0QXR0cmlidXRlcygpO1xuICAgIHRoaXMuX2luZXJ0T3ZlcmxheXMuZGVsZXRlKHRoaXMuX2hvc3QpO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgYXMgcHJldmlvdXMgb3BlbmVkIG92ZXJsYXksIHNldCBpdHMgaW5lcnQgc3RhdGUgYWdhaW4uXG4gICAgaWYgKHRoaXMuX2luZXJ0T3ZlcmxheXMuc2l6ZSkge1xuICAgICAgdGhpcy5fYWRkSW5lcnRBdHRyaWJ1dGVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFzc2lnbmVkIGhvc3QgaXMgY3VycmVudGx5IGluZXJ0ICovXG4gIHB1YmxpYyBpc0luZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmVydE92ZXJsYXlzLmhhcyh0aGlzLl9ob3N0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2N1cnJlbnRPdmVybGF5KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9pbmVydE92ZXJsYXlzXS5wb3AoKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlSW5lcnRBdHRyaWJ1dGVzKCk6IHZvaWQge1xuICAgIHRoaXMuX2luZXJ0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnKSkge1xuICAgICAgICBlbGVtZW50LmluZXJ0ID0gZmFsc2U7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNiYi1hcmlhLWhpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2luZXJ0RWxlbWVudHMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEluZXJ0QXR0cmlidXRlcygpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudDogRWxlbWVudCB8IG51bGwgPSB0aGlzLl9jdXJyZW50T3ZlcmxheSgpO1xuXG4gICAgd2hpbGUgKGVsZW1lbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBBcnJheS5mcm9tKChlbGVtZW50Py5wYXJlbnRFbGVtZW50ID8/IGVsZW1lbnQ/LmdldFJvb3ROb2RlKCkpPy5jaGlsZE5vZGVzID8/IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChjaGlsZCk6IGNoaWxkIGlzIEhUTUxFbGVtZW50ID0+XG4gICAgICAgICAgICBjaGlsZCAhPT0gZWxlbWVudCAmJlxuICAgICAgICAgICAgY2hpbGQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgICAgICFJR05PUkVEX0VMRU1FTlRTLmluY2x1ZGVzKGNoaWxkLmxvY2FsTmFtZSksXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9pbmVydEVsZW1lbnRzLmFkZChlbGVtZW50KTtcblxuICAgICAgICAgIGlmICghZWxlbWVudC5pbmVydCkge1xuICAgICAgICAgICAgZWxlbWVudC5pbmVydCA9IHRydWU7XG4gICAgICAgICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnLCB0cnVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgICAgZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gV2UgbmVlZCB0byBwaWVyY2UgdGhyb3VnaCBTaGFkb3cgRE9NIGJvdW5kYXJ5XG4gICAgICBlbGVtZW50ID0gZWxlbWVudD8ucGFyZW50RWxlbWVudCA/PyAoZWxlbWVudD8uZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8uaG9zdCA/PyBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTZXJ2ZXIsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVyLCB0eXBlIFJlYWN0aXZlQ29udHJvbGxlckhvc3QgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLyoqXG4gKiBUaGUgTGFuZ3VhZ2VDb250cm9sbGVyIGlzIGEgcmVhY3RpdmUgY29udHJvbGxlciB0aGF0IG9ic2VydmVzIHRoZSBcImxhbmdcIiBhdHRyaWJ1dGVcbiAqIG9mIHRoZSA8aHRtbD4gdGFnLlxuICogT24gY2hhbmdlIG9mIHRoZSBcImxhbmdcIiBhdHRyaWJ1dGUsIGl0IHdpbGwgcmVxdWVzdCBhbiB1cGRhdGUgb2YgY29ubmVjdGVkXG4gKiBjb21wb25lbnRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9sYW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgaW1wbGVtZW50cyBSZWFjdGl2ZUNvbnRyb2xsZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGVmYXVsdExhbmd1YWdlID0gJ2VuJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3N1cHBvcnRlZExvY2FsZXMgPSBbJ2VuJywgJ2RlJywgJ2ZyJywgJ2l0J107XG5cbiAgLyoqIEEgc2V0IG9mIGNvbm5lY3RlZCBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG5vdGlmaWVkIG9uIGxhbmd1YWdlIGNoYW5nZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xpc3RlbmVycyA9IG5ldyBTZXQ8U2JiTGFuZ3VhZ2VDb250cm9sbGVyPigpO1xuXG4gIC8qKiBNdXRhdGlvbk9ic2VydmVyIHRoYXQgb2JzZXJ2ZXMgdGhlIFwibGFuZ1wiIGF0dHJpYnV0ZSBvZiB0aGUgPGh0bWw+IGVsZW1lbnQuICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9vYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICBpZiAobXV0YXRpb25zWzBdLm9sZFZhbHVlICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykpIHtcbiAgICAgICAgICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX2xpc3RlbmVycy5mb3JFYWNoKChsKSA9PiBsLl9jYWxsSGFuZGxlcnMoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfb2JzZXJ2ZXJDb25maWcgPSB7XG4gICAgYXR0cmlidXRlRmlsdGVyOiBbJ2xhbmcnXSxcbiAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcbiAgfTtcblxuICAvKiogR2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlLiAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBjdXJyZW50KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPVxuICAgICAgKHJlYWRDb25maWcoKS5sYW5ndWFnZSA/P1xuICAgICAgICAoaXNTZXJ2ZXJcbiAgICAgICAgICA/IFNiYkxhbmd1YWdlQ29udHJvbGxlci5fZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykpKSB8fFxuICAgICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG5cbiAgICAvLyBTdXBwb3J0IGUuZy4gY2FzZXMgbGlrZSBgZGUtY2hgLlxuICAgIGNvbnN0IGxhbmdBdHRyaWJ1dGVOb3JtYWxpemVkID0gbGFuZ3VhZ2Uuc3BsaXQoJy0nKVswXTtcbiAgICByZXR1cm4gU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGxhbmdBdHRyaWJ1dGVOb3JtYWxpemVkKVxuICAgICAgPyBsYW5nQXR0cmlidXRlTm9ybWFsaXplZFxuICAgICAgOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuX2RlZmF1bHRMYW5ndWFnZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICovXG4gIHB1YmxpYyBnZXQgY3VycmVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTYmJMYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZpb3VzTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2hhbmRsZXJzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ob3N0OiBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0KSB7XG4gICAgdGhpcy5faG9zdC5hZGRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgLyoqIEFkZCBhIGxhbmd1YWdlIGNoYW5nZSBoYW5kbGVyLiAqL1xuICBwdWJsaWMgd2l0aEhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIC8vIFdlIHVzZSB1bnNoaWZ0IGhlcmUsIHRvIHByZXBlbmQgYWRkaXRpb25hbCBoYW5kbGVycy5cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCByZXF1ZXN0VXBkYXRlIGlzIGNhbGxlZCBhZnRlciB0aGUgb3RoZXIgaGFuZGxlcnMuXG4gICAgdGhpcy5faGFuZGxlcnMudW5zaGlmdChoYW5kbGVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIVNiYkxhbmd1YWdlQ29udHJvbGxlci5fbGlzdGVuZXJzLnNpemUpIHtcbiAgICAgIFNiYkxhbmd1YWdlQ29udHJvbGxlci5fb2JzZXJ2ZXIhLm9ic2VydmUoXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9vYnNlcnZlckNvbmZpZyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLl9saXN0ZW5lcnMuYWRkKHRoaXMpO1xuICAgIGlmICh0aGlzLl9wcmV2aW91c0xhbmd1YWdlICE9PSB0aGlzLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuX2NhbGxIYW5kbGVycyh0aGlzLl9wcmV2aW91c0xhbmd1YWdlICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9wcmV2aW91c0xhbmd1YWdlID0gdGhpcy5jdXJyZW50O1xuICAgIFNiYkxhbmd1YWdlQ29udHJvbGxlci5fbGlzdGVuZXJzLmRlbGV0ZSh0aGlzKTtcbiAgICBpZiAoIVNiYkxhbmd1YWdlQ29udHJvbGxlci5fbGlzdGVuZXJzLnNpemUpIHtcbiAgICAgIFNiYkxhbmd1YWdlQ29udHJvbGxlci5fb2JzZXJ2ZXIhLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jYWxsSGFuZGxlcnMocmVxdWVzdFVwZGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLl9oYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICAgIGlmIChyZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLl9ob3N0LnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIFNiYkJyZWFrcG9pbnRNZWRpdW1NaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiVHlwb1NjYWxlRGVmYXVsdCxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZGVzaWduLXRva2Vucyc7XG5pbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBSZWFjdGl2ZUNvbnRyb2xsZXIsIHR5cGUgUmVhY3RpdmVDb250cm9sbGVySG9zdCB9IGZyb20gJ2xpdCc7XG5cbmNvbnN0IHB4VG9SZW0gPSAocHg6IG51bWJlcik6IG51bWJlciA9PiBweCAvIFNiYlR5cG9TY2FsZURlZmF1bHQ7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuZXhwb3J0IGNvbnN0IFNiYk1lZGlhUXVlcnlGb3JjZWRDb2xvcnMgPSAnKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSknO1xuZXhwb3J0IGNvbnN0IFNiYk1lZGlhUXVlcnlIb3ZlciA9ICcoYW55LWhvdmVyOiBob3ZlciknO1xuZXhwb3J0IGNvbnN0IFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlID0gJyhwb2ludGVyOiBjb2Fyc2UpJztcbmV4cG9ydCBjb25zdCBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludE1lZGl1bUFuZEFib3ZlID0gYChtaW4td2lkdGg6ICR7cHhUb1JlbShTYmJCcmVha3BvaW50TWVkaXVtTWluKX1yZW0pYDtcbmV4cG9ydCBjb25zdCBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3cgPSBgKG1heC13aWR0aDogJHtweFRvUmVtKFNiYkJyZWFrcG9pbnRTbWFsbE1heCl9cmVtKWA7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG4vKipcbiAqIEEgY2FsbGJhY2ssIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBtZWRpYSBxdWVyeSBtYXRjaFxuICogc3RhdHVzIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFNiYk1lZGlhTWF0Y2hlckhhbmRsZXIgPSAobWF0Y2hlczogYm9vbGVhbikgPT4gdm9pZDtcblxuaW50ZXJmYWNlIE1lZGlhUXVlcnlFbnRyeSB7XG4gIG1lZGlhUXVlcnlMaXN0OiBNZWRpYVF1ZXJ5TGlzdDtcbiAgZXZlbnRIYW5kbGVyOiAoZXZlbnQ6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHZvaWQ7XG4gIGhhbmRsZXJzOiBTZXQ8U2JiTWVkaWFNYXRjaGVySGFuZGxlcj47XG59XG5cbi8qKlxuICogV2Ugd2FudCB0byBjYWNoZSBNZWRpYVF1ZXJ5TGlzdCBpbnN0YW5jZXMgYW5kIGNvcnJlc3BvbmRpbmdcbiAqIGV2ZW50IGhhbmRsZXJzLCBhcyBhIG11bHRpdHVkZSBvZiBldmVudCBoYW5kbGVycyBvbiBnbG9iYWwgb2JqZWN0c1xuICogY2FuIGRlZ3JhZGUgcGVyZm9ybWFuY2Ugd2l0aCB0aW1lLlxuICovXG5jb25zdCBtZWRpYVF1ZXJ5UmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgTWVkaWFRdWVyeUVudHJ5PigpO1xuXG4vKipcbiAqIFRoaXMgY29udHJvbGxlciBhbGxvd3MgbGlzdGVuaW5nIHRvIG1lZGlhIHF1ZXJ5IGNoYW5nZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIG5ldyBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyKHRoaXMsIHtcbiAqICAgW1NiYkZvcmNlZENvbG9yc1F1ZXJ5XTogKG1hdGNoZXMpID0+IGRvU29tZXRoaW5nKG1hdGNoZXMpLFxuICogfSlcbiAqL1xuZXhwb3J0IGNsYXNzIFNiYk1lZGlhTWF0Y2hlckNvbnRyb2xsZXIgaW1wbGVtZW50cyBSZWFjdGl2ZUNvbnRyb2xsZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgaG9zdDogUmVhY3RpdmVDb250cm9sbGVySG9zdCxcbiAgICBwcml2YXRlIF9xdWVyaWVzOiBSZWNvcmQ8c3RyaW5nLCBTYmJNZWRpYU1hdGNoZXJIYW5kbGVyPixcbiAgKSB7XG4gICAgaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gcXVlcnkgbWF0Y2hlcy4gUmV0dXJucyBudWxsIHdpdGggU1NSLlxuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIGNoZWNrIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHF1ZXJ5IG1hdGNoZXMgb3IgbnVsbCB3aXRoIFNTUi5cbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzKHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgLy8gSWYgd2UgdXNlIHRoZSBjYWNoZWQgaW5zdGFuY2UsIFdlYmtpdCBzZWVtcyB0byB1cGRhdGUgdGhlIHN0YXRlIGEgdGljayB0b28gbGF0ZS5cbiAgICAvLyBEdWUgdG8gdGhpcyB3ZSBkaXJlY3RseSB1c2UgbWF0Y2hNZWRpYSBoZXJlLlxuICAgIHJldHVybiBpc1NlcnZlciA/IG51bGwgOiBtYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICB9XG5cbiAgcHVibGljIGhvc3RDb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcXVlcnksIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX3F1ZXJpZXMpKSB7XG4gICAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gbWVkaWFRdWVyeVJlZ2lzdHJ5LmdldChxdWVyeSk7XG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBtZWRpYVF1ZXJ5LmhhbmRsZXJzLmFkZChoYW5kbGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lZGlhUXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbmV3IFNldChbaGFuZGxlcl0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSAoZTogTWVkaWFRdWVyeUxpc3RFdmVudCk6IHZvaWQgPT5cbiAgICAgICAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKGUubWF0Y2hlcykpO1xuICAgICAgICBtZWRpYVF1ZXJ5TGlzdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudEhhbmRsZXIpO1xuICAgICAgICBtZWRpYVF1ZXJ5UmVnaXN0cnkuc2V0KHF1ZXJ5LCB7IG1lZGlhUXVlcnlMaXN0LCBoYW5kbGVycywgZXZlbnRIYW5kbGVyIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBob3N0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW3F1ZXJ5LCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9xdWVyaWVzKSkge1xuICAgICAgY29uc3QgbWVkaWFRdWVyeSA9IG1lZGlhUXVlcnlSZWdpc3RyeS5nZXQocXVlcnkpO1xuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgbWVkaWFRdWVyeS5oYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgICAgIGlmICghbWVkaWFRdWVyeS5oYW5kbGVycy5zaXplKSB7XG4gICAgICAgICAgbWVkaWFRdWVyeVJlZ2lzdHJ5LmRlbGV0ZShxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUmVhY3RpdmVDb250cm9sbGVyLCBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0IH0gZnJvbSAnbGl0JztcblxuLyoqXG4gKiBUaGlzIGNvbnRyb2xsZXIgY2hlY2tzIGZvciBzbG90dGVkIGNoaWxkcmVuLiBGcm9tIHRoZXNlIGl0IGdlbmVyYXRlc1xuICogYSBsaXN0IG9mIHVzZWQgc2xvdCBuYW1lcyAoYHVubmFtZWRgIGZvciBjaGlsZHJlbiB3aXRob3V0IGEgc2xvdCBhdHRyaWJ1dGUpXG4gKiBhbmQgYWRkcyB0aGlzIHRvIHRoZSBgZGF0YS1zbG90LW5hbWVzYCBhdHRyaWJ1dGUsIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3QuXG4gKlxuICogVGhpcyBhbGxvd3MgQ1NTIGF0dHJpYnV0ZSBzZWxlY3RvciB0byBkaXNwbGF5L2hpZGUvY29uZmlndXJlIGEgc2VjdGlvblxuICogb2YgdGhlIGNvbXBvbmVudCBhcyByZXF1aXJlZCAoc2VlIFthdHRyfj12YWx1ZV0gc2VsZWN0b3Igc3BlY2lmaWNhbGx5KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLmV4YW1wbGUge1xuICogICBkaXNwbGF5OiBub25lO1xuICpcbiAqICAgOmhvc3QoW2RhdGEtc2xvdC1uYW1lc349XCJpY29uXCJdKSAmIHtcbiAqICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQXR0cmlidXRlX3NlbGVjdG9yc1xuICovXG5leHBvcnQgY2xhc3MgU2JiU2xvdFN0YXRlQ29udHJvbGxlciBpbXBsZW1lbnRzIFJlYWN0aXZlQ29udHJvbGxlciB7XG4gIHB1YmxpYyByZWFkb25seSBzbG90cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ob3N0OiBSZWFjdGl2ZUNvbnRyb2xsZXJIb3N0ICYgSFRNTEVsZW1lbnQsXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIHRoaXMuX2hvc3QuYWRkQ29udHJvbGxlcih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBob3N0Q29ubmVjdGVkKCk6IHZvaWQge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgcmVhbGx5IG5lZWRlZCB3aXRoIFNTUi5cbiAgICB0aGlzLl9zeW5jU2xvdHMoLi4udGhpcy5faG9zdC5xdWVyeVNlbGVjdG9yQWxsISgnc2xvdCcpKTtcbiAgICB0aGlzLl9ob3N0LnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9zbG90Y2hhbmdlSGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgaG9zdERpc2Nvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9ob3N0LnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9zbG90Y2hhbmdlSGFuZGxlcik7XG4gIH1cblxuICAvLyBXZSBhdm9pZCB1c2luZyBBYm9ydENvbnRyb2xsZXIgaGVyZSwgYXMgaXQgd291bGQgbWVhbiBjcmVhdGluZ1xuICAvLyBhIG5ldyBpbnN0YW5jZSBmb3IgZXZlcnkgU2JiU2xvdFN0YXRlQ29udHJvbGxlciBpbnN0YW5jZS5cbiAgcHJpdmF0ZSBfc2xvdGNoYW5nZUhhbmRsZXIgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5fc3luY1Nsb3RzKGV2ZW50LnRhcmdldCBhcyBIVE1MU2xvdEVsZW1lbnQpO1xuICB9O1xuXG4gIHByaXZhdGUgX3N5bmNTbG90cyguLi5zbG90czogSFRNTFNsb3RFbGVtZW50W10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHNsb3Qgb2Ygc2xvdHMpIHtcbiAgICAgIGNvbnN0IHNsb3ROYW1lID0gc2xvdC5uYW1lIHx8ICd1bm5hbWVkJztcbiAgICAgIC8vIFdlIHdhbnQgdG8gY2hlY2ssIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBzbG90dGVkIG9yIGEgdGV4dCBub2RlIHdpdGggYWN0dWFsIGNvbnRlbnQuXG4gICAgICBpZiAoc2xvdC5hc3NpZ25lZE5vZGVzKCkuc29tZSgobikgPT4gJ3RhZ05hbWUnIGluIG4gfHwgbi50ZXh0Q29udGVudD8udHJpbSgpKSkge1xuICAgICAgICB0aGlzLnNsb3RzLmFkZChzbG90TmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNsb3RzLmRlbGV0ZShzbG90TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9ob3N0LmdldEF0dHJpYnV0ZSgnZGF0YS1zbG90LW5hbWVzJyk7XG4gICAgY29uc3Qgam9pbmVkU2xvdE5hbWVzID0gWy4uLnRoaXMuc2xvdHNdLnNvcnQoKS5qb2luKCcgJyk7XG4gICAgaWYgKCFqb2luZWRTbG90TmFtZXMpIHtcbiAgICAgIHRoaXMuX2hvc3QucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNsb3QtbmFtZXMnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2hvc3QuZ2V0QXR0cmlidXRlKCdkYXRhLXNsb3QtbmFtZXMnKSAhPT0gam9pbmVkU2xvdE5hbWVzKSB7XG4gICAgICB0aGlzLl9ob3N0LnNldEF0dHJpYnV0ZSgnZGF0YS1zbG90LW5hbWVzJywgam9pbmVkU2xvdE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoam9pbmVkU2xvdE5hbWVzICE9PSBvbGRWYWx1ZSkge1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz8uKCk7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsiZWxlbWVudCIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7TUFNYSw0QkFBMkI7QUFBQSxFQUd0QyxJQUFXLFNBQU07O0FBQ2YsWUFBTyxVQUFLLHFCQUFMLG1CQUF1QjtBQUFBLEVBQUE7QUFBQSxFQUdoQyxZQUEyQixPQUE2QjtBQUE3QixTQUFLLFFBQUw7QUFObkIsU0FBQSxtQkFBcUMsSUFBSSxnQkFBZTtBQU96RCxTQUFBLE1BQU0sY0FBYyxJQUFJO0FBQUEsRUFBQTtBQUFBLEVBR3hCLGdCQUFh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
@@ -1 +1 @@
1
- {"version":3,"file":"native-date-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/datetime/native-date-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAoC,MAAM,mBAAmB,CAAC;AAUlF,qBAAa,iBAAkB,SAAQ,WAAW,CAAC,IAAI,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAExB,gBAAgB,GAAE,MAAW;IAKhD,uCAAuC;IAChC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIlC,wCAAwC;IACjC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAInC,sCAAsC;IAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIlC,kDAAkD;IAC3C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIvC,yCAAyC;IAClC,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAS9D;;;;OAIG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;IAKlE,iGAAiG;IAC1F,YAAY,IAAI,MAAM,EAAE;IAK/B;;;;OAIG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;IAM/D,iBAAiB,IAAI,MAAM;IAIlC,6EAA6E;IACtE,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI5C,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAIpB,+FAA+F;IACxF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBlE,gDAAgD;IACzC,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAIxC,uDAAuD;IAChD,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI;IAI3D,mDAAmD;IAC5C,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI9B;;;;OAIG;IACI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxD;;;;OAIG;IACI,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1D,yFAAyF;IAClF,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtD,6EAA6E;IAC7D,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;IAkB9E,+DAA+D;IACxD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAmB,GAAG,IAAI,GAAG,IAAI;IAkCrE,OAAO,IAAI,IAAI;IAI/B;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAId,gEAAgE;IAChE,OAAO,CAAC,uBAAuB;CAShC;AAED,eAAO,MAAM,kBAAkB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"native-date-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/datetime/native-date-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAoC,MAAM,mBAAmB,CAAC;AAUlF,qBAAa,iBAAkB,SAAQ,WAAW,CAAC,IAAI,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAExB,gBAAgB,GAAE,MAAW;IAKhD,uCAAuC;IAChC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIlC,wCAAwC;IACjC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAInC,sCAAsC;IAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIlC,kDAAkD;IAC3C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIvC,yCAAyC;IAClC,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM;IAS9D;;;;OAIG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;IAKlE,iGAAiG;IAC1F,YAAY,IAAI,MAAM,EAAE;IAK/B;;;;OAIG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;IAM/D,iBAAiB,IAAI,MAAM;IAIlC,6EAA6E;IACtE,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI5C,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAIpB,+FAA+F;IACxF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBlE,gDAAgD;IACzC,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAIxC,uDAAuD;IAChD,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI;IAI3D,mDAAmD;IAC5C,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI9B;;;;OAIG;IACI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxD;;;;OAIG;IACI,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1D,yFAAyF;IAClF,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtD,6EAA6E;IAC7D,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;IAkB9E,+DAA+D;IACxD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAmB,GAAG,IAAI,GAAG,IAAI;IAuCrE,OAAO,IAAI,IAAI;IAI/B;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAId,gEAAgE;IAChE,OAAO,CAAC,uBAAuB;CAShC;AAED,eAAO,MAAM,kBAAkB,mBAA0B,CAAC"}