@sbb-esta/lyne-elements 2.11.1 → 2.11.3

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 (374) hide show
  1. package/accordion/accordion.component.js +19 -22
  2. package/action-group/action-group.component.js +3 -5
  3. package/alert/alert/alert.component.js +1 -2
  4. package/alert/alert-group/alert-group.component.js +2 -3
  5. package/autocomplete/autocomplete-base-element.js +71 -82
  6. package/autocomplete/autocomplete.component.js +31 -36
  7. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +44 -52
  8. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +3 -4
  9. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +17 -20
  10. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +23 -26
  11. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +9 -9
  12. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +29 -33
  13. package/button/mini-button/mini-button.component.js +1 -1
  14. package/button/mini-button-group/mini-button-group.component.js +1 -2
  15. package/calendar/calendar.component.js +8 -13
  16. package/card/card/card.component.js +12 -12
  17. package/card/card-badge/card-badge.component.js +16 -16
  18. package/card/common/card-action-common.js +23 -25
  19. package/checkbox/checkbox/checkbox.component.js +17 -20
  20. package/checkbox/checkbox-group/checkbox-group.component.js +39 -52
  21. package/checkbox/checkbox-panel/checkbox-panel.component.js +22 -25
  22. package/checkbox/common/checkbox-common.js +13 -15
  23. package/chip/chip-group/chip-group.component.js +59 -70
  24. package/clock/clock.component.js +50 -60
  25. package/container/container/container.component.js +28 -29
  26. package/container/sticky-bar/sticky-bar.component.js +26 -27
  27. package/core/a11y/focus-trap-controller.js +11 -14
  28. package/core/a11y/focus.js +27 -29
  29. package/core/a11y/input-modality-detector.js +18 -19
  30. package/core/a11y/interactivity-checker.js +10 -10
  31. package/core/base-elements/button-base-element.js +13 -18
  32. package/core/base-elements/link-base-element.js +3 -6
  33. package/core/base-elements/open-close-base-element.js +1 -1
  34. package/core/controllers/connected-abort-controller.js +2 -4
  35. package/core/controllers/escapable-overlay-controller.js +10 -12
  36. package/core/controllers/id-reference-controller.js +13 -14
  37. package/core/controllers/inert-controller.js +8 -10
  38. package/core/controllers/slot-state-controller.js +16 -26
  39. package/core/datetime/date-adapter.d.ts.map +1 -1
  40. package/core/datetime/date-adapter.js +21 -21
  41. package/core/datetime/native-date-adapter.js +11 -11
  42. package/core/decorators/date-converter.js +10 -12
  43. package/core/decorators/date-only-type.js +5 -6
  44. package/core/decorators/force-type.js +4 -5
  45. package/core/dom/breakpoint.js +8 -8
  46. package/core/dom/input-element.js +4 -9
  47. package/core/eventing/event-emitter.js +4 -5
  48. package/core/mixins/form-associated-checkbox-mixin.js +32 -37
  49. package/core/mixins/form-associated-input-mixin.js +58 -64
  50. package/core/mixins/form-associated-mixin.js +42 -44
  51. package/core/mixins/form-associated-radio-button-mixin.js +3 -5
  52. package/core/mixins/hydration-mixin.js +12 -13
  53. package/core/mixins/named-slot-list-mixin.js +32 -37
  54. package/core/mixins/panel-mixin.js +26 -27
  55. package/core/mixins.js +1 -1
  56. package/core/overlay/position.js +23 -23
  57. package/core/styles/core/mediaqueries.scss +1 -1
  58. package/core/styles/core.scss +27 -28
  59. package/core/styles/mixins/table.scss +1 -24
  60. package/core/testing/event-spy.js +2 -4
  61. package/core/testing/wait-for-image-ready.js +8 -9
  62. package/core/testing/wait-for-render.js +8 -9
  63. package/custom-elements.json +2 -2
  64. package/date-input/date-input.component.js +2 -4
  65. package/datepicker/common/datepicker-association-controllers.js +21 -24
  66. package/datepicker/common/datepicker-button.js +53 -57
  67. package/datepicker/datepicker/datepicker.component.js +82 -95
  68. package/datepicker/datepicker-next-day/datepicker-next-day.component.js +1 -1
  69. package/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +1 -1
  70. package/datepicker/datepicker-toggle/datepicker-toggle.component.js +74 -81
  71. package/development/accordion/accordion.component.js +4 -7
  72. package/development/action-group/action-group.component.js +3 -5
  73. package/development/alert/alert/alert.component.js +2 -3
  74. package/development/alert/alert-group/alert-group.component.js +2 -3
  75. package/development/autocomplete/autocomplete-base-element.js +19 -30
  76. package/development/autocomplete/autocomplete.component.js +7 -12
  77. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +10 -18
  78. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +3 -4
  79. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +1 -1
  80. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +4 -7
  81. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +4 -7
  82. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -2
  83. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +1 -1
  84. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +5 -9
  85. package/development/button/accent-button/accent-button.component.js +1 -1
  86. package/development/button/accent-button-link/accent-button-link.component.js +1 -1
  87. package/development/button/accent-button-static/accent-button-static.component.js +1 -1
  88. package/development/button/button/button.component.js +1 -1
  89. package/development/button/button-link/button-link.component.js +1 -1
  90. package/development/button/button-static/button-static.component.js +1 -1
  91. package/development/button/common/button-common.js +1 -1
  92. package/development/button/mini-button/mini-button.component.js +1 -1
  93. package/development/button/mini-button-group/mini-button-group.component.js +2 -3
  94. package/development/button/secondary-button/secondary-button.component.js +1 -1
  95. package/development/button/secondary-button-link/secondary-button-link.component.js +1 -1
  96. package/development/button/secondary-button-static/secondary-button-static.component.js +1 -1
  97. package/development/button/transparent-button/transparent-button.component.js +1 -1
  98. package/development/button/transparent-button-link/transparent-button-link.component.js +1 -1
  99. package/development/button/transparent-button-static/transparent-button-static.component.js +1 -1
  100. package/development/calendar/calendar.component.js +9 -14
  101. package/development/card/card/card.component.js +1 -1
  102. package/development/card/card-badge/card-badge.component.js +1 -1
  103. package/development/card/card-button/card-button.component.js +1 -1
  104. package/development/card/card-link/card-link.component.js +1 -1
  105. package/development/card/common/card-action-common.js +3 -5
  106. package/development/checkbox/checkbox/checkbox.component.js +2 -5
  107. package/development/checkbox/checkbox-group/checkbox-group.component.js +8 -21
  108. package/development/checkbox/checkbox-panel/checkbox-panel.component.js +2 -5
  109. package/development/checkbox/common/checkbox-common.js +3 -5
  110. package/development/chip/chip/chip.component.js +1 -1
  111. package/development/chip/chip-group/chip-group.component.js +15 -26
  112. package/development/chip-label/chip-label.component.js +1 -1
  113. package/development/clock/clock.component.js +23 -33
  114. package/development/container/container/container.component.js +2 -3
  115. package/development/container/sticky-bar/sticky-bar.component.js +2 -3
  116. package/development/core/a11y/arrow-navigation.js +1 -1
  117. package/development/core/a11y/fake-event-detection.js +1 -1
  118. package/development/core/a11y/focus-trap-controller.js +6 -9
  119. package/development/core/a11y/focus-visible-within-controller.js +1 -1
  120. package/development/core/a11y/focus.js +8 -10
  121. package/development/core/a11y/input-modality-detector.js +2 -3
  122. package/development/core/a11y/interactivity-checker.js +2 -2
  123. package/development/core/base-elements/action-base-element.js +2 -3
  124. package/development/core/base-elements/button-base-element.js +6 -11
  125. package/development/core/base-elements/link-base-element.js +4 -7
  126. package/development/core/base-elements/open-close-base-element.js +2 -2
  127. package/development/core/config/config.js +1 -1
  128. package/development/core/controllers/connected-abort-controller.js +3 -5
  129. package/development/core/controllers/escapable-overlay-controller.js +3 -5
  130. package/development/core/controllers/id-reference-controller.js +2 -3
  131. package/development/core/controllers/inert-controller.js +4 -6
  132. package/development/core/controllers/language-controller.js +1 -1
  133. package/development/core/controllers/media-matchers-controller.js +1 -1
  134. package/development/core/controllers/slot-state-controller.js +8 -18
  135. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  136. package/development/core/datetime/date-adapter.js +5 -5
  137. package/development/core/datetime/native-date-adapter.js +2 -2
  138. package/development/core/decorators/date-converter.js +3 -5
  139. package/development/core/decorators/date-only-type.js +2 -3
  140. package/development/core/decorators/force-type.js +3 -4
  141. package/development/core/decorators/get-override.js +1 -1
  142. package/development/core/decorators/handle-distinct-change.js +1 -1
  143. package/development/core/decorators/host-attributes.js +1 -1
  144. package/development/core/decorators/slot-state.js +1 -1
  145. package/development/core/dom/animation.js +1 -1
  146. package/development/core/dom/breakpoint.js +2 -2
  147. package/development/core/dom/find-referenced-element.js +1 -1
  148. package/development/core/dom/host-context.js +1 -1
  149. package/development/core/dom/input-element.js +3 -4
  150. package/development/core/dom/platform.js +1 -1
  151. package/development/core/dom/scroll.js +1 -1
  152. package/development/core/dom/set-or-remove-attribute.js +1 -1
  153. package/development/core/eventing/composed-path-has-attribute.js +1 -1
  154. package/development/core/eventing/event-emitter.js +2 -3
  155. package/development/core/eventing/form-element-handlers.js +1 -1
  156. package/development/core/eventing/forward-event.js +1 -1
  157. package/development/core/eventing/throttle.js +1 -1
  158. package/development/core/i18n/i18n.js +1 -1
  159. package/development/core/mixins/animation-complete-mixin.js +1 -1
  160. package/development/core/mixins/disabled-mixin.js +1 -1
  161. package/development/core/mixins/form-associated-checkbox-mixin.js +6 -9
  162. package/development/core/mixins/form-associated-input-mixin.js +14 -20
  163. package/development/core/mixins/form-associated-mixin.js +5 -7
  164. package/development/core/mixins/form-associated-radio-button-mixin.js +7 -9
  165. package/development/core/mixins/hydration-mixin.js +3 -4
  166. package/development/core/mixins/named-slot-list-mixin.js +4 -7
  167. package/development/core/mixins/negative-mixin.js +1 -1
  168. package/development/core/mixins/panel-mixin.js +2 -3
  169. package/development/core/mixins/required-mixin.js +1 -1
  170. package/development/core/mixins/update-scheduler-mixin.js +1 -1
  171. package/development/core/overlay/overlay-option-panel.js +1 -1
  172. package/development/core/overlay/overlay-trigger-attributes.js +1 -1
  173. package/development/core/overlay/overlay.js +1 -1
  174. package/development/core/overlay/position.js +5 -5
  175. package/development/core/testing/event-spy.js +3 -5
  176. package/development/core/testing/mocha-extensions.js +1 -1
  177. package/development/core/testing/wait-for-condition.js +1 -1
  178. package/development/core/testing/wait-for-image-ready.js +2 -3
  179. package/development/core/testing/wait-for-render.js +2 -3
  180. package/development/date-input/date-input.component.js +4 -6
  181. package/development/datepicker/common/datepicker-association-controllers.js +6 -9
  182. package/development/datepicker/common/datepicker-button.js +7 -11
  183. package/development/datepicker/datepicker/datepicker.component.js +22 -35
  184. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +1 -1
  185. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +1 -1
  186. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +13 -20
  187. package/development/dialog/dialog/dialog.component.js +16 -27
  188. package/development/dialog/dialog-actions/dialog-actions.component.js +1 -1
  189. package/development/dialog/dialog-content/dialog-content.component.js +1 -1
  190. package/development/dialog/dialog-title/dialog-title.component.js +1 -1
  191. package/development/divider/divider.component.js +1 -1
  192. package/development/expansion-panel/expansion-panel/expansion-panel.component.js +9 -13
  193. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +1 -1
  194. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +4 -5
  195. package/development/file-selector/common/file-selector-common.js +2 -3
  196. package/development/file-selector/file-selector/file-selector.component.js +1 -1
  197. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  198. package/development/flip-card/flip-card/flip-card.component.js +7 -13
  199. package/development/flip-card/flip-card-details/flip-card-details.component.js +2 -3
  200. package/development/flip-card/flip-card-summary/flip-card-summary.component.js +2 -3
  201. package/development/footer/footer.component.js +1 -1
  202. package/development/form-error/form-error.component.js +3 -4
  203. package/development/form-field/form-field/form-field.component.js +19 -30
  204. package/development/form-field/form-field-clear/form-field-clear.component.js +4 -6
  205. package/development/header/common/header-action-common.js +1 -1
  206. package/development/header/header/header.component.js +5 -8
  207. package/development/header/header-button/header-button.component.js +1 -1
  208. package/development/header/header-link/header-link.component.js +1 -1
  209. package/development/icon/icon-base.js +1 -1
  210. package/development/icon/icon-name-mixin.js +1 -1
  211. package/development/icon/icon-request.js +2 -3
  212. package/development/icon/icon-validate.js +1 -1
  213. package/development/icon/icon.component.js +1 -1
  214. package/development/image/image.component.js +7 -9
  215. package/development/journey-header/journey-header.component.js +1 -1
  216. package/development/lead-container/lead-container.component.js +1 -1
  217. package/development/link/block-link/block-link.component.js +1 -1
  218. package/development/link/block-link-button/block-link-button.component.js +1 -1
  219. package/development/link/block-link-static/block-link-static.component.js +1 -1
  220. package/development/link/common/block-link-common.js +1 -1
  221. package/development/link/common/inline-link-common.js +1 -1
  222. package/development/link/link/link.component.js +1 -1
  223. package/development/link/link-button/link-button.component.js +1 -1
  224. package/development/link/link-static/link-static.component.js +1 -1
  225. package/development/link-common-CJEWffDZ.js +1 -1
  226. package/development/link-list/common/link-list-base.js +1 -1
  227. package/development/link-list/link-list/link-list.component.js +1 -1
  228. package/development/link-list/link-list-anchor/link-list-anchor.component.js +1 -1
  229. package/development/loading-indicator/loading-indicator.component.js +1 -1
  230. package/development/loading-indicator-circle/loading-indicator-circle.component.js +1 -1
  231. package/development/logo/logo.component.js +1 -1
  232. package/development/map-container/map-container.component.js +2 -3
  233. package/development/menu/common/menu-action-common.js +1 -1
  234. package/development/menu/menu/menu.component.js +17 -25
  235. package/development/menu/menu-button/menu-button.component.js +1 -1
  236. package/development/menu/menu-link/menu-link.component.js +1 -1
  237. package/development/message/message.component.js +1 -1
  238. package/development/navigation/common/navigation-action-common.js +3 -5
  239. package/development/navigation/navigation/navigation.component.js +19 -35
  240. package/development/navigation/navigation-button/navigation-button.component.js +1 -1
  241. package/development/navigation/navigation-link/navigation-link.component.js +1 -1
  242. package/development/navigation/navigation-list/navigation-list.component.js +1 -1
  243. package/development/navigation/navigation-marker/navigation-marker.component.js +4 -6
  244. package/development/navigation/navigation-section/navigation-section.component.js +22 -32
  245. package/development/notification/notification.component.js +22 -24
  246. package/development/option/optgroup/optgroup-base-element.js +4 -6
  247. package/development/option/optgroup/optgroup.component.js +6 -10
  248. package/development/option/option/option-base-element.js +3 -4
  249. package/development/option/option/option.component.js +7 -10
  250. package/development/overlay/overlay-base-element.js +4 -6
  251. package/development/overlay/overlay.component.js +7 -9
  252. package/development/paginator/common/paginator-common.js +1 -1
  253. package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
  254. package/development/paginator/paginator/paginator.component.js +2 -3
  255. package/development/popover/popover/popover.component.js +12 -17
  256. package/development/popover/popover-trigger/popover-trigger.component.js +1 -1
  257. package/development/radio-button/common/radio-button-common.js +6 -10
  258. package/development/radio-button/radio-button/radio-button.component.js +2 -5
  259. package/development/radio-button/radio-button-group/radio-button-group.component.js +8 -24
  260. package/development/radio-button/radio-button-panel/radio-button-panel.component.js +3 -7
  261. package/development/screen-reader-only/screen-reader-only.component.js +1 -1
  262. package/development/select/select.component.js +26 -48
  263. package/development/selection-expansion-panel/selection-expansion-panel.component.js +7 -11
  264. package/development/sidebar/icon-sidebar/icon-sidebar.component.js +1 -1
  265. package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.js +1 -1
  266. package/development/sidebar/icon-sidebar-container/icon-sidebar-container.component.js +4 -7
  267. package/development/sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
  268. package/development/sidebar/icon-sidebar-link/icon-sidebar-link.component.js +1 -1
  269. package/development/sidebar/sidebar/sidebar.component.js +8 -15
  270. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.js +1 -1
  271. package/development/sidebar/sidebar-container/sidebar-container.component.js +9 -13
  272. package/development/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  273. package/development/sidebar/sidebar-title/sidebar-title.component.js +2 -2
  274. package/development/signet/signet.component.js +1 -1
  275. package/development/skiplink-list/skiplink-list.component.js +1 -1
  276. package/development/slider/slider.component.js +3 -4
  277. package/development/status/status.component.js +1 -1
  278. package/development/stepper/step/step.component.js +5 -7
  279. package/development/stepper/step-label/step-label.component.js +3 -4
  280. package/development/stepper/stepper/stepper.component.js +16 -29
  281. package/development/table/table-wrapper/table-wrapper.component.js +2 -7
  282. package/development/tabs/tab/tab.component.js +1 -1
  283. package/development/tabs/tab-group/tab-group.component.js +23 -38
  284. package/development/tabs/tab-label/tab-label.component.js +1 -1
  285. package/development/tag/tag/tag.component.js +6 -12
  286. package/development/tag/tag-group/tag-group.component.js +5 -13
  287. package/development/teaser/teaser.component.js +1 -1
  288. package/development/teaser-hero/teaser-hero.component.js +1 -1
  289. package/development/teaser-product/common/teaser-product-common.js +1 -1
  290. package/development/teaser-product/teaser-product/teaser-product.component.js +1 -1
  291. package/development/teaser-product/teaser-product-static/teaser-product-static.component.js +1 -1
  292. package/development/time-input/time-input.component.js +8 -12
  293. package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
  294. package/development/timetable-occupancy-icon/timetable-occupancy-icon.component.js +2 -3
  295. package/development/title/title-base.js +1 -1
  296. package/development/title/title.component.js +1 -1
  297. package/development/toast/toast.component.js +4 -7
  298. package/development/toggle/toggle/toggle.component.js +8 -12
  299. package/development/toggle/toggle-option/toggle-option.component.js +9 -16
  300. package/development/toggle-check/toggle-check.component.js +1 -1
  301. package/development/train/train/train.component.js +1 -1
  302. package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  303. package/development/train/train-formation/train-formation.component.js +5 -7
  304. package/development/train/train-wagon/train-wagon.component.js +1 -1
  305. package/development/visual-checkbox/visual-checkbox.component.js +1 -1
  306. package/dialog/dialog/dialog.component.js +59 -70
  307. package/expansion-panel/expansion-panel/expansion-panel.component.js +5 -9
  308. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +31 -32
  309. package/file-selector/common/file-selector-common.js +1 -2
  310. package/flip-card/flip-card/flip-card.component.js +48 -54
  311. package/flip-card/flip-card-details/flip-card-details.component.js +16 -17
  312. package/flip-card/flip-card-summary/flip-card-summary.component.js +18 -19
  313. package/form-error/form-error.component.js +13 -14
  314. package/form-field/form-field/form-field.component.js +128 -139
  315. package/form-field/form-field-clear/form-field-clear.component.js +20 -22
  316. package/header/header/header.component.js +25 -28
  317. package/icon/icon-request.js +10 -11
  318. package/icon-sidebar-button-common-CM-ueEhH.js +7 -0
  319. package/image/image.component.js +4 -6
  320. package/map-container/map-container.component.js +1 -2
  321. package/menu/menu/menu.component.js +48 -56
  322. package/navigation/common/navigation-action-common.js +19 -21
  323. package/navigation/navigation/navigation.component.js +74 -93
  324. package/navigation/navigation-marker/navigation-marker.component.js +26 -28
  325. package/navigation/navigation-section/navigation-section.component.js +79 -89
  326. package/notification/notification.component.js +18 -20
  327. package/option/optgroup/optgroup-base-element.js +40 -42
  328. package/option/optgroup/optgroup.component.js +16 -20
  329. package/option/option/option-base-element.js +3 -4
  330. package/option/option/option.component.js +28 -31
  331. package/overlay/overlay-base-element.js +25 -27
  332. package/overlay/overlay.component.js +38 -40
  333. package/package.json +1 -1
  334. package/paginator/paginator/paginator.component.js +3 -4
  335. package/popover/popover/popover.component.js +82 -91
  336. package/popover/popover-trigger/popover-trigger.component.js +1 -1
  337. package/radio-button/common/radio-button-common.js +11 -15
  338. package/radio-button/radio-button/radio-button.component.js +20 -23
  339. package/radio-button/radio-button-group/radio-button-group.component.js +27 -43
  340. package/radio-button/radio-button-panel/radio-button-panel.component.js +31 -35
  341. package/select/select.component.js +89 -111
  342. package/selection-expansion-panel/selection-expansion-panel.component.js +35 -39
  343. package/sidebar/common.js +1 -1
  344. package/sidebar/icon-sidebar-container/icon-sidebar-container.component.js +10 -13
  345. package/sidebar/sidebar/sidebar.component.js +61 -68
  346. package/sidebar/sidebar-container/sidebar-container.component.js +29 -33
  347. package/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  348. package/sidebar.js +1 -1
  349. package/slider/slider.component.js +3 -4
  350. package/standard-theme.css +0 -25
  351. package/stepper/step/step.component.js +22 -24
  352. package/stepper/step-label/step-label.component.js +2 -3
  353. package/stepper/stepper/stepper.component.js +72 -86
  354. package/table/table-wrapper/table-wrapper.component.js +13 -14
  355. package/table.css +0 -25
  356. package/tabs/tab-group/tab-group.component.js +77 -92
  357. package/tabs/tab-label/tab-label.component.js +10 -10
  358. package/tag/tag/tag.component.js +55 -61
  359. package/tag/tag-group/tag-group.component.js +21 -29
  360. package/teaser/teaser.component.js +1 -1
  361. package/teaser-product/common.js +1 -1
  362. package/teaser-product/teaser-product/teaser-product.component.js +1 -1
  363. package/teaser-product-common-C8oSkIxy.js +5 -0
  364. package/teaser-product.js +1 -1
  365. package/time-input/time-input.component.js +62 -66
  366. package/timetable-occupancy-icon/timetable-occupancy-icon.component.js +9 -10
  367. package/toast/toast.component.js +4 -7
  368. package/toggle/toggle/toggle.component.js +38 -42
  369. package/toggle/toggle-option/toggle-option.component.js +47 -54
  370. package/train/train-formation/train-formation.component.js +41 -43
  371. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +0 -530
  372. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +0 -1123
  373. package/icon-sidebar-button-common-DG8bnrBu.js +0 -7
  374. package/teaser-product-common-CpMAlYEp.js +0 -5
