@sbb-esta/lyne-elements 2.0.3 → 2.1.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 (195) hide show
  1. package/accordion/accordion.d.ts.map +1 -1
  2. package/accordion.js +6 -6
  3. package/alert/alert.js +8 -8
  4. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  5. package/autocomplete-grid/autocomplete-grid-button.js +4 -4
  6. package/autocomplete-grid/autocomplete-grid-optgroup.js +4 -4
  7. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +1 -1
  8. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  9. package/autocomplete-grid/autocomplete-grid-option.js +10 -10
  10. package/autocomplete-grid/autocomplete-grid-row.js +4 -4
  11. package/autocomplete.js +92 -89
  12. package/breadcrumb/breadcrumb-group.js +4 -4
  13. package/button/accent-button-link.js +9 -9
  14. package/button/accent-button-static.js +6 -6
  15. package/button/accent-button.js +6 -6
  16. package/button/button-link.js +7 -7
  17. package/button/button-static.js +7 -7
  18. package/button/button.js +8 -8
  19. package/button/common.js +1 -1
  20. package/button/mini-button-group.js +8 -8
  21. package/button/secondary-button-link.js +7 -7
  22. package/button/secondary-button-static.js +7 -7
  23. package/button/secondary-button.js +3 -3
  24. package/button/transparent-button-link.js +6 -6
  25. package/button/transparent-button-static.js +5 -5
  26. package/button/transparent-button.js +6 -6
  27. package/card/card-badge.js +9 -9
  28. package/card/card-button.js +5 -5
  29. package/card/card-link.js +7 -7
  30. package/checkbox/checkbox-panel.js +16 -16
  31. package/checkbox/checkbox.js +15 -15
  32. package/checkbox/common.js +3 -3
  33. package/clock.js +8 -8
  34. package/container/container/container.d.ts +1 -1
  35. package/container/container/container.d.ts.map +1 -1
  36. package/container/container.js +21 -21
  37. package/container/sticky-bar/sticky-bar.d.ts +1 -1
  38. package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  39. package/container/sticky-bar.js +4 -4
  40. package/core/base-elements.js +8 -8
  41. package/core/controllers.js +4 -4
  42. package/core/datetime/date-adapter.d.ts +1 -1
  43. package/core/datetime/date-adapter.d.ts.map +1 -1
  44. package/core/datetime/native-date-adapter.d.ts +1 -1
  45. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  46. package/core/datetime.js +6 -6
  47. package/core/dom/scroll.d.ts +1 -1
  48. package/core/dom/scroll.d.ts.map +1 -1
  49. package/core/dom.js +39 -39
  50. package/core/eventing.js +4 -4
  51. package/core/mixins.js +18 -18
  52. package/core/styles/core.scss +21 -2
  53. package/core/testing.js +14 -14
  54. package/core.css +18 -2
  55. package/custom-elements.json +364 -428
  56. package/datepicker/common/datepicker-association-controllers.d.ts +21 -0
  57. package/datepicker/common/datepicker-association-controllers.d.ts.map +1 -0
  58. package/datepicker/common/datepicker-button.d.ts +17 -9
  59. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  60. package/datepicker/common.d.ts +1 -0
  61. package/datepicker/common.d.ts.map +1 -1
  62. package/datepicker/common.js +130 -92
  63. package/datepicker/datepicker/datepicker.d.ts +19 -4
  64. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  65. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +14 -8
  66. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  67. package/datepicker/datepicker-toggle.js +108 -112
  68. package/datepicker/datepicker.js +95 -80
  69. package/development/accordion/accordion.d.ts.map +1 -1
  70. package/development/accordion.js +1 -1
  71. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  72. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +1 -1
  73. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  74. package/development/autocomplete-grid/autocomplete-grid-option.js +3 -3
  75. package/development/autocomplete.js +24 -8
  76. package/development/button/common.js +4 -2
  77. package/development/calendar.js +1 -1
  78. package/development/container/container/container.d.ts +1 -1
  79. package/development/container/container/container.d.ts.map +1 -1
  80. package/development/container/container.js +17 -1
  81. package/development/container/sticky-bar/sticky-bar.d.ts +1 -1
  82. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  83. package/development/container/sticky-bar.js +9 -1
  84. package/development/core/datetime/date-adapter.d.ts +1 -1
  85. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  86. package/development/core/datetime/native-date-adapter.d.ts +1 -1
  87. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  88. package/development/core/datetime.js +1 -1
  89. package/development/core/dom/scroll.d.ts +1 -1
  90. package/development/core/dom/scroll.d.ts.map +1 -1
  91. package/development/core/dom.js +4 -4
  92. package/development/core/mixins.js +1 -1
  93. package/development/datepicker/common/datepicker-association-controllers.d.ts +21 -0
  94. package/development/datepicker/common/datepicker-association-controllers.d.ts.map +1 -0
  95. package/development/datepicker/common/datepicker-button.d.ts +17 -9
  96. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  97. package/development/datepicker/common.d.ts +1 -0
  98. package/development/datepicker/common.d.ts.map +1 -1
  99. package/development/datepicker/common.js +139 -90
  100. package/development/datepicker/datepicker/datepicker.d.ts +19 -4
  101. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  102. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +14 -8
  103. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  104. package/development/datepicker/datepicker-toggle.js +65 -69
  105. package/development/datepicker/datepicker.js +54 -36
  106. package/development/dialog/dialog/dialog.d.ts +2 -0
  107. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  108. package/development/dialog/dialog.js +37 -11
  109. package/development/menu/menu/menu.d.ts.map +1 -1
  110. package/development/menu/menu.js +35 -12
  111. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  112. package/development/navigation/navigation.js +15 -8
  113. package/development/option/option/option-base-element.d.ts +3 -2
  114. package/development/option/option/option-base-element.d.ts.map +1 -1
  115. package/development/option/option.js +15 -8
  116. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  117. package/development/overlay/overlay.d.ts.map +1 -1
  118. package/development/overlay.js +29 -13
  119. package/development/popover/popover/popover.d.ts.map +1 -1
  120. package/development/popover/popover.js +16 -13
  121. package/development/select/select.d.ts +11 -0
  122. package/development/select/select.d.ts.map +1 -1
  123. package/development/select.js +60 -9
  124. package/development/toast/toast.d.ts.map +1 -1
  125. package/development/toast.js +14 -8
  126. package/development/toggle/toggle.js +1 -1
  127. package/development/train/train-wagon.js +1 -1
  128. package/dialog/dialog/dialog.d.ts +2 -0
  129. package/dialog/dialog/dialog.d.ts.map +1 -1
  130. package/dialog/dialog-content.js +3 -3
  131. package/dialog/dialog-title.js +8 -8
  132. package/dialog/dialog.js +59 -49
  133. package/divider.js +12 -12
  134. package/file-selector/file-selector-dropzone.js +5 -5
  135. package/file-selector/file-selector.js +6 -6
  136. package/flip-card/flip-card-details.js +4 -4
  137. package/flip-card/flip-card-summary.js +9 -9
  138. package/header/header-button.js +5 -5
  139. package/header/header-link.js +5 -5
  140. package/icon.js +36 -36
  141. package/link/block-link-button.js +4 -4
  142. package/link/block-link-static.js +9 -9
  143. package/link/block-link.js +4 -4
  144. package/link/common.js +16 -16
  145. package/link/link-button.js +7 -7
  146. package/link/link-static.js +7 -7
  147. package/link/link.js +4 -4
  148. package/link-list/common.js +12 -12
  149. package/loading-indicator-circle.js +11 -11
  150. package/map-container.js +4 -4
  151. package/menu/common.js +7 -7
  152. package/menu/menu/menu.d.ts.map +1 -1
  153. package/menu/menu-button.js +8 -8
  154. package/menu/menu-link.js +6 -6
  155. package/menu/menu.js +64 -42
  156. package/navigation/navigation/navigation.d.ts.map +1 -1
  157. package/navigation/navigation-button.js +4 -4
  158. package/navigation/navigation-link.js +7 -7
  159. package/navigation/navigation-list.js +4 -4
  160. package/navigation/navigation-marker.js +3 -3
  161. package/navigation/navigation.js +21 -20
  162. package/notification.js +17 -17
  163. package/option/optgroup.js +11 -11
  164. package/option/option/option-base-element.d.ts +3 -2
  165. package/option/option/option-base-element.d.ts.map +1 -1
  166. package/option/option.js +113 -101
  167. package/overlay/overlay-base-element.d.ts.map +1 -1
  168. package/overlay/overlay.d.ts.map +1 -1
  169. package/overlay.js +87 -84
  170. package/package.json +1 -1
  171. package/paginator/common.js +6 -6
  172. package/popover/popover/popover.d.ts.map +1 -1
  173. package/popover/popover.js +73 -73
  174. package/radio-button/radio-button-panel.js +5 -5
  175. package/screen-reader-only.js +5 -5
  176. package/select/select.d.ts +11 -0
  177. package/select/select.d.ts.map +1 -1
  178. package/select.js +111 -83
  179. package/slider.js +8 -8
  180. package/standard-theme.css +18 -2
  181. package/status.js +3 -3
  182. package/stepper/step-label.js +4 -4
  183. package/table/table-wrapper.js +4 -4
  184. package/tabs/tab-group.js +24 -24
  185. package/tabs/tab.js +3 -3
  186. package/tag/tag-group.js +7 -7
  187. package/teaser-product/common.js +5 -5
  188. package/teaser-product/teaser-product-static.js +2 -2
  189. package/timetable-occupancy-icon.js +3 -3
  190. package/timetable-occupancy.js +6 -6
  191. package/toast/toast.d.ts.map +1 -1
  192. package/toast.js +58 -54
  193. package/toggle/toggle-option.js +11 -11
  194. package/toggle-check.js +5 -5
  195. package/train/train.js +28 -28
@@ -50,7 +50,7 @@ const style = css`*,
50
50
  --sbb-dialog-content-transition: transform var(--sbb-dialog-animation-duration)
51
51
  var(--sbb-dialog-animation-easing);
52
52
  --sbb-dialog-actions-border: var(--sbb-border-width-1x) solid var(--sbb-color-cloud);
53
- display: block;
53
+ display: none;
54
54
  position: fixed;
55
55
  inset: var(--sbb-dialog-inset);
56
56
  z-index: var(--sbb-dialog-z-index, var(--sbb-overlay-default-z-index));
@@ -76,17 +76,25 @@ const style = css`*,
76
76
  }
77
77
  }
78
78
 
