@envive-ai/react-hooks 0.1.6 → 0.1.7

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 (667) hide show
  1. package/dist/NewOrgConfig-C5YL4Y62.cjs +20 -0
  2. package/dist/NewOrgConfig-CRyIfb_l.js +15 -0
  3. package/dist/SystemSettingsContext-Cb9YHln8.cjs +20 -0
  4. package/dist/SystemSettingsContext-D3mmGGcv.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-C7c_rHFW.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-DXTEBjGM.js +52 -0
  7. package/dist/amplitudeContext-CB_F-nJY.d.cts +52 -0
  8. package/dist/amplitudeContext-Cak6ijMq.js +287 -0
  9. package/dist/amplitudeContext-DFYBDc0h.d.ts +52 -0
  10. package/dist/amplitudeContext-sTEsPaVG.cjs +309 -0
  11. package/dist/api-DSFlctlc.cjs +269 -0
  12. package/dist/api-JTNjuOfc.js +190 -0
  13. package/dist/{app-CjsQ2_n-.js → app-D_upYeqF.js} +6 -6
  14. package/dist/{app-CnKRZ9RW.cjs → app-KXTMPa4s.cjs} +8 -8
  15. package/dist/application/models/graphql/index.cjs +2 -1
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -1
  18. package/dist/application/models/guards/api/index.cjs +2 -1
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +2 -1
  21. package/dist/application/models/index.cjs +11 -9
  22. package/dist/application/models/index.d.cts +8 -4
  23. package/dist/application/models/index.d.ts +11 -7
  24. package/dist/application/models/index.js +10 -7
  25. package/dist/application/models/utilityTypes/index.cjs +1 -1
  26. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  27. package/dist/application/models/utilityTypes/index.js +1 -1
  28. package/dist/application/models/variantInfo/index.cjs +1 -1
  29. package/dist/application/models/variantInfo/index.d.cts +1 -1
  30. package/dist/application/models/variantInfo/index.d.ts +1 -1
  31. package/dist/application/models/variantInfo/index.js +1 -1
  32. package/dist/application/utils/index.cjs +28 -22
  33. package/dist/application/utils/index.d.cts +12 -8
  34. package/dist/application/utils/index.d.ts +16 -12
  35. package/dist/application/utils/index.js +19 -13
  36. package/dist/{atomStore-B4jIaDPd.cjs → atomStore-DEZyFCNz.cjs} +1 -1
  37. package/dist/{atomStore-D8pjE1vL.js → atomStore-DnPEioF4.js} +1 -1
  38. package/dist/atoms/app/index.cjs +13 -9
  39. package/dist/atoms/app/index.d.cts +15 -11
  40. package/dist/atoms/app/index.d.ts +18 -14
  41. package/dist/atoms/app/index.js +13 -9
  42. package/dist/atoms/atomStore/index.cjs +2 -2
  43. package/dist/atoms/atomStore/index.d.cts +1 -1
  44. package/dist/atoms/atomStore/index.js +2 -2
  45. package/dist/atoms/chat/index.cjs +34 -28
  46. package/dist/atoms/chat/index.d.cts +35 -31
  47. package/dist/atoms/chat/index.d.ts +38 -34
  48. package/dist/atoms/chat/index.js +20 -14
  49. package/dist/atoms/globalSearch/index.cjs +1 -1
  50. package/dist/atoms/globalSearch/index.d.cts +5 -5
  51. package/dist/atoms/globalSearch/index.d.ts +5 -5
  52. package/dist/atoms/globalSearch/index.js +1 -1
  53. package/dist/atoms/org/index.cjs +6 -14
  54. package/dist/atoms/org/index.d.cts +27 -32
  55. package/dist/atoms/org/index.d.ts +30 -35
  56. package/dist/atoms/org/index.js +5 -11
  57. package/dist/atoms/search/index.cjs +44 -34
  58. package/dist/atoms/search/index.d.cts +9 -4
  59. package/dist/atoms/search/index.d.ts +12 -7
  60. package/dist/atoms/search/index.js +26 -16
  61. package/dist/atoms/search/types.cjs +5 -0
  62. package/dist/atoms/search/types.d.cts +2 -0
  63. package/dist/atoms/search/types.d.ts +2 -0
  64. package/dist/atoms/search/types.js +3 -0
  65. package/dist/cdnContext-BMjVfBft.cjs +53 -0
  66. package/dist/cdnContext-DgsJ00Tb.js +38 -0
  67. package/dist/{chat-CV6MXeID.js → chat-B4lkFIxz.js} +1 -1
  68. package/dist/chat-D1Eat8Ih.cjs +394 -0
  69. package/dist/chat-DPJGdUkz.js +258 -0
  70. package/dist/{chat-BubCW1as.cjs → chat-zA-K4tR_.cjs} +1 -1
  71. package/dist/chatElementDisplayLocation-9SW40Dd3.d.cts +25 -0
  72. package/dist/chatElementDisplayLocation-C1tRM5OD.d.ts +25 -0
  73. package/dist/chatSearch-B5jMnCYX.js +315 -0
  74. package/dist/chatSearch-DWMiyWN0.cjs +444 -0
  75. package/dist/chatState-BisPJd5g.cjs +120 -0
  76. package/dist/chatState-BrmBYY8l.js +34 -0
  77. package/dist/commerce-api-CxDIfeME.cjs +318 -0
  78. package/dist/commerce-api-DagLj3D_.js +311 -0
  79. package/dist/{components-B4T3Uzth.js → components-B1edduHz.js} +1 -1
  80. package/dist/{components-Cw9WjA6g.cjs → components-g0G58Kat.cjs} +1 -1
  81. package/dist/config/locators/components/chat/index.cjs +1 -1
  82. package/dist/config/locators/components/chat/index.d.cts +1 -1
  83. package/dist/config/locators/components/chat/index.d.ts +1 -1
  84. package/dist/config/locators/components/chat/index.js +1 -1
  85. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  86. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  87. package/dist/config/locators/components/index.cjs +1 -1
  88. package/dist/config/locators/components/index.d.cts +1 -1
  89. package/dist/config/locators/components/index.d.ts +1 -1
  90. package/dist/config/locators/components/index.js +1 -1
  91. package/dist/config/locators/components/search/index.d.cts +1 -1
  92. package/dist/config/locators/components/search/index.d.ts +1 -1
  93. package/dist/config/locators/index.cjs +42 -22
  94. package/dist/config/locators/index.d.cts +2 -2
  95. package/dist/config/locators/index.d.ts +3 -3
  96. package/dist/config/locators/index.js +25 -5
  97. package/dist/contexts/amplitudeContext/index.cjs +21 -0
  98. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  99. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  100. package/dist/contexts/amplitudeContext/index.js +19 -0
  101. package/dist/contexts/cdnContext/index.cjs +7 -0
  102. package/dist/contexts/cdnContext/index.d.cts +15 -0
  103. package/dist/contexts/cdnContext/index.d.ts +15 -0
  104. package/dist/contexts/cdnContext/index.js +6 -0
  105. package/dist/contexts/chatContext/index.cjs +329 -0
  106. package/dist/contexts/chatContext/index.d.cts +15 -0
  107. package/dist/contexts/chatContext/index.d.ts +15 -0
  108. package/dist/contexts/chatContext/index.js +322 -0
  109. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  110. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  111. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  112. package/dist/contexts/enviveConfigContext/index.js +6 -0
  113. package/dist/contexts/enviveCssContext/index.cjs +65 -0
  114. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  115. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  116. package/dist/contexts/enviveCssContext/index.js +62 -0
  117. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  118. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  119. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  120. package/dist/contexts/featureFlagContext/index.js +103 -0
  121. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  122. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  123. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  124. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  125. package/dist/contexts/graphqlContext/index.cjs +15 -0
  126. package/dist/contexts/graphqlContext/index.d.cts +12 -0
  127. package/dist/contexts/graphqlContext/index.d.ts +12 -0
  128. package/dist/contexts/graphqlContext/index.js +14 -0
  129. package/dist/contexts/localStorageContext/index.cjs +6 -0
  130. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  131. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  132. package/dist/contexts/localStorageContext/index.js +4 -0
  133. package/dist/contexts/newOrgConfigContext/index.cjs +19 -0
  134. package/dist/contexts/newOrgConfigContext/index.d.cts +30 -0
  135. package/dist/contexts/newOrgConfigContext/index.d.ts +30 -0
  136. package/dist/contexts/newOrgConfigContext/index.js +18 -0
  137. package/dist/contexts/searchContext/index.cjs +23 -0
  138. package/dist/contexts/searchContext/index.d.cts +16 -0
  139. package/dist/contexts/searchContext/index.d.ts +16 -0
  140. package/dist/contexts/searchContext/index.js +22 -0
  141. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  142. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  143. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  144. package/dist/contexts/sessionStorageContext/index.js +4 -0
  145. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  146. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  147. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  148. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  149. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  150. package/dist/contexts/systemSettingsContext/index.d.cts +36 -0
  151. package/dist/contexts/systemSettingsContext/index.d.ts +36 -0
  152. package/dist/contexts/systemSettingsContext/index.js +6 -0
  153. package/dist/contexts/types.cjs +7 -0
  154. package/dist/contexts/types.d.cts +4 -0
  155. package/dist/contexts/types.d.ts +4 -0
  156. package/dist/contexts/types.js +3 -0
  157. package/dist/contexts/userIdentityContext/index.cjs +26 -0
  158. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  159. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  160. package/dist/contexts/userIdentityContext/index.js +25 -0
  161. package/dist/domObserver-B6cRGTny.js +285 -0
  162. package/dist/domObserver-DQZwhPrc.cjs +304 -0
  163. package/dist/enviveConfig-BJZ4zTJo.js +62 -0
  164. package/dist/enviveConfig-DdBrcGSQ.cjs +130 -0
  165. package/dist/enviveConfigContext-78orE_uH.cjs +60 -0
  166. package/dist/enviveConfigContext-jBCCWQH9.js +45 -0
  167. package/dist/events/index.cjs +1 -1
  168. package/dist/events/index.d.ts +1 -1
  169. package/dist/events/index.js +1 -1
  170. package/dist/{events-BrLpaNxh.js → events-BHJJjPDN.js} +1 -1
  171. package/dist/{events-DwT6cEwI.cjs → events-B_fJZf9E.cjs} +1 -1
  172. package/dist/featureFlagServiceContext-ChL7DJ53.cjs +56 -0
  173. package/dist/featureFlagServiceContext-D1PzHsEs.d.ts +23 -0
  174. package/dist/featureFlagServiceContext-DQwlCTde.d.cts +23 -0
  175. package/dist/featureFlagServiceContext-DzFfmb1Z.js +42 -0
  176. package/dist/featureGates-Blx10fwB.js +27 -0
  177. package/dist/featureGates-DcZNrUma.cjs +33 -0
  178. package/dist/frontendConfig-DrvrQSm8.d.ts +857 -0
  179. package/dist/frontendConfig-wg41mBok.d.cts +857 -0
  180. package/dist/{globalSearch-BFvEg53C.cjs → globalSearch-Bnjlxtr5.cjs} +1 -1
  181. package/dist/{globalSearch-B6THR7Jx.js → globalSearch-CRWUqnjq.js} +1 -1
  182. package/dist/graphql-B9HhDXYt.cjs +53 -0
  183. package/dist/graphql-W7GMIHUu.js +36 -0
  184. package/dist/graphqlConfig-Bn-HLHsh.cjs +39 -0
  185. package/dist/graphqlConfig-DtZm_YaH.js +14 -0
  186. package/dist/graphqlContext-BJg7B--J.js +96 -0
  187. package/dist/graphqlContext-DI-_VRmb.cjs +111 -0
  188. package/dist/hooks/AmplitudeOperations/index.cjs +21 -0
  189. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  190. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  191. package/dist/hooks/AmplitudeOperations/index.js +21 -0
  192. package/dist/hooks/AppDetails/index.cjs +18 -0
  193. package/dist/hooks/AppDetails/index.d.cts +26 -0
  194. package/dist/hooks/AppDetails/index.d.ts +26 -0
  195. package/dist/hooks/AppDetails/index.js +18 -0
  196. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  197. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  198. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  199. package/dist/hooks/BlockBackButton/index.js +27 -0
  200. package/dist/hooks/CdnOperations/index.cjs +24 -0
  201. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  202. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  203. package/dist/hooks/CdnOperations/index.js +22 -0
  204. package/dist/hooks/ChatToggle/index.cjs +63 -0
  205. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  206. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  207. package/dist/hooks/ChatToggle/index.js +61 -0
  208. package/dist/hooks/ChatToggleAnalytics/index.cjs +37 -0
  209. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  210. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  211. package/dist/hooks/ChatToggleAnalytics/index.js +35 -0
  212. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  213. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  214. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  215. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  216. package/dist/hooks/Debounce/index.cjs +3 -0
  217. package/dist/hooks/Debounce/index.d.cts +5 -0
  218. package/dist/hooks/Debounce/index.d.ts +5 -0
  219. package/dist/hooks/Debounce/index.js +3 -0
  220. package/dist/hooks/ElementObserver/index.cjs +179 -0
  221. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  222. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  223. package/dist/hooks/ElementObserver/index.js +177 -0
  224. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  225. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  226. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  227. package/dist/hooks/GrabAndScroll/index.js +97 -0
  228. package/dist/hooks/GraphQLConfig/index.cjs +16 -0
  229. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  230. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  231. package/dist/hooks/GraphQLConfig/index.js +15 -0
  232. package/dist/hooks/IdentifyUser/index.cjs +59 -0
  233. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  234. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  235. package/dist/hooks/IdentifyUser/index.js +57 -0
  236. package/dist/hooks/ImageResolver/index.cjs +54 -0
  237. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  238. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  239. package/dist/hooks/ImageResolver/index.js +52 -0
  240. package/dist/hooks/Intersection/index.cjs +3 -0
  241. package/dist/hooks/Intersection/index.d.cts +7 -0
  242. package/dist/hooks/Intersection/index.d.ts +7 -0
  243. package/dist/hooks/Intersection/index.js +3 -0
  244. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  245. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  246. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  247. package/dist/hooks/IsSmallScreen/index.js +20 -0
  248. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  249. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  250. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  251. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  252. package/dist/hooks/MessageFilter/index.cjs +53 -0
  253. package/dist/hooks/MessageFilter/index.d.cts +29 -0
  254. package/dist/hooks/MessageFilter/index.d.ts +29 -0
  255. package/dist/hooks/MessageFilter/index.js +53 -0
  256. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  257. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  258. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  259. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  260. package/dist/hooks/NewOrgConfig/index.cjs +19 -0
  261. package/dist/hooks/NewOrgConfig/index.d.cts +22 -0
  262. package/dist/hooks/NewOrgConfig/index.d.ts +22 -0
  263. package/dist/hooks/NewOrgConfig/index.js +19 -0
  264. package/dist/hooks/Search/index.cjs +324 -0
  265. package/dist/hooks/Search/index.d.cts +66 -0
  266. package/dist/hooks/Search/index.d.ts +66 -0
  267. package/dist/hooks/Search/index.js +321 -0
  268. package/dist/hooks/SearchOperations/index.cjs +101 -0
  269. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  270. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  271. package/dist/hooks/SearchOperations/index.js +98 -0
  272. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  273. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  274. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  275. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  276. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  277. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  278. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  279. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  280. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  281. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  282. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  283. package/dist/hooks/SnapCalculator/index.js +27 -0
  284. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  285. package/dist/hooks/SystemSettingsContext/index.d.cts +22 -0
  286. package/dist/hooks/SystemSettingsContext/index.d.ts +22 -0
  287. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  288. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +21 -0
  289. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  290. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  291. package/dist/hooks/TrackComponentVisibleEvent/index.js +21 -0
  292. package/dist/hooks/UpdateAnalyticsProps/index.cjs +61 -0
  293. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  294. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  295. package/dist/hooks/UpdateAnalyticsProps/index.js +58 -0
  296. package/dist/index-BCLaqnc2.d.cts +689 -0
  297. package/dist/{index-ylUiJvnr.d.ts → index-BS7-_CW4.d.ts} +1 -1
  298. package/dist/index-Bmub8e38.d.cts +1 -1
  299. package/dist/index-Bs0QtkSu.d.ts +689 -0
  300. package/dist/index-CESxqFso.d.cts +1 -1
  301. package/dist/index-CKeS9dud.d.ts +28 -0
  302. package/dist/index-CiWEYzXl.d.cts +1 -1
  303. package/dist/index-CyXULMyI.d.cts +186 -0
  304. package/dist/index-Cz10TYQA.d.cts +28 -0
  305. package/dist/{index-B0NW9KTj.d.cts → index-D46Rd0io.d.cts} +1 -1
  306. package/dist/{index-C6KdON7d.d.ts → index-D8ThXrqI.d.ts} +1 -1
  307. package/dist/{index-PGF8BvxQ.d.ts → index-D9VegTU-.d.ts} +1 -1
  308. package/dist/{index-DOii3C6b.d.ts → index-DBqgBV9N.d.ts} +1 -1
  309. package/dist/{index-Cqg6ltII.d.ts → index-DNUKSg6R.d.ts} +1 -1
  310. package/dist/{index-BDPWBU3h.d.cts → index-DO0s5KNA.d.cts} +1 -1
  311. package/dist/{index-CcIG01PJ.d.ts → index-DuyZQOE1.d.ts} +2 -2
  312. package/dist/{index-Byb45OPg.d.cts → index-REhT-Pls.d.cts} +1 -1
  313. package/dist/index-fKJB9EFb.d.ts +186 -0
  314. package/dist/interceptors/index.cjs +2 -1
  315. package/dist/interceptors/index.d.cts +9 -10
  316. package/dist/interceptors/index.d.ts +12 -13
  317. package/dist/interceptors/index.js +2 -1
  318. package/dist/interceptors/types.cjs +1 -0
  319. package/dist/interceptors/types.d.cts +12 -0
  320. package/dist/interceptors/types.d.ts +12 -0
  321. package/dist/interceptors/types.js +3 -0
  322. package/dist/localStorageContext-6OrGDFid.js +95 -0
  323. package/dist/localStorageContext-Bld0OWmG.cjs +115 -0
  324. package/dist/logger-CSL2jqI9.cjs +26 -0
  325. package/dist/logger-D5MFf3nW.js +20 -0
  326. package/dist/{models-BkXg5eIP.cjs → models-Dn8Emdzc.js} +219 -458
  327. package/dist/models-ZpQcRZQK.cjs +1536 -0
  328. package/dist/newOrgConfigAtom--tewb_G0.js +8 -0
  329. package/dist/newOrgConfigAtom-DkSi45_Q.cjs +15 -0
  330. package/dist/newOrgConfigContext-B3aeblfE.cjs +68 -0
  331. package/dist/newOrgConfigContext-B5mzHKTG.js +53 -0
  332. package/dist/{nodeSelector-BxrS2S_k.d.ts → nodeSelector-DybpVr-i.d.ts} +1 -1
  333. package/dist/{nodeSelector-Dm4S-10n.d.cts → nodeSelector-XsUa5vNH.d.cts} +1 -1
  334. package/dist/org-B2uRkPt3.js +12 -0
  335. package/dist/org-ClUxpHPZ.cjs +43 -0
  336. package/dist/{orgAnalyticsConfig-BJ2A1RZ-.cjs → orgAnalyticsConfig-CuWXijsr.cjs} +1 -1
  337. package/dist/{orgAnalyticsConfig-ClrFy2qH.js → orgAnalyticsConfig-DOceTdNp.js} +1 -1
  338. package/dist/search-BIomqYy6.d.ts +20 -0
  339. package/dist/search-B_Hg-Es2.d.cts +20 -0
  340. package/dist/search-Bn4x-3TG.js +126 -0
  341. package/dist/search-DsQm_pAi.cjs +205 -0
  342. package/dist/{search-filter-types-fZf91Pdw.d.ts → search-filter-types-B5xcaEit.d.ts} +1 -1
  343. package/dist/{search-filter-types-DosbseF3.d.cts → search-filter-types-Byd0lEUa.d.cts} +1 -1
  344. package/dist/searchContext-Cn-pCoDy.cjs +145 -0
  345. package/dist/searchContext-fQDGSvUF.js +129 -0
  346. package/dist/searchServiceAdapter-BSPZOg1r.js +16 -0
  347. package/dist/searchServiceAdapter-DrjFCiw8.cjs +34 -0
  348. package/dist/sessionStorageContext-C5MUl2zf.js +52 -0
  349. package/dist/sessionStorageContext-CXE7iHtP.cjs +66 -0
  350. package/dist/shopifyUrlContext-7ppKx1jJ.cjs +75 -0
  351. package/dist/shopifyUrlContext-BSYWsoX9.js +61 -0
  352. package/dist/spiffyWidgets-CdxRcXhW.d.ts +20 -0
  353. package/dist/spiffyWidgets-DxGuuuCG.d.cts +20 -0
  354. package/dist/systemSettingsContext-BdAe_3Ll.cjs +60 -0
  355. package/dist/systemSettingsContext-Cjyo2o3N.js +39 -0
  356. package/dist/{test-types-CgVJtwUr.d.cts → test-types-DQB1JqOf.d.cts} +1 -1
  357. package/dist/{test-types-C9b_OdfO.d.ts → test-types-ZuRAYwox.d.ts} +1 -1
  358. package/dist/types/index.cjs +33 -5
  359. package/dist/types/index.d.cts +2 -2
  360. package/dist/types/index.d.ts +2 -2
  361. package/dist/types/index.js +30 -3
  362. package/dist/types-BCz-hOvv.d.ts +51 -0
  363. package/dist/types-BwNrLPSZ.cjs +106 -0
  364. package/dist/types-D3uOF0Oy.js +76 -0
  365. package/dist/types-DIk0FLwd.js +30 -0
  366. package/dist/types-DNLkuGWZ.cjs +48 -0
  367. package/dist/types-DzwBmZHy.d.cts +10 -0
  368. package/dist/types-Eip78dWv.d.cts +51 -0
  369. package/dist/types-YvACLe2e.d.ts +10 -0
  370. package/dist/types.d.cts +15 -0
  371. package/dist/types.d.ts +15 -0
  372. package/dist/unsupportedProductExceptions--t7AQFou.js +20 -0
  373. package/dist/unsupportedProductExceptions-Dak4AD-t.cjs +32 -0
  374. package/dist/urlsParser-BV5yF8sa.cjs +78 -0
  375. package/dist/urlsParser-DUgV_Qy9.js +42 -0
  376. package/dist/useAmplitudeOperations-C6Osqkso.js +34 -0
  377. package/dist/useAmplitudeOperations-Cco_B3A5.cjs +41 -0
  378. package/dist/useAppDetails-CGqtN6sJ.cjs +38 -0
  379. package/dist/useAppDetails-DwX2Rhed.js +30 -0
  380. package/dist/useDebounce-BJqnCBcl.cjs +26 -0
  381. package/dist/useDebounce-Ce31ph7m.js +19 -0
  382. package/dist/useGraphQLConfig-ByOZb3oZ.js +63 -0
  383. package/dist/useGraphQLConfig-DItL4BgM.cjs +76 -0
  384. package/dist/useIntersection-Czeo04jt.js +21 -0
  385. package/dist/useIntersection-DnZNLcnu.cjs +28 -0
  386. package/dist/{useMessageInterceptor-B87e3yu3.cjs → useMessageInterceptor-C9p9No1n.cjs} +3 -3
  387. package/dist/{useMessageInterceptor-Bb7YRaWk.js → useMessageInterceptor-tntd2rvB.js} +2 -2
  388. package/dist/userIdentityContext-C1HzZFb2.cjs +125 -0
  389. package/dist/userIdentityContext-CDfosvOO.js +109 -0
  390. package/dist/userIdentityContext-DBXoLrFu.d.cts +20 -0
  391. package/dist/userIdentityContext-W1OWF3cG.d.ts +20 -0
  392. package/dist/utilityTypes-CWJZb9BZ.js +1 -0
  393. package/dist/utilityTypes-YGiMSyV7.cjs +0 -0
  394. package/dist/utils-BA5HXmkL.cjs +74 -0
  395. package/dist/utils-BTDw2aMx.cjs +715 -0
  396. package/dist/utils-C7S9YiFp.js +54 -0
  397. package/dist/utils-CF13DfA1.js +606 -0
  398. package/dist/variantInfo-58JLeDJb.js +1 -0
  399. package/dist/variantInfo-DRFLcGc7.cjs +0 -0
  400. package/package.json +179 -7
  401. package/src/application/models/index.ts +0 -1
  402. package/src/application/utils/analyticsUtils.ts +1 -1
  403. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  404. package/src/atoms/app/index.ts +1 -1
  405. package/src/atoms/chat/chatState.ts +1 -1
  406. package/src/atoms/chat/replies.ts +1 -1
  407. package/src/atoms/org/graphqlConfig.ts +1 -39
  408. package/src/atoms/org/index.ts +0 -1
  409. package/src/atoms/org/newOrgConfigAtom.ts +2 -6
  410. package/src/contexts/{amplitudeContext.tsx → amplitudeContext/amplitudeContext.tsx} +1 -2
  411. package/src/contexts/amplitudeContext/index.ts +1 -0
  412. package/src/contexts/{cdnContext.tsx → cdnContext/cdnContext.tsx} +1 -1
  413. package/src/contexts/cdnContext/index.ts +1 -0
  414. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +3 -3
  415. package/src/contexts/chatContext/index.ts +1 -0
  416. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +1 -1
  417. package/src/contexts/enviveConfigContext/index.ts +1 -0
  418. package/src/contexts/{enviveCssContext.tsx → enviveCssContext/enviveCssContext.tsx} +1 -1
  419. package/src/contexts/enviveCssContext/index.ts +1 -0
  420. package/src/contexts/{featureFlagContext.tsx → featureFlagContext/featureFlagContext.tsx} +1 -1
  421. package/src/contexts/featureFlagContext/index.ts +1 -0
  422. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  423. package/src/contexts/graphqlContext/index.ts +1 -0
  424. package/src/contexts/localStorageContext/index.ts +1 -0
  425. package/src/contexts/{localStorageContext.tsx → localStorageContext/localStorageContext.tsx} +2 -2
  426. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  427. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  428. package/src/contexts/searchContext/index.ts +1 -0
  429. package/src/contexts/{searchContext.tsx → searchContext/searchContext.tsx} +5 -5
  430. package/src/contexts/sessionStorageContext/index.ts +1 -0
  431. package/src/contexts/{sessionStorageContext.tsx → sessionStorageContext/sessionStorageContext.tsx} +1 -1
  432. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  433. package/src/contexts/systemSettingsContext/index.ts +1 -0
  434. package/src/contexts/userIdentityContext/index.ts +1 -0
  435. package/src/events/registerAnalyticsListeners.ts +2 -2
  436. package/src/favicon.ico +0 -0
  437. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  438. package/src/hooks/{useAmplitudeOperations.ts → AmplitudeOperations/useAmplitudeOperations.ts} +1 -1
  439. package/src/hooks/AppDetails/index.ts +1 -0
  440. package/src/hooks/{useAppDetails.ts → AppDetails/useAppDetails.ts} +1 -3
  441. package/src/hooks/BlockBackButton/index.ts +1 -0
  442. package/src/hooks/CdnOperations/index.ts +1 -0
  443. package/src/hooks/{useCdnOperations.ts → CdnOperations/useCdnOperations.ts} +1 -1
  444. package/src/hooks/ChatToggle/index.ts +1 -0
  445. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +1 -1
  446. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  447. package/src/hooks/{useChatToggleAnalytics.ts → ChatToggleAnalytics/useChatToggleAnalytics.ts} +1 -1
  448. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  449. package/src/hooks/Debounce/index.ts +1 -0
  450. package/src/hooks/ElementObserver/index.ts +1 -0
  451. package/src/hooks/GrabAndScroll/index.ts +1 -0
  452. package/src/hooks/GraphQLConfig/index.ts +1 -0
  453. package/src/hooks/{useGraphQLConfig.ts → GraphQLConfig/useGraphQLConfig.ts} +1 -1
  454. package/src/hooks/IdentifyUser/index.ts +1 -0
  455. package/src/hooks/{useIdentifyUser.ts → IdentifyUser/useIdentifyUser.ts} +1 -1
  456. package/src/hooks/ImageResolver/index.ts +1 -0
  457. package/src/hooks/Intersection/index.ts +1 -0
  458. package/src/hooks/IsSmallScreen/index.ts +1 -0
  459. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  460. package/src/hooks/{useLocalStorageOperations.ts → LocalStorageOperations/useLocalStorageOperations.ts} +2 -2
  461. package/src/hooks/MessageFilter/index.ts +1 -0
  462. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  463. package/src/hooks/NewOrgConfig/index.ts +1 -0
  464. package/src/hooks/{useNewOrgConfig.ts → NewOrgConfig/useNewOrgConfig.ts} +1 -1
  465. package/src/hooks/Search/index.ts +1 -0
  466. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +5 -4
  467. package/src/hooks/SearchOperations/index.ts +1 -0
  468. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  469. package/src/hooks/{useSessionStorageOperations.ts → SessionStorageOperations/useSessionStorageOperations.ts} +1 -1
  470. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  471. package/src/hooks/{useShopifyUrlOperations.ts → ShopifyUrlOperations/useShopifyUrlOperations.ts} +1 -1
  472. package/src/hooks/SnapCalculator/index.ts +1 -0
  473. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  474. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  475. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  476. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +2 -2
  477. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  478. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +1 -1
  479. package/dist/amplitudeContext-CHzas7Cf.d.cts +0 -52
  480. package/dist/amplitudeContext-D-7fmVh1.cjs +0 -356
  481. package/dist/amplitudeContext-hY3caPC6.js +0 -322
  482. package/dist/amplitudeContext-tJ4y-SzX.d.ts +0 -52
  483. package/dist/api-DjeZXxl_.js +0 -207
  484. package/dist/api-_JaUnIUj.cjs +0 -292
  485. package/dist/bandolier-DYEz4-8C.js +0 -1229
  486. package/dist/bandolier-o_-xrbOV.cjs +0 -1229
  487. package/dist/carpe-CsG5jCcl.cjs +0 -607
  488. package/dist/carpe-DONk00bZ.js +0 -605
  489. package/dist/cdnUtils-32v8bDX9.cjs +0 -16
  490. package/dist/cdnUtils-E4tLBt2g.js +0 -11
  491. package/dist/chat-CO7cRkaq.cjs +0 -506
  492. package/dist/chat-hcRc4RRd.js +0 -285
  493. package/dist/contexts/index.cjs +0 -57
  494. package/dist/contexts/index.d.cts +0 -10
  495. package/dist/contexts/index.d.ts +0 -10
  496. package/dist/contexts/index.js +0 -23
  497. package/dist/contexts-B4ihTBsV.cjs +0 -2980
  498. package/dist/contexts-DGlr7M1o.js +0 -2596
  499. package/dist/coterie-CKB93qfz.cjs +0 -239
  500. package/dist/coterie-DHcj2fRE.js +0 -239
  501. package/dist/custservice-types-Dy0kc9TW.cjs +0 -35
  502. package/dist/custservice-types-mnIunabv.js +0 -23
  503. package/dist/default-BnB4p0Se.cjs +0 -234
  504. package/dist/default-D6f5Dyt7.js +0 -199
  505. package/dist/default-ZKkE5zT4.cjs +0 -4
  506. package/dist/default-legGZJwI.js +0 -4
  507. package/dist/divIds-2dJlU3z8.cjs +0 -117
  508. package/dist/divIds-BUrN2vY-.js +0 -21
  509. package/dist/dreamlandBaby-BiRYYFav.js +0 -346
  510. package/dist/dreamlandBaby-zuvmfzfD.cjs +0 -346
  511. package/dist/embedded-BJLWIriJ.js +0 -23
  512. package/dist/embedded-Dl79TJLC.cjs +0 -131
  513. package/dist/entrypoints-Bs3pn6EV.js +0 -7
  514. package/dist/entrypoints-Dqi5pzWH.cjs +0 -19
  515. package/dist/enviveConfig-BccuzS2a.cjs +0 -240
  516. package/dist/enviveConfig-CzhTz8Aa.js +0 -152
  517. package/dist/fiveCbd-DwTTwC2j.cjs +0 -613
  518. package/dist/fiveCbd-Dz2NouOF.js +0 -613
  519. package/dist/forLoveAndLemons-DqSdyD6S.js +0 -665
  520. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +0 -667
  521. package/dist/graphql-BNW60InJ.cjs +0 -128
  522. package/dist/graphql-CjB8wHzm.js +0 -74
  523. package/dist/graphqlConfig-CYt6tWII.js +0 -30
  524. package/dist/graphqlConfig-DicykC-o.cjs +0 -61
  525. package/dist/greenpan-B_EbPkSP.js +0 -397
  526. package/dist/greenpan-kPE4fJgd.cjs +0 -397
  527. package/dist/grooveLife-Ckuir319.js +0 -342
  528. package/dist/grooveLife-DKSEQp1F.cjs +0 -342
  529. package/dist/homegrownCannabis-BVPa2pqe.js +0 -410
  530. package/dist/homegrownCannabis-BwIAkxuA.cjs +0 -410
  531. package/dist/hooks/index.cjs +0 -63
  532. package/dist/hooks/index.d.cts +0 -314
  533. package/dist/hooks/index.d.ts +0 -314
  534. package/dist/hooks/index.js +0 -23
  535. package/dist/index-BMPtlgac.d.ts +0 -191
  536. package/dist/index-C7pGDl1A.d.ts +0 -1609
  537. package/dist/index-C9lgsCWp.d.cts +0 -203
  538. package/dist/index-Cc-wBCn6.d.ts +0 -203
  539. package/dist/index-DTu2X-YS.d.cts +0 -1609
  540. package/dist/index-OEifcBsm.d.cts +0 -191
  541. package/dist/jackArcher-B39OEIj6.cjs +0 -727
  542. package/dist/jackArcher-BwkWGybC.js +0 -727
  543. package/dist/jordanCraig-CxRH_jLi.js +0 -1786
  544. package/dist/jordanCraig-RwmWw-jM.cjs +0 -1786
  545. package/dist/kindredBravely-D78VwL20.cjs +0 -490
  546. package/dist/kindredBravely-DQDpAzdl.js +0 -490
  547. package/dist/kutFromTheKloth-TcXQkIti.js +0 -369
  548. package/dist/kutFromTheKloth-dXRrNti0.cjs +0 -369
  549. package/dist/larryAndSerges-Bh5XEXsZ.js +0 -262
  550. package/dist/larryAndSerges-COdBzOzu.cjs +0 -262
  551. package/dist/leapsAndRebounds-BbXnqkl5.cjs +0 -360
  552. package/dist/leapsAndRebounds-mjCaH1k-.js +0 -360
  553. package/dist/longevityrx-DdV3v26F.cjs +0 -320
  554. package/dist/longevityrx-DfPDfvAt.js +0 -320
  555. package/dist/lookOptic-DgXFGBPP.cjs +0 -282
  556. package/dist/lookOptic-FgVW1afF.js +0 -282
  557. package/dist/mantraBrand-C5gVm3rk.cjs +0 -750
  558. package/dist/mantraBrand-uV8HCDR8.js +0 -750
  559. package/dist/medterra-BtDpr1Hw.cjs +0 -583
  560. package/dist/medterra-DgzE7-mj.js +0 -583
  561. package/dist/modells-CJjsxOIR.js +0 -484
  562. package/dist/modells-Ck5KbRFj.cjs +0 -484
  563. package/dist/models-UZ6HszfZ.js +0 -1281
  564. package/dist/org-C2RrBVQR.cjs +0 -81
  565. package/dist/org-xMytX--e.js +0 -38
  566. package/dist/pressedFloral-Bteoboms.js +0 -661
  567. package/dist/pressedFloral-CexgV-xy.cjs +0 -661
  568. package/dist/search-BMOAmrmY.js +0 -459
  569. package/dist/search-Df0Ifneg.cjs +0 -672
  570. package/dist/skinPerfection-BGzq9lq-.cjs +0 -334
  571. package/dist/skinPerfection-BlvcEcUE.js +0 -334
  572. package/dist/snapSupplements-CbbGzAgO.cjs +0 -285
  573. package/dist/snapSupplements-kcsPAOm9.js +0 -285
  574. package/dist/socialProofClasses-Db8gzsfi.cjs +0 -40
  575. package/dist/socialProofClasses-kwDvwLOZ.js +0 -10
  576. package/dist/spanx-B4WFA_rI.js +0 -661
  577. package/dist/spanx-BWoE4F8b.cjs +0 -663
  578. package/dist/spanxStaging-BOrOjhXn.js +0 -845
  579. package/dist/spanxStaging-BfdfIug4.cjs +0 -848
  580. package/dist/suggestionBarV2-types-IMMOmCir.js +0 -10
  581. package/dist/suggestionBarV2-types-nnGNgFvR.cjs +0 -16
  582. package/dist/supergoop-22dd5_BS.js +0 -323
  583. package/dist/supergoop-B-a4cku2.cjs +0 -323
  584. package/dist/types--pr1GQQx.js +0 -154
  585. package/dist/types-BVSyY3Hk.cjs +0 -196
  586. package/dist/uniqueVintage-CJXiNNe7.js +0 -1211
  587. package/dist/uniqueVintage-D0jzJWlo.cjs +0 -1213
  588. package/dist/userIdentityContext-BPqvVIg0.d.cts +0 -20
  589. package/dist/userIdentityContext-wbCRmlzp.d.ts +0 -20
  590. package/dist/utils-C9ZSCx12.js +0 -888
  591. package/dist/utils-D5HO61hG.cjs +0 -1016
  592. package/dist/venaCbd-Bhhu_qUf.cjs +0 -365
  593. package/dist/venaCbd-CanovPS_.js +0 -365
  594. package/dist/westonJonBoucher-BC0x1ktI.cjs +0 -422
  595. package/dist/westonJonBoucher-BUu1_wP1.js +0 -422
  596. package/dist/wineEnthusiast-BlCryfil.cjs +0 -940
  597. package/dist/wineEnthusiast-Ck1x5iJq.js +0 -940
  598. package/dist/wolfMattress-D9Mjq-HP.js +0 -372
  599. package/dist/wolfMattress-JssghhC-.cjs +0 -372
  600. package/dist/wolfTactical-C6exYhL7.cjs +0 -349
  601. package/dist/wolfTactical-CnV3KQdI.js +0 -349
  602. package/src/application/models/supportedOrgs.ts +0 -161
  603. package/src/atoms/org/orgPageConfig.ts +0 -42
  604. package/src/contexts/index.ts +0 -16
  605. package/src/contexts/newOrgConfigContext.tsx +0 -104
  606. package/src/contexts/orgConfigContext.tsx +0 -106
  607. package/src/hooks/index.ts +0 -27
  608. package/src/hooks/useSystemSettingsContext.ts +0 -12
  609. package/src/merchants/bandolier/bandolier.ts +0 -1371
  610. package/src/merchants/carpe/carpe.ts +0 -653
  611. package/src/merchants/coterie/coterie.ts +0 -277
  612. package/src/merchants/default.ts +0 -196
  613. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -381
  614. package/src/merchants/fiveCbd/fiveCbd.ts +0 -691
  615. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -751
  616. package/src/merchants/greenpan/greenpan.ts +0 -434
  617. package/src/merchants/grooveLife/grooveLife.ts +0 -392
  618. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -474
  619. package/src/merchants/init-merchant.sh +0 -53
  620. package/src/merchants/jackArcher/jackArcher.ts +0 -989
  621. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  622. package/src/merchants/kindredBravely/kindredBravely.ts +0 -538
  623. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -421
  624. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -318
  625. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  626. package/src/merchants/longevityrx/longevityrx.ts +0 -374
  627. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  628. package/src/merchants/mantraBrand/mantraBrand.ts +0 -844
  629. package/src/merchants/medterra/medterra.ts +0 -673
  630. package/src/merchants/modells/modells.ts +0 -543
  631. package/src/merchants/pressedFloral/pressedFloral.ts +0 -728
  632. package/src/merchants/skinPerfection/skinPerfection.ts +0 -385
  633. package/src/merchants/snapSupplements/snapSupplements.ts +0 -328
  634. package/src/merchants/spanx/spanx.ts +0 -810
  635. package/src/merchants/spanx/spanxStaging.ts +0 -936
  636. package/src/merchants/supergoop/supergoop.ts +0 -375
  637. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  638. package/src/merchants/venaCbd/venaCbd.ts +0 -407
  639. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  640. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  641. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  642. package/src/merchants/wolfTactical/wolfTactical.ts +0 -383
  643. /package/dist/{atomStore-KSoFS3Jj.cjs → AmplitudeOperations-CgIVPUlr.cjs} +0 -0
  644. /package/dist/{atomStore-CZnUUsrr.js → AmplitudeOperations-YpyaR7Mp.js} +0 -0
  645. /package/dist/{locators-fBXS_pxP.js → atomStore-C2OI76yN.js} +0 -0
  646. /package/dist/{locators-0YYZu9n4.cjs → atomStore-DWmT1six.cjs} +0 -0
  647. /package/dist/{utilityTypes-8sETsYPk.js → types-DQoXDiso.js} +0 -0
  648. /package/dist/{utilityTypes-COShxVir.cjs → types-o3zWarRp.cjs} +0 -0
  649. /package/dist/{variantInfo-orXoPBCU.cjs → types.cjs} +0 -0
  650. /package/dist/{variantInfo-DbVxA1yE.js → types.js} +0 -0
  651. /package/src/contexts/{featureFlagServiceContext.tsx → featureFlagServiceContext/featureFlagServiceContext.tsx} +0 -0
  652. /package/src/contexts/{graphqlContext.tsx → graphqlContext/graphqlContext.tsx} +0 -0
  653. /package/src/contexts/{shopifyUrlContext.tsx → shopifyUrlContext/shopifyUrlContext.tsx} +0 -0
  654. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  655. /package/src/contexts/{userIdentityContext.tsx → userIdentityContext/userIdentityContext.tsx} +0 -0
  656. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  657. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  658. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  659. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  660. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  661. /package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +0 -0
  662. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  663. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  664. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  665. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  666. /package/src/hooks/{useSearchOperations.ts → SearchOperations/useSearchOperations.ts} +0 -0
  667. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
