@onepercentio/one-ui 1.3.1 → 1.3.2

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 (554) hide show
  1. package/dist-ts/assets/styles/index.scss +2 -2
  2. package/dist-ts/assets/styles/mixins.scss +1 -0
  3. package/dist-ts/components/AdaptiveDialog/AdaptiveDialog.module.scss +1 -1
  4. package/dist-ts/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +1 -1
  5. package/dist-ts/components/AnchoredTooltip/AnchoredTooltip.module.scss +1 -1
  6. package/dist-ts/components/Avatar/Avatar.module.scss +1 -1
  7. package/dist-ts/components/BucketFill/BucketFill.module.scss +1 -1
  8. package/dist-ts/components/Button/Button.module.scss +1 -1
  9. package/dist-ts/components/Card/Card.module.scss +1 -1
  10. package/dist-ts/components/CheckBox/CheckBox.module.scss +1 -1
  11. package/dist-ts/components/Collapsable/Collapsable.module.scss +1 -1
  12. package/dist-ts/components/Divider/Divider.module.scss +1 -1
  13. package/dist-ts/components/FadeIn/FadeIn.module.scss +1 -1
  14. package/dist-ts/components/FileInput/View/BigFactory/BigFactory.d.ts +1 -1
  15. package/dist-ts/components/FileInput/View/BigFactory/BigFactory.js +4 -2
  16. package/dist-ts/components/FileInput/View/BigFactory/BigFactory.js.map +1 -1
  17. package/dist-ts/components/FileInput/View/BigFactory/BigFactory.module.scss +1 -1
  18. package/dist-ts/components/FileInput/View/Compact/Compact.module.scss +1 -1
  19. package/dist-ts/components/FlowController/FlowController.module.scss +1 -1
  20. package/dist-ts/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +1 -1
  21. package/dist-ts/components/Input/Input.module.scss +1 -1
  22. package/dist-ts/components/Loader/Loader.module.scss +1 -1
  23. package/dist-ts/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +1 -1
  24. package/dist-ts/components/Notification/Notification.module.scss +1 -1
  25. package/dist-ts/components/Parallax/Parallax.module.scss +1 -1
  26. package/dist-ts/components/PixelatedScan/PixelatedScan.module.scss +1 -1
  27. package/dist-ts/components/ProgressBar/ProgressBar.module.scss +1 -1
  28. package/dist-ts/components/ProgressTexts/ProgressTexts.module.scss +1 -1
  29. package/dist-ts/components/Radio/Radio.module.scss +1 -1
  30. package/dist-ts/components/Radio/variants/Checkmark/Checkmark.module.scss +1 -1
  31. package/dist-ts/components/Radio/variants/Generic/Generic.module.scss +1 -1
  32. package/dist-ts/components/Select/Select.module.scss +1 -1
  33. package/dist-ts/components/Slider/Slider.module.scss +2 -2
  34. package/dist-ts/components/Switch/Switch.module.scss +1 -1
  35. package/dist-ts/components/Table/Table.module.scss +1 -1
  36. package/dist-ts/components/Tabs/Tabs.module.scss +1 -1
  37. package/dist-ts/components/Text/Text.module.scss +1 -1
  38. package/dist-ts/components/Transition/Transition.module.scss +1 -1
  39. package/dist-ts/context/OneUIProvider.d.ts +3 -0
  40. package/dist-ts/context/OneUIProvider.js.map +1 -1
  41. package/dist-ts/hooks/ui/useCustomScrollbar.module.scss +1 -1
  42. package/dist-ts/hooks/ui/useZoomable.module.scss +1 -1
  43. package/dist-ts/hooks/useHero.module.scss +1 -1
  44. package/package.json +2 -3
  45. package/WebpackConfigs/__fixtures__/bug_var_color/cenario.static.tsx +0 -37
  46. package/WebpackConfigs/__fixtures__/bug_var_color/style.module.scss +0 -28
  47. package/WebpackConfigs/__fixtures__/email_templates/assets/asset1.svg +0 -3
  48. package/WebpackConfigs/__fixtures__/email_templates/assets/asset2.svg +0 -3
  49. package/WebpackConfigs/__fixtures__/email_templates/email1.static.tsx +0 -10
  50. package/WebpackConfigs/__fixtures__/email_templates/email2.static.tsx +0 -10
  51. package/build/index.html +0 -10
  52. package/dist/assets/img/svg/checkbox.svg +0 -3
  53. package/dist/assets/styles/index.scss +0 -2
  54. package/dist/assets/styles/mixins.scss +0 -14
  55. package/dist/assets/styles/variables.scss +0 -49
  56. package/dist/components/AdaptiveButton/AdaptiveButton.d.ts +0 -9
  57. package/dist/components/AdaptiveButton/AdaptiveButton.js +0 -32
  58. package/dist/components/AdaptiveButton/AdaptiveButton.module.scss +0 -7
  59. package/dist/components/AdaptiveButton/index.d.ts +0 -2
  60. package/dist/components/AdaptiveButton/index.js +0 -26
  61. package/dist/components/AdaptiveContainer/AdaptiveContainer.d.ts +0 -25
  62. package/dist/components/AdaptiveContainer/AdaptiveContainer.js +0 -146
  63. package/dist/components/AdaptiveContainer/AdaptiveContainer.module.scss +0 -53
  64. package/dist/components/AdaptiveContainer/index.d.ts +0 -2
  65. package/dist/components/AdaptiveContainer/index.js +0 -26
  66. package/dist/components/AdaptiveDialog/AdaptiveDialog.d.ts +0 -20
  67. package/dist/components/AdaptiveDialog/AdaptiveDialog.js +0 -80
  68. package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +0 -145
  69. package/dist/components/AdaptiveDialog/index.d.ts +0 -2
  70. package/dist/components/AdaptiveDialog/index.js +0 -26
  71. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.d.ts +0 -25
  72. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +0 -76
  73. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +0 -49
  74. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.d.ts +0 -1
  75. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +0 -13
  76. package/dist/components/AdaptiveSidebar/index.d.ts +0 -2
  77. package/dist/components/AdaptiveSidebar/index.js +0 -26
  78. package/dist/components/AnchoredTooltip/AnchoredTooltip.d.ts +0 -37
  79. package/dist/components/AnchoredTooltip/AnchoredTooltip.js +0 -167
  80. package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +0 -64
  81. package/dist/components/AnchoredTooltip/index.d.ts +0 -2
  82. package/dist/components/AnchoredTooltip/index.js +0 -26
  83. package/dist/components/AnimatedEntrance/AnimatedEntrance.d.ts +0 -19
  84. package/dist/components/AnimatedEntrance/AnimatedEntrance.js +0 -165
  85. package/dist/components/AnimatedEntrance/AnimatedEntrance.module.scss +0 -108
  86. package/dist/components/AnimatedEntrance/index.d.ts +0 -2
  87. package/dist/components/AnimatedEntrance/index.js +0 -26
  88. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.d.ts +0 -29
  89. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +0 -95
  90. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.module.scss +0 -22
  91. package/dist/components/AsyncTriggerContainer/index.d.ts +0 -2
  92. package/dist/components/AsyncTriggerContainer/index.js +0 -26
  93. package/dist/components/AsyncWrapper/AsyncWrapper.d.ts +0 -14
  94. package/dist/components/AsyncWrapper/AsyncWrapper.js +0 -42
  95. package/dist/components/AsyncWrapper/index.d.ts +0 -2
  96. package/dist/components/AsyncWrapper/index.js +0 -26
  97. package/dist/components/Avatar/Avatar.d.ts +0 -10
  98. package/dist/components/Avatar/Avatar.js +0 -39
  99. package/dist/components/Avatar/Avatar.module.scss +0 -22
  100. package/dist/components/Avatar/index.d.ts +0 -2
  101. package/dist/components/Avatar/index.js +0 -26
  102. package/dist/components/BucketFill/BucketFill.d.ts +0 -11
  103. package/dist/components/BucketFill/BucketFill.js +0 -55
  104. package/dist/components/BucketFill/BucketFill.module.scss +0 -36
  105. package/dist/components/BucketFill/index.d.ts +0 -2
  106. package/dist/components/BucketFill/index.js +0 -26
  107. package/dist/components/Button/Button.d.ts +0 -16
  108. package/dist/components/Button/Button.js +0 -38
  109. package/dist/components/Button/Button.module.scss +0 -45
  110. package/dist/components/Button/index.d.ts +0 -2
  111. package/dist/components/Button/index.js +0 -26
  112. package/dist/components/Card/Card.d.ts +0 -7
  113. package/dist/components/Card/Card.js +0 -22
  114. package/dist/components/Card/Card.module.scss +0 -12
  115. package/dist/components/Card/index.d.ts +0 -2
  116. package/dist/components/Card/index.js +0 -26
  117. package/dist/components/Chart/Chart.d.ts +0 -2
  118. package/dist/components/Chart/Chart.e2e.d.ts +0 -4
  119. package/dist/components/Chart/Chart.js +0 -26
  120. package/dist/components/Chart/Chart.logic.d.ts +0 -3
  121. package/dist/components/Chart/Chart.logic.js +0 -14
  122. package/dist/components/Chart/Chart.module.scss +0 -58
  123. package/dist/components/Chart/Chart.types.d.ts +0 -24
  124. package/dist/components/Chart/Chart.types.js +0 -6
  125. package/dist/components/Chart/Chart.view.d.ts +0 -5
  126. package/dist/components/Chart/Chart.view.js +0 -183
  127. package/dist/components/Chart/index.d.ts +0 -2
  128. package/dist/components/Chart/index.js +0 -26
  129. package/dist/components/CheckBox/CheckBox.d.ts +0 -16
  130. package/dist/components/CheckBox/CheckBox.js +0 -52
  131. package/dist/components/CheckBox/CheckBox.module.scss +0 -36
  132. package/dist/components/CheckBox/index.d.ts +0 -2
  133. package/dist/components/CheckBox/index.js +0 -26
  134. package/dist/components/CodeInput/CodeInput.d.ts +0 -8
  135. package/dist/components/CodeInput/CodeInput.js +0 -83
  136. package/dist/components/CodeInput/CodeInput.module.scss +0 -5
  137. package/dist/components/CodeInput/index.d.ts +0 -2
  138. package/dist/components/CodeInput/index.js +0 -26
  139. package/dist/components/Collapsable/Collapsable.d.ts +0 -54
  140. package/dist/components/Collapsable/Collapsable.js +0 -185
  141. package/dist/components/Collapsable/Collapsable.module.scss +0 -42
  142. package/dist/components/Collapsable/index.d.ts +0 -2
  143. package/dist/components/Collapsable/index.js +0 -26
  144. package/dist/components/Countdown/Countdown.d.ts +0 -28
  145. package/dist/components/Countdown/Countdown.js +0 -82
  146. package/dist/components/Countdown/index.d.ts +0 -2
  147. package/dist/components/Countdown/index.js +0 -26
  148. package/dist/components/CurrencyInput/CurrencyInput.d.ts +0 -11
  149. package/dist/components/CurrencyInput/CurrencyInput.hook.d.ts +0 -7
  150. package/dist/components/CurrencyInput/CurrencyInput.hook.js +0 -28
  151. package/dist/components/CurrencyInput/CurrencyInput.js +0 -54
  152. package/dist/components/CurrencyInput/index.d.ts +0 -2
  153. package/dist/components/CurrencyInput/index.js +0 -26
  154. package/dist/components/Divider/Divider.d.ts +0 -6
  155. package/dist/components/Divider/Divider.js +0 -21
  156. package/dist/components/Divider/Divider.module.scss +0 -7
  157. package/dist/components/Divider/index.d.ts +0 -2
  158. package/dist/components/Divider/index.js +0 -26
  159. package/dist/components/EmailInput/EmailInput.d.ts +0 -33
  160. package/dist/components/EmailInput/EmailInput.js +0 -47
  161. package/dist/components/EmailInput/EmailInput.module.scss +0 -0
  162. package/dist/components/EmailInput/index.d.ts +0 -2
  163. package/dist/components/EmailInput/index.js +0 -26
  164. package/dist/components/FadeIn/FadeIn.d.ts +0 -16
  165. package/dist/components/FadeIn/FadeIn.js +0 -63
  166. package/dist/components/FadeIn/FadeIn.module.scss +0 -9
  167. package/dist/components/FadeIn/index.d.ts +0 -2
  168. package/dist/components/FadeIn/index.js +0 -26
  169. package/dist/components/FileInput/FileInput.d.ts +0 -34
  170. package/dist/components/FileInput/FileInput.js +0 -52
  171. package/dist/components/FileInput/FileInput.module.scss +0 -6
  172. package/dist/components/FileInput/View/BigFactory/BigFactory.d.ts +0 -6
  173. package/dist/components/FileInput/View/BigFactory/BigFactory.js +0 -52
  174. package/dist/components/FileInput/View/BigFactory/BigFactory.module.scss +0 -20
  175. package/dist/components/FileInput/View/BigFactory/index.d.ts +0 -2
  176. package/dist/components/FileInput/View/BigFactory/index.js +0 -26
  177. package/dist/components/FileInput/View/Compact/Compact.d.ts +0 -11
  178. package/dist/components/FileInput/View/Compact/Compact.js +0 -119
  179. package/dist/components/FileInput/View/Compact/Compact.module.scss +0 -68
  180. package/dist/components/FileInput/View/Compact/index.d.ts +0 -2
  181. package/dist/components/FileInput/View/Compact/index.js +0 -26
  182. package/dist/components/FileInput/View/View.types.d.ts +0 -8
  183. package/dist/components/FileInput/View/View.types.js +0 -6
  184. package/dist/components/FileInput/index.d.ts +0 -2
  185. package/dist/components/FileInput/index.js +0 -26
  186. package/dist/components/FlowController/FlowController.d.ts +0 -27
  187. package/dist/components/FlowController/FlowController.js +0 -66
  188. package/dist/components/FlowController/FlowController.module.scss +0 -47
  189. package/dist/components/FlowController/index.d.ts +0 -2
  190. package/dist/components/FlowController/index.js +0 -26
  191. package/dist/components/Form/Form.d.ts +0 -30
  192. package/dist/components/Form/Form.hook.d.ts +0 -40
  193. package/dist/components/Form/Form.hook.js +0 -234
  194. package/dist/components/Form/Form.js +0 -114
  195. package/dist/components/Form/Form.module.scss +0 -0
  196. package/dist/components/Form/Form.types.d.ts +0 -98
  197. package/dist/components/Form/Form.types.js +0 -40
  198. package/dist/components/Form/FormField/Extensions/DateField/DateField.d.ts +0 -13
  199. package/dist/components/Form/FormField/Extensions/DateField/DateField.js +0 -75
  200. package/dist/components/Form/FormField/Extensions/DateField/DateField.module.scss +0 -0
  201. package/dist/components/Form/FormField/Extensions/DateField/index.d.ts +0 -2
  202. package/dist/components/Form/FormField/Extensions/DateField/index.js +0 -26
  203. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.d.ts +0 -9
  204. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +0 -90
  205. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.module.scss +0 -0
  206. package/dist/components/Form/FormField/Extensions/PhoneField/index.d.ts +0 -2
  207. package/dist/components/Form/FormField/Extensions/PhoneField/index.js +0 -26
  208. package/dist/components/Form/FormField/FormField.d.ts +0 -5
  209. package/dist/components/Form/FormField/FormField.js +0 -297
  210. package/dist/components/Form/FormField/FormField.types.d.ts +0 -103
  211. package/dist/components/Form/FormField/FormField.types.js +0 -12
  212. package/dist/components/Form/FormField/index.d.ts +0 -2
  213. package/dist/components/Form/FormField/index.js +0 -26
  214. package/dist/components/Form/index.d.ts +0 -2
  215. package/dist/components/Form/index.js +0 -26
  216. package/dist/components/Freeze/Freeze.d.ts +0 -5
  217. package/dist/components/Freeze/Freeze.js +0 -18
  218. package/dist/components/Freeze/index.d.ts +0 -2
  219. package/dist/components/Freeze/index.js +0 -26
  220. package/dist/components/HSForms/HSForms.d.ts +0 -12
  221. package/dist/components/HSForms/HSForms.js +0 -54
  222. package/dist/components/HSForms/index.d.ts +0 -2
  223. package/dist/components/HSForms/index.js +0 -26
  224. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.d.ts +0 -9
  225. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +0 -25
  226. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +0 -44
  227. package/dist/components/HeaderCloseBtn/index.d.ts +0 -2
  228. package/dist/components/HeaderCloseBtn/index.js +0 -26
  229. package/dist/components/InfinityScroll/InfinityScroll.d.ts +0 -22
  230. package/dist/components/InfinityScroll/InfinityScroll.js +0 -127
  231. package/dist/components/InfinityScroll/InfinityScroll.module.scss +0 -30
  232. package/dist/components/InfinityScroll/index.d.ts +0 -2
  233. package/dist/components/InfinityScroll/index.js +0 -26
  234. package/dist/components/Input/Input.d.ts +0 -43
  235. package/dist/components/Input/Input.js +0 -109
  236. package/dist/components/Input/Input.module.scss +0 -31
  237. package/dist/components/Input/index.d.ts +0 -2
  238. package/dist/components/Input/index.js +0 -26
  239. package/dist/components/InstantCounter/InstantCounter.d.ts +0 -16
  240. package/dist/components/InstantCounter/InstantCounter.js +0 -54
  241. package/dist/components/InstantCounter/index.d.ts +0 -2
  242. package/dist/components/InstantCounter/index.js +0 -26
  243. package/dist/components/LavaLamp/LavaLamp.d.ts +0 -12
  244. package/dist/components/LavaLamp/LavaLamp.data.d.ts +0 -16
  245. package/dist/components/LavaLamp/LavaLamp.data.js +0 -89
  246. package/dist/components/LavaLamp/LavaLamp.js +0 -124
  247. package/dist/components/LavaLamp/LavaLamp.module.scss +0 -26
  248. package/dist/components/LavaLamp/index.d.ts +0 -2
  249. package/dist/components/LavaLamp/index.js +0 -26
  250. package/dist/components/LavaLamp/v2/LavaLamp.d.ts +0 -4
  251. package/dist/components/LavaLamp/v2/LavaLamp.js +0 -153
  252. package/dist/components/LavaLamp/v2/LavaLamp.module.scss +0 -23
  253. package/dist/components/LinkToId/LinkToId.d.ts +0 -11
  254. package/dist/components/LinkToId/LinkToId.js +0 -45
  255. package/dist/components/LinkToId/LinkToId.module.scss +0 -4
  256. package/dist/components/LinkToId/index.d.ts +0 -2
  257. package/dist/components/LinkToId/index.js +0 -26
  258. package/dist/components/Loader/Loader.d.ts +0 -8
  259. package/dist/components/Loader/Loader.js +0 -27
  260. package/dist/components/Loader/Loader.module.scss +0 -40
  261. package/dist/components/Loader/index.d.ts +0 -2
  262. package/dist/components/Loader/index.js +0 -26
  263. package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.d.ts +0 -12
  264. package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +0 -35
  265. package/dist/components/LoaderDotsIndicator/index.d.ts +0 -2
  266. package/dist/components/LoaderDotsIndicator/index.js +0 -26
  267. package/dist/components/LoopableVideo/LoopableVideo.d.ts +0 -12
  268. package/dist/components/LoopableVideo/LoopableVideo.js +0 -41
  269. package/dist/components/LoopableVideo/index.d.ts +0 -2
  270. package/dist/components/LoopableVideo/index.js +0 -26
  271. package/dist/components/MainGrid/MainGrid.d.ts +0 -17
  272. package/dist/components/MainGrid/MainGrid.js +0 -54
  273. package/dist/components/MainGrid/MainGrid.module.scss +0 -28
  274. package/dist/components/MainGrid/index.d.ts +0 -2
  275. package/dist/components/MainGrid/index.js +0 -26
  276. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.d.ts +0 -8
  277. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +0 -32
  278. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +0 -220
  279. package/dist/components/MutableHamburgerButton/index.d.ts +0 -2
  280. package/dist/components/MutableHamburgerButton/index.js +0 -26
  281. package/dist/components/Notification/Notification.d.ts +0 -8
  282. package/dist/components/Notification/Notification.js +0 -24
  283. package/dist/components/Notification/Notification.module.scss +0 -25
  284. package/dist/components/Notification/index.d.ts +0 -2
  285. package/dist/components/Notification/index.js +0 -26
  286. package/dist/components/NumberInput/NumberInput.d.ts +0 -11
  287. package/dist/components/NumberInput/NumberInput.js +0 -50
  288. package/dist/components/NumberInput/index.d.ts +0 -2
  289. package/dist/components/NumberInput/index.js +0 -26
  290. package/dist/components/OrderableList/OrderableList.d.ts +0 -40
  291. package/dist/components/OrderableList/OrderableList.js +0 -438
  292. package/dist/components/OrderableList/OrderableList.module.scss +0 -98
  293. package/dist/components/OrderableList/index.d.ts +0 -2
  294. package/dist/components/OrderableList/index.js +0 -26
  295. package/dist/components/PaginationIndicator/PaginationIndicator.d.ts +0 -45
  296. package/dist/components/PaginationIndicator/PaginationIndicator.js +0 -260
  297. package/dist/components/PaginationIndicator/index.d.ts +0 -2
  298. package/dist/components/PaginationIndicator/index.js +0 -26
  299. package/dist/components/Parallax/Parallax.d.ts +0 -20
  300. package/dist/components/Parallax/Parallax.js +0 -168
  301. package/dist/components/Parallax/Parallax.module.scss +0 -28
  302. package/dist/components/Parallax/index.d.ts +0 -2
  303. package/dist/components/Parallax/index.js +0 -26
  304. package/dist/components/Parallax/math/helpers.d.ts +0 -58
  305. package/dist/components/Parallax/math/helpers.js +0 -134
  306. package/dist/components/PasswordInput/PasswordInput.d.ts +0 -48
  307. package/dist/components/PasswordInput/PasswordInput.js +0 -96
  308. package/dist/components/PasswordInput/PasswordInput.module.scss +0 -17
  309. package/dist/components/PasswordInput/index.d.ts +0 -2
  310. package/dist/components/PasswordInput/index.js +0 -26
  311. package/dist/components/PingPongText/PingPongText.d.ts +0 -10
  312. package/dist/components/PingPongText/PingPongText.js +0 -75
  313. package/dist/components/PingPongText/PingPongText.module.scss +0 -4
  314. package/dist/components/PingPongText/index.d.ts +0 -2
  315. package/dist/components/PingPongText/index.js +0 -26
  316. package/dist/components/PixelatedScan/PixelatedScan.d.ts +0 -13
  317. package/dist/components/PixelatedScan/PixelatedScan.js +0 -138
  318. package/dist/components/PixelatedScan/PixelatedScan.module.scss +0 -86
  319. package/dist/components/PixelatedScan/index.d.ts +0 -2
  320. package/dist/components/PixelatedScan/index.js +0 -26
  321. package/dist/components/Portal/Portal.d.ts +0 -20
  322. package/dist/components/Portal/Portal.js +0 -61
  323. package/dist/components/Portal/Portal.module.scss +0 -3
  324. package/dist/components/Portal/index.d.ts +0 -2
  325. package/dist/components/Portal/index.js +0 -26
  326. package/dist/components/ProgressBar/ProgressBar.d.ts +0 -32
  327. package/dist/components/ProgressBar/ProgressBar.js +0 -112
  328. package/dist/components/ProgressBar/ProgressBar.module.scss +0 -44
  329. package/dist/components/ProgressBar/index.d.ts +0 -2
  330. package/dist/components/ProgressBar/index.js +0 -26
  331. package/dist/components/ProgressTexts/ProgressTexts.d.ts +0 -29
  332. package/dist/components/ProgressTexts/ProgressTexts.js +0 -52
  333. package/dist/components/ProgressTexts/ProgressTexts.module.scss +0 -37
  334. package/dist/components/ProgressTexts/index.d.ts +0 -2
  335. package/dist/components/ProgressTexts/index.js +0 -26
  336. package/dist/components/Radio/Radio.d.ts +0 -15
  337. package/dist/components/Radio/Radio.js +0 -53
  338. package/dist/components/Radio/Radio.module.scss +0 -20
  339. package/dist/components/Radio/index.d.ts +0 -2
  340. package/dist/components/Radio/index.js +0 -26
  341. package/dist/components/Radio/variants/Checkmark/Checkmark.d.ts +0 -7
  342. package/dist/components/Radio/variants/Checkmark/Checkmark.js +0 -20
  343. package/dist/components/Radio/variants/Checkmark/Checkmark.module.scss +0 -24
  344. package/dist/components/Radio/variants/Checkmark/index.d.ts +0 -2
  345. package/dist/components/Radio/variants/Checkmark/index.js +0 -26
  346. package/dist/components/Radio/variants/Generic/Generic.d.ts +0 -7
  347. package/dist/components/Radio/variants/Generic/Generic.js +0 -22
  348. package/dist/components/Radio/variants/Generic/Generic.module.scss +0 -38
  349. package/dist/components/Radio/variants/Generic/index.d.ts +0 -2
  350. package/dist/components/Radio/variants/Generic/index.js +0 -26
  351. package/dist/components/SectionContainer/SectionContainer.d.ts +0 -19
  352. package/dist/components/SectionContainer/SectionContainer.js +0 -48
  353. package/dist/components/SectionContainer/SectionContainer.module.scss +0 -30
  354. package/dist/components/SectionContainer/index.d.ts +0 -2
  355. package/dist/components/SectionContainer/index.js +0 -26
  356. package/dist/components/Select/Select.d.ts +0 -42
  357. package/dist/components/Select/Select.js +0 -137
  358. package/dist/components/Select/Select.module.scss +0 -60
  359. package/dist/components/Select/index.d.ts +0 -2
  360. package/dist/components/Select/index.js +0 -26
  361. package/dist/components/Skeleton/Skeleton.d.ts +0 -10
  362. package/dist/components/Skeleton/Skeleton.js +0 -30
  363. package/dist/components/Skeleton/Skeleton.module.scss +0 -21
  364. package/dist/components/Skeleton/index.d.ts +0 -2
  365. package/dist/components/Skeleton/index.js +0 -26
  366. package/dist/components/Slider/Slider.d.ts +0 -11
  367. package/dist/components/Slider/Slider.e2e.d.ts +0 -4
  368. package/dist/components/Slider/Slider.js +0 -70
  369. package/dist/components/Slider/Slider.module.scss +0 -7
  370. package/dist/components/Slider/index.d.ts +0 -2
  371. package/dist/components/Slider/index.js +0 -26
  372. package/dist/components/Spacing/Spacing.d.ts +0 -11
  373. package/dist/components/Spacing/Spacing.js +0 -33
  374. package/dist/components/Spacing/Spacing.module.scss +0 -13
  375. package/dist/components/Spacing/index.d.ts +0 -2
  376. package/dist/components/Spacing/index.js +0 -26
  377. package/dist/components/StaticScroller/StaticScroller.d.ts +0 -7
  378. package/dist/components/StaticScroller/StaticScroller.js +0 -71
  379. package/dist/components/StaticScroller/StaticScroller.module.scss +0 -14
  380. package/dist/components/StaticScroller/index.d.ts +0 -2
  381. package/dist/components/StaticScroller/index.js +0 -26
  382. package/dist/components/Switch/Switch.d.ts +0 -12
  383. package/dist/components/Switch/Switch.js +0 -47
  384. package/dist/components/Switch/Switch.module.scss +0 -46
  385. package/dist/components/Switch/index.d.ts +0 -2
  386. package/dist/components/Switch/index.js +0 -26
  387. package/dist/components/Table/Table.d.ts +0 -23
  388. package/dist/components/Table/Table.js +0 -114
  389. package/dist/components/Table/Table.module.scss +0 -74
  390. package/dist/components/Table/index.d.ts +0 -2
  391. package/dist/components/Table/index.js +0 -26
  392. package/dist/components/Tabs/Tabs.d.ts +0 -28
  393. package/dist/components/Tabs/Tabs.js +0 -66
  394. package/dist/components/Tabs/Tabs.module.scss +0 -40
  395. package/dist/components/Tabs/index.d.ts +0 -2
  396. package/dist/components/Tabs/index.js +0 -26
  397. package/dist/components/Text/Text.d.ts +0 -22
  398. package/dist/components/Text/Text.js +0 -43
  399. package/dist/components/Text/Text.module.scss +0 -13
  400. package/dist/components/Text/index.d.ts +0 -2
  401. package/dist/components/Text/index.js +0 -26
  402. package/dist/components/Transition/MasksFactory/DiagonalReveal.d.ts +0 -1
  403. package/dist/components/Transition/MasksFactory/DiagonalReveal.js +0 -49
  404. package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.d.ts +0 -5
  405. package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +0 -77
  406. package/dist/components/Transition/MasksFactory/PhysicsSquares.d.ts +0 -7
  407. package/dist/components/Transition/MasksFactory/PhysicsSquares.js +0 -96
  408. package/dist/components/Transition/MasksFactory/SquareToBalls.d.ts +0 -5
  409. package/dist/components/Transition/MasksFactory/SquareToBalls.js +0 -66
  410. package/dist/components/Transition/MasksFactory/utils.d.ts +0 -8
  411. package/dist/components/Transition/MasksFactory/utils.js +0 -30
  412. package/dist/components/Transition/Transition.d.ts +0 -114
  413. package/dist/components/Transition/Transition.js +0 -322
  414. package/dist/components/Transition/Transition.module.scss +0 -211
  415. package/dist/components/Transition/index.d.ts +0 -2
  416. package/dist/components/Transition/index.js +0 -26
  417. package/dist/components/UncontrolledTransition/UncontrolledTransition.ai.md +0 -9
  418. package/dist/components/UncontrolledTransition/UncontrolledTransition.d.ts +0 -17
  419. package/dist/components/UncontrolledTransition/UncontrolledTransition.js +0 -109
  420. package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.d.ts +0 -1
  421. package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +0 -31
  422. package/dist/components/UncontrolledTransition/index.d.ts +0 -2
  423. package/dist/components/UncontrolledTransition/index.js +0 -26
  424. package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.d.ts +0 -55
  425. package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +0 -114
  426. package/dist/components/WalletConnectionWrapper/index.d.ts +0 -2
  427. package/dist/components/WalletConnectionWrapper/index.js +0 -26
  428. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.d.ts +0 -7
  429. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +0 -58
  430. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.module.scss +0 -5
  431. package/dist/components/utilitary/ScrollAndFocusLock/index.d.ts +0 -2
  432. package/dist/components/utilitary/ScrollAndFocusLock/index.js +0 -26
  433. package/dist/context/AsyncProcess.d.ts +0 -23
  434. package/dist/context/AsyncProcess.js +0 -73
  435. package/dist/context/ContextAsyncControl.d.ts +0 -39
  436. package/dist/context/ContextAsyncControl.js +0 -91
  437. package/dist/context/CustomBrowserRouter.d.ts +0 -19
  438. package/dist/context/CustomBrowserRouter.js +0 -49
  439. package/dist/context/OneUIProvider.d.ts +0 -198
  440. package/dist/context/OneUIProvider.js +0 -128
  441. package/dist/hooks/logs/useDependencyChangeDetection.d.ts +0 -1
  442. package/dist/hooks/logs/useDependencyChangeDetection.js +0 -20
  443. package/dist/hooks/logs/useIsMounting.d.ts +0 -1
  444. package/dist/hooks/logs/useIsMounting.js +0 -13
  445. package/dist/hooks/persistence/useLocalStorage.d.ts +0 -2
  446. package/dist/hooks/persistence/useLocalStorage.js +0 -48
  447. package/dist/hooks/shims/ObjectWatchShim.d.ts +0 -1
  448. package/dist/hooks/shims/ObjectWatchShim.js +0 -54
  449. package/dist/hooks/ui/useAdaptiveImage.d.ts +0 -7
  450. package/dist/hooks/ui/useAdaptiveImage.js +0 -36
  451. package/dist/hooks/ui/useAlternating.d.ts +0 -4
  452. package/dist/hooks/ui/useAlternating.js +0 -24
  453. package/dist/hooks/ui/useBreakpoint.d.ts +0 -5
  454. package/dist/hooks/ui/useBreakpoint.js +0 -26
  455. package/dist/hooks/ui/useCustomScrollbar.d.ts +0 -8
  456. package/dist/hooks/ui/useCustomScrollbar.js +0 -28
  457. package/dist/hooks/ui/useCustomScrollbar.module.scss +0 -20
  458. package/dist/hooks/ui/useEffectIf.d.ts +0 -2
  459. package/dist/hooks/ui/useEffectIf.js +0 -14
  460. package/dist/hooks/ui/useMouseHover.d.ts +0 -11
  461. package/dist/hooks/ui/useMouseHover.js +0 -29
  462. package/dist/hooks/ui/usePaginationControls.d.ts +0 -14
  463. package/dist/hooks/ui/usePaginationControls.js +0 -135
  464. package/dist/hooks/ui/usePaginationControls.module.scss +0 -16
  465. package/dist/hooks/ui/useSnapToViewport.d.ts +0 -5
  466. package/dist/hooks/ui/useSnapToViewport.js +0 -26
  467. package/dist/hooks/ui/useSnapToViewport.module.scss +0 -6
  468. package/dist/hooks/ui/useTilt.d.ts +0 -46
  469. package/dist/hooks/ui/useTilt.js +0 -161
  470. package/dist/hooks/ui/useZoomable.d.ts +0 -6
  471. package/dist/hooks/ui/useZoomable.js +0 -134
  472. package/dist/hooks/ui/useZoomable.module.scss +0 -34
  473. package/dist/hooks/useAsyncControl.ai.md +0 -25
  474. package/dist/hooks/useAsyncControl.d.ts +0 -32
  475. package/dist/hooks/useAsyncControl.js +0 -79
  476. package/dist/hooks/useContainedRepositioning.d.ts +0 -15
  477. package/dist/hooks/useContainedRepositioning.js +0 -83
  478. package/dist/hooks/useCustomHistory.d.ts +0 -14
  479. package/dist/hooks/useCustomHistory.js +0 -24
  480. package/dist/hooks/useElementFit.d.ts +0 -18
  481. package/dist/hooks/useElementFit.js +0 -54
  482. package/dist/hooks/useFirestoreWatch.d.ts +0 -12
  483. package/dist/hooks/useFirestoreWatch.js +0 -45
  484. package/dist/hooks/useFreeze.d.ts +0 -5
  485. package/dist/hooks/useFreeze.js +0 -17
  486. package/dist/hooks/useHero.d.ts +0 -68
  487. package/dist/hooks/useHero.js +0 -273
  488. package/dist/hooks/useHero.module.scss +0 -41
  489. package/dist/hooks/useIntersection.d.ts +0 -8
  490. package/dist/hooks/useIntersection.js +0 -39
  491. package/dist/hooks/useMergeRefs.d.ts +0 -9
  492. package/dist/hooks/useMergeRefs.js +0 -37
  493. package/dist/hooks/useObserve.d.ts +0 -6
  494. package/dist/hooks/useObserve.js +0 -25
  495. package/dist/hooks/usePagination.d.ts +0 -57
  496. package/dist/hooks/usePagination.js +0 -163
  497. package/dist/hooks/usePooledOperation.d.ts +0 -19
  498. package/dist/hooks/usePooledOperation.js +0 -53
  499. package/dist/hooks/usePooling.d.ts +0 -22
  500. package/dist/hooks/usePooling.js +0 -52
  501. package/dist/hooks/useRebound.d.ts +0 -13
  502. package/dist/hooks/useRebound.js +0 -32
  503. package/dist/hooks/useShortIntl.ai.md +0 -5
  504. package/dist/hooks/useShortIntl.d.ts +0 -21
  505. package/dist/hooks/useShortIntl.js +0 -82
  506. package/dist/hooks/utility/useAsyncMemo.d.ts +0 -13
  507. package/dist/hooks/utility/useAsyncMemo.js +0 -45
  508. package/dist/hooks/utility/useDepChange.d.ts +0 -1
  509. package/dist/hooks/utility/useDepChange.js +0 -17
  510. package/dist/hooks/utility/useEvents.d.ts +0 -9
  511. package/dist/hooks/utility/useEvents.js +0 -33
  512. package/dist/hooks/utility/useImmediate.d.ts +0 -4
  513. package/dist/hooks/utility/useImmediate.js +0 -14
  514. package/dist/hooks/utility/useManualInit.d.ts +0 -4
  515. package/dist/hooks/utility/useManualInit.js +0 -25
  516. package/dist/hooks/utility/useModule.d.ts +0 -4
  517. package/dist/hooks/utility/useModule.js +0 -18
  518. package/dist/hooks/utility/useQuery.d.ts +0 -7
  519. package/dist/hooks/utility/useQuery.js +0 -20
  520. package/dist/hooks/utility/useUniqueEffect.d.ts +0 -1
  521. package/dist/hooks/utility/useUniqueEffect.js +0 -20
  522. package/dist/index.d.ts +0 -222
  523. package/dist/index.js +0 -2148
  524. package/dist/index.preprocess.d.ts +0 -1
  525. package/dist/index.preprocess.js +0 -42
  526. package/dist/models/DebugLogger.d.ts +0 -4
  527. package/dist/models/DebugLogger.js +0 -16
  528. package/dist/models/GenericContract.d.ts +0 -100
  529. package/dist/models/GenericContract.js +0 -51
  530. package/dist/models/Orbs.d.ts +0 -44
  531. package/dist/models/Orbs.js +0 -67
  532. package/dist/reac-app-env.d.js +0 -2
  533. package/dist/storybook/assets/video/txt-reversed.mp4 +0 -0
  534. package/dist/storybookUtils/index.d.ts +0 -5
  535. package/dist/storybookUtils/index.js +0 -44
  536. package/dist/type-utils.d.ts +0 -59
  537. package/dist/type-utils.js +0 -6
  538. package/dist/types.d.ts +0 -79
  539. package/dist/types.js +0 -6
  540. package/dist/utility.d.js +0 -2
  541. package/dist/utils/blockchain.d.ts +0 -8
  542. package/dist/utils/blockchain.js +0 -46
  543. package/dist/utils/e2e.d.ts +0 -19
  544. package/dist/utils/e2e.js +0 -33
  545. package/dist/utils/flatten.d.ts +0 -5
  546. package/dist/utils/flatten.js +0 -19
  547. package/dist/utils/formatters.d.ts +0 -21
  548. package/dist/utils/formatters.js +0 -63
  549. package/dist/utils/html.utils.d.ts +0 -2
  550. package/dist/utils/html.utils.js +0 -15
  551. package/dist/utils/ownEvent.d.ts +0 -4
  552. package/dist/utils/ownEvent.js +0 -16
  553. package/dist/utils/test.d.ts +0 -6
  554. package/dist/utils/test.js +0 -19