79
- :host(:is([data-state=opened], [data-state=opening])) {
79
+ :host([data-state]:not([data-state=closed])) {
80
+ display: block;
81
+ }
82
+
83
+ :host(:is([data-state=opening], [data-state=opened])) {
80
84
  --sbb-dialog-pointer-events: all;
81
85
  --sbb-dialog-backdrop-color: var(--sbb-color-milk);
82
86
  }
83
87
  @media (min-width: calc(52.5rem)) {
84
- :host(:is([data-state=opened], [data-state=opening])) {
88
+ :host(:is([data-state=opening], [data-state=opened])) {
85
89
  --sbb-dialog-backdrop-visibility: visible;
86
90
  --sbb-dialog-backdrop-pointer-events: all;
87
91
  }
88
92
  }
89
93
 
94
+ :host([backdrop=translucent]:is([data-state=opening], [data-state=opened])) {
95
+ --sbb-dialog-backdrop-color: var(--sbb-color-black-alpha-50);
96
+ }
97
+
90
98
  :host([data-hide-header]) {
91
99
  --sbb-dialog-header-margin-block-start: calc(var(--sbb-dialog-header-height) * -1);
92
100
  }
@@ -205,7 +213,7 @@ const style = css`*,
205
213
  }`;
206
214
  let nextId = 0;
207
215
  let SbbDialogElement = (() => {
208
- var _backdropAction_accessor_storage, _a;
216
+ var _backdropAction_accessor_storage, _backdrop_accessor_storage, _a;
209
217
  let _classDecorators = [customElement("sbb-dialog")];
210
218
  let _classDescriptor;
211
219
  let _classExtraInitializers = [];
@@ -214,13 +222,18 @@ let SbbDialogElement = (() => {
214
222
  let _backdropAction_decorators;
215
223
  let _backdropAction_initializers = [];
216
224
  let _backdropAction_extraInitializers = [];
225
+ let _backdrop_decorators;
226
+ let _backdrop_initializers = [];
227
+ let _backdrop_extraInitializers = [];
217
228
  _a = class extends _classSuper {
218
229
  constructor() {
219
230
  var _a2, _b;
220
231
  super();
221
232
  __privateAdd(this, _backdropAction_accessor_storage);
233
+ __privateAdd(this, _backdrop_accessor_storage);
222
234
  __privateSet(this, _backdropAction_accessor_storage, __runInitializers(this, _backdropAction_initializers, "close"));
223
- this._dialogContentResizeObserver = (__runInitializers(this, _backdropAction_extraInitializers), new ResizeController(this, {
235
+ __privateSet(this, _backdrop_accessor_storage, (__runInitializers(this, _backdropAction_extraInitializers), __runInitializers(this, _backdrop_initializers, "opaque")));
236
+ this._dialogContentResizeObserver = (__runInitializers(this, _backdrop_extraInitializers), new ResizeController(this, {
224
237
  target: null,
225
238
  skipInitial: true,
226
239
  callback: () => setTimeout(() => this._onContentResize())
@@ -257,9 +270,16 @@ let SbbDialogElement = (() => {
257
270
  set backdropAction(value) {
258
271
  __privateSet(this, _backdropAction_accessor_storage, value);
259
272
  }
273
+ /** Backdrop density. */
274
+ get backdrop() {
275
+ return __privateGet(this, _backdrop_accessor_storage);
276
+ }
277
+ set backdrop(value) {
278
+ __privateSet(this, _backdrop_accessor_storage, value);
279
+ }
260
280
  /** Opens the component. */
261
281
  open() {
262
- var _a2;
282
+ var _a2, _b;
263
283
  if (this.state !== "closed") {
264
284
  return;
265
285
  }
@@ -271,6 +291,7 @@ let SbbDialogElement = (() => {
271
291
  if (!this.willOpen.emit()) {
272
292
  return;
273
293
  }
294
+ (_b = this.showPopover) == null ? void 0 : _b.call(this);
274
295
  this.state = "opening";
275
296
  overlayRefs.push(this);
276
297
  this._dialogContentResizeObserver.observe(this._dialogContentElement);
@@ -283,14 +304,15 @@ let SbbDialogElement = (() => {
283
304
  return isZeroAnimationDuration(this, "--sbb-dialog-animation-duration");
284
305
  }
285
306
  handleClosing() {
286
- var _a2, _b, _c;
307
+ var _a2, _b, _c, _d;
287
308
  this._setHideHeaderDataAttribute(false);
288
309
  (_a2 = this._dialogContentElement) == null ? void 0 : _a2.scrollTo(0, 0);
289
310
  this.state = "closed";
311
+ (_b = this.hidePopover) == null ? void 0 : _b.call(this);
290
312
  this.inertController.deactivate();
291
313
  setModalityOnNextFocus(this.lastFocusedElement);
292
- (_b = this.lastFocusedElement) == null ? void 0 : _b.focus();
293
- (_c = this.openOverlayController) == null ? void 0 : _c.abort();
314
+ (_c = this.lastFocusedElement) == null ? void 0 : _c.focus();
315
+ (_d = this.openOverlayController) == null ? void 0 : _d.abort();
294
316
  this.focusHandler.disconnect();
295
317
  if (this._dialogContentElement) {
296
318
  this._dialogContentResizeObserver.unobserve(this._dialogContentElement);
@@ -422,12 +444,16 @@ let SbbDialogElement = (() => {
422
444
  <sbb-screen-reader-only aria-live="polite"></sbb-screen-reader-only>
423
445
  `;
424
446
  }
425
- }, _backdropAction_accessor_storage = new WeakMap(), _classThis = _a, (() => {
447
+ }, _backdropAction_accessor_storage = new WeakMap(), _backdrop_accessor_storage = new WeakMap(), _classThis = _a, (() => {
426
448
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
427
449
  _backdropAction_decorators = [property({ attribute: "backdrop-action" })];
450
+ _backdrop_decorators = [property({ attribute: "backdrop", reflect: true })];
428
451
  __esDecorate(_a, null, _backdropAction_decorators, { kind: "accessor", name: "backdropAction", static: false, private: false, access: { has: (obj) => "backdropAction" in obj, get: (obj) => obj.backdropAction, set: (obj, value) => {
429
452
  obj.backdropAction = value;
430
453
  } }, metadata: _metadata }, _backdropAction_initializers, _backdropAction_extraInitializers);
454
+ __esDecorate(_a, null, _backdrop_decorators, { kind: "accessor", name: "backdrop", static: false, private: false, access: { has: (obj) => "backdrop" in obj, get: (obj) => obj.backdrop, set: (obj, value) => {
455
+ obj.backdrop = value;
456
+ } }, metadata: _metadata }, _backdrop_initializers, _backdrop_extraInitializers);
431
457
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
432
458
  _classThis = _classDescriptor.value;
433
459
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -437,4 +463,4 @@ let SbbDialogElement = (() => {
437
463
  export {
438
464
  SbbDialogElement
439
465
  };
440
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGlhbG9nL2RpYWxvZy9kaWFsb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzaXplQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvcmVzaXplLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBpc0JyZWFrcG9pbnQsIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgb3ZlcmxheVJlZnMsIFNiYk92ZXJsYXlCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaWFsb2dBY3Rpb25zRWxlbWVudCB9IGZyb20gJy4uL2RpYWxvZy1hY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGlhbG9nVGl0bGVFbGVtZW50IH0gZnJvbSAnLi4vZGlhbG9nLXRpdGxlLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGlhbG9nLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW50ZXJhY3RpdmUgb3ZlcmxheSBlbGVtZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gcHJvdmlkZSBhIGBzYmItZGlhbG9nLXRpdGxlYCwgYHNiYi1kaWFsb2ctY29udGVudGAgYW5kIGFuIG9wdGlvbmFsIGBzYmItZGlhbG9nLWFjdGlvbnNgLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1kaWFsb2dgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItZGlhbG9nYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1kaWFsb2dgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYk92ZXJsYXlDbG9zZUV2ZW50RGV0YWlscz59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItZGlhbG9nYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItZGlhbG9nLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRpYWxvZycpXG5jbGFzcyBTYmJEaWFsb2dFbGVtZW50IGV4dGVuZHMgU2JiT3ZlcmxheUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLyoqIEJhY2tkcm9wIGNsaWNrIGFjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmFja2Ryb3AtYWN0aW9uJyB9KSBwdWJsaWMgYWNjZXNzb3IgYmFja2Ryb3BBY3Rpb246ICdjbG9zZScgfCAnbm9uZScgPVxuICAgICdjbG9zZSc7XG5cbiAgLy8gV2UgdXNlIGEgdGltZW91dCBhcyBhIHdvcmthcm91bmQgdG8gdGhlIFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zXCIgZXJyb3IuXG4gIC8vIEZvciBtb3JlIGRldGFpbHM6XG4gIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvcmVzaXplLW9ic2VydmVyL2lzc3Vlcy8zOCNpc3N1ZWNvbW1lbnQtNDIyMTI2MDA2XG4gIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2p1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvaXNzdWVzLzEwMyNpc3N1ZWNvbW1lbnQtMTcxMTE0ODI4NVxuICBwcml2YXRlIF9kaWFsb2dDb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX29uQ29udGVudFJlc2l6ZSgpKSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfZGlhbG9nVGl0bGVFbGVtZW50OiBTYmJEaWFsb2dUaXRsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlhbG9nVGl0bGVIZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX2RpYWxvZ0NvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9kaWFsb2dBY3Rpb25zRWxlbWVudDogU2JiRGlhbG9nQWN0aW9uc0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3ZlcmZsb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhc3RTY3JvbGwgPSAwO1xuICBwcml2YXRlIF9kaWFsb2dJZCA9IGBzYmItZGlhbG9nLSR7bmV4dElkKyt9YDtcbiAgcHJvdGVjdGVkIGNsb3NlQXR0cmlidXRlOiBzdHJpbmcgPSAnc2JiLWRpYWxvZy1jbG9zZSc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gQ2xvc2UgZGlhbG9nIG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcik7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3BvaW50ZXJ1cCcsIHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrKTtcbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgY29tcG9uZW50LiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBkaWFsb2cgZWxlbWVudHNcbiAgICB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1kaWFsb2ctdGl0bGUnKTtcbiAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3Rvcignc2JiLWRpYWxvZy1jb250ZW50Jyk/LnNoYWRvd1Jvb3QhXG4gICAgICAuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5fZGlhbG9nQWN0aW9uc0VsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1kaWFsb2ctYWN0aW9ucycpO1xuXG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgICAvLyBBZGQgdGhpcyBkaWFsb2cgdG8gdGhlIGdsb2JhbCBjb2xsZWN0aW9uXG4gICAgb3ZlcmxheVJlZnMucHVzaCh0aGlzIGFzIFNiYkRpYWxvZ0VsZW1lbnQpO1xuICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50KTtcblxuICAgIC8vIERpc2FibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBkaWFsb2dcbiAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZGlzYWJsZVNjcm9sbCgpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLWRpYWxvZy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldEhpZGVIZWFkZXJEYXRhQXR0cmlidXRlKGZhbHNlKTtcbiAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuaW5lcnRDb250cm9sbGVyLmRlYWN0aXZhdGUoKTtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMubGFzdEZvY3VzZWRFbGVtZW50KTtcbiAgICAvLyBNYW51YWxseSBmb2N1cyBsYXN0IGZvY3VzZWQgZWxlbWVudFxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRSZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUluc3RhbmNlRnJvbUdsb2JhbENvbGxlY3Rpb24oKTtcbiAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBkaWFsb2cgaWYgbm8gZGlhbG9nIGlzIG9wZW5cbiAgICBpZiAoIW92ZXJsYXlSZWZzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICAgIH1cbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoe1xuICAgICAgcmV0dXJuVmFsdWU6IHRoaXMucmV0dXJuVmFsdWUsXG4gICAgICBjbG9zZVRhcmdldDogdGhpcy5vdmVybGF5Q2xvc2VFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5pbmVydENvbnRyb2xsZXIuYWN0aXZhdGUoKTtcbiAgICB0aGlzLmF0dGFjaE9wZW5PdmVybGF5RXZlbnRzKCk7XG4gICAgdGhpcy5zZXRPdmVybGF5Rm9jdXMoKTtcbiAgICAvLyBVc2UgdGltZW91dCB0byByZWFkIGxhYmVsIGFmdGVyIGZvY3VzZWQgZWxlbWVudFxuICAgIHNldFRpbWVvdXQoKCkgPT5cbiAgICAgIHRoaXMuc2V0QXJpYUxpdmVSZWZDb250ZW50KFxuICAgICAgICB0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbCB8fCB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQ/LmlubmVyVGV4dC50cmltKCksXG4gICAgICApLFxuICAgICk7XG4gICAgdGhpcy5mb2N1c0hhbmRsZXIudHJhcCh0aGlzKTtcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAvLyBTeW5jaHJvbml6ZSB0aGUgbmVnYXRpdmUgc3RhdGUgYmVmb3JlIHRoZSBmaXJzdCBvcGVuaW5nIHRvIGF2b2lkIGEgcG9zc2libGUgY29sb3IgZmxhc2ggaWYgaXQgaXMgbmVnYXRpdmUuXG4gICAgdGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzYmItZGlhbG9nLXRpdGxlJykhO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpOiB2b2lkIHtcbiAgICBzdXBlci5hdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpO1xuXG4gICAgLy8gSWYgdGhlIGNvbnRlbnQgb3ZlcmZsb3dzLCBzaG93L2hpZGUgdGhlIGRpYWxvZyBoZWFkZXIgb24gc2Nyb2xsLlxuICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9vbkNvbnRlbnRTY3JvbGwoKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRIaWRlSGVhZGVyRGF0YUF0dHJpYnV0ZShmYWxzZSksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gV2FpdCBmb3IgZGlhbG9nIHRyYW5zaXRpb24gdG8gY29tcGxldGUuXG4gIC8vIEluIHJhcmUgY2FzZXMsIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByb3RlY3RlZCBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLmhhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcm90ZWN0ZWQgc2V0T3ZlcmxheUZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpLFxuICAgICk7XG4gICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZSk7XG4gICAgZmlyc3RGb2N1c2FibGU/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RpYWxvZ1RpdGxlRWxlbWVudCkge1xuICAgICAgdGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGlhbG9nQWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2RpYWxvZ0FjdGlvbnNFbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1uZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uQ29udGVudFNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVmlzaWJsZUhlYWRlciA9IHRoaXMuZGF0YXNldC5oaWRlSGVhZGVyID09PSB1bmRlZmluZWQ7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIGhpZGluZyB0aGUgaGVhZGVyIHdvdWxkIG1ha2UgdGhlIHNjcm9sbGJhciBkaXNhcHBlYXJcbiAgICAvLyBhbmQgcHJldmVudCB0aGUgaGlkaW5nIGFuaW1hdGlvbiBpZiBzby5cbiAgICBpZiAoXG4gICAgICBoYXNWaXNpYmxlSGVhZGVyICYmXG4gICAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudC5jbGllbnRIZWlnaHQgKyB0aGlzLl9kaWFsb2dUaXRsZUhlaWdodCEgPj1cbiAgICAgICAgdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFNjcm9sbCA9IHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICBpZiAoXG4gICAgICBNYXRoLnJvdW5kKGN1cnJlbnRTY3JvbGwgKyB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudC5jbGllbnRIZWlnaHQpID49XG4gICAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ2hlY2sgd2hldGhlciBpcyBzY3JvbGxpbmcgZG93biBvciB1cC5cbiAgICBpZiAoY3VycmVudFNjcm9sbCA+IDAgJiYgdGhpcy5fbGFzdFNjcm9sbCA8IGN1cnJlbnRTY3JvbGwpIHtcbiAgICAgIC8vIFNjcm9sbGluZyBkb3duXG4gICAgICB0aGlzLl9zZXRIaWRlSGVhZGVyRGF0YUF0dHJpYnV0ZSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2Nyb2xsaW5nIHVwXG4gICAgICB0aGlzLl9zZXRIaWRlSGVhZGVyRGF0YUF0dHJpYnV0ZShmYWxzZSk7XG4gICAgfVxuICAgIC8vIGBjdXJyZW50U2Nyb2xsYCBjYW4gYmUgbmVnYXRpdmUsIGUuZy4gb24gbW9iaWxlOyB0aGlzIGlzIG5vdCBhbGxvd2VkLlxuICAgIHRoaXMuX2xhc3RTY3JvbGwgPSBjdXJyZW50U2Nyb2xsIDw9IDAgPyAwIDogY3VycmVudFNjcm9sbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkaWFsb2cuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLmJhY2tkcm9wQWN0aW9uICE9PSAnY2xvc2UnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25EaWFsb2cgPSBldmVudFxuICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAuZmlsdGVyKChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KVxuICAgICAgLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmlkID09PSB0aGlzLl9kaWFsb2dJZCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgZGlhbG9nIG9uIGJhY2tkcm9wIGNsaWNrLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuYmFja2Ryb3BBY3Rpb24gIT09ICdjbG9zZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25EaWFsb2cgJiZcbiAgICAgICFldmVudFxuICAgICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgICAgLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudClcbiAgICAgICAgLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmlkID09PSB0aGlzLl9kaWFsb2dJZClcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfc2V0RGlhbG9nSGVhZGVySGVpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1RpdGxlSGVpZ2h0ID0gdGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50Py5zaGFkb3dSb290IS5maXJzdEVsZW1lbnRDaGlsZCEuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLWRpYWxvZy1oZWFkZXItaGVpZ2h0JywgYCR7dGhpcy5fZGlhbG9nVGl0bGVIZWlnaHR9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uQ29udGVudFJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXREaWFsb2dIZWFkZXJIZWlnaHQoKTtcbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBjb250ZW50IG92ZXJmbG93cyBhbmQgc2V0IHRoZSBgb3ZlcmZsb3dzYCBhdHRyaWJ1dGUuXG4gICAgdGhpcy5fb3ZlcmZsb3dzID0gdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnRcbiAgICAgID8gdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQ/LnNjcm9sbEhlaWdodCA+IHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50Py5jbGllbnRIZWlnaHRcbiAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5fc2V0T3ZlcmZsb3dzRGF0YUF0dHJpYnV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0SGlkZUhlYWRlckRhdGFBdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBoaWRlT25TY3JvbGwgPSB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQ/LmhpZGVPblNjcm9sbCA/PyBmYWxzZTtcbiAgICBjb25zdCBoaWRlSGVhZGVyID1cbiAgICAgIHR5cGVvZiBoaWRlT25TY3JvbGwgPT09ICdib29sZWFuJ1xuICAgICAgICA/IGhpZGVPblNjcm9sbFxuICAgICAgICA6IChpc0JyZWFrcG9pbnQoJ3plcm8nLCBoaWRlT25TY3JvbGwsIHsgaW5jbHVkZU1heEJyZWFrcG9pbnQ6IHRydWUgfSkgPz8gZmFsc2UpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhpZGUtaGVhZGVyJywgIWhpZGVIZWFkZXIgPyBmYWxzZSA6IHZhbHVlKTtcbiAgICBpZiAodGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhpZGUtaGVhZGVyJywgIWhpZGVIZWFkZXIgPyBmYWxzZSA6IHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRPdmVyZmxvd3NEYXRhQXR0cmlidXRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW92ZXJmbG93cycsIHRoaXMuX292ZXJmbG93cyk7XG4gICAgdGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtb3ZlcmZsb3dzJywgdGhpcy5fb3ZlcmZsb3dzKTtcbiAgICB0aGlzLl9kaWFsb2dBY3Rpb25zRWxlbWVudD8udG9nZ2xlQXR0cmlidXRlKCdkYXRhLW92ZXJmbG93cycsIHRoaXMuX292ZXJmbG93cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZGlhbG9nX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBAYW5pbWF0aW9uZW5kPSR7dGhpcy5vbk92ZXJsYXlBbmltYXRpb25FbmR9IGNsYXNzPVwic2JiLWRpYWxvZ1wiIGlkPSR7dGhpcy5fZGlhbG9nSWR9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIEBjbGljaz0keyhldmVudDogRXZlbnQpID0+IHRoaXMuY2xvc2VPblNiYk92ZXJsYXlDbG9zZUNsaWNrKGV2ZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLWRpYWxvZ19fd3JhcHBlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kaWFsb2cnOiBTYmJEaWFsb2dFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFJLFNBQVM7SUFnQlAsb0JBQWdCLE1BQUE7OzBCQURyQixjQUFjLFlBQVksQ0FBQzs7OztvQkFDRzs7OztBQUFSLEVBQUEsbUJBQVEsWUFBcUI7QUFBQSxJQTJCbEQsY0FBQTs7O0FBdkI0QztBQUFnQix5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLDhCQUMxRCxPQUFPO0FBTUQsV0FBQSxnQ0FBK0Isa0JBQUEsTUFBQSxpQ0FBQSxHQUFBLElBQUksaUJBQWlCLE1BQU07QUFBQSxRQUNoRSxRQUFRO0FBQUEsUUFDUixhQUFhO0FBQUEsUUFDYixVQUFVLE1BQU0sV0FBVyxNQUFNLEtBQUssaUJBQWtCLENBQUE7QUFBQSxNQUFBLENBQ3pEO0FBRU8sV0FBbUIsc0JBQWlDO0FBRXBELFdBQXFCLHdCQUF1QjtBQUM1QyxXQUFxQix3QkFBbUM7QUFDeEQsV0FBMkIsOEJBQVk7QUFDdkMsV0FBVSxhQUFZO0FBQ3RCLFdBQVcsY0FBRztBQUNkLFdBQUEsWUFBWSxjQUFjLFFBQVE7QUFDaEMsV0FBYyxpQkFBVztBQXFMM0IsV0FBQSx1QkFBdUIsQ0FBQyxVQUE2QjtBQUN2RCxZQUFBLEtBQUssbUJBQW1CLFNBQVM7QUFDbkM7QUFBQSxRQUFBO0FBR0YsYUFBSyw4QkFBOEIsTUFDaEMsYUFDQSxFQUFBLE9BQU8sQ0FBQyxNQUF3QixhQUFhLE9BQU8sV0FBVyxFQUMvRCxLQUFLLENBQUMsV0FBVyxPQUFPLE9BQU8sS0FBSyxTQUFTO0FBQUEsTUFDbEQ7QUFHUSxXQUFBLHdCQUF3QixDQUFDLFVBQTZCO0FBQ3hELFlBQUEsS0FBSyxtQkFBbUIsU0FBUztBQUNuQztBQUFBLFFBQUE7QUFJQSxZQUFBLENBQUMsS0FBSywrQkFDTixDQUFDLE1BQ0UsZUFDQSxPQUFPLENBQUMsTUFBd0IsYUFBYSxPQUFPLFdBQVcsRUFDL0QsS0FBSyxDQUFDLFdBQVcsT0FBTyxPQUFPLEtBQUssU0FBUyxHQUNoRDtBQUNBLGVBQUssTUFBSztBQUFBLFFBQUE7QUFBQSxNQUVkO0FBMU1PLE9BQUFBLE1BQUEsS0FBQSxxQkFBQSxnQkFBQUEsSUFBQSxXQUFtQixlQUFlLEtBQUs7QUFDdkMsaUJBQUEscUJBQUEsOEJBQW1CLGFBQWEsS0FBSztBQUFBLElBQXFCO0FBQUE7QUFBQSxJQTNCckIsSUFBZ0IsaUJBQ2xEO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQURrQyxJQUFnQixlQUNsRCxPQUFBO0FBQUEseUJBQUEsa0NBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQThCSCxPQUFJOztBQUNMLFVBQUEsS0FBSyxVQUFVLFVBQVU7QUFDM0I7QUFBQSxNQUFBO0FBRUYsV0FBSyxxQkFBcUIsU0FBUztBQUc5QixXQUFBLHNCQUFzQixLQUFLLGNBQWMsa0JBQWtCO0FBQ2hFLFdBQUsseUJBQXdCQSxNQUFBLEtBQUssY0FBYyxvQkFBb0IsTUFBdkMsZ0JBQUFBLElBQTBDLFdBQ3BFO0FBQ0UsV0FBQSx3QkFBd0IsS0FBSyxjQUFjLG9CQUFvQjtBQUVwRSxXQUFLLGNBQWE7QUFFbEIsVUFBSSxDQUFDLEtBQUssU0FBUyxRQUFRO0FBQ3pCO0FBQUEsTUFBQTtBQUVGLFdBQUssUUFBUTtBQUdiLGtCQUFZLEtBQUssSUFBd0I7QUFDcEMsV0FBQSw2QkFBNkIsUUFBUSxLQUFLLHFCQUFxQjtBQUdwRSxXQUFLLGNBQWM7QUFJZixVQUFBLEtBQUssMkJBQTJCO0FBQ2xDLGFBQUssZUFBYztBQUFBLE1BQUE7QUFBQSxJQUNyQjtBQUFBLElBR1EsMEJBQXVCO0FBQ3hCLGFBQUEsd0JBQXdCLE1BQU0saUNBQWlDO0FBQUEsSUFBQTtBQUFBLElBRzlELGdCQUFhOztBQUNyQixXQUFLLDRCQUE0QixLQUFLO0FBQ2pDLE9BQUFBLE1BQUEsS0FBQSwwQkFBQSxnQkFBQUEsSUFBdUIsU0FBUyxHQUFHO0FBQ3hDLFdBQUssUUFBUTtBQUNiLFdBQUssZ0JBQWdCO0FBQ3JCLDZCQUF1QixLQUFLLGtCQUFrQjtBQUU5QyxpQkFBSyx1QkFBTCxtQkFBeUI7QUFDekIsaUJBQUssMEJBQUwsbUJBQTRCO0FBQzVCLFdBQUssYUFBYTtBQUNsQixVQUFJLEtBQUssdUJBQXVCO0FBQ3pCLGFBQUEsNkJBQTZCLFVBQVUsS0FBSyxxQkFBcUI7QUFBQSxNQUFBO0FBRXhFLFdBQUssbUNBQWtDO0FBRW5DLFVBQUEsQ0FBQyxZQUFZLFFBQVE7QUFDdkIsYUFBSyxjQUFjOztBQUVyQixXQUFLLFNBQVMsS0FBSztBQUFBLFFBQ2pCLGFBQWEsS0FBSztBQUFBLFFBQ2xCLGFBQWEsS0FBSztBQUFBLE1BQUEsQ0FDbkI7QUFBQSxJQUFBO0FBQUEsSUFHSyxpQkFBYztBQUNwQixXQUFLLFFBQVE7QUFDYixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLHdCQUF1QjtBQUM1QixXQUFLLGdCQUFlO0FBRVQsaUJBQUEsTUFDVDs7QUFBQSxvQkFBSyxzQkFDSCxLQUFLLHdCQUFzQkEsTUFBQSxLQUFLLHdCQUFMLGdCQUFBQSxJQUEwQixVQUFVLE9BQU07QUFBQSxPQUN0RTtBQUVFLFdBQUEsYUFBYSxLQUFLLElBQUk7QUFDM0IsV0FBSyxRQUFROztJQUdJLGFBQWEsbUJBQXVDO0FBRWhFLFdBQUEsc0JBQXNCLEtBQUssY0FBYyxrQkFBa0I7QUFDaEUsV0FBSyxjQUFhO0FBQ2xCLFlBQU0sYUFBYSxpQkFBaUI7QUFBQSxJQUFBO0FBQUEsSUFHbkIsV0FBVyxtQkFBdUM7QUFDbkUsWUFBTSxXQUFXLGlCQUFpQjtBQUU5QixVQUFBLGtCQUFrQixJQUFJLFVBQVUsR0FBRztBQUNyQyxhQUFLLGNBQWE7QUFBQSxNQUFBO0FBQUEsSUFDcEI7QUFBQSxJQUdpQiwwQkFBdUI7O0FBQ3hDLFlBQU0sd0JBQXVCO0FBRzdCLE9BQUFBLE1BQUEsS0FBSywwQkFBTCxnQkFBQUEsSUFBNEIsaUJBQWlCLFVBQVUsTUFBTSxLQUFLLG9CQUFvQjtBQUFBLFFBQ3BGLFNBQVM7QUFBQSxRQUNULFFBQVEsS0FBSyxzQkFBc0I7QUFBQSxNQUFBO0FBRXJDLGFBQU8saUJBQWlCLFVBQVUsTUFBTSxLQUFLLDRCQUE0QixLQUFLLEdBQUc7QUFBQSxRQUMvRSxRQUFRLEtBQUssc0JBQXNCO0FBQUEsTUFBQSxDQUNwQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1PLHNCQUFzQixPQUFxQjtBQUNuRCxVQUFJLE1BQU0sa0JBQWtCLFVBQVUsS0FBSyxVQUFVLFdBQVc7QUFDOUQsYUFBSyxlQUFjO0FBQUEsTUFBQSxXQUNWLE1BQU0sa0JBQWtCLFdBQVcsS0FBSyxVQUFVLFdBQVc7QUFDdEUsYUFBSyxjQUFhO0FBQUEsTUFBQTtBQUFBLElBQ3BCO0FBQUE7QUFBQSxJQUlRLGtCQUFlO0FBQ3ZCLFlBQU0saUJBQWlCLHlCQUNyQixNQUFNLEtBQUssS0FBSyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQXdCLGFBQWEsT0FBTyxXQUFXLENBQUM7QUFFNUYsNkJBQXVCLGNBQWM7QUFDckMsdURBQWdCO0FBQUEsSUFBSztBQUFBLElBR2YsZ0JBQWE7QUFDbkIsVUFBSSxLQUFLLHFCQUFxQjtBQUN2QixhQUFBLG9CQUFvQixXQUFXLEtBQUs7QUFBQSxNQUFBO0FBRzNDLFVBQUksS0FBSyx1QkFBdUI7QUFDOUIsYUFBSyxzQkFBc0IsZ0JBQWdCLGlCQUFpQixLQUFLLFFBQVE7QUFBQSxNQUFBO0FBQUEsSUFDM0U7QUFBQSxJQUdNLG1CQUFnQjtBQUNsQixVQUFBLENBQUMsS0FBSyx1QkFBdUI7QUFDL0I7QUFBQSxNQUFBO0FBR0ksWUFBQSxtQkFBbUIsS0FBSyxRQUFRLGVBQWU7QUFLbkQsVUFBQSxvQkFDQSxLQUFLLHNCQUFzQixlQUFlLEtBQUssc0JBQzdDLEtBQUssc0JBQXNCLGNBQzdCO0FBQ0E7QUFBQSxNQUFBO0FBR0ksWUFBQSxnQkFBZ0IsS0FBSyxzQkFBc0I7QUFFL0MsVUFBQSxLQUFLLE1BQU0sZ0JBQWdCLEtBQUssc0JBQXNCLFlBQVksS0FDbEUsS0FBSyxzQkFBc0IsY0FDM0I7QUFDQTtBQUFBLE1BQUE7QUFHRixVQUFJLGdCQUFnQixLQUFLLEtBQUssY0FBYyxlQUFlO0FBRXpELGFBQUssNEJBQTRCLElBQUk7QUFBQSxNQUFBLE9BQ2hDO0FBRUwsYUFBSyw0QkFBNEIsS0FBSztBQUFBLE1BQUE7QUFHbkMsV0FBQSxjQUFjLGlCQUFpQixJQUFJLElBQUk7QUFBQSxJQUFBO0FBQUEsSUFnQ3RDLHlCQUFzQjs7QUFDNUIsV0FBSyxzQkFBcUJBLE1BQUEsS0FBSyx3QkFBTCxnQkFBQUEsSUFBMEIsV0FBWSxrQkFBbUI7QUFDbkYsV0FBSyxNQUFNLFlBQVksOEJBQThCLEdBQUcsS0FBSyxrQkFBa0IsSUFBSTtBQUFBLElBQUE7QUFBQSxJQUc3RSxtQkFBZ0I7O0FBQ3RCLFdBQUssdUJBQXNCO0FBRXRCLFdBQUEsYUFBYSxLQUFLLDBCQUNuQkEsTUFBQSxLQUFLLDBCQUFMLGdCQUFBQSxJQUE0QixrQkFBZSxVQUFLLDBCQUFMLG1CQUE0QixnQkFDdkU7QUFDSixXQUFLLDJCQUEwQjtBQUFBLElBQUE7QUFBQSxJQUd6Qiw0QkFBNEIsT0FBYzs7QUFDMUMsWUFBQSxpQkFBZUEsTUFBQSxLQUFLLHdCQUFMLGdCQUFBQSxJQUEwQixpQkFBZ0I7QUFDL0QsWUFBTSxhQUNKLE9BQU8saUJBQWlCLFlBQ3BCLGVBQ0MsYUFBYSxRQUFRLGNBQWMsRUFBRSxzQkFBc0IsS0FBSSxDQUFFLEtBQUs7QUFDN0UsV0FBSyxnQkFBZ0Isb0JBQW9CLENBQUMsYUFBYSxRQUFRLEtBQUs7QUFDcEUsVUFBSSxLQUFLLHFCQUFxQjtBQUM1QixhQUFLLG9CQUFvQixnQkFBZ0Isb0JBQW9CLENBQUMsYUFBYSxRQUFRLEtBQUs7QUFBQSxNQUFBO0FBQUEsSUFDMUY7QUFBQSxJQUdNLDZCQUEwQjs7QUFDM0IsV0FBQSxnQkFBZ0Isa0JBQWtCLEtBQUssVUFBVTtBQUN0RCxPQUFBQSxNQUFBLEtBQUssd0JBQUwsZ0JBQUFBLElBQTBCLGdCQUFnQixrQkFBa0IsS0FBSztBQUNqRSxpQkFBSywwQkFBTCxtQkFBNEIsZ0JBQWdCLGtCQUFrQixLQUFLO0FBQUEsSUFBVTtBQUFBLElBRzVELFNBQU07QUFDaEIsYUFBQTtBQUFBO0FBQUEsNkJBRWtCLEtBQUsscUJBQXFCLDBCQUEwQixLQUFLLFNBQVM7QUFBQTtBQUFBLHFCQUUxRSxDQUFDLFVBQWlCLEtBQUssNEJBQTRCLEtBQUssQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBO0FBQUEsS0EzUWhDOztBQUEzQyxpQ0FBQSxDQUFBLFNBQVMsRUFBRSxXQUFXLGtCQUFtQixDQUFBLENBQUM7QUFBaUIsaUJBQUEsSUFBQSxNQUFBLDRCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsa0JBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsb0JBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLGdCQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLGlCQUNsRDtBQUFBLFNBQUEsVUFBQSxhQUFBLDhCQUFBLGlDQUFBO0FBTFosaUJBeVJDLE1BQUEsbUJBQUEsRUFBQSxPQUFBLFdBQUEsR0FBQSxrQkFBQSxFQUFBLE1BQUEsU0FBQSxNQUFBLFdBQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxNQUFBLHVCQUFBOzs7UUF4UndCLEdBQU0sU0FBbUIsT0FENUMsa0JBQWdCLFlBQUEsdUJBQUEsR0FBQzs7OyJ9
466
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGlhbG9nL2RpYWxvZy9kaWFsb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzaXplQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvcmVzaXplLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBpc0JyZWFrcG9pbnQsIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgb3ZlcmxheVJlZnMsIFNiYk92ZXJsYXlCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaWFsb2dBY3Rpb25zRWxlbWVudCB9IGZyb20gJy4uL2RpYWxvZy1hY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGlhbG9nVGl0bGVFbGVtZW50IH0gZnJvbSAnLi4vZGlhbG9nLXRpdGxlLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGlhbG9nLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW50ZXJhY3RpdmUgb3ZlcmxheSBlbGVtZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gcHJvdmlkZSBhIGBzYmItZGlhbG9nLXRpdGxlYCwgYHNiYi1kaWFsb2ctY29udGVudGAgYW5kIGFuIG9wdGlvbmFsIGBzYmItZGlhbG9nLWFjdGlvbnNgLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1kaWFsb2dgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItZGlhbG9nYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1kaWFsb2dgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYk92ZXJsYXlDbG9zZUV2ZW50RGV0YWlscz59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItZGlhbG9nYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItZGlhbG9nLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRpYWxvZycpXG5jbGFzcyBTYmJEaWFsb2dFbGVtZW50IGV4dGVuZHMgU2JiT3ZlcmxheUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLyoqIEJhY2tkcm9wIGNsaWNrIGFjdGlvbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmFja2Ryb3AtYWN0aW9uJyB9KSBwdWJsaWMgYWNjZXNzb3IgYmFja2Ryb3BBY3Rpb246ICdjbG9zZScgfCAnbm9uZScgPVxuICAgICdjbG9zZSc7XG5cbiAgLyoqIEJhY2tkcm9wIGRlbnNpdHkuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2JhY2tkcm9wJywgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3IgYmFja2Ryb3A6XG4gICAgfCAnb3BhcXVlJ1xuICAgIHwgJ3RyYW5zbHVjZW50JyA9ICdvcGFxdWUnO1xuXG4gIC8vIFdlIHVzZSBhIHRpbWVvdXQgYXMgYSB3b3JrYXJvdW5kIHRvIHRoZSBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9uc1wiIGVycm9yLlxuICAvLyBGb3IgbW9yZSBkZXRhaWxzOlxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3Jlc2l6ZS1vYnNlcnZlci9pc3N1ZXMvMzgjaXNzdWVjb21tZW50LTQyMjEyNjAwNlxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWdnbGUvcmVzaXplLW9ic2VydmVyL2lzc3Vlcy8xMDMjaXNzdWVjb21tZW50LTE3MTExNDgyODVcbiAgcHJpdmF0ZSBfZGlhbG9nQ29udGVudFJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9vbkNvbnRlbnRSZXNpemUoKSksXG4gIH0pO1xuXG4gIHByaXZhdGUgX2RpYWxvZ1RpdGxlRWxlbWVudDogU2JiRGlhbG9nVGl0bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RpYWxvZ1RpdGxlSGVpZ2h0PzogbnVtYmVyO1xuICBwcml2YXRlIF9kaWFsb2dDb250ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlhbG9nQWN0aW9uc0VsZW1lbnQ6IFNiYkRpYWxvZ0FjdGlvbnNFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX292ZXJmbG93czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9sYXN0U2Nyb2xsID0gMDtcbiAgcHJpdmF0ZSBfZGlhbG9nSWQgPSBgc2JiLWRpYWxvZy0ke25leHRJZCsrfWA7XG4gIHByb3RlY3RlZCBjbG9zZUF0dHJpYnV0ZTogc3RyaW5nID0gJ3NiYi1kaWFsb2ctY2xvc2UnO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIENsb3NlIGRpYWxvZyBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdwb2ludGVyZG93bicsIHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdwb2ludGVydXAnLCB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIEluaXRpYWxpemUgZGlhbG9nIGVsZW1lbnRzXG4gICAgdGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzYmItZGlhbG9nLXRpdGxlJyk7XG4gICAgdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1kaWFsb2ctY29udGVudCcpPy5zaGFkb3dSb290IVxuICAgICAgLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuX2RpYWxvZ0FjdGlvbnNFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzYmItZGlhbG9nLWFjdGlvbnMnKTtcblxuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1BvcG92ZXI/LigpO1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgICAvLyBBZGQgdGhpcyBkaWFsb2cgdG8gdGhlIGdsb2JhbCBjb2xsZWN0aW9uXG4gICAgb3ZlcmxheVJlZnMucHVzaCh0aGlzIGFzIFNiYkRpYWxvZ0VsZW1lbnQpO1xuICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50KTtcblxuICAgIC8vIERpc2FibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBkaWFsb2dcbiAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZGlzYWJsZVNjcm9sbCgpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLWRpYWxvZy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldEhpZGVIZWFkZXJEYXRhQXR0cmlidXRlKGZhbHNlKTtcbiAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuaGlkZVBvcG92ZXI/LigpO1xuXG4gICAgdGhpcy5pbmVydENvbnRyb2xsZXIuZGVhY3RpdmF0ZSgpO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQpO1xuICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIGlmICh0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fZGlhbG9nQ29udGVudFJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlSW5zdGFuY2VGcm9tR2xvYmFsQ29sbGVjdGlvbigpO1xuICAgIC8vIEVuYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIGRpYWxvZyBpZiBubyBkaWFsb2cgaXMgb3BlblxuICAgIGlmICghb3ZlcmxheVJlZnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gICAgfVxuICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCh7XG4gICAgICByZXR1cm5WYWx1ZTogdGhpcy5yZXR1cm5WYWx1ZSxcbiAgICAgIGNsb3NlVGFyZ2V0OiB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuYXR0YWNoT3Blbk92ZXJsYXlFdmVudHMoKTtcbiAgICB0aGlzLnNldE92ZXJsYXlGb2N1cygpO1xuICAgIC8vIFVzZSB0aW1lb3V0IHRvIHJlYWQgbGFiZWwgYWZ0ZXIgZm9jdXNlZCBlbGVtZW50XG4gICAgc2V0VGltZW91dCgoKSA9PlxuICAgICAgdGhpcy5zZXRBcmlhTGl2ZVJlZkNvbnRlbnQoXG4gICAgICAgIHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsIHx8IHRoaXMuX2RpYWxvZ1RpdGxlRWxlbWVudD8uaW5uZXJUZXh0LnRyaW0oKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLmZvY3VzSGFuZGxlci50cmFwKHRoaXMpO1xuICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIC8vIFN5bmNocm9uaXplIHRoZSBuZWdhdGl2ZSBzdGF0ZSBiZWZvcmUgdGhlIGZpcnN0IG9wZW5pbmcgdG8gYXZvaWQgYSBwb3NzaWJsZSBjb2xvciBmbGFzaCBpZiBpdCBpcyBuZWdhdGl2ZS5cbiAgICB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1kaWFsb2ctdGl0bGUnKSE7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSkge1xuICAgICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGF0dGFjaE9wZW5PdmVybGF5RXZlbnRzKCk6IHZvaWQge1xuICAgIHN1cGVyLmF0dGFjaE9wZW5PdmVybGF5RXZlbnRzKCk7XG5cbiAgICAvLyBJZiB0aGUgY29udGVudCBvdmVyZmxvd3MsIHNob3cvaGlkZSB0aGUgZGlhbG9nIGhlYWRlciBvbiBzY3JvbGwuXG4gICAgdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX29uQ29udGVudFNjcm9sbCgpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldEhpZGVIZWFkZXJEYXRhQXR0cmlidXRlKGZhbHNlKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBXYWl0IGZvciBkaWFsb2cgdHJhbnNpdGlvbiB0byBjb21wbGV0ZS5cbiAgLy8gSW4gcmFyZSBjYXNlcywgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJvdGVjdGVkIG9uT3ZlcmxheUFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQuXG4gIHByb3RlY3RlZCBzZXRPdmVybGF5Rm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCksXG4gICAgKTtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICBmaXJzdEZvY3VzYWJsZT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNOZWdhdGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlhbG9nVGl0bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kaWFsb2dBY3Rpb25zRWxlbWVudCkge1xuICAgICAgdGhpcy5fZGlhbG9nQWN0aW9uc0VsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25Db250ZW50U2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNWaXNpYmxlSGVhZGVyID0gdGhpcy5kYXRhc2V0LmhpZGVIZWFkZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIC8vIENoZWNrIHdoZXRoZXIgaGlkaW5nIHRoZSBoZWFkZXIgd291bGQgbWFrZSB0aGUgc2Nyb2xsYmFyIGRpc2FwcGVhclxuICAgIC8vIGFuZCBwcmV2ZW50IHRoZSBoaWRpbmcgYW5pbWF0aW9uIGlmIHNvLlxuICAgIGlmIChcbiAgICAgIGhhc1Zpc2libGVIZWFkZXIgJiZcbiAgICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50LmNsaWVudEhlaWdodCArIHRoaXMuX2RpYWxvZ1RpdGxlSGVpZ2h0ISA+PVxuICAgICAgICB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGlmIChcbiAgICAgIE1hdGgucm91bmQoY3VycmVudFNjcm9sbCArIHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50LmNsaWVudEhlaWdodCkgPj1cbiAgICAgIHRoaXMuX2RpYWxvZ0NvbnRlbnRFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDaGVjayB3aGV0aGVyIGlzIHNjcm9sbGluZyBkb3duIG9yIHVwLlxuICAgIGlmIChjdXJyZW50U2Nyb2xsID4gMCAmJiB0aGlzLl9sYXN0U2Nyb2xsIDwgY3VycmVudFNjcm9sbCkge1xuICAgICAgLy8gU2Nyb2xsaW5nIGRvd25cbiAgICAgIHRoaXMuX3NldEhpZGVIZWFkZXJEYXRhQXR0cmlidXRlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTY3JvbGxpbmcgdXBcbiAgICAgIHRoaXMuX3NldEhpZGVIZWFkZXJEYXRhQXR0cmlidXRlKGZhbHNlKTtcbiAgICB9XG4gICAgLy8gYGN1cnJlbnRTY3JvbGxgIGNhbiBiZSBuZWdhdGl2ZSwgZS5nLiBvbiBtb2JpbGU7IHRoaXMgaXMgbm90IGFsbG93ZWQuXG4gICAgdGhpcy5fbGFzdFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgPD0gMCA/IDAgOiBjdXJyZW50U2Nyb2xsO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIGRpYWxvZy5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuYmFja2Ryb3BBY3Rpb24gIT09ICdjbG9zZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbkRpYWxvZyA9IGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaWQgPT09IHRoaXMuX2RpYWxvZ0lkKTtcbiAgfTtcblxuICAvLyBDbG9zZSBkaWFsb2cgb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5iYWNrZHJvcEFjdGlvbiAhPT0gJ2Nsb3NlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbkRpYWxvZyAmJlxuICAgICAgIWV2ZW50XG4gICAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgICAuZmlsdGVyKChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KVxuICAgICAgICAuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaWQgPT09IHRoaXMuX2RpYWxvZ0lkKVxuICAgICkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9zZXREaWFsb2dIZWFkZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nVGl0bGVIZWlnaHQgPSB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQ/LnNoYWRvd1Jvb3QhLmZpcnN0RWxlbWVudENoaWxkIS5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItZGlhbG9nLWhlYWRlci1oZWlnaHQnLCBgJHt0aGlzLl9kaWFsb2dUaXRsZUhlaWdodH1weGApO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Db250ZW50UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldERpYWxvZ0hlYWRlckhlaWdodCgpO1xuICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIGFuZCBzZXQgdGhlIGBvdmVyZmxvd3NgIGF0dHJpYnV0ZS5cbiAgICB0aGlzLl9vdmVyZmxvd3MgPSB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudFxuICAgICAgPyB0aGlzLl9kaWFsb2dDb250ZW50RWxlbWVudD8uc2Nyb2xsSGVpZ2h0ID4gdGhpcy5fZGlhbG9nQ29udGVudEVsZW1lbnQ/LmNsaWVudEhlaWdodFxuICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLl9zZXRPdmVyZmxvd3NEYXRhQXR0cmlidXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRIaWRlSGVhZGVyRGF0YUF0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhpZGVPblNjcm9sbCA9IHRoaXMuX2RpYWxvZ1RpdGxlRWxlbWVudD8uaGlkZU9uU2Nyb2xsID8/IGZhbHNlO1xuICAgIGNvbnN0IGhpZGVIZWFkZXIgPVxuICAgICAgdHlwZW9mIGhpZGVPblNjcm9sbCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gaGlkZU9uU2Nyb2xsXG4gICAgICAgIDogKGlzQnJlYWtwb2ludCgnemVybycsIGhpZGVPblNjcm9sbCwgeyBpbmNsdWRlTWF4QnJlYWtwb2ludDogdHJ1ZSB9KSA/PyBmYWxzZSk7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtaGlkZS1oZWFkZXInLCAhaGlkZUhlYWRlciA/IGZhbHNlIDogdmFsdWUpO1xuICAgIGlmICh0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2RpYWxvZ1RpdGxlRWxlbWVudC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtaGlkZS1oZWFkZXInLCAhaGlkZUhlYWRlciA/IGZhbHNlIDogdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE92ZXJmbG93c0RhdGFBdHRyaWJ1dGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtb3ZlcmZsb3dzJywgdGhpcy5fb3ZlcmZsb3dzKTtcbiAgICB0aGlzLl9kaWFsb2dUaXRsZUVsZW1lbnQ/LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1vdmVyZmxvd3MnLCB0aGlzLl9vdmVyZmxvd3MpO1xuICAgIHRoaXMuX2RpYWxvZ0FjdGlvbnNFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtb3ZlcmZsb3dzJywgdGhpcy5fb3ZlcmZsb3dzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1kaWFsb2dfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IEBhbmltYXRpb25lbmQ9JHt0aGlzLm9uT3ZlcmxheUFuaW1hdGlvbkVuZH0gY2xhc3M9XCJzYmItZGlhbG9nXCIgaWQ9JHt0aGlzLl9kaWFsb2dJZH0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5jbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItZGlhbG9nX193cmFwcGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRpYWxvZyc6IFNiYkRpYWxvZ0VsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../../src/elements/menu/menu/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAYrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAoBtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;;AAkB1D;;;;;;;;;;;GAWG;AACH,qBAEM,cAAe,SAAQ,mBAGH;IACxB,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,mBAA4B,mBAAmB,WAAwC;IAEvF;;;OAGG;IACH,IACW,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,EAIpD;IACD,IAAW,OAAO,IAAI,MAAM,GAAG,WAAW,GAAG,IAAI,CAEhD;IACD,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;OAGG;IACH,SAEgB,sBAAsB,EAAE,MAAM,CAAM;IAEpD,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,yBAAyB,CAAkB;IACnD,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,aAAa,CAQlB;;IAQH;;OAEG;IACI,IAAI,IAAI,IAAI;IAyBnB;;OAEG;IACI,KAAK,IAAI,IAAI;IAmBpB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,cAAc;YAqBR,eAAe;IAY7B,OAAO,CAAC,2BAA2B;cAWhB,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAWrD,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAQ5C,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,oBAAoB,CAE1B;IAGF,OAAO,CAAC,qBAAqB,CAI3B;IAMF,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;cAyBL,MAAM,IAAI,cAAc;CAsB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../../src/elements/menu/menu/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAYrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAoBtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;;AAkB1D;;;;;;;;;;;GAWG;AACH,qBAKM,cAAe,SAAQ,mBAGH;IACxB,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,mBAA4B,mBAAmB,WAAwC;IAEvF;;;OAGG;IACH,IACW,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,EAIpD;IACD,IAAW,OAAO,IAAI,MAAM,GAAG,WAAW,GAAG,IAAI,CAEhD;IACD,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;OAGG;IACH,SAEgB,sBAAsB,EAAE,MAAM,CAAM;IAEpD,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,yBAAyB,CAAkB;IACnD,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,aAAa,CAQlB;;IAQH;;OAEG;IACI,IAAI,IAAI,IAAI;IA0BnB;;OAEG;IACI,KAAK,IAAI,IAAI;IAmBpB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,cAAc;YA2CR,eAAe;IAY7B,OAAO,CAAC,2BAA2B;cAWhB,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAWrD,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAQ5C,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,oBAAoB,CAE1B;IAGF,OAAO,CAAC,qBAAqB,CAI3B;IAMF,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;cAyBL,MAAM,IAAI,cAAc;CAsB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF"}
@@ -9,10 +9,10 @@ import { __esDecorate, __runInitializers } from "tslib";
9
9
  import { css, html } from "lit";
10
10
  import { customElement, property } from "lit/decorators.js";
11
11
  import { ref } from "lit/directives/ref.js";
12
- import { SbbFocusHandler, setModalityOnNextFocus, isArrowKeyPressed, interactivityChecker, getNextElementIndex, IS_FOCUSABLE_QUERY } from "../core/a11y.js";
12
+ import { SbbFocusHandler, setModalityOnNextFocus, isArrowKeyOrPageKeysPressed, interactivityChecker, getNextElementIndex, IS_FOCUSABLE_QUERY } from "../core/a11y.js";
13
13
  import { SbbOpenCloseBaseElement } from "../core/base-elements.js";
14
14
  import { SbbInertController, SbbMediaMatcherController, SbbMediaQueryBreakpointSmallAndBelow } from "../core/controllers.js";
15
- import { forceType } from "../core/decorators.js";
15
+ import { hostAttributes, forceType } from "../core/decorators.js";
16
16
  import { SbbScrollHandler, isZeroAnimationDuration, findReferencedElement } from "../core/dom.js";
17
17
  import { forwardEvent } from "../core/eventing.js";
18
18
  import { SbbNamedSlotListMixin } from "../core/mixins.js";
@@ -249,7 +249,9 @@ const INTERACTIVE_ELEMENTS = [
249
249
  let nextId = 0;
250
250
  let SbbMenuElement = (() => {
251
251
  var _listAccessibilityLabel_accessor_storage, _a;
252
- let _classDecorators = [customElement("sbb-menu")];
252
+ let _classDecorators = [customElement("sbb-menu"), hostAttributes({
253
+ popover: "manual"
254
+ })];
253
255
  let _classDescriptor;
254
256
  let _classExtraInitializers = [];
255
257
  let _classThis;
@@ -319,16 +321,17 @@ let SbbMenuElement = (() => {
319
321
  * Opens the menu on trigger click.
320
322
  */
321
323
  open() {
322
- var _a2;
324
+ var _a2, _b;
323
325
  if (this.state === "closing" || !this._menu) {
324
326
  return;
325
327
  }
326
328
  if (!this.willOpen.emit()) {
327
329
  return;
328
330
  }
331
+ (_a2 = this.showPopover) == null ? void 0 : _a2.call(this);
329
332
  this.state = "opening";
330
333
  this._setMenuPosition();
331
- (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "true");
334
+ (_b = this._triggerElement) == null ? void 0 : _b.setAttribute("aria-expanded", "true");
332
335
  if (this._mediaMatcher.matches(SbbMediaQueryBreakpointSmallAndBelow)) {
333
336
  this._scrollHandler.disableScroll();
334
337
  }
@@ -365,17 +368,18 @@ let SbbMenuElement = (() => {
365
368
  this.didOpen.emit();
366
369
  }
367
370
  _handleClosing() {
368
- var _a2, _b, _c, _d;
371
+ var _a2, _b, _c, _d, _e;
369
372
  this.state = "closed";
370
- (_b = (_a2 = this._menu) == null ? void 0 : _a2.firstElementChild) == null ? void 0 : _b.scrollTo(0, 0);
373
+ (_a2 = this.hidePopover) == null ? void 0 : _a2.call(this);
374
+ (_c = (_b = this._menu) == null ? void 0 : _b.firstElementChild) == null ? void 0 : _c.scrollTo(0, 0);
371
375
  this._inertController.deactivate();
372
376
  setModalityOnNextFocus(this._triggerElement);
373
- (_c = this._triggerElement) == null ? void 0 : _c.focus({
377
+ (_d = this._triggerElement) == null ? void 0 : _d.focus({
374
378
  // When inside the sbb-header, we prevent the scroll to avoid the snapping to the top of the page
375
379
  preventScroll: this._triggerElement.localName === "sbb-header-button" || this._triggerElement.localName === "sbb-header-link"
376
380
  });
377
381
  this.didClose.emit();
378
- (_d = this._windowEventsController) == null ? void 0 : _d.abort();
382
+ (_e = this._windowEventsController) == null ? void 0 : _e.abort();
379
383
  this._focusHandler.disconnect();
380
384
  this._scrollHandler.enableScroll();
381
385
  }
@@ -389,13 +393,32 @@ let SbbMenuElement = (() => {
389
393
  }
390
394
  }
391
395
  _handleKeyDown(evt) {
392
- if (!isArrowKeyPressed(evt)) {
396
+ if (!isArrowKeyOrPageKeysPressed(evt)) {
393
397
  return;
394
398
  }
395
399
  evt.preventDefault();
396
400
  const enabledActions = Array.from(this.querySelectorAll("sbb-menu-button, sbb-menu-link")).filter((el) => (!el.disabled || el.disabledInteractive) && interactivityChecker.isVisible(el));
397
401
  const current = enabledActions.findIndex((e) => e === evt.target);
398
- const nextIndex = getNextElementIndex(evt, current, enabledActions.length);
402
+ let nextIndex;
403
+ switch (evt.key) {
404
+ case "ArrowUp":
405
+ case "ArrowDown":
406
+ case "ArrowLeft":
407
+ case "ArrowRight":
408
+ nextIndex = getNextElementIndex(evt, current, enabledActions.length);
409
+ break;
410
+ case "PageUp":
411
+ case "Home":
412
+ nextIndex = 0;
413
+ break;
414
+ case "End":
415
+ case "PageDown":
416
+ nextIndex = enabledActions.length - 1;
417
+ break;
418
+ // this should never happen since all the case allowed by `isArrowKeyOrPageKeysPressed` should be covered
419
+ default:
420
+ nextIndex = 0;
421
+ }
399
422
  enabledActions[nextIndex].focus();
400
423
  }
401
424
  // Closes the menu on "Esc" key pressed and traps focus within the menu.
@@ -564,4 +587,4 @@ let SbbMenuElement = (() => {
564
587
  export {
565
588
  SbbMenuElement
566
589
  };
567
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21lbnUvbWVudS9tZW51LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQge1xuICBnZXROZXh0RWxlbWVudEluZGV4LFxuICBpbnRlcmFjdGl2aXR5Q2hlY2tlcixcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBpc0Fycm93S2V5UHJlc3NlZCxcbiAgU2JiRm9jdXNIYW5kbGVyLFxuICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzLFxufSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMuanMnO1xuaW1wb3J0IHtcbiAgU2JiSW5lcnRDb250cm9sbGVyLFxuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3csXG59IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7XG4gIGZpbmRSZWZlcmVuY2VkRWxlbWVudCxcbiAgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sXG4gIFNiYlNjcm9sbEhhbmRsZXIsXG59IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGZvcndhcmRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgU2JiTmFtZWRTbG90TGlzdE1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudFBvc2l0aW9uLFxuICBpc0V2ZW50T25FbGVtZW50LFxuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxuICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuLi8uLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJNZW51QnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL21lbnUtYnV0dG9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiTWVudUxpbmtFbGVtZW50IH0gZnJvbSAnLi4vbWVudS1saW5rLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbWVudS5zY3NzP2xpdCZpbmxpbmUnO1xuXG5jb25zdCBNRU5VX09GRlNFVCA9IDg7XG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UUyA9IFtcbiAgJ0EnLFxuICAnQlVUVE9OJyxcbiAgJ1NCQi1CVVRUT04nLFxuICAnU0JCLUJVVFRPTi1MSU5LJyxcbiAgJ1NCQi1MSU5LJyxcbiAgJ1NCQi1CTE9DSy1MSU5LJyxcbiAgJ1NCQi1MSU5LLUJVVFRPTicsXG4gICdTQkItQkxPQ0stTElOSy1CVVRUT04nLFxuXTtcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSBjb250ZXh0dWFsIG1lbnUgd2l0aCBvbmUgb3IgbW9yZSBhY3Rpb24gZWxlbWVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW1lbnUtYnV0dG9uYC9gc2JiLW1lbnUtbGlua2Agb3Igb3RoZXIgZWxlbWVudHMgdG8gdGhlIG1lbnUuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW1lbnVgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbWVudWAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbWVudWAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbWVudWAgaXMgY2xvc2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLW1lbnUtei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItbWVudScpXG5jbGFzcyBTYmJNZW51RWxlbWVudCBleHRlbmRzIFNiYk5hbWVkU2xvdExpc3RNaXhpbjxcbiAgU2JiTWVudUJ1dHRvbkVsZW1lbnQgfCBTYmJNZW51TGlua0VsZW1lbnQsXG4gIHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudFxuPihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXMgPSBbJ3NiYi1tZW51LWJ1dHRvbicsICdzYmItbWVudS1saW5rJ107XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBtZW51IG92ZXJsYXkuXG4gICAqIEFjY2VwdHMgYm90aCBhIHN0cmluZyAoaWQgb2YgYW4gZWxlbWVudCkgb3IgYW4gSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB0cmlnZ2VyKHZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3RyaWdnZXI7XG4gICAgdGhpcy5fdHJpZ2dlciA9IHZhbHVlO1xuICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJDbGlja0xpc3RlbmVyKHRoaXMuX3RyaWdnZXIsIG9sZFZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRyaWdnZXIoKTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcjtcbiAgfVxuICBwcml2YXRlIF90cmlnZ2VyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGlubmVyIGxpc3QuXG4gICAqIFVzZWQgb25seSBpZiB0aGUgbWVudSBhdXRvbWF0aWNhbGx5IHJlbmRlcnMgdGhlIGFjdGlvbnMgaW5zaWRlIGFzIGEgbGlzdC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsaXN0LWFjY2Vzc2liaWxpdHktbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsaXN0QWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIF9tZW51ITogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWVudUNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfc2Nyb2xsSGFuZGxlciA9IG5ldyBTYmJTY3JvbGxIYW5kbGVyKCk7XG4gIHByaXZhdGUgX2luZXJ0Q29udHJvbGxlciA9IG5ldyBTYmJJbmVydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX21lZGlhTWF0Y2hlciA9IG5ldyBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyKHRoaXMsIHtcbiAgICBbU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEJlbG93XTogKG1hdGNoZXMpID0+IHtcbiAgICAgIGlmIChtYXRjaGVzICYmICh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZGlzYWJsZVNjcm9sbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignY2xpY2snLCAoZSkgPT4gdGhpcy5fb25DbGljayhlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG1lbnUgb24gdHJpZ2dlciBjbGljay5cbiAgICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2luZycgfHwgIXRoaXMuX21lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLl9zZXRNZW51UG9zaXRpb24oKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcblxuICAgIC8vIEZyb20gemVybyB0byBtZWRpdW0sIGRpc2FibGUgc2Nyb2xsXG4gICAgaWYgKHRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaGVzKFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRCZWxvdykpIHtcbiAgICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZGlzYWJsZVNjcm9sbCgpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbWVudS5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1tZW51LWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5faW5lcnRDb250cm9sbGVyLmFjdGl2YXRlKCk7XG4gICAgdGhpcy5fc2V0TWVudUZvY3VzKCk7XG4gICAgdGhpcy5fZm9jdXNIYW5kbGVyLnRyYXAodGhpcyk7XG4gICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuX21lbnU/LmZpcnN0RWxlbWVudENoaWxkPy5zY3JvbGxUbygwLCAwKTtcbiAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuZGVhY3RpdmF0ZSgpO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmZvY3VzKHtcbiAgICAgIC8vIFdoZW4gaW5zaWRlIHRoZSBzYmItaGVhZGVyLCB3ZSBwcmV2ZW50IHRoZSBzY3JvbGwgdG8gYXZvaWQgdGhlIHNuYXBwaW5nIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2VcbiAgICAgIHByZXZlbnRTY3JvbGw6XG4gICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmxvY2FsTmFtZSA9PT0gJ3NiYi1oZWFkZXItYnV0dG9uJyB8fFxuICAgICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5sb2NhbE5hbWUgPT09ICdzYmItaGVhZGVyLWxpbmsnLFxuICAgIH0pO1xuICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCgpO1xuICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcblxuICAgIC8vIFN0YXJ0aW5nIGZyb20gYnJlYWtwb2ludCBtZWRpdW0sIGVuYWJsZSBzY3JvbGxcbiAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2xpY2sgYW5kIGNoZWNrcyBpZiBpdHMgdGFyZ2V0IGlzIGEgc2JiLW1lbnUtYnV0dG9uL3NiYi1tZW51LWxpbmsuXG4gICAqL1xuICBwcml2YXRlIF9vbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGFyZ2V0Py5sb2NhbE5hbWUgPT09ICdzYmItbWVudS1idXR0b24nIHx8IHRhcmdldD8ubG9jYWxOYW1lID09PSAnc2JiLW1lbnUtbGluaycpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghaXNBcnJvd0tleVByZXNzZWQoZXZ0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGVuYWJsZWRBY3Rpb25zOiBFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPFNiYk1lbnVCdXR0b25FbGVtZW50IHwgU2JiTWVudUxpbmtFbGVtZW50PihcbiAgICAgICAgJ3NiYi1tZW51LWJ1dHRvbiwgc2JiLW1lbnUtbGluaycsXG4gICAgICApLFxuICAgICkuZmlsdGVyKFxuICAgICAgKGVsKSA9PiAoIWVsLmRpc2FibGVkIHx8IGVsLmRpc2FibGVkSW50ZXJhY3RpdmUpICYmIGludGVyYWN0aXZpdHlDaGVja2VyLmlzVmlzaWJsZShlbCksXG4gICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBlbmFibGVkQWN0aW9ucy5maW5kSW5kZXgoKGU6IEVsZW1lbnQpID0+IGUgPT09IGV2dC50YXJnZXQpO1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZ0LCBjdXJyZW50LCBlbmFibGVkQWN0aW9ucy5sZW5ndGgpO1xuXG4gICAgKGVuYWJsZWRBY3Rpb25zW25leHRJbmRleF0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gIH1cblxuICAvLyBDbG9zZXMgdGhlIG1lbnUgb24gXCJFc2NcIiBrZXkgcHJlc3NlZCBhbmQgdHJhcHMgZm9jdXMgd2l0aGluIHRoZSBtZW51LlxuICBwcml2YXRlIGFzeW5jIF9vbktleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlcyB0cmlnZ2VyIGNsaWNrIGxpc3RlbmVyIG9uIHRyaWdnZXIgY2hhbmdlLlxuICBwcml2YXRlIF9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcihcbiAgICBuZXdWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIG9sZFZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX21lbnVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSh0aGlzLnRyaWdnZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgcmVuZGVyUm9vdCA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtcbiAgICAvLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCBtZW51IGNhbiBib3RoIGJlIGEgbGlzdCBhbmQganVzdCBhIGNvbnRhaW5lciwgd2UgbmVlZCB0byBjaGVjayBpdHNcbiAgICAvLyBzdGF0ZSBiZWZvcmUgdGhlIFNiYk5hbWVkU2xvdExpc3RNaXhpbiBoYW5kbGVzIHRoZSBzbG90Y2hhbmdlIGV2ZW50LCBpbiBvcmRlciB0byBhdm9pZFxuICAgIC8vIGl0IGludGVycHJldGluZyB0aGUgbm9uIGxpc3QgY2FzZSBhcyBhIGxpc3QuXG4gICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgKGUpID0+IHRoaXMuX2NoZWNrTGlzdENhc2UoZSksIHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbmRlclJvb3Q7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX21lbnVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tMaXN0Q2FzZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBJZiBhbGwgY2hpbGRyZW4gYXJlIHNiYi1tZW51LWJ1dHRvbi9tZW51LWxpbmsgaW5zdGFuY2VzLCB3ZSByZW5kZXIgdGhlbSBhcyBhIGxpc3QuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGlsZHJlbj8ubGVuZ3RoICYmXG4gICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gPz8gW10pLmV2ZXJ5KFxuICAgICAgICAoYykgPT4gYy5sb2NhbE5hbWUgPT09ICdzYmItbWVudS1idXR0b24nIHx8IGMubG9jYWxOYW1lID09PSAnc2JiLW1lbnUtbGluaycsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZm9yRWFjaCgoYykgPT4gYy5yZW1vdmVBdHRyaWJ1dGUoJ3Nsb3QnKSk7XG4gICAgICB0aGlzLmxpc3RDaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUodHJpZ2dlcjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG5cbiAgICBpZiAoIXRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCBgc2JiLW1lbnUtJHtuZXh0SWQrK31gO1xuICAgIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQsICdtZW51JywgdGhpcy5pZCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5fbWVudUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fbWVudUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLm9wZW4oKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9tZW51Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRNZW51UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyBXaXRob3V0IGNhcHR1cmUsIG90aGVyIHNjcm9sbCBjb250ZXh0cyB3b3VsZCBub3QgYnViYmxlIHRvIHRoaXMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAvLyBDYXB0dXJlIGFsbG93cyB1cyB0byByZWFjdCB0byBhbGwgc2Nyb2xsIGNvbnRleHRzIGluIHRoaXMgRE9NLlxuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0TWVudVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwge1xuICAgICAgc2lnbmFsOiB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2ssIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbG9zZSBtZW51IGF0IGFueSBjbGljayBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IGluc2lkZSB0aGUgPHNiYi1tZW51PiB0aGF0IGJ1YmJsZXMgdG8gdGhlIGNvbnRhaW5lci5cbiAgcHJpdmF0ZSBfY2xvc2VPbkludGVyYWN0aXZlRWxlbWVudENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoSU5URVJBQ1RJVkVfRUxFTUVOVFMuaW5jbHVkZXModGFyZ2V0Lm5vZGVOYW1lKSAmJiAhdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBtZW51LlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgPSBpc0V2ZW50T25FbGVtZW50KHRoaXMuX21lbnUsIGV2ZW50KTtcbiAgfTtcblxuICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgJiYgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fbWVudSwgZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCBtZW51IHBvc2l0aW9uICh4LCB5KSB0byAnMCcgb25jZSB0aGUgbWVudSBpcyBjbG9zZWQgYW5kIHRoZSB0cmFuc2l0aW9uIGVuZGVkIHRvIHByZXZlbnQgdGhlXG4gIC8vIHZpZXdwb3J0IGZyb20gb3ZlcmZsb3dpbmcuIEFuZCBzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbmNlIHRoZSBtZW51IGlzIG9wZW4uXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25NZW51QW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQuXG4gIHByaXZhdGUgX3NldE1lbnVGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcihJU19GT0NVU0FCTEVfUVVFUlkpIGFzIEhUTUxFbGVtZW50O1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gIH1cblxuICAvLyBTZXQgbWVudSBwb3NpdGlvbiBhbmQgbWF4IGhlaWdodCBpZiB0aGUgYnJlYWtwb2ludCBpcyBtZWRpdW0tdWx0cmEuXG4gIHByaXZhdGUgX3NldE1lbnVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTdGFydGluZyBmcm9tIGJyZWFrcG9pbnQgbWVkaXVtXG4gICAgaWYgKFxuICAgICAgKHRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaGVzKFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRCZWxvdykgPz8gdHJ1ZSkgfHxcbiAgICAgICF0aGlzLl9tZW51IHx8XG4gICAgICAhdGhpcy5fdHJpZ2dlckVsZW1lbnQgfHxcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJ1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnVQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1tZW51X19jb250ZW50JykhLFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItbWVudV9fY29udGFpbmVyJykhLFxuICAgICAge1xuICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTUVOVV9PRkZTRVQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1tZW51LXBvc2l0aW9uLXgnLCBgJHttZW51UG9zaXRpb24ubGVmdH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLW1lbnUtcG9zaXRpb24teScsIGAke21lbnVQb3NpdGlvbi50b3B9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1tZW51LW1heC1oZWlnaHQnLCBtZW51UG9zaXRpb24ubWF4SGVpZ2h0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIC8vIFRPRE86IEhhbmRsZSBjYXNlIHdpdGggb3RoZXIgZWxlbWVudHMgdGhhbiBzYmItbWVudS1idXR0b24vc2JiLW1lbnUtbGluay5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItbWVudV9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25NZW51QW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLW1lbnVcIlxuICAgICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpID0+ICh0aGlzLl9tZW51ID0gZWwgYXMgSFRNTERpdkVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIEBjbGljaz0keyhldmVudDogRXZlbnQpID0+IHRoaXMuX2Nsb3NlT25JbnRlcmFjdGl2ZUVsZW1lbnRDbGljayhldmVudCl9XG4gICAgICAgICAgICBAc2Nyb2xsPSR7KGU6IEV2ZW50KSA9PiBmb3J3YXJkRXZlbnQoZSwgZG9jdW1lbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItbWVudV9fY29udGVudFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLnJlbmRlckxpc3QoeyBjbGFzczogJ3NiYi1tZW51LWxpc3QnLCBhcmlhTGFiZWw6IHRoaXMubGlzdEFjY2Vzc2liaWxpdHlMYWJlbCB9KVxuICAgICAgICAgICAgICA6IGh0bWxgPHNsb3Q+PC9zbG90PmB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLW1lbnUnOiBTYmJNZW51RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQ0EsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sdUJBQXVCO0FBQUEsRUFDM0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBOztBQUdGLElBQUksU0FBUztJQWdCUCxrQkFBYyxNQUFBOzswQkFEbkIsY0FBYyxVQUFVLENBQUM7Ozs7b0JBQ0csc0JBRzNCLHVCQUF1Qjs7Ozs7O0FBSEosRUFBQSxtQkFBUSxZQUdIO0FBQUEsSUE2Q3hCLGNBQUE7OztBQXBCQTtBQXZCNEIsV0FBbUIsdUJBTDNDLHFEQUs4QyxDQUFDLG1CQUFtQixlQUFlO0FBZTdFLFdBQVEsV0FBZ0M7QUFRaEMseUJBQUEsMENBQUEsa0JBQUEsTUFBQSxzQ0FBaUMsRUFBRTtBQUUzQyxXQUFBLFFBQXVCLGtCQUFBLE1BQUEseUNBQUE7QUFDdkIsV0FBZSxrQkFBdUI7QUFDdEMsV0FBeUIsNEJBQVk7QUFHckMsV0FBQSxnQkFBZ0IsSUFBSSxnQkFBZTtBQUNuQyxXQUFBLGlCQUFpQixJQUFJLGlCQUFnQjtBQUNyQyxXQUFBLG1CQUFtQixJQUFJLG1CQUFtQixJQUFJO0FBQzlDLFdBQUEsZ0JBQWdCLElBQUksMEJBQTBCLE1BQU07QUFBQSxR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
590
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21lbnUvbWVudS9tZW51LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQge1xuICBnZXROZXh0RWxlbWVudEluZGV4LFxuICBpbnRlcmFjdGl2aXR5Q2hlY2tlcixcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQsXG4gIFNiYkZvY3VzSGFuZGxlcixcbiAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyxcbn0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7XG4gIFNiYkluZXJ0Q29udHJvbGxlcixcbiAgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcixcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEJlbG93LFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHtcbiAgZmluZFJlZmVyZW5jZWRFbGVtZW50LFxuICBpc1plcm9BbmltYXRpb25EdXJhdGlvbixcbiAgU2JiU2Nyb2xsSGFuZGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgZm9yd2FyZEV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJOYW1lZFNsb3RMaXN0TWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk1lbnVCdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vbWVudS1idXR0b24uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJNZW51TGlua0VsZW1lbnQgfSBmcm9tICcuLi9tZW51LWxpbmsuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9tZW51LnNjc3M/bGl0JmlubGluZSc7XG5cbmNvbnN0IE1FTlVfT0ZGU0VUID0gODtcbmNvbnN0IElOVEVSQUNUSVZFX0VMRU1FTlRTID0gW1xuICAnQScsXG4gICdCVVRUT04nLFxuICAnU0JCLUJVVFRPTicsXG4gICdTQkItQlVUVE9OLUxJTksnLFxuICAnU0JCLUxJTksnLFxuICAnU0JCLUJMT0NLLUxJTksnLFxuICAnU0JCLUxJTkstQlVUVE9OJyxcbiAgJ1NCQi1CTE9DSy1MSU5LLUJVVFRPTicsXG5dO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNvbnRleHR1YWwgbWVudSB3aXRoIG9uZSBvciBtb3JlIGFjdGlvbiBlbGVtZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItbWVudS1idXR0b25gL2BzYmItbWVudS1saW5rYCBvciBvdGhlciBlbGVtZW50cyB0byB0aGUgbWVudS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbWVudWAgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1tZW51YCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1tZW51YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1tZW51YCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItbWVudS16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1tZW51JylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHBvcG92ZXI6ICdtYW51YWwnLFxufSlcbmNsYXNzIFNiYk1lbnVFbGVtZW50IGV4dGVuZHMgU2JiTmFtZWRTbG90TGlzdE1peGluPFxuICBTYmJNZW51QnV0dG9uRWxlbWVudCB8IFNiYk1lbnVMaW5rRWxlbWVudCxcbiAgdHlwZW9mIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50XG4+KFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFsnc2JiLW1lbnUtYnV0dG9uJywgJ3NiYi1tZW51LWxpbmsnXTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIG1lbnUgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHRyaWdnZXIodmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdHJpZ2dlcjtcbiAgICB0aGlzLl90cmlnZ2VyID0gdmFsdWU7XG4gICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIodGhpcy5fdHJpZ2dlciwgb2xkVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdHJpZ2dlcigpOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VyO1xuICB9XG4gIHByaXZhdGUgX3RyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgaW5uZXIgbGlzdC5cbiAgICogVXNlZCBvbmx5IGlmIHRoZSBtZW51IGF1dG9tYXRpY2FsbHkgcmVuZGVycyB0aGUgYWN0aW9ucyBpbnNpZGUgYXMgYSBsaXN0LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2xpc3QtYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGxpc3RBY2Nlc3NpYmlsaXR5TGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX21lbnUhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9tZW51Q29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfd2luZG93RXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcml2YXRlIF9zY3JvbGxIYW5kbGVyID0gbmV3IFNiYlNjcm9sbEhhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaW5lcnRDb250cm9sbGVyID0gbmV3IFNiYkluZXJ0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbWVkaWFNYXRjaGVyID0gbmV3IFNiYk1lZGlhTWF0Y2hlckNvbnRyb2xsZXIodGhpcywge1xuICAgIFtTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3ddOiAobWF0Y2hlcykgPT4ge1xuICAgICAgaWYgKG1hdGNoZXMgJiYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmVkJykpIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsIChlKSA9PiB0aGlzLl9vbkNsaWNrKGUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlEb3duKGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgbWVudSBvbiB0cmlnZ2VyIGNsaWNrLlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCAhdGhpcy5fbWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3NldE1lbnVQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuXG4gICAgLy8gRnJvbSB6ZXJvIHRvIG1lZGl1bSwgZGlzYWJsZSBzY3JvbGxcbiAgICBpZiAodGhpcy5fbWVkaWFNYXRjaGVyLm1hdGNoZXMoU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEJlbG93KSkge1xuICAgICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtZW51LlxuICAgKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW1lbnUtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9zZXRNZW51Rm9jdXMoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIudHJhcCh0aGlzKTtcbiAgICB0aGlzLl9hdHRhY2hXaW5kb3dFdmVudHMoKTtcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5oaWRlUG9wb3Zlcj8uKCk7XG5cbiAgICB0aGlzLl9tZW51Py5maXJzdEVsZW1lbnRDaGlsZD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5faW5lcnRDb250cm9sbGVyLmRlYWN0aXZhdGUoKTtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICAvLyBNYW51YWxseSBmb2N1cyBsYXN0IGZvY3VzZWQgZWxlbWVudFxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5mb2N1cyh7XG4gICAgICAvLyBXaGVuIGluc2lkZSB0aGUgc2JiLWhlYWRlciwgd2UgcHJldmVudCB0aGUgc2Nyb2xsIHRvIGF2b2lkIHRoZSBzbmFwcGluZyB0byB0aGUgdG9wIG9mIHRoZSBwYWdlXG4gICAgICBwcmV2ZW50U2Nyb2xsOlxuICAgICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5sb2NhbE5hbWUgPT09ICdzYmItaGVhZGVyLWJ1dHRvbicgfHxcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQubG9jYWxOYW1lID09PSAnc2JiLWhlYWRlci1saW5rJyxcbiAgICB9KTtcbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG5cbiAgICAvLyBTdGFydGluZyBmcm9tIGJyZWFrcG9pbnQgbWVkaXVtLCBlbmFibGUgc2Nyb2xsXG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrIGFuZCBjaGVja3MgaWYgaXRzIHRhcmdldCBpcyBhIHNiYi1tZW51LWJ1dHRvbi9zYmItbWVudS1saW5rLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRhcmdldD8ubG9jYWxOYW1lID09PSAnc2JiLW1lbnUtYnV0dG9uJyB8fCB0YXJnZXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1tZW51LWxpbmsnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5RG93bihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgZW5hYmxlZEFjdGlvbnM6IEVsZW1lbnRbXSA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw8U2JiTWVudUJ1dHRvbkVsZW1lbnQgfCBTYmJNZW51TGlua0VsZW1lbnQ+KFxuICAgICAgICAnc2JiLW1lbnUtYnV0dG9uLCBzYmItbWVudS1saW5rJyxcbiAgICAgICksXG4gICAgKS5maWx0ZXIoXG4gICAgICAoZWwpID0+ICghZWwuZGlzYWJsZWQgfHwgZWwuZGlzYWJsZWRJbnRlcmFjdGl2ZSkgJiYgaW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNWaXNpYmxlKGVsKSxcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBlbmFibGVkQWN0aW9ucy5maW5kSW5kZXgoKGU6IEVsZW1lbnQpID0+IGUgPT09IGV2dC50YXJnZXQpO1xuXG4gICAgbGV0IG5leHRJbmRleDtcbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgbmV4dEluZGV4ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldnQsIGN1cnJlbnQsIGVuYWJsZWRBY3Rpb25zLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIG5leHRJbmRleCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBuZXh0SW5kZXggPSBlbmFibGVkQWN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIGFsbCB0aGUgY2FzZSBhbGxvd2VkIGJ5IGBpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWRgIHNob3VsZCBiZSBjb3ZlcmVkXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBuZXh0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIChlbmFibGVkQWN0aW9uc1tuZXh0SW5kZXhdIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBtZW51IG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBhc3luYyBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCxcbiAgICBvbGRWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9tZW51Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3JlYXRlUmVuZGVyUm9vdCgpOiBIVE1MRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHJlbmRlclJvb3QgPSBzdXBlci5jcmVhdGVSZW5kZXJSb290KCk7XG4gICAgLy8gRHVlIHRvIHRoZSBmYWN0IHRoYXQgbWVudSBjYW4gYm90aCBiZSBhIGxpc3QgYW5kIGp1c3QgYSBjb250YWluZXIsIHdlIG5lZWQgdG8gY2hlY2sgaXRzXG4gICAgLy8gc3RhdGUgYmVmb3JlIHRoZSBTYmJOYW1lZFNsb3RMaXN0TWl4aW4gaGFuZGxlcyB0aGUgc2xvdGNoYW5nZSBldmVudCwgaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAvLyBpdCBpbnRlcnByZXRpbmcgdGhlIG5vbiBsaXN0IGNhc2UgYXMgYSBsaXN0LlxuICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIChlKSA9PiB0aGlzLl9jaGVja0xpc3RDYXNlKGUpLCB7XG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiByZW5kZXJSb290O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKHRoaXMudHJpZ2dlcik7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9tZW51Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrTGlzdENhc2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gSWYgYWxsIGNoaWxkcmVuIGFyZSBzYmItbWVudS1idXR0b24vbWVudS1saW5rIGluc3RhbmNlcywgd2UgcmVuZGVyIHRoZW0gYXMgYSBsaXN0LlxuICAgIGlmIChcbiAgICAgIHRoaXMuY2hpbGRyZW4/Lmxlbmd0aCAmJlxuICAgICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuID8/IFtdKS5ldmVyeShcbiAgICAgICAgKGMpID0+IGMubG9jYWxOYW1lID09PSAnc2JiLW1lbnUtYnV0dG9uJyB8fCBjLmxvY2FsTmFtZSA9PT0gJ3NiYi1tZW51LWxpbmsnLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuLmZvckVhY2goKGMpID0+IGMucmVtb3ZlQXR0cmlidXRlKCdzbG90JykpO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4gPSBbXTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdHJpZ2dlciBpcyB2YWxpZCBhbmQgYXR0YWNoIGNsaWNrIGV2ZW50IGxpc3RlbmVycy5cbiAgcHJpdmF0ZSBfY29uZmlndXJlKHRyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuXG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBmaW5kUmVmZXJlbmNlZEVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICBpZiAoIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pZCA9IHRoaXMuaWQgfHwgYHNiYi1tZW51LSR7bmV4dElkKyt9YDtcbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMuaWQsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuX21lbnVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX21lbnVDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fbWVudUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoV2luZG93RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0TWVudVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE1lbnVQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fb25LZXlkb3duRXZlbnQoZXZlbnQpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2xvc2UgbWVudSBhdCBhbnkgY2xpY2sgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCBpbnNpZGUgdGhlIDxzYmItbWVudT4gdGhhdCBidWJibGVzIHRvIHRoZSBjb250YWluZXIuXG4gIHByaXZhdGUgX2Nsb3NlT25JbnRlcmFjdGl2ZUVsZW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKElOVEVSQUNUSVZFX0VMRU1FTlRTLmluY2x1ZGVzKHRhcmdldC5ub2RlTmFtZSkgJiYgIXRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9tZW51LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX21lbnUsIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgbWVudSBwb3NpdGlvbiAoeCwgeSkgdG8gJzAnIG9uY2UgdGhlIG1lbnUgaXMgY2xvc2VkIGFuZCB0aGUgdHJhbnNpdGlvbiBlbmRlZCB0byBwcmV2ZW50IHRoZVxuICAvLyB2aWV3cG9ydCBmcm9tIG92ZXJmbG93aW5nLiBBbmQgc2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgb25jZSB0aGUgbWVudSBpcyBvcGVuLlxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uTWVudUFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcml2YXRlIF9zZXRNZW51Rm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoSVNfRk9DVVNBQkxFX1FVRVJZKSBhcyBIVE1MRWxlbWVudDtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICB9XG5cbiAgLy8gU2V0IG1lbnUgcG9zaXRpb24gYW5kIG1heCBoZWlnaHQgaWYgdGhlIGJyZWFrcG9pbnQgaXMgbWVkaXVtLXVsdHJhLlxuICBwcml2YXRlIF9zZXRNZW51UG9zaXRpb24oKTogdm9pZCB7XG4gICAgLy8gU3RhcnRpbmcgZnJvbSBicmVha3BvaW50IG1lZGl1bVxuICAgIGlmIChcbiAgICAgICh0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQmVsb3cpID8/IHRydWUpIHx8XG4gICAgICAhdGhpcy5fbWVudSB8fFxuICAgICAgIXRoaXMuX3RyaWdnZXJFbGVtZW50IHx8XG4gICAgICB0aGlzLnN0YXRlID09PSAnY2xvc2luZydcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItbWVudV9fY29udGVudCcpISxcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLW1lbnVfX2NvbnRhaW5lcicpISxcbiAgICAgIHtcbiAgICAgICAgdmVydGljYWxPZmZzZXQ6IE1FTlVfT0ZGU0VULFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1wb3NpdGlvbi14JywgYCR7bWVudVBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1tZW51LXBvc2l0aW9uLXknLCBgJHttZW51UG9zaXRpb24udG9wfXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbWVudS1tYXgtaGVpZ2h0JywgbWVudVBvc2l0aW9uLm1heEhlaWdodCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBUT0RPOiBIYW5kbGUgY2FzZSB3aXRoIG90aGVyIGVsZW1lbnRzIHRoYW4gc2JiLW1lbnUtYnV0dG9uL3NiYi1tZW51LWxpbmsuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLW1lbnVfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uTWVudUFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1tZW51XCJcbiAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KSA9PiAodGhpcy5fbWVudSA9IGVsIGFzIEhUTUxEaXZFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9jbG9zZU9uSW50ZXJhY3RpdmVFbGVtZW50Q2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgQHNjcm9sbD0keyhlOiBFdmVudCkgPT4gZm9yd2FyZEV2ZW50KGUsIGRvY3VtZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLW1lbnVfX2NvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7dGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgICAgID8gdGhpcy5yZW5kZXJMaXN0KHsgY2xhc3M6ICdzYmItbWVudS1saXN0JywgYXJpYUxhYmVsOiB0aGlzLmxpc3RBY2Nlc3NpYmlsaXR5TGFiZWwgfSlcbiAgICAgICAgICAgICAgOiBodG1sYDxzbG90Pjwvc2xvdD5gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1tZW51JzogU2JiTWVudUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/elements/navigation/navigation/navigation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAoBtE,OAAO,oCAAoC,CAAC;;AAW5C;;;;;;;;;;;GAWG;AACH,qBAKM,oBAAqB,SAAQ,yBAAgD;IACjF,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;OAGG;IACH,IACW,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,EAIpD;IACD,IAAW,OAAO,IAAI,MAAM,GAAG,WAAW,GAAG,IAAI,CAEhD;IACD,OAAO,CAAC,QAAQ,CAAqC;IAErD;;OAEG;IACH,SAEgB,uBAAuB,EAAE,MAAM,CAAM;IAErD;;OAEG;IACM,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IAE9E,IAAW,uBAAuB,IAAI,WAAW,GAAG,IAAI,CAEvD;IAED,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,yBAAyB,CAAe;IAChD,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,+BAA+B,CAAkB;IACzD,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,yBAAyB,CAG9B;;IAeH;;OAEG;IACI,IAAI,IAAI,IAAI;IAwBnB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACI,KAAK,IAAI,IAAI;IAmBpB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,gBAAgB,CAEtB;IAIF,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB,CAS1B;IAGF,OAAO,CAAC,qBAAqB,CAI3B;IAGF,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,mBAAmB;IAkBX,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;cAQzB,MAAM,IAAI,cAAc;CAqC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,oBAAoB,CAAC;KACxC;CACF"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../../src/elements/navigation/navigation/navigation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAoBtE,OAAO,oCAAoC,CAAC;;AAW5C;;;;;;;;;;;GAWG;AACH,qBAMM,oBAAqB,SAAQ,yBAAgD;IACjF,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;OAGG;IACH,IACW,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,EAIpD;IACD,IAAW,OAAO,IAAI,MAAM,GAAG,WAAW,GAAG,IAAI,CAEhD;IACD,OAAO,CAAC,QAAQ,CAAqC;IAErD;;OAEG;IACH,SAEgB,uBAAuB,EAAE,MAAM,CAAM;IAErD;;OAEG;IACM,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IAE9E,IAAW,uBAAuB,IAAI,WAAW,GAAG,IAAI,CAEvD;IAED,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,yBAAyB,CAAe;IAChD,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,+BAA+B,CAAkB;IACzD,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,yBAAyB,CAG9B;;IAeH;;OAEG;IACI,IAAI,IAAI,IAAI;IA0BnB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACI,KAAK,IAAI,IAAI;IAmBpB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,gBAAgB,CAEtB;IAIF,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB,CAS1B;IAGF,OAAO,CAAC,qBAAqB,CAI3B;IAGF,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,mBAAmB;IAkBX,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;cAQzB,MAAM,IAAI,cAAc;CAqC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,oBAAoB,CAAC;KACxC;CACF"}