@@ -28,9 +28,8 @@ const style = css`:host {
28
28
  width: 1px;
29
29
  }`;
30
30
  function getDatePicker(element, trigger) {
31
- var _a, _b;
32
31
  if (!trigger) {
33
- return (_b = (_a = element.closest) == null ? void 0 : _a.call(element, "sbb-form-field")) == null ? void 0 : _b.querySelector("sbb-datepicker");
32
+ return element.closest?.("sbb-form-field")?.querySelector("sbb-datepicker");
34
33
  }
35
34
  return findReferencedElement(trigger);
36
35
  }
@@ -40,7 +39,7 @@ const datepickerControlRegisteredEventFactory = () => new CustomEvent("datepicke
40
39
  });
41
40
  let nextId = 0;
42
41
  let warningLogged = false;
43
- const isDateInput = (element) => (element == null ? void 0 : element.localName) === "sbb-date-input";
42
+ const isDateInput = (element) => element?.localName === "sbb-date-input";
44
43
  let SbbDatepickerElement = (() => {
45
44
  var _wide_accessor_storage, _input_accessor_storage, __inputElement_accessor_storage, _a;
46
45
  let _classDecorators = [customElement("sbb-datepicker")];
@@ -63,7 +62,6 @@ let SbbDatepickerElement = (() => {
63
62
  let __inputElement_extraInitializers = [];
64
63
  var SbbDatepickerElement2 = (_a = class extends _classSuper {
65
64
  constructor() {
66
- var _a2;
67
65
  super(...arguments);
68
66
  __privateAdd(this, _wide_accessor_storage);
69
67
  __privateAdd(this, _input_accessor_storage);
@@ -85,15 +83,14 @@ let SbbDatepickerElement = (() => {
85
83
  this._inputElementPlaceholderMutable = false;
86
84
  this._inputIdReferenceController = new SbbIdReferenceController(this, "input");
87
85
  this._inputObserver = !isServer ? new MutationObserver((mutationsList) => {
88
- var _a3;
89
86
  this._emitInputUpdated();
90
- (_a3 = this._associationController) == null ? void 0 : _a3.updateControls();
91
- if (this.inputElement && !isDateInput(this.inputElement) && (mutationsList == null ? void 0 : mutationsList.some((e) => e.attributeName === "value"))) {
87
+ this._associationController?.updateControls();
88
+ if (this.inputElement && !isDateInput(this.inputElement) && mutationsList?.some((e) => e.attributeName === "value")) {
92
89
  const value = this.inputElement.getAttribute("value");
93
90
  this.valueAsDate = this._dateAdapter.parse(value, this.now) ?? value;
94
91
  }
95
92
  }) : null;
96
- this._dateAdapter = ((_a2 = readConfig().datetime) == null ? void 0 : _a2.dateAdapter) ?? defaultDateAdapter;
93
+ this._dateAdapter = readConfig().datetime?.dateAdapter ?? defaultDateAdapter;
97
94
  this._language = new SbbLanguageController(this);
98
95
  this._associationController = new SbbDatepickerAssociationHostController(this);
99
96
  }
@@ -169,7 +166,7 @@ let SbbDatepickerElement = (() => {
169
166
  }
170
167
  connectedCallback() {
171
168
  super.connectedCallback();
172
- this.id || (this.id = `sbb-datepicker-${++nextId}`);
169
+ this.id ||= `sbb-datepicker-${++nextId}`;
173
170
  this._configureInputElement();
174
171
  }
175
172
  requestUpdate(name, oldValue, options) {
@@ -197,10 +194,9 @@ let SbbDatepickerElement = (() => {
197
194
  }
198
195
  }
199
196
  disconnectedCallback() {
200
- var _a2, _b;
201
197
  super.disconnectedCallback();
202
- (_a2 = this._inputObserver) == null ? void 0 : _a2.disconnect();
203
- (_b = this._inputAbortController) == null ? void 0 : _b.abort();
198
+ this._inputObserver?.disconnect();
199
+ this._inputAbortController?.abort();
204
200
  this._inputElement = null;
205
201
  }
206
202
  firstUpdated(changedProperties) {
@@ -215,13 +211,12 @@ let SbbDatepickerElement = (() => {
215
211
  return !!this._now;
216
212
  }
217
213
  _configureInputElement() {
218
- var _a2, _b, _c, _d, _e, _f;
219
- const inputElement = this.input instanceof HTMLInputElement || this.input instanceof HTMLElement && isDateInput(this.input) ? this.input : this._inputIdReferenceController.find() ?? ((_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.querySelector("input,sbb-date-input")) ?? null;
214
+ const inputElement = this.input instanceof HTMLInputElement || this.input instanceof HTMLElement && isDateInput(this.input) ? this.input : this._inputIdReferenceController.find() ?? this.closest?.("sbb-form-field")?.querySelector("input,sbb-date-input") ?? null;
220
215
  if (inputElement === this.inputElement) {
221
216
  return;
222
217
  }
223
- (_c = this._inputAbortController) == null ? void 0 : _c.abort();
224
- (_d = this._inputObserver) == null ? void 0 : _d.disconnect();
218
+ this._inputAbortController?.abort();
219
+ this._inputObserver?.disconnect();
225
220
  this._inputElement = inputElement;
226
221
  if (!this.inputElement) {
227
222
  return;
@@ -232,7 +227,7 @@ let SbbDatepickerElement = (() => {
232
227
  console.warn("Using <sbb-datepicker> with a native <input> is deprecated. Use a <sbb-date-input> instead of <input>.");
233
228
  }
234
229
  this._inputAbortController = new AbortController();
235
- (_e = this._inputObserver) == null ? void 0 : _e.observe(this.inputElement, {
230
+ this._inputObserver?.observe(this.inputElement, {
236
231
  attributeFilter: ["disabled", "readonly", "min", "max", "value"]
237
232
  });
238
233
  if (isNativeInput) {
@@ -248,15 +243,12 @@ let SbbDatepickerElement = (() => {
248
243
  this._parseInput();
249
244
  }, options);
250
245
  this.inputElement.addEventListener("change", () => this._handleInputChange(), options);
251
- this.inputElement.addEventListener("ɵchange", () => {
252
- var _a3;
253
- return (_a3 = this._associationController) == null ? void 0 : _a3.updateControls();
254
- }, options);
246
+ this.inputElement.addEventListener("ɵchange", () => this._associationController?.updateControls(), options);
255
247
  this._parseInput(true);
256
248
  this._tryApplyFormatToInput();
257
249
  this._validateDate();
258
250
  this._emitInputUpdated();
259
- (_f = this._associationController) == null ? void 0 : _f.updateControls();
251
+ this._associationController?.updateControls();
260
252
  }
261
253
  _emitInputUpdated() {
262
254
  const { disabled, readOnly: readonly, min: minValue, max: maxValue } = this.inputElement ?? {};
@@ -265,14 +257,13 @@ let SbbDatepickerElement = (() => {
265
257
  this._inputUpdated.emit({ disabled, readonly, min, max });
266
258
  }
267
259
  _handleInputChange() {
268
- var _a2;
269
260
  if (this._tryApplyFormatToInput()) {
270
261
  return;
271
262
  }
272
263
  this._validateDate();
273
264
  this._setAriaLiveMessage();
274
265
  this._change.emit();
275
- (_a2 = this._associationController) == null ? void 0 : _a2.updateControls();
266
+ this._associationController?.updateControls();
276
267
  }
277
268
  _tryApplyFormatToInput() {
278
269
  if (!this.inputElement || isDateInput(this.inputElement)) {
@@ -310,8 +301,7 @@ let SbbDatepickerElement = (() => {
310
301
  }
311
302
  }
312
303
  _setAriaLiveMessage() {
313
- var _a2, _b;
314
- const containerElement = (_b = (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector) == null ? void 0 : _b.call(_a2, "#status-container");
304
+ const containerElement = this.shadowRoot?.querySelector?.("#status-container");
315
305
  if (!containerElement) {
316
306
  return;
317
307
  } else if (!this.valueAsDate) {
@@ -330,9 +320,8 @@ let SbbDatepickerElement = (() => {
330
320
  * @param date The starting date for calculations.
331
321
  */
332
322
  findPreviousAvailableDate(date) {
333
- var _a2;
334
323
  const previousDate = this._findAvailableDate(date, -1);
335
- const dateMin = this._dateAdapter.deserialize((_a2 = this.inputElement) == null ? void 0 : _a2.min);
324
+ const dateMin = this._dateAdapter.deserialize(this.inputElement?.min);
336
325
  if (!dateMin || this._dateAdapter.isValid(dateMin) && this._dateAdapter.compareDate(previousDate, dateMin) >= 0) {
337
326
  return previousDate;
338
327
  }
@@ -344,9 +333,8 @@ let SbbDatepickerElement = (() => {
344
333
  * @param date The starting date for calculations.
345
334
  */
346
335
  findNextAvailableDate(date) {
347
- var _a2;
348
336
  const nextDate = this._findAvailableDate(date, 1);
349
- const dateMax = this._dateAdapter.deserialize((_a2 = this.inputElement) == null ? void 0 : _a2.max);
337
+ const dateMax = this._dateAdapter.deserialize(this.inputElement?.max);
350
338
  if (!dateMax || this._dateAdapter.isValid(dateMax) && this._dateAdapter.compareDate(nextDate, dateMax) <= 0) {
351
339
  return nextDate;
352
340
  }
@@ -371,16 +359,15 @@ let SbbDatepickerElement = (() => {
371
359
  * and `min` and `max` parameters (e.g. from the self-named input's attributes).
372
360
  */
373
361
  _isDateAvailable() {
374
- var _a2, _b, _c;
375
362
  if (!this.valueAsDate) {
376
363
  return false;
377
364
  }
378
- const dateMin = this._dateAdapter.deserialize((_a2 = this.inputElement) == null ? void 0 : _a2.min);
379
- const dateMax = this._dateAdapter.deserialize((_b = this.inputElement) == null ? void 0 : _b.max);
365
+ const dateMin = this._dateAdapter.deserialize(this.inputElement?.min);
366
+ const dateMax = this._dateAdapter.deserialize(this.inputElement?.max);
380
367
  if (this._dateAdapter.isValid(dateMin) && this._dateAdapter.compareDate(this.valueAsDate, dateMin) < 0 || this._dateAdapter.isValid(dateMax) && this._dateAdapter.compareDate(this.valueAsDate, dateMax) > 0) {
381
368
  return false;
382
369
  }
383
- return ((_c = this.dateFilter) == null ? void 0 : _c.call(this, this.valueAsDate)) ?? true;
370
+ return this.dateFilter?.(this.valueAsDate) ?? true;
384
371
  }
385
372
  }, _wide_accessor_storage = new WeakMap(), _input_accessor_storage = new WeakMap(), __inputElement_accessor_storage = new WeakMap(), _classThis = _a, (() => {
386
373
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
@@ -424,4 +411,4 @@ export {
424
411
  datepickerControlRegisteredEventFactory,
425
412
  getDatePicker
426
413
  };
427
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvY29uZmlnLmpzJztcbmltcG9ydCB7IFNiYklkUmVmZXJlbmNlQ29udHJvbGxlciwgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyB0eXBlIERhdGVBZGFwdGVyLCBkZWZhdWx0RGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBmaW5kUmVmZXJlbmNlZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIGZvcndhcmRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkRhdGVDaGFuZ2VkVG8sIGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSwgU2JiVmFsaWRhdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2RhdGUtaW5wdXQuanMnO1xuaW1wb3J0IHsgU2JiRGF0ZXBpY2tlckFzc29jaWF0aW9uSG9zdENvbnRyb2xsZXIsIHR5cGUgU2JiRGF0ZXBpY2tlckJ1dHRvbiB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci10b2dnbGUuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9kYXRlcGlja2VyLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiSW5wdXRVcGRhdGVFdmVudCB7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBtaW4/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG1heD86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFNiYkRhdGVwaWNrZXJQcmV2aW91c0RheUVsZW1lbnQsIGEgU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50IG9yIGEgU2JiRGF0ZXBpY2tlclRvZ2dsZUVsZW1lbnQgY29tcG9uZW50LFxuICogaXQgcmV0dXJucyB0aGUgcmVsYXRlZCBTYmJEYXRlcGlja2VyRWxlbWVudCByZWZlcmVuY2UsIGlmIGV4aXN0cy5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHBvdGVudGlhbGx5IGNvbm5lY3RlZCB0byB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQuXG4gKiBAcGFyYW0gdHJpZ2dlciBUaGUgaWQgb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgU2JiRGF0ZVBpY2tlci5cbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciBpbiB1c2UuIFdpbGwgYmUgcmVtb3ZlZCB3aXRoIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQaWNrZXI8VCA9IERhdGU+KFxuICBlbGVtZW50OiBTYmJEYXRlcGlja2VyQnV0dG9uPFQ+IHwgU2JiRGF0ZXBpY2tlclRvZ2dsZUVsZW1lbnQ8VD4sXG4gIHRyaWdnZXI/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbik6IFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybiBlbGVtZW50XG4gICAgICAuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpXG4gICAgICA/LnF1ZXJ5U2VsZWN0b3I8U2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4+KCdzYmItZGF0ZXBpY2tlcicpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZWZlcmVuY2VkRWxlbWVudDxTYmJEYXRlcGlja2VyRWxlbWVudDxUPj4odHJpZ2dlcik7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIGluIHVzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZEV2ZW50RmFjdG9yeSA9ICgpOiBDdXN0b21FdmVudCA9PlxuICBuZXcgQ3VzdG9tRXZlbnQoJ2RhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZCcsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjb21wb3NlZDogdHJ1ZSxcbiAgfSk7XG5cbmxldCBuZXh0SWQgPSAwO1xubGV0IHdhcm5pbmdMb2dnZWQgPSBmYWxzZTtcbmNvbnN0IGlzRGF0ZUlucHV0ID0gPFQ+KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgU2JiRGF0ZUlucHV0RWxlbWVudDxUPiA9PiBlbGVtZW50Py5sb2NhbE5hbWUgPT09ICdzYmItZGF0ZS1pbnB1dCc7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgdGhlIGlucHV0J3MgdmFsdWUgYXMgYSBmb3JtYXR0ZWQgZGF0ZS5cbiAqXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBjaGFuZ2UgLSBOb3RpZmllcyB0aGF0IHRoZSBjb25uZWN0ZWQgaW5wdXQgaGFzIGNoYW5nZXMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBpbnB1dCAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBmaXJlZCB0aGUgaW5wdXQgZXZlbnQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYklucHV0VXBkYXRlRXZlbnQ+fSBpbnB1dFVwZGF0ZWQgLSBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBpbnB1dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGVwaWNrZXIgaGF2ZSBjaGFuZ2VzLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGF0ZVBpY2tlclVwZGF0ZWQgLSBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2JiVmFsaWRhdGlvbkNoYW5nZUV2ZW50Pn0gdmFsaWRhdGlvbkNoYW5nZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXRlIGNoYW5nZXMuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1kYXRlcGlja2VyJylcbmNsYXNzIFNiYkRhdGVwaWNrZXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dFVwZGF0ZWQ6ICdpbnB1dFVwZGF0ZWQnLFxuICAgIGRhdGVQaWNrZXJVcGRhdGVkOiAnZGF0ZVBpY2tlclVwZGF0ZWQnLFxuICAgIHZhbGlkYXRpb25DaGFuZ2U6ICd2YWxpZGF0aW9uQ2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHdpZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBkYXRlRmlsdGVyIGZyb20gU2JiRGF0ZUlucHV0RWxlbWVudC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCBkYXRlRmlsdGVyKHZhbHVlOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRlRmlsdGVyID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkYXRlRmlsdGVyKCk6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2RhdGVGaWx0ZXIgPz9cbiAgICAgIChpc0RhdGVJbnB1dCh0aGlzLmlucHV0RWxlbWVudCkgPyB0aGlzLmlucHV0RWxlbWVudC5kYXRlRmlsdGVyIDogbnVsbCkgPz9cbiAgICAgICgoKSA9PiB0cnVlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZUZpbHRlcj86IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcblxuICAvLyBUT0RPOiBSZXBsYWNlIEhUTUxFbGVtZW50IGJ5IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50XG4gIC8qKlxuICAgKiBSZWZlcmVuY2Ugb2YgdGhlIHNiYi1kYXRlLWlucHV0IGluc3RhbmNlIG9yIHRoZSBuYXRpdmUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyLlxuICAgKiBJZiBnaXZlbiBhIHN0cmluZywgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGlkIHJlZmVyZW5jZSBhbmQgYW4gYXR0ZW1wdCBpc1xuICAgKiBtYWRlIHRvIGJlIHJlc29sdmVkIGZvciB0aGUgY29udGFpbmluZyBkb2N1bWVudCBmcmFnbWVudC5cbiAgICogSWYgZ2l2ZW4gYSBIVE1MRWxlbWVudCBpbnN0YW5jZSwgaXQgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGlucHV0OiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuXG4gICAqIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgbnVsbCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c/OiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIGFzIGEgRGF0ZSBvciBjdXN0b20gZGF0ZSBwcm92aWRlciBpbnN0YW5jZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHZhbHVlQXNEYXRlIGZyb20gU2JiRGF0ZUlucHV0RWxlbWVudC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzRGF0ZSh2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgaWYgKGlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KSkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICBpZiAodGhpcy5fdHJ5QXBwbHlGb3JtYXRUb0lucHV0KCkpIHtcbiAgICAgIC8vIEVtaXQgYmx1ciBldmVudCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSB0byBub3RpZnlcbiAgICAgIC8vIGZyYW1ld29ya3MgdGhhdCByZWx5IG9uIHRoYXQgZXZlbnQgdG8gdXBkYXRlIGZvcm0gc3RhdHVzLlxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQhLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdibHVyJywgeyBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWVBc0RhdGUoKTogVCB8IG51bGwge1xuICAgIGlmIChpc0RhdGVJbnB1dCh0aGlzLmlucHV0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWx1ZUFzRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0RhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF92YWx1ZUFzRGF0ZT86IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgcmVzb2x2ZWQgYXNzb2NpYXRlZCBpbnB1dCBlbGVtZW50LCBhcyBkZWZpbmVkIGJ5IGBpbnB1dGAuICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudDtcbiAgfVxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9pbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBoYXMgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy5jaGFuZ2UsIHtcbiAgICBidWJibGVzOiB0cnVlLFxuICB9KTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfaW5wdXRVcGRhdGVkOiBFdmVudEVtaXR0ZXI8U2JiSW5wdXRVcGRhdGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmlucHV0VXBkYXRlZCxcbiAgICB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGF0ZXBpY2tlciBoYXZlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX2RhdGVQaWNrZXJVcGRhdGVkOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmRhdGVQaWNrZXJVcGRhdGVkLFxuICAgIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXRlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX3ZhbGlkYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxTYmJWYWxpZGF0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy52YWxpZGF0aW9uQ2hhbmdlLFxuICApO1xuXG4gIHByaXZhdGUgX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2lucHV0QWJvcnRDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9pbnB1dElkUmVmZXJlbmNlQ29udHJvbGxlciA9IG5ldyBTYmJJZFJlZmVyZW5jZUNvbnRyb2xsZXIodGhpcywgJ2lucHV0Jyk7XG5cbiAgcHJpdmF0ZSBfaW5wdXRPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QpID0+IHtcbiAgICAgICAgdGhpcy5fZW1pdElucHV0VXBkYXRlZCgpO1xuICAgICAgICB0aGlzLl9hc3NvY2lhdGlvbkNvbnRyb2xsZXI/LnVwZGF0ZUNvbnRyb2xzKCk7XG4gICAgICAgIC8vIFRPRE86IERlY2lkZSB3aGV0aGVyIHRvIHJlbW92ZSB0aGlzIGxvZ2ljIGJ5IGFkZGluZyBhIHZhbHVlIHByb3BlcnR5IHRvIHRoZSBkYXRlcGlja2VyLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgJiZcbiAgICAgICAgICAhaXNEYXRlSW5wdXQodGhpcy5pbnB1dEVsZW1lbnQpICYmXG4gICAgICAgICAgbXV0YXRpb25zTGlzdD8uc29tZSgoZSkgPT4gZS5hdHRyaWJ1dGVOYW1lID09PSAndmFsdWUnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMubm93KSA/PyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9hc3NvY2lhdGlvbkNvbnRyb2xsZXIgPSBuZXcgU2JiRGF0ZXBpY2tlckFzc29jaWF0aW9uSG9zdENvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmlkIHx8PSBgc2JiLWRhdGVwaWNrZXItJHsrK25leHRJZH1gO1xuICAgIHRoaXMuX2NvbmZpZ3VyZUlucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuaGFzVXBkYXRlZCAmJiAhbmFtZSAmJiB0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSkge1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLnZhbHVlQXNEYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc1NlcnZlciAmJiAoIW5hbWUgfHwgbmFtZSA9PT0gJ2lucHV0JykgJiYgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVJbnB1dEVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2RhdGVGaWx0ZXInKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdub3cnKVxuICAgICkge1xuICAgICAgdGhpcy5fYXNzb2NpYXRpb25Db250cm9sbGVyLnVwZGF0ZUNvbnRyb2xzKCk7XG4gICAgICB0aGlzLl9kYXRlUGlja2VyVXBkYXRlZC5lbWl0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlQXNEYXRlJykpIHtcbiAgICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2lucHV0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIGEgY3VzdG9tIG5vdyBpcyBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGhhc0N1c3RvbU5vdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9ub3c7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVJbnB1dEVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID1cbiAgICAgIHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRGF0ZUlucHV0PFQ+KHRoaXMuaW5wdXQpKVxuICAgICAgICA/IHRoaXMuaW5wdXRcbiAgICAgICAgOiAoKHRoaXMuX2lucHV0SWRSZWZlcmVuY2VDb250cm9sbGVyLmZpbmQoKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCkgPz9cbiAgICAgICAgICB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8ucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcbiAgICAgICAgICAgICdpbnB1dCxzYmItZGF0ZS1pbnB1dCcsXG4gICAgICAgICAgKSA/P1xuICAgICAgICAgIG51bGwpO1xuICAgIGlmIChpbnB1dEVsZW1lbnQgPT09IHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5faW5wdXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDtcblxuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc05hdGl2ZUlucHV0ID0gIWlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICBpZiAoaXNOYXRpdmVJbnB1dCAmJiBpbXBvcnQubWV0YS5lbnYuREVWICYmICF3YXJuaW5nTG9nZ2VkKSB7XG4gICAgICB3YXJuaW5nTG9nZ2VkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1VzaW5nIDxzYmItZGF0ZXBpY2tlcj4gd2l0aCBhIG5hdGl2ZSA8aW5wdXQ+IGlzIGRlcHJlY2F0ZWQuIFVzZSBhIDxzYmItZGF0ZS1pbnB1dD4gaW5zdGVhZCBvZiA8aW5wdXQ+LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX2lucHV0T2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5pbnB1dEVsZW1lbnQsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICdyZWFkb25seScsICdtaW4nLCAnbWF4JywgJ3ZhbHVlJ10sXG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXRpdmVJbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50UGxhY2Vob2xkZXJNdXRhYmxlID0gIXRoaXMuaW5wdXRFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudHlwZSA9ICd0ZXh0JztcbiAgICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnRQbGFjZWhvbGRlck11dGFibGUpIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQucGxhY2Vob2xkZXIgPSBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zID0geyBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCB9O1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnaW5wdXQnLFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgZm9yd2FyZEV2ZW50KGUsIHRoaXMpO1xuICAgICAgICB0aGlzLl9wYXJzZUlucHV0KCk7XG4gICAgICB9LFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZUlucHV0Q2hhbmdlKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnybVjaGFuZ2UnLFxuICAgICAgKCkgPT4gdGhpcy5fYXNzb2NpYXRpb25Db250cm9sbGVyPy51cGRhdGVDb250cm9scygpLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIHRoaXMuX3BhcnNlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5fdHJ5QXBwbHlGb3JtYXRUb0lucHV0KCk7XG4gICAgdGhpcy5fdmFsaWRhdGVEYXRlKCk7XG4gICAgdGhpcy5fZW1pdElucHV0VXBkYXRlZCgpO1xuICAgIHRoaXMuX2Fzc29jaWF0aW9uQ29udHJvbGxlcj8udXBkYXRlQ29udHJvbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRJbnB1dFVwZGF0ZWQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBkaXNhYmxlZCwgcmVhZE9ubHk6IHJlYWRvbmx5LCBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH0gPSB0aGlzLmlucHV0RWxlbWVudCA/PyB7fTtcbiAgICBjb25zdCBtaW4gPSAoXG4gICAgICBtaW5WYWx1ZSAmJiB0eXBlb2YgbWluVmFsdWUgIT09ICdzdHJpbmcnID8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1pblZhbHVlKSA6IG1pblZhbHVlXG4gICAgKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWF4ID0gKFxuICAgICAgbWF4VmFsdWUgJiYgdHlwZW9mIG1heFZhbHVlICE9PSAnc3RyaW5nJyA/IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShtYXhWYWx1ZSkgOiBtYXhWYWx1ZVxuICAgICkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lucHV0VXBkYXRlZC5lbWl0KHsgZGlzYWJsZWQsIHJlYWRvbmx5LCBtaW4sIG1heCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUlucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90cnlBcHBseUZvcm1hdFRvSW5wdXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWxpZGF0ZURhdGUoKTtcbiAgICB0aGlzLl9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2Fzc29jaWF0aW9uQ29udHJvbGxlcj8udXBkYXRlQ29udHJvbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeUFwcGx5Rm9ybWF0VG9JbnB1dCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50IHx8IGlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLnZhbHVlQXNEYXRlID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMudmFsdWVBc0RhdGUhKSA6ICcnO1xuICAgIGlmIChmb3JtYXR0ZWREYXRlICYmIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IFJlYWN0IG9uQ2hhbmdlIGV2ZW50LCB3ZSBoYXZlIHRvIGdldCB0aGUgc2V0dGVyIGFuZCBjYWxsIGl0LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTYwMCNpc3N1ZWNvbW1lbnQtMzQ1ODEzMTMwXG4gICAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgICAgc2V0VmFsdWUuY2FsbCh0aGlzLmlucHV0RWxlbWVudCwgZm9ybWF0dGVkRGF0ZSk7XG5cbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZURhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHlPclZhbGlkID0gIXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlIHx8IHRoaXMuX2lzRGF0ZUF2YWlsYWJsZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gIXRoaXMuaW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcsICFpc0VtcHR5T3JWYWxpZCk7XG4gICAgaWYgKHdhc1ZhbGlkICE9PSBpc0VtcHR5T3JWYWxpZCkge1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbkNoYW5nZS5lbWl0KHsgdmFsaWQ6IGlzRW1wdHlPclZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlSW5wdXQoZGVzZXJpYWxpemVBc0ZhbGxiYWNrID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoaXNEYXRlSW5wdXQodGhpcy5pbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RWxlbWVudCEudmFsdWU7XG4gICAgLy8gV2UgYXJlIGFzc2lnbmluZyBkaXJlY3RseSB0byB0aGUgcHJpdmF0ZSBiYWNraW5nIHByb3BlcnR5IG9mIHZhbHVlQXNEYXRlXG4gICAgLy8gYXMgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgYmx1ciBldmVudCBkdXJpbmcgdGhpcyB0aW1lLlxuICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMubm93KSxcbiAgICApO1xuICAgIGlmIChkZXNlcmlhbGl6ZUFzRmFsbGJhY2sgJiYgIXRoaXMuX3ZhbHVlQXNEYXRlKSB7XG4gICAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudDogSFRNTFBhcmFncmFwaEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uPEhUTUxQYXJhZ3JhcGhFbGVtZW50PignI3N0YXR1cy1jb250YWluZXInKTtcblxuICAgIGlmICghY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWVBc0RhdGUpIHtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQodGhpcy52YWx1ZUFzRGF0ZSwgeyB3ZWVrZGF5U3R5bGU6ICdsb25nJyB9KTtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gYCR7aTE4bkRhdGVDaGFuZ2VkVG9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZGF0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxwIGlkPVwic3RhdHVzLWNvbnRhaW5lclwiIHJvbGU9XCJzdGF0dXNcIj48L3A+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaXJzdCBhdmFpbGFibGUgZGF0ZSBiZWZvcmUgdGhlIGdpdmVuIG9uZSxcbiAgICogY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eSBhbmQgYG1pbmAgcGFyYW1ldGVyIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGUpLlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICAgKi9cbiAgcHVibGljIGZpbmRQcmV2aW91c0F2YWlsYWJsZURhdGUoZGF0ZTogVCk6IFQge1xuICAgIGNvbnN0IHByZXZpb3VzRGF0ZSA9IHRoaXMuX2ZpbmRBdmFpbGFibGVEYXRlKGRhdGUsIC0xKTtcbiAgICBjb25zdCBkYXRlTWluID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1pbik7XG5cbiAgICBpZiAoXG4gICAgICAhZGF0ZU1pbiB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1pbikgJiZcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUocHJldmlvdXNEYXRlLCBkYXRlTWluKSA+PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZmlyc3QgYXZhaWxhYmxlIGRhdGUgYWZ0ZXIgdGhlIGdpdmVuIG9uZSxcbiAgICogY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eSBhbmQgYG1heGAgcGFyYW1ldGVyIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGUpLlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICAgKi9cbiAgcHVibGljIGZpbmROZXh0QXZhaWxhYmxlRGF0ZShkYXRlOiBUKTogVCB7XG4gICAgY29uc3QgbmV4dERhdGUgPSB0aGlzLl9maW5kQXZhaWxhYmxlRGF0ZShkYXRlLCAxKTtcbiAgICBjb25zdCBkYXRlTWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1heCk7XG5cbiAgICBpZiAoXG4gICAgICAhZGF0ZU1heCB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1heCkgJiYgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobmV4dERhdGUsIGRhdGVNYXgpIDw9IDApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV4dERhdGU7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRlIGJlZm9yZSBvciBhZnRlciBhIGdpdmVuIG9uZSwgY29uc2lkZXJpbmcgdGhlIGBkYXRlRmlsdGVyYCBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIGRhdGUgVGhlIHN0YXJ0aW5nIGRhdGUgZm9yIGNhbGN1bGF0aW9ucy5cbiAgICogQHBhcmFtIGRlbHRhIFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQvc3VidHJhY3QgZnJvbSB0aGUgc3RhcnRpbmcgb25lLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZEF2YWlsYWJsZURhdGUoZGF0ZTogVCwgZGVsdGE6IG51bWJlcik6IFQge1xuICAgIGxldCBhdmFpbGFibGVEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIGRlbHRhKTtcblxuICAgIGlmICh0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHdoaWxlICghdGhpcy5kYXRlRmlsdGVyKGF2YWlsYWJsZURhdGUpKSB7XG4gICAgICAgIGF2YWlsYWJsZURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoYXZhaWxhYmxlRGF0ZSwgZGVsdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdmFpbGFibGVEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB2YWx1ZUFzRGF0ZSBpcyB2YWxpZCwgY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eVxuICAgKiBhbmQgYG1pbmAgYW5kIGBtYXhgIHBhcmFtZXRlcnMgKGUuZy4gZnJvbSB0aGUgc2VsZi1uYW1lZCBpbnB1dCdzIGF0dHJpYnV0ZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXNEYXRlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVNaW4gPSB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLmlucHV0RWxlbWVudD8ubWluKTtcbiAgICBjb25zdCBkYXRlTWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1heCk7XG5cbiAgICBpZiAoXG4gICAgICAodGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZChkYXRlTWluKSAmJlxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLnZhbHVlQXNEYXRlLCBkYXRlTWluISkgPCAwKSB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1heCkgJiZcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy52YWx1ZUFzRGF0ZSwgZGF0ZU1heCEpID4gMClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRlRmlsdGVyPy4odGhpcy52YWx1ZUFzRGF0ZSkgPz8gdHJ1ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRhdGVwaWNrZXInOiBTYmJEYXRlcGlja2VyRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIGlucHV0VXBkYXRlZDogQ3VzdG9tRXZlbnQ8U2JiSW5wdXRVcGRhdGVFdmVudD47XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTYmJEYXRlcGlja2VyRWxlbWVudCIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDZ0IsU0FBQSxjQUNkLFNBQ0EsU0FBOEI7O0FBRTlCLE1BQUksQ0FBQyxTQUFTO0FBQ1osWUFBTyxtQkFDSixZQURJLGlDQUNNLHNCQUROLG1CQUVILGNBQXVDO0FBQUEsRUFBZ0I7QUFHN0QsU0FBTyxzQkFBK0MsT0FBTztBQUMvRDtBQUtPLE1BQU0sMENBQTBDLE1BQ3JELElBQUksWUFBWSwrQkFBK0I7QUFBQSxFQUM3QyxTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQ1gsQ0FBQTtBQUVILElBQUksU0FBUztBQUNiLElBQUksZ0JBQWdCO0FBQ3BCLE1BQU0sY0FBYyxDQUNsQixhQUNzQyxtQ0FBUyxlQUFjO0lBYXpELHdCQUFvQixNQUFBOzswQkFEekIsY0FBYyxnQkFBZ0IsQ0FBQzs7OztvQkFDYTs7Ozs7Ozs7Ozs7Ozs7QUFBUkEsTUFBQUEseUJBQUEsbUJBQVEsWUFBVTtBQUFBOzs7QUFZckQ7QUEyQkE7QUFnRFM7QUF2RkwseUJBQUEseUJBQUEsa0JBQUEsTUFBQSwwQkFBQSxHQVk0QixrQkFBQSxNQUFBLG9CQUFBLEtBQUs7QUFpQjdCLFdBQUEsY0FBMEMsa0JBQUEsTUFBQSx1QkFBQTtBQVVsQyx5QkFBQSx5QkFBQSxrQkFBQSxNQUFBLHFCQUFxQyxJQUFJO0FBYWpELFdBQUEsT0FBZ0Isa0JBQUEsTUFBQSx3QkFBQTtBQW1DRSx5QkFBQSxpQ0FBQSxrQkFBQSxNQUFBLDZCQUFrRSxJQUFJO0FBR2pGLFdBQUEsV0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQWlCLElBQUksYUFBYSxNQUFNQSxzQkFBcUIsT0FBTyxRQUFRO0FBQUEsUUFDekYsU0FBUztBQUFBLE1BQUEsQ0FDVjtBQUdPLFdBQWEsZ0JBQXNDLElBQUksYUFD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
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvY29uZmlnLmpzJztcbmltcG9ydCB7IFNiYklkUmVmZXJlbmNlQ29udHJvbGxlciwgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyB0eXBlIERhdGVBZGFwdGVyLCBkZWZhdWx0RGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBmaW5kUmVmZXJlbmNlZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIGZvcndhcmRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkRhdGVDaGFuZ2VkVG8sIGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSwgU2JiVmFsaWRhdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2RhdGUtaW5wdXQuanMnO1xuaW1wb3J0IHsgU2JiRGF0ZXBpY2tlckFzc29jaWF0aW9uSG9zdENvbnRyb2xsZXIsIHR5cGUgU2JiRGF0ZXBpY2tlckJ1dHRvbiB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci10b2dnbGUuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9kYXRlcGlja2VyLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiSW5wdXRVcGRhdGVFdmVudCB7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBtaW4/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG1heD86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFNiYkRhdGVwaWNrZXJQcmV2aW91c0RheUVsZW1lbnQsIGEgU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50IG9yIGEgU2JiRGF0ZXBpY2tlclRvZ2dsZUVsZW1lbnQgY29tcG9uZW50LFxuICogaXQgcmV0dXJucyB0aGUgcmVsYXRlZCBTYmJEYXRlcGlja2VyRWxlbWVudCByZWZlcmVuY2UsIGlmIGV4aXN0cy5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHBvdGVudGlhbGx5IGNvbm5lY3RlZCB0byB0aGUgU2JiRGF0ZXBpY2tlckVsZW1lbnQuXG4gKiBAcGFyYW0gdHJpZ2dlciBUaGUgaWQgb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgU2JiRGF0ZVBpY2tlci5cbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciBpbiB1c2UuIFdpbGwgYmUgcmVtb3ZlZCB3aXRoIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQaWNrZXI8VCA9IERhdGU+KFxuICBlbGVtZW50OiBTYmJEYXRlcGlja2VyQnV0dG9uPFQ+IHwgU2JiRGF0ZXBpY2tlclRvZ2dsZUVsZW1lbnQ8VD4sXG4gIHRyaWdnZXI/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbik6IFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybiBlbGVtZW50XG4gICAgICAuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpXG4gICAgICA/LnF1ZXJ5U2VsZWN0b3I8U2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4+KCdzYmItZGF0ZXBpY2tlcicpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZWZlcmVuY2VkRWxlbWVudDxTYmJEYXRlcGlja2VyRWxlbWVudDxUPj4odHJpZ2dlcik7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIGluIHVzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZEV2ZW50RmFjdG9yeSA9ICgpOiBDdXN0b21FdmVudCA9PlxuICBuZXcgQ3VzdG9tRXZlbnQoJ2RhdGVwaWNrZXJDb250cm9sUmVnaXN0ZXJlZCcsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjb21wb3NlZDogdHJ1ZSxcbiAgfSk7XG5cbmxldCBuZXh0SWQgPSAwO1xubGV0IHdhcm5pbmdMb2dnZWQgPSBmYWxzZTtcbmNvbnN0IGlzRGF0ZUlucHV0ID0gPFQ+KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCxcbik6IGVsZW1lbnQgaXMgU2JiRGF0ZUlucHV0RWxlbWVudDxUPiA9PiBlbGVtZW50Py5sb2NhbE5hbWUgPT09ICdzYmItZGF0ZS1pbnB1dCc7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgdGhlIGlucHV0J3MgdmFsdWUgYXMgYSBmb3JtYXR0ZWQgZGF0ZS5cbiAqXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBjaGFuZ2UgLSBOb3RpZmllcyB0aGF0IHRoZSBjb25uZWN0ZWQgaW5wdXQgaGFzIGNoYW5nZXMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBpbnB1dCAtIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBmaXJlZCB0aGUgaW5wdXQgZXZlbnQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYklucHV0VXBkYXRlRXZlbnQ+fSBpbnB1dFVwZGF0ZWQgLSBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBpbnB1dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGVwaWNrZXIgaGF2ZSBjaGFuZ2VzLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGF0ZVBpY2tlclVwZGF0ZWQgLSBOb3RpZmllcyB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2JiVmFsaWRhdGlvbkNoYW5nZUV2ZW50Pn0gdmFsaWRhdGlvbkNoYW5nZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXRlIGNoYW5nZXMuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1kYXRlcGlja2VyJylcbmNsYXNzIFNiYkRhdGVwaWNrZXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dFVwZGF0ZWQ6ICdpbnB1dFVwZGF0ZWQnLFxuICAgIGRhdGVQaWNrZXJVcGRhdGVkOiAnZGF0ZVBpY2tlclVwZGF0ZWQnLFxuICAgIHZhbGlkYXRpb25DaGFuZ2U6ICd2YWxpZGF0aW9uQ2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHdpZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBkYXRlRmlsdGVyIGZyb20gU2JiRGF0ZUlucHV0RWxlbWVudC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCBkYXRlRmlsdGVyKHZhbHVlOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRlRmlsdGVyID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkYXRlRmlsdGVyKCk6IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2RhdGVGaWx0ZXIgPz9cbiAgICAgIChpc0RhdGVJbnB1dCh0aGlzLmlucHV0RWxlbWVudCkgPyB0aGlzLmlucHV0RWxlbWVudC5kYXRlRmlsdGVyIDogbnVsbCkgPz9cbiAgICAgICgoKSA9PiB0cnVlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZUZpbHRlcj86IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcblxuICAvLyBUT0RPOiBSZXBsYWNlIEhUTUxFbGVtZW50IGJ5IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50XG4gIC8qKlxuICAgKiBSZWZlcmVuY2Ugb2YgdGhlIHNiYi1kYXRlLWlucHV0IGluc3RhbmNlIG9yIHRoZSBuYXRpdmUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyLlxuICAgKiBJZiBnaXZlbiBhIHN0cmluZywgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGlkIHJlZmVyZW5jZSBhbmQgYW4gYXR0ZW1wdCBpc1xuICAgKiBtYWRlIHRvIGJlIHJlc29sdmVkIGZvciB0aGUgY29udGFpbmluZyBkb2N1bWVudCBmcmFnbWVudC5cbiAgICogSWYgZ2l2ZW4gYSBIVE1MRWxlbWVudCBpbnN0YW5jZSwgaXQgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGlucHV0OiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuXG4gICAqIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IFNiYkRhdGVMaWtlPFQ+IHwgbnVsbCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c/OiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIGFzIGEgRGF0ZSBvciBjdXN0b20gZGF0ZSBwcm92aWRlciBpbnN0YW5jZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHZhbHVlQXNEYXRlIGZyb20gU2JiRGF0ZUlucHV0RWxlbWVudC5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzRGF0ZSh2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgaWYgKGlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KSkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWVBc0RhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICBpZiAodGhpcy5fdHJ5QXBwbHlGb3JtYXRUb0lucHV0KCkpIHtcbiAgICAgIC8vIEVtaXQgYmx1ciBldmVudCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSB0byBub3RpZnlcbiAgICAgIC8vIGZyYW1ld29ya3MgdGhhdCByZWx5IG9uIHRoYXQgZXZlbnQgdG8gdXBkYXRlIGZvcm0gc3RhdHVzLlxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQhLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdibHVyJywgeyBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWVBc0RhdGUoKTogVCB8IG51bGwge1xuICAgIGlmIChpc0RhdGVJbnB1dCh0aGlzLmlucHV0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWx1ZUFzRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0RhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF92YWx1ZUFzRGF0ZT86IFQgfCBudWxsO1xuXG4gIC8qKiBUaGUgcmVzb2x2ZWQgYXNzb2NpYXRlZCBpbnB1dCBlbGVtZW50LCBhcyBkZWZpbmVkIGJ5IGBpbnB1dGAuICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudDtcbiAgfVxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9pbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbm5lY3RlZCBpbnB1dCBoYXMgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy5jaGFuZ2UsIHtcbiAgICBidWJibGVzOiB0cnVlLFxuICB9KTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW5wdXQgY29ubmVjdGVkIHRvIHRoZSBkYXRlcGlja2VyIGhhdmUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfaW5wdXRVcGRhdGVkOiBFdmVudEVtaXR0ZXI8U2JiSW5wdXRVcGRhdGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmlucHV0VXBkYXRlZCxcbiAgICB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKiogTm90aWZpZXMgdGhhdCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGF0ZXBpY2tlciBoYXZlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX2RhdGVQaWNrZXJVcGRhdGVkOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRGF0ZXBpY2tlckVsZW1lbnQuZXZlbnRzLmRhdGVQaWNrZXJVcGRhdGVkLFxuICAgIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXRlIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX3ZhbGlkYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxTYmJWYWxpZGF0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYkRhdGVwaWNrZXJFbGVtZW50LmV2ZW50cy52YWxpZGF0aW9uQ2hhbmdlLFxuICApO1xuXG4gIHByaXZhdGUgX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2lucHV0QWJvcnRDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9pbnB1dElkUmVmZXJlbmNlQ29udHJvbGxlciA9IG5ldyBTYmJJZFJlZmVyZW5jZUNvbnRyb2xsZXIodGhpcywgJ2lucHV0Jyk7XG5cbiAgcHJpdmF0ZSBfaW5wdXRPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QpID0+IHtcbiAgICAgICAgdGhpcy5fZW1pdElucHV0VXBkYXRlZCgpO1xuICAgICAgICB0aGlzLl9hc3NvY2lhdGlvbkNvbnRyb2xsZXI/LnVwZGF0ZUNvbnRyb2xzKCk7XG4gICAgICAgIC8vIFRPRE86IERlY2lkZSB3aGV0aGVyIHRvIHJlbW92ZSB0aGlzIGxvZ2ljIGJ5IGFkZGluZyBhIHZhbHVlIHByb3BlcnR5IHRvIHRoZSBkYXRlcGlja2VyLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgJiZcbiAgICAgICAgICAhaXNEYXRlSW5wdXQodGhpcy5pbnB1dEVsZW1lbnQpICYmXG4gICAgICAgICAgbXV0YXRpb25zTGlzdD8uc29tZSgoZSkgPT4gZS5hdHRyaWJ1dGVOYW1lID09PSAndmFsdWUnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMubm93KSA/PyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9hc3NvY2lhdGlvbkNvbnRyb2xsZXIgPSBuZXcgU2JiRGF0ZXBpY2tlckFzc29jaWF0aW9uSG9zdENvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmlkIHx8PSBgc2JiLWRhdGVwaWNrZXItJHsrK25leHRJZH1gO1xuICAgIHRoaXMuX2NvbmZpZ3VyZUlucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuaGFzVXBkYXRlZCAmJiAhbmFtZSAmJiB0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0RWxlbWVudFBsYWNlaG9sZGVyTXV0YWJsZSkge1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLnZhbHVlQXNEYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc1NlcnZlciAmJiAoIW5hbWUgfHwgbmFtZSA9PT0gJ2lucHV0JykgJiYgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVJbnB1dEVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2RhdGVGaWx0ZXInKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdub3cnKVxuICAgICkge1xuICAgICAgdGhpcy5fYXNzb2NpYXRpb25Db250cm9sbGVyLnVwZGF0ZUNvbnRyb2xzKCk7XG4gICAgICB0aGlzLl9kYXRlUGlja2VyVXBkYXRlZC5lbWl0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZhbHVlQXNEYXRlJykpIHtcbiAgICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2lucHV0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX3NldEFyaWFMaXZlTWVzc2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIGEgY3VzdG9tIG5vdyBpcyBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGhhc0N1c3RvbU5vdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9ub3c7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVJbnB1dEVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID1cbiAgICAgIHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRGF0ZUlucHV0PFQ+KHRoaXMuaW5wdXQpKVxuICAgICAgICA/IHRoaXMuaW5wdXRcbiAgICAgICAgOiAoKHRoaXMuX2lucHV0SWRSZWZlcmVuY2VDb250cm9sbGVyLmZpbmQoKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCkgPz9cbiAgICAgICAgICB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8ucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcbiAgICAgICAgICAgICdpbnB1dCxzYmItZGF0ZS1pbnB1dCcsXG4gICAgICAgICAgKSA/P1xuICAgICAgICAgIG51bGwpO1xuICAgIGlmIChpbnB1dEVsZW1lbnQgPT09IHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5faW5wdXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDtcblxuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc05hdGl2ZUlucHV0ID0gIWlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICBpZiAoaXNOYXRpdmVJbnB1dCAmJiBpbXBvcnQubWV0YS5lbnYuREVWICYmICF3YXJuaW5nTG9nZ2VkKSB7XG4gICAgICB3YXJuaW5nTG9nZ2VkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1VzaW5nIDxzYmItZGF0ZXBpY2tlcj4gd2l0aCBhIG5hdGl2ZSA8aW5wdXQ+IGlzIGRlcHJlY2F0ZWQuIFVzZSBhIDxzYmItZGF0ZS1pbnB1dD4gaW5zdGVhZCBvZiA8aW5wdXQ+LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX2lucHV0T2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5pbnB1dEVsZW1lbnQsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICdyZWFkb25seScsICdtaW4nLCAnbWF4JywgJ3ZhbHVlJ10sXG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXRpdmVJbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50UGxhY2Vob2xkZXJNdXRhYmxlID0gIXRoaXMuaW5wdXRFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudHlwZSA9ICd0ZXh0JztcbiAgICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnRQbGFjZWhvbGRlck11dGFibGUpIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQucGxhY2Vob2xkZXIgPSBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zID0geyBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCB9O1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnaW5wdXQnLFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgZm9yd2FyZEV2ZW50KGUsIHRoaXMpO1xuICAgICAgICB0aGlzLl9wYXJzZUlucHV0KCk7XG4gICAgICB9LFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZUlucHV0Q2hhbmdlKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnybVjaGFuZ2UnLFxuICAgICAgKCkgPT4gdGhpcy5fYXNzb2NpYXRpb25Db250cm9sbGVyPy51cGRhdGVDb250cm9scygpLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIHRoaXMuX3BhcnNlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5fdHJ5QXBwbHlGb3JtYXRUb0lucHV0KCk7XG4gICAgdGhpcy5fdmFsaWRhdGVEYXRlKCk7XG4gICAgdGhpcy5fZW1pdElucHV0VXBkYXRlZCgpO1xuICAgIHRoaXMuX2Fzc29jaWF0aW9uQ29udHJvbGxlcj8udXBkYXRlQ29udHJvbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRJbnB1dFVwZGF0ZWQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBkaXNhYmxlZCwgcmVhZE9ubHk6IHJlYWRvbmx5LCBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH0gPSB0aGlzLmlucHV0RWxlbWVudCA/PyB7fTtcbiAgICBjb25zdCBtaW4gPSAoXG4gICAgICBtaW5WYWx1ZSAmJiB0eXBlb2YgbWluVmFsdWUgIT09ICdzdHJpbmcnID8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1pblZhbHVlKSA6IG1pblZhbHVlXG4gICAgKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWF4ID0gKFxuICAgICAgbWF4VmFsdWUgJiYgdHlwZW9mIG1heFZhbHVlICE9PSAnc3RyaW5nJyA/IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShtYXhWYWx1ZSkgOiBtYXhWYWx1ZVxuICAgICkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lucHV0VXBkYXRlZC5lbWl0KHsgZGlzYWJsZWQsIHJlYWRvbmx5LCBtaW4sIG1heCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUlucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90cnlBcHBseUZvcm1hdFRvSW5wdXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWxpZGF0ZURhdGUoKTtcbiAgICB0aGlzLl9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTtcbiAgICB0aGlzLl9jaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMuX2Fzc29jaWF0aW9uQ29udHJvbGxlcj8udXBkYXRlQ29udHJvbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeUFwcGx5Rm9ybWF0VG9JbnB1dCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50IHx8IGlzRGF0ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLnZhbHVlQXNEYXRlID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMudmFsdWVBc0RhdGUhKSA6ICcnO1xuICAgIGlmIChmb3JtYXR0ZWREYXRlICYmIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IFJlYWN0IG9uQ2hhbmdlIGV2ZW50LCB3ZSBoYXZlIHRvIGdldCB0aGUgc2V0dGVyIGFuZCBjYWxsIGl0LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTYwMCNpc3N1ZWNvbW1lbnQtMzQ1ODEzMTMwXG4gICAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgICAgc2V0VmFsdWUuY2FsbCh0aGlzLmlucHV0RWxlbWVudCwgZm9ybWF0dGVkRGF0ZSk7XG5cbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZURhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHlPclZhbGlkID0gIXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlIHx8IHRoaXMuX2lzRGF0ZUF2YWlsYWJsZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gIXRoaXMuaW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1zYmItaW52YWxpZCcsICFpc0VtcHR5T3JWYWxpZCk7XG4gICAgaWYgKHdhc1ZhbGlkICE9PSBpc0VtcHR5T3JWYWxpZCkge1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbkNoYW5nZS5lbWl0KHsgdmFsaWQ6IGlzRW1wdHlPclZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlSW5wdXQoZGVzZXJpYWxpemVBc0ZhbGxiYWNrID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoaXNEYXRlSW5wdXQodGhpcy5pbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RWxlbWVudCEudmFsdWU7XG4gICAgLy8gV2UgYXJlIGFzc2lnbmluZyBkaXJlY3RseSB0byB0aGUgcHJpdmF0ZSBiYWNraW5nIHByb3BlcnR5IG9mIHZhbHVlQXNEYXRlXG4gICAgLy8gYXMgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgYmx1ciBldmVudCBkdXJpbmcgdGhpcyB0aW1lLlxuICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMubm93KSxcbiAgICApO1xuICAgIGlmIChkZXNlcmlhbGl6ZUFzRmFsbGJhY2sgJiYgIXRoaXMuX3ZhbHVlQXNEYXRlKSB7XG4gICAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRBcmlhTGl2ZU1lc3NhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudDogSFRNTFBhcmFncmFwaEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uPEhUTUxQYXJhZ3JhcGhFbGVtZW50PignI3N0YXR1cy1jb250YWluZXInKTtcblxuICAgIGlmICghY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWVBc0RhdGUpIHtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQodGhpcy52YWx1ZUFzRGF0ZSwgeyB3ZWVrZGF5U3R5bGU6ICdsb25nJyB9KTtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJUZXh0ID0gYCR7aTE4bkRhdGVDaGFuZ2VkVG9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7ZGF0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxwIGlkPVwic3RhdHVzLWNvbnRhaW5lclwiIHJvbGU9XCJzdGF0dXNcIj48L3A+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaXJzdCBhdmFpbGFibGUgZGF0ZSBiZWZvcmUgdGhlIGdpdmVuIG9uZSxcbiAgICogY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eSBhbmQgYG1pbmAgcGFyYW1ldGVyIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGUpLlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICAgKi9cbiAgcHVibGljIGZpbmRQcmV2aW91c0F2YWlsYWJsZURhdGUoZGF0ZTogVCk6IFQge1xuICAgIGNvbnN0IHByZXZpb3VzRGF0ZSA9IHRoaXMuX2ZpbmRBdmFpbGFibGVEYXRlKGRhdGUsIC0xKTtcbiAgICBjb25zdCBkYXRlTWluID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1pbik7XG5cbiAgICBpZiAoXG4gICAgICAhZGF0ZU1pbiB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1pbikgJiZcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUocHJldmlvdXNEYXRlLCBkYXRlTWluKSA+PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZmlyc3QgYXZhaWxhYmxlIGRhdGUgYWZ0ZXIgdGhlIGdpdmVuIG9uZSxcbiAgICogY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eSBhbmQgYG1heGAgcGFyYW1ldGVyIChlLmcuIGZyb20gdGhlIHNlbGYtbmFtZWQgaW5wdXQncyBhdHRyaWJ1dGUpLlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgc3RhcnRpbmcgZGF0ZSBmb3IgY2FsY3VsYXRpb25zLlxuICAgKi9cbiAgcHVibGljIGZpbmROZXh0QXZhaWxhYmxlRGF0ZShkYXRlOiBUKTogVCB7XG4gICAgY29uc3QgbmV4dERhdGUgPSB0aGlzLl9maW5kQXZhaWxhYmxlRGF0ZShkYXRlLCAxKTtcbiAgICBjb25zdCBkYXRlTWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1heCk7XG5cbiAgICBpZiAoXG4gICAgICAhZGF0ZU1heCB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1heCkgJiYgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobmV4dERhdGUsIGRhdGVNYXgpIDw9IDApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV4dERhdGU7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRlIGJlZm9yZSBvciBhZnRlciBhIGdpdmVuIG9uZSwgY29uc2lkZXJpbmcgdGhlIGBkYXRlRmlsdGVyYCBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIGRhdGUgVGhlIHN0YXJ0aW5nIGRhdGUgZm9yIGNhbGN1bGF0aW9ucy5cbiAgICogQHBhcmFtIGRlbHRhIFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQvc3VidHJhY3QgZnJvbSB0aGUgc3RhcnRpbmcgb25lLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZEF2YWlsYWJsZURhdGUoZGF0ZTogVCwgZGVsdGE6IG51bWJlcik6IFQge1xuICAgIGxldCBhdmFpbGFibGVEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIGRlbHRhKTtcblxuICAgIGlmICh0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHdoaWxlICghdGhpcy5kYXRlRmlsdGVyKGF2YWlsYWJsZURhdGUpKSB7XG4gICAgICAgIGF2YWlsYWJsZURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoYXZhaWxhYmxlRGF0ZSwgZGVsdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdmFpbGFibGVEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB2YWx1ZUFzRGF0ZSBpcyB2YWxpZCwgY29uc2lkZXJpbmcgdGhlIFNiYkRhdGVwaWNrZXJFbGVtZW50IGBkYXRlRmlsdGVyYCBwcm9wZXJ0eVxuICAgKiBhbmQgYG1pbmAgYW5kIGBtYXhgIHBhcmFtZXRlcnMgKGUuZy4gZnJvbSB0aGUgc2VsZi1uYW1lZCBpbnB1dCdzIGF0dHJpYnV0ZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXNEYXRlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52YWx1ZUFzRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVNaW4gPSB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLmlucHV0RWxlbWVudD8ubWluKTtcbiAgICBjb25zdCBkYXRlTWF4ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5pbnB1dEVsZW1lbnQ/Lm1heCk7XG5cbiAgICBpZiAoXG4gICAgICAodGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZChkYXRlTWluKSAmJlxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLnZhbHVlQXNEYXRlLCBkYXRlTWluISkgPCAwKSB8fFxuICAgICAgKHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZU1heCkgJiZcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy52YWx1ZUFzRGF0ZSwgZGF0ZU1heCEpID4gMClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRlRmlsdGVyPy4odGhpcy52YWx1ZUFzRGF0ZSkgPz8gdHJ1ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWRhdGVwaWNrZXInOiBTYmJEYXRlcGlja2VyRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIGlucHV0VXBkYXRlZDogQ3VzdG9tRXZlbnQ8U2JiSW5wdXRVcGRhdGVFdmVudD47XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTYmJEYXRlcGlja2VyRWxlbWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1Q00sU0FBVSxjQUNkLFNBQ0EsU0FBOEI7QUFFOUIsTUFBSSxDQUFDLFNBQVM7QUFDWixXQUFPLFFBQ0osVUFBVSxnQkFBZ0IsR0FDekIsY0FBdUMsZ0JBQWdCO0FBQUEsRUFBQTtBQUc3RCxTQUFPLHNCQUErQyxPQUFPO0FBQy9EO0FBS08sTUFBTSwwQ0FBMEMsTUFDckQsSUFBSSxZQUFZLCtCQUErQjtBQUFBLEVBQzdDLFNBQVM7QUFBQSxFQUNULFVBQVU7QUFDWCxDQUFBO0FBRUgsSUFBSSxTQUFTO0FBQ2IsSUFBSSxnQkFBZ0I7QUFDcEIsTUFBTSxjQUFjLENBQ2xCLFlBQ3NDLFNBQVMsY0FBYztJQWF6RCx3QkFBb0IsTUFBQTs7MEJBRHpCLGNBQWMsZ0JBQWdCLENBQUM7Ozs7b0JBQ2E7Ozs7Ozs7Ozs7Ozs7O0FBQVIsTUFBQUEseUJBQUEsbUJBQVEsWUFBVTtBQUFBOztBQVlyRDtBQTJCQTtBQWdEUztBQTNFTyx5QkFBQSx5QkFaWixrQkFBQSxNQUFBLDBCQUFBLEdBQW9CLGtCQUFBLE1BQUEsb0JBWVEsS0FBSztBQWlCN0IsV0FBQSxjQUFXLGtCQUFBLE1BQUEsdUJBQUE7QUFVSCx5QkFBQSx5QkFBQSxrQkFBQSxNQUFBLHFCQUFxQyxJQUFJO0FBYWpELFdBQUEsT0FBSSxrQkFBQSxNQUFBLHdCQUFBO0FBbUNjLHlCQUFBLGlDQUFBLGtCQUFBLE1BQUEsNkJBQWtFLElBQUk7QUFHeEYsV0FBQSxXQUFPLGtCQUFBLE1BQUEsZ0NBQUEsR0FBaUIsSUFBSSxhQUFhLE1BQU1BLHNCQUFxQixPQUFPLFFBQVE7QUFBQSxRQUN6RixTQUFTO0FBQUEsTUFBQSxDQUNWO0FBR08sV0FBQSxnQkFBbUQsSUFBSSxhQUM3RCxNQUNBQSxzQkFBcUIsT0FBTyxjQUM1QixFQUFFLFNBQVMsTUFBTSxZQUFZLEtBQUEsQ0FBTTtBQUk3QixXQUFBLHFCQUFtQyxJQUFJLGFBQzdDLE1BQ0FBLHNCQUFxQixPQUFPLG1CQUM1QjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsWUFBWTtBQUFBLE1BQUEsQ0FDYjtBQUlLLFdBQUEsb0JBQTRELElBQUksYUFDdEUsTUFDQUEsc0JBQXFCLE9BQU8sZ0JBQWdCO0FBR3RDLFdBQUEsa0NBQWtDO0FBR2xDLFdBQUEsOEJBQThCLElBQUkseUJBQXlCLE1BQU0sT0FBTztBQUV4RSxXQUFBLGlCQUFpQixDQUFDLFdBQ3RCLElBQUksaUJBQWlCLENBQUMsa0JBQWlCO0FBQ3JDLGFBQUssa0JBQUE7QUFDTCxhQUFLLHdCQUF3QixlQUFBO0FBRTdCLFlBQ0UsS0FBSyxnQkFDTCxDQUFDLFlBQVksS0FBSyxZQUFZLEtBQzlCLGVBQWUsS0FBSyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsT0FBTyxHQUN0RDtBQUNBLGdCQUFNLFFBQVEsS0FBSyxhQUFhLGFBQWEsT0FBTztBQUNwRCxlQUFLLGNBQWMsS0FBSyxhQUFhLE1BQU0sT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQUE7QUFBQSxNQUNqRSxDQUNELElBQ0Q7QUFFSSxXQUFBLGVBQStCLFdBQUEsRUFBYSxVQUFVLGVBQWU7QUFFckUsV0FBQSxZQUFZLElBQUksc0JBQXNCLElBQUk7QUFDMUMsV0FBQSx5QkFBeUIsSUFBSSx1Q0FBdUMsSUFBSTtBQUFBLElBQUE7QUFBQTtBQUFBLElBakloRixJQUFnQixPQUFJO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUFwQixJQUFnQixLQUFJLE9BQUE7QUFBQSx5QkFBQSx3QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3BCLElBQVcsV0FBVyxPQUFrQztBQUN0RCxXQUFLLGNBQWM7QUFBQSxJQUFBO0FBQUEsSUFFckIsSUFBVyxhQUFVO0FBQ25CLGFBQ0UsS0FBSyxnQkFDSixZQUFZLEtBQUssWUFBWSxJQUFJLEtBQUssYUFBYSxhQUFhLFVBQ2hFLE1BQU07QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWFYLElBQWdCLFFBQUs7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQXJCLElBQWdCLE1BQUssT0FBQTtBQUFBLHlCQUFBLHlCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPckIsSUFBVyxJQUFJLE9BQTRCO0FBQ3pDLFdBQUssT0FBTyxLQUFLLGFBQWEsbUJBQW1CLEtBQUssYUFBYSxZQUFZLEtBQUssQ0FBQztBQUFBLElBQUE7QUFBQSxJQUV2RixJQUFXLE1BQUc7QUFDWixhQUFPLEtBQUssUUFBUSxLQUFLLGFBQWEsTUFBQTtBQUFBLElBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUzdDLElBQVcsWUFBWSxPQUE0QjtBQUNqRCxVQUFJLFlBQVksS0FBSyxZQUFZLEdBQUc7QUFDbEMsYUFBSyxhQUFhLGNBQWMsS0FBSyxhQUFhLG1CQUNoRCxLQUFLLGFBQWEsWUFBWSxLQUFLLENBQUM7QUFFdEM7QUFBQSxNQUFBO0FBR0YsV0FBSyxlQUFlLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLFlBQVksS0FBSyxDQUFDO0FBQzdGLFVBQUksS0FBSywwQkFBMEI7QUFHakMsYUFBSyxhQUFjLGNBQWMsSUFBSSxNQUFNLFFBQVEsRUFBRSxVQUFVLEtBQUEsQ0FBTSxDQUFDO0FBQUEsTUFBQTtBQUFBLElBQ3hFO0FBQUEsSUFFRixJQUFXLGNBQVc7QUFDcEIsVUFBSSxZQUFZLEtBQUssWUFBWSxHQUFHO0FBQ2xDLGVBQU8sS0FBSyxhQUFhO0FBQUEsTUFBQTtBQUczQixhQUFPLEtBQUssZ0JBQWdCO0FBQUEsSUFBQTtBQUFBO0FBQUEsSUFLOUIsSUFBVyxlQUFZO0FBQ3JCLGFBQU8sS0FBSztBQUFBLElBQUE7QUFBQSxJQUVMLElBQWlCLGdCQUFhO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUE5QixJQUFpQixjQUFhLE9BQUE7QUFBQSx5QkFBQSxpQ0FBQTtBQUFBLElBQUE7QUFBQSxJQXdEdkIsb0JBQWlCO0FBQy9CLFlBQU0sa0JBQUE7QUFFTixXQUFLLE9BQU8sa0JBQWtCLEVBQUUsTUFBTTtBQUN0QyxXQUFLLHVCQUFBO0FBQUEsSUFBc0I7QUFBQSxJQUdiLGNBQ2QsTUFDQSxVQUNBLFNBQTZCO0FBRTdCLFlBQU0sY0FBYyxNQUFNLFVBQVUsT0FBTztBQUMzQyxVQUFJLEtBQUssY0FBYyxDQUFDLFFBQVEsS0FBSyxjQUFjO0FBQ2pELFlBQUksS0FBSyxpQ0FBaUM7QUFDeEMsZUFBSyxhQUFhLGNBQWMsMEJBQTBCLEtBQUssVUFBVSxPQUFPO0FBQUEsUUFBQTtBQUVsRixZQUFJLEtBQUssYUFBYTtBQUNwQixlQUFLLGFBQWEsUUFBUSxLQUFLLGFBQWEsT0FBTyxLQUFLLFdBQVc7QUFBQSxRQUFBO0FBQUEsTUFDckU7QUFFRixVQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsU0FBUyxZQUFZLEtBQUssWUFBWTtBQUMvRCxhQUFLLHVCQUFBO0FBQUEsTUFBc0I7QUFBQSxJQUM3QjtBQUFBLElBR2lCLFdBQVcsbUJBQXVDO0FBQ25FLFlBQU0sV0FBVyxpQkFBaUI7QUFFbEMsVUFDRSxrQkFBa0IsSUFBSSxNQUFNLEtBQzVCLGtCQUFrQixJQUFJLFlBQVksS0FDbEMsa0JBQWtCLElBQUksS0FBSyxHQUMzQjtBQUNBLGFBQUssdUJBQXVCLGVBQUE7QUFDNUIsYUFBSyxtQkFBbUIsS0FBQTtBQUFBO0FBRTFCLFVBQUksa0JBQWtCLElBQUksYUFBYSxHQUFHO0FBQ3hDLGFBQUssb0JBQUE7QUFBQSxNQUFtQjtBQUFBLElBQzFCO0FBQUEsSUFHYyx1QkFBb0I7QUFDbEMsWUFBTSxxQkFBQTtBQUNOLFdBQUssZ0JBQWdCLFdBQUE7QUFDckIsV0FBSyx1QkFBdUIsTUFBQTtBQUM1QixXQUFLLGdCQUFnQjtBQUFBLElBQUE7QUFBQSxJQUdKLGFBQWEsbUJBQXVDO0FBQ3JFLFlBQU0sYUFBYSxpQkFBaUI7QUFDcEMsV0FBSyxvQkFBQTtBQUFBLElBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9uQixlQUFZO0FBQ2pCLGFBQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUFBO0FBQUEsSUFHUix5QkFBc0I7QUFDNUIsWUFBTSxlQUNKLEtBQUssaUJBQWlCLG9CQUNyQixLQUFLLGlCQUFpQixlQUFlLFlBQWUsS0FBSyxLQUFLLElBQzNELEtBQUssUUFDSCxLQUFLLDRCQUE0QixVQUNuQyxLQUFLLFVBQVUsZ0JBQWdCLEdBQUcsY0FDaEMsc0JBQXNCLEtBRXhCO0FBQ04sVUFBSSxpQkFBaUIsS0FBSyxjQUFjO0FBQ3RDO0FBQUEsTUFBQTtBQUdGLFdBQUssdUJBQXVCLE1BQUE7QUFDNUIsV0FBSyxnQkFBZ0IsV0FBQTtBQUNyQixXQUFLLGdCQUFnQjtBQUVyQixVQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3RCO0FBQUEsTUFBQTtBQUdGLFlBQU0sZ0JBQWdCLENBQUMsWUFBWSxLQUFLLFlBQVk7QUFDcEQsVUFBSSxpQkFBaUIsUUFBdUIsQ0FBQyxlQUFlO0FBQzFELHdCQUFnQjtBQUNoQixnQkFBUSxLQUNOLHdHQUF3RztBQUFBLE1BQUE7QUFJNUcsV0FBSyx3QkFBd0IsSUFBSSxnQkFBQTtBQUNqQyxXQUFLLGdCQUFnQixRQUFRLEtBQUssY0FBYztBQUFBLFFBQzlDLGlCQUFpQixDQUFDLFlBQVksWUFBWSxPQUFPLE9BQU8sT0FBTztBQUFBLE1BQUEsQ0FDaEU7QUFFRCxVQUFJLGVBQWU7QUFDakIsYUFBSyxrQ0FBa0MsQ0FBQyxLQUFLLGFBQWE7QUFDMUQsYUFBSyxhQUFhLE9BQU87QUFDekIsWUFBSSxLQUFLLGlDQUFpQztBQUN4QyxlQUFLLGFBQWEsY0FBYywwQkFBMEIsS0FBSyxVQUFVLE9BQU87QUFBQSxRQUFBO0FBQUEsTUFDbEY7QUFHRixZQUFNLFVBQW1DLEVBQUUsUUFBUSxLQUFLLHNCQUFzQixPQUFBO0FBQzlFLFdBQUssYUFBYSxpQkFDaEIsU0FDQSxDQUFDLE1BQUs7QUFDSixxQkFBYSxHQUFHLElBQUk7QUFDcEIsYUFBSyxZQUFBO0FBQUEsTUFBVyxHQUVsQixPQUFPO0FBRVQsV0FBSyxhQUFhLGlCQUFpQixVQUFVLE1BQU0sS0FBSyxtQkFBQSxHQUFzQixPQUFPO0FBQ3JGLFdBQUssYUFBYSxpQkFDaEIsV0FDQSxNQUFNLEtBQUssd0JBQXdCLGVBQUEsR0FDbkMsT0FBTztBQUVULFdBQUssWUFBWSxJQUFJO0FBQ3JCLFdBQUssdUJBQUE7QUFDTCxXQUFLLGNBQUE7QUFDTCxXQUFLLGtCQUFBO0FBQ0wsV0FBSyx3QkFBd0IsZUFBQTtBQUFBO0lBR3ZCLG9CQUFpQjtBQUN2QixZQUFNLEVBQUUsVUFBVSxVQUFVLFVBQVUsS0FBSyxVQUFVLEtBQUssU0FBQSxJQUFhLEtBQUssZ0JBQWdCLENBQUE7QUFDNUYsWUFBTSxNQUNKLFlBQVksT0FBTyxhQUFhLFdBQVcsS0FBSyxhQUFhLFVBQVUsUUFBUSxJQUFJO0FBRXJGLFlBQU0sTUFDSixZQUFZLE9BQU8sYUFBYSxXQUFXLEtBQUssYUFBYSxVQUFVLFFBQVEsSUFBSTtBQUVyRixXQUFLLGNBQWMsS0FBSyxFQUFFLFVBQVUsVUFBVSxLQUFLLEtBQUs7QUFBQSxJQUFBO0FBQUEsSUFHbEQscUJBQWtCO0FBQ3hCLFVBQUksS0FBSywwQkFBMEI7QUFDakM7QUFBQSxNQUFBO0FBRUYsV0FBSyxjQUFBO0FBQ0wsV0FBSyxvQkFBQTtBQUNMLFdBQUssUUFBUSxLQUFBO0FBQ2IsV0FBSyx3QkFBd0IsZUFBQTtBQUFBO0lBR3ZCLHlCQUFzQjtBQUM1QixVQUFJLENBQUMsS0FBSyxnQkFBZ0IsWUFBWSxLQUFLLFlBQVksR0FBRztBQUN4RCxlQUFPO0FBQUEsTUFBQTtBQUdULFlBQU0sZ0JBQWdCLEtBQUssY0FBYyxLQUFLLGFBQWEsT0FBTyxLQUFLLFdBQVksSUFBSTtBQUN2RixVQUFJLGlCQUFpQixLQUFLLGFBQWEsVUFBVSxlQUFlO0FBRzlELGNBQU0sV0FBVyxPQUFPLHlCQUF5QixpQkFBaUIsV0FBVyxPQUFPLEVBQUc7QUFDdkYsaUJBQVMsS0FBSyxLQUFLLGNBQWMsYUFBYTtBQUU5QyxhQUFLLGFBQWEsY0FBYyxJQUFJLFdBQVcsU0FBUyxFQUFFLFNBQVMsTUFBTSxVQUFVLEtBQUEsQ0FBTSxDQUFDO0FBQzFGLGFBQUssYUFBYSxjQUFjLElBQUksTUFBTSxVQUFVLEVBQUUsU0FBUyxNQUFNLFVBQVUsS0FBQSxDQUFNLENBQUM7QUFDdEYsZUFBTztBQUFBLE1BQUE7QUFHVCxhQUFPO0FBQUEsSUFBQTtBQUFBLElBR0QsZ0JBQWE7QUFDbkIsVUFBSSxDQUFDLEtBQUssY0FBYztBQUN0QjtBQUFBLE1BQUE7QUFHRixZQUFNLGlCQUFpQixDQUFDLEtBQUssYUFBYSxTQUFTLEtBQUssaUJBQUE7QUFDeEQsWUFBTSxXQUFXLENBQUMsS0FBSyxhQUFhLGFBQWEsa0JBQWtCO0FBQ25FLFdBQUssYUFBYSxnQkFBZ0Isb0JBQW9CLENBQUMsY0FBYztBQUNyRSxVQUFJLGFBQWEsZ0JBQWdCO0FBQy9CLGFBQUssa0JBQWtCLEtBQUssRUFBRSxPQUFPLGdCQUFnQjtBQUFBLE1BQUE7QUFBQSxJQUN2RDtBQUFBLElBR00sWUFBWSx3QkFBd0IsT0FBSztBQUMvQyxVQUFJLFlBQVksS0FBSyxZQUFZLEdBQUc7QUFDbEM7QUFBQSxNQUFBO0FBR0YsWUFBTSxRQUFRLEtBQUssYUFBYztBQUdqQyxXQUFLLGVBQWUsS0FBSyxhQUFhLG1CQUNwQyxLQUFLLGFBQWEsTUFBTSxPQUFPLEtBQUssR0FBRyxDQUFDO0FBRTFDLFVBQUkseUJBQXlCLENBQUMsS0FBSyxjQUFjO0FBQy9DLGFBQUssZUFBZSxLQUFLLGFBQWEsbUJBQ3BDLEtBQUssYUFBYSxZQUFZLEtBQUssQ0FBQztBQUFBLE1BQUE7QUFBQSxJQUV4QztBQUFBLElBR00sc0JBQW1CO0FBQ3pCLFlBQU0sbUJBQ0osS0FBSyxZQUFZLGdCQUFzQyxtQkFBbUI7QUFFNUUsVUFBSSxDQUFDLGtCQUFrQjtBQUNyQjtBQUFBLE1BQUEsV0FDUyxDQUFDLEtBQUssYUFBYTtBQUM1Qix5QkFBaUIsWUFBWTtBQUFBLE1BQUEsT0FDeEI7QUFDTCxjQUFNLE9BQU8sS0FBSyxhQUFhLE9BQU8sS0FBSyxhQUFhLEVBQUUsY0FBYyxRQUFRO0FBQ2hGLHlCQUFpQixZQUFZLEdBQUcsa0JBQWtCLEtBQUssVUFBVSxPQUFPLENBQUMsSUFBSSxJQUFJO0FBQUEsTUFBQTtBQUFBLElBQ25GO0FBQUEsSUFHaUIsU0FBTTtBQUN2QixhQUFPO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFGLDBCQUEwQixNQUFPO0FBQ3RDLFlBQU0sZUFBZSxLQUFLLG1CQUFtQixNQUFNLEVBQUU7QUFDckQsWUFBTSxVQUFVLEtBQUssYUFBYSxZQUFZLEtBQUssY0FBYyxHQUFHO0FBRXBFLFVBQ0UsQ0FBQyxXQUNBLEtBQUssYUFBYSxRQUFRLE9BQU8sS0FDaEMsS0FBSyxhQUFhLFlBQVksY0FBYyxPQUFPLEtBQUssR0FDMUQ7QUFDQSxlQUFPO0FBQUEsTUFBQTtBQUVULGFBQU87QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUYsc0JBQXNCLE1BQU87QUFDbEMsWUFBTSxXQUFXLEtBQUssbUJBQW1CLE1BQU0sQ0FBQztBQUNoRCxZQUFNLFVBQVUsS0FBSyxhQUFhLFlBQVksS0FBSyxjQUFjLEdBQUc7QUFFcEUsVUFDRSxDQUFDLFdBQ0EsS0FBSyxhQUFhLFFBQVEsT0FBTyxLQUFLLEtBQUssYUFBYSxZQUFZLFVBQVUsT0FBTyxLQUFLLEdBQzNGO0FBQ0EsZUFBTztBQUFBLE1BQUE7QUFFVCxhQUFPO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFELG1CQUFtQixNQUFTLE9BQWE7QUFDL0MsVUFBSSxnQkFBZ0IsS0FBSyxhQUFhLGdCQUFnQixNQUFNLEtBQUs7QUFFakUsVUFBSSxLQUFLLFlBQVk7QUFDbkIsZUFBTyxDQUFDLEtBQUssV0FBVyxhQUFhLEdBQUc7QUFDdEMsMEJBQWdCLEtBQUssYUFBYSxnQkFBZ0IsZUFBZSxLQUFLO0FBQUEsUUFBQTtBQUFBLE1BQ3hFO0FBR0YsYUFBTztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0QsbUJBQWdCO0FBQ3RCLFVBQUksQ0FBQyxLQUFLLGFBQWE7QUFDckIsZUFBTztBQUFBLE1BQUE7QUFHVCxZQUFNLFVBQVUsS0FBSyxhQUFhLFlBQVksS0FBSyxjQUFjLEdBQUc7QUFDcEUsWUFBTSxVQUFVLEtBQUssYUFBYSxZQUFZLEtBQUssY0FBYyxHQUFHO0FBRXBFLFVBQ0csS0FBSyxhQUFhLFFBQVEsT0FBTyxLQUNoQyxLQUFLLGFBQWEsWUFBWSxLQUFLLGFBQWEsT0FBUSxJQUFJLEtBQzdELEtBQUssYUFBYSxRQUFRLE9BQU8sS0FDaEMsS0FBSyxhQUFhLFlBQVksS0FBSyxhQUFhLE9BQVEsSUFBSSxHQUM5RDtBQUNBLGVBQU87QUFBQSxNQUFBO0FBR1QsYUFBTyxLQUFLLGFBQWEsS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUFBO0FBQUEsS0F2YWhELHdDQTJCQSx5Q0FnRFM7O3dCQTdFUixhQUNBLFNBQVMsRUFBRSxNQUFNLFFBQUEsQ0FBUyxDQUFDO0FBTzNCLGlDQUFBLENBQUEsU0FBUyxFQUFFLFdBQVcsTUFBQSxDQUFPLENBQUM7QUFvQjlCLHdCQUFBLENBQUEsVUFBVTtBQU9WLDBCQUFBLENBQUEsVUFBVTtBQWFWLGtDQUFBLENBQUEsU0FBUyxFQUFFLFdBQVcsTUFBQSxDQUFPLENBQUM7QUE2QjlCLGdDQUFBLENBQUEsT0FBTztBQTNFUixpQkFBQSxJQUFBLE1BQUEsa0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxRQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFVBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFnQixNQUFJLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFKLE9BQUk7QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLG9CQUFBLHVCQUFBO0FBT3BCLGlCQUFBLElBQUEsTUFBQSw0QkFBQSxFQUFBLE1BQUEsVUFBQSxNQUFBLGNBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsZ0JBQUEsS0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBVyxhQUFVO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSxNQUFBLDBCQUFBO0FBb0JyQixpQkFBQSxJQUFBLE1BQUEsbUJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxTQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFdBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFnQixPQUFLLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFMLFFBQUs7QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLHFCQUFBLHdCQUFBO0FBT3JCLGlCQUFBLElBQUEsTUFBQSxxQkFBQSxFQUFBLE1BQUEsVUFBQSxNQUFBLE9BQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsU0FBQSxLQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFXLE1BQUc7QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLE1BQUEsMEJBQUE7QUFhZCxpQkFBQSxJQUFBLE1BQUEsNkJBQUEsRUFBQSxNQUFBLFVBQUEsTUFBQSxlQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGlCQUFBLEtBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVcsY0FBVztBQUFBLElBQUEsS0FBQSxVQUFBLGFBQUEsTUFBQSwwQkFBQTtBQTRCYixpQkFBQSxJQUFBLE1BQUEsMkJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxpQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxtQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQWlCLGVBQWEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQWIsZ0JBQWE7QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLDZCQUFBLGdDQUFBO0FBdkZ6QyxpQkFBQSxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBQ3lCLEdBQUEsU0FBeUIsT0FDekIsR0FBQSxTQUFTO0FBQUEsSUFDOUIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2QsbUJBQW1CO0FBQUEsSUFDbkIsa0JBQWtCO0FBQUEsRUFBQSxHQU5oQixrQkFBQSxZQUFBLHVCQUFBLEdBQStCOzs7In0=
@@ -147,4 +147,4 @@ let SbbDatepickerNextDayElement = (() => {
147
147
  export {
148
148
  SbbDatepickerNextDayElement
149
149
  };
150
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uZXh0LWRheS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmV4dC1kYXkvZGF0ZXBpY2tlci1uZXh0LWRheS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpMThuTmV4dERheSwgaTE4blNlbGVjdE5leHREYXkgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHsgU2JiRGF0ZXBpY2tlckJ1dHRvbiB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGVwaWNrZXItbmV4dC1kYXkuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgZGF0ZSBhaGVhZC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRhdGVwaWNrZXItbmV4dC1kYXknKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ3N1ZmZpeCcsXG59KVxuY2xhc3MgU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIFNiYkRhdGVwaWNrZXJCdXR0b248VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwcm90ZWN0ZWQgaWNvbk5hbWU6IHN0cmluZyA9ICdjaGV2cm9uLXNtYWxsLXJpZ2h0LXNtYWxsJztcbiAgcHJvdGVjdGVkIGkxOG5PZmZCb3VuZGFyeURheTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGkxOG5OZXh0RGF5O1xuICBwcm90ZWN0ZWQgaTE4blNlbGVjdE9mZkJvdW5kYXJ5RGF5ID0gaTE4blNlbGVjdE5leHREYXk7XG5cbiAgcHJvdGVjdGVkIGZpbmRBdmFpbGFibGVEYXRlKGRhdGU6IFQpOiBUIHtcbiAgICAvLyBXaGVuIGNhbGxpbmcgZmluZEF2YWlsYWJsZURhdGUsIGRhdGVwaWNrZXJFbGVtZW50IGlzIGFsd2F5cyBkZWZpbmVkLlxuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJFbGVtZW50IS5maW5kTmV4dEF2YWlsYWJsZURhdGUoZGF0ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLW5leHQtZGF5JzogU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQk0sK0JBQTJCLE1BQUE7O0FBSmhDLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLHlCQUF5QixHQUN2QyxlQUFlO0FBQUEsSUFDZCxNQUFNO0FBQUEsRUFBQSxDQUNQLENBQUM7Ozs7b0JBQ2tEO0FBQVIsRUFBQSxtQkFBUSxZQUFzQjtBQUFBOztBQUc5RCxXQUFRLFdBQVc7QUFDbkIsV0FBa0IscUJBQTJCO0FBQzdDLFdBQXdCLDJCQUFHO0FBQUEsSUFBQTtBQUFBLElBRTNCLGtCQUFrQixNQUFPO0FBRTFCLGFBQUEsS0FBSyxrQkFBbUIsc0JBQXNCLElBQUk7QUFBQSxJQUFBO0FBQUE7O0FBVDdELGlCQVdDLE1BQUEsbUJBQUEsRUFBQSxPQUFBLFdBQUEsR0FBQSxrQkFBQSxFQUFBLE1BQUEsU0FBQSxNQUFBLFdBQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxNQUFBLHVCQUFBOzs7UUFWd0IsR0FBTSxTQUFtQixPQUQ1QyxrQkFBMkIsWUFBQSx1QkFBQSxHQUFXOzs7In0=
150
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uZXh0LWRheS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmV4dC1kYXkvZGF0ZXBpY2tlci1uZXh0LWRheS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpMThuTmV4dERheSwgaTE4blNlbGVjdE5leHREYXkgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHsgU2JiRGF0ZXBpY2tlckJ1dHRvbiB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGVwaWNrZXItbmV4dC1kYXkuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgZGF0ZSBhaGVhZC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWRhdGVwaWNrZXItbmV4dC1kYXknKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ3N1ZmZpeCcsXG59KVxuY2xhc3MgU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIFNiYkRhdGVwaWNrZXJCdXR0b248VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwcm90ZWN0ZWQgaWNvbk5hbWU6IHN0cmluZyA9ICdjaGV2cm9uLXNtYWxsLXJpZ2h0LXNtYWxsJztcbiAgcHJvdGVjdGVkIGkxOG5PZmZCb3VuZGFyeURheTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGkxOG5OZXh0RGF5O1xuICBwcm90ZWN0ZWQgaTE4blNlbGVjdE9mZkJvdW5kYXJ5RGF5ID0gaTE4blNlbGVjdE5leHREYXk7XG5cbiAgcHJvdGVjdGVkIGZpbmRBdmFpbGFibGVEYXRlKGRhdGU6IFQpOiBUIHtcbiAgICAvLyBXaGVuIGNhbGxpbmcgZmluZEF2YWlsYWJsZURhdGUsIGRhdGVwaWNrZXJFbGVtZW50IGlzIGFsd2F5cyBkZWZpbmVkLlxuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJFbGVtZW50IS5maW5kTmV4dEF2YWlsYWJsZURhdGUoZGF0ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLW5leHQtZGF5JzogU2JiRGF0ZXBpY2tlck5leHREYXlFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQk0sK0JBQTJCLE1BQUE7O0FBSmhDLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLHlCQUF5QixHQUN2QyxlQUFlO0FBQUEsSUFDZCxNQUFNO0FBQUEsRUFBQSxDQUNQLENBQUM7Ozs7b0JBQ2tEO0FBQVIsRUFBQSxtQkFBUSxZQUFzQjtBQUFBOztBQUc5RCxXQUFBLFdBQW1CO0FBQ25CLFdBQUEscUJBQTZDO0FBQzdDLFdBQUEsMkJBQTJCO0FBQUEsSUFBQTtBQUFBLElBRTNCLGtCQUFrQixNQUFPO0FBRWpDLGFBQU8sS0FBSyxrQkFBbUIsc0JBQXNCLElBQUk7QUFBQSxJQUFBO0FBQUE7O0FBVDdELGlCQUFBLE1BQUEsbUJBQUEsRUFBQSxPQUFBLFdBQUEsR0FBQSxrQkFBQSxFQUFBLE1BQUEsU0FBQSxNQUFBLFdBQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxNQUFBLHVCQUFBOzs7UUFDeUIsR0FBQSxTQUF5QixPQUQ1QyxrQkFBQSxZQUFBLHVCQUFBLEdBQXNDOzs7In0=
@@ -147,4 +147,4 @@ let SbbDatepickerPreviousDayElement = (() => {
147
147
  export {
148
148
  SbbDatepickerPreviousDayElement
149
149
  };
150
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1wcmV2aW91cy1kYXkuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLXByZXZpb3VzLWRheS9kYXRlcGlja2VyLXByZXZpb3VzLWRheS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpMThuUHJldmlvdXNEYXksIGkxOG5TZWxlY3RQcmV2aW91c0RheSB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgeyBTYmJEYXRlcGlja2VyQnV0dG9uIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGF0ZXBpY2tlci1wcmV2aW91cy1kYXkuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgZGF0ZSBiYWNrLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZGF0ZXBpY2tlci1wcmV2aW91cy1kYXknKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ3ByZWZpeCcsXG59KVxuY2xhc3MgU2JiRGF0ZXBpY2tlclByZXZpb3VzRGF5RWxlbWVudDxUID0gRGF0ZT4gZXh0ZW5kcyBTYmJEYXRlcGlja2VyQnV0dG9uPFQ+IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgcHJvdGVjdGVkIGljb25OYW1lOiBzdHJpbmcgPSAnY2hldnJvbi1zbWFsbC1sZWZ0LXNtYWxsJztcbiAgcHJvdGVjdGVkIGkxOG5PZmZCb3VuZGFyeURheTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGkxOG5QcmV2aW91c0RheTtcbiAgcHJvdGVjdGVkIGkxOG5TZWxlY3RPZmZCb3VuZGFyeURheSA9IGkxOG5TZWxlY3RQcmV2aW91c0RheTtcblxuICBwcm90ZWN0ZWQgZmluZEF2YWlsYWJsZURhdGUoZGF0ZTogVCk6IFQge1xuICAgIC8vIFdoZW4gY2FsbGluZyBmaW5kQXZhaWxhYmxlRGF0ZSwgZGF0ZXBpY2tlckVsZW1lbnQgaXMgYWx3YXlzIGRlZmluZWQuXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpY2tlckVsZW1lbnQhLmZpbmRQcmV2aW91c0F2YWlsYWJsZURhdGUoZGF0ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSc6IFNiYkRhdGVwaWNrZXJQcmV2aW91c0RheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlCTSxtQ0FBK0IsTUFBQTs7QUFKcEMsTUFBQSxtQkFBQSxDQUFBLGNBQWMsNkJBQTZCLEdBQzNDLGVBQWU7QUFBQSxJQUNkLE1BQU07QUFBQSxFQUFBLENBQ1AsQ0FBQzs7OztvQkFDc0Q7QUFBUixFQUFBLG1CQUFRLFlBQXNCO0FBQUE7O0FBR2xFLFdBQVEsV0FBVztBQUNuQixXQUFrQixxQkFBMkI7QUFDN0MsV0FBd0IsMkJBQUc7QUFBQSxJQUFBO0FBQUEsSUFFM0Isa0JBQWtCLE1BQU87QUFFMUIsYUFBQSxLQUFLLGtCQUFtQiwwQkFBMEIsSUFBSTtBQUFBLElBQUE7QUFBQTs7QUFUakUsaUJBV0MsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQVZ3QixHQUFNLFNBQW1CLE9BRDVDLGtCQUErQixZQUFBLHVCQUFBLEdBQVc7OzsifQ==
150
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1wcmV2aW91cy1kYXkuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLXByZXZpb3VzLWRheS9kYXRlcGlja2VyLXByZXZpb3VzLWRheS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpMThuUHJldmlvdXNEYXksIGkxOG5TZWxlY3RQcmV2aW91c0RheSB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgeyBTYmJEYXRlcGlja2VyQnV0dG9uIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZGF0ZXBpY2tlci1wcmV2aW91cy1kYXkuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgZGF0ZSBiYWNrLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItZGF0ZXBpY2tlci1wcmV2aW91cy1kYXknKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ3ByZWZpeCcsXG59KVxuY2xhc3MgU2JiRGF0ZXBpY2tlclByZXZpb3VzRGF5RWxlbWVudDxUID0gRGF0ZT4gZXh0ZW5kcyBTYmJEYXRlcGlja2VyQnV0dG9uPFQ+IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgcHJvdGVjdGVkIGljb25OYW1lOiBzdHJpbmcgPSAnY2hldnJvbi1zbWFsbC1sZWZ0LXNtYWxsJztcbiAgcHJvdGVjdGVkIGkxOG5PZmZCb3VuZGFyeURheTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGkxOG5QcmV2aW91c0RheTtcbiAgcHJvdGVjdGVkIGkxOG5TZWxlY3RPZmZCb3VuZGFyeURheSA9IGkxOG5TZWxlY3RQcmV2aW91c0RheTtcblxuICBwcm90ZWN0ZWQgZmluZEF2YWlsYWJsZURhdGUoZGF0ZTogVCk6IFQge1xuICAgIC8vIFdoZW4gY2FsbGluZyBmaW5kQXZhaWxhYmxlRGF0ZSwgZGF0ZXBpY2tlckVsZW1lbnQgaXMgYWx3YXlzIGRlZmluZWQuXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpY2tlckVsZW1lbnQhLmZpbmRQcmV2aW91c0F2YWlsYWJsZURhdGUoZGF0ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSc6IFNiYkRhdGVwaWNrZXJQcmV2aW91c0RheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlCTSxtQ0FBK0IsTUFBQTs7QUFKcEMsTUFBQSxtQkFBQSxDQUFBLGNBQWMsNkJBQTZCLEdBQzNDLGVBQWU7QUFBQSxJQUNkLE1BQU07QUFBQSxFQUFBLENBQ1AsQ0FBQzs7OztvQkFDc0Q7QUFBUixFQUFBLG1CQUFRLFlBQXNCO0FBQUE7O0FBR2xFLFdBQUEsV0FBbUI7QUFDbkIsV0FBQSxxQkFBNkM7QUFDN0MsV0FBQSwyQkFBMkI7QUFBQSxJQUFBO0FBQUEsSUFFM0Isa0JBQWtCLE1BQU87QUFFakMsYUFBTyxLQUFLLGtCQUFtQiwwQkFBMEIsSUFBSTtBQUFBLElBQUE7QUFBQTs7QUFUakUsaUJBQUEsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQUN5QixHQUFBLFNBQXlCLE9BRDVDLGtCQUFBLFlBQUEsdUJBQUEsR0FBMEM7OzsifQ==
@@ -46,7 +46,7 @@ sbb-popover {
46
46
  height: auto;
47
47
  background-color: transparent;
48
48
  }`;
49
- const isDateInput = (element) => (element == null ? void 0 : element.localName) === "sbb-date-input";
49
+ const isDateInput = (element) => element?.localName === "sbb-date-input";
50
50
  let SbbDatepickerToggleElement = (() => {
51
51
  var _view_accessor_storage, __disabled_accessor_storage, __min_accessor_storage, __max_accessor_storage, __renderCalendar_accessor_storage, _a;
52
52
  let _classDecorators = [customElement("sbb-datepicker-toggle")];
@@ -74,7 +74,6 @@ let SbbDatepickerToggleElement = (() => {
74
74
  let __renderCalendar_extraInitializers = [];
75
75
  _a = class extends _classSuper {
76
76
  constructor() {
77
- var _a2;
78
77
  super();
79
78
  __privateAdd(this, _view_accessor_storage);
80
79
  __privateAdd(this, __disabled_accessor_storage);
@@ -90,7 +89,7 @@ let SbbDatepickerToggleElement = (() => {
90
89
  this._calendarElement = __runInitializers(this, __renderCalendar_extraInitializers);
91
90
  this._language = new SbbLanguageController(this);
92
91
  this.addController(new SbbDatepickerAssociationControlController(this));
93
- (_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "click", (event) => {
92
+ this.addEventListener?.("click", (event) => {
94
93
  if (event.composedPath()[0] === this) {
95
94
  this.open();
96
95
  }
@@ -116,8 +115,7 @@ let SbbDatepickerToggleElement = (() => {
116
115
  }
117
116
  /** Datepicker reference. */
118
117
  set datepicker(value) {
119
- var _a2, _b, _c;
120
- this._datepicker = typeof value === "string" ? ((_c = (_b = (_a2 = this.getRootNode) == null ? void 0 : _a2.call(this)) == null ? void 0 : _b.querySelector) == null ? void 0 : _c.call(_b, `#${value}`)) ?? null : value;
118
+ this._datepicker = typeof value === "string" ? this.getRootNode?.()?.querySelector?.(`#${value}`) ?? null : value;
121
119
  }
122
120
  get datepicker() {
123
121
  return this._datepicker ?? null;
@@ -160,21 +158,19 @@ let SbbDatepickerToggleElement = (() => {
160
158
  this.shadowRoot.querySelector("sbb-mini-button").click();
161
159
  }
162
160
  connectedCallback() {
163
- var _a2, _b;
164
161
  super.connectedCallback();
165
- this.slot || (this.slot = "prefix");
166
- const formField = ((_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) ?? ((_b = this.closest) == null ? void 0 : _b.call(this, "[data-form-field]"));
162
+ this.slot ||= "prefix";
163
+ const formField = this.closest?.("sbb-form-field") ?? this.closest?.("[data-form-field]");
167
164
  if (formField) {
168
165
  this.negative = formField.hasAttribute("negative");
169
166
  }
170
167
  }
171
168
  willUpdate(changedProperties) {
172
- var _a2, _b, _c, _d;
173
169
  super.willUpdate(changedProperties);
174
170
  if (this.datepicker) {
175
- this._disabled = (((_a2 = this.datepicker.inputElement) == null ? void 0 : _a2.disabled) || ((_b = this.datepicker.inputElement) == null ? void 0 : _b.readOnly)) ?? true;
176
- this._min = (_c = this.datepicker.inputElement) == null ? void 0 : _c.min;
177
- this._max = (_d = this.datepicker.inputElement) == null ? void 0 : _d.max;
171
+ this._disabled = (this.datepicker.inputElement?.disabled || this.datepicker.inputElement?.readOnly) ?? true;
172
+ this._min = this.datepicker.inputElement?.min;
173
+ this._max = this.datepicker.inputElement?.max;
178
174
  this._configureCalendar();
179
175
  if (this._calendarElement) {
180
176
  this._calendarElement.selected = this.datepicker.valueAsDate ?? null;
@@ -194,12 +190,11 @@ let SbbDatepickerToggleElement = (() => {
194
190
  this._calendarElement.dateFilter = this.datepicker.dateFilter;
195
191
  }
196
192
  _assignCalendar(calendar) {
197
- var _a2;
198
193
  if (this._calendarElement && this._calendarElement === calendar) {
199
194
  return;
200
195
  }
201
196
  this._calendarElement = calendar;
202
- if (!("valueAsDate" in (this.datepicker ?? {})) || !((_a2 = this._calendarElement) == null ? void 0 : _a2.resetPosition)) {
197
+ if (!("valueAsDate" in (this.datepicker ?? {})) || !this._calendarElement?.resetPosition) {
203
198
  return;
204
199
  }
205
200
  this._calendarElement.selected = this.datepicker.valueAsDate ?? null;
@@ -207,11 +202,9 @@ let SbbDatepickerToggleElement = (() => {
207
202
  this._calendarElement.resetPosition();
208
203
  }
209
204
  _nowOrNull() {
210
- var _a2;
211
- return ((_a2 = this.datepicker) == null ? void 0 : _a2.hasCustomNow()) ? this.datepicker.now : null;
205
+ return this.datepicker?.hasCustomNow() ? this.datepicker.now : null;
212
206
  }
213
207
  render() {
214
- var _a2, _b;
215
208
  return html`
216
209
  <sbb-mini-button
217
210
  class="sbb-datepicker-toggle__trigger"
@@ -236,8 +229,8 @@ let SbbDatepickerToggleElement = (() => {
236
229
  .min=${this._min}
237
230
  .max=${this._max}
238
231
  .now=${this._nowOrNull()}
239
- ?wide=${(_a2 = this.datepicker) == null ? void 0 : _a2.wide}
240
- .dateFilter=${((_b = this.datepicker) == null ? void 0 : _b.dateFilter) ?? null}
232
+ ?wide=${this.datepicker?.wide}
233
+ .dateFilter=${this.datepicker?.dateFilter ?? null}
241
234
  @dateSelected=${(d) => {
242
235
  this._calendarElement.selected = d.detail;
243
236
  if (this.datepicker) {
@@ -296,4 +289,4 @@ let SbbDatepickerToggleElement = (() => {
296
289
  export {
297
290
  SbbDatepickerToggleElement
298
291
  };
299
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLXRvZ2dsZS9kYXRlcGlja2VyLXRvZ2dsZS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIGlzU2VydmVyLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBTYmJDYWxlbmRhckVsZW1lbnQgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5qcyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBpMThuU2hvd0NhbGVuZGFyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluLCBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZGF0ZS1pbnB1dC5qcyc7XG5pbXBvcnQgeyBTYmJEYXRlcGlja2VyQXNzb2NpYXRpb25Db250cm9sQ29udHJvbGxlciwgdHlwZSBTYmJEYXRlcGlja2VyQ29udHJvbCB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGVwaWNrZXItdG9nZ2xlLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vY2FsZW5kYXIuanMnO1xuaW1wb3J0ICcuLi8uLi9wb3BvdmVyL3BvcG92ZXIuanMnO1xuaW1wb3J0ICcuLi8uLi9idXR0b24vbWluaS1idXR0b24uanMnO1xuXG5jb25zdCBpc0RhdGVJbnB1dCA9IDxUPihcbiAgZWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IFNiYkRhdGVJbnB1dEVsZW1lbnQ8VD4gfCBudWxsLFxuKTogZWxlbWVudCBpcyBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+ID0+IGVsZW1lbnQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1kYXRlLWlucHV0JztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgZGF0ZSBmcm9tIGEgYHNiYi1jYWxlbmRhcmAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1kYXRlcGlja2VyLXRvZ2dsZScpXG5jbGFzcyBTYmJEYXRlcGlja2VyVG9nZ2xlRWxlbWVudDxUID0gRGF0ZT5cbiAgZXh0ZW5kcyBTYmJOZWdhdGl2ZU1peGluKFNiYkh5ZHJhdGlvbk1peGluKExpdEVsZW1lbnQpKVxuICBpbXBsZW1lbnRzIFNiYkRhdGVwaWNrZXJDb250cm9sPFQ+XG57XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBEYXRlcGlja2VyIHJlZmVyZW5jZS5cbiAgICogQGludGVybmFsXG4gICAqIEBkZXByZWNhdGVkIFVzZSBwcm9wZXJ0eS9hdHRyaWJ1dGUgYGRhdGVwaWNrZXJgIGluc3RlYWQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkYXRlLXBpY2tlcicgfSlcbiAgcHVibGljIHNldCBkYXRlUGlja2VyKHZhbHVlOiBzdHJpbmcgfCBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwpIHtcbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgUHJvcGVydHkgZGF0ZVBpY2tlci9BdHRyaWJ1dGUgZGF0ZS1waWNrZXIgaXMgZGVwcmVjYXRlZC4gVXNlICdkYXRlcGlja2VyJyBpbnN0ZWFkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmRhdGVwaWNrZXIgPSB2YWx1ZSBhcyB1bmtub3duIGFzIFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbDtcbiAgfVxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBnZXQgZGF0ZVBpY2tlcigpOiBzdHJpbmcgfCBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXI7XG4gIH1cblxuICAvKiogRGF0ZXBpY2tlciByZWZlcmVuY2UuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGVwaWNrZXInIH0pXG4gIHB1YmxpYyBzZXQgZGF0ZXBpY2tlcih2YWx1ZTogU2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fZGF0ZXBpY2tlciA9XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKCh0aGlzLmdldFJvb3ROb2RlPy4oKSBhcyBQYXJlbnROb2RlKT8ucXVlcnlTZWxlY3Rvcj8uKGAjJHt2YWx1ZX1gKSA/PyBudWxsKVxuICAgICAgICA6IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGF0ZXBpY2tlcigpOiBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kYXRlcGlja2VyID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZXBpY2tlcj86IFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbDtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiBjYWxlbmRhciB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIG9wZW5pbmcuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciB2aWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX21pbjogVCB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX21heDogVCB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3JlbmRlckNhbGVuZGFyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXJFbGVtZW50ITogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRDb250cm9sbGVyKG5ldyBTYmJEYXRlcGlja2VyQXNzb2NpYXRpb25Db250cm9sQ29udHJvbGxlcih0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKClbMF0gPT09IHRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+ICh0aGlzLl9yZW5kZXJDYWxlbmRhciA9IHRydWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCdzYmItbWluaS1idXR0b24nKSEuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2xvdCB8fD0gJ3ByZWZpeCc7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcy5jbG9zZXN0Py4oJ1tkYXRhLWZvcm0tZmllbGRdJyk7XG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPVxuICAgICAgICAodGhpcy5kYXRlcGlja2VyLmlucHV0RWxlbWVudD8uZGlzYWJsZWQgfHwgdGhpcy5kYXRlcGlja2VyLmlucHV0RWxlbWVudD8ucmVhZE9ubHkpID8/IHRydWU7XG4gICAgICB0aGlzLl9taW4gPSB0aGlzLmRhdGVwaWNrZXIuaW5wdXRFbGVtZW50Py5taW47XG4gICAgICB0aGlzLl9tYXggPSB0aGlzLmRhdGVwaWNrZXIuaW5wdXRFbGVtZW50Py5tYXg7XG5cbiAgICAgIHRoaXMuX2NvbmZpZ3VyZUNhbGVuZGFyKCk7XG4gICAgICBpZiAodGhpcy5fY2FsZW5kYXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5zZWxlY3RlZCA9IHRoaXMuZGF0ZXBpY2tlci52YWx1ZUFzRGF0ZSA/PyBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLl9taW4gPSBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NhbGVuZGFyRWxlbWVudCB8fCAhdGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC53aWRlID0gdGhpcy5kYXRlcGlja2VyLndpZGU7XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50Lm5vdyA9IHRoaXMuX25vd09yTnVsbCgpO1xuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5kYXRlRmlsdGVyID0gdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25DYWxlbmRhcihjYWxlbmRhcjogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyRWxlbWVudCAmJiB0aGlzLl9jYWxlbmRhckVsZW1lbnQgPT09IGNhbGVuZGFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudCA9IGNhbGVuZGFyO1xuICAgIGlmICghKCd2YWx1ZUFzRGF0ZScgaW4gKHRoaXMuZGF0ZXBpY2tlciA/PyB7fSkpIHx8ICF0aGlzLl9jYWxlbmRhckVsZW1lbnQ/LnJlc2V0UG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50LnNlbGVjdGVkID0gdGhpcy5kYXRlcGlja2VyIS52YWx1ZUFzRGF0ZSA/PyBudWxsO1xuICAgIHRoaXMuX2NvbmZpZ3VyZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50LnJlc2V0UG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgX25vd09yTnVsbCgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXBpY2tlcj8uaGFzQ3VzdG9tTm93KCkgPyB0aGlzLmRhdGVwaWNrZXIubm93IDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1taW5pLWJ1dHRvblxuICAgICAgICBjbGFzcz1cInNiYi1kYXRlcGlja2VyLXRvZ2dsZV9fdHJpZ2dlclwiXG4gICAgICAgIGljb24tbmFtZT1cImNhbGVuZGFyLXNtYWxsXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke2kxOG5TaG93Q2FsZW5kYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9kaXNhYmxlZD0keyFpc1NlcnZlciAmJiAoIXRoaXMuZGF0ZXBpY2tlciB8fCB0aGlzLl9kaXNhYmxlZCl9XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIGlkPVwidHJpZ2dlclwiXG4gICAgICA+PC9zYmItbWluaS1idXR0b24+XG4gICAgICA8c2JiLXBvcG92ZXJcbiAgICAgICAgQHdpbGxPcGVuPSR7KCkgPT4gdGhpcy5fY2FsZW5kYXJFbGVtZW50LnJlc2V0UG9zaXRpb24oKX1cbiAgICAgICAgQGRpZE9wZW49JHsoKSA9PiB7XG4gICAgICAgICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgdHJpZ2dlcj1cInRyaWdnZXJcIlxuICAgICAgICBoaWRlLWNsb3NlLWJ1dHRvblxuICAgICAgPlxuICAgICAgICAke3RoaXMuX3JlbmRlckNhbGVuZGFyXG4gICAgICAgICAgPyBodG1sYDxzYmItY2FsZW5kYXJcbiAgICAgICAgICAgICAgLnZpZXc9JHt0aGlzLnZpZXd9XG4gICAgICAgICAgICAgIC5taW49JHt0aGlzLl9taW59XG4gICAgICAgICAgICAgIC5tYXg9JHt0aGlzLl9tYXh9XG4gICAgICAgICAgICAgIC5ub3c9JHt0aGlzLl9ub3dPck51bGwoKX1cbiAgICAgICAgICAgICAgP3dpZGU9JHt0aGlzLmRhdGVwaWNrZXI/LndpZGV9XG4gICAgICAgICAgICAgIC5kYXRlRmlsdGVyPSR7dGhpcy5kYXRlcGlja2VyPy5kYXRlRmlsdGVyID8/IG51bGx9XG4gICAgICAgICAgICAgIEBkYXRlU2VsZWN0ZWQ9JHsoZDogQ3VzdG9tRXZlbnQ8VD4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckVsZW1lbnQuc2VsZWN0ZWQgPSBkLmRldGFpbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZGF0ZXBpY2tlci5pbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5wdXQoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlQXNEYXRlID0gZC5kZXRhaWw7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBibHVyIGV2ZW50IHdoZW4gdmFsdWUgaXMgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IHRvIG5vdGlmeVxuICAgICAgICAgICAgICAgICAgICAvLyBmcmFtZXdvcmtzIHRoYXQgcmVseSBvbiB0aGF0IGV2ZW50IHRvIHVwZGF0ZSBmb3JtIHN0YXR1cy5cbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2JsdXInLCB7IGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci52YWx1ZUFzRGF0ZSA9IGQuZGV0YWlsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNhbGVuZGFyPzogRWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9hc3NpZ25DYWxlbmRhcihjYWxlbmRhciBhcyBTYmJDYWxlbmRhckVsZW1lbnQ8VD4pLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L3NiYi1wb3BvdmVyPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLXRvZ2dsZSc6IFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
292
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLXRvZ2dsZS9kYXRlcGlja2VyLXRvZ2dsZS5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIGlzU2VydmVyLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBTYmJDYWxlbmRhckVsZW1lbnQgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5qcyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBpMThuU2hvd0NhbGVuZGFyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluLCBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZGF0ZS1pbnB1dC5qcyc7XG5pbXBvcnQgeyBTYmJEYXRlcGlja2VyQXNzb2NpYXRpb25Db250cm9sQ29udHJvbGxlciwgdHlwZSBTYmJEYXRlcGlja2VyQ29udHJvbCB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGVwaWNrZXItdG9nZ2xlLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vY2FsZW5kYXIuanMnO1xuaW1wb3J0ICcuLi8uLi9wb3BvdmVyL3BvcG92ZXIuanMnO1xuaW1wb3J0ICcuLi8uLi9idXR0b24vbWluaS1idXR0b24uanMnO1xuXG5jb25zdCBpc0RhdGVJbnB1dCA9IDxUPihcbiAgZWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IFNiYkRhdGVJbnB1dEVsZW1lbnQ8VD4gfCBudWxsLFxuKTogZWxlbWVudCBpcyBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+ID0+IGVsZW1lbnQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1kYXRlLWlucHV0JztcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi1kYXRlcGlja2VyYCwgaXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgZGF0ZSBmcm9tIGEgYHNiYi1jYWxlbmRhcmAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1kYXRlcGlja2VyLXRvZ2dsZScpXG5jbGFzcyBTYmJEYXRlcGlja2VyVG9nZ2xlRWxlbWVudDxUID0gRGF0ZT5cbiAgZXh0ZW5kcyBTYmJOZWdhdGl2ZU1peGluKFNiYkh5ZHJhdGlvbk1peGluKExpdEVsZW1lbnQpKVxuICBpbXBsZW1lbnRzIFNiYkRhdGVwaWNrZXJDb250cm9sPFQ+XG57XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBEYXRlcGlja2VyIHJlZmVyZW5jZS5cbiAgICogQGludGVybmFsXG4gICAqIEBkZXByZWNhdGVkIFVzZSBwcm9wZXJ0eS9hdHRyaWJ1dGUgYGRhdGVwaWNrZXJgIGluc3RlYWQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkYXRlLXBpY2tlcicgfSlcbiAgcHVibGljIHNldCBkYXRlUGlja2VyKHZhbHVlOiBzdHJpbmcgfCBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwpIHtcbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgUHJvcGVydHkgZGF0ZVBpY2tlci9BdHRyaWJ1dGUgZGF0ZS1waWNrZXIgaXMgZGVwcmVjYXRlZC4gVXNlICdkYXRlcGlja2VyJyBpbnN0ZWFkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmRhdGVwaWNrZXIgPSB2YWx1ZSBhcyB1bmtub3duIGFzIFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbDtcbiAgfVxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBnZXQgZGF0ZVBpY2tlcigpOiBzdHJpbmcgfCBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXI7XG4gIH1cblxuICAvKiogRGF0ZXBpY2tlciByZWZlcmVuY2UuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGVwaWNrZXInIH0pXG4gIHB1YmxpYyBzZXQgZGF0ZXBpY2tlcih2YWx1ZTogU2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fZGF0ZXBpY2tlciA9XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKCh0aGlzLmdldFJvb3ROb2RlPy4oKSBhcyBQYXJlbnROb2RlKT8ucXVlcnlTZWxlY3Rvcj8uKGAjJHt2YWx1ZX1gKSA/PyBudWxsKVxuICAgICAgICA6IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGF0ZXBpY2tlcigpOiBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kYXRlcGlja2VyID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZXBpY2tlcj86IFNiYkRhdGVwaWNrZXJFbGVtZW50PFQ+IHwgbnVsbDtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiBjYWxlbmRhciB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIG9wZW5pbmcuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciB2aWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX21pbjogVCB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX21heDogVCB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3JlbmRlckNhbGVuZGFyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXJFbGVtZW50ITogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRDb250cm9sbGVyKG5ldyBTYmJEYXRlcGlja2VyQXNzb2NpYXRpb25Db250cm9sQ29udHJvbGxlcih0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKClbMF0gPT09IHRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+ICh0aGlzLl9yZW5kZXJDYWxlbmRhciA9IHRydWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCdzYmItbWluaS1idXR0b24nKSEuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2xvdCB8fD0gJ3ByZWZpeCc7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcy5jbG9zZXN0Py4oJ1tkYXRhLWZvcm0tZmllbGRdJyk7XG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPVxuICAgICAgICAodGhpcy5kYXRlcGlja2VyLmlucHV0RWxlbWVudD8uZGlzYWJsZWQgfHwgdGhpcy5kYXRlcGlja2VyLmlucHV0RWxlbWVudD8ucmVhZE9ubHkpID8/IHRydWU7XG4gICAgICB0aGlzLl9taW4gPSB0aGlzLmRhdGVwaWNrZXIuaW5wdXRFbGVtZW50Py5taW47XG4gICAgICB0aGlzLl9tYXggPSB0aGlzLmRhdGVwaWNrZXIuaW5wdXRFbGVtZW50Py5tYXg7XG5cbiAgICAgIHRoaXMuX2NvbmZpZ3VyZUNhbGVuZGFyKCk7XG4gICAgICBpZiAodGhpcy5fY2FsZW5kYXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5zZWxlY3RlZCA9IHRoaXMuZGF0ZXBpY2tlci52YWx1ZUFzRGF0ZSA/PyBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLl9taW4gPSBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NhbGVuZGFyRWxlbWVudCB8fCAhdGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC53aWRlID0gdGhpcy5kYXRlcGlja2VyLndpZGU7XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50Lm5vdyA9IHRoaXMuX25vd09yTnVsbCgpO1xuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5kYXRlRmlsdGVyID0gdGhpcy5kYXRlcGlja2VyLmRhdGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25DYWxlbmRhcihjYWxlbmRhcjogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyRWxlbWVudCAmJiB0aGlzLl9jYWxlbmRhckVsZW1lbnQgPT09IGNhbGVuZGFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudCA9IGNhbGVuZGFyO1xuICAgIGlmICghKCd2YWx1ZUFzRGF0ZScgaW4gKHRoaXMuZGF0ZXBpY2tlciA/PyB7fSkpIHx8ICF0aGlzLl9jYWxlbmRhckVsZW1lbnQ/LnJlc2V0UG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50LnNlbGVjdGVkID0gdGhpcy5kYXRlcGlja2VyIS52YWx1ZUFzRGF0ZSA/PyBudWxsO1xuICAgIHRoaXMuX2NvbmZpZ3VyZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5fY2FsZW5kYXJFbGVtZW50LnJlc2V0UG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgX25vd09yTnVsbCgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXBpY2tlcj8uaGFzQ3VzdG9tTm93KCkgPyB0aGlzLmRhdGVwaWNrZXIubm93IDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1taW5pLWJ1dHRvblxuICAgICAgICBjbGFzcz1cInNiYi1kYXRlcGlja2VyLXRvZ2dsZV9fdHJpZ2dlclwiXG4gICAgICAgIGljb24tbmFtZT1cImNhbGVuZGFyLXNtYWxsXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke2kxOG5TaG93Q2FsZW5kYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9kaXNhYmxlZD0keyFpc1NlcnZlciAmJiAoIXRoaXMuZGF0ZXBpY2tlciB8fCB0aGlzLl9kaXNhYmxlZCl9XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIGlkPVwidHJpZ2dlclwiXG4gICAgICA+PC9zYmItbWluaS1idXR0b24+XG4gICAgICA8c2JiLXBvcG92ZXJcbiAgICAgICAgQHdpbGxPcGVuPSR7KCkgPT4gdGhpcy5fY2FsZW5kYXJFbGVtZW50LnJlc2V0UG9zaXRpb24oKX1cbiAgICAgICAgQGRpZE9wZW49JHsoKSA9PiB7XG4gICAgICAgICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgdHJpZ2dlcj1cInRyaWdnZXJcIlxuICAgICAgICBoaWRlLWNsb3NlLWJ1dHRvblxuICAgICAgPlxuICAgICAgICAke3RoaXMuX3JlbmRlckNhbGVuZGFyXG4gICAgICAgICAgPyBodG1sYDxzYmItY2FsZW5kYXJcbiAgICAgICAgICAgICAgLnZpZXc9JHt0aGlzLnZpZXd9XG4gICAgICAgICAgICAgIC5taW49JHt0aGlzLl9taW59XG4gICAgICAgICAgICAgIC5tYXg9JHt0aGlzLl9tYXh9XG4gICAgICAgICAgICAgIC5ub3c9JHt0aGlzLl9ub3dPck51bGwoKX1cbiAgICAgICAgICAgICAgP3dpZGU9JHt0aGlzLmRhdGVwaWNrZXI/LndpZGV9XG4gICAgICAgICAgICAgIC5kYXRlRmlsdGVyPSR7dGhpcy5kYXRlcGlja2VyPy5kYXRlRmlsdGVyID8/IG51bGx9XG4gICAgICAgICAgICAgIEBkYXRlU2VsZWN0ZWQ9JHsoZDogQ3VzdG9tRXZlbnQ8VD4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckVsZW1lbnQuc2VsZWN0ZWQgPSBkLmRldGFpbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZGF0ZXBpY2tlci5pbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5wdXQoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlQXNEYXRlID0gZC5kZXRhaWw7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBibHVyIGV2ZW50IHdoZW4gdmFsdWUgaXMgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IHRvIG5vdGlmeVxuICAgICAgICAgICAgICAgICAgICAvLyBmcmFtZXdvcmtzIHRoYXQgcmVseSBvbiB0aGF0IGV2ZW50IHRvIHVwZGF0ZSBmb3JtIHN0YXR1cy5cbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2JsdXInLCB7IGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci52YWx1ZUFzRGF0ZSA9IGQuZGV0YWlsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNhbGVuZGFyPzogRWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9hc3NpZ25DYWxlbmRhcihjYWxlbmRhciBhcyBTYmJDYWxlbmRhckVsZW1lbnQ8VD4pLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L3NiYi1wb3BvdmVyPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1kYXRlcGlja2VyLXRvZ2dsZSc6IFNiYkRhdGVwaWNrZXJUb2dnbGVFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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