@sbb-esta/lyne-elements 1.2.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/autocomplete/autocomplete-base-element.d.ts +93 -0
  2. package/autocomplete/autocomplete-base-element.d.ts.map +1 -0
  3. package/autocomplete/autocomplete.d.ts +13 -86
  4. package/autocomplete/autocomplete.d.ts.map +1 -1
  5. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +45 -0
  6. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  7. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +33 -0
  8. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -0
  9. package/autocomplete-grid/autocomplete-grid-button.d.ts +2 -0
  10. package/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -0
  11. package/autocomplete-grid/autocomplete-grid-button.js +66 -0
  12. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +17 -0
  13. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -0
  14. package/autocomplete-grid/autocomplete-grid-cell.d.ts +2 -0
  15. package/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -0
  16. package/autocomplete-grid/autocomplete-grid-cell.js +28 -0
  17. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +21 -0
  18. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -0
  19. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +2 -0
  20. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +1 -0
  21. package/autocomplete-grid/autocomplete-grid-optgroup.d.ts +2 -0
  22. package/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -0
  23. package/autocomplete-grid/autocomplete-grid-optgroup.js +37 -0
  24. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +40 -0
  25. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -0
  26. package/autocomplete-grid/autocomplete-grid-option.d.ts +2 -0
  27. package/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -0
  28. package/autocomplete-grid/autocomplete-grid-option.js +67 -0
  29. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +18 -0
  30. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -0
  31. package/autocomplete-grid/autocomplete-grid-row.d.ts +2 -0
  32. package/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -0
  33. package/autocomplete-grid/autocomplete-grid-row.js +31 -0
  34. package/autocomplete-grid/autocomplete-grid.d.ts +2 -0
  35. package/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  36. package/autocomplete-grid/autocomplete-grid.js +139 -0
  37. package/autocomplete-grid.d.ts +7 -0
  38. package/autocomplete-grid.d.ts.map +1 -0
  39. package/autocomplete-grid.js +6 -0
  40. package/autocomplete.d.ts +1 -0
  41. package/autocomplete.d.ts.map +1 -1
  42. package/autocomplete.js +162 -145
  43. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  44. package/button/common/button-common.d.ts.map +1 -1
  45. package/button/common.js +20 -20
  46. package/button/mini-button/mini-button-base-element.d.ts +9 -0
  47. package/button/mini-button/mini-button-base-element.d.ts.map +1 -0
  48. package/button/mini-button/mini-button.d.ts +3 -5
  49. package/button/mini-button/mini-button.d.ts.map +1 -1
  50. package/button/mini-button.d.ts +1 -0
  51. package/button/mini-button.d.ts.map +1 -1
  52. package/button/mini-button.js +27 -19
  53. package/calendar/calendar.d.ts.map +1 -1
  54. package/calendar.js +22 -20
  55. package/checkbox/checkbox/checkbox.d.ts +0 -1
  56. package/checkbox/checkbox/checkbox.d.ts.map +1 -1
  57. package/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  58. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  59. package/checkbox/checkbox-group.js +5 -3
  60. package/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  61. package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  62. package/checkbox/checkbox-panel.js +12 -11
  63. package/checkbox/checkbox.js +20 -19
  64. package/checkbox/common.js +13 -13
  65. package/container/container.js +3 -3
  66. package/core/datetime/date-adapter.d.ts +23 -13
  67. package/core/datetime/date-adapter.d.ts.map +1 -1
  68. package/core/datetime/native-date-adapter.d.ts +0 -1
  69. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  70. package/core/datetime.js +23 -23
  71. package/core/decorators/host-attributes.d.ts +1 -1
  72. package/core/decorators/slot-state.d.ts +18 -0
  73. package/core/decorators/slot-state.d.ts.map +1 -0
  74. package/core/decorators.d.ts +1 -0
  75. package/core/decorators.d.ts.map +1 -1
  76. package/core/decorators.js +15 -9
  77. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  78. package/core/mixins.js +3 -1
  79. package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  80. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  81. package/core/overlay.js +2 -2
  82. package/core/styles/core.scss +1 -0
  83. package/core/styles/mixins/buttons.scss +28 -56
  84. package/core/styles/mixins/helpers.scss +1 -0
  85. package/core/styles/mixins/pearl-chain-bullet.scss +1 -1
  86. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +1 -0
  87. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +2 -1
  88. package/core.css +3 -1
  89. package/custom-elements.json +13640 -8731
  90. package/datepicker/common/datepicker-button.d.ts +5 -5
  91. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  92. package/datepicker/common.js +21 -20
  93. package/datepicker/datepicker/datepicker.d.ts +55 -38
  94. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  95. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -1
  96. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  97. package/datepicker/datepicker-next-day.js +18 -18
  98. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -1
  99. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  100. package/datepicker/datepicker-previous-day.js +14 -14
  101. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +1 -1
  102. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  103. package/datepicker/datepicker-toggle.js +25 -23
  104. package/datepicker/datepicker.js +147 -181
  105. package/development/autocomplete/autocomplete-base-element.d.ts +93 -0
  106. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -0
  107. package/development/autocomplete/autocomplete.d.ts +13 -86
  108. package/development/autocomplete/autocomplete.d.ts.map +1 -1
  109. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +45 -0
  110. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  111. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +33 -0
  112. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -0
  113. package/development/autocomplete-grid/autocomplete-grid-button.d.ts +2 -0
  114. package/development/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -0
  115. package/development/autocomplete-grid/autocomplete-grid-button.js +224 -0
  116. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +17 -0
  117. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -0
  118. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts +2 -0
  119. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -0
  120. package/development/autocomplete-grid/autocomplete-grid-cell.js +67 -0
  121. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +21 -0
  122. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -0
  123. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +2 -0
  124. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +1 -0
  125. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts +2 -0
  126. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -0
  127. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +45 -0
  128. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +40 -0
  129. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -0
  130. package/development/autocomplete-grid/autocomplete-grid-option.d.ts +2 -0
  131. package/development/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -0
  132. package/development/autocomplete-grid/autocomplete-grid-option.js +174 -0
  133. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +18 -0
  134. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -0
  135. package/development/autocomplete-grid/autocomplete-grid-row.d.ts +2 -0
  136. package/development/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -0
  137. package/development/autocomplete-grid/autocomplete-grid-row.js +143 -0
  138. package/development/autocomplete-grid/autocomplete-grid.d.ts +2 -0
  139. package/development/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  140. package/development/autocomplete-grid/autocomplete-grid.js +185 -0
  141. package/development/autocomplete-grid.d.ts +7 -0
  142. package/development/autocomplete-grid.d.ts.map +1 -0
  143. package/development/autocomplete-grid.js +7 -0
  144. package/development/autocomplete.d.ts +1 -0
  145. package/development/autocomplete.d.ts.map +1 -1
  146. package/development/autocomplete.js +168 -143
  147. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
  148. package/development/breadcrumb/breadcrumb-group.js +1 -1
  149. package/development/button/common/button-common.d.ts.map +1 -1
  150. package/development/button/common.js +30 -25
  151. package/development/button/mini-button/mini-button-base-element.d.ts +9 -0
  152. package/development/button/mini-button/mini-button-base-element.d.ts.map +1 -0
  153. package/development/button/mini-button/mini-button.d.ts +3 -5
  154. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  155. package/development/button/mini-button.d.ts +1 -0
  156. package/development/button/mini-button.d.ts.map +1 -1
  157. package/development/button/mini-button.js +45 -67
  158. package/development/calendar/calendar.d.ts.map +1 -1
  159. package/development/calendar.js +4 -2
  160. package/development/checkbox/checkbox/checkbox.d.ts +0 -1
  161. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -1
  162. package/development/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  163. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  164. package/development/checkbox/checkbox-group.js +6 -5
  165. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  166. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  167. package/development/checkbox/checkbox-panel.js +5 -5
  168. package/development/checkbox/checkbox.js +11 -5
  169. package/development/checkbox/common.js +1 -3
  170. package/development/container/container.js +2 -1
  171. package/development/core/datetime/date-adapter.d.ts +23 -13
  172. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  173. package/development/core/datetime/native-date-adapter.d.ts +0 -1
  174. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  175. package/development/core/datetime.js +28 -26
  176. package/development/core/decorators/host-attributes.d.ts +1 -1
  177. package/development/core/decorators/slot-state.d.ts +18 -0
  178. package/development/core/decorators/slot-state.d.ts.map +1 -0
  179. package/development/core/decorators.d.ts +1 -0
  180. package/development/core/decorators.d.ts.map +1 -1
  181. package/development/core/decorators.js +11 -2
  182. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  183. package/development/core/mixins.js +4 -2
  184. package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  185. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  186. package/development/core/overlay.js +3 -3
  187. package/development/datepicker/common/datepicker-button.d.ts +5 -5
  188. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  189. package/development/datepicker/common.js +10 -9
  190. package/development/datepicker/datepicker/datepicker.d.ts +55 -38
  191. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  192. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -1
  193. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  194. package/development/datepicker/datepicker-next-day.js +21 -60
  195. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -1
  196. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  197. package/development/datepicker/datepicker-previous-day.js +21 -60
  198. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +1 -1
  199. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  200. package/development/datepicker/datepicker-toggle.js +16 -10
  201. package/development/datepicker/datepicker.js +134 -159
  202. package/development/dialog/dialog.js +1 -1
  203. package/development/file-selector/file-selector.d.ts +0 -1
  204. package/development/file-selector/file-selector.d.ts.map +1 -1
  205. package/development/file-selector.js +6 -5
  206. package/development/form-field/form-field/form-field.d.ts +1 -2
  207. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  208. package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  209. package/development/form-field/form-field-clear.js +22 -57
  210. package/development/form-field/form-field.js +10 -9
  211. package/development/icon/icon-base.d.ts.map +1 -1
  212. package/development/icon/icon.d.ts.map +1 -1
  213. package/development/icon.js +1 -1
  214. package/development/image/image.d.ts +1 -0
  215. package/development/image/image.d.ts.map +1 -1
  216. package/development/image.js +10 -4
  217. package/development/link/common/link-common.d.ts.map +1 -1
  218. package/development/link/common.js +6 -7
  219. package/development/link-list/link-list.d.ts +0 -1
  220. package/development/link-list/link-list.d.ts.map +1 -1
  221. package/development/link-list.js +5 -5
  222. package/development/map-container.js +15 -14
  223. package/development/navigation/navigation-list/navigation-list.d.ts +0 -1
  224. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  225. package/development/navigation/navigation-list.js +5 -5
  226. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  227. package/development/navigation/navigation-marker.js +1 -1
  228. package/development/navigation/navigation-section/navigation-section.d.ts +0 -1
  229. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  230. package/development/navigation/navigation-section.js +6 -6
  231. package/development/notification/notification.d.ts +5 -16
  232. package/development/notification/notification.d.ts.map +1 -1
  233. package/development/notification.js +8 -9
  234. package/development/option/optgroup/optgroup-base-element.d.ts +28 -0
  235. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -0
  236. package/development/option/optgroup/optgroup.d.ts +7 -20
  237. package/development/option/optgroup/optgroup.d.ts.map +1 -1
  238. package/development/option/optgroup.d.ts +1 -0
  239. package/development/option/optgroup.d.ts.map +1 -1
  240. package/development/option/optgroup.js +74 -49
  241. package/development/option/option/option-base-element.d.ts +69 -0
  242. package/development/option/option/option-base-element.d.ts.map +1 -0
  243. package/development/option/option/option.d.ts +14 -57
  244. package/development/option/option/option.d.ts.map +1 -1
  245. package/development/option/option.d.ts +1 -0
  246. package/development/option/option.d.ts.map +1 -1
  247. package/development/option/option.js +267 -220
  248. package/development/popover/popover/popover.d.ts +3 -1
  249. package/development/popover/popover/popover.d.ts.map +1 -1
  250. package/development/popover/popover-trigger.js +14 -49
  251. package/development/popover/popover.js +11 -4
  252. package/development/radio-button/common/radio-button-common.d.ts +1 -1
  253. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  254. package/development/radio-button/common.js +13 -12
  255. package/development/radio-button/radio-button/radio-button.d.ts +7 -1
  256. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -1
  257. package/development/radio-button/radio-button-group/radio-button-group.d.ts +1 -2
  258. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  259. package/development/radio-button/radio-button-group.js +6 -6
  260. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +7 -1
  261. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  262. package/development/radio-button/radio-button-panel.js +17 -6
  263. package/development/radio-button/radio-button.js +17 -6
  264. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  265. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  266. package/development/selection-expansion-panel.js +6 -5
  267. package/development/skiplink-list/skiplink-list.d.ts +1 -1
  268. package/development/skiplink-list/skiplink-list.d.ts.map +1 -1
  269. package/development/skiplink-list.js +5 -5
  270. package/development/status/status.d.ts +0 -1
  271. package/development/status/status.d.ts.map +1 -1
  272. package/development/status.js +5 -5
  273. package/development/stepper/stepper/stepper.d.ts +3 -1
  274. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  275. package/development/stepper/stepper.js +3 -2
  276. package/development/tabs/tab-group/tab-group.d.ts +3 -1
  277. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  278. package/development/tabs/tab-group.js +4 -10
  279. package/development/tabs/tab-label/tab-label.d.ts +0 -1
  280. package/development/tabs/tab-label/tab-label.d.ts.map +1 -1
  281. package/development/tabs/tab-label.js +5 -5
  282. package/development/tabs/tab.js +10 -2
  283. package/development/tag/tag/tag.d.ts +0 -1
  284. package/development/tag/tag/tag.d.ts.map +1 -1
  285. package/development/tag/tag-group.js +1 -1
  286. package/development/tag/tag.js +6 -5
  287. package/development/teaser/teaser.d.ts +0 -1
  288. package/development/teaser/teaser.d.ts.map +1 -1
  289. package/development/teaser.js +5 -5
  290. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
  291. package/development/timetable-occupancy-icon.js +3 -6
  292. package/development/toast/toast.d.ts +1 -2
  293. package/development/toast/toast.d.ts.map +1 -1
  294. package/development/toast.js +10 -8
  295. package/development/toggle/toggle-option/toggle-option.d.ts +0 -1
  296. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  297. package/development/toggle/toggle-option.js +6 -6
  298. package/development/toggle/toggle.js +1 -1
  299. package/development/toggle-check/toggle-check.d.ts +0 -1
  300. package/development/toggle-check/toggle-check.d.ts.map +1 -1
  301. package/development/toggle-check.js +5 -5
  302. package/dialog/dialog.js +1 -1
  303. package/file-selector/file-selector.d.ts +0 -1
  304. package/file-selector/file-selector.d.ts.map +1 -1
  305. package/file-selector.js +17 -15
  306. package/form-field/form-field/form-field.d.ts +1 -2
  307. package/form-field/form-field/form-field.d.ts.map +1 -1
  308. package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
  309. package/form-field/form-field-clear.js +17 -18
  310. package/form-field/form-field.js +18 -16
  311. package/icon/icon-base.d.ts.map +1 -1
  312. package/icon/icon.d.ts.map +1 -1
  313. package/image/image.d.ts +1 -0
  314. package/image/image.d.ts.map +1 -1
  315. package/image.js +24 -24
  316. package/index.d.ts +12 -0
  317. package/index.js +12 -0
  318. package/link/common/link-common.d.ts.map +1 -1
  319. package/link/common.js +9 -9
  320. package/link-list/link-list.d.ts +0 -1
  321. package/link-list/link-list.d.ts.map +1 -1
  322. package/link-list.js +8 -7
  323. package/map-container.js +8 -8
  324. package/navigation/navigation-list/navigation-list.d.ts +0 -1
  325. package/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  326. package/navigation/navigation-list.js +9 -8
  327. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  328. package/navigation/navigation-section/navigation-section.d.ts +0 -1
  329. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  330. package/navigation/navigation-section.js +10 -9
  331. package/notification/notification.d.ts +5 -16
  332. package/notification/notification.d.ts.map +1 -1
  333. package/notification.js +9 -9
  334. package/option/optgroup/optgroup-base-element.d.ts +28 -0
  335. package/option/optgroup/optgroup-base-element.d.ts.map +1 -0
  336. package/option/optgroup/optgroup.d.ts +7 -20
  337. package/option/optgroup/optgroup.d.ts.map +1 -1
  338. package/option/optgroup.d.ts +1 -0
  339. package/option/optgroup.d.ts.map +1 -1
  340. package/option/optgroup.js +80 -60
  341. package/option/option/option-base-element.d.ts +69 -0
  342. package/option/option/option-base-element.d.ts.map +1 -0
  343. package/option/option/option.d.ts +14 -57
  344. package/option/option/option.d.ts.map +1 -1
  345. package/option/option.d.ts +1 -0
  346. package/option/option.d.ts.map +1 -1
  347. package/option/option.js +184 -142
  348. package/package.json +36 -1
  349. package/popover/popover/popover.d.ts +3 -1
  350. package/popover/popover/popover.d.ts.map +1 -1
  351. package/popover/popover-trigger.js +13 -13
  352. package/popover/popover.js +55 -48
  353. package/radio-button/common/radio-button-common.d.ts +1 -1
  354. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  355. package/radio-button/common.js +6 -15
  356. package/radio-button/radio-button/radio-button.d.ts +7 -1
  357. package/radio-button/radio-button/radio-button.d.ts.map +1 -1
  358. package/radio-button/radio-button-group/radio-button-group.d.ts +1 -2
  359. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  360. package/radio-button/radio-button-group.js +7 -6
  361. package/radio-button/radio-button-panel/radio-button-panel.d.ts +7 -1
  362. package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  363. package/radio-button/radio-button-panel.js +33 -22
  364. package/radio-button/radio-button.js +30 -19
  365. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  366. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  367. package/selection-expansion-panel.js +15 -13
  368. package/skiplink-list/skiplink-list.d.ts +1 -1
  369. package/skiplink-list/skiplink-list.d.ts.map +1 -1
  370. package/skiplink-list.js +4 -3
  371. package/standard-theme.css +3 -1
  372. package/status/status.d.ts +0 -1
  373. package/status/status.d.ts.map +1 -1
  374. package/status.js +9 -8
  375. package/stepper/stepper/stepper.d.ts +3 -1
  376. package/stepper/stepper/stepper.d.ts.map +1 -1
  377. package/stepper/stepper.js +7 -6
  378. package/tabs/tab-group/tab-group.d.ts +3 -1
  379. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  380. package/tabs/tab-group.js +25 -24
  381. package/tabs/tab-label/tab-label.d.ts +0 -1
  382. package/tabs/tab-label/tab-label.d.ts.map +1 -1
  383. package/tabs/tab-label.js +4 -3
  384. package/tabs/tab.js +10 -10
  385. package/tag/tag/tag.d.ts +0 -1
  386. package/tag/tag/tag.d.ts.map +1 -1
  387. package/tag/tag.js +6 -4
  388. package/teaser/teaser.d.ts +0 -1
  389. package/teaser/teaser.d.ts.map +1 -1
  390. package/teaser.js +4 -3
  391. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
  392. package/timetable-occupancy-icon.js +22 -24
  393. package/toast/toast.d.ts +1 -2
  394. package/toast/toast.d.ts.map +1 -1
  395. package/toast.js +15 -12
  396. package/toggle/toggle-option/toggle-option.d.ts +0 -1
  397. package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  398. package/toggle/toggle-option.js +12 -11
  399. package/toggle-check/toggle-check.d.ts +0 -1
  400. package/toggle-check/toggle-check.d.ts.map +1 -1
  401. package/toggle-check.js +4 -3