@@ -1,438 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.OrderableListReorderMode = void 0;
7
- exports.default = OrderableList;
8
- exports.useOrderableEvents = useOrderableEvents;
9
- exports.useOrderableListAnchor = useOrderableListAnchor;
10
- var _throttle = _interopRequireDefault(require("lodash/throttle"));
11
- var _react = _interopRequireWildcard(require("react"));
12
- var _UncontrolledTransition = _interopRequireDefault(require("../UncontrolledTransition"));
13
- var _TransitionModule = _interopRequireDefault(require("../Transition/Transition.module.scss"));
14
- var _useHero = _interopRequireDefault(require("../../hooks/useHero"));
15
- var _AnimatedEntrance = _interopRequireDefault(require("../AnimatedEntrance"));
16
- var _Transition = require("../Transition");
17
- var _OrderableListModule = _interopRequireDefault(require("./OrderableList.module.scss"));
18
- var _useEvents = _interopRequireDefault(require("../../hooks/utility/useEvents"));
19
- var _ownEvent = _interopRequireDefault(require("../../utils/ownEvent"));
20
- const _excluded = ["children", "className", "mode", "shrinkToOnOrder", "reorderingClassName", "cloneClassName"];
21
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
24
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
27
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
28
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
29
- function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
30
- function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
31
- const OrderableListContext = /*#__PURE__*/(0, _react.createContext)(null);
32
- let OrderableListReorderMode = exports.OrderableListReorderMode = /*#__PURE__*/function (OrderableListReorderMode) {
33
- OrderableListReorderMode["VERTICAL"] = "v";
34
- OrderableListReorderMode["TWO_DIMENSIONS"] = "hv";
35
- return OrderableListReorderMode;
36
- }({});
37
- function cleanKeys(keys) {
38
- return keys.map(a => a.split(";")[0]);
39
- }
40
-
41
- /**
42
- * This component displays a list of items that can be reordered by dragging them with your mouse or touch.
43
- * It supports simple vertical dragging and more advanced 2D reordering, with smooth animations
44
- * when items move around.
45
- */
46
- function OrderableList(_ref) {
47
- let {
48
- children,
49
- className = "",
50
- mode = OrderableListReorderMode.VERTICAL,
51
- shrinkToOnOrder,
52
- reorderingClassName,
53
- cloneClassName
54
- } = _ref,
55
- props = _objectWithoutProperties(_ref, _excluded);
56
- const availableKeys = children.map(a => a.key);
57
- const availableKeysDep = availableKeys.join(",");
58
- const initializeOrder = (0, _react.useCallback)(() => {
59
- const missingOrderKeys = "keyOrder" in props && props.keyOrder ? availableKeys.filter(a => !props.keyOrder.includes(a)) : [];
60
- return ("keyOrder" in props && props.keyOrder ? [...props.keyOrder, ...missingOrderKeys] : undefined) || availableKeys;
61
- }, [availableKeysDep, props.keyOrder]);
62
- const {
63
- current: anchorsList
64
- } = (0, _react.useRef)([]);
65
- const eventEmitter = (0, _useEvents.default)();
66
- const currentClone = (0, _react.useRef)(null);
67
- const currentWorkingKey = (0, _react.useRef)(undefined);
68
- const rootRef = (0, _react.useRef)(null);
69
- const [_order, setOrder] = (0, _react.useState)(initializeOrder);
70
- (0, _react.useEffect)(() => setOrder(initializeOrder()), [initializeOrder]);
71
- const order = (0, _react.useMemo)(() => {
72
- return ("currentOrder" in props ? props.currentOrder || _order : _order).filter(o => o.includes(";") || availableKeys.includes(o));
73
- }, [props.currentOrder, _order, availableKeysDep]);
74
- const cleanOrder = (0, _react.useMemo)(() => order.map(a => a.split(";")[0]), [order]);
75
- const orderId = (0, _react.useMemo)(() => "key-" + cleanOrder.join(""), [cleanOrder]);
76
- function rootEl() {
77
- if (mode === OrderableListReorderMode.TWO_DIMENSIONS) return rootRef.current.lastElementChild.lastElementChild;
78
- return rootRef.current;
79
- }
80
- const findParentElement = target => {
81
- let parent = target;
82
- while (parent.parentElement !== rootEl()) {
83
- if (parent.parentElement === null) break;
84
- parent = parent.parentElement;
85
- }
86
- if (process.env.NODE_ENV === "development" && parent === null) throw new Error("It seems like we could not find a relation between this element and the root list. Are you using portals maybe?");
87
- return parent;
88
- };
89
- (0, _react.useLayoutEffect)(() => {
90
- if (shrinkToOnOrder) rootEl().style.setProperty("--shrink-to", "".concat(shrinkToOnOrder, "px"));
91
- }, [shrinkToOnOrder]);
92
- const calculateReordering = (0, _react.useMemo)(() => {
93
- return (0, _throttle.default)((e, els, currentOrder) => {
94
- if (els.length > currentOrder.length || !currentWorkingKey.current) return;
95
- const parent = findParentElement(e.target);
96
- const indexOfKeyInCleanOrder = els.indexOf(parent);
97
- const keyOfTheOverElement = currentOrder[indexOfKeyInCleanOrder];
98
- const isDraggingOwnElement = currentWorkingKey.current === keyOfTheOverElement;
99
- if (indexOfKeyInCleanOrder === -1 || keyOfTheOverElement === undefined) return;
100
- if (!isDraggingOwnElement) {
101
- const {
102
- isAfter,
103
- isBefore
104
- } = (() => {
105
- if (mode === OrderableListReorderMode.TWO_DIMENSIONS) {
106
- const distanceFromLeft = e.offsetX;
107
- const widthOfEl = parent.clientWidth;
108
- const offset = widthOfEl * 0.25;
109
- const isAfter = distanceFromLeft > widthOfEl - offset;
110
- const isBefore = distanceFromLeft < offset;
111
- return {
112
- isAfter,
113
- isBefore
114
- };
115
- } else {
116
- const distanceFromTop = e.offsetY;
117
- const heightOfEl = parent.clientHeight;
118
- const offset = heightOfEl * 0.25;
119
- const isAfter = distanceFromTop > heightOfEl - offset;
120
- const isBefore = distanceFromTop < offset;
121
- return {
122
- isAfter,
123
- isBefore
124
- };
125
- }
126
- })();
127
- const checkIfCanMove = keyOfOverElement => {
128
- return keyOfOverElement === undefined || keyOfOverElement !== currentWorkingKey.current;
129
- };
130
- const indexOfTheNewElement = indexOfKeyInCleanOrder + (isAfter ? 1 : -1);
131
- const shouldTriggerReordering = (isAfter || isBefore) && checkIfCanMove(currentOrder[indexOfTheNewElement]);
132
- if (shouldTriggerReordering) {
133
- setOrder(p => {
134
- const previousIndex = currentOrder.indexOf(currentWorkingKey.current);
135
- const indexOfKeyInProvidedOrder = cleanKeys(p).indexOf(keyOfTheOverElement);
136
- let indexOfTheNewElement = indexOfKeyInProvidedOrder + (isBefore ? -1 : 0);
137
- if (previousIndex > indexOfTheNewElement) indexOfTheNewElement++;
138
- const orderWithoutCurrent = p.filter(a => {
139
- if (a.startsWith("".concat(currentWorkingKey.current, ";"))) return false;
140
- return a !== currentWorkingKey.current;
141
- });
142
- orderWithoutCurrent.splice(indexOfTheNewElement, 0, "".concat(currentWorkingKey.current, ";").concat(Date.now()));
143
- return orderWithoutCurrent;
144
- });
145
- }
146
- }
147
- }, 1000 / 60);
148
- }, []);
149
- (0, _react.useEffect)(() => {
150
- function registerListeners() {
151
- const els = Array.from(rootEl().children);
152
- const calculateReorderingCall = e => {
153
- const els = Array.from(rootEl().children);
154
- calculateReordering(e, els, cleanOrder);
155
- };
156
- for (let el of els) el.addEventListener("mousemove", calculateReorderingCall);
157
- return () => {
158
- for (let el of els) el.removeEventListener("mousemove", calculateReorderingCall);
159
- };
160
- }
161
- if (mode === OrderableListReorderMode.VERTICAL) {
162
- return registerListeners();
163
- } else {
164
- let unsubscribe;
165
- let timeout = setTimeout(() => {
166
- unsubscribe = registerListeners();
167
- }, 250);
168
- return () => {
169
- clearTimeout(timeout);
170
- if (unsubscribe) unsubscribe();
171
- };
172
- }
173
- }, [cleanOrder]);
174
- (0, _react.useEffect)(() => {
175
- if ("onChangeKeyOrder" in props) props.onChangeKeyOrder(cleanKeys(_order));
176
- }, [_order]);
177
- const cleanOrderRef = (0, _react.useRef)(cleanOrder);
178
- (0, _react.useEffect)(() => {
179
- cleanOrderRef.current = cleanOrder;
180
- }, [cleanOrder]);
181
- const onAnchorClick = (0, _react.useCallback)(_ref2 => {
182
- let {
183
- target: anchor
184
- } = _ref2;
185
- let offset;
186
- const orderableListItemForAnchor = findParentElement(anchor);
187
- const box = orderableListItemForAnchor.getBoundingClientRect();
188
- const els = Array.from(rootEl().children);
189
- const elIndex = els.indexOf(orderableListItemForAnchor);
190
- const clone = orderableListItemForAnchor.cloneNode(true);
191
- currentClone.current = clone;
192
- if (process.env.NODE_ENV === "development") clone.setAttribute("data-testid", "orderable-list-clone");
193
- clone.setAttribute("data-orderableid", "orderable-list-clone");
194
- clone.style.width = "".concat(box.width, "px");
195
- clone.style.height = "".concat(box.height, "px");
196
- clone.style.top = "".concat(box.top, "px");
197
- clone.style.left = "".concat(box.left, "px");
198
- clone.classList.add(_OrderableListModule.default.clone);
199
- if (shrinkToOnOrder) clone.style.maxHeight = "".concat(box.height, "px");
200
- setTimeout(() => {
201
- if (cloneClassName) clone.classList.add(cloneClassName);
202
- if (shrinkToOnOrder) clone.style.maxHeight = "".concat(shrinkToOnOrder, "px");
203
- }, 0);
204
- orderableListItemForAnchor.classList.add(_OrderableListModule.default.currentOrdering);
205
- orderableListItemForAnchor.classList.remove(_OrderableListModule.default.visible);
206
- const movementControl = e => {
207
- const {
208
- x: x1,
209
- y: y1
210
- } = "touches" in e ? {
211
- x: e.touches[0].pageX,
212
- y: e.touches[0].pageY
213
- } : e;
214
- if (!offset) offset = [x1 - box.left, y1 - box.top];
215
- const [offsetX, offsetY] = offset;
216
- clone.style.top = "".concat(y1 - offsetY, "px");
217
- clone.style.left = "".concat(x1 - offsetX, "px");
218
- };
219
- document.body.appendChild(clone);
220
- const deleteClone = () => {
221
- window.removeEventListener("mousemove", movementControl);
222
- window.removeEventListener("touchmove", movementControl);
223
- window.removeEventListener("touchend", deleteClone);
224
- window.removeEventListener("mouseup", deleteClone);
225
- orderableListItemForAnchor.style.visibility = "initial";
226
- currentWorkingKey.current = undefined;
227
- window.document.body.classList.remove(_OrderableListModule.default.unselectable);
228
- {
229
- const els = Array.from(rootEl().children);
230
- const elInvisible = els.find(a => !a.classList.contains(_OrderableListModule.default.visible) && a.style.maxHeight !== "0px");
231
- if (shrinkToOnOrder) {
232
- const child = elInvisible.lastElementChild;
233
- child.style.maxHeight = "".concat(child.scrollHeight, "px");
234
- child.classList.add(_OrderableListModule.default.transitionHeight);
235
- const onEnd = (0, _ownEvent.default)(() => {
236
- child.removeEventListener("transitionend", onEnd);
237
- child.style.maxHeight = "initial";
238
- child.classList.remove(_OrderableListModule.default.transitionHeight);
239
- });
240
- child.addEventListener("transitionend", onEnd);
241
- }
242
- const box = elInvisible.getBoundingClientRect();
243
- function cleanUp() {
244
- if (shrinkToOnOrder) {
245
- rootEl().style.removeProperty("padding-top");
246
- rootEl().style.removeProperty("min-height");
247
- }
248
- eventEmitter.dispatcher("order-stop");
249
- rootEl().classList.remove(_OrderableListModule.default.ordering);
250
- if (reorderingClassName) rootEl().classList.remove(reorderingClassName);
251
- for (let el of els) el.classList.remove(_OrderableListModule.default.visible);
252
- clone.remove();
253
- currentClone.current = null;
254
- for (let el of Array.from(elInvisible.children)) el.style.height = "";
255
- }
256
- if (clone.style.top.startsWith(Math.floor(box.top).toString()) && clone.style.left.startsWith(Math.floor(box.left).toString())) {
257
- cleanUp();
258
- } else {
259
- clone.style.top = "".concat(box.top, "px");
260
- clone.style.left = "".concat(box.left, "px");
261
- clone.style.transition = "top 500ms linear, left 500ms linear";
262
- clone.addEventListener("transitionend", () => {
263
- cleanUp();
264
- });
265
- }
266
- }
267
- };
268
- for (let el of els) {
269
- el.classList.add(_OrderableListModule.default.visible);
270
- }
271
- if (shrinkToOnOrder) {
272
- for (let el of els) el.style.maxHeight = "".concat(el.scrollHeight, "px");
273
- const targetHeight = elIndex * shrinkToOnOrder;
274
- const currentHeight = orderableListItemForAnchor.offsetTop - els[0].offsetTop;
275
- const paddingTop = currentHeight - targetHeight;
276
- rootEl().style.paddingTop = "".concat(paddingTop, "px");
277
- rootEl().style.minHeight = "".concat(rootEl().clientHeight, "px");
278
- }
279
- orderableListItemForAnchor.style.visibility = "hidden";
280
- orderableListItemForAnchor.classList.remove(_OrderableListModule.default.visible);
281
- rootEl().classList.add(_OrderableListModule.default.ordering);
282
- if (reorderingClassName) rootEl().classList.add(reorderingClassName);
283
- currentWorkingKey.current = cleanOrderRef.current[elIndex];
284
- eventEmitter.dispatcher("order-start");
285
- window.document.body.classList.add(_OrderableListModule.default.unselectable);
286
- window.addEventListener("mouseup", deleteClone);
287
- window.addEventListener("mousemove", movementControl);
288
- window.addEventListener("touchend", deleteClone);
289
- window.addEventListener("touchmove", movementControl);
290
- }, []);
291
- (0, _react.useLayoutEffect)(() => {
292
- if (currentClone.current) {
293
- const els = Array.from(rootEl().children);
294
- const elInvisible = els.find(a => !a.classList.contains(_OrderableListModule.default.visible) && a.style.maxHeight !== "0px");
295
- elInvisible.children[0].style.height = "".concat(currentClone.current.clientHeight, "px");
296
- setTimeout(() => {
297
- elInvisible.children[1].style.height = "".concat(currentClone.current.clientHeight, "px");
298
- }, 150);
299
- }
300
- }, [cleanOrder]);
301
- const toSpread = _objectSpread({}, props);
302
- delete toSpread.keyOrder;
303
- delete toSpread.onChangeKeyOrder;
304
- const childrenToRender = [...children].filter(a => cleanOrder.includes(a.key)).sort((a, b) => cleanOrder.indexOf(a.key) - cleanOrder.indexOf(b.key)).map((a, i) => _objectSpread(_objectSpread({}, a), {}, {
305
- key: order[i]
306
- }));
307
- (0, _react.useLayoutEffect)(() => {
308
- rootEl().addEventListener("touchstart", e => {
309
- const relatedAnchor = anchorsList.find(anchor => anchor.contains(e.target));
310
- if (relatedAnchor) {
311
- e.preventDefault();
312
- onAnchorClick({
313
- target: relatedAnchor
314
- });
315
- const moveCb = (0, _throttle.default)(e => {
316
- const touch = e.touches[0];
317
- const [x, y] = [touch.clientX, touch.clientY];
318
- const els = Array.from(rootEl().children);
319
- const currentElementIdx = els.findIndex((c, i) => {
320
- const rect = c === null || c === void 0 ? void 0 : c.getBoundingClientRect();
321
- if (!rect) return false;
322
- return rect.top < y && rect.top + rect.height > y;
323
- });
324
- if (currentElementIdx !== -1) {
325
- const el = els[currentElementIdx];
326
- const rect = el.getBoundingClientRect();
327
- calculateReordering({
328
- target: el,
329
- offsetY: y - rect.top
330
- }, els, cleanOrderRef.current);
331
- }
332
- }, 500);
333
- const t = e.target;
334
- const touchMoveCb = e => {
335
- e.stopPropagation();
336
- window.dispatchEvent(new TouchEvent(e.type, e));
337
- moveCb(e);
338
- };
339
- const removeCb = e => {
340
- t.removeEventListener("touchmove", touchMoveCb);
341
- t.removeEventListener("touchend", removeCb);
342
- window.dispatchEvent(new TouchEvent(e.type, e));
343
- };
344
- t.addEventListener("touchmove", touchMoveCb);
345
- t.addEventListener("touchend", removeCb);
346
- }
347
- });
348
- }, []);
349
- const e = (0, _react.useMemo)(() => ({
350
- bindAnchor: el => {
351
- el.addEventListener("mousedown", onAnchorClick);
352
- anchorsList.push(el);
353
- },
354
- unbindAnchor: el => {
355
- el.removeEventListener("mousedown", onAnchorClick);
356
- anchorsList.splice(anchorsList.indexOf(el), 1);
357
- },
358
- on: eventEmitter.subscriber
359
- }), []);
360
- return /*#__PURE__*/_react.default.createElement(OrderableListContext.Provider, {
361
- value: e
362
- }, /*#__PURE__*/_react.default.createElement("div", _extends({
363
- ref: rootRef,
364
- className: "".concat(_OrderableListModule.default.root, " ").concat(className, " ").concat(shrinkToOnOrder ? _OrderableListModule.default.shrinkable : "")
365
- }, toSpread), mode === OrderableListReorderMode.VERTICAL ? /*#__PURE__*/_react.default.createElement(_AnimatedEntrance.default, null, childrenToRender) : /*#__PURE__*/_react.default.createElement(_UncontrolledTransition.default, {
366
- className: _OrderableListModule.default.transition,
367
- transitionType: _Transition.TransitionAnimationTypes.CUSTOM,
368
- config: {
369
- backward: {
370
- elementEntering: "",
371
- elementExiting: ""
372
- },
373
- forward: {
374
- elementEntering: _OrderableListModule.default.stubEntering,
375
- elementExiting: _TransitionModule.default.fadeOut
376
- }
377
- },
378
- contentClassName: "".concat(className)
379
- }, /*#__PURE__*/_react.default.createElement(_react.Fragment, {
380
- key: orderId
381
- }, [...children].filter(a => cleanOrder.includes(a.key)).sort((a, b) => cleanOrder.indexOf(a.key) - cleanOrder.indexOf(b.key)).map((a, i) => /*#__PURE__*/_react.default.createElement(HeroWrapper, {
382
- key: i,
383
- id: a.key
384
- }, a))))));
385
- }
386
- function HeroWrapper(_ref3) {
387
- let {
388
- children,
389
- id
390
- } = _ref3;
391
- const {
392
- heroRef
393
- } = (0, _useHero.default)(id, undefined, {
394
- onHeroStart: (_c, _o, t) => {
395
- t.querySelectorAll("img").forEach(img => img.style.visibility = "hidden");
396
- },
397
- onHeroCloned(clone) {
398
- // if (!clone.classList.contains(Styles.visible)) clone.style.opacity = "0";
399
- },
400
- onHeroEnd: () => {
401
- if (heroRef.current) heroRef.current.querySelectorAll("img").forEach(img => img.style.visibility = "");
402
- }
403
- });
404
- return /*#__PURE__*/_react.default.createElement("div", {
405
- ref: heroRef
406
- }, children);
407
- }
408
- function useOrderableListAnchor() {
409
- const anchorRef = (0, _react.useRef)(null);
410
- const ctx = (0, _react.useContext)(OrderableListContext);
411
- (0, _react.useLayoutEffect)(() => {
412
- if (!ctx) return;
413
- const {
414
- bindAnchor,
415
- unbindAnchor
416
- } = ctx;
417
- bindAnchor(anchorRef.current);
418
- return () => unbindAnchor(anchorRef.current);
419
- }, []);
420
- return {
421
- anchorRef: ctx ? anchorRef : undefined
422
- };
423
- }
424
- function useOrderableEvents(events) {
425
- const {
426
- on
427
- } = (0, _react.useContext)(OrderableListContext);
428
- (0, _react.useEffect)(() => {
429
- const unsubscribers = [];
430
- for (let eventName in events) {
431
- unsubscribers.push(on(eventName, events[eventName]));
432
- }
433
- return () => {
434
- unsubscribers.forEach(u => u());
435
- };
436
- }, [events]);
437
- }
438
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGhyb3R0bGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1VuY29udHJvbGxlZFRyYW5zaXRpb24iLCJfVHJhbnNpdGlvbk1vZHVsZSIsIl91c2VIZXJvIiwiX0FuaW1hdGVkRW50cmFuY2UiLCJfVHJhbnNpdGlvbiIsIl9PcmRlcmFibGVMaXN0TW9kdWxlIiwiX3VzZUV2ZW50cyIsIl9vd25FdmVudCIsIl9leGNsdWRlZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFwcGx5Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiaW5kZXhPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiT3JkZXJhYmxlTGlzdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlIiwiZXhwb3J0cyIsImNsZWFuS2V5cyIsIm1hcCIsImEiLCJzcGxpdCIsIk9yZGVyYWJsZUxpc3QiLCJfcmVmIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJtb2RlIiwiVkVSVElDQUwiLCJzaHJpbmtUb09uT3JkZXIiLCJyZW9yZGVyaW5nQ2xhc3NOYW1lIiwiY2xvbmVDbGFzc05hbWUiLCJwcm9wcyIsImF2YWlsYWJsZUtleXMiLCJrZXkiLCJhdmFpbGFibGVLZXlzRGVwIiwiam9pbiIsImluaXRpYWxpemVPcmRlciIsInVzZUNhbGxiYWNrIiwibWlzc2luZ09yZGVyS2V5cyIsImtleU9yZGVyIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJjdXJyZW50IiwiYW5jaG9yc0xpc3QiLCJ1c2VSZWYiLCJldmVudEVtaXR0ZXIiLCJ1c2VFdmVudHMiLCJjdXJyZW50Q2xvbmUiLCJjdXJyZW50V29ya2luZ0tleSIsInJvb3RSZWYiLCJfb3JkZXIiLCJzZXRPcmRlciIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwib3JkZXIiLCJ1c2VNZW1vIiwiY3VycmVudE9yZGVyIiwiY2xlYW5PcmRlciIsIm9yZGVySWQiLCJyb290RWwiLCJUV09fRElNRU5TSU9OUyIsImxhc3RFbGVtZW50Q2hpbGQiLCJmaW5kUGFyZW50RWxlbWVudCIsInRhcmdldCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFcnJvciIsInVzZUxheW91dEVmZmVjdCIsInN0eWxlIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJjYWxjdWxhdGVSZW9yZGVyaW5nIiwidGhyb3R0bGUiLCJlbHMiLCJpbmRleE9mS2V5SW5DbGVhbk9yZGVyIiwia2V5T2ZUaGVPdmVyRWxlbWVudCIsImlzRHJhZ2dpbmdPd25FbGVtZW50IiwiaXNBZnRlciIsImlzQmVmb3JlIiwiZGlzdGFuY2VGcm9tTGVmdCIsIm9mZnNldFgiLCJ3aWR0aE9mRWwiLCJjbGllbnRXaWR0aCIsIm9mZnNldCIsImRpc3RhbmNlRnJvbVRvcCIsIm9mZnNldFkiLCJoZWlnaHRPZkVsIiwiY2xpZW50SGVpZ2h0IiwiY2hlY2tJZkNhbk1vdmUiLCJrZXlPZk92ZXJFbGVtZW50IiwiaW5kZXhPZlRoZU5ld0VsZW1lbnQiLCJzaG91bGRUcmlnZ2VyUmVvcmRlcmluZyIsInAiLCJwcmV2aW91c0luZGV4IiwiaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciIsIm9yZGVyV2l0aG91dEN1cnJlbnQiLCJzdGFydHNXaXRoIiwic3BsaWNlIiwiRGF0ZSIsIm5vdyIsInJlZ2lzdGVyTGlzdGVuZXJzIiwiQXJyYXkiLCJmcm9tIiwiY2FsY3VsYXRlUmVvcmRlcmluZ0NhbGwiLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5zdWJzY3JpYmUiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsIm9uQ2hhbmdlS2V5T3JkZXIiLCJjbGVhbk9yZGVyUmVmIiwib25BbmNob3JDbGljayIsIl9yZWYyIiwiYW5jaG9yIiwib3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IiLCJib3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJlbEluZGV4IiwiY2xvbmUiLCJjbG9uZU5vZGUiLCJzZXRBdHRyaWJ1dGUiLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJTdHlsZXMiLCJtYXhIZWlnaHQiLCJjdXJyZW50T3JkZXJpbmciLCJyZW1vdmUiLCJ2aXNpYmxlIiwibW92ZW1lbnRDb250cm9sIiwieCIsIngxIiwieSIsInkxIiwidG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJkb2N1bWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImRlbGV0ZUNsb25lIiwid2luZG93IiwidmlzaWJpbGl0eSIsInVuc2VsZWN0YWJsZSIsImVsSW52aXNpYmxlIiwiZmluZCIsImNvbnRhaW5zIiwiY2hpbGQiLCJzY3JvbGxIZWlnaHQiLCJ0cmFuc2l0aW9uSGVpZ2h0Iiwib25FbmQiLCJvd25FdmVudCIsImNsZWFuVXAiLCJyZW1vdmVQcm9wZXJ0eSIsImRpc3BhdGNoZXIiLCJvcmRlcmluZyIsIk1hdGgiLCJmbG9vciIsInRvU3RyaW5nIiwidHJhbnNpdGlvbiIsInRhcmdldEhlaWdodCIsImN1cnJlbnRIZWlnaHQiLCJvZmZzZXRUb3AiLCJwYWRkaW5nVG9wIiwibWluSGVpZ2h0IiwidG9TcHJlYWQiLCJjaGlsZHJlblRvUmVuZGVyIiwic29ydCIsImIiLCJyZWxhdGVkQW5jaG9yIiwicHJldmVudERlZmF1bHQiLCJtb3ZlQ2IiLCJ0b3VjaCIsImNsaWVudFgiLCJjbGllbnRZIiwiY3VycmVudEVsZW1lbnRJZHgiLCJmaW5kSW5kZXgiLCJjIiwicmVjdCIsInRvdWNoTW92ZUNiIiwic3RvcFByb3BhZ2F0aW9uIiwiZGlzcGF0Y2hFdmVudCIsIlRvdWNoRXZlbnQiLCJ0eXBlIiwicmVtb3ZlQ2IiLCJiaW5kQW5jaG9yIiwidW5iaW5kQW5jaG9yIiwib24iLCJzdWJzY3JpYmVyIiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwicmVmIiwicm9vdCIsInNocmlua2FibGUiLCJ0cmFuc2l0aW9uVHlwZSIsIlRyYW5zaXRpb25BbmltYXRpb25UeXBlcyIsIkNVU1RPTSIsImNvbmZpZyIsImJhY2t3YXJkIiwiZWxlbWVudEVudGVyaW5nIiwiZWxlbWVudEV4aXRpbmciLCJmb3J3YXJkIiwic3R1YkVudGVyaW5nIiwiVHJhbnNpdGlvblN0eWxlcyIsImZhZGVPdXQiLCJjb250ZW50Q2xhc3NOYW1lIiwiRnJhZ21lbnQiLCJIZXJvV3JhcHBlciIsImlkIiwiX3JlZjMiLCJoZXJvUmVmIiwidXNlSGVybyIsIm9uSGVyb1N0YXJ0IiwiX2MiLCJfbyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbWciLCJvbkhlcm9DbG9uZWQiLCJvbkhlcm9FbmQiLCJ1c2VPcmRlcmFibGVMaXN0QW5jaG9yIiwiYW5jaG9yUmVmIiwiY3R4IiwidXNlQ29udGV4dCIsInVzZU9yZGVyYWJsZUV2ZW50cyIsImV2ZW50cyIsInVuc3Vic2NyaWJlcnMiLCJldmVudE5hbWUiLCJ1Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvT3JkZXJhYmxlTGlzdC9PcmRlcmFibGVMaXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGhyb3R0bGUgZnJvbSBcImxvZGFzaC90aHJvdHRsZVwiO1xuaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIERldGFpbGVkSFRNTFByb3BzLFxuICBGcmFnbWVudCxcbiAgSFRNTEF0dHJpYnV0ZXMsXG4gIFByb3BzV2l0aENoaWxkcmVuLFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgVW5jb250cm9sbGVkVHJhbnNpdGlvbiBmcm9tIFwiLi4vVW5jb250cm9sbGVkVHJhbnNpdGlvblwiO1xuaW1wb3J0IFRyYW5zaXRpb25TdHlsZXMgZnJvbSBcIi4uL1RyYW5zaXRpb24vVHJhbnNpdGlvbi5tb2R1bGUuc2Nzc1wiO1xuaW1wb3J0IHVzZUhlcm8gZnJvbSBcIi4uLy4uL2hvb2tzL3VzZUhlcm9cIjtcbmltcG9ydCBBbmltYXRlZEVudHJhbmNlIGZyb20gXCIuLi9BbmltYXRlZEVudHJhbmNlXCI7XG5pbXBvcnQgeyBUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vVHJhbnNpdGlvblwiO1xuaW1wb3J0IFN0eWxlcyBmcm9tIFwiLi9PcmRlcmFibGVMaXN0Lm1vZHVsZS5zY3NzXCI7XG5pbXBvcnQgdXNlRXZlbnRzIGZyb20gXCIuLi8uLi9ob29rcy91dGlsaXR5L3VzZUV2ZW50c1wiO1xuaW1wb3J0IG93bkV2ZW50IGZyb20gXCIuLi8uLi91dGlscy9vd25FdmVudFwiO1xuXG50eXBlIEV2ZW50cyA9IFwib3JkZXItc3RvcFwiIHwgXCJvcmRlci1zdGFydFwiO1xuXG5jb25zdCBPcmRlcmFibGVMaXN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8e1xuICBiaW5kQW5jaG9yOiAoYmluZEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB2b2lkO1xuICB1bmJpbmRBbmNob3I6IChiaW5kRWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHZvaWQ7XG4gIG9uOiAoZXZlbnROYW1lOiBFdmVudHMsIGNiOiAoKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufT4obnVsbCBhcyBhbnkpO1xuXG5leHBvcnQgZW51bSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUge1xuICBWRVJUSUNBTCA9IFwidlwiLFxuICBUV09fRElNRU5TSU9OUyA9IFwiaHZcIixcbn1cblxuZnVuY3Rpb24gY2xlYW5LZXlzKGtleXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBrZXlzLm1hcCgoYSkgPT4gYS5zcGxpdChcIjtcIilbMF0pO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSByZW9yZGVyZWQgYnkgZHJhZ2dpbmcgdGhlbSB3aXRoIHlvdXIgbW91c2Ugb3IgdG91Y2guXG4gKiBJdCBzdXBwb3J0cyBzaW1wbGUgdmVydGljYWwgZHJhZ2dpbmcgYW5kIG1vcmUgYWR2YW5jZWQgMkQgcmVvcmRlcmluZywgd2l0aCBzbW9vdGggYW5pbWF0aW9uc1xuICogd2hlbiBpdGVtcyBtb3ZlIGFyb3VuZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT3JkZXJhYmxlTGlzdCh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBtb2RlID0gT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlLlZFUlRJQ0FMLFxuICBzaHJpbmtUb09uT3JkZXIsXG4gIHJlb3JkZXJpbmdDbGFzc05hbWUsXG4gIGNsb25lQ2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufToge1xuICBjaGlsZHJlbjogUmVhY3RFbGVtZW50W107XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZT86IE9yZGVyYWJsZUxpc3RSZW9yZGVyTW9kZTtcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBtYWtlcyB0aGUgZWxlbWVudHMgc2hyaW5rIHRvIHRoaXMgdmFsdWUgaW4gcHggd2hlbiBvcmRlcmluZyBlbGVtZW50c1xuICAgKi9cbiAgc2hyaW5rVG9Pbk9yZGVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGNsYXNzIHRvIGFwcGx5IHdoZW4gcmVvcmRlcmluZ1xuICAgKi9cbiAgcmVvcmRlcmluZ0NsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjbGFzcyB0byBhcHBseSB0byB0aGUgY2xvbmUgZWxcbiAgICovXG4gIGNsb25lQ2xhc3NOYW1lPzogc3RyaW5nO1xufSAmIChcbiAgfCB7XG4gICAgICBrZXlPcmRlcj86IHN0cmluZ1tdO1xuICAgICAgb25DaGFuZ2VLZXlPcmRlcjogKG5ld09yZGVyOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgICB9XG4gIHwge1xuICAgICAgY3VycmVudE9yZGVyPzogc3RyaW5nW107XG4gICAgfVxuKSAmXG4gIERldGFpbGVkSFRNTFByb3BzPEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiwgSFRNTERpdkVsZW1lbnQ+KSB7XG4gIGNvbnN0IGF2YWlsYWJsZUtleXMgPSBjaGlsZHJlbi5tYXAoKGEpID0+IGEua2V5IGFzIHN0cmluZyk7XG4gIGNvbnN0IGF2YWlsYWJsZUtleXNEZXAgPSBhdmFpbGFibGVLZXlzLmpvaW4oXCIsXCIpO1xuICBjb25zdCBpbml0aWFsaXplT3JkZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbWlzc2luZ09yZGVyS2V5cyA9XG4gICAgICBcImtleU9yZGVyXCIgaW4gcHJvcHMgJiYgcHJvcHMua2V5T3JkZXJcbiAgICAgICAgPyBhdmFpbGFibGVLZXlzLmZpbHRlcigoYSkgPT4gIXByb3BzLmtleU9yZGVyIS5pbmNsdWRlcyhhKSlcbiAgICAgICAgOiBbXTtcblxuICAgIHJldHVybiAoXG4gICAgICAoXCJrZXlPcmRlclwiIGluIHByb3BzICYmIHByb3BzLmtleU9yZGVyXG4gICAgICAgID8gWy4uLnByb3BzLmtleU9yZGVyLCAuLi5taXNzaW5nT3JkZXJLZXlzXVxuICAgICAgICA6IHVuZGVmaW5lZCkgfHwgYXZhaWxhYmxlS2V5c1xuICAgICk7XG4gIH0sIFthdmFpbGFibGVLZXlzRGVwLCAocHJvcHMgYXMgYW55KS5rZXlPcmRlcl0pO1xuICBjb25zdCB7IGN1cnJlbnQ6IGFuY2hvcnNMaXN0IH0gPSB1c2VSZWY8SFRNTERpdkVsZW1lbnRbXT4oW10pO1xuICBjb25zdCBldmVudEVtaXR0ZXIgPSB1c2VFdmVudHM8RXZlbnRzLCB7IFtrIGluIEV2ZW50c106IFtdIH0+KCk7XG4gIGNvbnN0IGN1cnJlbnRDbG9uZSA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBjdXJyZW50V29ya2luZ0tleSA9IHVzZVJlZjxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwgYXMgYW55KTtcbiAgY29uc3QgW19vcmRlciwgc2V0T3JkZXJdID0gdXNlU3RhdGUoaW5pdGlhbGl6ZU9yZGVyKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldE9yZGVyKGluaXRpYWxpemVPcmRlcigpKSwgW2luaXRpYWxpemVPcmRlcl0pO1xuXG4gIGNvbnN0IG9yZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIFwiY3VycmVudE9yZGVyXCIgaW4gcHJvcHMgPyBwcm9wcy5jdXJyZW50T3JkZXIgfHwgX29yZGVyIDogX29yZGVyXG4gICAgKS5maWx0ZXIoKG8pID0+IG8uaW5jbHVkZXMoXCI7XCIpIHx8IGF2YWlsYWJsZUtleXMuaW5jbHVkZXMobykpO1xuICB9LCBbKHByb3BzIGFzIGFueSkuY3VycmVudE9yZGVyLCBfb3JkZXIsIGF2YWlsYWJsZUtleXNEZXBdKTtcbiAgY29uc3QgY2xlYW5PcmRlciA9IHVzZU1lbW8oKCkgPT4gb3JkZXIubWFwKChhKSA9PiBhLnNwbGl0KFwiO1wiKVswXSksIFtvcmRlcl0pO1xuICBjb25zdCBvcmRlcklkID0gdXNlTWVtbygoKSA9PiBcImtleS1cIiArIGNsZWFuT3JkZXIuam9pbihcIlwiKSwgW2NsZWFuT3JkZXJdKTtcbiAgZnVuY3Rpb24gcm9vdEVsKCkge1xuICAgIGlmIChtb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVFdPX0RJTUVOU0lPTlMpXG4gICAgICByZXR1cm4gcm9vdFJlZi5jdXJyZW50IS5sYXN0RWxlbWVudENoaWxkIVxuICAgICAgICAubGFzdEVsZW1lbnRDaGlsZCEgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgcmV0dXJuIHJvb3RSZWYuY3VycmVudCEgYXMgSFRNTERpdkVsZW1lbnQ7XG4gIH1cblxuICBjb25zdCBmaW5kUGFyZW50RWxlbWVudCA9ICh0YXJnZXQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgbGV0IHBhcmVudDogSFRNTERpdkVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudC5wYXJlbnRFbGVtZW50ICE9PSByb290RWwoKSkge1xuICAgICAgaWYgKHBhcmVudC5wYXJlbnRFbGVtZW50ID09PSBudWxsKSBicmVhaztcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50IGFzIGFueTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgJiYgcGFyZW50ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkl0IHNlZW1zIGxpa2Ugd2UgY291bGQgbm90IGZpbmQgYSByZWxhdGlvbiBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQgdGhlIHJvb3QgbGlzdC4gQXJlIHlvdSB1c2luZyBwb3J0YWxzIG1heWJlP1wiXG4gICAgICApO1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH07XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKVxuICAgICAgcm9vdEVsKCkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXNocmluay10b1wiLCBgJHtzaHJpbmtUb09uT3JkZXJ9cHhgKTtcbiAgfSwgW3Nocmlua1RvT25PcmRlcl0pO1xuXG4gIGNvbnN0IGNhbGN1bGF0ZVJlb3JkZXJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGhyb3R0bGUoKGU6IGFueSwgZWxzOiBIVE1MRGl2RWxlbWVudFtdLCBjdXJyZW50T3JkZXI6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA+IGN1cnJlbnRPcmRlci5sZW5ndGggfHwgIWN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGUudGFyZ2V0KTtcbiAgICAgIGNvbnN0IGluZGV4T2ZLZXlJbkNsZWFuT3JkZXIgPSBlbHMuaW5kZXhPZihwYXJlbnQpO1xuICAgICAgY29uc3Qga2V5T2ZUaGVPdmVyRWxlbWVudCA9IGN1cnJlbnRPcmRlcltpbmRleE9mS2V5SW5DbGVhbk9yZGVyXTtcbiAgICAgIGNvbnN0IGlzRHJhZ2dpbmdPd25FbGVtZW50ID1cbiAgICAgICAgY3VycmVudFdvcmtpbmdLZXkuY3VycmVudCA9PT0ga2V5T2ZUaGVPdmVyRWxlbWVudDtcbiAgICAgIGlmIChpbmRleE9mS2V5SW5DbGVhbk9yZGVyID09PSAtMSB8fCBrZXlPZlRoZU92ZXJFbGVtZW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghaXNEcmFnZ2luZ093bkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyBpc0FmdGVyLCBpc0JlZm9yZSB9ID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAobW9kZSA9PT0gT3JkZXJhYmxlTGlzdFJlb3JkZXJNb2RlLlRXT19ESU1FTlNJT05TKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21MZWZ0ID0gZS5vZmZzZXRYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGhPZkVsID0gcGFyZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2lkdGhPZkVsICogMC4yNTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBkaXN0YW5jZUZyb21MZWZ0ID4gd2lkdGhPZkVsIC0gb2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBkaXN0YW5jZUZyb21MZWZ0IDwgb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHsgaXNBZnRlciwgaXNCZWZvcmUgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tVG9wID0gZS5vZmZzZXRZO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0T2ZFbCA9IHBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHRPZkVsICogMC4yNTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBkaXN0YW5jZUZyb21Ub3AgPiBoZWlnaHRPZkVsIC0gb2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBkaXN0YW5jZUZyb21Ub3AgPCBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4geyBpc0FmdGVyLCBpc0JlZm9yZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICBjb25zdCBjaGVja0lmQ2FuTW92ZSA9IChrZXlPZk92ZXJFbGVtZW50Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGtleU9mT3ZlckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAga2V5T2ZPdmVyRWxlbWVudCAhPT0gY3VycmVudFdvcmtpbmdLZXkuY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluZGV4T2ZUaGVOZXdFbGVtZW50ID1cbiAgICAgICAgICBpbmRleE9mS2V5SW5DbGVhbk9yZGVyICsgKGlzQWZ0ZXIgPyAxIDogLTEpO1xuICAgICAgICBjb25zdCBzaG91bGRUcmlnZ2VyUmVvcmRlcmluZyA9XG4gICAgICAgICAgKGlzQWZ0ZXIgfHwgaXNCZWZvcmUpICYmXG4gICAgICAgICAgY2hlY2tJZkNhbk1vdmUoY3VycmVudE9yZGVyW2luZGV4T2ZUaGVOZXdFbGVtZW50XSk7XG4gICAgICAgIGlmIChzaG91bGRUcmlnZ2VyUmVvcmRlcmluZykge1xuICAgICAgICAgIHNldE9yZGVyKChwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gY3VycmVudE9yZGVyLmluZGV4T2YoXG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciA9XG4gICAgICAgICAgICAgIGNsZWFuS2V5cyhwKS5pbmRleE9mKGtleU9mVGhlT3ZlckVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGluZGV4T2ZUaGVOZXdFbGVtZW50ID1cbiAgICAgICAgICAgICAgaW5kZXhPZktleUluUHJvdmlkZWRPcmRlciArIChpc0JlZm9yZSA/IC0xIDogMCk7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNJbmRleCA+IGluZGV4T2ZUaGVOZXdFbGVtZW50KSBpbmRleE9mVGhlTmV3RWxlbWVudCsrO1xuICAgICAgICAgICAgY29uc3Qgb3JkZXJXaXRob3V0Q3VycmVudCA9IHAuZmlsdGVyKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhLnN0YXJ0c1dpdGgoYCR7Y3VycmVudFdvcmtpbmdLZXkuY3VycmVudH07YCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGEgIT09IGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9yZGVyV2l0aG91dEN1cnJlbnQuc3BsaWNlKFxuICAgICAgICAgICAgICBpbmRleE9mVGhlTmV3RWxlbWVudCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgYCR7Y3VycmVudFdvcmtpbmdLZXkuY3VycmVudH07JHtEYXRlLm5vdygpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gb3JkZXJXaXRob3V0Q3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMDAgLyA2MCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyTGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKSEuY2hpbGRyZW4pIGFzIEhUTUxEaXZFbGVtZW50W107XG4gICAgICBjb25zdCBjYWxjdWxhdGVSZW9yZGVyaW5nQ2FsbCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKSEuY2hpbGRyZW4pIGFzIEhUTUxEaXZFbGVtZW50W107XG4gICAgICAgIGNhbGN1bGF0ZVJlb3JkZXJpbmcoZSwgZWxzLCBjbGVhbk9yZGVyKTtcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBlbCBvZiBlbHMpXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgY2FsY3VsYXRlUmVvcmRlcmluZ0NhbGwpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBlbCBvZiBlbHMpXG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBjYWxjdWxhdGVSZW9yZGVyaW5nQ2FsbCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XG4gICAgICBsZXQgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZSA9IHJlZ2lzdGVyTGlzdGVuZXJzKCk7XG4gICAgICB9LCAyNTApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NsZWFuT3JkZXJdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcIm9uQ2hhbmdlS2V5T3JkZXJcIiBpbiBwcm9wcykgcHJvcHMub25DaGFuZ2VLZXlPcmRlcihjbGVhbktleXMoX29yZGVyKSk7XG4gIH0sIFtfb3JkZXJdKTtcblxuICBjb25zdCBjbGVhbk9yZGVyUmVmID0gdXNlUmVmKGNsZWFuT3JkZXIpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNsZWFuT3JkZXJSZWYuY3VycmVudCA9IGNsZWFuT3JkZXI7XG4gIH0sIFtjbGVhbk9yZGVyXSk7XG4gIGNvbnN0IG9uQW5jaG9yQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0YXJnZXQ6IGFuY2hvciB9OiBQaWNrPE1vdXNlRXZlbnQsIFwidGFyZ2V0XCI+KSA9PiB7XG4gICAgICBsZXQgb2Zmc2V0OiBbeDogbnVtYmVyLCB5OiBudW1iZXJdO1xuICAgICAgY29uc3Qgb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IgPSBmaW5kUGFyZW50RWxlbWVudChcbiAgICAgICAgYW5jaG9yIGFzIEhUTUxEaXZFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgYm94ID0gb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgIGNvbnN0IGVsSW5kZXggPSBlbHMuaW5kZXhPZihvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvcik7XG5cbiAgICAgIGNvbnN0IGNsb25lID0gb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3IuY2xvbmVOb2RlKFxuICAgICAgICB0cnVlXG4gICAgICApIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgY3VycmVudENsb25lLmN1cnJlbnQgPSBjbG9uZTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKVxuICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRlc3RpZFwiLCBcIm9yZGVyYWJsZS1saXN0LWNsb25lXCIpO1xuICAgICAgY2xvbmUuc2V0QXR0cmlidXRlKFwiZGF0YS1vcmRlcmFibGVpZFwiLCBcIm9yZGVyYWJsZS1saXN0LWNsb25lXCIpO1xuICAgICAgY2xvbmUuc3R5bGUud2lkdGggPSBgJHtib3gud2lkdGh9cHhgO1xuICAgICAgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7Ym94LmhlaWdodH1weGA7XG4gICAgICBjbG9uZS5zdHlsZS50b3AgPSBgJHtib3gudG9wfXB4YDtcbiAgICAgIGNsb25lLnN0eWxlLmxlZnQgPSBgJHtib3gubGVmdH1weGA7XG4gICAgICBjbG9uZS5jbGFzc0xpc3QuYWRkKFN0eWxlcy5jbG9uZSk7XG4gICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSBjbG9uZS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtib3guaGVpZ2h0fXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoY2xvbmVDbGFzc05hbWUpIGNsb25lLmNsYXNzTGlzdC5hZGQoY2xvbmVDbGFzc05hbWUpO1xuICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSBjbG9uZS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtzaHJpbmtUb09uT3JkZXJ9cHhgO1xuICAgICAgfSwgMCk7XG5cbiAgICAgIG9yZGVyYWJsZUxpc3RJdGVtRm9yQW5jaG9yLmNsYXNzTGlzdC5hZGQoU3R5bGVzLmN1cnJlbnRPcmRlcmluZyk7XG4gICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5jbGFzc0xpc3QucmVtb3ZlKFN0eWxlcy52aXNpYmxlKTtcblxuICAgICAgY29uc3QgbW92ZW1lbnRDb250cm9sID0gKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgeDogeDEsIHk6IHkxIH0gPVxuICAgICAgICAgIFwidG91Y2hlc1wiIGluIGUgPyB7IHg6IGUudG91Y2hlc1swXS5wYWdlWCwgeTogZS50b3VjaGVzWzBdLnBhZ2VZIH0gOiBlO1xuICAgICAgICBpZiAoIW9mZnNldCkgb2Zmc2V0ID0gW3gxIC0gYm94LmxlZnQsIHkxIC0gYm94LnRvcF07XG5cbiAgICAgICAgY29uc3QgW29mZnNldFgsIG9mZnNldFldID0gb2Zmc2V0O1xuICAgICAgICBjbG9uZS5zdHlsZS50b3AgPSBgJHt5MSAtIG9mZnNldFl9cHhgO1xuICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gYCR7eDEgLSBvZmZzZXRYfXB4YDtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgY29uc3QgZGVsZXRlQ2xvbmUgPSAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZGVsZXRlQ2xvbmUpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZGVsZXRlQ2xvbmUpO1xuICAgICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5zdHlsZS52aXNpYmlsaXR5ID0gXCJpbml0aWFsXCI7XG4gICAgICAgIGN1cnJlbnRXb3JraW5nS2V5LmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnVuc2VsZWN0YWJsZSk7XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgICAgICBjb25zdCBlbEludmlzaWJsZSA9IGVscy5maW5kKFxuICAgICAgICAgICAgKGEpID0+XG4gICAgICAgICAgICAgICFhLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkgJiZcbiAgICAgICAgICAgICAgYS5zdHlsZS5tYXhIZWlnaHQgIT09IFwiMHB4XCJcbiAgICAgICAgICApITtcbiAgICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGVsSW52aXNpYmxlLmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgICAgICBjaGlsZC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtjaGlsZC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZChTdHlsZXMudHJhbnNpdGlvbkhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBvbkVuZCA9IG93bkV2ZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgb25FbmQpO1xuICAgICAgICAgICAgICBjaGlsZC5zdHlsZS5tYXhIZWlnaHQgPSBgaW5pdGlhbGA7XG4gICAgICAgICAgICAgIGNoaWxkLmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnRyYW5zaXRpb25IZWlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBvbkVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJveCA9IGVsSW52aXNpYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGZ1bmN0aW9uIGNsZWFuVXAoKSB7XG4gICAgICAgICAgICBpZiAoc2hyaW5rVG9Pbk9yZGVyKSB7XG4gICAgICAgICAgICAgIHJvb3RFbCgpLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwicGFkZGluZy10b3BcIik7XG4gICAgICAgICAgICAgIHJvb3RFbCgpLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWluLWhlaWdodFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRFbWl0dGVyLmRpc3BhdGNoZXIoXCJvcmRlci1zdG9wXCIpO1xuICAgICAgICAgICAgcm9vdEVsKCkuY2xhc3NMaXN0LnJlbW92ZShTdHlsZXMub3JkZXJpbmcpO1xuICAgICAgICAgICAgaWYgKHJlb3JkZXJpbmdDbGFzc05hbWUpXG4gICAgICAgICAgICAgIHJvb3RFbCgpLmNsYXNzTGlzdC5yZW1vdmUocmVvcmRlcmluZ0NsYXNzTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbCBvZiBlbHMpIGVsLmNsYXNzTGlzdC5yZW1vdmUoU3R5bGVzLnZpc2libGUpO1xuICAgICAgICAgICAgY2xvbmUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjdXJyZW50Q2xvbmUuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGxldCBlbCBvZiBBcnJheS5mcm9tKGVsSW52aXNpYmxlLmNoaWxkcmVuKSBhcyBIVE1MRGl2RWxlbWVudFtdKVxuICAgICAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjbG9uZS5zdHlsZS50b3Auc3RhcnRzV2l0aChNYXRoLmZsb29yKGJveC50b3ApLnRvU3RyaW5nKCkpICYmXG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0LnN0YXJ0c1dpdGgoTWF0aC5mbG9vcihib3gubGVmdCkudG9TdHJpbmcoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUudG9wID0gYCR7Ym94LnRvcH1weGA7XG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gYCR7Ym94LmxlZnR9cHhgO1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUudHJhbnNpdGlvbiA9IGB0b3AgNTAwbXMgbGluZWFyLCBsZWZ0IDUwMG1zIGxpbmVhcmA7XG4gICAgICAgICAgICBjbG9uZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZvciAobGV0IGVsIG9mIGVscykge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKFN0eWxlcy52aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaHJpbmtUb09uT3JkZXIpIHtcbiAgICAgICAgZm9yIChsZXQgZWwgb2YgZWxzKSBlbC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtlbC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgICBjb25zdCB0YXJnZXRIZWlnaHQgPSBlbEluZGV4ICogc2hyaW5rVG9Pbk9yZGVyO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID1cbiAgICAgICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5vZmZzZXRUb3AgLSBlbHNbMF0ub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gY3VycmVudEhlaWdodCAtIHRhcmdldEhlaWdodDtcbiAgICAgICAgcm9vdEVsKCkuc3R5bGUucGFkZGluZ1RvcCA9IGAke3BhZGRpbmdUb3B9cHhgO1xuICAgICAgICByb290RWwoKS5zdHlsZS5taW5IZWlnaHQgPSBgJHtyb290RWwoKS5jbGllbnRIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgICAgb3JkZXJhYmxlTGlzdEl0ZW1Gb3JBbmNob3Iuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICBvcmRlcmFibGVMaXN0SXRlbUZvckFuY2hvci5jbGFzc0xpc3QucmVtb3ZlKFN0eWxlcy52aXNpYmxlKTtcbiAgICAgIHJvb3RFbCgpLmNsYXNzTGlzdC5hZGQoU3R5bGVzLm9yZGVyaW5nKTtcbiAgICAgIGlmIChyZW9yZGVyaW5nQ2xhc3NOYW1lKSByb290RWwoKS5jbGFzc0xpc3QuYWRkKHJlb3JkZXJpbmdDbGFzc05hbWUpO1xuICAgICAgY3VycmVudFdvcmtpbmdLZXkuY3VycmVudCA9IGNsZWFuT3JkZXJSZWYuY3VycmVudFtlbEluZGV4XTtcbiAgICAgIGV2ZW50RW1pdHRlci5kaXNwYXRjaGVyKFwib3JkZXItc3RhcnRcIik7XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFN0eWxlcy51bnNlbGVjdGFibGUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGRlbGV0ZUNsb25lKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGRlbGV0ZUNsb25lKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG1vdmVtZW50Q29udHJvbCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRDbG9uZS5jdXJyZW50KSB7XG4gICAgICBjb25zdCBlbHMgPSBBcnJheS5mcm9tKHJvb3RFbCgpIS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgIGNvbnN0IGVsSW52aXNpYmxlID0gZWxzLmZpbmQoXG4gICAgICAgIChhKSA9PlxuICAgICAgICAgICFhLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkgJiYgYS5zdHlsZS5tYXhIZWlnaHQgIT09IFwiMHB4XCJcbiAgICAgICkhO1xuICAgICAgKGVsSW52aXNpYmxlLmNoaWxkcmVuWzBdIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgY3VycmVudENsb25lLmN1cnJlbnQhLmNsaWVudEhlaWdodFxuICAgICAgfXB4YDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAoZWxJbnZpc2libGUuY2hpbGRyZW5bMV0gYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIGN1cnJlbnRDbG9uZS5jdXJyZW50IS5jbGllbnRIZWlnaHRcbiAgICAgICAgfXB4YDtcbiAgICAgIH0sIDE1MCk7XG4gICAgfVxuICB9LCBbY2xlYW5PcmRlcl0pO1xuXG4gIGNvbnN0IHRvU3ByZWFkID0geyAuLi5wcm9wcyB9IGFzIGFueTtcbiAgZGVsZXRlIHRvU3ByZWFkLmtleU9yZGVyO1xuICBkZWxldGUgdG9TcHJlYWQub25DaGFuZ2VLZXlPcmRlcjtcblxuICBjb25zdCBjaGlsZHJlblRvUmVuZGVyID0gWy4uLmNoaWxkcmVuXVxuICAgIC5maWx0ZXIoKGEpID0+IGNsZWFuT3JkZXIuaW5jbHVkZXMoYS5rZXkgYXMgc3RyaW5nKSlcbiAgICAuc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBjbGVhbk9yZGVyLmluZGV4T2YoYS5rZXkgYXMgc3RyaW5nKSAtXG4gICAgICAgIGNsZWFuT3JkZXIuaW5kZXhPZihiLmtleSBhcyBzdHJpbmcpXG4gICAgKVxuICAgIC5tYXAoKGE6IFJlYWN0RWxlbWVudCwgaSkgPT4gKHtcbiAgICAgIC4uLmEsXG4gICAgICBrZXk6IG9yZGVyW2ldLFxuICAgIH0pKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHJvb3RFbCgpIS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgcmVsYXRlZEFuY2hvciA9IGFuY2hvcnNMaXN0LmZpbmQoKGFuY2hvcikgPT5cbiAgICAgICAgYW5jaG9yLmNvbnRhaW5zKGUudGFyZ2V0IGFzIGFueSlcbiAgICAgICk7XG4gICAgICBpZiAocmVsYXRlZEFuY2hvcikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uQW5jaG9yQ2xpY2soe1xuICAgICAgICAgIHRhcmdldDogcmVsYXRlZEFuY2hvcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbW92ZUNiID0gdGhyb3R0bGUoKGU6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0b3VjaCA9IGUudG91Y2hlc1swXTtcbiAgICAgICAgICBjb25zdCBbeCwgeV0gPSBbdG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WV07XG4gICAgICAgICAgY29uc3QgZWxzID0gQXJyYXkuZnJvbShyb290RWwoKS5jaGlsZHJlbikgYXMgSFRNTERpdkVsZW1lbnRbXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElkeCA9IGVscy5maW5kSW5kZXgoKGMsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBjPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmICghcmVjdCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlY3QudG9wIDwgeSAmJiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ID4geTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnRJZHggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsc1tjdXJyZW50RWxlbWVudElkeF07XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjYWxjdWxhdGVSZW9yZGVyaW5nKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiB5IC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVscyxcbiAgICAgICAgICAgICAgY2xlYW5PcmRlclJlZi5jdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgY29uc3QgdCA9IGUudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3VjaE1vdmVDYiA9IChlOiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgVG91Y2hFdmVudChlLnR5cGUsIGUgYXMgYW55KSk7XG4gICAgICAgICAgbW92ZUNiKGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVDYiA9IChlOiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHRvdWNoTW92ZUNiKTtcbiAgICAgICAgICB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCByZW1vdmVDYik7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFRvdWNoRXZlbnQoZS50eXBlLCBlIGFzIGFueSkpO1xuICAgICAgICB9O1xuICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdG91Y2hNb3ZlQ2IpO1xuICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCByZW1vdmVDYik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgYmluZEFuY2hvcjogKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQW5jaG9yQ2xpY2spO1xuICAgICAgICBhbmNob3JzTGlzdC5wdXNoKGVsKTtcbiAgICAgIH0sXG4gICAgICB1bmJpbmRBbmNob3I6IChlbDogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBvbkFuY2hvckNsaWNrKTtcbiAgICAgICAgYW5jaG9yc0xpc3Quc3BsaWNlKGFuY2hvcnNMaXN0LmluZGV4T2YoZWwpLCAxKTtcbiAgICAgIH0sXG4gICAgICBvbjogZXZlbnRFbWl0dGVyLnN1YnNjcmliZXIsXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxPcmRlcmFibGVMaXN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZX0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtgJHtTdHlsZXMucm9vdH0gJHtjbGFzc05hbWV9ICR7XG4gICAgICAgICAgc2hyaW5rVG9Pbk9yZGVyID8gU3R5bGVzLnNocmlua2FibGUgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgICB7Li4udG9TcHJlYWR9XG4gICAgICA+XG4gICAgICAgIHttb2RlID09PSBPcmRlcmFibGVMaXN0UmVvcmRlck1vZGUuVkVSVElDQUwgPyAoXG4gICAgICAgICAgPEFuaW1hdGVkRW50cmFuY2U+e2NoaWxkcmVuVG9SZW5kZXJ9PC9BbmltYXRlZEVudHJhbmNlPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxVbmNvbnRyb2xsZWRUcmFuc2l0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N0eWxlcy50cmFuc2l0aW9ufVxuICAgICAgICAgICAgdHJhbnNpdGlvblR5cGU9e1RyYW5zaXRpb25BbmltYXRpb25UeXBlcy5DVVNUT019XG4gICAgICAgICAgICBjb25maWc9e3tcbiAgICAgICAgICAgICAgYmFja3dhcmQ6IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFwiXCIsXG4gICAgICAgICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFwiXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFN0eWxlcy5zdHViRW50ZXJpbmcsXG4gICAgICAgICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFRyYW5zaXRpb25TdHlsZXMuZmFkZU91dCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb250ZW50Q2xhc3NOYW1lPXtgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtvcmRlcklkfT5cbiAgICAgICAgICAgICAge1suLi5jaGlsZHJlbl1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhKSA9PiBjbGVhbk9yZGVyLmluY2x1ZGVzKGEua2V5IGFzIHN0cmluZykpXG4gICAgICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgY2xlYW5PcmRlci5pbmRleE9mKGEua2V5IGFzIHN0cmluZykgLVxuICAgICAgICAgICAgICAgICAgICBjbGVhbk9yZGVyLmluZGV4T2YoYi5rZXkgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChhLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8SGVyb1dyYXBwZXIga2V5PXtpfSBpZD17YS5rZXkgYXMgc3RyaW5nfT5cbiAgICAgICAgICAgICAgICAgICAge2F9XG4gICAgICAgICAgICAgICAgICA8L0hlcm9XcmFwcGVyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICA8L1VuY29udHJvbGxlZFRyYW5zaXRpb24+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L09yZGVyYWJsZUxpc3RDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZXJvV3JhcHBlcih7IGNoaWxkcmVuLCBpZCB9OiBQcm9wc1dpdGhDaGlsZHJlbjx7IGlkOiBzdHJpbmcgfT4pIHtcbiAgY29uc3QgeyBoZXJvUmVmIH0gPSB1c2VIZXJvKGlkLCB1bmRlZmluZWQsIHtcbiAgICBvbkhlcm9TdGFydDogKF9jLCBfbywgdCkgPT4ge1xuICAgICAgdC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nXCIpLmZvckVhY2goXG4gICAgICAgIChpbWcpID0+IChpbWcuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCIpXG4gICAgICApO1xuICAgIH0sXG4gICAgb25IZXJvQ2xvbmVkKGNsb25lKSB7XG4gICAgICAvLyBpZiAoIWNsb25lLmNsYXNzTGlzdC5jb250YWlucyhTdHlsZXMudmlzaWJsZSkpIGNsb25lLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICB9LFxuICAgIG9uSGVyb0VuZDogKCkgPT4ge1xuICAgICAgaWYgKGhlcm9SZWYuY3VycmVudClcbiAgICAgICAgaGVyb1JlZi5jdXJyZW50XG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbWdcIilcbiAgICAgICAgICAuZm9yRWFjaCgoaW1nKSA9PiAoaW1nLnN0eWxlLnZpc2liaWxpdHkgPSBcIlwiKSk7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiA8ZGl2IHJlZj17aGVyb1JlZn0+e2NoaWxkcmVufTwvZGl2Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyYWJsZUxpc3RBbmNob3IoKSB7XG4gIGNvbnN0IGFuY2hvclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCBhcyBhbnkpO1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KE9yZGVyYWJsZUxpc3RDb250ZXh0KTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgYmluZEFuY2hvciwgdW5iaW5kQW5jaG9yIH0gPSBjdHg7XG4gICAgYmluZEFuY2hvcihhbmNob3JSZWYuY3VycmVudCEpO1xuICAgIHJldHVybiAoKSA9PiB1bmJpbmRBbmNob3IoYW5jaG9yUmVmLmN1cnJlbnQhKTtcbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIGFuY2hvclJlZjogY3R4ID8gYW5jaG9yUmVmIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJhYmxlRXZlbnRzKFxuICBldmVudHM6IHtcbiAgICBbayBpbiBFdmVudHNdOiAoKSA9PiB2b2lkO1xuICB9XG4pIHtcbiAgY29uc3QgeyBvbiB9ID0gdXNlQ29udGV4dChPcmRlcmFibGVMaXN0Q29udGV4dCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmVyczogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBldmVudE5hbWUgaW4gZXZlbnRzKSB7XG4gICAgICB1bnN1YnNjcmliZXJzLnB1c2gob24oZXZlbnROYW1lIGFzIEV2ZW50cywgZXZlbnRzW2V2ZW50TmFtZSBhcyBFdmVudHNdKSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB1bnN1YnNjcmliZXJzLmZvckVhY2goKHUpID0+IHUoKSk7XG4gICAgfTtcbiAgfSwgW2V2ZW50c10pO1xufVxuIl0sIm1hcHBp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