@@ -0,0 +1,315 @@
1
+ import { MessageRole, MessageType } from "./models-Dn8Emdzc.js";
2
+ import { messagesAtom, replyEventCategoryAtom, userHasRepliedAtom, userQueryAtom } from "./chatState-BrmBYY8l.js";
3
+ import { queueUserEventAtom } from "./chat-DPJGdUkz.js";
4
+ import { newOrgConfigAtom } from "./newOrgConfigAtom--tewb_G0.js";
5
+ import { ProductSorting } from "./types-DIk0FLwd.js";
6
+ import { UserEventCategory } from "@spiffy-ai/commerce-api-client";
7
+ import { atom } from "jotai";
8
+ import { v4 } from "uuid";
9
+
10
+ //#region src/atoms/search/utils.ts
11
+ const formatFilterDisplayName = (displayName) => {
12
+ const sizes = [
13
+ "xxxs",
14
+ "xxs",
15
+ "xs",
16
+ "s",
17
+ "m",
18
+ "l",
19
+ "xl",
20
+ "xxl",
21
+ "xxxl",
22
+ "xxxxl"
23
+ ];
24
+ return displayName.toLowerCase().split(" ").map((word) => {
25
+ if (sizes.includes(word)) return word.toUpperCase();
26
+ return word.charAt(0).toUpperCase() + word.slice(1);
27
+ }).join(" ").replace(/Iphone/g, "iPhone");
28
+ };
29
+
30
+ //#endregion
31
+ //#region src/atoms/search/productFilters.ts
32
+ const getPriceBucket = (price, bucketSize) => {
33
+ return Math.floor(price / bucketSize) * bucketSize;
34
+ };
35
+ const isStringArray = (value) => {
36
+ if (!Array.isArray(value)) return false;
37
+ return value.every((item) => typeof item === "string");
38
+ };
39
+ const sortFilter = (filterConfig) => {
40
+ if (filterConfig.type === "price") return (a, b) => Number(a.filterItemId) - Number(b.filterItemId);
41
+ if (filterConfig.type === "dynamic") {
42
+ if (filterConfig.sorting.type === "alphabetic") return (a, b) => a.displayName.localeCompare(b.displayName);
43
+ if (filterConfig.sorting.type === "productCount") return (a, b) => a.productCount === b.productCount ? a.displayName.localeCompare(b.displayName) : b.productCount - a.productCount;
44
+ if (filterConfig.sorting.type === "custom") {
45
+ const sortedKeys = filterConfig.sorting.map;
46
+ return (a, b) => {
47
+ if (sortedKeys[a.displayName] && sortedKeys[b.displayName]) return sortedKeys[a.displayName] - sortedKeys[b.displayName];
48
+ if (sortedKeys[a.displayName]) return -1;
49
+ if (sortedKeys[b.displayName]) return 1;
50
+ return b.productCount - a.productCount;
51
+ };
52
+ }
53
+ }
54
+ throw new Error("Invaalid search filter configuration");
55
+ };
56
+ var ProductFilters = class {
57
+ static getFiltersForProducts(products, filterConfigs, selectedFilterOptions) {
58
+ if (!products || products.length === 0) return [];
59
+ return [...filterConfigs.map((filterConfig) => products.reduce((acc, product) => {
60
+ if (filterConfig.type === "price") {
61
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, filterConfig.bucketSize);
62
+ const current = acc.map[priceBucket] ?? {
63
+ filterItemId: priceBucket,
64
+ displayName: `$${priceBucket}-$${priceBucket + filterConfig.bucketSize}`,
65
+ productCount: 0
66
+ };
67
+ acc.map[priceBucket] = {
68
+ ...current,
69
+ productCount: current.productCount + 1
70
+ };
71
+ return acc;
72
+ }
73
+ const attributeValues = (product.filters && product.filters?.[filterConfig.attribute]) ?? [];
74
+ if (isStringArray(attributeValues)) attributeValues.forEach((val) => {
75
+ const normalizedVal = val.toLowerCase();
76
+ const current = acc.map[normalizedVal] ?? {
77
+ filterItemId: normalizedVal,
78
+ displayName: formatFilterDisplayName(val),
79
+ productCount: 0
80
+ };
81
+ acc.map[normalizedVal] = {
82
+ ...current,
83
+ productCount: current.productCount + 1
84
+ };
85
+ });
86
+ return acc;
87
+ }, {
88
+ filterConfig,
89
+ map: {}
90
+ })).map(({ filterConfig, map }) => ({
91
+ filterId: filterConfig.filterId,
92
+ displayName: filterConfig.displayName,
93
+ items: Object.values(map).map((filter) => ({
94
+ filterItemId: filter.filterItemId,
95
+ displayName: filter.displayName,
96
+ productCount: filter.productCount,
97
+ isSelected: selectedFilterOptions.some((option) => option.id === `${filterConfig.filterId}:${filter.filterItemId}`) ?? false
98
+ })).sort(sortFilter(filterConfig))
99
+ }))];
100
+ }
101
+ static filterProducts(products, filterConfigs, selectedFilterOptions, additiveDynamicFilters = false) {
102
+ const selectedFilters = filterConfigs.map((filterConfig) => ({
103
+ filterConfig,
104
+ hasSelectedOptions: selectedFilterOptions.some((option) => option.filterId === filterConfig.filterId)
105
+ })).filter(({ hasSelectedOptions }) => hasSelectedOptions);
106
+ return selectedFilterOptions.length === 0 ? products : products.filter((product) => selectedFilters.reduce((acc, selectedFilter) => {
107
+ if (!acc) return acc;
108
+ if (selectedFilter.filterConfig.type === "price") {
109
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, selectedFilter.filterConfig.bucketSize);
110
+ if (!selectedFilterOptions.some((option) => option.id === `price:${priceBucket}`)) return false;
111
+ }
112
+ if (selectedFilter.filterConfig.type === "dynamic") {
113
+ const { filterId, attribute } = selectedFilter.filterConfig;
114
+ const attributeValues = product.filters?.[attribute];
115
+ if (!isStringArray(attributeValues)) return false;
116
+ if (selectedFilter.filterConfig.attribute === "dynamic" && !additiveDynamicFilters) {
117
+ if (!selectedFilterOptions.filter((option) => option.filterId === filterId).map((option) => option.filterItemId.toLowerCase()).every((selectedValue) => attributeValues.some((val) => val.toLowerCase() === selectedValue))) return false;
118
+ } else if (!attributeValues.some((val) => selectedFilterOptions.some((option) => option.id === `${filterId}:${val.toLowerCase()}`))) return false;
119
+ }
120
+ return true;
121
+ }, true));
122
+ }
123
+ };
124
+
125
+ //#endregion
126
+ //#region src/atoms/search/productSorter.ts
127
+ var ProductSorter = class {
128
+ static sort(products, sorting) {
129
+ switch (sorting) {
130
+ case ProductSorting.PRICE_ASC: return [...products].sort((p1, p2) => (p1.salePrice ?? p1.originalPrice ?? 0) - (p2.salePrice ?? p2.originalPrice ?? 0));
131
+ case ProductSorting.PRICE_DESC: return [...products].sort((p1, p2) => (p2.salePrice ?? p2.originalPrice ?? 0) - (p1.salePrice ?? p1.originalPrice ?? 0));
132
+ default: return products;
133
+ }
134
+ }
135
+ };
136
+
137
+ //#endregion
138
+ //#region src/atoms/search/chatSearch.ts
139
+ const chatSearchStateAtom = atom("entrypoint");
140
+ const chatSearchHasProductsAtom = atom(false);
141
+ const chatSearchProductSortingAtom = atom(ProductSorting.FEATURED);
142
+ const filterProductList = (message) => message.type === MessageType.Product && message.metadata.isForGrid === true;
143
+ const filterFilterList = (message) => message.type === MessageType.ProductSearchFilter;
144
+ const chatSearchIsLoadingAtom = atom(false);
145
+ const buildChatSearchTurn = (messages) => {
146
+ const queryMessage = messages.find((message) => message.type === MessageType.ProductSearch);
147
+ if (!queryMessage) return null;
148
+ const { generatedQuery, productCount } = queryMessage.metadata ?? {};
149
+ const productList = messages.filter(filterProductList).map((message) => message.metadata);
150
+ const filterList = messages.filter(filterFilterList).map((message) => message.metadata.filterName);
151
+ return [queryMessage.id, {
152
+ id: queryMessage.id,
153
+ generatedQuery,
154
+ productCount: productCount || productList.length,
155
+ productList,
156
+ filterList,
157
+ messages
158
+ }];
159
+ };
160
+ const chatSearchFilterConfigAtom = atom((get) => {
161
+ return get(newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.searchFilterConfig || [];
162
+ });
163
+ const searchMapAtom = atom((get) => {
164
+ const messages = get(messagesAtom);
165
+ return Object.fromEntries(messages.map(buildChatSearchTurn).filter((v) => v !== null));
166
+ });
167
+ const internalChatSearchParamsAtom = atom({
168
+ id: null,
169
+ query: null
170
+ });
171
+ const selectedFilterOptionsAtom = atom([]);
172
+ const additiveDynamicFiltersAtom = atom((get) => {
173
+ return get(newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.additiveDynamicFilters ?? false;
174
+ });
175
+ const createChatSearchFilterOption = (filterId, filterItemId, displayName) => ({
176
+ id: `${filterId}:${filterItemId}`,
177
+ displayName,
178
+ filterId,
179
+ filterItemId
180
+ });
181
+ const handleSearchAtom = atom(null, (get, set, message) => {
182
+ if (message.type !== MessageType.Search) return;
183
+ const querySearch = message.metadata.searchTerm;
184
+ set(replyEventCategoryAtom, UserEventCategory.Search);
185
+ set(userQueryAtom, querySearch);
186
+ set(messagesAtom, [...get(messagesAtom), [message]]);
187
+ set(userHasRepliedAtom, true);
188
+ set(queueUserEventAtom, {
189
+ eventId: message.id,
190
+ category: UserEventCategory.Search,
191
+ createdAt: message.createdAt,
192
+ attributes: {
193
+ searchTerm: message.metadata.searchTerm,
194
+ selectedFilters: message.metadata.selectedFilters
195
+ }
196
+ });
197
+ });
198
+ const chatSearchParamsAtom = atom((get) => get(internalChatSearchParamsAtom), (_, set, value) => {
199
+ set(internalChatSearchParamsAtom, value);
200
+ });
201
+ const chatSearchQueryAtom = atom((get) => get(chatSearchParamsAtom)?.query ?? null, (get, set, value) => {
202
+ const searchParams = get(chatSearchParamsAtom);
203
+ set(chatSearchParamsAtom, {
204
+ id: searchParams.id,
205
+ query: value
206
+ });
207
+ });
208
+ const chatSearchIdAtom = atom((get) => get(chatSearchParamsAtom)?.id ?? null, (get, set, value) => {
209
+ const searchParams = get(chatSearchParamsAtom);
210
+ set(chatSearchParamsAtom, {
211
+ id: value,
212
+ query: searchParams.query
213
+ });
214
+ });
215
+ const ChatSearchTurnAtom = atom((get) => {
216
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
217
+ const searchMap = get(searchMapAtom);
218
+ const chatSearchId = get(chatSearchIdAtom);
219
+ if (!chatSearchId) return null;
220
+ const ChatSearchTurn = searchMap[chatSearchId];
221
+ if (!ChatSearchTurn) return null;
222
+ const productSorting = get(chatSearchProductSortingAtom);
223
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
224
+ const additiveDynamicFilters = get(additiveDynamicFiltersAtom);
225
+ const filteredProducts = ProductFilters.filterProducts(ChatSearchTurn.productList, searchFilterConfig, selectedFilterOptions, additiveDynamicFilters);
226
+ const filteredAndSortedProducts = ProductSorter.sort(filteredProducts, productSorting);
227
+ return {
228
+ ...searchMap[chatSearchId],
229
+ productList: filteredAndSortedProducts,
230
+ productCount: filteredAndSortedProducts.length
231
+ };
232
+ });
233
+ const chatSearchProducts = atom((get) => {
234
+ return get(ChatSearchTurnAtom)?.productList ?? [];
235
+ });
236
+ const chatSearchFiltersAtom = atom((get) => {
237
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
238
+ const searchMap = get(searchMapAtom);
239
+ const chatSearchId = get(chatSearchIdAtom);
240
+ if (chatSearchId && searchMap[chatSearchId]) {
241
+ const products = searchMap[chatSearchId].productList;
242
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
243
+ return ProductFilters.getFiltersForProducts(products, searchFilterConfig, selectedFilterOptions);
244
+ }
245
+ return [];
246
+ });
247
+ const setSearchParams = (query) => {
248
+ const url = new URL(window.location.href);
249
+ url.searchParams.set("es", "true");
250
+ url.searchParams.set("esq", query);
251
+ window.history.pushState({}, "", url);
252
+ };
253
+ const getSearchParamsAtom = atom(() => {
254
+ const params = new URLSearchParams(window.location.search);
255
+ return {
256
+ es: params.get("es"),
257
+ esq: params.get("esq")
258
+ };
259
+ });
260
+ const initiateChatSearchAtom = atom(null, (_, set, query) => {
261
+ set(chatSearchIsLoadingAtom, true);
262
+ const url = new URL(window.location.href);
263
+ url.searchParams.set("es", "true");
264
+ url.searchParams.set("esq", query);
265
+ window.history.pushState({}, "", url);
266
+ window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
267
+ set(chatSearchParamsAtom, {
268
+ id: null,
269
+ query
270
+ });
271
+ set(handleSearchAtom, {
272
+ id: v4(),
273
+ role: MessageRole.User,
274
+ type: MessageType.Search,
275
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
276
+ metadata: {
277
+ searchTerm: query,
278
+ selectedFilters: []
279
+ }
280
+ });
281
+ });
282
+ const handleSearchResultsAtom = atom(null, (get, set, message) => {
283
+ if (!message || message.type !== MessageType.ProductSearch) return;
284
+ const { productCount, generatedQuery } = message.metadata;
285
+ if (productCount !== 0) {
286
+ set(selectedFilterOptionsAtom, []);
287
+ set(chatSearchStateAtom, "product-page");
288
+ const currentSearchParams = get(chatSearchParamsAtom);
289
+ const url = new URL(window.location.href);
290
+ url.searchParams.set("es", "true");
291
+ url.searchParams.set("esq", generatedQuery);
292
+ url.searchParams.set("esi", message.id);
293
+ window.history.pushState({}, "", url);
294
+ if (currentSearchParams.id === null) window.history.replaceState(null, "", url);
295
+ else window.history.pushState(null, "", url);
296
+ set(chatSearchParamsAtom, {
297
+ id: message.id,
298
+ query: generatedQuery
299
+ });
300
+ }
301
+ });
302
+ const setChatSearchParamsAtom = atom(null, (_, set, query) => {
303
+ const url = new URL(window.location.href);
304
+ url.searchParams.set("es", "true");
305
+ url.searchParams.set("esq", query);
306
+ window.history.pushState({}, "", url);
307
+ set(chatSearchParamsAtom, {
308
+ id: null,
309
+ query
310
+ });
311
+ });
312
+
313
+ //#endregion
314
+ export { ChatSearchTurnAtom, ProductFilters, ProductSorter, additiveDynamicFiltersAtom, chatSearchFiltersAtom, chatSearchHasProductsAtom, chatSearchIdAtom, chatSearchIsLoadingAtom, chatSearchParamsAtom, chatSearchProductSortingAtom, chatSearchProducts, chatSearchQueryAtom, chatSearchStateAtom, createChatSearchFilterOption, formatFilterDisplayName, getSearchParamsAtom, handleSearchResultsAtom, initiateChatSearchAtom, selectedFilterOptionsAtom, setChatSearchParamsAtom, setSearchParams };
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlYXJjaC1CNWpNbkNZWC5qcyIsIm5hbWVzIjpbInV1aWQiXSwic291cmNlcyI6WyIuLi9zcmMvYXRvbXMvc2VhcmNoL3V0aWxzLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0RmlsdGVycy50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdFNvcnRlci50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvY2hhdFNlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iLCJpbXBvcnQgeyBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBGaWx0ZXJBdHRyaWJ1dGUgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VsZWN0ZWRGaWx0ZXJPcHRpb24gfSBmcm9tICdzcmMvYXRvbXMvc2VhcmNoL3NlYXJjaEFQSSc7XG5pbXBvcnQgeyBDaGF0U2VhcmNoRmlsdGVyLCBDaGF0U2VhcmNoRmlsdGVySXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZ2V0UHJpY2VCdWNrZXQgPSAocHJpY2U6IG51bWJlciwgYnVja2V0U2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGJ1Y2tldCA9IE1hdGguZmxvb3IocHJpY2UgLyBidWNrZXRTaXplKTtcbiAgcmV0dXJuIGJ1Y2tldCAqIGJ1Y2tldFNpemU7XG59O1xuXG5jb25zdCBpc1N0cmluZ0FycmF5ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn07XG5cbnR5cGUgRmlsdGVyU29ydEZ1bmN0aW9uID0gKGE6IENoYXRTZWFyY2hGaWx0ZXJJdGVtLCBiOiBDaGF0U2VhcmNoRmlsdGVySXRlbSkgPT4gbnVtYmVyO1xuXG5jb25zdCBzb3J0RmlsdGVyID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQXR0cmlidXRlKTogRmlsdGVyU29ydEZ1bmN0aW9uID0+IHtcbiAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgcmV0dXJuIChhLCBiKSA9PiBOdW1iZXIoYS5maWx0ZXJJdGVtSWQpIC0gTnVtYmVyKGIuZmlsdGVySXRlbUlkKTtcbiAgfVxuICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdkeW5hbWljJykge1xuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAnYWxwaGFiZXRpYycpIHtcbiAgICAgIHJldHVybiAoYSwgYikgPT4gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICAvLyBTb3J0IGJ5IHRoZSBudW1iZXIgb2YgcHJvZHVjdHMsIGlmIHRoZXkgbWF0Y2gsIHNvcnQgYnkgYWxwaGFiZXRpY2FsXG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdwcm9kdWN0Q291bnQnKSB7XG4gICAgICByZXR1cm4gKGEsIGIpID0+XG4gICAgICAgIGEucHJvZHVjdENvdW50ID09PSBiLnByb2R1Y3RDb3VudFxuICAgICAgICAgID8gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpXG4gICAgICAgICAgOiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgIH1cbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIGNvbnN0IHNvcnRlZEtleXMgPSBmaWx0ZXJDb25maWcuc29ydGluZy5tYXA7XG4gICAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0gJiYgc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIC8vIElmIGJvdGggYXJlIGluIHRoZSBzb3J0ZWRLZXlzLCBzb3J0IGJ5IHRoZSBpbmRleFxuICAgICAgICAgIHJldHVybiBzb3J0ZWRLZXlzW2EuZGlzcGxheU5hbWVdIC0gc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBvbmx5ICdhJyBpcyBpbiB0aGUgc29ydGVkS2V5cywgcHV0IGl0IGJlZm9yZSB0aGUgb3RoZXJcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgb25seSAnYicgaXMgaW4gdGhlIHNvcnRlZEtleXMsIHB1dCBpdCBiZWZvcmUgdGhlIG90aGVyXG4gICAgICAgIGlmIChzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbmVpdGhlciBhcmUgaW4gdGhlIHNvcnRlZEtleXMsIHNvcnQgYnkgcHJvZHVjdENvdW50XG4gICAgICAgIHJldHVybiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhYWxpZCBzZWFyY2ggZmlsdGVyIGNvbmZpZ3VyYXRpb24nKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0RmlsdGVycyB7XG4gIHN0YXRpYyBnZXRGaWx0ZXJzRm9yUHJvZHVjdHMoXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLFxuICAgIGZpbHRlckNvbmZpZ3M6IEZpbHRlckF0dHJpYnV0ZVtdLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXSxcbiAgKTogQ2hhdFNlYXJjaEZpbHRlcltdIHtcbiAgICBpZiAoIXByb2R1Y3RzIHx8IHByb2R1Y3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcnMgPSBmaWx0ZXJDb25maWdzLm1hcCgoZmlsdGVyQ29uZmlnKSA9PlxuICAgICAgcHJvZHVjdHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJpY2UgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSBmaWx0ZXJzXG4gICAgICAgICAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICBwcm9kdWN0LnNhbGVQcmljZSA/PyBwcm9kdWN0Lm9yaWdpbmFsUHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbcHJpY2VCdWNrZXRdID8/IHtcbiAgICAgICAgICAgICAgZmlsdGVySXRlbUlkOiBwcmljZUJ1Y2tldCxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAkJHtwcmljZUJ1Y2tldH0tJCR7cHJpY2VCdWNrZXQgKyBmaWx0ZXJDb25maWcuYnVja2V0U2l6ZX1gLFxuICAgICAgICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjLm1hcFtwcmljZUJ1Y2tldF0gPSB7IC4uLmN1cnJlbnQsIHByb2R1Y3RDb3VudDogY3VycmVudC5wcm9kdWN0Q291bnQgKyAxIH07XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBcImF0dHJpYnV0ZVwiIGlzIGFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlcyA9XG4gICAgICAgICAgICAocHJvZHVjdC5maWx0ZXJzICYmIHByb2R1Y3QuZmlsdGVycz8uW2ZpbHRlckNvbmZpZy5hdHRyaWJ1dGVdKSA/PyBbXTtcbiAgICAgICAgICBpZiAoaXNTdHJpbmdBcnJheShhdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbbm9ybWFsaXplZFZhbF0gPz8ge1xuICAgICAgICAgICAgICAgIGZpbHRlckl0ZW1JZDogbm9ybWFsaXplZFZhbCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUodmFsKSwgLy8gS2VlcCBvcmlnaW5hbCBjYXNlIGZvciBkaXNwbGF5XG4gICAgICAgICAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhY2MubWFwW25vcm1hbGl6ZWRWYWxdID0geyAuLi5jdXJyZW50LCBwcm9kdWN0Q291bnQ6IGN1cnJlbnQucHJvZHVjdENvdW50ICsgMSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgICBtYXA6IHt9IGFzIFJlY29yZDxzdHJpbmcsIENoYXRTZWFyY2hGaWx0ZXJJdGVtPixcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRmlsdGVyczogQ2hhdFNlYXJjaEZpbHRlcltdID0gZmlsdGVycy5tYXAoKHsgZmlsdGVyQ29uZmlnLCBtYXAgfSkgPT4gKHtcbiAgICAgIGZpbHRlcklkOiBmaWx0ZXJDb25maWcuZmlsdGVySWQsXG4gICAgICBkaXNwbGF5TmFtZTogZmlsdGVyQ29uZmlnLmRpc3BsYXlOYW1lLFxuICAgICAgaXRlbXM6IE9iamVjdC52YWx1ZXMobWFwKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgZmlsdGVySXRlbUlkOiBmaWx0ZXIuZmlsdGVySXRlbUlkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBmaWx0ZXIuZGlzcGxheU5hbWUsXG4gICAgICAgICAgcHJvZHVjdENvdW50OiBmaWx0ZXIucHJvZHVjdENvdW50LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6XG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgJHtmaWx0ZXJDb25maWcuZmlsdGVySWR9OiR7ZmlsdGVyLmZpbHRlckl0ZW1JZH1gLFxuICAgICAgICAgICAgKSA/PyBmYWxzZSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5zb3J0KHNvcnRGaWx0ZXIoZmlsdGVyQ29uZmlnKSksXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIFsuLi50cmFuc2Zvcm1lZEZpbHRlcnNdO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlclByb2R1Y3RzKFxuICAgIHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSxcbiAgICBmaWx0ZXJDb25maWdzOiBGaWx0ZXJBdHRyaWJ1dGVbXSxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW10sXG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycyA9IGZhbHNlLCAvLyBTZXQgdGhpcyB0byB0cnVlIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIHdoZXJlIHN0YWNraW5nIGZpbHRlcnMgaGFzIE9SIGxvZ2ljLlxuICApIHtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlcnMgPSBmaWx0ZXJDb25maWdzXG4gICAgICAubWFwKChmaWx0ZXJDb25maWcpID0+ICh7XG4gICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uZmlsdGVySWQgPT09IGZpbHRlckNvbmZpZy5maWx0ZXJJZCxcbiAgICAgICAgKSxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBoYXNTZWxlY3RlZE9wdGlvbnMgfSkgPT4gaGFzU2VsZWN0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgPyBwcm9kdWN0c1xuICAgICAgOiBwcm9kdWN0cy5maWx0ZXIoKHByb2R1Y3QpID0+XG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzLnJlZHVjZSgoYWNjLCBzZWxlY3RlZEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmluZGluZyBvbmUgZmFsc2UgcmVtb3ZlcyB0aGUgcHJvZHVjdFxuICAgICAgICAgICAgaWYgKCFhY2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByaWNlIGlzIHNwZWNpYWxcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICAgIHByb2R1Y3Quc2FsZVByaWNlID8/IHByb2R1Y3Qub3JpZ2luYWxQcmljZSA/PyAwLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5idWNrZXRTaXplLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzUHJpY2VGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBwcmljZToke3ByaWNlQnVja2V0fWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghbWF0Y2hlc1ByaWNlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgICAgICAgICAgIC8vIGR5bmFtaWMgaXMgbWlzbGVhZGluZyBoZXJlLiBJdHMgbm90IGp1c3QgZHluYW1pYyBmaWx0ZXJzLCBidXQgc3RhdGljIGZpbHRlcnMgYmVjYXVzZSB0aGUgY29uZmlnIGNvdW50cyBzdGF0aWMgZmlsdGVycyBhcyB0eXBlOiBkeW5hbWljLlxuICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlcklkLCBhdHRyaWJ1dGUgfSA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWVzID0gcHJvZHVjdC5maWx0ZXJzPy5bYXR0cmlidXRlXTtcblxuICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nQXJyYXkoYXR0cmlidXRlVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzRHluYW1pY0ZpbHRlciA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5hdHRyaWJ1dGUgPT09ICdkeW5hbWljJzsgLy8gVHJ1ZSBkeW5hbWljIGZpbHRlcnMgKHRoZSBvbmVzIHRoYXQgYXBwZWFyIGJlbmVhdGggdGhlIHNlYXJjaCBpbnB1dClcbiAgICAgICAgICAgICAgY29uc3QgaXNTdWJ0cmFjdGl2ZUxvZ2ljID0gaXNEeW5hbWljRmlsdGVyICYmICFhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzO1xuXG4gICAgICAgICAgICAgIGlmIChpc1N1YnRyYWN0aXZlTG9naWMpIHtcbiAgICAgICAgICAgICAgICAvLyBBTkQgbG9naWMgZm9yIHN1YnRyYWN0aXZlIGR5bmFtaWMgZmlsdGVycyBhbmQgYmV0d2VlbiBzdGF0aWMgZmlsdGVyIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnNGb3JUaGlzRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJZCA9PT0gZmlsdGVySWQpXG4gICAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJdGVtSWQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNBbGxTZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkT3B0aW9uc0ZvclRoaXNGaWx0ZXIuZXZlcnkoKHNlbGVjdGVkVmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRWYWx1ZSksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGFzQWxsU2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT1IgbG9naWMgZm9yIHN0YXRpYyBmaWx0ZXJzIGluIHRoZSBzaWRlYmFyIHdpdGhpbiBhIGNhdGVnb3J5LlxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYCR7ZmlsdGVySWR9OiR7dmFsLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sIHRydWUpLFxuICAgICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGluZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdFNvcnRlciB7XG4gIHN0YXRpYyBzb3J0KHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSwgc29ydGluZzogUHJvZHVjdFNvcnRpbmcpIHtcbiAgICBzd2l0Y2ggKHNvcnRpbmcpIHtcbiAgICAgIGNhc2UgUHJvZHVjdFNvcnRpbmcuUFJJQ0VfQVNDOlxuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RzXS5zb3J0KFxuICAgICAgICAgIChwMSwgcDIpID0+XG4gICAgICAgICAgICAocDEuc2FsZVByaWNlID8/IHAxLm9yaWdpbmFsUHJpY2UgPz8gMCkgLSAocDIuc2FsZVByaWNlID8/IHAyLm9yaWdpbmFsUHJpY2UgPz8gMCksXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgUHJvZHVjdFNvcnRpbmcuUFJJQ0VfREVTQzpcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0c10uc29ydChcbiAgICAgICAgICAocDEsIHAyKSA9PlxuICAgICAgICAgICAgKHAyLnNhbGVQcmljZSA/PyBwMi5vcmlnaW5hbFByaWNlID8/IDApIC0gKHAxLnNhbGVQcmljZSA/PyBwMS5vcmlnaW5hbFByaWNlID8/IDApLFxuICAgICAgICApO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcHJvZHVjdHM7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgYXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICByZXBseUV2ZW50Q2F0ZWdvcnlBdG9tLFxuICB1c2VySGFzUmVwbGllZEF0b20sXG4gIHVzZXJRdWVyeUF0b20sXG59IGZyb20gXCJzcmMvYXRvbXMvY2hhdFwiO1xuaW1wb3J0IHsgcXVldWVVc2VyRXZlbnRBdG9tIH0gZnJvbSBcIi4uL2NoYXQvbWVzc2FnZVF1ZXVlXCI7XG5pbXBvcnQgeyBuZXdPcmdDb25maWdBdG9tIH0gZnJvbSBcIi4uL29yZ1wiO1xuaW1wb3J0IHsgUHJvZHVjdEZpbHRlcnMgfSBmcm9tIFwiLi9wcm9kdWN0RmlsdGVyc1wiO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRlciB9IGZyb20gXCIuL3Byb2R1Y3RTb3J0ZXJcIjtcbmltcG9ydCB7IENoYXRTZWFyY2hTdGF0ZVR5cGUsIFByb2R1Y3RTb3J0aW5nIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gTk9URTpcbi8vIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiBvZiBzZWFyY2ggdGhhdCBuZWVkcyB0byBiZSBkZWNvdXBsZWQgYW5kIHJlbW92ZWQuXG4vLyB0aGUgbmV3IHNlYXJjaC50cyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IGlzIGxpa2VseSB3aGF0IHlvdSdyZSBsb29raW5nIGZvci5cblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hTdGF0ZUF0b20gPSBhdG9tPENoYXRTZWFyY2hTdGF0ZVR5cGU+KFwiZW50cnlwb2ludFwiKTtcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSGFzUHJvZHVjdHNBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSA9IGF0b208UHJvZHVjdFNvcnRpbmc+KFxuICBQcm9kdWN0U29ydGluZy5GRUFUVVJFRFxuKTtcblxuY29uc3QgZmlsdGVyUHJvZHVjdExpc3QgPSAobWVzc2FnZTogTWVzc2FnZSkgPT5cbiAgbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0ICYmIG1lc3NhZ2UubWV0YWRhdGEuaXNGb3JHcmlkID09PSB0cnVlO1xuY29uc3QgZmlsdGVyRmlsdGVyTGlzdCA9IChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuICBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXI7XG5cbmV4cG9ydCB0eXBlIENoYXRTZWFyY2hUdXJuID0ge1xuICBpZDogc3RyaW5nO1xuICBnZW5lcmF0ZWRRdWVyeT86IHN0cmluZztcbiAgcHJvZHVjdENvdW50OiBudW1iZXI7XG4gIHByb2R1Y3RMaXN0OiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzW1wiYXR0cmlidXRlc1wiXVtdO1xuICBmaWx0ZXJMaXN0OiBzdHJpbmdbXTtcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSA9IGF0b20oZmFsc2UpO1xuXG5jb25zdCBidWlsZENoYXRTZWFyY2hUdXJuID0gKFxuICBtZXNzYWdlczogTWVzc2FnZVtdXG4pOiBbc3RyaW5nLCBDaGF0U2VhcmNoVHVybl0gfCBudWxsID0+IHtcbiAgY29uc3QgcXVlcnlNZXNzYWdlID0gbWVzc2FnZXMuZmluZChcbiAgICAobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoXG4gICk7XG4gIGlmICghcXVlcnlNZXNzYWdlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgeyBnZW5lcmF0ZWRRdWVyeSwgcHJvZHVjdENvdW50IH0gPSBxdWVyeU1lc3NhZ2UubWV0YWRhdGEgPz8ge307XG4gIGNvbnN0IHByb2R1Y3RMaXN0ID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKGZpbHRlclByb2R1Y3RMaXN0KVxuICAgIC5tYXAoKG1lc3NhZ2UpID0+IChtZXNzYWdlIGFzIGFueSkubWV0YWRhdGEpO1xuICBjb25zdCBmaWx0ZXJMaXN0ID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKGZpbHRlckZpbHRlckxpc3QpXG4gICAgLm1hcCgobWVzc2FnZSkgPT4gbWVzc2FnZS5tZXRhZGF0YS5maWx0ZXJOYW1lKTtcbiAgcmV0dXJuIFtcbiAgICBxdWVyeU1lc3NhZ2UuaWQsXG4gICAge1xuICAgICAgaWQ6IHF1ZXJ5TWVzc2FnZS5pZCxcbiAgICAgIGdlbmVyYXRlZFF1ZXJ5LFxuICAgICAgcHJvZHVjdENvdW50OiBwcm9kdWN0Q291bnQgfHwgcHJvZHVjdExpc3QubGVuZ3RoLFxuICAgICAgcHJvZHVjdExpc3QsXG4gICAgICBmaWx0ZXJMaXN0LFxuICAgICAgbWVzc2FnZXMsXG4gICAgfSxcbiAgXTtcbn07XG5cbmNvbnN0IGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcbiAgcmV0dXJuIChcbiAgICBuZXdPcmdDb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZz8uc2VhcmNoRmlsdGVyQ29uZmlnIHx8XG4gICAgW11cbiAgKTtcbn0pO1xuXG5jb25zdCBzZWFyY2hNYXBBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZ2V0KG1lc3NhZ2VzQXRvbSk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbWVzc2FnZXMubWFwKGJ1aWxkQ2hhdFNlYXJjaFR1cm4pLmZpbHRlcigodikgPT4gdiAhPT0gbnVsbClcbiAgKTtcbn0pO1xuXG5jb25zdCBpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbTx7XG4gIGlkOiBzdHJpbmcgfCBudWxsO1xuICBxdWVyeTogc3RyaW5nIHwgbnVsbDtcbn0+KHtcbiAgaWQ6IG51bGwsXG4gIHF1ZXJ5OiBudWxsLFxufSk7XG5cbi8vIFNlbGVjdGVkIGZpbHRlciBvcHRpb25zIHdpdGggY29tcG91bmQgb2JqZWN0cyBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5IGFuZCBkaXNwbGF5XG5leHBvcnQgdHlwZSBTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7IC8vIFwiZmlsdGVySWQ6ZmlsdGVySXRlbUlkXCIgLSBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgY29tcGFyaXNvbnNcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgZmlsdGVySWQ6IHN0cmluZzsgLy8gRmlsdGVyIGNhdGVnb3J5XG4gIGZpbHRlckl0ZW1JZDogc3RyaW5nOyAvLyBGaWx0ZXIgdmFsdWVcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tID0gYXRvbTxTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb25bXT4oXG4gIFtdXG4pO1xuXG5leHBvcnQgY29uc3QgYWRkaXRpdmVEeW5hbWljRmlsdGVyc0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbmV3T3JnQ29uZmlnID0gZ2V0KG5ld09yZ0NvbmZpZ0F0b20pO1xuICByZXR1cm4gKFxuICAgIG5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnXG4gICAgICA/LmFkZGl0aXZlRHluYW1pY0ZpbHRlcnMgPz8gZmFsc2VcbiAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9IChcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgZmlsdGVySXRlbUlkOiBzdHJpbmcsXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmdcbik6IFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9PiAoe1xuICBpZDogYCR7ZmlsdGVySWR9OiR7ZmlsdGVySXRlbUlkfWAsXG4gIGRpc3BsYXlOYW1lLFxuICBmaWx0ZXJJZCxcbiAgZmlsdGVySXRlbUlkLFxufSk7XG5cbmNvbnN0IGhhbmRsZVNlYXJjaEF0b20gPSBhdG9tKG51bGwsIChnZXQsIHNldCwgbWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSBNZXNzYWdlVHlwZS5TZWFyY2gpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBxdWVyeVNlYXJjaCA9IG1lc3NhZ2UubWV0YWRhdGEuc2VhcmNoVGVybTtcblxuICBzZXQocmVwbHlFdmVudENhdGVnb3J5QXRvbSwgVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoKTtcbiAgc2V0KHVzZXJRdWVyeUF0b20sIHF1ZXJ5U2VhcmNoKTtcbiAgc2V0KG1lc3NhZ2VzQXRvbSwgWy4uLmdldChtZXNzYWdlc0F0b20pLCBbbWVzc2FnZV1dKTtcbiAgc2V0KHVzZXJIYXNSZXBsaWVkQXRvbSwgdHJ1ZSk7XG5cbiAgc2V0KHF1ZXVlVXNlckV2ZW50QXRvbSwge1xuICAgIGV2ZW50SWQ6IG1lc3NhZ2UuaWQsXG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCxcbiAgICBjcmVhdGVkQXQ6IG1lc3NhZ2UuY3JlYXRlZEF0LFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHNlYXJjaFRlcm06IG1lc3NhZ2UubWV0YWRhdGEuc2VhcmNoVGVybSxcbiAgICAgIHNlbGVjdGVkRmlsdGVyczogbWVzc2FnZS5tZXRhZGF0YS5zZWxlY3RlZEZpbHRlcnMsXG4gICAgfSxcbiAgfSk7XG59KTtcblxuLy8gVGhpcyBpbnRlcm5hbCBhdG9tIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHNlYXJjaCBwYXJhbXNcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tKSxcbiAgKF8sIHNldCwgdmFsdWU6IHsgaWQ6IHN0cmluZyB8IG51bGw7IHF1ZXJ5OiBzdHJpbmcgfCBudWxsIH0pID0+IHtcbiAgICBzZXQoaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSwgdmFsdWUpO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFF1ZXJ5QXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk/LnF1ZXJ5ID8/IG51bGwsXG4gIChnZXQsIHNldCwgdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogc2VhcmNoUGFyYW1zLmlkLCBxdWVyeTogdmFsdWUgfSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSWRBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKT8uaWQgPz8gbnVsbCxcbiAgKGdldCwgc2V0LCB2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiB2YWx1ZSwgcXVlcnk6IHNlYXJjaFBhcmFtcy5xdWVyeSB9KTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IENoYXRTZWFyY2hUdXJuQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBzZWFyY2hGaWx0ZXJDb25maWcgPSBnZXQoY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20pO1xuICBjb25zdCBzZWFyY2hNYXAgPSBnZXQoc2VhcmNoTWFwQXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hJZCA9IGdldChjaGF0U2VhcmNoSWRBdG9tKTtcbiAgaWYgKCFjaGF0U2VhcmNoSWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBDaGF0U2VhcmNoVHVybiA9IHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdO1xuICBpZiAoIUNoYXRTZWFyY2hUdXJuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcHJvZHVjdFNvcnRpbmcgPSBnZXQoY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSk7XG4gIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IGdldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tKTtcbiAgY29uc3QgYWRkaXRpdmVEeW5hbWljRmlsdGVycyA9IGdldChhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IGZpbHRlcmVkUHJvZHVjdHMgPSBQcm9kdWN0RmlsdGVycy5maWx0ZXJQcm9kdWN0cyhcbiAgICBDaGF0U2VhcmNoVHVybi5wcm9kdWN0TGlzdCxcbiAgICBzZWFyY2hGaWx0ZXJDb25maWcsXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLFxuICAgIGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNcbiAgKTtcblxuICBjb25zdCBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzID0gUHJvZHVjdFNvcnRlci5zb3J0KFxuICAgIGZpbHRlcmVkUHJvZHVjdHMsXG4gICAgcHJvZHVjdFNvcnRpbmdcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdLFxuICAgIHByb2R1Y3RMaXN0OiBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzLFxuICAgIHByb2R1Y3RDb3VudDogZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cy5sZW5ndGgsXG4gIH07XG59KTtcblxuLy8gVE9ETzogV29yayBvbiBkZXByZWNhdGluZyB0aGlzIGF0b20gaW4gZmF2b3Igb2YgdXNpbmcgQ2hhdFNlYXJjaFR1cm5BdG9tIGRpcmVjdGx5XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFByb2R1Y3RzID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IENoYXRTZWFyY2hUdXJuID0gZ2V0KENoYXRTZWFyY2hUdXJuQXRvbSk7XG4gIHJldHVybiBDaGF0U2VhcmNoVHVybj8ucHJvZHVjdExpc3QgPz8gW107XG59KTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hGaWx0ZXJzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBzZWFyY2hGaWx0ZXJDb25maWcgPSBnZXQoY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20pO1xuICBjb25zdCBzZWFyY2hNYXAgPSBnZXQoc2VhcmNoTWFwQXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hJZCA9IGdldChjaGF0U2VhcmNoSWRBdG9tKTtcblxuICBpZiAoY2hhdFNlYXJjaElkICYmIHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdKSB7XG4gICAgY29uc3QgcHJvZHVjdHMgPSBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXS5wcm9kdWN0TGlzdDtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnMgPSBnZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSk7XG4gICAgcmV0dXJuIFByb2R1Y3RGaWx0ZXJzLmdldEZpbHRlcnNGb3JQcm9kdWN0cyhcbiAgICAgIHByb2R1Y3RzLFxuICAgICAgc2VhcmNoRmlsdGVyQ29uZmlnLFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gW107XG59KTtcblxuLy8gRm9yIHNlYXJjaCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBxdWVyeSBwYXJhbXM6XG4vLyBlczogdHJ1ZSAtIHRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGluIGEgc2VhcmNoIHN0YXRlXG4vLyBlc3E6IHF1ZXJ5IC0gdGhpcyBpcyB0aGUgY3VycmVudCBzZWFyY2ggcXVlcnlcbi8vIGVzaTogc2VhcmNoIGlkIC0gdGhpcyBpcyB0aGUgdW5pcXVlIGlkIGZvciB0aGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZSBhcmUgZGlzcGxheWluZy4gSXQgaXMgcHVsbGVkIGZyb20gdGhlIG1lc3NhZ2UgaWQgZnJvbSB0aGUgdHVybiB0aGF0IGluY2x1ZGVzIHRoZSBzZWFyY2ggcmVzdWx0c1xuXG5leHBvcnQgY29uc3Qgc2V0U2VhcmNoUGFyYW1zID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbSgoKSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiB7XG4gICAgZXM6IHBhcmFtcy5nZXQoXCJlc1wiKSxcbiAgICBlc3E6IHBhcmFtcy5nZXQoXCJlc3FcIiksXG4gIH07XG59KTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYXRlQ2hhdFNlYXJjaEF0b20gPSBhdG9tKG51bGwsIChfLCBzZXQsIHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgc2V0KGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tLCB0cnVlKTtcbiAgLy8gVXBkYXRlIFVSTCBhbmQgbWFudWFsbHkgdHJpZ2dlciBzdGF0ZSBjaGFuZ2UgKHNpbmNlIHB1c2hTdGF0ZSBkb2Vzbid0IHRyaWdnZXIgcG9wc3RhdGUpXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG5cbiAgLy8gTWFudWFsbHkgdHJpZ2dlciBwYWdlIHZhcmlhbnQgcmUtZXZhbHVhdGlvbiBieSBkaXNwYXRjaGluZyBhIHBvcHN0YXRlIGV2ZW50XG4gIC8vIFRoaXMgZW5zdXJlcyB0aGUgcGFnZSB2YXJpYW50IHN5c3RlbSBkZXRlY3RzIHRoZSBVUkwgY2hhbmdlIGFuZCBtb3VudHMgc2VhcmNoIHJlc3VsdHNcbiAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFBvcFN0YXRlRXZlbnQoXCJwb3BzdGF0ZVwiLCB7IHN0YXRlOiB7fSB9KSk7XG5cbiAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBudWxsLCBxdWVyeSB9KTtcbiAgc2V0KGhhbmRsZVNlYXJjaEF0b20sIHtcbiAgICBpZDogdXVpZCgpLFxuICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBzZWFyY2hUZXJtOiBxdWVyeSxcbiAgICAgIC8vIEVuYWJsaW5nIHRoaXMgd2lsbCBlbmFibGUgdGhlIG5ldyBiYWNrZW5kIHNlYXJjaFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiBbXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20gPSBhdG9tKFxuICBudWxsLFxuICAoZ2V0LCBzZXQsIG1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS50eXBlICE9PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm9kdWN0Q291bnQsIGdlbmVyYXRlZFF1ZXJ5IH0gPSBtZXNzYWdlLm1ldGFkYXRhO1xuICAgIGlmIChwcm9kdWN0Q291bnQgIT09IDApIHtcbiAgICAgIC8vIENsZWFyIHRoZSBmaWx0ZXIgb3B0aW9ucyB3aGVuIHdlIGdldCBuZXcgcHJvZHVjdHNcbiAgICAgIHNldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tLCBbXSk7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2Ugc3RpbGwgZG8gYW55IG9mIHRoZXNlIHRoaW5ncz9cbiAgICAgIHNldChjaGF0U2VhcmNoU3RhdGVBdG9tLCBcInByb2R1Y3QtcGFnZVwiKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIGdlbmVyYXRlZFF1ZXJ5KTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNpXCIsIG1lc3NhZ2UuaWQpO1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuICAgICAgaWYgKGN1cnJlbnRTZWFyY2hQYXJhbXMuaWQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlIGlkIGlzIG51bGwsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgc3RhdGVcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIHVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGUgcXVlcnkgaXMgZGlmZmVyZW50LCB3ZSBuZWVkIHRvIHB1c2ggYSBuZXcgc3RhdGVcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIFwiXCIsIHVybCk7XG4gICAgICB9XG4gICAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG1lc3NhZ2UuaWQsIHF1ZXJ5OiBnZW5lcmF0ZWRRdWVyeSB9KTtcbiAgICB9XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBzZXRDaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20obnVsbCwgKF8sIHNldCwgcXVlcnk6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG51bGwsIHF1ZXJ5IH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxNQUFhLDJCQUEyQixnQkFBd0I7Q0FDOUQsTUFBTSxRQUFRO0VBQUM7RUFBUTtFQUFPO0VBQU07RUFBSztFQUFLO0VBQUs7RUFBTTtFQUFPO0VBQVE7RUFBUTtBQWVoRixRQWJ1QixZQUNwQixhQUFhLENBQ2IsTUFBTSxJQUFJLENBQ1YsS0FBSyxTQUFTO0FBQ2IsTUFBSSxNQUFNLFNBQVMsS0FBSyxDQUN0QixRQUFPLEtBQUssYUFBYTtBQUUzQixTQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsYUFBYSxHQUFHLEtBQUssTUFBTSxFQUFFO0dBQ25ELENBRWtDLEtBQUssSUFBSSxDQUd6QixRQUFRLFdBQVcsU0FBUzs7Ozs7QUNWcEQsTUFBTSxrQkFBa0IsT0FBZSxlQUF1QjtBQUU1RCxRQURlLEtBQUssTUFBTSxRQUFRLFdBQVcsR0FDN0I7O0FBR2xCLE1BQU0saUJBQWlCLFVBQXNDO0FBQzNELEtBQUksQ0FBQyxNQUFNLFFBQVEsTUFBTSxDQUN2QixRQUFPO0FBRVQsUUFBTyxNQUFNLE9BQU8sU0FBUyxPQUFPLFNBQVMsU0FBUzs7QUFLeEQsTUFBTSxjQUFjLGlCQUFzRDtBQUN4RSxLQUFJLGFBQWEsU0FBUyxRQUN4QixTQUFRLEdBQUcsTUFBTSxPQUFPLEVBQUUsYUFBYSxHQUFHLE9BQU8sRUFBRSxhQUFhO0FBRWxFLEtBQUks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