@@ -1,4 +1,5 @@
1
1
  import { isServer } from "lit";
2
+ import { SbbSlotStateController } from "./controllers.js";
2
3
  function applyAttributes(instance, attributes) {
3
4
  for (const [name, value] of Object.entries(attributes)) {
4
5
  if (value) {
@@ -24,7 +25,15 @@ const hostAttributes = (attributes) => (target) => target.addInitializer((instan
24
25
  });
25
26
  }
26
27
  });
28
+ const slotState = () => (target) => {
29
+ if (!isServer) {
30
+ target.addInitializer(
31
+ (instance) => new SbbSlotStateController(instance)
32
+ );
33
+ }
34
+ };
27
35
  export {
28
- hostAttributes
36
+ hostAttributes,
37
+ slotState
29
38
  };
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvZGVjb3JhdG9ycy9ob3N0LWF0dHJpYnV0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTZXJ2ZXIsIHR5cGUgUmVhY3RpdmVFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vbWl4aW5zLmpzJztcblxuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVzKFxuICBpbnN0YW5jZTogUmVhY3RpdmVFbGVtZW50LFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPixcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGluc3RhbmNlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnRvZ2dsZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZ2l2ZW4gYXR0cmlidXRlcyB0byB0aGUgcmVsYXRlZCBlbGVtZW50LlxuICogSWYgYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCB0aGUgYXR0cmlidXRlIHdpbGwgYmUgc2V0XG4gKiB3aXRob3V0IHZhbHVlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogQGhvc3RBdHRyaWJ1dGVzKHtcbiAqICAgcm9sZTogJ3JlZ2lvbidcbiAqIH0pXG4gKiBAY3VzdG9tRWxlbWVudCgnbXktZWxlbWVudClcbiAqIGV4cG9ydCBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAqICAgLi4uXG4gKiB9XG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgQSByZWNvcmQgb2YgYXR0cmlidXRlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvc3RBdHRyaWJ1dGVzID1cbiAgKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KSA9PiAodGFyZ2V0OiBBYnN0cmFjdENvbnN0cnVjdG9yPFJlYWN0aXZlRWxlbWVudD4pID0+XG4gICAgKHRhcmdldCBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KS5hZGRJbml0aWFsaXplcigoaW5zdGFuY2U6IFJlYWN0aXZlRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICAgIGFwcGx5QXR0cmlidXRlcyhpbnN0YW5jZSwgYXR0cmlidXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCBpcyBub3QgYWxsb3dlZCB0byBzZXQgYXR0cmlidXRlcyBkdXJpbmcgY29uc3RydWN0b3IgcGhhc2UuIER1ZSB0byB0aGlzIHdlIHVzZSBhXG4gICAgICAgIC8vIGNvbnRyb2xsZXIgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIGR1cmluZyBsaXQgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG4gICAgICAgIC8vIEhvc3RDb25uZWN0ZWQgb3IgaG9zdFVwZGF0ZSBjYW4gYmUgY2FsbGVkIGVpdGhlciBvcmRlci4gRHVlIHRvIHRoYXQgd2UgYXBwbHkgaW4gdGhlXG4gICAgICAgIC8vIGZpcnN0IG9jY3VycmVuY2UgYW5kIGRpcmVjdGx5IHJlbW92ZSB0aGUgY29udHJvbGxlciwgc28gaXQncyBvbmx5IGNhbGxlZCBvbmNlLlxuICAgICAgICBpbnN0YW5jZS5hZGRDb250cm9sbGVyKHtcbiAgICAgICAgICBob3N0Q29ubmVjdGVkKCkge1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKGluc3RhbmNlLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUNvbnRyb2xsZXIodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0VXBkYXRlKCkge1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKGluc3RhbmNlLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUNvbnRyb2xsZXIodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUlBLFNBQVMsZ0JBQ1AsVUFDQSxZQUNNO0FBQ04sYUFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFDdEQsUUFBSSxPQUFPO0FBQ0EsZUFBQSxhQUFhLE1BQU0sS0FBSztBQUFBLElBQUEsT0FDNUI7QUFDSSxlQUFBLGdCQUFnQixNQUFNLFVBQVUsSUFBSTtBQUFBLElBQy9DO0FBQUEsRUFDRjtBQUNGO0FBbUJhLE1BQUEsaUJBQ1gsQ0FBQyxlQUE4QyxDQUFDLFdBQzdDLE9BQWtDLGVBQWUsQ0FBQyxhQUE4QjtBQUMvRSxNQUFJLFVBQVU7QUFDWixvQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBQSxPQUMvQjtBQUtMLGFBQVMsY0FBYztBQUFBLE1BQ3JCLGdCQUFnQjtBQUNkLHdCQUFnQixVQUFVLFVBQVU7QUFDcEMsaUJBQVMsaUJBQWlCLElBQUk7QUFBQSxNQUNoQztBQUFBLE1BQ0EsYUFBYTtBQUNYLHdCQUFnQixVQUFVLFVBQVU7QUFDcEMsaUJBQVMsaUJBQWlCLElBQUk7QUFBQSxNQUNoQztBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQ0g7QUFDRixDQUFDOyJ9
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvZGVjb3JhdG9ycy9ob3N0LWF0dHJpYnV0ZXMudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzL3Nsb3Qtc3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTZXJ2ZXIsIHR5cGUgUmVhY3RpdmVFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vbWl4aW5zLmpzJztcblxuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVzKFxuICBpbnN0YW5jZTogUmVhY3RpdmVFbGVtZW50LFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPixcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGluc3RhbmNlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnRvZ2dsZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZ2l2ZW4gYXR0cmlidXRlcyB0byB0aGUgcmVsYXRlZCBlbGVtZW50LlxuICogSWYgYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCB0aGUgYXR0cmlidXRlIHdpbGwgYmUgc2V0XG4gKiB3aXRob3V0IHZhbHVlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogQGN1c3RvbUVsZW1lbnQoJ215LWVsZW1lbnQpXG4gKiBAaG9zdEF0dHJpYnV0ZXMoe1xuICogICByb2xlOiAncmVnaW9uJ1xuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAqICAgLi4uXG4gKiB9XG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgQSByZWNvcmQgb2YgYXR0cmlidXRlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvc3RBdHRyaWJ1dGVzID1cbiAgKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KSA9PiAodGFyZ2V0OiBBYnN0cmFjdENvbnN0cnVjdG9yPFJlYWN0aXZlRWxlbWVudD4pID0+XG4gICAgKHRhcmdldCBhcyB0eXBlb2YgUmVhY3RpdmVFbGVtZW50KS5hZGRJbml0aWFsaXplcigoaW5zdGFuY2U6IFJlYWN0aXZlRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICAgIGFwcGx5QXR0cmlidXRlcyhpbnN0YW5jZSwgYXR0cmlidXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCBpcyBub3QgYWxsb3dlZCB0byBzZXQgYXR0cmlidXRlcyBkdXJpbmcgY29uc3RydWN0b3IgcGhhc2UuIER1ZSB0byB0aGlzIHdlIHVzZSBhXG4gICAgICAgIC8vIGNvbnRyb2xsZXIgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIGR1cmluZyBsaXQgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG4gICAgICAgIC8vIEhvc3RDb25uZWN0ZWQgb3IgaG9zdFVwZGF0ZSBjYW4gYmUgY2FsbGVkIGVpdGhlciBvcmRlci4gRHVlIHRvIHRoYXQgd2UgYXBwbHkgaW4gdGhlXG4gICAgICAgIC8vIGZpcnN0IG9jY3VycmVuY2UgYW5kIGRpcmVjdGx5IHJlbW92ZSB0aGUgY29udHJvbGxlciwgc28gaXQncyBvbmx5IGNhbGxlZCBvbmNlLlxuICAgICAgICBpbnN0YW5jZS5hZGRDb250cm9sbGVyKHtcbiAgICAgICAgICBob3N0Q29ubmVjdGVkKCkge1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKGluc3RhbmNlLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUNvbnRyb2xsZXIodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0VXBkYXRlKCkge1xuICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzKGluc3RhbmNlLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUNvbnRyb2xsZXIodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4iLCJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBSZWFjdGl2ZUVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBTYmJTbG90U3RhdGVDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vbWl4aW5zLmpzJztcblxuLyoqXG4gKiBBZGRzIHRoZSB7QGxpbmsgU2JiU2xvdFN0YXRlQ29udHJvbGxlcn0gdG8gdGhlIHJlbGF0ZWQgZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIEBjdXN0b21FbGVtZW50KCdteS1lbGVtZW50KVxuICogQHNsb3RTdGF0ZSgpXG4gKiBleHBvcnQgY2xhc3MgTXlFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gKiAgIC4uLlxuICogfVxuICpcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIEEgcmVjb3JkIG9mIGF0dHJpYnV0ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBzbG90U3RhdGUgPSAoKSA9PiAodGFyZ2V0OiBBYnN0cmFjdENvbnN0cnVjdG9yPFJlYWN0aXZlRWxlbWVudD4pID0+IHtcbiAgaWYgKCFpc1NlcnZlcikge1xuICAgICh0YXJnZXQgYXMgdHlwZW9mIFJlYWN0aXZlRWxlbWVudCkuYWRkSW5pdGlhbGl6ZXIoXG4gICAgICAoaW5zdGFuY2U6IFJlYWN0aXZlRWxlbWVudCkgPT4gbmV3IFNiYlNsb3RTdGF0ZUNvbnRyb2xsZXIoaW5zdGFuY2UpLFxuICAgICk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxTQUFTLGdCQUNQLFVBQ0EsWUFDTTtBQUNOLGFBQVcsQ0FBQyxNQUFNLEtBQUssS0FBSyxPQUFPLFFBQVEsVUFBVSxHQUFHO0FBQ3RELFFBQUksT0FBTztBQUNBLGVBQUEsYUFBYSxNQUFNLEtBQUs7QUFBQSxJQUFBLE9BQzVCO0FBQ0ksZUFBQSxnQkFBZ0IsTUFBTSxVQUFVLElBQUk7QUFBQSxJQUMvQztBQUFBLEVBQ0Y7QUFDRjtBQW1CYSxNQUFBLGlCQUNYLENBQUMsZUFBOEMsQ0FBQyxXQUM3QyxPQUFrQyxlQUFlLENBQUMsYUFBOEI7QUFDL0UsTUFBSSxVQUFVO0FBQ1osb0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUEsT0FDL0I7QUFLTCxhQUFTLGNBQWM7QUFBQSxNQUNyQixnQkFBZ0I7QUFDZCx3QkFBZ0IsVUFBVSxVQUFVO0FBQ3BDLGlCQUFTLGlCQUFpQixJQUFJO0FBQUEsTUFDaEM7QUFBQSxNQUNBLGFBQWE7QUFDWCx3QkFBZ0IsVUFBVSxVQUFVO0FBQ3BDLGlCQUFTLGlCQUFpQixJQUFJO0FBQUEsTUFDaEM7QUFBQSxJQUFBLENBQ0Q7QUFBQSxFQUNIO0FBQ0YsQ0FBQztBQ3JDUSxNQUFBLFlBQVksTUFBTSxDQUFDLFdBQWlEO0FBQy9FLE1BQUksQ0FBQyxVQUFVO0FBQ1osV0FBa0M7QUFBQSxNQUNqQyxDQUFDLGFBQThCLElBQUksdUJBQXVCLFFBQVE7QUFBQSxJQUFBO0FBQUEsRUFFdEU7QUFDRjsifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"form-associated-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/form-associated-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,0BAA0B;IACtD,IAAW,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC;IAC1C,IAAW,IAAI,IAAI,MAAM,CAAC;IAC1B,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;IAC/B,IAAW,IAAI,IAAI,MAAM,CAAC;IAC1B,IAAW,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC;IAClC,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAEvC,IAAW,QAAQ,IAAI,aAAa,CAAC;IACrC,IAAW,iBAAiB,IAAI,MAAM,CAAC;IACvC,IAAW,YAAY,IAAI,OAAO,CAAC;IAEnC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAExC,aAAa,IAAI,OAAO;IACxB,cAAc,IAAI,OAAO;IAEzB,sBAAsB,CAAC,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAC3D,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;aACpC,iBAAiB,IAAI,IAAI;aACzB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,iBAAiB,GACxB,IAAI;IAEP,SAAS,CAAC,eAAe,IAAI,IAAI;CAClC;AAED;;GAEG;AAEH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,cAC1D,CAAC,KACZ,WAAW,CAAC,0BAA0B,CAAC,GAAG,CA2J5C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"form-associated-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/form-associated-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,0BAA0B;IACtD,IAAW,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC;IAC1C,IAAW,IAAI,IAAI,MAAM,CAAC;IAC1B,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;IAC/B,IAAW,IAAI,IAAI,MAAM,CAAC;IAC1B,IAAW,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC;IAClC,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAEvC,IAAW,QAAQ,IAAI,aAAa,CAAC;IACrC,IAAW,iBAAiB,IAAI,MAAM,CAAC;IACvC,IAAW,YAAY,IAAI,OAAO,CAAC;IAEnC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAExC,aAAa,IAAI,OAAO;IACxB,cAAc,IAAI,OAAO;IAEzB,sBAAsB,CAAC,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAC3D,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;aACpC,iBAAiB,IAAI,IAAI;aACzB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,iBAAiB,GACxB,IAAI;IAEP,SAAS,CAAC,eAAe,IAAI,IAAI;CAClC;AAED;;GAEG;AAEH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,cAC1D,CAAC,KACZ,WAAW,CAAC,0BAA0B,CAAC,GAAG,CAgK5C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,cAAc,CAAC"}
@@ -155,7 +155,9 @@ const SbbFormAssociatedMixin = (superClass) => {
155
155
  * @internal
156
156
  */
157
157
  formDisabledCallback(disabled) {
158
- this.formDisabled = disabled;
158
+ Promise.resolve().then(() => {
159
+ this.formDisabled = disabled;
160
+ });
159
161
  }
160
162
  /** Should be called when form value is changed. */
161
163
  updateFormValue() {
@@ -709,4 +711,4 @@ export {
709
711
  SbbUpdateSchedulerMixin,
710
712
  panelCommon as panelCommonStyle
711
713
  };
712
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZGlzYWJsZWQtbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3JlcXVpcmVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1jaGVja2JveC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9oeWRyYXRpb24tbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvbmFtZWQtc2xvdC1saXN0LW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL25lZ2F0aXZlLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3BhbmVsLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3VwZGF0ZS1zY2hlZHVsZXItbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkRpc2FibGVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgZGlzYWJsZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJEaXNhYmxlZE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkRpc2FibGVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkRpc2FibGVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIGRpc2FibGVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuaXNEaXNhYmxlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXNlZCBhcyAnb3InIGNoZWNrIHRvIHRoZSBjdXJyZW50IGRpc2FibGVkIHN0YXRlLlxuICAgICAqIENhbiBlLmcuIGJlIHVzZWQgdG8gcmVhZCBkaXNhYmxlZCBzdGF0ZSBvZiBhIGdyb3VwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRGlzYWJsZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJEaXNhYmxlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkRpc2FibGVkVGFiSW5kZXhBY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uXG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBTYmJEaXNhYmxlZE1peGluVHlwZVxuICB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRSBpZiB0YWJpbmRleCBpcyBub3QgbmVlZGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYXJpYS1kaXNhYmxlZCxcbiAgICAgIC8vICB1c2UgdGhlIFNiYkRpc2FibGVkTWl4aW4gYW5kIGltcGxlbWVudCBhIGRpZmZlcmVudCB3aWxsVXBkYXRlIG1ldGhvZC5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZyk7XG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk7XG5cbiAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlO1xuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZztcbiAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZm9ybURpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuXG4gIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZE1peGluIGVuYWJsZXMgbmF0aXZlIGZvcm0gc3VwcG9ydCBmb3IgY3VzdG9tIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZm9ybSBvd25lciBvZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmb3JtKCk6IEhUTUxGb3JtRWxlbWVudCB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmZvcm07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZm9ybSBlbGVtZW50LiBXaWxsIGJlIHJlYWQgZnJvbSBuYW1lIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZlbG9wZXIgbm90ZTogSW4gdGhpcyBjYXNlIHVwZGF0aW5nIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBEdWUgdG8gdGhpcyBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHtuYW1lfWApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID8/ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsTmFtZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBWYWxpZGl0eVN0YXRlIG9iamVjdCBmb3IgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgd291bGQgYmUgc2hvd24gdG8gdGhlIHVzZXJcbiAgICAgKiBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2FzIHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMud2lsbFZhbGlkYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblxuICAgIC8qKiBXaGVuZXZlciBhIHN1cnJvdW5kaW5nIGZvcm0gb3IgZmllbGRzZXQgaXMgY2hhbmdpbmcgaXRzIGRpc2FibGVkIHN0YXRlLiAqL1xuICAgIEBzdGF0ZSgpIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGludGVybmFscyB0YXJnZXQgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgb3RoZXJ3aXNlLFxuICAgICAqIHJldHVybnMgZmFsc2UsIGZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQsXG4gICAgICogYW5kIChpZiB0aGUgZXZlbnQgaXNuJ3QgY2FuY2VsZWQpIHJlcG9ydHMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGVsZW1lbnQgY2hhbmdlcy5cbiAgICAgKiBFbGVtZW50SW50ZXJuYWxzLmZvcm0gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmcm9tIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUFzc29jaWF0ZWRDYWxsYmFjaz8oZm9ybTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIC8gZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgdGhpcy5mb3JtRGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyDigJxyZXN0b3Jl4oCdLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIOKAnGF1dG9jb21wbGV0ZeKAnS5cbiAgICAgKiAgSW4gdGhlIGNhc2Ugb2Yg4oCccmVzdG9yZeKAnSwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICAvKiogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGZvcm0gdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVDtcbn07XG5cbi8qKlxuICogQSB2YWx1ZSB0byBiZSByZXN0b3JlZCBmb3IgYSBjb21wb25lbnQncyBmb3JtIHZhbHVlLiBJZiBhIGNvbXBvbmVudCdzIGZvcm1cbiAqIHN0YXRlIGlzIGEgYEZvcm1EYXRhYCBvYmplY3QsIGl0cyBlbnRyeSBsaXN0IG9mIG5hbWUgYW5kIHZhbHVlcyB3aWxsIGJlXG4gKiBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSA9IEZpbGUgfCBzdHJpbmcgfCBbc3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWVdW107XG5cbi8qKlxuICogVGhlIHJlYXNvbiBhIGZvcm0gY29tcG9uZW50IGlzIGJlaW5nIHJlc3RvcmVkIGZvciwgZWl0aGVyIGAncmVzdG9yZSdgIGZvclxuICogYnJvd3NlciByZXN0b3JhdGlvbiBvciBgJ2F1dG9jb21wbGV0ZSdgIGZvciByZXN0b3JpbmcgdXNlciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1SZXN0b3JlUmVhc29uID0gJ3Jlc3RvcmUnIHwgJ2F1dG9jb21wbGV0ZSc7XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGUgfSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYlJlcXVpcmVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgcmVxdWlyZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJSZXF1aXJlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUmVxdWlyZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlJlcXVpcmVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIHJlcXVpcmVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9yZXF1aXJlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkIHx8IHRoaXMuaXNSZXF1aXJlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgLy8gRmlyZWZveCBuZWVkcyBleHBsaWNpdGx5IHNldCBhcmlhLXJlcXVpcmVkIHZhbHVlLlxuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVxdWlyZWQgPSBgJHt0aGlzLnJlcXVpcmVkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1c2VkIGFzICdvcicgY2hlY2sgdG8gdGhlIGN1cnJlbnQgcmVxdWlyZWQgc3RhdGUuXG4gICAgICogQ2FuIGUuZy4gYmUgdXNlZCB0byByZWFkIHJlcXVpcmVkIHN0YXRlIG9mIGEgZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJSZXF1aXJlZEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiwgdHlwZSBTYmJEaXNhYmxlZE1peGluVHlwZSB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluLCB0eXBlIFNiYlJlcXVpcmVkTWl4aW5UeXBlIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi5qcyc7XG5cbnR5cGUgQ2hlY2tlZFNldHRlclZhbHVlID0geyB2YWx1ZTogYm9vbGVhbjsgYXR0cmlidXRlOiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGVcbiAgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZVxuICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRGlzYWJsZWRNaXhpblR5cGU+LCBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbjtcbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKTtcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgaXNEaXNhYmxlZEV4dGVybmFsbHkoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICYgVCA9PiB7XG4gIEBob3N0QXR0cmlidXRlcyh7XG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgfSlcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiUmVxdWlyZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKHN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBjb252ZXJ0ZXI6IHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnZlcnRlcixcbiAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXR0ZXIgc28gdGhhdCB3ZSBrbm93IGl0IHdhcyBjYWxsZWQgYnkgYXR0cmlidXRlIGNoYW5nZS5cbiAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bik6IENoZWNrZWRTZXR0ZXJWYWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdENvbnZlcnRlci5mcm9tQXR0cmlidXRlPy4odmFsdWUsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGF0dHJpYnV0ZTogdHJ1ZSB9IGFzIENoZWNrZWRTZXR0ZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNldHRlciA9XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLmF0dHJpYnV0ZSA6IGZhbHNlO1xuICAgICAgaWYgKGF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIENoZWNrZWRTZXR0ZXJWYWx1ZSkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzIHNvb24gYXMgbXV0YXRpb24gd2FzIGRvbmUgbm90IGJ5IHNldHRpbmcgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgbmVlZCB0byBibG9jayBzeW5jaW5nIGF0dHJpYnV0ZS5cbiAgICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgIWF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmludGVybmFscy5yb2xlID0gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByZXZlbnRTY3JvbGxPblNwYWNlYmFyUHJlc3MpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRJbnRlcmFjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgLy8gQXR0cmlidXRlIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgcHJvZ3JhbW1hdGljIG9yIG1hbnVhbCBzdGF0ZSBjaGFuZ2UuXG4gICAgICBpZiAobmFtZSAhPT0gJ2NoZWNrZWQnIHx8ICF0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuZXZlciB0aGUgZm9ybSBpcyBiZWluZyByZXNldC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuaGFzQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMg4oCccmVzdG9yZeKAnSwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyDigJxhdXRvY29tcGxldGXigJ0uXG4gICAgICogIEluIHRoZSBjYXNlIG9mIOKAnHJlc3RvcmXigJ0sIHN0YXRlIGlzIGEgc3RyaW5nLCBGaWxlLCBvciBGb3JtRGF0YSBvYmplY3RcbiAgICAgKiAgcHJldmlvdXNseSBzZXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzZXRGb3JtVmFsdWUuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gc3RhdGUgPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGxvZ2ljIHdoaWNoIGlzIGJlaW5nIGV4ZWN1dGVkIHdoZW4gdXNlclxuICAgICAqIGludGVyYWN0aW9uIGhhcHBlbnMgYW5kIHN0YXRlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlLCBgJHt0aGlzLmNoZWNrZWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RpZENoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudCBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIGh5ZHJhdGlvbi5cbiAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgKiBhbmQgYGZhbHNlYCBpZiBub3QuXG4gICAqXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaHlkcmF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKiogUmV0dXJucyB3aGV0aGVyIGh5ZHJhdGlvbiBpcyByZXF1aXJlZCBhbmQgbm90IGNvbXBsZXRlZC4gKi9cbiAgcHJvdGVjdGVkIGdldCBoeWRyYXRpb25SZXF1aXJlZCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gZXh0ZW5kcyBhIGJhc2UgY2xhc3Mgd2l0aCBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIGRlbGF5cyBzbG90Y2hhbmdlIGV2ZW50cyB1bnRpbCBoeWRyYXRpb24gaXMgY29tcGxldGUuXG4gKlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgaHlkcmF0aW9uIGNoZWNrIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJIeWRyYXRpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIGJhc2U6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5DbGFzcyBleHRlbmRzIGJhc2UgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4ge1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvblJlcXVpcmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvbkNvbXBsZXRlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oXG4gICAgICAocmVzb2x2ZSkgPT4gKHRoaXMuX3Jlc29sdmVIeWRyYXRpb24gPSByZXNvbHZlKSxcbiAgICApO1xuICAgIHByaXZhdGUgX3Jlc29sdmVIeWRyYXRpb24hOiAoaHlkcmF0aW9uUmVxdWlyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGNvbXBsZXRlZCBoeWRyYXRpb24uXG4gICAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgICAqIGFuZCBgZmFsc2VgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGh5ZHJhdGlvbkNvbXBsZXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2h5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgaHlkcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBub3QgY29tcGxldGVkLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgaHlkcmF0aW9uUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgaHlkcmF0aW9uIGlzIG5lZWRlZCBieSBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGFkb3cgcm9vdFxuICAgICAgLy8gaXMgYXZhaWxhYmxlIGR1cmluZyBjb25zdHJ1Y3Rpb24vdXBncmFkZSBwaGFzZS5cbiAgICAgIHRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkID0gISF0aGlzLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoIXRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVIeWRyYXRpb24oZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRHVyaW5nIGh5ZHJhdGlvbiBwaGFzZSwgd2Ugd2FudCB0byBzdXBwcmVzcyBzbG90Y2hhbmdlIGV2ZW50cyBhcyB0aGV5XG4gICAgICAgIC8vIGNhbiBjYXVzZSByZW5kZXIgZGlmZmVyZW5jZXMsIHdoaWNoIHdvdWxkIGJyZWFrIGh5ZHJhdGlvbi4gQWZ0ZXJcbiAgICAgICAgLy8gaHlkcmF0aW9uIGlzIGNvbXBsZXRlLCB3ZSBkaXNwYXRjaCBhIG1hbnVhbCBzbG90Y2hhbmdlIGV2ZW50LCBpZiB0aGVyZVxuICAgICAgICAvLyBhcmUgZWxlbWVudHMgYXNzaWduZWQgdG8gYSBzbG90LlxuICAgICAgICBjb25zdCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zOiBFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgY2FwdHVyZTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpO1xuICAgICAgICBpZiAoc2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHNsb3RzLmZvckVhY2goKHNsb3QpID0+XG4gICAgICAgICAgICBzbG90LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PlxuICAgICAgICAgICAgc2xvdHMuZm9yRWFjaCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBzbG90LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgaWYgKHNsb3QuYXNzaWduZWROb2RlcygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNsb3QuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Nsb3RjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIC8vIFdoZW4gaHlkcmF0aW9uIGlzIG5lZWRlZCwgd2Ugd2FpdCB0aGUgaHlkcmF0aW9uIHByb2Nlc3MgdG8gZmluaXNoLCB3aGljaCBpcyBwYXRjaGVkXG4gICAgICAvLyBpbnRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBMaXRFbGVtZW50IGJhc2UgY2xhc3MuXG4gICAgICBzdXBlci51cGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkh5ZHJhdGlvbk1peGluQ2xhc3MgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB7IGh0bWwsIHR5cGUgTGl0RWxlbWVudCwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TG9jYWxOYW1lIH0gZnJvbSAnLi4vZG9tLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBTYmJIeWRyYXRpb25NaXhpbiwgdHlwZSBTYmJIeWRyYXRpb25NaXhpblR5cGUgfSBmcm9tICcuL2h5ZHJhdGlvbi1taXhpbi5qcyc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuY29uc3QgU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSA9ICdkYXRhLXNzci1jaGlsZC1jb3VudCc7XG5jb25zdCBTTE9UTkFNRV9QUkVGSVggPSAnbGknO1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB3aWxsVXBkYXRlIG9yIHNpbWlsYXIgY2hlY2tzLlxuICogQWxsb3dzIHRoZSB1c2FnZSBvZiB0aGUgc3RyaW5nIGxpdGVyYWwgJ2xpc3RDaGlsZHJlbicuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICogICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICogICAgIC4uLlxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIFdpdGhMaXN0Q2hpbGRyZW48XG4gIFQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+LFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudCxcbj4gPSBUICYgeyBsaXN0Q2hpbGRyZW46IENbXSB9O1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQsXG4+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXM6IHN0cmluZ1tdO1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgbGlzdENoaWxkcmVuOiBDW107XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0KGF0dHJpYnV0ZXM/OiB7XG4gICAgY2xhc3M/OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuICB9KTogVGVtcGxhdGVSZXN1bHQ7XG4gIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgcmVuZGVySGlkZGVuU2xvdCgpOiBUZW1wbGF0ZVJlc3VsdDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYk5hbWVkU2xvdExpc3RNaXhpbiA9IDxcbiAgQyBleHRlbmRzIEhUTUxFbGVtZW50LFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pixcbj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+ICYgVCA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhc2UgY2xhc3MgcHJvdmlkZXMgbmFtZWQgc2xvdCBsaXN0IG9ic2VydmVyIGZ1bmN0aW9uYWxpdHkuXG4gICAqIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBwYXR0ZXJuIG9mIHJlbmRlcmluZyBhIG5hbWVkIHNsb3QgZm9yIGVhY2ggY2hpbGQsIHdoaWNoIGFsbG93c1xuICAgKiB3cmFwcGluZyBjaGlsZHJlbiBpbiBhIHVsL2xpIGxpc3QuXG4gICAqL1xuICBhYnN0cmFjdCBjbGFzcyBOYW1lZFNsb3RMaXN0RWxlbWVudDxDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD5cbiAgICBleHRlbmRzIFNiYkh5ZHJhdGlvbk1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+XG4gIHtcbiAgICAvKiogQSBsaXN0IG9mIHVwcGVyLWNhc2VkIHRhZyBuYW1lcyB0byBtYXRjaCBhZ2FpbnN0LiAoZS5nLiBTQkItTElOSykgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCB0aGUgZGVmaW5lZCB0YWcgbmFtZXMuXG4gICAgICogVGhpcyBhcnJheSBpcyBvbmx5IHVwZGF0ZWQsIGlmIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2VcbiAgICAgKiB0byB0aGUgY2hpbGQgZWxlbWVudHMuXG4gICAgICovXG4gICAgQHN0YXRlKCkgcHJvdGVjdGVkIGxpc3RDaGlsZHJlbjogQ1tdID0gW107XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgdGhpcy5faGFuZGxlU2xvdGNoYW5nZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgbGlzdENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuID8/IFtdKS5maWx0ZXIoKGUpOiBlIGlzIEMgPT5cbiAgICAgICAgdGhpcy5saXN0Q2hpbGRMb2NhbE5hbWVzLmluY2x1ZGVzKGUubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gICAgICAvLyBJZiB0aGUgc2xvdHRlZCBjaGlsZCBpbnN0YW5jZXMgaGF2ZSBub3QgY2hhbmdlZCwgd2UgY2FuIHNraXAgc3luY2luZyBhbmQgdXBkYXRpbmdcbiAgICAgIC8vIHRoZSBsaW5rIHJlZmVyZW5jZSBsaXN0LlxuICAgICAgaWYgKFxuICAgICAgICBsaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSB0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZXZlcnkoKGUsIGkpID0+IGxpc3RDaGlsZHJlbltpXSA9PT0gZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoKGMpID0+ICFsaXN0Q2hpbGRyZW4uaW5jbHVkZXMoYykpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBjLnJlbW92ZUF0dHJpYnV0ZSgnc2xvdCcpKTtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuID0gbGlzdENoaWxkcmVuO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZm9yRWFjaCgoYywgaW5kZXgpID0+XG4gICAgICAgIGMuc2V0QXR0cmlidXRlKCdzbG90JywgYCR7U0xPVE5BTUVfUFJFRklYfS0ke2luZGV4fWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBzc3IgYXR0cmlidXRlLCBvbmNlIHdlIGhhdmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgdGhlIGNoaWxkcmVuIGVsZW1lbnRzLlxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbmRlcnMgbGlzdCBhbmQgbGlzdCBzbG90cyBmb3Igc2xvdHRlZCBjaGlsZHJlbiBvciBhbiBhbW91bnQgb2YgbGlzdCBzbG90c1xuICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIHBvc3NpYmxlIG9wdGltaXphdGlvbiBmb3IgU1NSLCBhcyBpbiBhbiBTU1IgTGl0IGVudmlyb25tZW50XG4gICAgICogb3RoZXIgZWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCBtaWdodCBiZSBhdmFpbGFibGUgaW4gdGhlIG1ldGFcbiAgICAgKiBmcmFtZXdvcmsgd3JhcHBlciAobGlrZSBlLmcuIFJlYWN0KS4gVGhpcyBhbGxvd3MgdG8gcHJvdmlkZSB0aGUgYW1vdW50IG9mXG4gICAgICogY2hpbGRyZW4gdG8gYmUgcGFzc2VkIHZpYSB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckxpc3QoXG4gICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzPzogc3RyaW5nOyBhcmlhTGFiZWw/OiBzdHJpbmc7IGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nIH0gPSB7fSxcbiAgICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgICBjb25zdCBsaXN0U2xvdE5hbWVzID0gdGhpcy5saXN0U2xvdE5hbWVzKCk7XG5cbiAgICAgIGlmIChsaXN0U2xvdE5hbWVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2F0dHJpYnV0ZXMuYXJpYUxhYmVsIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9JHthdHRyaWJ1dGVzLmFyaWFMYWJlbGxlZGJ5IHx8IG5vdGhpbmd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHtsaXN0U2xvdE5hbWVzLm1hcCgobmFtZSkgPT4gaHRtbGA8bGk+PHNsb3QgbmFtZT0ke25hbWV9Pjwvc2xvdD48L2xpPmApfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlckhpZGRlblNsb3QoKX1cbiAgICAgICAgYDtcbiAgICAgIH0gZWxzZSBpZiAobGlzdFNsb3ROYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHthdHRyaWJ1dGVzLmFyaWFMYWJlbH08L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfT5cbiAgICAgICAgICAgIDxzcGFuPjxzbG90IG5hbWU9JHtsaXN0U2xvdE5hbWVzWzBdfT48L3Nsb3Q+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfSBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlkZGVuU2xvdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbGlzdCBzbG90IG5hbWVzIHdpdGggdGhlIGxlbmd0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbW91bnQgb2YgbWF0Y2hlZFxuICAgICAqIGNoaWxkcmVuIG9yIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gZm9yIFNTUiwgYXMgaW4gYW4gU1NSIExpdCBlbnZpcm9ubWVudFxuICAgICAqIG90aGVyIGVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLCBidXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHRoZSBtZXRhXG4gICAgICogZnJhbWV3b3JrIHdyYXBwZXIgKGxpa2UgZS5nLiBSZWFjdCkuIFRoaXMgYWxsb3dzIHRvIHByb3ZpZGUgdGhlIGFtb3VudCBvZlxuICAgICAqIGNoaWxkcmVuIHRvIGJlIHBhc3NlZCB2aWEgdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IGxpc3RDaGlsZHJlbiA9IHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICA/IHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIDogQXJyYXkuZnJvbSh7IGxlbmd0aDogKyh0aGlzLmdldEF0dHJpYnV0ZShTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFKSA/PyAwKSB9KTtcbiAgICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ubWFwKChfLCBpKSA9PiBgJHtTTE9UTkFNRV9QUkVGSVh9LSR7aX1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgaGlkZGVuIHNsb3QsIHdoaWNoIGlzIGludGVuZGVkIGFzIHRoZSBjaGlsZHJlbiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAqIFdoZW4gYW4gZWxlbWVudCB3aXRob3V0IGEgc2xvdCBhdHRyaWJ1dGUgaXMgc2xvdHRlZCB0byB0aGUgZWxlbWVudCwgaXQgdHJpZ2dlcnNcbiAgICAgKiB0aGUgc2xvdGNoYW5nZSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lZCBzbG90LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW5kZXJIaWRkZW5TbG90KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGhpZGRlbj48c2xvdD48L3Nsb3Q+PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE5hbWVkU2xvdExpc3RFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiTmVnYXRpdmVNaXhpblR5cGUge1xuICBwdWJsaWMgbmVnYXRpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgbmVnYXRpdmUgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOZWdhdGl2ZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYk5lZ2F0aXZlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJOZWdhdGl2ZU1peGluVHlwZSB7XG4gICAgLyoqIE5lZ2F0aXZlIGNvbG9yaW5nIHZhcmlhbnQgZmxhZy4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIFNiYk5lZ2F0aXZlRWxlbWVudCBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5lZ2F0aXZlTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJQYW5lbE1peGluVHlwZSB7XG4gIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJztcbiAgcHVibGljIGJvcmRlcmxlc3M6IGJvb2xlYW47XG4gIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNaXhpbiBmb3IgY29tbW9uIHBhbmVsIGJlaGF2aW9yc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiUGFuZWxNaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlBhbmVsTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJQYW5lbEVsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIGltcGxlbWVudHMgU2JiUGFuZWxNaXhpblR5cGUge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgICAgcGFuZWxDb25uZWN0ZWQ6ICdwYW5lbENvbm5lY3RlZCcsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIC8qKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWwuICovXG4gICAgQHByb3BlcnR5KCkgcHVibGljIGNvbG9yOiAnd2hpdGUnIHwgJ21pbGsnID0gJ3doaXRlJztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB1bnNlbGVjdGVkIHBhbmVsIGhhcyBhIGJvcmRlci4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBib3JkZXJsZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGludGVybmFsIHVzZWQgZm9yIGFjY2Vzc2liaWxpdHkgbGFiZWwgd2hlbiBpbiBleHBhbnNpb24gcGFuZWwgKi9cbiAgICBAcHJvcGVydHkoKSBwdWJsaWMgZXhwYW5zaW9uU3RhdGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBJbnRlcm5hbCBldmVudCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNoZWNrYm94IGlzIGxvYWRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wYW5lbENvbm5lY3RlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICAgIHRoaXMsXG4gICAgICBTYmJQYW5lbEVsZW1lbnQuZXZlbnRzLnBhbmVsQ29ubmVjdGVkLFxuICAgICAgeyBidWJibGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuX3BhbmVsQ29ubmVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiUGFuZWxFbGVtZW50IGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUGFuZWxNaXhpblR5cGU+ICYgVDtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIHN0YXJ0VXBkYXRlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBjb21wbGV0ZVVwZGF0ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gYWxsb3dzIHNjaGVkdWxpbmcgbWFudWFsIHVwZGF0ZXMsIHdoaWNoIGFmZmVjdCB1cGRhdGVDb21wbGV0ZS5cbiAqIEBwYXJhbSBiYXNlIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gKiBAcmV0dXJucyBBIGNsYXNzIGV4dGVuZGVkIHdpdGggdGhlIHNsb3QgY2hpbGQgb2JzZXJ2ZXIgZnVuY3Rpb25hbGl0eS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYlVwZGF0ZVNjaGVkdWxlck1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgYmFzZTogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJVcGRhdGVTY2hlZHVsZXJFbGVtZW50XG4gICAgZXh0ZW5kcyBiYXNlXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlVwZGF0ZVNjaGVkdWxlck1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX3VwZGF0ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBwcml2YXRlIF91cGRhdGVSZXNvbHZlID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICBwcm90ZWN0ZWQgc3RhcnRVcGRhdGUoKTogdm9pZCB7XG4gICAgICB0aGlzLl91cGRhdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+ICh0aGlzLl91cGRhdGVSZXNvbHZlID0gcikpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb21wbGV0ZVVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZ2V0VXBkYXRlQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlUHJvbWlzZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBTYmJVcGRhdGVTY2hlZHVsZXJFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJuYW1lcyI6WyJfX2RlY29yYXRlQ2xhc3MiLCJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWVhLE1BQUEsbUJBQW1CLENBQzlCLGVBQ2tEO0FBQUEsRUFDbEQsTUFBZSwyQkFBMkIsV0FBb0Q7QUFBQSxJQUE5RixjQUFBO0FBQUEsWUFBQSxHQUFBLFNBQUE7QUFXRSxXQUFRLFlBQXFCO0FBQUEsSUFBQTtBQUFBLElBUjdCLElBQVcsU0FBUyxPQUFnQjtBQUc3QixXQUFBLFlBQVksUUFBUSxLQUFLO0FBQUEsSUFDaEM7QUFBQSxJQUNBLElBQVcsV0FBb0I7QUFDdEIsYUFBQSxLQUFLLGFBQWEsS0FBSyxxQkFBcUI7QUFBQSxJQUNyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPVSx1QkFBZ0M7QUFDakMsYUFBQTtBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBakJhQSxvQkFBQTtBQUFBLElBRFYsU0FBUyxFQUFFLFNBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFBLEdBRjdCLG1CQUdGLFdBQUEsVUFBQTtBQW1CTixTQUFBO0FBQ1Q7QUFHYSxN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
714
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZGlzYWJsZWQtbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3JlcXVpcmVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1jaGVja2JveC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9oeWRyYXRpb24tbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvbmFtZWQtc2xvdC1saXN0LW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL25lZ2F0aXZlLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3BhbmVsLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3VwZGF0ZS1zY2hlZHVsZXItbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkRpc2FibGVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgZGlzYWJsZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJEaXNhYmxlZE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkRpc2FibGVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkRpc2FibGVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIGRpc2FibGVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuaXNEaXNhYmxlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXNlZCBhcyAnb3InIGNoZWNrIHRvIHRoZSBjdXJyZW50IGRpc2FibGVkIHN0YXRlLlxuICAgICAqIENhbiBlLmcuIGJlIHVzZWQgdG8gcmVhZCBkaXNhYmxlZCBzdGF0ZSBvZiBhIGdyb3VwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRGlzYWJsZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJEaXNhYmxlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkRpc2FibGVkVGFiSW5kZXhBY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uXG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBTYmJEaXNhYmxlZE1peGluVHlwZVxuICB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRSBpZiB0YWJpbmRleCBpcyBub3QgbmVlZGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYXJpYS1kaXNhYmxlZCxcbiAgICAgIC8vICB1c2UgdGhlIFNiYkRpc2FibGVkTWl4aW4gYW5kIGltcGxlbWVudCBhIGRpZmZlcmVudCB3aWxsVXBkYXRlIG1ldGhvZC5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZyk7XG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk7XG5cbiAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlO1xuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZztcbiAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZm9ybURpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuXG4gIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZE1peGluIGVuYWJsZXMgbmF0aXZlIGZvcm0gc3VwcG9ydCBmb3IgY3VzdG9tIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZm9ybSBvd25lciBvZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmb3JtKCk6IEhUTUxGb3JtRWxlbWVudCB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmZvcm07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZm9ybSBlbGVtZW50LiBXaWxsIGJlIHJlYWQgZnJvbSBuYW1lIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZlbG9wZXIgbm90ZTogSW4gdGhpcyBjYXNlIHVwZGF0aW5nIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBEdWUgdG8gdGhpcyBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHtuYW1lfWApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID8/ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsTmFtZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBWYWxpZGl0eVN0YXRlIG9iamVjdCBmb3IgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgd291bGQgYmUgc2hvd24gdG8gdGhlIHVzZXJcbiAgICAgKiBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2FzIHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMud2lsbFZhbGlkYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblxuICAgIC8qKiBXaGVuZXZlciBhIHN1cnJvdW5kaW5nIGZvcm0gb3IgZmllbGRzZXQgaXMgY2hhbmdpbmcgaXRzIGRpc2FibGVkIHN0YXRlLiAqL1xuICAgIEBzdGF0ZSgpIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGludGVybmFscyB0YXJnZXQgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgb3RoZXJ3aXNlLFxuICAgICAqIHJldHVybnMgZmFsc2UsIGZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQsXG4gICAgICogYW5kIChpZiB0aGUgZXZlbnQgaXNuJ3QgY2FuY2VsZWQpIHJlcG9ydHMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGVsZW1lbnQgY2hhbmdlcy5cbiAgICAgKiBFbGVtZW50SW50ZXJuYWxzLmZvcm0gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmcm9tIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUFzc29jaWF0ZWRDYWxsYmFjaz8oZm9ybTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIC8gZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgaWYgdGhlIGRpc2FibGVkIHByb3BlcnR5IGNoYW5nZXMgb3IgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvZiBhIGZpZWxkc2V0IG9yIGZvcm0gY2hhbmdlcy5cbiAgICAgIC8vIFdlIG5lZWQgdG8gcG9zdHBvbmUgdGhlIGFzc2lnbm1lbnQsIG90aGVyd2lzZSBpdCBpbnRlcmZlcmVzIHdpdGggZGlzYWJsZWQgc3RhdHVzIHNldHRpbmdcbiAgICAgIC8vIGFuZCBsZWFkcyB0byBhIHdyb25nIHN0YXRlIChlLmcuIGVtYmVkZGVkIHNiYi12aXN1YWwtY2hlY2tib3gpLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyDigJxyZXN0b3Jl4oCdLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIOKAnGF1dG9jb21wbGV0ZeKAnS5cbiAgICAgKiAgSW4gdGhlIGNhc2Ugb2Yg4oCccmVzdG9yZeKAnSwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICAvKiogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGZvcm0gdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVDtcbn07XG5cbi8qKlxuICogQSB2YWx1ZSB0byBiZSByZXN0b3JlZCBmb3IgYSBjb21wb25lbnQncyBmb3JtIHZhbHVlLiBJZiBhIGNvbXBvbmVudCdzIGZvcm1cbiAqIHN0YXRlIGlzIGEgYEZvcm1EYXRhYCBvYmplY3QsIGl0cyBlbnRyeSBsaXN0IG9mIG5hbWUgYW5kIHZhbHVlcyB3aWxsIGJlXG4gKiBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSA9IEZpbGUgfCBzdHJpbmcgfCBbc3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWVdW107XG5cbi8qKlxuICogVGhlIHJlYXNvbiBhIGZvcm0gY29tcG9uZW50IGlzIGJlaW5nIHJlc3RvcmVkIGZvciwgZWl0aGVyIGAncmVzdG9yZSdgIGZvclxuICogYnJvd3NlciByZXN0b3JhdGlvbiBvciBgJ2F1dG9jb21wbGV0ZSdgIGZvciByZXN0b3JpbmcgdXNlciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1SZXN0b3JlUmVhc29uID0gJ3Jlc3RvcmUnIHwgJ2F1dG9jb21wbGV0ZSc7XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGUgfSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYlJlcXVpcmVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgcmVxdWlyZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJSZXF1aXJlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUmVxdWlyZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlJlcXVpcmVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIHJlcXVpcmVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9yZXF1aXJlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkIHx8IHRoaXMuaXNSZXF1aXJlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgLy8gRmlyZWZveCBuZWVkcyBleHBsaWNpdGx5IHNldCBhcmlhLXJlcXVpcmVkIHZhbHVlLlxuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVxdWlyZWQgPSBgJHt0aGlzLnJlcXVpcmVkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1c2VkIGFzICdvcicgY2hlY2sgdG8gdGhlIGN1cnJlbnQgcmVxdWlyZWQgc3RhdGUuXG4gICAgICogQ2FuIGUuZy4gYmUgdXNlZCB0byByZWFkIHJlcXVpcmVkIHN0YXRlIG9mIGEgZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJSZXF1aXJlZEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiwgdHlwZSBTYmJEaXNhYmxlZE1peGluVHlwZSB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluLCB0eXBlIFNiYlJlcXVpcmVkTWl4aW5UeXBlIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi5qcyc7XG5cbnR5cGUgQ2hlY2tlZFNldHRlclZhbHVlID0geyB2YWx1ZTogYm9vbGVhbjsgYXR0cmlidXRlOiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGVcbiAgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZVxuICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRGlzYWJsZWRNaXhpblR5cGU+LCBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbjtcbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKTtcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgaXNEaXNhYmxlZEV4dGVybmFsbHkoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICYgVCA9PiB7XG4gIEBob3N0QXR0cmlidXRlcyh7XG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgfSlcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiUmVxdWlyZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKHN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBjb252ZXJ0ZXI6IHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnZlcnRlcixcbiAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXR0ZXIgc28gdGhhdCB3ZSBrbm93IGl0IHdhcyBjYWxsZWQgYnkgYXR0cmlidXRlIGNoYW5nZS5cbiAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bik6IENoZWNrZWRTZXR0ZXJWYWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdENvbnZlcnRlci5mcm9tQXR0cmlidXRlPy4odmFsdWUsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGF0dHJpYnV0ZTogdHJ1ZSB9IGFzIENoZWNrZWRTZXR0ZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNldHRlciA9XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLmF0dHJpYnV0ZSA6IGZhbHNlO1xuICAgICAgaWYgKGF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIENoZWNrZWRTZXR0ZXJWYWx1ZSkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzIHNvb24gYXMgbXV0YXRpb24gd2FzIGRvbmUgbm90IGJ5IHNldHRpbmcgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgbmVlZCB0byBibG9jayBzeW5jaW5nIGF0dHJpYnV0ZS5cbiAgICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgIWF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmludGVybmFscy5yb2xlID0gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByZXZlbnRTY3JvbGxPblNwYWNlYmFyUHJlc3MpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRJbnRlcmFjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgLy8gQXR0cmlidXRlIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgcHJvZ3JhbW1hdGljIG9yIG1hbnVhbCBzdGF0ZSBjaGFuZ2UuXG4gICAgICBpZiAobmFtZSAhPT0gJ2NoZWNrZWQnIHx8ICF0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuZXZlciB0aGUgZm9ybSBpcyBiZWluZyByZXNldC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuaGFzQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMg4oCccmVzdG9yZeKAnSwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyDigJxhdXRvY29tcGxldGXigJ0uXG4gICAgICogIEluIHRoZSBjYXNlIG9mIOKAnHJlc3RvcmXigJ0sIHN0YXRlIGlzIGEgc3RyaW5nLCBGaWxlLCBvciBGb3JtRGF0YSBvYmplY3RcbiAgICAgKiAgcHJldmlvdXNseSBzZXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzZXRGb3JtVmFsdWUuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gc3RhdGUgPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGxvZ2ljIHdoaWNoIGlzIGJlaW5nIGV4ZWN1dGVkIHdoZW4gdXNlclxuICAgICAqIGludGVyYWN0aW9uIGhhcHBlbnMgYW5kIHN0YXRlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlLCBgJHt0aGlzLmNoZWNrZWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RpZENoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudCBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIGh5ZHJhdGlvbi5cbiAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgKiBhbmQgYGZhbHNlYCBpZiBub3QuXG4gICAqXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaHlkcmF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKiogUmV0dXJucyB3aGV0aGVyIGh5ZHJhdGlvbiBpcyByZXF1aXJlZCBhbmQgbm90IGNvbXBsZXRlZC4gKi9cbiAgcHJvdGVjdGVkIGdldCBoeWRyYXRpb25SZXF1aXJlZCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gZXh0ZW5kcyBhIGJhc2UgY2xhc3Mgd2l0aCBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIGRlbGF5cyBzbG90Y2hhbmdlIGV2ZW50cyB1bnRpbCBoeWRyYXRpb24gaXMgY29tcGxldGUuXG4gKlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgaHlkcmF0aW9uIGNoZWNrIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJIeWRyYXRpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIGJhc2U6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5DbGFzcyBleHRlbmRzIGJhc2UgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4ge1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvblJlcXVpcmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvbkNvbXBsZXRlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oXG4gICAgICAocmVzb2x2ZSkgPT4gKHRoaXMuX3Jlc29sdmVIeWRyYXRpb24gPSByZXNvbHZlKSxcbiAgICApO1xuICAgIHByaXZhdGUgX3Jlc29sdmVIeWRyYXRpb24hOiAoaHlkcmF0aW9uUmVxdWlyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGNvbXBsZXRlZCBoeWRyYXRpb24uXG4gICAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgICAqIGFuZCBgZmFsc2VgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGh5ZHJhdGlvbkNvbXBsZXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2h5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgaHlkcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBub3QgY29tcGxldGVkLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgaHlkcmF0aW9uUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgaHlkcmF0aW9uIGlzIG5lZWRlZCBieSBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGFkb3cgcm9vdFxuICAgICAgLy8gaXMgYXZhaWxhYmxlIGR1cmluZyBjb25zdHJ1Y3Rpb24vdXBncmFkZSBwaGFzZS5cbiAgICAgIHRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkID0gISF0aGlzLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoIXRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVIeWRyYXRpb24oZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRHVyaW5nIGh5ZHJhdGlvbiBwaGFzZSwgd2Ugd2FudCB0byBzdXBwcmVzcyBzbG90Y2hhbmdlIGV2ZW50cyBhcyB0aGV5XG4gICAgICAgIC8vIGNhbiBjYXVzZSByZW5kZXIgZGlmZmVyZW5jZXMsIHdoaWNoIHdvdWxkIGJyZWFrIGh5ZHJhdGlvbi4gQWZ0ZXJcbiAgICAgICAgLy8gaHlkcmF0aW9uIGlzIGNvbXBsZXRlLCB3ZSBkaXNwYXRjaCBhIG1hbnVhbCBzbG90Y2hhbmdlIGV2ZW50LCBpZiB0aGVyZVxuICAgICAgICAvLyBhcmUgZWxlbWVudHMgYXNzaWduZWQgdG8gYSBzbG90LlxuICAgICAgICBjb25zdCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zOiBFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgY2FwdHVyZTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpO1xuICAgICAgICBpZiAoc2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHNsb3RzLmZvckVhY2goKHNsb3QpID0+XG4gICAgICAgICAgICBzbG90LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PlxuICAgICAgICAgICAgc2xvdHMuZm9yRWFjaCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBzbG90LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgaWYgKHNsb3QuYXNzaWduZWROb2RlcygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNsb3QuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Nsb3RjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIC8vIFdoZW4gaHlkcmF0aW9uIGlzIG5lZWRlZCwgd2Ugd2FpdCB0aGUgaHlkcmF0aW9uIHByb2Nlc3MgdG8gZmluaXNoLCB3aGljaCBpcyBwYXRjaGVkXG4gICAgICAvLyBpbnRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBMaXRFbGVtZW50IGJhc2UgY2xhc3MuXG4gICAgICBzdXBlci51cGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkh5ZHJhdGlvbk1peGluQ2xhc3MgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB7IGh0bWwsIHR5cGUgTGl0RWxlbWVudCwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TG9jYWxOYW1lIH0gZnJvbSAnLi4vZG9tLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBTYmJIeWRyYXRpb25NaXhpbiwgdHlwZSBTYmJIeWRyYXRpb25NaXhpblR5cGUgfSBmcm9tICcuL2h5ZHJhdGlvbi1taXhpbi5qcyc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuY29uc3QgU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSA9ICdkYXRhLXNzci1jaGlsZC1jb3VudCc7XG5jb25zdCBTTE9UTkFNRV9QUkVGSVggPSAnbGknO1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB3aWxsVXBkYXRlIG9yIHNpbWlsYXIgY2hlY2tzLlxuICogQWxsb3dzIHRoZSB1c2FnZSBvZiB0aGUgc3RyaW5nIGxpdGVyYWwgJ2xpc3RDaGlsZHJlbicuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICogICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICogICAgIC4uLlxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIFdpdGhMaXN0Q2hpbGRyZW48XG4gIFQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+LFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudCxcbj4gPSBUICYgeyBsaXN0Q2hpbGRyZW46IENbXSB9O1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQsXG4+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXM6IHN0cmluZ1tdO1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgbGlzdENoaWxkcmVuOiBDW107XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0KGF0dHJpYnV0ZXM/OiB7XG4gICAgY2xhc3M/OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuICB9KTogVGVtcGxhdGVSZXN1bHQ7XG4gIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgcmVuZGVySGlkZGVuU2xvdCgpOiBUZW1wbGF0ZVJlc3VsdDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYk5hbWVkU2xvdExpc3RNaXhpbiA9IDxcbiAgQyBleHRlbmRzIEhUTUxFbGVtZW50LFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pixcbj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+ICYgVCA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhc2UgY2xhc3MgcHJvdmlkZXMgbmFtZWQgc2xvdCBsaXN0IG9ic2VydmVyIGZ1bmN0aW9uYWxpdHkuXG4gICAqIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBwYXR0ZXJuIG9mIHJlbmRlcmluZyBhIG5hbWVkIHNsb3QgZm9yIGVhY2ggY2hpbGQsIHdoaWNoIGFsbG93c1xuICAgKiB3cmFwcGluZyBjaGlsZHJlbiBpbiBhIHVsL2xpIGxpc3QuXG4gICAqL1xuICBhYnN0cmFjdCBjbGFzcyBOYW1lZFNsb3RMaXN0RWxlbWVudDxDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD5cbiAgICBleHRlbmRzIFNiYkh5ZHJhdGlvbk1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+XG4gIHtcbiAgICAvKiogQSBsaXN0IG9mIHVwcGVyLWNhc2VkIHRhZyBuYW1lcyB0byBtYXRjaCBhZ2FpbnN0LiAoZS5nLiBTQkItTElOSykgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCB0aGUgZGVmaW5lZCB0YWcgbmFtZXMuXG4gICAgICogVGhpcyBhcnJheSBpcyBvbmx5IHVwZGF0ZWQsIGlmIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2VcbiAgICAgKiB0byB0aGUgY2hpbGQgZWxlbWVudHMuXG4gICAgICovXG4gICAgQHN0YXRlKCkgcHJvdGVjdGVkIGxpc3RDaGlsZHJlbjogQ1tdID0gW107XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgdGhpcy5faGFuZGxlU2xvdGNoYW5nZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgbGlzdENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuID8/IFtdKS5maWx0ZXIoKGUpOiBlIGlzIEMgPT5cbiAgICAgICAgdGhpcy5saXN0Q2hpbGRMb2NhbE5hbWVzLmluY2x1ZGVzKGUubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gICAgICAvLyBJZiB0aGUgc2xvdHRlZCBjaGlsZCBpbnN0YW5jZXMgaGF2ZSBub3QgY2hhbmdlZCwgd2UgY2FuIHNraXAgc3luY2luZyBhbmQgdXBkYXRpbmdcbiAgICAgIC8vIHRoZSBsaW5rIHJlZmVyZW5jZSBsaXN0LlxuICAgICAgaWYgKFxuICAgICAgICBsaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSB0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZXZlcnkoKGUsIGkpID0+IGxpc3RDaGlsZHJlbltpXSA9PT0gZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoKGMpID0+ICFsaXN0Q2hpbGRyZW4uaW5jbHVkZXMoYykpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBjLnJlbW92ZUF0dHJpYnV0ZSgnc2xvdCcpKTtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuID0gbGlzdENoaWxkcmVuO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZm9yRWFjaCgoYywgaW5kZXgpID0+XG4gICAgICAgIGMuc2V0QXR0cmlidXRlKCdzbG90JywgYCR7U0xPVE5BTUVfUFJFRklYfS0ke2luZGV4fWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBzc3IgYXR0cmlidXRlLCBvbmNlIHdlIGhhdmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgdGhlIGNoaWxkcmVuIGVsZW1lbnRzLlxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbmRlcnMgbGlzdCBhbmQgbGlzdCBzbG90cyBmb3Igc2xvdHRlZCBjaGlsZHJlbiBvciBhbiBhbW91bnQgb2YgbGlzdCBzbG90c1xuICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIHBvc3NpYmxlIG9wdGltaXphdGlvbiBmb3IgU1NSLCBhcyBpbiBhbiBTU1IgTGl0IGVudmlyb25tZW50XG4gICAgICogb3RoZXIgZWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCBtaWdodCBiZSBhdmFpbGFibGUgaW4gdGhlIG1ldGFcbiAgICAgKiBmcmFtZXdvcmsgd3JhcHBlciAobGlrZSBlLmcuIFJlYWN0KS4gVGhpcyBhbGxvd3MgdG8gcHJvdmlkZSB0aGUgYW1vdW50IG9mXG4gICAgICogY2hpbGRyZW4gdG8gYmUgcGFzc2VkIHZpYSB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckxpc3QoXG4gICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzPzogc3RyaW5nOyBhcmlhTGFiZWw/OiBzdHJpbmc7IGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nIH0gPSB7fSxcbiAgICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgICBjb25zdCBsaXN0U2xvdE5hbWVzID0gdGhpcy5saXN0U2xvdE5hbWVzKCk7XG5cbiAgICAgIGlmIChsaXN0U2xvdE5hbWVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2F0dHJpYnV0ZXMuYXJpYUxhYmVsIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9JHthdHRyaWJ1dGVzLmFyaWFMYWJlbGxlZGJ5IHx8IG5vdGhpbmd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHtsaXN0U2xvdE5hbWVzLm1hcCgobmFtZSkgPT4gaHRtbGA8bGk+PHNsb3QgbmFtZT0ke25hbWV9Pjwvc2xvdD48L2xpPmApfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlckhpZGRlblNsb3QoKX1cbiAgICAgICAgYDtcbiAgICAgIH0gZWxzZSBpZiAobGlzdFNsb3ROYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHthdHRyaWJ1dGVzLmFyaWFMYWJlbH08L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfT5cbiAgICAgICAgICAgIDxzcGFuPjxzbG90IG5hbWU9JHtsaXN0U2xvdE5hbWVzWzBdfT48L3Nsb3Q+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfSBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlkZGVuU2xvdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbGlzdCBzbG90IG5hbWVzIHdpdGggdGhlIGxlbmd0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbW91bnQgb2YgbWF0Y2hlZFxuICAgICAqIGNoaWxkcmVuIG9yIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gZm9yIFNTUiwgYXMgaW4gYW4gU1NSIExpdCBlbnZpcm9ubWVudFxuICAgICAqIG90aGVyIGVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLCBidXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHRoZSBtZXRhXG4gICAgICogZnJhbWV3b3JrIHdyYXBwZXIgKGxpa2UgZS5nLiBSZWFjdCkuIFRoaXMgYWxsb3dzIHRvIHByb3ZpZGUgdGhlIGFtb3VudCBvZlxuICAgICAqIGNoaWxkcmVuIHRvIGJlIHBhc3NlZCB2aWEgdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IGxpc3RDaGlsZHJlbiA9IHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICA/IHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIDogQXJyYXkuZnJvbSh7IGxlbmd0aDogKyh0aGlzLmdldEF0dHJpYnV0ZShTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFKSA/PyAwKSB9KTtcbiAgICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ubWFwKChfLCBpKSA9PiBgJHtTTE9UTkFNRV9QUkVGSVh9LSR7aX1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgaGlkZGVuIHNsb3QsIHdoaWNoIGlzIGludGVuZGVkIGFzIHRoZSBjaGlsZHJlbiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAqIFdoZW4gYW4gZWxlbWVudCB3aXRob3V0IGEgc2xvdCBhdHRyaWJ1dGUgaXMgc2xvdHRlZCB0byB0aGUgZWxlbWVudCwgaXQgdHJpZ2dlcnNcbiAgICAgKiB0aGUgc2xvdGNoYW5nZSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lZCBzbG90LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW5kZXJIaWRkZW5TbG90KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGhpZGRlbj48c2xvdD48L3Nsb3Q+PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE5hbWVkU2xvdExpc3RFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiTmVnYXRpdmVNaXhpblR5cGUge1xuICBwdWJsaWMgbmVnYXRpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgbmVnYXRpdmUgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOZWdhdGl2ZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYk5lZ2F0aXZlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJOZWdhdGl2ZU1peGluVHlwZSB7XG4gICAgLyoqIE5lZ2F0aXZlIGNvbG9yaW5nIHZhcmlhbnQgZmxhZy4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIFNiYk5lZ2F0aXZlRWxlbWVudCBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5lZ2F0aXZlTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJQYW5lbE1peGluVHlwZSB7XG4gIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJztcbiAgcHVibGljIGJvcmRlcmxlc3M6IGJvb2xlYW47XG4gIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNaXhpbiBmb3IgY29tbW9uIHBhbmVsIGJlaGF2aW9yc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiUGFuZWxNaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlBhbmVsTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJQYW5lbEVsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIGltcGxlbWVudHMgU2JiUGFuZWxNaXhpblR5cGUge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgICAgcGFuZWxDb25uZWN0ZWQ6ICdwYW5lbENvbm5lY3RlZCcsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIC8qKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWwuICovXG4gICAgQHByb3BlcnR5KCkgcHVibGljIGNvbG9yOiAnd2hpdGUnIHwgJ21pbGsnID0gJ3doaXRlJztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB1bnNlbGVjdGVkIHBhbmVsIGhhcyBhIGJvcmRlci4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBib3JkZXJsZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGludGVybmFsIHVzZWQgZm9yIGFjY2Vzc2liaWxpdHkgbGFiZWwgd2hlbiBpbiBleHBhbnNpb24gcGFuZWwgKi9cbiAgICBAcHJvcGVydHkoKSBwdWJsaWMgZXhwYW5zaW9uU3RhdGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBJbnRlcm5hbCBldmVudCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNoZWNrYm94IGlzIGxvYWRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wYW5lbENvbm5lY3RlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICAgIHRoaXMsXG4gICAgICBTYmJQYW5lbEVsZW1lbnQuZXZlbnRzLnBhbmVsQ29ubmVjdGVkLFxuICAgICAgeyBidWJibGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuX3BhbmVsQ29ubmVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiUGFuZWxFbGVtZW50IGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUGFuZWxNaXhpblR5cGU+ICYgVDtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIHN0YXJ0VXBkYXRlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBjb21wbGV0ZVVwZGF0ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gYWxsb3dzIHNjaGVkdWxpbmcgbWFudWFsIHVwZGF0ZXMsIHdoaWNoIGFmZmVjdCB1cGRhdGVDb21wbGV0ZS5cbiAqIEBwYXJhbSBiYXNlIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gKiBAcmV0dXJucyBBIGNsYXNzIGV4dGVuZGVkIHdpdGggdGhlIHNsb3QgY2hpbGQgb2JzZXJ2ZXIgZnVuY3Rpb25hbGl0eS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYlVwZGF0ZVNjaGVkdWxlck1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgYmFzZTogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJVcGRhdGVTY2hlZHVsZXJFbGVtZW50XG4gICAgZXh0ZW5kcyBiYXNlXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlVwZGF0ZVNjaGVkdWxlck1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX3VwZGF0ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBwcml2YXRlIF91cGRhdGVSZXNvbHZlID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICBwcm90ZWN0ZWQgc3RhcnRVcGRhdGUoKTogdm9pZCB7XG4gICAgICB0aGlzLl91cGRhdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+ICh0aGlzLl91cGRhdGVSZXNvbHZlID0gcikpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb21wbGV0ZVVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZ2V0VXBkYXRlQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlUHJvbWlzZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBTYmJVcGRhdGVTY2hlZHVsZXJFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJuYW1lcyI6WyJfX2RlY29yYXRlQ2xhc3MiLCJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWVhLE1BQUEsbUJBQW1CLENBQzlCLGVBQ2tEO0FBQUEsRUFDbEQsTUFBZSwyQkFBMkIsV0FBb0Q7QUFBQSxJQUE5RixjQUFB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
@@ -10,7 +10,7 @@ export declare function removeAriaOverlayTriggerAttributes(trigger: HTMLElement
10
10
  /**
11
11
  * Add meaningful aria attributes to trigger element of role='combobox'
12
12
  */
13
- export declare function setAriaComboBoxAttributes(trigger: HTMLElement, overlayId: string, expanded: boolean): void;
13
+ export declare function setAriaComboBoxAttributes(trigger: HTMLElement, overlayId: string, expanded: boolean, hasPopup?: 'listbox' | 'grid'): void;
14
14
  /**
15
15
  * Remove aria attributes from trigger elements.
16
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-trigger-attributes.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/overlay/overlay-trigger-attributes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAAG,QAAQ,EAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAQhG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAYxE"}
1
+ {"version":3,"file":"overlay-trigger-attributes.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/overlay/overlay-trigger-attributes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAAG,QAAQ,EAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAQhG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,QAAQ,GAAE,SAAS,GAAG,MAAkB,GACvC,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAYxE"}
@@ -200,14 +200,14 @@ function removeAriaOverlayTriggerAttributes(trigger) {
200
200
  trigger.removeAttribute("aria-controls");
201
201
  trigger.removeAttribute("aria-expanded");
202
202
  }
203
- function setAriaComboBoxAttributes(trigger, overlayId, expanded) {
203
+ function setAriaComboBoxAttributes(trigger, overlayId, expanded, hasPopup = "listbox") {
204
204
  if (!trigger) {
205
205
  return;
206
206
  }
207
207
  trigger.setAttribute("autocomplete", "off");
208
208
  trigger.setAttribute("role", "combobox");
209
209
  trigger.setAttribute("aria-autocomplete", "list");
210
- trigger.setAttribute("aria-haspopup", "listbox");
210
+ trigger.setAttribute("aria-haspopup", hasPopup);
211
211
  trigger.setAttribute("aria-controls", overlayId);
212
212
  trigger.setAttribute("aria-owns", overlayId);
213
213
  trigger.setAttribute("aria-expanded", `${expanded}`);
@@ -237,4 +237,4 @@ export {
237
237
  setAriaOverlayTriggerAttributes,
238
238
  setOverlayPosition
239
239
  };
240
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvb3ZlcmxheS9vdmVybGF5LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvb3ZlcmxheS9wb3NpdGlvbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL292ZXJsYXkvb3ZlcmxheS1vcHRpb24tcGFuZWwudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9vdmVybGF5L292ZXJsYXktdHJpZ2dlci1hdHRyaWJ1dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmNvbnN0IElTX09QRU5fT1ZFUkxBWV9RVUVSWSA9IGA6aXMoc2JiLWRpYWxvZywgc2JiLW5hdmlnYXRpb24sIHNiYi1tZW51LCBzYmItb3ZlcmxheSlbZGF0YS1zdGF0ZT0nb3BlbmVkJ11gO1xuXG4vKipcbiAqIFVzZWQgdG8gY3JlYXRlIHRoZSBcIndyYXBwaW5nXCIgZWZmZWN0IGFyb3VuZCB0aGUgYW5jaG9yIGZvciBvdmVybGF5cyAoZXMuIGF1dG9jb21wbGV0ZSlcbiAqIFdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlICdvdmVybGF5R2FwRml4Q29ybmVycygpJyBmdW5jdGlvbiBpbiAnb3ZlcmxheS50cydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlHYXBGaXhDb3JuZXJzKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgcmV0dXJuIGh0bWxgXG4gICAgPGRpdiBjbGFzcz1cInNiYi1nYXAtZml4LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZ2FwLWZpeC1jb3JuZXJcIiBpZD1cImxlZnRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2JiLWdhcC1maXgtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1nYXAtZml4LWNvcm5lclwiIGlkPVwicmlnaHRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBvdmVybGF5LlxuICovXG5jb25zdCBnZXRBbmNlc3RvcnMgPSAob3ZlcmxheTogSFRNTEVsZW1lbnQsIHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSA9PiB7XG4gIGxldCBlbCA9IG92ZXJsYXkucGFyZW50RWxlbWVudDtcbiAgY29uc3QgYW5jZXN0b3JzOiBIVE1MRWxlbWVudFtdID0gW107XG4gIHdoaWxlIChlbCkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGVsKTtcbiAgICBpZiAoZWwgIT09IHJvb3QpIHtcbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmNlc3RvcnM7XG59O1xuXG5jb25zdCBzZXREYXRhU2JiSW5lcnQgPSAoZWw6IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gIGVsLnNldEF0dHJpYnV0ZShcbiAgICAnZGF0YS1zYmItaW5lcnQnLFxuICAgIGAkeysoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpID8/IHVuZGVmaW5lZCkhICsgMSB8fCAwfWAsXG4gICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaW5lcnQgYW5kIHRoZSBkYXRhLXNiYi1pbmVydCBhdHRyaWJ1dGVzLlxuICovXG5jb25zdCBzZXRTYmJJbmVydCA9IChlbDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgaWYgKCFlbC5pbmVydCkge1xuICAgIGVsLmluZXJ0ID0gdHJ1ZTtcbiAgICBpZiAoZWwubWF0Y2hlcyhJU19PUEVOX09WRVJMQVlfUVVFUlkpKSB7XG4gICAgICBzZXREYXRhU2JiSW5lcnQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWluZXJ0JywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFlbC5oYXNBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaW5lcnQgYW5kIHRoZSBkYXRhLXNiYi1pbmVydCBhdHRyaWJ1dGVzLlxuICovXG5jb25zdCByZW1vdmVTYmJJbmVydCA9IChlbDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnKSkge1xuICAgIGVsLmluZXJ0ID0gZmFsc2U7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpO1xuICB9XG5cbiAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItYXJpYS1oaWRkZW4nKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyBpbmVydCB0byBldmVyeSBvdGhlciBlbGVtZW50IG9uIHRoZSBwYWdlIGV4Y2VwdCB0aGUgb3ZlcmxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5SW5lcnRNZWNoYW5pc20ob3ZlcmxheTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgcmVtb3ZlU2JiSW5lcnQob3ZlcmxheSk7XG5cbiAgY29uc3Qgb3ZlcmxheVJvb3QgPSBvdmVybGF5LmNsb3Nlc3QoJ2JvZHkgPiAqJykgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IGRvY3VtZW50Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgPiAqJykpLmZpbHRlcihcbiAgICAoZWwpID0+IGVsICE9PSBvdmVybGF5Um9vdCxcbiAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIGRvY3VtZW50Q2hpbGRyZW4uZm9yRWFjaCgoZWwpID0+IHNldFNiYkluZXJ0KGVsKSk7XG5cbiAgbGV0IGNoaWxkcmVuOiBIVE1MRWxlbWVudFtdID0gW107XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGdldEFuY2VzdG9ycyhvdmVybGF5LCBvdmVybGF5Um9vdCk7XG5cbiAgZm9yIChjb25zdCBlbCBvZiBhbmNlc3RvcnMpIHtcbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChcbiAgICAgIEFycmF5LmZyb20oZWwuY2hpbGRyZW4pLmZpbHRlcihcbiAgICAgICAgKGVsOiBFbGVtZW50KSA9PiBlbCAhPT0gb3ZlcmxheSAmJiAhYW5jZXN0b3JzLmluY2x1ZGVzKGVsIGFzIEhUTUxFbGVtZW50KSxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnRbXSxcbiAgICApO1xuICAgIGlmIChlbC5tYXRjaGVzKElTX09QRU5fT1ZFUkxBWV9RVUVSWSkpIHtcbiAgICAgIHNldERhdGFTYmJJbmVydChlbCk7XG4gICAgfVxuICB9XG5cbiAgY2hpbGRyZW4uZm9yRWFjaCgoZWwpID0+IHNldFNiYkluZXJ0KGVsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbmVydE1lY2hhbmlzbSgpOiB2b2lkIHtcbiAgY29uc3Qgb3Blbk92ZXJsYXlzID0gQXJyYXkuZnJvbShcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChJU19PUEVOX09WRVJMQVlfUVVFUlkpLFxuICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgaWYgKG9wZW5PdmVybGF5cy5sZW5ndGgpIHtcbiAgICBvcGVuT3ZlcmxheXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gK2VsLmdldEF0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnKSEgLSAxO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcsIGAke25ld1ZhbHVlfWApO1xuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUgPCAwKSB7XG4gICAgICAgIHJlbW92ZVNiYkluZXJ0KGVsKTtcbiAgICAgICAgQXJyYXkuZnJvbShlbC5jaGlsZHJlbikuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHJlbW92ZVNiYkluZXJ0KGVsIGFzIEhUTUxFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQXJyYXkuZnJvbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2JiLWluZXJ0XScpKS5mb3JFYWNoKChlbDogRWxlbWVudCkgPT5cbiAgICByZW1vdmVTYmJJbmVydChlbCBhcyBIVE1MRWxlbWVudCksXG4gICk7XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIHdpbGxPcGVuOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgICB3aWxsQ2xvc2U6IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZE9wZW46IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZENsb3NlOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgfVxufVxuIiwiZXhwb3J0IHR5cGUgRWxlbWVudFJlY3RhbmdsZSA9IFBpY2s8XG4gIEhUTUxFbGVtZW50LFxuICAnc2Nyb2xsSGVpZ2h0JyB8ICdjbGllbnRIZWlnaHQnIHwgJ29mZnNldEhlaWdodCcgfCAnc2Nyb2xsV2lkdGgnIHwgJ2NsaWVudFdpZHRoJyB8ICdvZmZzZXRXaWR0aCdcbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQWxpZ25tZW50IHtcbiAgaG9yaXpvbnRhbDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCc7XG4gIHZlcnRpY2FsOiAnYWJvdmUnIHwgJ2JlbG93Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYmJFbGVtZW50UG9zaXRpb25JbmZvcyB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIG1heEhlaWdodDogc3RyaW5nO1xuICBhbGlnbm1lbnQ6IFNiYkFsaWdubWVudDtcbn1cblxuLyoqXG4gKiBHZXRzIGhlaWdodCBhbmQgd2lkdGggb2YgYW4gZWxlbWVudCBldmVuIGlmIGl0J3MgaGlkZGVuIChgZGlzcGxheTogbm9uZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFJlY3RhbmdsZShlbDogSFRNTEVsZW1lbnQpOiBFbGVtZW50UmVjdGFuZ2xlIHtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuICAgIGVsZW1lbnREaXNwbGF5ID0gZWxlbWVudFN0eWxlLmRpc3BsYXksXG4gICAgZWxlbWVudE1heEhlaWdodCA9IHBhcnNlSW50KGVsZW1lbnRTdHlsZS5tYXhIZWlnaHQsIDEwKS50b1N0cmluZygpO1xuXG4gIC8vIElmIGl0IGlzIG5vdCBoaWRkZW4gd2UganVzdCByZXR1cm4gbm9ybWFsIGhlaWdodFxuICBpZiAoZWxlbWVudERpc3BsYXkgIT09ICdub25lJyAmJiBlbGVtZW50TWF4SGVpZ2h0ICE9PSAnMCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbC5zY3JvbGxIZWlnaHQsXG4gICAgICBjbGllbnRIZWlnaHQ6IGVsLmNsaWVudEhlaWdodCxcbiAgICAgIG9mZnNldEhlaWdodDogZWwub2Zmc2V0SGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IGVsLnNjcm9sbFdpZHRoLFxuICAgICAgY2xpZW50V2lkdGg6IGVsLmNsaWVudFdpZHRoLFxuICAgICAgb2Zmc2V0V2lkdGg6IGVsLm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZWxlbWVudCBpcyBoaWRkZW4gc286XG4gIC8vIG1ha2UgdGhlIGVsIGJsb2NrIGluIG9yZGVyIHRvIG1lYXN1cmUgaXRzIGhlaWdodCBidXQgc3RpbGwgYmUgaGlkZGVuXG4gIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICBjb25zdCBzY3JvbGxIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHQsXG4gICAgY2xpZW50SGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0LFxuICAgIG9mZnNldEhlaWdodCA9IGVsLm9mZnNldEhlaWdodCxcbiAgICBzY3JvbGxXaWR0aCA9IGVsLnNjcm9sbFdpZHRoLFxuICAgIGNsaWVudFdpZHRoID0gZWwuY2xpZW50V2lkdGgsXG4gICAgb2Zmc2V0V2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcblxuICAvLyBSZXZlcnRpbmcgdG8gdGhlIG9yaWdpbmFsIHZhbHVlc1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIGVsLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcblxuICByZXR1cm4geyBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCwgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGgsIG9mZnNldFdpZHRoIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGlzIGZpcmVkIG9uIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRPbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICghZWxlbWVudCB8fCAhZXZlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA8PSBldmVudC5jbGllbnRZICYmXG4gICAgZXZlbnQuY2xpZW50WSA8PSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ICYmXG4gICAgcmVjdC5sZWZ0IDw9IGV2ZW50LmNsaWVudFggJiZcbiAgICBldmVudC5jbGllbnRYIDw9IHJlY3QubGVmdCArIHJlY3Qud2lkdGhcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGEgdHJpZ2dlciBlbGVtZW50IGJ5IGV2YWx1YXRpbmdcbiAqIHRoZSBvcHRpbWFsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgc3BhY2UuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgb2Ygd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB0cmlnZ2VyIFRoZSBlbGVtZW50IHJlbGF0aXZlIHRvIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0gY29udGFpbmVyIFRoZSBlbGVtZW50IHdoaWNoIGhhcyB0aGUgcG9zaXRpb246Zml4ZWQgYXBwbGllZC5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gdGFrZSBpbnRvIGFjY291bnQgaW4gY2FsY3VsYXRpb25zIChvcHRpb25hbCkuXG4gKiBAcGFyYW0gcHJvcGVydGllcy52ZXJ0aWNhbE9mZnNldCBUaGUgZGlzdGFuY2UgdG8gYmUgYWRkZWQgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIHRyaWdnZXIgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLmhvcml6b250YWxPZmZzZXQgVGhlIGhvcml6b250YWwgb2Zmc2V0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLmNlbnRlcmVkIFdoZXRoZXIgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgY2VudGVyIGJ5IGRlZmF1bHQgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLnJlc3BvbnNpdmVIZWlnaHQgV2hldGhlciB0aGUgZWxlbWVudCBjYWxjdWxhdGVzIGl0cyBoZWlnaHQgYmFzZWQgb24gaXRzIGNvbnRlbnQgKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxlZnQgcG9zaXRpb24sIHRoZSB0b3AgcG9zaXRpb24sIHRoZSBtYXhpbXVtIGhlaWdodFxuICogb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBjdXJyZW50IGFsaWdubWVudCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50UG9zaXRpb24oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgcHJvcGVydGllcz86IHtcbiAgICB2ZXJ0aWNhbE9mZnNldD86IG51bWJlcjtcbiAgICBob3Jpem9udGFsT2Zmc2V0PzogbnVtYmVyO1xuICAgIGNlbnRlcmVkPzogYm9vbGVhbjtcbiAgICByZXNwb25zaXZlSGVpZ2h0PzogYm9vbGVhbjtcbiAgfSxcbik6IFNiYkVsZW1lbnRQb3NpdGlvbkluZm9zIHtcbiAgY29uc3QgbWF4V2lkdGhPZmZzZXQgPSAxNjtcbiAgY29uc3QgdmVydGljYWxPZmZzZXQgPSBwcm9wZXJ0aWVzPy52ZXJ0aWNhbE9mZnNldCB8fCAwO1xuICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gcHJvcGVydGllcz8uaG9yaXpvbnRhbE9mZnNldCB8fCAwO1xuICBjb25zdCByZXNwb25zaXZlSGVpZ2h0ID0gcHJvcGVydGllcz8ucmVzcG9uc2l2ZUhlaWdodCB8fCBmYWxzZTtcblxuICBjb25zdCB0cmlnZ2VyUmVjID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZWxlbWVudFJlYyA9IGdldEVsZW1lbnRSZWN0YW5nbGUoZWxlbWVudCk7XG5cbiAgY29uc3QgdHJpZ2dlckxlZnQgPSB0cmlnZ2VyUmVjLmxlZnQ7XG4gIGNvbnN0IHRyaWdnZXJUb3AgPSB0cmlnZ2VyUmVjLnRvcDtcblxuICBjb25zdCBhdmFpbGFibGVTcGFjZVJpZ2h0ID1cbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyUmVjLndpZHRoKTtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2VBYm92ZSA9IHRyaWdnZXJUb3AgLSB2ZXJ0aWNhbE9mZnNldDtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2VCZWxvdyA9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtICh0cmlnZ2VyVG9wICsgdHJpZ2dlclJlYy5oZWlnaHQgKyB2ZXJ0aWNhbE9mZnNldCk7XG5cbiAgLy8gRGVmYXVsdCBlbGVtZW50IGFsaWdubWVudCBpcyBcInN0YXJ0L2JlbG93XCJcbiAgbGV0IGVsZW1lbnRYUG9zaXRpb24gPSB0cmlnZ2VyTGVmdDtcbiAgbGV0IGVsZW1lbnRZUG9zaXRpb24gPSB0cmlnZ2VyVG9wICsgdHJpZ2dlclJlYy5oZWlnaHQgKyB2ZXJ0aWNhbE9mZnNldDtcbiAgbGV0IGVsZW1lbnRYT3ZlcmZsb3cgPSBlbGVtZW50UmVjLm9mZnNldFdpZHRoIC0gdHJpZ2dlclJlYy53aWR0aDtcbiAgY29uc3QgYWxpZ25tZW50OiBTYmJBbGlnbm1lbnQgPSB7IGhvcml6b250YWw6ICdzdGFydCcsIHZlcnRpY2FsOiAnYmVsb3cnIH07XG5cbiAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgbWF4LWhlaWdodFxuICBsZXQgZWxlbWVudE1heEhlaWdodCA9IGAke2F2YWlsYWJsZVNwYWNlQmVsb3cgLSB2ZXJ0aWNhbE9mZnNldH1weGA7XG5cbiAgLy8gQ2hlY2sgaWYgaG9yaXpvbnRhbCBhbGlnbm1lbnQgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBcImNlbnRlclwiXG4gIGlmIChcbiAgICBwcm9wZXJ0aWVzPy5jZW50ZXJlZCAmJlxuICAgIHRyaWdnZXJMZWZ0IC0gbWF4V2lkdGhPZmZzZXQgKyB0cmlnZ2VyUmVjLndpZHRoIC8gMiA+IGVsZW1lbnRSZWMub2Zmc2V0V2lkdGggLyAyICYmXG4gICAgYXZhaWxhYmxlU3BhY2VSaWdodCAtIG1heFdpZHRoT2Zmc2V0ID4gZWxlbWVudFhPdmVyZmxvdyAvIDJcbiAgKSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiAtPSBlbGVtZW50WE92ZXJmbG93IC89IDI7XG4gICAgYWxpZ25tZW50Lmhvcml6b250YWwgPSAnY2VudGVyJztcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGhvcml6b250YWwgYWxpZ25tZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gXCJlbmRcIlxuICBpZiAoYXZhaWxhYmxlU3BhY2VSaWdodCA8IGVsZW1lbnRYT3ZlcmZsb3cgJiYgdHJpZ2dlckxlZnQgPiBlbGVtZW50WE92ZXJmbG93KSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiA9IGVsZW1lbnRYUG9zaXRpb24gLSBlbGVtZW50WE92ZXJmbG93O1xuICAgIGFsaWdubWVudC5ob3Jpem9udGFsID0gJ2VuZCc7XG4gIH1cblxuICAvLyBBZGQgaG9yaXpvbnRhbCBvZmZzZXRcbiAgaWYgKFxuICAgIGhvcml6b250YWxPZmZzZXQgJiZcbiAgICBhbGlnbm1lbnQuaG9yaXpvbnRhbCAhPT0gJ2NlbnRlcicgJiZcbiAgICB0cmlnZ2VyUmVjLndpZHRoIC8gMiA8IGhvcml6b250YWxPZmZzZXRcbiAgKSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiArPSBob3Jpem9udGFsT2Zmc2V0ICogKGFsaWdubWVudC5ob3Jpem9udGFsID09PSAnc3RhcnQnID8gLTEgOiAxKTtcbiAgfVxuXG4gIC8vIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHNwYWNlIG9uIGJvdGggc2lkZXNcbiAgaWYgKFxuICAgICh0cmlnZ2VyTGVmdCA8IGVsZW1lbnRYT3ZlcmZsb3cgJiYgYXZhaWxhYmxlU3BhY2VSaWdodCA8IGVsZW1lbnRYT3ZlcmZsb3cpIHx8XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDwgZWxlbWVudFJlYy5vZmZzZXRXaWR0aFxuICApIHtcbiAgICBlbGVtZW50WFBvc2l0aW9uID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIGVsZW1lbnRSZWMub2Zmc2V0V2lkdGggLyAyO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdmVydGljYWwgYWxpZ25tZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gXCJhYm92ZVwiOlxuICBpZiAoXG4gICAgKGF2YWlsYWJsZVNwYWNlQmVsb3cgLSB2ZXJ0aWNhbE9mZnNldCA8IGVsZW1lbnRSZWMuc2Nyb2xsSGVpZ2h0ICYmXG4gICAgICBhdmFpbGFibGVTcGFjZUFib3ZlIC0gdmVydGljYWxPZmZzZXQgPlxuICAgICAgICAocmVzcG9uc2l2ZUhlaWdodCA/IGVsZW1lbnRSZWMuY2xpZW50SGVpZ2h0IDogZWxlbWVudFJlYy5zY3JvbGxIZWlnaHQpKSB8fFxuICAgIChhdmFpbGFibGVTcGFjZUFib3ZlID4gYXZhaWxhYmxlU3BhY2VCZWxvdyAmJlxuICAgICAgYXZhaWxhYmxlU3BhY2VCZWxvdyAtIHZlcnRpY2FsT2Zmc2V0IDwgZWxlbWVudFJlYy5jbGllbnRIZWlnaHQgJiZcbiAgICAgICFyZXNwb25zaXZlSGVpZ2h0KVxuICApIHtcbiAgICBlbGVtZW50WVBvc2l0aW9uID1cbiAgICAgIGF2YWlsYWJsZVNwYWNlQWJvdmUgPCBlbGVtZW50UmVjLnNjcm9sbEhlaWdodFxuICAgICAgICA/IGVsZW1lbnRZUG9zaXRpb24gLSB0cmlnZ2VyUmVjLmhlaWdodCAtIGF2YWlsYWJsZVNwYWNlQWJvdmUgLSB2ZXJ0aWNhbE9mZnNldFxuICAgICAgICA6IHRyaWdnZXJUb3AgLSBlbGVtZW50UmVjLmNsaWVudEhlaWdodCAtIHZlcnRpY2FsT2Zmc2V0O1xuXG4gICAgZWxlbWVudE1heEhlaWdodCA9IGAke2F2YWlsYWJsZVNwYWNlQWJvdmUgLSB2ZXJ0aWNhbE9mZnNldH1weGA7XG4gICAgYWxpZ25tZW50LnZlcnRpY2FsID0gJ2Fib3ZlJztcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8gV2hlbiB6b29taW5nIGluIFNhZmFyaSB0aGUgY29udGFpbmVyIHJlY3RhbmdsZSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSBwb3NpdGlvblxuICAvLyBhbmQgd2UgbmVlZCB0byByZS1hZGQgdGhlbSB0byB0aGUgY2FsY3VsYXRlZCBjb29yZGluYXRlcy5cbiAgaWYgKGNvbnRhaW5lclJlY3QubGVmdCA8IDApIHtcbiAgICBlbGVtZW50WFBvc2l0aW9uIC09IGNvbnRhaW5lclJlY3QubGVmdDtcbiAgfVxuXG4gIC8vIE5vcm1hbGx5IHRoZSBjb250YWluZXJSZWN0J3MgdG9wIHZhbHVlIHdvdWxkIGJlIHplcm8sIGhvd2V2ZXIgd2hlbiB0aGUgb3ZlcmxheSBpcyBhdHRhY2hlZCB0byBhbiBpbnB1dFxuICAvLyAoZS5nLiBpbiBhbiBhdXRvY29tcGxldGUpLCBtb2JpbGUgYnJvd3NlcnMgd2lsbCBzaGlmdCBldmVyeXRoaW5nIGluIG9yZGVyIHRvIHB1dCB0aGUgaW5wdXQgaW4gdGhlIG1pZGRsZVxuICAvLyBvZiB0aGUgc2NyZWVuIGFuZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgdmlydHVhbCBrZXlib2FyZC4gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIG9mZnNldCxcbiAgLy8gb3RoZXJ3aXNlIG91ciBwb3NpdGlvbmluZyB3aWxsIGJlIHRocm93biBvZmYuXG4gIC8vIEFkZGl0aW9uYWxseSwgd2hlbiB6b29taW5nIGluIFNhZmFyaSB0aGlzIGZpeGVzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi5cbiAgaWYgKGNvbnRhaW5lclJlY3QudG9wIDwgMCkge1xuICAgIGVsZW1lbnRZUG9zaXRpb24gLT0gY29udGFpbmVyUmVjdC50b3A7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogZWxlbWVudFlQb3NpdGlvbixcbiAgICBsZWZ0OiBlbGVtZW50WFBvc2l0aW9uLFxuICAgIG1heEhlaWdodDogZWxlbWVudE1heEhlaWdodCxcbiAgICBhbGlnbm1lbnQ6IGFsaWdubWVudCxcbiAgfTtcbn1cbiIsImltcG9ydCB7IGdldEVsZW1lbnRQb3NpdGlvbiB9IGZyb20gJy4vcG9zaXRpb24uanMnO1xuXG4vKipcbiAqIFBsYWNlcyB0aGUgb3ZlcmxheSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi5cbiAqIEBwYXJhbSBkaWFsb2cgVGhlIHJlZmVyZW5jZSB0byB0aGUgZGlhbG9nIGVsZW1lbnQuXG4gKiBAcGFyYW0gb3JpZ2luRWxlbWVudCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoZSBkaWFsb2cgaXMgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gb3B0aW9uQ29udGFpbmVyIFRoZSByZWZlcmVuY2UgdG8gdGhlIG9wdGlvbiBwYW5lbC5cbiAqIEBwYXJhbSBjb250YWluZXIgVGhlIGVsZW1lbnQgd2hpY2ggaGFzIHRoZSBwb3NpdGlvbjpmaXhlZCBhcHBsaWVkLlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0T3ZlcmxheVBvc2l0aW9uKFxuICBkaWFsb2c6IEhUTUxFbGVtZW50LFxuICBvcmlnaW5FbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgb3B0aW9uQ29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4pOiB2b2lkIHtcbiAgaWYgKCFkaWFsb2cgfHwgIW9yaWdpbkVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZXQgdGhlIHdpZHRoIHRvIG1hdGNoIHRoZSB0cmlnZ2VyIGVsZW1lbnRcbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC13aWR0aCcsIGAke29yaWdpbkVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgKTtcblxuICAvLyBTZXQgdGhlIG9yaWdpbiBoZWlnaHRcbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC1vcmlnaW4taGVpZ2h0JywgYCR7b3JpZ2luRWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgKTtcblxuICAvLyBDYWxjdWxhdGUgYW5kIHNldCB0aGUgcG9zaXRpb25cbiAgY29uc3QgcGFuZWxQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihvcHRpb25Db250YWluZXIsIG9yaWdpbkVsZW1lbnQsIGNvbnRhaW5lcik7XG5cbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC1wb3NpdGlvbi14JywgYCR7cGFuZWxQb3NpdGlvbi5sZWZ0fXB4YCk7XG4gIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLW9wdGlvbnMtcGFuZWwtcG9zaXRpb24teScsIGAke3BhbmVsUG9zaXRpb24udG9wfXB4YCk7XG4gIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLW9wdGlvbnMtcGFuZWwtbWF4LWhlaWdodCcsIHBhbmVsUG9zaXRpb24ubWF4SGVpZ2h0KTtcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9ucy1wYW5lbC1wb3NpdGlvbicsIHBhbmVsUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcbiAgb3JpZ2luRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9ucy1wYW5lbC1wb3NpdGlvbicsIHBhbmVsUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcbn1cbiIsIi8qKlxuICogQWRkIG1lYW5pbmdmdWwgYXJpYSBhdHRyaWJ1dGVzIHRvIHRyaWdnZXIgZWxlbWVudHMgdGhhdCBhcmUgY29ubmVjdGVkIHRvXG4gKiBvdmVybGF5IGVsZW1lbnRzIHN1Y2ggYXMgbWVudXMgYW5kIGRpYWxvZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgcG9wdXBUeXBlOiAnbWVudScgfCAnZGlhbG9nJyxcbiAgb3ZlcmxheUlkOiBzdHJpbmcsXG4gIHN0YXRlOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnLCBwb3B1cFR5cGUpO1xuICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIG92ZXJsYXlJZCk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgYCR7c3RhdGUgPT09ICdvcGVuaW5nJyB8fCBzdGF0ZSA9PT0gJ29wZW5lZCd9YCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFyaWEgYXR0cmlidXRlcyBmcm9tIHRyaWdnZXIgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRyaWdnZXI6IEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoIXRyaWdnZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcpO1xuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpO1xuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xufVxuXG4vKipcbiAqIEFkZCBtZWFuaW5nZnVsIGFyaWEgYXR0cmlidXRlcyB0byB0cmlnZ2VyIGVsZW1lbnQgb2Ygcm9sZT0nY29tYm9ib3gnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzKFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgb3ZlcmxheUlkOiBzdHJpbmcsXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuKTogdm9pZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2NvbWJvYm94Jyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWF1dG9jb21wbGV0ZScsICdsaXN0Jyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJywgJ2xpc3Rib3gnKTtcbiAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCBvdmVybGF5SWQpO1xuICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgb3ZlcmxheUlkKTsgLy8gRnJvbSBBcmlhIDEuMiB0aGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJ1dCBzYWZhcmkgc3RpbGwgbmVlZHMgaXRcbiAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBgJHtleHBhbmRlZH1gKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYXJpYSBhdHRyaWJ1dGVzIGZyb20gdHJpZ2dlciBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXModHJpZ2dlcj86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhdXRvY29tcGxldGUnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYXV0b2NvbXBsZXRlJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW93bnMnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKTtcbn1cbiJdLCJuYW1lcyI6WyJlbCJdLCJtYXBwaW5ncyI6IjtBQUdBLE1BQU0sd0JBQXdCO0FBTXZCLFNBQVMsdUJBQXVDO0FBQzlDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFUO0FBS0EsTUFBTSxlQUFlLENBQUMsU0FBc0IsU0FBcUM7QUFDL0UsTUFBSSxLQUFLLFFBQVE7QUFDakIsUUFBTSxZQUEyQixDQUFBO0FBQ2pDLFNBQU8sSUFBSTtBQUNULGNBQVUsS0FBSyxFQUFFO0FBQ2pCLFFBQUksT0FBTyxNQUFNO0FBQ2YsV0FBSyxHQUFHO0FBQUEsSUFBQSxPQUNIO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLFNBQUE7QUFDVDtBQUVBLE1BQU0sa0JBQWtCLENBQUMsT0FBMEI7QUFDOUMsS0FBQTtBQUFBLElBQ0Q7QUFBQSxJQUNBLEdBQUcsRUFBRSxHQUFHLGFBQWEsZ0JBQWdCLEtBQUssVUFBYyxLQUFLLENBQUM7QUFBQSxFQUFBO0FBRWxFO0FBS0EsTUFBTSxjQUFjLENBQUMsT0FBMEI7QUFDekMsTUFBQSxDQUFDLEdBQUcsT0FBTztBQUNiLE9BQUcsUUFBUTtBQUNQLFFBQUEsR0FBRyxRQUFRLHFCQUFxQixHQUFHO0FBQ3JDLHNCQUFnQixFQUFFO0FBQUEsSUFBQSxPQUNiO0FBQ0YsU0FBQSxnQkFBZ0Isa0JBQWtCLElBQUk7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsR0FBRyxhQUFhLGFBQWEsR0FBRztBQUNoQyxPQUFBLGFBQWEsZUFBZSxNQUFNO0FBQ2xDLE9BQUEsZ0JBQWdCLHdCQUF3QixJQUFJO0FBQUEsRUFDakQ7QUFDRjtBQUtBLE1BQU0saUJBQWlCLENBQUMsT0FBMEI7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
240
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvb3ZlcmxheS9vdmVybGF5LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvb3ZlcmxheS9wb3NpdGlvbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL292ZXJsYXkvb3ZlcmxheS1vcHRpb24tcGFuZWwudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9vdmVybGF5L292ZXJsYXktdHJpZ2dlci1hdHRyaWJ1dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmNvbnN0IElTX09QRU5fT1ZFUkxBWV9RVUVSWSA9IGA6aXMoc2JiLWRpYWxvZywgc2JiLW5hdmlnYXRpb24sIHNiYi1tZW51LCBzYmItb3ZlcmxheSlbZGF0YS1zdGF0ZT0nb3BlbmVkJ11gO1xuXG4vKipcbiAqIFVzZWQgdG8gY3JlYXRlIHRoZSBcIndyYXBwaW5nXCIgZWZmZWN0IGFyb3VuZCB0aGUgYW5jaG9yIGZvciBvdmVybGF5cyAoZXMuIGF1dG9jb21wbGV0ZSlcbiAqIFdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlICdvdmVybGF5R2FwRml4Q29ybmVycygpJyBmdW5jdGlvbiBpbiAnb3ZlcmxheS50cydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlHYXBGaXhDb3JuZXJzKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgcmV0dXJuIGh0bWxgXG4gICAgPGRpdiBjbGFzcz1cInNiYi1nYXAtZml4LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZ2FwLWZpeC1jb3JuZXJcIiBpZD1cImxlZnRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2JiLWdhcC1maXgtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1nYXAtZml4LWNvcm5lclwiIGlkPVwicmlnaHRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBvdmVybGF5LlxuICovXG5jb25zdCBnZXRBbmNlc3RvcnMgPSAob3ZlcmxheTogSFRNTEVsZW1lbnQsIHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSA9PiB7XG4gIGxldCBlbCA9IG92ZXJsYXkucGFyZW50RWxlbWVudDtcbiAgY29uc3QgYW5jZXN0b3JzOiBIVE1MRWxlbWVudFtdID0gW107XG4gIHdoaWxlIChlbCkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGVsKTtcbiAgICBpZiAoZWwgIT09IHJvb3QpIHtcbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmNlc3RvcnM7XG59O1xuXG5jb25zdCBzZXREYXRhU2JiSW5lcnQgPSAoZWw6IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gIGVsLnNldEF0dHJpYnV0ZShcbiAgICAnZGF0YS1zYmItaW5lcnQnLFxuICAgIGAkeysoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpID8/IHVuZGVmaW5lZCkhICsgMSB8fCAwfWAsXG4gICk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaW5lcnQgYW5kIHRoZSBkYXRhLXNiYi1pbmVydCBhdHRyaWJ1dGVzLlxuICovXG5jb25zdCBzZXRTYmJJbmVydCA9IChlbDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgaWYgKCFlbC5pbmVydCkge1xuICAgIGVsLmluZXJ0ID0gdHJ1ZTtcbiAgICBpZiAoZWwubWF0Y2hlcyhJU19PUEVOX09WRVJMQVlfUVVFUlkpKSB7XG4gICAgICBzZXREYXRhU2JiSW5lcnQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWluZXJ0JywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFlbC5oYXNBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaW5lcnQgYW5kIHRoZSBkYXRhLXNiYi1pbmVydCBhdHRyaWJ1dGVzLlxuICovXG5jb25zdCByZW1vdmVTYmJJbmVydCA9IChlbDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnKSkge1xuICAgIGVsLmluZXJ0ID0gZmFsc2U7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcpO1xuICB9XG5cbiAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1zYmItYXJpYS1oaWRkZW4nKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2JiLWFyaWEtaGlkZGVuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyBpbmVydCB0byBldmVyeSBvdGhlciBlbGVtZW50IG9uIHRoZSBwYWdlIGV4Y2VwdCB0aGUgb3ZlcmxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5SW5lcnRNZWNoYW5pc20ob3ZlcmxheTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgcmVtb3ZlU2JiSW5lcnQob3ZlcmxheSk7XG5cbiAgY29uc3Qgb3ZlcmxheVJvb3QgPSBvdmVybGF5LmNsb3Nlc3QoJ2JvZHkgPiAqJykgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IGRvY3VtZW50Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgPiAqJykpLmZpbHRlcihcbiAgICAoZWwpID0+IGVsICE9PSBvdmVybGF5Um9vdCxcbiAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIGRvY3VtZW50Q2hpbGRyZW4uZm9yRWFjaCgoZWwpID0+IHNldFNiYkluZXJ0KGVsKSk7XG5cbiAgbGV0IGNoaWxkcmVuOiBIVE1MRWxlbWVudFtdID0gW107XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGdldEFuY2VzdG9ycyhvdmVybGF5LCBvdmVybGF5Um9vdCk7XG5cbiAgZm9yIChjb25zdCBlbCBvZiBhbmNlc3RvcnMpIHtcbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChcbiAgICAgIEFycmF5LmZyb20oZWwuY2hpbGRyZW4pLmZpbHRlcihcbiAgICAgICAgKGVsOiBFbGVtZW50KSA9PiBlbCAhPT0gb3ZlcmxheSAmJiAhYW5jZXN0b3JzLmluY2x1ZGVzKGVsIGFzIEhUTUxFbGVtZW50KSxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnRbXSxcbiAgICApO1xuICAgIGlmIChlbC5tYXRjaGVzKElTX09QRU5fT1ZFUkxBWV9RVUVSWSkpIHtcbiAgICAgIHNldERhdGFTYmJJbmVydChlbCk7XG4gICAgfVxuICB9XG5cbiAgY2hpbGRyZW4uZm9yRWFjaCgoZWwpID0+IHNldFNiYkluZXJ0KGVsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbmVydE1lY2hhbmlzbSgpOiB2b2lkIHtcbiAgY29uc3Qgb3Blbk92ZXJsYXlzID0gQXJyYXkuZnJvbShcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChJU19PUEVOX09WRVJMQVlfUVVFUlkpLFxuICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgaWYgKG9wZW5PdmVybGF5cy5sZW5ndGgpIHtcbiAgICBvcGVuT3ZlcmxheXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gK2VsLmdldEF0dHJpYnV0ZSgnZGF0YS1zYmItaW5lcnQnKSEgLSAxO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXNiYi1pbmVydCcsIGAke25ld1ZhbHVlfWApO1xuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUgPCAwKSB7XG4gICAgICAgIHJlbW92ZVNiYkluZXJ0KGVsKTtcbiAgICAgICAgQXJyYXkuZnJvbShlbC5jaGlsZHJlbikuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHJlbW92ZVNiYkluZXJ0KGVsIGFzIEhUTUxFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQXJyYXkuZnJvbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2JiLWluZXJ0XScpKS5mb3JFYWNoKChlbDogRWxlbWVudCkgPT5cbiAgICByZW1vdmVTYmJJbmVydChlbCBhcyBIVE1MRWxlbWVudCksXG4gICk7XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIHdpbGxPcGVuOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgICB3aWxsQ2xvc2U6IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZE9wZW46IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICAgIGRpZENsb3NlOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgfVxufVxuIiwiZXhwb3J0IHR5cGUgRWxlbWVudFJlY3RhbmdsZSA9IFBpY2s8XG4gIEhUTUxFbGVtZW50LFxuICAnc2Nyb2xsSGVpZ2h0JyB8ICdjbGllbnRIZWlnaHQnIHwgJ29mZnNldEhlaWdodCcgfCAnc2Nyb2xsV2lkdGgnIHwgJ2NsaWVudFdpZHRoJyB8ICdvZmZzZXRXaWR0aCdcbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQWxpZ25tZW50IHtcbiAgaG9yaXpvbnRhbDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCc7XG4gIHZlcnRpY2FsOiAnYWJvdmUnIHwgJ2JlbG93Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYmJFbGVtZW50UG9zaXRpb25JbmZvcyB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIG1heEhlaWdodDogc3RyaW5nO1xuICBhbGlnbm1lbnQ6IFNiYkFsaWdubWVudDtcbn1cblxuLyoqXG4gKiBHZXRzIGhlaWdodCBhbmQgd2lkdGggb2YgYW4gZWxlbWVudCBldmVuIGlmIGl0J3MgaGlkZGVuIChgZGlzcGxheTogbm9uZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFJlY3RhbmdsZShlbDogSFRNTEVsZW1lbnQpOiBFbGVtZW50UmVjdGFuZ2xlIHtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuICAgIGVsZW1lbnREaXNwbGF5ID0gZWxlbWVudFN0eWxlLmRpc3BsYXksXG4gICAgZWxlbWVudE1heEhlaWdodCA9IHBhcnNlSW50KGVsZW1lbnRTdHlsZS5tYXhIZWlnaHQsIDEwKS50b1N0cmluZygpO1xuXG4gIC8vIElmIGl0IGlzIG5vdCBoaWRkZW4gd2UganVzdCByZXR1cm4gbm9ybWFsIGhlaWdodFxuICBpZiAoZWxlbWVudERpc3BsYXkgIT09ICdub25lJyAmJiBlbGVtZW50TWF4SGVpZ2h0ICE9PSAnMCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbC5zY3JvbGxIZWlnaHQsXG4gICAgICBjbGllbnRIZWlnaHQ6IGVsLmNsaWVudEhlaWdodCxcbiAgICAgIG9mZnNldEhlaWdodDogZWwub2Zmc2V0SGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IGVsLnNjcm9sbFdpZHRoLFxuICAgICAgY2xpZW50V2lkdGg6IGVsLmNsaWVudFdpZHRoLFxuICAgICAgb2Zmc2V0V2lkdGg6IGVsLm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZWxlbWVudCBpcyBoaWRkZW4gc286XG4gIC8vIG1ha2UgdGhlIGVsIGJsb2NrIGluIG9yZGVyIHRvIG1lYXN1cmUgaXRzIGhlaWdodCBidXQgc3RpbGwgYmUgaGlkZGVuXG4gIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICBjb25zdCBzY3JvbGxIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHQsXG4gICAgY2xpZW50SGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0LFxuICAgIG9mZnNldEhlaWdodCA9IGVsLm9mZnNldEhlaWdodCxcbiAgICBzY3JvbGxXaWR0aCA9IGVsLnNjcm9sbFdpZHRoLFxuICAgIGNsaWVudFdpZHRoID0gZWwuY2xpZW50V2lkdGgsXG4gICAgb2Zmc2V0V2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcblxuICAvLyBSZXZlcnRpbmcgdG8gdGhlIG9yaWdpbmFsIHZhbHVlc1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIGVsLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcblxuICByZXR1cm4geyBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCwgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGgsIG9mZnNldFdpZHRoIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGlzIGZpcmVkIG9uIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRPbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICghZWxlbWVudCB8fCAhZXZlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA8PSBldmVudC5jbGllbnRZICYmXG4gICAgZXZlbnQuY2xpZW50WSA8PSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ICYmXG4gICAgcmVjdC5sZWZ0IDw9IGV2ZW50LmNsaWVudFggJiZcbiAgICBldmVudC5jbGllbnRYIDw9IHJlY3QubGVmdCArIHJlY3Qud2lkdGhcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGEgdHJpZ2dlciBlbGVtZW50IGJ5IGV2YWx1YXRpbmdcbiAqIHRoZSBvcHRpbWFsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgc3BhY2UuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgb2Ygd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB0cmlnZ2VyIFRoZSBlbGVtZW50IHJlbGF0aXZlIHRvIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0gY29udGFpbmVyIFRoZSBlbGVtZW50IHdoaWNoIGhhcyB0aGUgcG9zaXRpb246Zml4ZWQgYXBwbGllZC5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gdGFrZSBpbnRvIGFjY291bnQgaW4gY2FsY3VsYXRpb25zIChvcHRpb25hbCkuXG4gKiBAcGFyYW0gcHJvcGVydGllcy52ZXJ0aWNhbE9mZnNldCBUaGUgZGlzdGFuY2UgdG8gYmUgYWRkZWQgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIHRyaWdnZXIgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLmhvcml6b250YWxPZmZzZXQgVGhlIGhvcml6b250YWwgb2Zmc2V0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLmNlbnRlcmVkIFdoZXRoZXIgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgY2VudGVyIGJ5IGRlZmF1bHQgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzLnJlc3BvbnNpdmVIZWlnaHQgV2hldGhlciB0aGUgZWxlbWVudCBjYWxjdWxhdGVzIGl0cyBoZWlnaHQgYmFzZWQgb24gaXRzIGNvbnRlbnQgKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxlZnQgcG9zaXRpb24sIHRoZSB0b3AgcG9zaXRpb24sIHRoZSBtYXhpbXVtIGhlaWdodFxuICogb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBjdXJyZW50IGFsaWdubWVudCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50UG9zaXRpb24oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgcHJvcGVydGllcz86IHtcbiAgICB2ZXJ0aWNhbE9mZnNldD86IG51bWJlcjtcbiAgICBob3Jpem9udGFsT2Zmc2V0PzogbnVtYmVyO1xuICAgIGNlbnRlcmVkPzogYm9vbGVhbjtcbiAgICByZXNwb25zaXZlSGVpZ2h0PzogYm9vbGVhbjtcbiAgfSxcbik6IFNiYkVsZW1lbnRQb3NpdGlvbkluZm9zIHtcbiAgY29uc3QgbWF4V2lkdGhPZmZzZXQgPSAxNjtcbiAgY29uc3QgdmVydGljYWxPZmZzZXQgPSBwcm9wZXJ0aWVzPy52ZXJ0aWNhbE9mZnNldCB8fCAwO1xuICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gcHJvcGVydGllcz8uaG9yaXpvbnRhbE9mZnNldCB8fCAwO1xuICBjb25zdCByZXNwb25zaXZlSGVpZ2h0ID0gcHJvcGVydGllcz8ucmVzcG9uc2l2ZUhlaWdodCB8fCBmYWxzZTtcblxuICBjb25zdCB0cmlnZ2VyUmVjID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZWxlbWVudFJlYyA9IGdldEVsZW1lbnRSZWN0YW5nbGUoZWxlbWVudCk7XG5cbiAgY29uc3QgdHJpZ2dlckxlZnQgPSB0cmlnZ2VyUmVjLmxlZnQ7XG4gIGNvbnN0IHRyaWdnZXJUb3AgPSB0cmlnZ2VyUmVjLnRvcDtcblxuICBjb25zdCBhdmFpbGFibGVTcGFjZVJpZ2h0ID1cbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyUmVjLndpZHRoKTtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2VBYm92ZSA9IHRyaWdnZXJUb3AgLSB2ZXJ0aWNhbE9mZnNldDtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2VCZWxvdyA9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtICh0cmlnZ2VyVG9wICsgdHJpZ2dlclJlYy5oZWlnaHQgKyB2ZXJ0aWNhbE9mZnNldCk7XG5cbiAgLy8gRGVmYXVsdCBlbGVtZW50IGFsaWdubWVudCBpcyBcInN0YXJ0L2JlbG93XCJcbiAgbGV0IGVsZW1lbnRYUG9zaXRpb24gPSB0cmlnZ2VyTGVmdDtcbiAgbGV0IGVsZW1lbnRZUG9zaXRpb24gPSB0cmlnZ2VyVG9wICsgdHJpZ2dlclJlYy5oZWlnaHQgKyB2ZXJ0aWNhbE9mZnNldDtcbiAgbGV0IGVsZW1lbnRYT3ZlcmZsb3cgPSBlbGVtZW50UmVjLm9mZnNldFdpZHRoIC0gdHJpZ2dlclJlYy53aWR0aDtcbiAgY29uc3QgYWxpZ25tZW50OiBTYmJBbGlnbm1lbnQgPSB7IGhvcml6b250YWw6ICdzdGFydCcsIHZlcnRpY2FsOiAnYmVsb3cnIH07XG5cbiAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgbWF4LWhlaWdodFxuICBsZXQgZWxlbWVudE1heEhlaWdodCA9IGAke2F2YWlsYWJsZVNwYWNlQmVsb3cgLSB2ZXJ0aWNhbE9mZnNldH1weGA7XG5cbiAgLy8gQ2hlY2sgaWYgaG9yaXpvbnRhbCBhbGlnbm1lbnQgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBcImNlbnRlclwiXG4gIGlmIChcbiAgICBwcm9wZXJ0aWVzPy5jZW50ZXJlZCAmJlxuICAgIHRyaWdnZXJMZWZ0IC0gbWF4V2lkdGhPZmZzZXQgKyB0cmlnZ2VyUmVjLndpZHRoIC8gMiA+IGVsZW1lbnRSZWMub2Zmc2V0V2lkdGggLyAyICYmXG4gICAgYXZhaWxhYmxlU3BhY2VSaWdodCAtIG1heFdpZHRoT2Zmc2V0ID4gZWxlbWVudFhPdmVyZmxvdyAvIDJcbiAgKSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiAtPSBlbGVtZW50WE92ZXJmbG93IC89IDI7XG4gICAgYWxpZ25tZW50Lmhvcml6b250YWwgPSAnY2VudGVyJztcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGhvcml6b250YWwgYWxpZ25tZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gXCJlbmRcIlxuICBpZiAoYXZhaWxhYmxlU3BhY2VSaWdodCA8IGVsZW1lbnRYT3ZlcmZsb3cgJiYgdHJpZ2dlckxlZnQgPiBlbGVtZW50WE92ZXJmbG93KSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiA9IGVsZW1lbnRYUG9zaXRpb24gLSBlbGVtZW50WE92ZXJmbG93O1xuICAgIGFsaWdubWVudC5ob3Jpem9udGFsID0gJ2VuZCc7XG4gIH1cblxuICAvLyBBZGQgaG9yaXpvbnRhbCBvZmZzZXRcbiAgaWYgKFxuICAgIGhvcml6b250YWxPZmZzZXQgJiZcbiAgICBhbGlnbm1lbnQuaG9yaXpvbnRhbCAhPT0gJ2NlbnRlcicgJiZcbiAgICB0cmlnZ2VyUmVjLndpZHRoIC8gMiA8IGhvcml6b250YWxPZmZzZXRcbiAgKSB7XG4gICAgZWxlbWVudFhQb3NpdGlvbiArPSBob3Jpem9udGFsT2Zmc2V0ICogKGFsaWdubWVudC5ob3Jpem9udGFsID09PSAnc3RhcnQnID8gLTEgOiAxKTtcbiAgfVxuXG4gIC8vIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHNwYWNlIG9uIGJvdGggc2lkZXNcbiAgaWYgKFxuICAgICh0cmlnZ2VyTGVmdCA8IGVsZW1lbnRYT3ZlcmZsb3cgJiYgYXZhaWxhYmxlU3BhY2VSaWdodCA8IGVsZW1lbnRYT3ZlcmZsb3cpIHx8XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDwgZWxlbWVudFJlYy5vZmZzZXRXaWR0aFxuICApIHtcbiAgICBlbGVtZW50WFBvc2l0aW9uID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIGVsZW1lbnRSZWMub2Zmc2V0V2lkdGggLyAyO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdmVydGljYWwgYWxpZ25tZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gXCJhYm92ZVwiOlxuICBpZiAoXG4gICAgKGF2YWlsYWJsZVNwYWNlQmVsb3cgLSB2ZXJ0aWNhbE9mZnNldCA8IGVsZW1lbnRSZWMuc2Nyb2xsSGVpZ2h0ICYmXG4gICAgICBhdmFpbGFibGVTcGFjZUFib3ZlIC0gdmVydGljYWxPZmZzZXQgPlxuICAgICAgICAocmVzcG9uc2l2ZUhlaWdodCA/IGVsZW1lbnRSZWMuY2xpZW50SGVpZ2h0IDogZWxlbWVudFJlYy5zY3JvbGxIZWlnaHQpKSB8fFxuICAgIChhdmFpbGFibGVTcGFjZUFib3ZlID4gYXZhaWxhYmxlU3BhY2VCZWxvdyAmJlxuICAgICAgYXZhaWxhYmxlU3BhY2VCZWxvdyAtIHZlcnRpY2FsT2Zmc2V0IDwgZWxlbWVudFJlYy5jbGllbnRIZWlnaHQgJiZcbiAgICAgICFyZXNwb25zaXZlSGVpZ2h0KVxuICApIHtcbiAgICBlbGVtZW50WVBvc2l0aW9uID1cbiAgICAgIGF2YWlsYWJsZVNwYWNlQWJvdmUgPCBlbGVtZW50UmVjLnNjcm9sbEhlaWdodFxuICAgICAgICA/IGVsZW1lbnRZUG9zaXRpb24gLSB0cmlnZ2VyUmVjLmhlaWdodCAtIGF2YWlsYWJsZVNwYWNlQWJvdmUgLSB2ZXJ0aWNhbE9mZnNldFxuICAgICAgICA6IHRyaWdnZXJUb3AgLSBlbGVtZW50UmVjLmNsaWVudEhlaWdodCAtIHZlcnRpY2FsT2Zmc2V0O1xuXG4gICAgZWxlbWVudE1heEhlaWdodCA9IGAke2F2YWlsYWJsZVNwYWNlQWJvdmUgLSB2ZXJ0aWNhbE9mZnNldH1weGA7XG4gICAgYWxpZ25tZW50LnZlcnRpY2FsID0gJ2Fib3ZlJztcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8gV2hlbiB6b29taW5nIGluIFNhZmFyaSB0aGUgY29udGFpbmVyIHJlY3RhbmdsZSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSBwb3NpdGlvblxuICAvLyBhbmQgd2UgbmVlZCB0byByZS1hZGQgdGhlbSB0byB0aGUgY2FsY3VsYXRlZCBjb29yZGluYXRlcy5cbiAgaWYgKGNvbnRhaW5lclJlY3QubGVmdCA8IDApIHtcbiAgICBlbGVtZW50WFBvc2l0aW9uIC09IGNvbnRhaW5lclJlY3QubGVmdDtcbiAgfVxuXG4gIC8vIE5vcm1hbGx5IHRoZSBjb250YWluZXJSZWN0J3MgdG9wIHZhbHVlIHdvdWxkIGJlIHplcm8sIGhvd2V2ZXIgd2hlbiB0aGUgb3ZlcmxheSBpcyBhdHRhY2hlZCB0byBhbiBpbnB1dFxuICAvLyAoZS5nLiBpbiBhbiBhdXRvY29tcGxldGUpLCBtb2JpbGUgYnJvd3NlcnMgd2lsbCBzaGlmdCBldmVyeXRoaW5nIGluIG9yZGVyIHRvIHB1dCB0aGUgaW5wdXQgaW4gdGhlIG1pZGRsZVxuICAvLyBvZiB0aGUgc2NyZWVuIGFuZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgdmlydHVhbCBrZXlib2FyZC4gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIG9mZnNldCxcbiAgLy8gb3RoZXJ3aXNlIG91ciBwb3NpdGlvbmluZyB3aWxsIGJlIHRocm93biBvZmYuXG4gIC8vIEFkZGl0aW9uYWxseSwgd2hlbiB6b29taW5nIGluIFNhZmFyaSB0aGlzIGZpeGVzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi5cbiAgaWYgKGNvbnRhaW5lclJlY3QudG9wIDwgMCkge1xuICAgIGVsZW1lbnRZUG9zaXRpb24gLT0gY29udGFpbmVyUmVjdC50b3A7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogZWxlbWVudFlQb3NpdGlvbixcbiAgICBsZWZ0OiBlbGVtZW50WFBvc2l0aW9uLFxuICAgIG1heEhlaWdodDogZWxlbWVudE1heEhlaWdodCxcbiAgICBhbGlnbm1lbnQ6IGFsaWdubWVudCxcbiAgfTtcbn1cbiIsImltcG9ydCB7IGdldEVsZW1lbnRQb3NpdGlvbiB9IGZyb20gJy4vcG9zaXRpb24uanMnO1xuXG4vKipcbiAqIFBsYWNlcyB0aGUgb3ZlcmxheSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi5cbiAqIEBwYXJhbSBkaWFsb2cgVGhlIHJlZmVyZW5jZSB0byB0aGUgZGlhbG9nIGVsZW1lbnQuXG4gKiBAcGFyYW0gb3JpZ2luRWxlbWVudCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoZSBkaWFsb2cgaXMgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gb3B0aW9uQ29udGFpbmVyIFRoZSByZWZlcmVuY2UgdG8gdGhlIG9wdGlvbiBwYW5lbC5cbiAqIEBwYXJhbSBjb250YWluZXIgVGhlIGVsZW1lbnQgd2hpY2ggaGFzIHRoZSBwb3NpdGlvbjpmaXhlZCBhcHBsaWVkLlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0T3ZlcmxheVBvc2l0aW9uKFxuICBkaWFsb2c6IEhUTUxFbGVtZW50LFxuICBvcmlnaW5FbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgb3B0aW9uQ29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4pOiB2b2lkIHtcbiAgaWYgKCFkaWFsb2cgfHwgIW9yaWdpbkVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZXQgdGhlIHdpZHRoIHRvIG1hdGNoIHRoZSB0cmlnZ2VyIGVsZW1lbnRcbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC13aWR0aCcsIGAke29yaWdpbkVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgKTtcblxuICAvLyBTZXQgdGhlIG9yaWdpbiBoZWlnaHRcbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC1vcmlnaW4taGVpZ2h0JywgYCR7b3JpZ2luRWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgKTtcblxuICAvLyBDYWxjdWxhdGUgYW5kIHNldCB0aGUgcG9zaXRpb25cbiAgY29uc3QgcGFuZWxQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihvcHRpb25Db250YWluZXIsIG9yaWdpbkVsZW1lbnQsIGNvbnRhaW5lcik7XG5cbiAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItb3B0aW9ucy1wYW5lbC1wb3NpdGlvbi14JywgYCR7cGFuZWxQb3NpdGlvbi5sZWZ0fXB4YCk7XG4gIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLW9wdGlvbnMtcGFuZWwtcG9zaXRpb24teScsIGAke3BhbmVsUG9zaXRpb24udG9wfXB4YCk7XG4gIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLW9wdGlvbnMtcGFuZWwtbWF4LWhlaWdodCcsIHBhbmVsUG9zaXRpb24ubWF4SGVpZ2h0KTtcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9ucy1wYW5lbC1wb3NpdGlvbicsIHBhbmVsUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcbiAgb3JpZ2luRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9ucy1wYW5lbC1wb3NpdGlvbicsIHBhbmVsUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcbn1cbiIsIi8qKlxuICogQWRkIG1lYW5pbmdmdWwgYXJpYSBhdHRyaWJ1dGVzIHRvIHRyaWdnZXIgZWxlbWVudHMgdGhhdCBhcmUgY29ubmVjdGVkIHRvXG4gKiBvdmVybGF5IGVsZW1lbnRzIHN1Y2ggYXMgbWVudXMgYW5kIGRpYWxvZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgcG9wdXBUeXBlOiAnbWVudScgfCAnZGlhbG9nJyxcbiAgb3ZlcmxheUlkOiBzdHJpbmcsXG4gIHN0YXRlOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnLCBwb3B1cFR5cGUpO1xuICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIG92ZXJsYXlJZCk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgYCR7c3RhdGUgPT09ICdvcGVuaW5nJyB8fCBzdGF0ZSA9PT0gJ29wZW5lZCd9YCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFyaWEgYXR0cmlidXRlcyBmcm9tIHRyaWdnZXIgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRyaWdnZXI6IEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoIXRyaWdnZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcpO1xuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpO1xuICB0cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xufVxuXG4vKipcbiAqIEFkZCBtZWFuaW5nZnVsIGFyaWEgYXR0cmlidXRlcyB0byB0cmlnZ2VyIGVsZW1lbnQgb2Ygcm9sZT0nY29tYm9ib3gnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzKFxuICB0cmlnZ2VyOiBIVE1MRWxlbWVudCxcbiAgb3ZlcmxheUlkOiBzdHJpbmcsXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICBoYXNQb3B1cDogJ2xpc3Rib3gnIHwgJ2dyaWQnID0gJ2xpc3Rib3gnLFxuKTogdm9pZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2NvbWJvYm94Jyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWF1dG9jb21wbGV0ZScsICdsaXN0Jyk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJywgaGFzUG9wdXApO1xuICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIG92ZXJsYXlJZCk7XG4gIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLW93bnMnLCBvdmVybGF5SWQpOyAvLyBGcm9tIEFyaWEgMS4yIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBzYWZhcmkgc3RpbGwgbmVlZHMgaXRcbiAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBgJHtleHBhbmRlZH1gKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYXJpYSBhdHRyaWJ1dGVzIGZyb20gdHJpZ2dlciBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXModHJpZ2dlcj86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGlmICghdHJpZ2dlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhdXRvY29tcGxldGUnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYXV0b2NvbXBsZXRlJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gIHRyaWdnZXIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW93bnMnKTtcbiAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKTtcbn1cbiJdLCJuYW1lcyI6WyJlbCJdLCJtYXBwaW5ncyI6IjtBQUdBLE1BQU0sd0JBQXdCO0FBTXZCLFNBQVMsdUJBQXVDO0FBQzlDLFNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFUO0FBS0EsTUFBTSxlQUFlLENBQUMsU0FBc0IsU0FBcUM7QUFDL0UsTUFBSSxLQUFLLFFBQVE7QUFDakIsUUFBTSxZQUEyQixDQUFBO0FBQ2pDLFNBQU8sSUFBSTtBQUNULGNBQVUsS0FBSyxFQUFFO0FBQ2pCLFFBQUksT0FBTyxNQUFNO0FBQ2YsV0FBSyxHQUFHO0FBQUEsSUFBQSxPQUNIO0FBQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLFNBQUE7QUFDVDtBQUVBLE1BQU0sa0JBQWtCLENBQUMsT0FBMEI7QUFDOUMsS0FBQTtBQUFBLElBQ0Q7QUFBQSxJQUNBLEdBQUcsRUFBRSxHQUFHLGFBQWEsZ0JBQWdCLEtBQUssVUFBYyxLQUFLLENBQUM7QUFBQSxFQUFBO0FBRWxFO0FBS0EsTUFBTSxjQUFjLENBQUMsT0FBMEI7QUFDekMsTUFBQSxDQUFDLEdBQUcsT0FBTztBQUNiLE9BQUcsUUFBUTtBQUNQLFFBQUEsR0FBRyxRQUFRLHFCQUFxQixHQUFHO0FBQ3JDLHNCQUFnQixFQUFFO0FBQUEsSUFBQSxPQUNiO0FBQ0YsU0FBQSxnQkFBZ0Isa0JBQWtCLElBQUk7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsR0FBRyxhQUFhLGFBQWEsR0FBRztBQUNoQyxPQUFBLGFBQWEsZUFBZSxNQUFNO0FBQ2xDLE9BQUEsZ0JBQWdCLHdCQUF3QixJQUFJ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
@@ -4,16 +4,16 @@ import { DateAdapter } from '../../core/datetime.js';
4
4
  import { SbbDatepickerElement, SbbInputUpdateEvent } from '../datepicker.js';
5
5
 
6
6
  declare const SbbDatepickerButton_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & typeof SbbButtonBaseElement;
7
- export declare abstract class SbbDatepickerButton extends SbbDatepickerButton_base {
7
+ export declare abstract class SbbDatepickerButton<T = Date> extends SbbDatepickerButton_base {
8
8
  /** Datepicker reference. */
9
- datePicker?: string | SbbDatepickerElement;
9
+ datePicker?: string | SbbDatepickerElement<T>;
10
10
  /** The boundary date (min/max) as set in the date-picker's input. */
11
11
  protected boundary: string | number | null;
12
12
  /** Whether the component is disabled due date equals to boundary date. */
13
13
  private _disabled;
14
14
  /** Whether the component is disabled due date-picker's input disabled. */
15
15
  private _inputDisabled;
16
- protected datePickerElement?: SbbDatepickerElement | null;
16
+ protected datePickerElement?: SbbDatepickerElement<T> | null;
17
17
  private _dateAdapter;
18
18
  private _datePickerController;
19
19
  private _abort;
@@ -21,12 +21,12 @@ export declare abstract class SbbDatepickerButton extends SbbDatepickerButton_ba
21
21
  protected abstract iconName: string;
22
22
  protected abstract i18nOffBoundaryDay: Record<string, string>;
23
23
  protected abstract i18nSelectOffBoundaryDay: (_currentDate: string) => Record<string, string>;
24
- protected abstract findAvailableDate: (_date: Date, _dateFilter: ((date: Date) => boolean) | null, _dateAdapter: DateAdapter<Date>, _boundary: string | number | null) => Date;
24
+ protected abstract findAvailableDate: (_date: T, _dateFilter: ((date: T) => boolean) | null, _dateAdapter: DateAdapter<T>, _boundary: string | number | null) => T;
25
25
  protected abstract onInputUpdated(event: CustomEvent<SbbInputUpdateEvent>): void;
26
26
  connectedCallback(): void;
27
27
  willUpdate(changedProperties: PropertyValues<this>): void;
28
28
  disconnectedCallback(): void;
29
- protected setDisabledState(datepicker: SbbDatepickerElement | null | undefined): void;
29
+ protected setDisabledState(datepicker: SbbDatepickerElement<T> | null | undefined): void;
30
30
  private _handleClick;
31
31
  private _syncUpstreamProperties;
32
32
  private _init;
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker-button.d.ts","sourceRoot":"","sources":["../../../../../src/elements/datepicker/common/datepicker-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,wBAAwB,CAAC;AAG9E,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;;AAEvB,8BAAsB,mBAAoB,SAAQ,wBAAsC;IACtF,4BAA4B;IACmB,UAAU,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAE1F,qEAAqE;IAC5D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAE3D,0EAA0E;IAC1E,OAAO,CAAC,SAAS,CAAS;IAE1B,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAS;IAE/B,SAAS,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACjE,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,SAAS,CAA2E;IAE5F,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9F,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CACpC,KAAK,EAAE,IAAI,EACX,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,EAC7C,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,EAC/B,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAC9B,IAAI,CAAC;IACV,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAEhE,iBAAiB,IAAI,IAAI;IASzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQzD,oBAAoB,IAAI,IAAI;IAK5C,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAmBrF,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,KAAK;IA+Cb,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,4BAA4B;cAajB,cAAc,IAAI,cAAc;CAGpD"}
1
+ {"version":3,"file":"datepicker-button.d.ts","sourceRoot":"","sources":["../../../../../src/elements/datepicker/common/datepicker-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,wBAAwB,CAAC;AAG9E,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,eAAe,CAAC;;AAEvB,8BAAsB,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,wBAAsC;IAChG,4BAA4B;IACmB,UAAU,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAE7F,qEAAqE;IAC5D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAE3D,0EAA0E;IAC1E,OAAO,CAAC,SAAS,CAAS;IAE1B,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAS;IAE/B,SAAS,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IACpE,OAAO,CAAC,YAAY,CAA4E;IAChG,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,SAAS,CAA2E;IAE5F,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9F,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CACpC,KAAK,EAAE,CAAC,EACR,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,IAAI,EAC1C,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAC9B,CAAC,CAAC;IACP,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAEhE,iBAAiB,IAAI,IAAI;IASzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQzD,oBAAoB,IAAI,IAAI;IAK5C,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAmBxF,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,KAAK;IA+Cb,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,4BAA4B;cAajB,cAAc,IAAI,cAAc;CAGpD"}