@envive-ai/react-hooks 0.3.7 → 0.3.9

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 (460) hide show
  1. package/dist/_virtual/rolldown_runtime.cjs +0 -2
  2. package/dist/application/commerce-api.cjs +1 -1
  3. package/dist/application/commerce-api.js +1 -1
  4. package/dist/application/models/chatElementDisplayLocationV3.cjs +5 -1
  5. package/dist/application/models/chatElementDisplayLocationV3.d.cts +5 -1
  6. package/dist/application/models/chatElementDisplayLocationV3.d.ts +5 -1
  7. package/dist/application/models/chatElementDisplayLocationV3.js +5 -1
  8. package/dist/application/models/frontendConfigV3.d.cts +2 -2
  9. package/dist/application/models/frontendConfigV3.d.ts +2 -2
  10. package/dist/application/models/variantInfo/variantInfo.cjs +2 -2
  11. package/dist/application/models/variantInfo/variantInfo.d.cts +2 -2
  12. package/dist/application/models/variantInfo/variantInfo.d.ts +2 -2
  13. package/dist/application/models/variantInfo/variantInfo.js +2 -2
  14. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +6 -2
  15. package/dist/application/utils/widgetTextRequestToApiRequest.js +6 -2
  16. package/dist/atoms/app/index.cjs +4 -4
  17. package/dist/atoms/app/index.d.cts +7 -7
  18. package/dist/atoms/app/index.d.ts +2 -2
  19. package/dist/atoms/app/index.js +4 -4
  20. package/dist/atoms/app/variant.d.cts +6 -6
  21. package/dist/atoms/app/variant.d.ts +6 -6
  22. package/dist/atoms/chat/chatState.d.cts +18 -18
  23. package/dist/atoms/chat/chatState.d.ts +17 -17
  24. package/dist/atoms/chat/form.d.cts +2 -2
  25. package/dist/atoms/chat/form.d.ts +2 -2
  26. package/dist/atoms/chat/index.cjs +7 -1
  27. package/dist/atoms/chat/index.d.cts +5 -4
  28. package/dist/atoms/chat/index.d.ts +5 -4
  29. package/dist/atoms/chat/index.js +3 -2
  30. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  31. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  32. package/dist/atoms/chat/messageQueue.cjs +1 -0
  33. package/dist/atoms/chat/messageQueue.d.cts +31 -0
  34. package/dist/atoms/chat/messageQueue.d.ts +31 -0
  35. package/dist/atoms/chat/messageQueue.js +1 -1
  36. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  37. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  38. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  39. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  40. package/dist/atoms/chat/replies.cjs +46 -0
  41. package/dist/atoms/chat/replies.d.cts +14 -0
  42. package/dist/atoms/chat/replies.d.ts +14 -0
  43. package/dist/atoms/chat/replies.js +45 -0
  44. package/dist/atoms/chat/suggestions.d.cts +2 -2
  45. package/dist/atoms/chat/suggestions.d.ts +2 -2
  46. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  47. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  48. package/dist/atoms/org/customerService.d.cts +6 -6
  49. package/dist/atoms/org/customerService.d.ts +6 -6
  50. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  51. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  52. package/dist/atoms/org/index.cjs +2 -2
  53. package/dist/atoms/org/index.js +2 -2
  54. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  55. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  56. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  57. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  58. package/dist/atoms/search/chatSearch.cjs +1 -1
  59. package/dist/atoms/search/chatSearch.d.cts +17 -17
  60. package/dist/atoms/search/chatSearch.d.ts +17 -17
  61. package/dist/atoms/search/chatSearch.js +1 -1
  62. package/dist/atoms/search/searchAPI.cjs +1 -1
  63. package/dist/atoms/search/searchAPI.d.cts +13 -13
  64. package/dist/atoms/search/searchAPI.d.ts +13 -13
  65. package/dist/atoms/search/searchAPI.js +1 -1
  66. package/dist/atoms/search/types.d.cts +1 -1
  67. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  68. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  69. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +6 -4
  70. package/dist/contexts/amplitudeContext/amplitudeContext.js +6 -4
  71. package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +66 -0
  72. package/dist/contexts/enviveContext/WindowChatToggleBinder.js +65 -0
  73. package/dist/contexts/enviveContext/enviveContext.cjs +40 -17
  74. package/dist/contexts/enviveContext/enviveContext.d.cts +4 -1
  75. package/dist/contexts/enviveContext/enviveContext.d.ts +4 -1
  76. package/dist/contexts/enviveContext/enviveContext.js +41 -18
  77. package/dist/contexts/enviveContext/types.d.cts +1 -1
  78. package/dist/contexts/enviveContext/types.d.ts +1 -1
  79. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +56 -2
  80. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +6 -1
  81. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +6 -1
  82. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +56 -2
  83. package/dist/contexts/graphqlContext/graphqlContext.cjs +15 -10
  84. package/dist/contexts/graphqlContext/graphqlContext.js +11 -6
  85. package/dist/contexts/graphqlContext/mockV3Config.cjs +65 -58
  86. package/dist/contexts/graphqlContext/mockV3Config.js +27 -21
  87. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +29 -1
  88. package/dist/contexts/hardcopyContext/hardcopyContext.js +29 -1
  89. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  90. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  91. package/dist/contexts/pageContext/mapping.cjs +9 -1
  92. package/dist/contexts/pageContext/mapping.js +9 -1
  93. package/dist/contexts/pageContext/pageContext.cjs +8 -3
  94. package/dist/contexts/pageContext/pageContext.d.cts +2 -1
  95. package/dist/contexts/pageContext/pageContext.d.ts +2 -1
  96. package/dist/contexts/pageContext/pageContext.js +8 -3
  97. package/dist/contexts/pageContext/types.d.cts +11 -3
  98. package/dist/contexts/pageContext/types.d.ts +11 -3
  99. package/dist/contexts/salesAgentContext/chatAPI.cjs +44 -8
  100. package/dist/contexts/salesAgentContext/chatAPI.d.cts +7 -6
  101. package/dist/contexts/salesAgentContext/chatAPI.d.ts +7 -6
  102. package/dist/contexts/salesAgentContext/chatAPI.js +44 -8
  103. package/dist/contexts/salesAgentContext/formSubmittedUtils.cjs +37 -0
  104. package/dist/contexts/salesAgentContext/formSubmittedUtils.js +36 -0
  105. package/dist/contexts/salesAgentContext/index.d.cts +2 -2
  106. package/dist/contexts/salesAgentContext/index.d.ts +2 -2
  107. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +39 -6
  108. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +11 -4
  109. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +11 -4
  110. package/dist/contexts/salesAgentContext/salesAgentContext.js +40 -7
  111. package/dist/contexts/salesAgentContext/salesAgentService.cjs +13 -7
  112. package/dist/contexts/salesAgentContext/salesAgentService.js +13 -7
  113. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  114. package/dist/contexts/searchContext/searchContext.js +1 -1
  115. package/dist/contexts/types.d.cts +1 -1
  116. package/dist/contexts/typesV3.cjs +2 -7
  117. package/dist/contexts/typesV3.d.cts +19 -11
  118. package/dist/contexts/typesV3.d.ts +21 -13
  119. package/dist/contexts/typesV3.js +3 -7
  120. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +22 -29
  121. package/dist/contexts/userIdentityContext/userIdentityContext.d.cts +9 -8
  122. package/dist/contexts/userIdentityContext/userIdentityContext.d.ts +9 -8
  123. package/dist/contexts/userIdentityContext/userIdentityContext.js +22 -29
  124. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +2 -1
  125. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +2 -1
  126. package/dist/hooks/ElementObserver/useElementObserver.cjs +3 -2
  127. package/dist/hooks/ElementObserver/useElementObserver.js +3 -2
  128. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  129. package/dist/hooks/Search/useSearch.cjs +2 -2
  130. package/dist/hooks/Search/useSearch.js +2 -2
  131. package/dist/hooks/Search/useSearchInput.cjs +2 -2
  132. package/dist/hooks/Search/useSearchInput.js +2 -2
  133. package/dist/hooks/utils.d.cts +1 -1
  134. package/dist/mocks/index.cjs +5 -0
  135. package/dist/mocks/index.d.cts +2 -0
  136. package/dist/mocks/index.d.ts +2 -0
  137. package/dist/mocks/index.js +3 -0
  138. package/dist/mocks/salesAgentMockData.cjs +207 -0
  139. package/dist/mocks/salesAgentMockData.d.cts +11 -0
  140. package/dist/mocks/salesAgentMockData.d.ts +11 -0
  141. package/dist/mocks/salesAgentMockData.js +204 -0
  142. package/dist/services/amplitudeService/amplitudeService.cjs +77 -12
  143. package/dist/services/amplitudeService/amplitudeService.d.cts +12 -3
  144. package/dist/services/amplitudeService/amplitudeService.d.ts +12 -3
  145. package/dist/services/amplitudeService/amplitudeService.js +77 -12
  146. package/dist/services/userIdentityService/index.cjs +3 -0
  147. package/dist/services/userIdentityService/index.d.cts +2 -0
  148. package/dist/services/userIdentityService/index.d.ts +2 -0
  149. package/dist/services/userIdentityService/index.js +3 -0
  150. package/dist/services/userIdentityService/userIdentityService.cjs +49 -0
  151. package/dist/services/userIdentityService/userIdentityService.d.cts +19 -0
  152. package/dist/services/userIdentityService/userIdentityService.d.ts +19 -0
  153. package/dist/services/userIdentityService/userIdentityService.js +48 -0
  154. package/package.json +18 -5
  155. package/src/application/models/chatElementDisplayLocationV3.ts +4 -0
  156. package/src/application/models/frontendConfigV3.ts +1 -1
  157. package/src/application/models/variantInfo/variantInfo.ts +1 -1
  158. package/src/application/utils/widgetTextRequestToApiRequest.ts +7 -5
  159. package/src/atoms/app/index.ts +9 -7
  160. package/src/atoms/chat/index.ts +1 -0
  161. package/src/atoms/chat/replies.ts +56 -0
  162. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +47 -66
  163. package/src/contexts/amplitudeContext/amplitudeContext.tsx +4 -1
  164. package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +66 -0
  165. package/src/contexts/enviveContext/enviveContext.tsx +50 -7
  166. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +101 -2
  167. package/src/contexts/graphqlContext/graphqlContext.tsx +11 -2
  168. package/src/contexts/graphqlContext/mockV3Config.ts +19 -4
  169. package/src/contexts/hardcopyContext/hardcopyContext.tsx +29 -0
  170. package/src/contexts/pageContext/mapping.ts +16 -1
  171. package/src/contexts/pageContext/pageContext.tsx +12 -3
  172. package/src/contexts/pageContext/types.ts +16 -1
  173. package/src/contexts/salesAgentContext/chatAPI.ts +52 -11
  174. package/src/contexts/salesAgentContext/formSubmittedUtils.ts +57 -0
  175. package/src/contexts/salesAgentContext/salesAgentContext.tsx +71 -5
  176. package/src/contexts/salesAgentContext/salesAgentService.ts +15 -9
  177. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +3 -1
  178. package/src/contexts/typesV3.ts +22 -12
  179. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +18 -131
  180. package/src/contexts/userIdentityContext/userIdentityContext.tsx +47 -41
  181. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -0
  182. package/src/hooks/ElementObserver/useElementObserver.ts +2 -1
  183. package/src/hooks/Search/__tests__/useSearch.test.tsx +11 -1
  184. package/src/mocks/index.ts +1 -0
  185. package/src/mocks/salesAgentMockData.ts +247 -0
  186. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +17 -0
  187. package/src/services/amplitudeService/amplitudeService.ts +106 -11
  188. package/src/services/userIdentityService/index.ts +1 -0
  189. package/src/services/userIdentityService/userIdentityService.ts +64 -0
  190. package/dist/_virtual/rolldown_runtime.js +0 -29
  191. package/dist/contexts/featureFlagContext/featureFlagContext.cjs +0 -105
  192. package/dist/contexts/featureFlagContext/featureFlagContext.d.cts +0 -19
  193. package/dist/contexts/featureFlagContext/featureFlagContext.d.ts +0 -19
  194. package/dist/contexts/featureFlagContext/featureFlagContext.js +0 -102
  195. package/dist/contexts/featureFlagContext/index.cjs +0 -4
  196. package/dist/contexts/featureFlagContext/index.d.cts +0 -2
  197. package/dist/contexts/featureFlagContext/index.d.ts +0 -2
  198. package/dist/contexts/featureFlagContext/index.js +0 -3
  199. package/dist/node_modules/classnames/index.cjs +0 -52
  200. package/dist/node_modules/classnames/index.js +0 -49
  201. package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.cjs +0 -2
  202. package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.js +0 -4
  203. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.cjs +0 -16
  204. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.js +0 -17
  205. package/dist/packages/components-v3/dist/ChatHeader/components/Handle.cjs +0 -6
  206. package/dist/packages/components-v3/dist/ChatHeader/components/Handle.js +0 -8
  207. package/dist/packages/components-v3/dist/ChatHeader/components/Layout.cjs +0 -4
  208. package/dist/packages/components-v3/dist/ChatHeader/components/Layout.js +0 -6
  209. package/dist/packages/components-v3/dist/ChatHeader/components/Logo.cjs +0 -3
  210. package/dist/packages/components-v3/dist/ChatHeader/components/Logo.js +0 -5
  211. package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.cjs +0 -7
  212. package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.js +0 -9
  213. package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.cjs +0 -6
  214. package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.js +0 -8
  215. package/dist/packages/components-v3/dist/ChatHeader/components/index.cjs +0 -6
  216. package/dist/packages/components-v3/dist/ChatHeader/components/index.js +0 -8
  217. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +0 -22
  218. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +0 -23
  219. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.cjs +0 -58
  220. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.js +0 -59
  221. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +0 -8
  222. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.js +0 -9
  223. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.cjs +0 -1
  224. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.js +0 -3
  225. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.cjs +0 -12
  226. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.js +0 -13
  227. package/dist/packages/components-v3/dist/ChatHeader/index.cjs +0 -2
  228. package/dist/packages/components-v3/dist/ChatHeader/index.js +0 -4
  229. package/dist/packages/components-v3/dist/ChatHeader/types/index.cjs +0 -11
  230. package/dist/packages/components-v3/dist/ChatHeader/types/index.js +0 -10
  231. package/dist/packages/components-v3/dist/Container/Container.cjs +0 -11
  232. package/dist/packages/components-v3/dist/Container/Container.js +0 -12
  233. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +0 -1
  234. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +0 -3
  235. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +0 -1
  236. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +0 -3
  237. package/dist/packages/components-v3/dist/Container/index.cjs +0 -1
  238. package/dist/packages/components-v3/dist/Container/index.js +0 -3
  239. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.cjs +0 -2
  240. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.js +0 -4
  241. package/dist/packages/components-v3/dist/FloatingButton/components/Button.cjs +0 -9
  242. package/dist/packages/components-v3/dist/FloatingButton/components/Button.js +0 -10
  243. package/dist/packages/components-v3/dist/FloatingButton/components/Container.cjs +0 -9
  244. package/dist/packages/components-v3/dist/FloatingButton/components/Container.js +0 -10
  245. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.cjs +0 -3
  246. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.js +0 -5
  247. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.cjs +0 -9
  248. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.js +0 -10
  249. package/dist/packages/components-v3/dist/FloatingButton/components/index.cjs +0 -4
  250. package/dist/packages/components-v3/dist/FloatingButton/components/index.js +0 -6
  251. package/dist/packages/components-v3/dist/FloatingButton/index.cjs +0 -2
  252. package/dist/packages/components-v3/dist/FloatingButton/index.js +0 -4
  253. package/dist/packages/components-v3/dist/FloatingButton/types/types.cjs +0 -17
  254. package/dist/packages/components-v3/dist/FloatingButton/types/types.js +0 -16
  255. package/dist/packages/components-v3/dist/Image/Image.cjs +0 -16
  256. package/dist/packages/components-v3/dist/Image/Image.js +0 -17
  257. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.cjs +0 -1
  258. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.js +0 -3
  259. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.cjs +0 -1
  260. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.js +0 -3
  261. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.cjs +0 -1
  262. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.js +0 -3
  263. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.cjs +0 -1
  264. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.js +0 -3
  265. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.cjs +0 -1
  266. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.js +0 -3
  267. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.cjs +0 -1
  268. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.js +0 -3
  269. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.cjs +0 -1
  270. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.js +0 -3
  271. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.cjs +0 -2
  272. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.js +0 -4
  273. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.cjs +0 -2
  274. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.js +0 -4
  275. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +0 -15
  276. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +0 -16
  277. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.cjs +0 -4
  278. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.js +0 -4
  279. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.cjs +0 -1
  280. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.js +0 -3
  281. package/dist/packages/components-v3/dist/ImageGallery/components/index.cjs +0 -4
  282. package/dist/packages/components-v3/dist/ImageGallery/components/index.js +0 -6
  283. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.cjs +0 -1
  284. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.js +0 -3
  285. package/dist/packages/components-v3/dist/ImageGallery/index.cjs +0 -2
  286. package/dist/packages/components-v3/dist/ImageGallery/index.js +0 -4
  287. package/dist/packages/components-v3/dist/ImageGallery/types/types.cjs +0 -13
  288. package/dist/packages/components-v3/dist/ImageGallery/types/types.js +0 -12
  289. package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +0 -12
  290. package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +0 -13
  291. package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +0 -1
  292. package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +0 -3
  293. package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +0 -3
  294. package/dist/packages/components-v3/dist/PromptButton/components/Label.js +0 -5
  295. package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +0 -12
  296. package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +0 -13
  297. package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +0 -9
  298. package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +0 -10
  299. package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +0 -4
  300. package/dist/packages/components-v3/dist/PromptButton/components/index.js +0 -6
  301. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +0 -1
  302. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +0 -3
  303. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +0 -8
  304. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +0 -9
  305. package/dist/packages/components-v3/dist/PromptButton/index.cjs +0 -2
  306. package/dist/packages/components-v3/dist/PromptButton/index.js +0 -4
  307. package/dist/packages/components-v3/dist/PromptButton/types/index.cjs +0 -13
  308. package/dist/packages/components-v3/dist/PromptButton/types/index.js +0 -12
  309. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.cjs +0 -12
  310. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.js +0 -14
  311. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.cjs +0 -9
  312. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.js +0 -10
  313. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.cjs +0 -11
  314. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.js +0 -12
  315. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.cjs +0 -4
  316. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.js +0 -6
  317. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.cjs +0 -4
  318. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.js +0 -6
  319. package/dist/packages/components-v3/dist/PromptCarousel/components/index.cjs +0 -3
  320. package/dist/packages/components-v3/dist/PromptCarousel/components/index.js +0 -5
  321. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.cjs +0 -5
  322. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.js +0 -7
  323. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.cjs +0 -1
  324. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.js +0 -3
  325. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.cjs +0 -3
  326. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.js +0 -5
  327. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.cjs +0 -1
  328. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.js +0 -3
  329. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.cjs +0 -1
  330. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +0 -3
  331. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.cjs +0 -1
  332. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.js +0 -3
  333. package/dist/packages/components-v3/dist/PromptCarousel/index.cjs +0 -2
  334. package/dist/packages/components-v3/dist/PromptCarousel/index.js +0 -4
  335. package/dist/packages/components-v3/dist/PromptCarousel/types/types.cjs +0 -19
  336. package/dist/packages/components-v3/dist/PromptCarousel/types/types.js +0 -17
  337. package/dist/packages/components-v3/dist/Stack/Stack.cjs +0 -36
  338. package/dist/packages/components-v3/dist/Stack/Stack.js +0 -36
  339. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.cjs +0 -27
  340. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.js +0 -26
  341. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.cjs +0 -20
  342. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.js +0 -19
  343. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.cjs +0 -19
  344. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.js +0 -18
  345. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.cjs +0 -16
  346. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.js +0 -15
  347. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.cjs +0 -21
  348. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.js +0 -20
  349. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.cjs +0 -38
  350. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.js +0 -38
  351. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.cjs +0 -13
  352. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.js +0 -12
  353. package/dist/packages/components-v3/dist/Stack/index.cjs +0 -1
  354. package/dist/packages/components-v3/dist/Stack/index.js +0 -3
  355. package/dist/packages/components-v3/dist/Stack/utils/constants.cjs +0 -42
  356. package/dist/packages/components-v3/dist/Stack/utils/constants.js +0 -41
  357. package/dist/packages/components-v3/dist/Tokens/index.cjs +0 -11
  358. package/dist/packages/components-v3/dist/Tokens/index.js +0 -13
  359. package/dist/packages/components-v3/dist/Typography/Typography.cjs +0 -15
  360. package/dist/packages/components-v3/dist/Typography/Typography.js +0 -16
  361. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +0 -1
  362. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +0 -3
  363. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +0 -1
  364. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +0 -3
  365. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +0 -1
  366. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +0 -3
  367. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +0 -1
  368. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +0 -3
  369. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +0 -1
  370. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +0 -3
  371. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +0 -1
  372. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +0 -3
  373. package/dist/packages/components-v3/dist/Typography/index.cjs +0 -1
  374. package/dist/packages/components-v3/dist/Typography/index.js +0 -3
  375. package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.cjs +0 -2
  376. package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.js +0 -4
  377. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.cjs +0 -14
  378. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.js +0 -15
  379. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.cjs +0 -3
  380. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.js +0 -5
  381. package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.cjs +0 -3
  382. package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.js +0 -5
  383. package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.cjs +0 -3
  384. package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.js +0 -5
  385. package/dist/packages/components-v3/dist/WelcomeMessage/components/index.cjs +0 -4
  386. package/dist/packages/components-v3/dist/WelcomeMessage/components/index.js +0 -6
  387. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.cjs +0 -1
  388. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.js +0 -3
  389. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.cjs +0 -1
  390. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.js +0 -3
  391. package/dist/packages/components-v3/dist/WelcomeMessage/index.cjs +0 -2
  392. package/dist/packages/components-v3/dist/WelcomeMessage/index.js +0 -4
  393. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.cjs +0 -14
  394. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.js +0 -14
  395. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.cjs +0 -12
  396. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.js +0 -13
  397. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +0 -1
  398. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +0 -3
  399. package/dist/packages/components-v3/dist/WidgetWrapper/index.cjs +0 -2
  400. package/dist/packages/components-v3/dist/WidgetWrapper/index.js +0 -4
  401. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.cjs +0 -13
  402. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.js +0 -12
  403. package/dist/packages/components-v3/dist/src/models/colorsConfig.cjs +0 -26
  404. package/dist/packages/components-v3/dist/src/models/colorsConfig.js +0 -25
  405. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.cjs +0 -16
  406. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.js +0 -17
  407. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.cjs +0 -25
  408. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.js +0 -23
  409. package/dist/packages/components-v3/dist/tokens/colors/colors.cjs +0 -51
  410. package/dist/packages/components-v3/dist/tokens/colors/colors.js +0 -51
  411. package/dist/packages/components-v3/dist/tokens/radius/radius.cjs +0 -64
  412. package/dist/packages/components-v3/dist/tokens/radius/radius.js +0 -65
  413. package/dist/packages/components-v3/dist/tokens/theme/theme.cjs +0 -13
  414. package/dist/packages/components-v3/dist/tokens/theme/theme.js +0 -12
  415. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.cjs +0 -25
  416. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.js +0 -25
  417. package/dist/packages/components-v3/dist/tokens/typography/fontSize.cjs +0 -37
  418. package/dist/packages/components-v3/dist/tokens/typography/fontSize.js +0 -38
  419. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.cjs +0 -17
  420. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.js +0 -18
  421. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.cjs +0 -15
  422. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.js +0 -16
  423. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.cjs +0 -31
  424. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.js +0 -32
  425. package/dist/packages/components-v3/dist/tokens/typography/typography.cjs +0 -5
  426. package/dist/packages/components-v3/dist/tokens/typography/typography.js +0 -7
  427. package/dist/packages/components-v3/dist/tokens/utils.cjs +0 -7
  428. package/dist/packages/components-v3/dist/tokens/utils.js +0 -6
  429. package/dist/packages/components-v3/dist/utils/CustomIcon.cjs +0 -2
  430. package/dist/packages/components-v3/dist/utils/CustomIcon.js +0 -4
  431. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.cjs +0 -1
  432. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.js +0 -3
  433. package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +0 -57
  434. package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +0 -56
  435. package/dist/packages/icons/dist/FourPointStar.cjs +0 -8
  436. package/dist/packages/icons/dist/FourPointStar.js +0 -9
  437. package/dist/packages/icons/dist/IconCloseRounded.cjs +0 -22
  438. package/dist/packages/icons/dist/IconCloseRounded.js +0 -22
  439. package/dist/packages/icons/dist/IconCloseSharp.cjs +0 -31
  440. package/dist/packages/icons/dist/IconCloseSharp.js +0 -31
  441. package/dist/packages/icons/dist/IconCloseTransparent.cjs +0 -24
  442. package/dist/packages/icons/dist/IconCloseTransparent.js +0 -24
  443. package/dist/packages/icons/dist/Sparkles.cjs +0 -8
  444. package/dist/packages/icons/dist/Sparkles.js +0 -9
  445. package/dist/packages/icons/dist/_virtual/rolldown_runtime.cjs +0 -28
  446. package/dist/packages/icons/dist/_virtual/rolldown_runtime.js +0 -26
  447. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs +0 -697
  448. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.js +0 -697
  449. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs +0 -44
  450. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +0 -44
  451. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.cjs +0 -1529
  452. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.js +0 -1529
  453. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.cjs +0 -330
  454. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.js +0 -330
  455. package/dist/packages/icons/dist/node_modules/react/index.cjs +0 -14
  456. package/dist/packages/icons/dist/node_modules/react/index.js +0 -14
  457. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.cjs +0 -14
  458. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.js +0 -14
  459. package/src/contexts/featureFlagContext/featureFlagContext.tsx +0 -180
  460. package/src/contexts/featureFlagContext/index.ts +0 -1
@@ -4,10 +4,13 @@ import React, { createContext, useContext, useMemo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx
7
- var FeatureFlagService = class {
7
+ const FEATURE_FLAGS_STORAGE_KEY = "spiffy-feature-flags";
8
+ var FeatureFlagService = class FeatureFlagService {
8
9
  constructor(featureGates) {
9
10
  this.isFeatureGateEnabled = (featureGate) => {
10
11
  const gateValue = this.featureGates.find((gate) => gate.name === featureGate);
12
+ const featureFlagOverride = FeatureFlagService.getFeatureFlagOverride(featureGate);
13
+ if (featureFlagOverride !== void 0) return featureFlagOverride;
11
14
  if (gateValue == null || gateValue.value == null) {
12
15
  logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
13
16
  return false;
@@ -20,6 +23,57 @@ var FeatureFlagService = class {
20
23
  };
21
24
  this.featureGates = featureGates;
22
25
  }
26
+ static getQueryParamFeatureGateOverrides(featureGate) {
27
+ const url = window.location?.href ?? "";
28
+ if (url.includes("?")) {
29
+ const urlObj = new URL(url);
30
+ const params = new URLSearchParams(urlObj.search);
31
+ const value = Object.fromEntries(params.entries())[featureGate];
32
+ if (value != null) return value === "true";
33
+ }
34
+ }
35
+ static getWindowFeatureGateOverrides(featureGate) {
36
+ if (typeof window === "undefined") return;
37
+ const windowOverride = window;
38
+ const value = (windowOverride?._envive?.featureOverrides ?? windowOverride?._spiffy?.featureOverrides)?.[String(featureGate)];
39
+ if (value != null) return value;
40
+ }
41
+ static getStoredFeatureGateOverrides(featureGate) {
42
+ if (typeof window === "undefined" || typeof window.localStorage === "undefined") return;
43
+ try {
44
+ const featureFlags = window.localStorage.getItem(FEATURE_FLAGS_STORAGE_KEY);
45
+ if (!featureFlags) return;
46
+ return JSON.parse(featureFlags)[featureGate];
47
+ } catch (err) {
48
+ logger_default.logError("[spiffy-ai] getStoredFeatureGateOverrides: error parsing feature flags", err);
49
+ return;
50
+ }
51
+ }
52
+ static getFeatureFlagOverride(featureGate) {
53
+ const queryOverride = FeatureFlagService.getQueryParamFeatureGateOverrides(featureGate);
54
+ if (queryOverride != null) {
55
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
56
+ return queryOverride;
57
+ }
58
+ const windowOverride = FeatureFlagService.getWindowFeatureGateOverrides(featureGate);
59
+ if (windowOverride != null) {
60
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
61
+ return windowOverride;
62
+ }
63
+ const storedOverride = FeatureFlagService.getStoredFeatureGateOverrides(featureGate);
64
+ if (storedOverride != null) {
65
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
66
+ return storedOverride;
67
+ }
68
+ }
69
+ static persistFeatureGateOverrides() {
70
+ if (typeof window === "undefined" || typeof window.localStorage === "undefined") return;
71
+ const overrides = Object.values(FeatureGates).map((featureGate) => [featureGate, FeatureFlagService.getFeatureFlagOverride(featureGate)]).filter(([, value]) => value !== void 0).reduce((acc, [key, value]) => ({
72
+ ...acc,
73
+ [key]: value
74
+ }), {});
75
+ window.localStorage.setItem(FEATURE_FLAGS_STORAGE_KEY, JSON.stringify(overrides));
76
+ }
23
77
  };
24
78
  const FeatureFlagServiceContext = createContext(void 0);
25
79
  const FeatureFlagServiceProvider = ({ featureFlagService: inputService, children }) => {
@@ -37,4 +91,4 @@ const useFeatureFlagService = () => {
37
91
 
38
92
  //#endregion
39
93
  export { FeatureFlagService, FeatureFlagServiceProvider, useFeatureFlagService };
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG4vLyBUaGlzIGlzIHRoZSBjbGFzcyB0aGF0IHdhcyBwcmV2aW91c2x5IGltcGxpY2l0bHkgdXNlZCBvciBkZWZpbmVkIGVsc2V3aGVyZVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnU2VydmljZSB7XG4gIHByaXZhdGUgZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXSkge1xuICAgIHRoaXMuZmVhdHVyZUdhdGVzID0gZmVhdHVyZUdhdGVzO1xuICB9XG5cbiAgaXNGZWF0dXJlR2F0ZUVuYWJsZWQgPSAoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGdhdGVWYWx1ZSA9IHRoaXMuZmVhdHVyZUdhdGVzLmZpbmQoZ2F0ZSA9PiBnYXRlLm5hbWUgPT09IGZlYXR1cmVHYXRlKTtcblxuICAgIC8vIFRPRE86IEFkZCBsb2dpYyBmb3Igb3ZlcnJpZGVzIChxdWVyeSBwYXJhbXMsIHdpbmRvdywgc3RvcmVkKSBpZiBuZWVkZWQsIHNpbWlsYXIgdG8gdGhlIG9sZCBGZWF0dXJlRmxhZ0NvbnRleHQudHN4XG4gICAgLy8gRm9yIG5vdywgZGlyZWN0IHZhbHVlIGZyb20gY29uZmlnIGlzIHVzZWQuXG5cbiAgICBpZiAoZ2F0ZVZhbHVlID09IG51bGwgfHwgZ2F0ZVZhbHVlLnZhbHVlID09IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IHZhbHVlIGlzIHVuZGVmaW5lZCAtIHJldHVybmluZyBmYWxzZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0ZVZhbHVlLnZhbHVlO1xuICB9O1xuXG4gIC8vIEVuc3VyZSB0aGF0IHN0YW5kYXJkIG92ZXJyaWRlcyB3b3JrIGFzIGV4cGVjdGVkXG4gIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQgPSAoKTogYm9vbGVhbiA9PlxuICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoRmVhdHVyZUdhdGVzLklzQ2xpZW50U2Vzc2lvbkVuYWJsZWQpO1xuXG4gIGdldEZlYXR1cmVGbGFncyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKS5tYXAoKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IFtcbiAgICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoZmVhdHVyZUdhdGUpLFxuICAgICAgXSksXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICAgIH0pLFxuICAgIFtpbnB1dFNlcnZpY2VdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZlYXR1cmVGbGFnU2VydmljZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLElBQWEscUJBQWIsTUFBZ0M7Q0FHOUIsWUFBWSxjQUFzQzsrQkFJMUIsZ0JBQXVDO0dBQzdELE1BQU0sWUFBWSxLQUFLLGFBQWEsTUFBSyxTQUFRLEtBQUssU0FBUyxZQUFZO0FBSzNFLE9BQUksYUFBYSxRQUFRLFVBQVUsU0FBUyxNQUFNO0FBQ2hELG1CQUFPLFNBQ0wsZ0RBQWdELFlBQVksdUNBQzdEO0FBQ0QsV0FBTzs7QUFFVCxVQUFPLFVBQVU7O3NDQUtqQixLQUFLLHFCQUFxQixhQUFhLHVCQUF1QjsrQkFFZjtBQUMvQyxVQUFPLE9BQU8sWUFDWixPQUFPLE9BQU8sYUFBYSxDQUFDLEtBQUssZ0JBQThCLENBQzdELGFBQ0EsS0FBSyxxQkFBcUIsWUFBWSxDQUN2QyxDQUFDLENBQ0g7O0FBNUJELE9BQUssZUFBZTs7O0FBb0N4QixNQUFNLDRCQUE0QixjQUFrRCxPQUFVO0FBTzlGLE1BQWFBLDhCQUF5RSxFQUNwRixvQkFBb0IsY0FDcEIsZUFDSTtDQUNKLE1BQU0sZUFBZSxlQUNaLEVBQ0wsb0JBQW9CLGNBQ3JCLEdBQ0QsQ0FBQyxhQUFhLENBQ2Y7QUFFRCxRQUNFLG9CQUFDLDBCQUEwQjtFQUFTLE9BQU87RUFDeEM7R0FDa0M7O0FBSXpDLE1BQWEsOEJBQThCO0NBQ3pDLE1BQU0sVUFBVSxXQUFXLDBCQUEwQjtBQUNyRCxLQUFJLFlBQVksT0FDZCxPQUFNLElBQUksTUFBTSx5RUFBeUU7QUFFM0YsUUFBTyJ9
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZID0gJ3NwaWZmeS1mZWF0dXJlLWZsYWdzJztcblxuLy8gVGhpcyBpcyB0aGUgY2xhc3MgdGhhdCB3YXMgcHJldmlvdXNseSBpbXBsaWNpdGx5IHVzZWQgb3IgZGVmaW5lZCBlbHNld2hlcmVcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICBwcml2YXRlIGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTtcblxuICBjb25zdHJ1Y3RvcihmZWF0dXJlR2F0ZXM6IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW10pIHtcbiAgICB0aGlzLmZlYXR1cmVHYXRlcyA9IGZlYXR1cmVHYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbiAgICBpZiAodXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsT2JqLnNlYXJjaCk7XG4gICAgICBjb25zdCBwYXJhbXNPYmogPSBPYmplY3QuZnJvbUVudHJpZXMocGFyYW1zLmVudHJpZXMoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc09ialtmZWF0dXJlR2F0ZV07XG5cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93T3ZlcnJpZGUgPSB3aW5kb3cgYXMgV2luZG93ICYge1xuICAgICAgX2Vudml2ZT86IHsgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IH07XG4gICAgICBfc3BpZmZ5PzogeyBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfTtcbiAgICB9O1xuICAgIGNvbnN0IGZlYXR1cmVPdmVycmlkZXMgPVxuICAgICAgd2luZG93T3ZlcnJpZGU/Ll9lbnZpdmU/LmZlYXR1cmVPdmVycmlkZXMgPz8gd2luZG93T3ZlcnJpZGU/Ll9zcGlmZnk/LmZlYXR1cmVPdmVycmlkZXM7XG4gICAgY29uc3QgdmFsdWUgPSBmZWF0dXJlT3ZlcnJpZGVzPy5bU3RyaW5nKGZlYXR1cmVHYXRlKV07XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIGlmICghZmVhdHVyZUZsYWdzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3NPYmogPSBKU09OLnBhcnNlKGZlYXR1cmVGbGFncykgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdzT2JqW2ZlYXR1cmVHYXRlXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgJ1tzcGlmZnktYWldIGdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzOiBlcnJvciBwYXJzaW5nIGZlYXR1cmUgZmxhZ3MnLFxuICAgICAgICBlcnIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcXVlcnlPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChxdWVyeU92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgVVJMIHBhcmFtLiBOZXcgdmFsdWU6ICR7cXVlcnlPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeU92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFdpbmRvd0ZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAod2luZG93T3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gb3ZlcnJpZGRlbiBieSB3aW5kb3cgcGFyYW0uIE5ldyB2YWx1ZTogJHt3aW5kb3dPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB3aW5kb3dPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZWRPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHN0b3JlZE92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgc3RvcmVkIHZhbHVlLiBOZXcgdmFsdWU6ICR7c3RvcmVkT3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RvcmVkT3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRmVhdHVyZUdhdGVFbmFibGVkID0gKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBnYXRlVmFsdWUgPSB0aGlzLmZlYXR1cmVHYXRlcy5maW5kKGdhdGUgPT4gZ2F0ZS5uYW1lID09PSBmZWF0dXJlR2F0ZSk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChmZWF0dXJlRmxhZ092ZXJyaWRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmZWF0dXJlRmxhZ092ZXJyaWRlO1xuICAgIH1cblxuICAgIGlmIChnYXRlVmFsdWUgPT0gbnVsbCB8fCBnYXRlVmFsdWUudmFsdWUgPT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gdmFsdWUgaXMgdW5kZWZpbmVkIC0gcmV0dXJuaW5nIGZhbHNlYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBnYXRlVmFsdWUudmFsdWU7XG4gIH07XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3RhbmRhcmQgb3ZlcnJpZGVzIHdvcmsgYXMgZXhwZWN0ZWRcbiAgaXNDbGllbnRTZXNzaW9uRW5hYmxlZCA9ICgpOiBib29sZWFuID0+XG4gICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChGZWF0dXJlR2F0ZXMuSXNDbGllbnRTZXNzaW9uRW5hYmxlZCk7XG5cbiAgZ2V0RmVhdHVyZUZsYWdzID0gKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpLm1hcCgoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gW1xuICAgICAgICBmZWF0dXJlR2F0ZSxcbiAgICAgICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChmZWF0dXJlR2F0ZSksXG4gICAgICBdKSxcbiAgICApO1xuICB9O1xuXG4gIHN0YXRpYyBwZXJzaXN0RmVhdHVyZUdhdGVPdmVycmlkZXMoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVycmlkZXMgPSBPYmplY3QudmFsdWVzKEZlYXR1cmVHYXRlcylcbiAgICAgIC5tYXAoXG4gICAgICAgIGZlYXR1cmVHYXRlID0+XG4gICAgICAgICAgW2ZlYXR1cmVHYXRlLCBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZSldIGFzIGNvbnN0LFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5hY2MsIFtrZXldOiB2YWx1ZSEgfSksIHt9KTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICAgIH0pLFxuICAgIFtpbnB1dFNlcnZpY2VdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZlYXR1cmVGbGFnU2VydmljZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEg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
@@ -9,12 +9,11 @@ const require_validateGraphQLOrgId = require('../../application/models/validator
9
9
  require('../../application/models/index.cjs');
10
10
  const require_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
11
11
  const require_getColorsAndFrontendQuery = require('../../application/models/graphql/queries/getColorsAndFrontendQuery.cjs');
12
- const require_types = require('../../packages/components-v3/dist/FloatingButton/types/types.cjs');
13
- require('../../packages/components-v3/dist/FloatingButton/index.cjs');
14
12
  const require_mockV3Config = require('./mockV3Config.cjs');
15
13
  let react = require("react");
16
14
  let jotai = require("jotai");
17
15
  let react_jsx_runtime = require("react/jsx-runtime");
16
+ let __envive_ai_react_toolkit_v3_FloatingButton = require("@envive-ai/react-toolkit-v3/FloatingButton");
18
17
 
19
18
  //#region src/contexts/graphqlContext/graphqlContext.tsx
20
19
  const GraphQLContext = (0, react.createContext)(null);
@@ -32,10 +31,10 @@ const DEFAULT_PAGE_VARIANTS = [{
32
31
  variantTests: [{ testType: require_contexts_types.PageVariantTestType.UrlResolver }]
33
32
  }];
34
33
  const mapPositionToCamelCase = (position) => {
35
- if (position === "bottom-left") return require_types.FloatingButtonLocation.BOTTOM_LEFT;
36
- if (position === "middle-left") return require_types.FloatingButtonLocation.MIDDLE_LEFT;
37
- if (position === "middle-right") return require_types.FloatingButtonLocation.MIDDLE_RIGHT;
38
- if (position === "bottom-right") return require_types.FloatingButtonLocation.BOTTOM_RIGHT;
34
+ if (position === "bottom-left") return __envive_ai_react_toolkit_v3_FloatingButton.FloatingButtonLocation.BOTTOM_LEFT;
35
+ if (position === "middle-left") return __envive_ai_react_toolkit_v3_FloatingButton.FloatingButtonLocation.MIDDLE_LEFT;
36
+ if (position === "middle-right") return __envive_ai_react_toolkit_v3_FloatingButton.FloatingButtonLocation.MIDDLE_RIGHT;
37
+ if (position === "bottom-right") return __envive_ai_react_toolkit_v3_FloatingButton.FloatingButtonLocation.BOTTOM_RIGHT;
39
38
  throw new Error(`Invalid position: ${position}`);
40
39
  };
41
40
  /**
@@ -127,8 +126,12 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
127
126
  try {
128
127
  const query = await require_getColorsAndFrontendQuery.getColorsAndFrontendQuery();
129
128
  if (!query) throw new Error("Colors and frontend config query is not defined");
130
- const v3RootConfig = (await executeQuery(query)).me.getProductsConfigByVersion?.v_three_config?.values;
129
+ const response = await executeQuery(query);
130
+ const v3RootConfig = response.me.getProductsConfigByVersion?.v_three_config?.values;
131
+ const frontendValues = response.me.getProductsConfigByVersion?.frontend?.values;
131
132
  const v3FrontendConfig = v3FrontendConfigCleanup(require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig));
133
+ const frontendMerchantOverrideCss = frontendValues?.merchant_override_css;
134
+ const merchantOverrideCss = v3FrontendConfig.uiConfigs?.merchantOverrideCss || frontendMerchantOverrideCss;
132
135
  const v3MountingConfigs = (require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig?.mounting_configs) ?? []).reduce((acc, { key, config }) => {
133
136
  acc[key] = require_validateGraphQLFrontendConfig.validateAndTransformMountingConfig(config, key);
134
137
  return acc;
@@ -140,8 +143,9 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
140
143
  }]));
141
144
  const v3pageVariants = Array.isArray(v3RootConfig?.page_variants) ? v3RootConfig?.page_variants.map(require_validateGraphQLFrontendConfig.validateAndTransformPageVariants) : DEFAULT_PAGE_VARIANTS;
142
145
  const v3ColorsConfig = require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig?.colors?.values);
143
- if (!v3RootConfig && mockV3ConfigToDeprecatedConfig) {
144
- const isSemanticColors = !window.location.href.includes("globals=merchant");
146
+ const isSemanticColors = !window.location.href.includes("globals=merchant");
147
+ const isStorybook = window.top?.location.href.includes("?path=");
148
+ if (!v3RootConfig && mockV3ConfigToDeprecatedConfig || isStorybook && isSemanticColors) {
145
149
  require_logger.default.logInfo("GraphQLContext | Returning mock v3 config", {
146
150
  colorsConfig: require_mockV3Config.mockV3ColorsConfig,
147
151
  frontendConfig: require_mockV3Config.mockV3FrontendConfig
@@ -169,6 +173,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
169
173
  colorsConfig: v3ColorsConfig,
170
174
  frontendConfig: {
171
175
  ...v3FrontendConfig,
176
+ merchantOverrideCss,
172
177
  widgetConfigs: v3WidgetConfigs
173
178
  },
174
179
  orgPageConfig: {
@@ -253,4 +258,4 @@ const useGraphQLClient = () => {
253
258
  //#endregion
254
259
  exports.GraphQLProvider = GraphQLProvider;
255
260
  exports.useGraphQLClient = useGraphQLClient;
256
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuY2pzIiwibmFtZXMiOlsiREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwiUGFnZVZhcmlhbnRUZXN0VHlwZSIsIkZsb2F0aW5nQnV0dG9uTG9jYXRpb24iLCJvcmdMZXZlbEFwaUtleUF0b20iLCJiYXNlVXJsQXRvbSIsInZhbGlkYXRlR3JhcGhRTE9yZ0lkIiwiZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5IiwiZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSIsInRyYW5zZm9ybVNuYWtlVG9DYW1lbCIsInZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWciLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsInZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzIiwibW9ja1YzQ29sb3JzQ29uZmlnIiwibW9ja1YzRnJvbnRlbmRDb25maWciLCJDb25maWdWZXJzaW9uRW51bSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuXG4gICAgICBjb25zdCB2M0Zyb250ZW5kQ29uZmlnID0gdjNGcm9udGVuZENvbmZpZ0NsZWFudXAoXG4gICAgICAgIHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWcpIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHYzTW91bnRpbmdDb25maWdzQXJyYXkgPSAodHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8ubW91bnRpbmdfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgeyBrZXk6IHN0cmluZzsgY29uZmlnOiBXaWRnZXRNb3VudGluZ0NvbmZpZyB9W107XG5cbiAgICAgIGNvbnN0IHYzTW91bnRpbmdDb25maWdzID0gdjNNb3VudGluZ0NvbmZpZ3NBcnJheS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHsga2V5LCBjb25maWcgfSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyhjb25maWcsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdjN3aWRnZXRDb25maWdzQXJyYXkgPSAodHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8ud2lkZ2V0X2NvbmZpZ3MpID8/XG4gICAgICAgIFtdKSBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZ1YzW107XG4gICAgICBjb25zdCB2M1dpZGdldENvbmZpZ3MgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHYzd2lkZ2V0Q29uZmlnc0FycmF5Py5tYXAoKHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfTogV2lkZ2V0Q29uZmlnVjMpID0+IFtcbiAgICAgICAgICB3aWRnZXRDb25maWdJZCxcbiAgICAgICAgICB7IHdpZGdldENvbmZpZ0lkLCAuLi5yZXN0IH0gYXMgV2lkZ2V0Q29uZmlnVjMsXG4gICAgICAgIF0pLFxuICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRDb25maWdWMz47XG4gICAgICBjb25zdCB2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSA9IEFycmF5LmlzQXJyYXkodjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzKVxuICAgICAgICA/IHYzUm9vdENvbmZpZz8ucGFnZV92YXJpYW50cy5tYXAodmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHMpXG4gICAgICAgIDogREVGQVVMVF9QQUdFX1ZBUklBTlRTO1xuXG4gICAgICBjb25zdCB2M0NvbG9yc0NvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWc/LmNvbG9ycz8udmFsdWVzKTtcbiAgICAgIC8vIElmIHRoZSB2MyByb290IGNvbmZpZyBpcyBub3QgZm91bmQgYW5kIHdlIGFyZSBjb25maWd1cmVkIHRvIHJldHVybiB0aGUgZGVwcmVjYXRlZCBjb25maWcsIHdlIHdpbGwgcmV0dXJuIHRoZSBtb2NrZWQgY29uZmlnXG4gICAgICBpZiAoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHtcbiAgICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIC8vIE5lZWQgdG8gcmVwbGFjZSB0aGUgYXV0b21hdGljIHdpZGdldCBjb25maWdzIHdpdGggdGhlIG9iamVjdCBiYXNlZCBvbmVzXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICBvcmdQYWdlQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVZhcmlhbnRzOiB2M3BhZ2VWYXJpYW50cyxcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgICAgbW91bnRpbmdDb25maWdzOiB2M01vdW50aW5nQ29uZmlncyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVE9ETzogQWRkIHdpZGdldHMgYW5kIG90aGVyIGNvbmZpZyBoZXJlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciBmZXRjaGluZyBncmFwaHFsIGNvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnJywgZXJyKTtcbiAgICAgIHJldHVybiB7IGNvbG9yc0NvbmZpZzogdW5kZWZpbmVkLCBmcm9udGVuZENvbmZpZzogdW5kZWZpbmVkIH07XG4gICAgfVxuICB9LCBbZXhlY3V0ZVF1ZXJ5LCBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWddKTtcblxuICBjb25zdCBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LnZlcnNpb24gIT09IENvbmZpZ1ZlcnNpb25FbnVtLlYzICYmXG4gICAgICAgICFtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb2xvcnNDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uY29sb3JzPy52YWx1ZXM7XG4gICAgICAgIGNvbnN0IGZyb250ZW5kQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmZyb250ZW5kPy52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29sb3JzQ29uZmlnKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRGcm9udGVuZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChmcm9udGVuZENvbmZpZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiB0cmFuc2Zvcm1lZENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1Jlc3BvbnNlLFxuICAgICAgICAgIGZyb250ZW5kQ29uZmlnOiB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBSRU1PVkUgTU9DS0VEIENPTkZJRyBPTkNFIFdFIEhBVkUgVEhFIE5FVyBDT05GSUcgSU1QTEVNRU5URUQgT04gQkFDS0VORFxuICAgICAgY29uc3QgbWVyY2hhbnRDb2xvcnNDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uY29sb3JzPy52YWx1ZXM7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZE1lcmNoYW50Q29sb3JDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwobWVyY2hhbnRDb2xvcnNDb25maWcpO1xuXG4gICAgICBjb25zdCBpc1NlbWFudGljQ29sb3JzID0gIXdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdnbG9iYWxzPW1lcmNoYW50Jyk7XG5cbiAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IG1vY2tWM0NvbG9yc0NvbmZpZztcbiAgICAgIGNvbnN0IGZyb250ZW5kQ29uZmlnID0gbW9ja1YzRnJvbnRlbmRDb25maWc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgID8gKGNvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKVxuICAgICAgICAgIDogKHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IGZyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRDb25maWcgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPiA9PiB7XG4gICAgaWYgKHJlcXVlc3RWM0NvbmZpZykge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyB2MyBjb25maWcnLCByZXF1ZXN0VjNDb25maWcpO1xuICAgICAgcmV0dXJuIGdldFYzQ29uZmlnKCk7XG4gICAgfVxuICAgIExvZ2dlci5sb2dJbmZvKCdHcmFwaFFMQ29udGV4dCB8IEdldHRpbmcgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCByZXF1ZXN0VjNDb25maWcpO1xuICAgIHJldHVybiBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZygpO1xuICB9LCBbZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCByZXF1ZXN0VjNDb25maWddKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGV4ZWN1dGVRdWVyeSxcbiAgICAgIGdldE9yZ0lkLFxuICAgICAgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsXG4gICAgICBnZXRWM0NvbmZpZyxcbiAgICAgIGdldENvbmZpZyxcbiAgICAgIGlzUmVhZHksXG4gICAgfSksXG4gICAgW2V4ZWN1dGVRdWVyeSwgZ2V0T3JnSWQsIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnLCBnZXRWM0NvbmZpZywgZ2V0Q29uZmlnLCBpc1JlYWR5XSxcbiAgKTtcblxuICByZXR1cm4gPEdyYXBoUUxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvR3JhcGhRTENvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUdyYXBoUUxDbGllbnQgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdyYXBoUUxDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VHcmFwaFFMQ2xpZW50IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBHcmFwaFFMUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0EsTUFBTSwwQ0FBMkQsS0FBSztBQVF0RSxNQUFNQSx3QkFBNkMsQ0FDakQ7Q0FDRSxXQUFXO0NBQ1gsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQixnQkFBZ0IsRUFBRTtDQUNsQixjQUFjLENBQ1osRUFDRSxVQUFVQywyQ0FBb0IsYUFDL0IsQ0FDRjtDQUNGLEVBQ0Q7Q0FDRSxXQUFXO0NBQ1gsYUFBYTtDQUNiLG9CQUFvQjtDQUNwQixnQkFBZ0IsRUFBRTtDQUNsQixjQUFjLENBQ1osRUFDRSxVQUFVQSwyQ0FBb0IsYUFDL0IsQ0FDRjtDQUNGLENBQ0Y7QUFFRCxNQUFN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
261
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuY2pzIiwibmFtZXMiOlsiREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwiUGFnZVZhcmlhbnRUZXN0VHlwZSIsIkZsb2F0aW5nQnV0dG9uTG9jYXRpb24iLCJvcmdMZXZlbEFwaUtleUF0b20iLCJiYXNlVXJsQXRvbSIsInZhbGlkYXRlR3JhcGhRTE9yZ0lkIiwiZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5IiwiZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSIsInRyYW5zZm9ybVNuYWtlVG9DYW1lbCIsInZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWciLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsInZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzIiwibW9ja1YzQ29sb3JzQ29uZmlnIiwibW9ja1YzRnJvbnRlbmRDb25maWciLCJDb25maWdWZXJzaW9uRW51bSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuICAgICAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICAgICAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgICAgICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnKSBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGZyb20gZnJvbnRlbmQudmFsdWVzIGlmIHYzUm9vdENvbmZpZyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmcm9udGVuZE1lcmNoYW50T3ZlcnJpZGVDc3MgPSBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuICAgICAgY29uc3QgdjNNZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNGcm9udGVuZENvbmZpZy51aUNvbmZpZ3M/Lm1lcmNoYW50T3ZlcnJpZGVDc3M7XG4gICAgICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNNZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kTWVyY2hhbnRPdmVycmlkZUNzcztcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgY29uc3QgaXNTdG9yeWJvb2sgPSB3aW5kb3cudG9wPy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/cGF0aD0nKTtcblxuICAgICAgLy8gSWYgdGhlIHYzIHJvb3QgY29uZmlnIGlzIG5vdCBmb3VuZCBhbmQgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBkZXByZWNhdGVkIGNvbmZpZywgd2Ugd2lsbCByZXR1cm4gdGhlIG1vY2tlZCBjb25maWdcbiAgICAgIGlmICgoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHx8IChpc1N0b3J5Ym9vayAmJiBpc1NlbWFudGljQ29sb3JzKSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIG1lcmNoYW50T3ZlcnJpZGVDc3MsXG4gICAgICAgICAgLy8gTmVlZCB0byByZXBsYWNlIHRoZSBhdXRvbWF0aWMgd2lkZ2V0IGNvbmZpZ3Mgd2l0aCB0aGUgb2JqZWN0IGJhc2VkIG9uZXNcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPOiBBZGQgd2lkZ2V0cyBhbmQgb3RoZXIgY29uZmlnIGhlcmVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnksIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ10pO1xuXG4gIGNvbnN0IGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IGdldENvbG9yc0FuZEZyb250ZW5kUXVlcnkoKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZyBxdWVyeSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkocXVlcnkpO1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8udmVyc2lvbiAhPT0gQ29uZmlnVmVyc2lvbkVudW0uVjMgJiZcbiAgICAgICAgIW1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb2xvcnNDb25maWcpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGZyb250ZW5kQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcnNDb25maWc6IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdSZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJFTU9WRSBNT0NLRUQgQ09ORklHIE9OQ0UgV0UgSEFWRSBUSEUgTkVXIENPTkZJRyBJTVBMRU1FTlRFRCBPTiBCQUNLRU5EXG4gICAgICBjb25zdCBtZXJjaGFudENvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChtZXJjaGFudENvbG9yc0NvbmZpZyk7XG5cbiAgICAgIGNvbnN0IGlzU2VtYW50aWNDb2xvcnMgPSAhd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2dsb2JhbHM9bWVyY2hhbnQnKTtcblxuICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSBtb2NrVjNGcm9udGVuZENvbmZpZztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiBpc1NlbWFudGljQ29sb3JzXG4gICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgOiAodHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeV0pO1xuXG4gIGNvbnN0IGdldENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICBpZiAocmVxdWVzdFYzQ29uZmlnKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBHZXR0aW5nIHYzIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgcmV0dXJuIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnKCk7XG4gIH0sIFtnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZywgZ2V0VjNDb25maWcsIHJlcXVlc3RWM0NvbmZpZ10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZXhlY3V0ZVF1ZXJ5LFxuICAgICAgZ2V0T3JnSWQsXG4gICAgICBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyxcbiAgICAgIGdldFYzQ29uZmlnLFxuICAgICAgZ2V0Q29uZmlnLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbZXhlY3V0ZVF1ZXJ5LCBnZXRPcmdJZCwgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCBnZXRDb25maWcsIGlzUmVhZHldLFxuICApO1xuXG4gIHJldHVybiA8R3JhcGhRTENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9HcmFwaFFMQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JhcGhRTENsaWVudCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR3JhcGhRTENvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUdyYXBoUUxDbGllbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEdyYXBoUUxQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLE1BQU0sMENBQTJELEtBQUs7QUFRdEUsTUFBTUEsd0JBQTZDLENBQ2pEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUNaLEVBQ0UsVUFBVUMsMkNBQW9CLGFBQy9CLENBQ0Y7Q0FDRixFQUNEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixvQkFBb0I7Q0FDcEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUNaLEVBQ0UsVUFBVUEsMkNBQW9CLGFBQy9CLENBQ0Y7Q0FDRixDQUNGO0FBRUQsTUFBTSwwQkFBMEIsYUFBNkM7QUFDM0UsS0FBSSxhQUFhLGNBQ2YsUUFBT0MsbUVBQXVCO0FBRWhDLEtBQUksYUFBYSxjQUNmLFFBQU9BLG1FQUF1QjtBQUVoQyxLQUFJLGFBQWEsZUFDZixRQUFPQSxtRUFBdUI7QUFFaEMsS0FBSSxhQUFhLGVBQ2YsUUFBT0EsbUVBQXVCO0FBRWhDLE9BQU0sSUFBSSxNQUFNLHFCQUFxQixXQUFXOzs7OztBQU1sRCxNQUFNLDJCQUNKLGlCQUM2QjtDQUM3QixNQUFNLEVBQUUsY0FBYztBQUN0QixLQUFJLENBQUMsVUFDSCxRQUFPO0NBRVQsTUFBTSxFQUFFLGdCQUFnQixnQkFBZ0I7QUFDeEMsS0FBSSxDQUFDLGtCQUFrQixDQUFDLFlBQ3RC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
@@ -8,12 +8,11 @@ import { validateGraphQLOrgId } from "../../application/models/validators/valida
8
8
  import "../../application/models/index.js";
9
9
  import { baseUrlAtom, orgLevelApiKeyAtom } from "../../atoms/envive/enviveConfig.js";
10
10
  import { getColorsAndFrontendQuery } from "../../application/models/graphql/queries/getColorsAndFrontendQuery.js";
11
- import { FloatingButtonLocation } from "../../packages/components-v3/dist/FloatingButton/types/types.js";
12
- import "../../packages/components-v3/dist/FloatingButton/index.js";
13
11
  import { mockV3ColorsConfig, mockV3FrontendConfig } from "./mockV3Config.js";
14
12
  import { createContext, useCallback, useContext, useMemo } from "react";
15
13
  import { useAtomValue } from "jotai";
16
14
  import { jsx } from "react/jsx-runtime";
15
+ import { FloatingButtonLocation } from "@envive-ai/react-toolkit-v3/FloatingButton";
17
16
 
18
17
  //#region src/contexts/graphqlContext/graphqlContext.tsx
19
18
  const GraphQLContext = createContext(null);
@@ -126,8 +125,12 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
126
125
  try {
127
126
  const query = await getColorsAndFrontendQuery();
128
127
  if (!query) throw new Error("Colors and frontend config query is not defined");
129
- const v3RootConfig = (await executeQuery(query)).me.getProductsConfigByVersion?.v_three_config?.values;
128
+ const response = await executeQuery(query);
129
+ const v3RootConfig = response.me.getProductsConfigByVersion?.v_three_config?.values;
130
+ const frontendValues = response.me.getProductsConfigByVersion?.frontend?.values;
130
131
  const v3FrontendConfig = v3FrontendConfigCleanup(transformSnakeToCamel(v3RootConfig));
132
+ const frontendMerchantOverrideCss = frontendValues?.merchant_override_css;
133
+ const merchantOverrideCss = v3FrontendConfig.uiConfigs?.merchantOverrideCss || frontendMerchantOverrideCss;
131
134
  const v3MountingConfigs = (transformSnakeToCamel(v3RootConfig?.mounting_configs) ?? []).reduce((acc, { key, config }) => {
132
135
  acc[key] = validateAndTransformMountingConfig(config, key);
133
136
  return acc;
@@ -139,8 +142,9 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
139
142
  }]));
140
143
  const v3pageVariants = Array.isArray(v3RootConfig?.page_variants) ? v3RootConfig?.page_variants.map(validateAndTransformPageVariants) : DEFAULT_PAGE_VARIANTS;
141
144
  const v3ColorsConfig = transformSnakeToCamel(v3RootConfig?.colors?.values);
142
- if (!v3RootConfig && mockV3ConfigToDeprecatedConfig) {
143
- const isSemanticColors = !window.location.href.includes("globals=merchant");
145
+ const isSemanticColors = !window.location.href.includes("globals=merchant");
146
+ const isStorybook = window.top?.location.href.includes("?path=");
147
+ if (!v3RootConfig && mockV3ConfigToDeprecatedConfig || isStorybook && isSemanticColors) {
144
148
  logger_default.logInfo("GraphQLContext | Returning mock v3 config", {
145
149
  colorsConfig: mockV3ColorsConfig,
146
150
  frontendConfig: mockV3FrontendConfig
@@ -168,6 +172,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
168
172
  colorsConfig: v3ColorsConfig,
169
173
  frontendConfig: {
170
174
  ...v3FrontendConfig,
175
+ merchantOverrideCss,
171
176
  widgetConfigs: v3WidgetConfigs
172
177
  },
173
178
  orgPageConfig: {
@@ -251,4 +256,4 @@ const useGraphQLClient = () => {
251
256
 
252
257
  //#endregion
253
258
  export { GraphQLProvider, useGraphQLClient };
254
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1BBR0VfVkFSSUFOVFM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuXG4gICAgICBjb25zdCB2M0Zyb250ZW5kQ29uZmlnID0gdjNGcm9udGVuZENvbmZpZ0NsZWFudXAoXG4gICAgICAgIHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWcpIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHYzTW91bnRpbmdDb25maWdzQXJyYXkgPSAodHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8ubW91bnRpbmdfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgeyBrZXk6IHN0cmluZzsgY29uZmlnOiBXaWRnZXRNb3VudGluZ0NvbmZpZyB9W107XG5cbiAgICAgIGNvbnN0IHYzTW91bnRpbmdDb25maWdzID0gdjNNb3VudGluZ0NvbmZpZ3NBcnJheS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHsga2V5LCBjb25maWcgfSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyhjb25maWcsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdjN3aWRnZXRDb25maWdzQXJyYXkgPSAodHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8ud2lkZ2V0X2NvbmZpZ3MpID8/XG4gICAgICAgIFtdKSBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZ1YzW107XG4gICAgICBjb25zdCB2M1dpZGdldENvbmZpZ3MgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHYzd2lkZ2V0Q29uZmlnc0FycmF5Py5tYXAoKHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfTogV2lkZ2V0Q29uZmlnVjMpID0+IFtcbiAgICAgICAgICB3aWRnZXRDb25maWdJZCxcbiAgICAgICAgICB7IHdpZGdldENvbmZpZ0lkLCAuLi5yZXN0IH0gYXMgV2lkZ2V0Q29uZmlnVjMsXG4gICAgICAgIF0pLFxuICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRDb25maWdWMz47XG4gICAgICBjb25zdCB2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSA9IEFycmF5LmlzQXJyYXkodjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzKVxuICAgICAgICA/IHYzUm9vdENvbmZpZz8ucGFnZV92YXJpYW50cy5tYXAodmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHMpXG4gICAgICAgIDogREVGQVVMVF9QQUdFX1ZBUklBTlRTO1xuXG4gICAgICBjb25zdCB2M0NvbG9yc0NvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWc/LmNvbG9ycz8udmFsdWVzKTtcbiAgICAgIC8vIElmIHRoZSB2MyByb290IGNvbmZpZyBpcyBub3QgZm91bmQgYW5kIHdlIGFyZSBjb25maWd1cmVkIHRvIHJldHVybiB0aGUgZGVwcmVjYXRlZCBjb25maWcsIHdlIHdpbGwgcmV0dXJuIHRoZSBtb2NrZWQgY29uZmlnXG4gICAgICBpZiAoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHtcbiAgICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIC8vIE5lZWQgdG8gcmVwbGFjZSB0aGUgYXV0b21hdGljIHdpZGdldCBjb25maWdzIHdpdGggdGhlIG9iamVjdCBiYXNlZCBvbmVzXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICBvcmdQYWdlQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVZhcmlhbnRzOiB2M3BhZ2VWYXJpYW50cyxcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgICAgbW91bnRpbmdDb25maWdzOiB2M01vdW50aW5nQ29uZmlncyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVE9ETzogQWRkIHdpZGdldHMgYW5kIG90aGVyIGNvbmZpZyBoZXJlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciBmZXRjaGluZyBncmFwaHFsIGNvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnJywgZXJyKTtcbiAgICAgIHJldHVybiB7IGNvbG9yc0NvbmZpZzogdW5kZWZpbmVkLCBmcm9udGVuZENvbmZpZzogdW5kZWZpbmVkIH07XG4gICAgfVxuICB9LCBbZXhlY3V0ZVF1ZXJ5LCBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWddKTtcblxuICBjb25zdCBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LnZlcnNpb24gIT09IENvbmZpZ1ZlcnNpb25FbnVtLlYzICYmXG4gICAgICAgICFtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb2xvcnNDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uY29sb3JzPy52YWx1ZXM7XG4gICAgICAgIGNvbnN0IGZyb250ZW5kQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmZyb250ZW5kPy52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29sb3JzQ29uZmlnKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRGcm9udGVuZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChmcm9udGVuZENvbmZpZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiB0cmFuc2Zvcm1lZENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1Jlc3BvbnNlLFxuICAgICAgICAgIGZyb250ZW5kQ29uZmlnOiB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBSRU1PVkUgTU9DS0VEIENPTkZJRyBPTkNFIFdFIEhBVkUgVEhFIE5FVyBDT05GSUcgSU1QTEVNRU5URUQgT04gQkFDS0VORFxuICAgICAgY29uc3QgbWVyY2hhbnRDb2xvcnNDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uY29sb3JzPy52YWx1ZXM7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZE1lcmNoYW50Q29sb3JDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwobWVyY2hhbnRDb2xvcnNDb25maWcpO1xuXG4gICAgICBjb25zdCBpc1NlbWFudGljQ29sb3JzID0gIXdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdnbG9iYWxzPW1lcmNoYW50Jyk7XG5cbiAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IG1vY2tWM0NvbG9yc0NvbmZpZztcbiAgICAgIGNvbnN0IGZyb250ZW5kQ29uZmlnID0gbW9ja1YzRnJvbnRlbmRDb25maWc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgID8gKGNvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKVxuICAgICAgICAgIDogKHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IGZyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRDb25maWcgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPiA9PiB7XG4gICAgaWYgKHJlcXVlc3RWM0NvbmZpZykge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyB2MyBjb25maWcnLCByZXF1ZXN0VjNDb25maWcpO1xuICAgICAgcmV0dXJuIGdldFYzQ29uZmlnKCk7XG4gICAgfVxuICAgIExvZ2dlci5sb2dJbmZvKCdHcmFwaFFMQ29udGV4dCB8IEdldHRpbmcgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCByZXF1ZXN0VjNDb25maWcpO1xuICAgIHJldHVybiBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZygpO1xuICB9LCBbZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCByZXF1ZXN0VjNDb25maWddKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGV4ZWN1dGVRdWVyeSxcbiAgICAgIGdldE9yZ0lkLFxuICAgICAgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsXG4gICAgICBnZXRWM0NvbmZpZyxcbiAgICAgIGdldENvbmZpZyxcbiAgICAgIGlzUmVhZHksXG4gICAgfSksXG4gICAgW2V4ZWN1dGVRdWVyeSwgZ2V0T3JnSWQsIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnLCBnZXRWM0NvbmZpZywgZ2V0Q29uZmlnLCBpc1JlYWR5XSxcbiAgKTtcblxuICByZXR1cm4gPEdyYXBoUUxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvR3JhcGhRTENvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUdyYXBoUUxDbGllbnQgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdyYXBoUUxDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VHcmFwaFFMQ2xpZW50IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBHcmFwaFFMUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxNQUFNLGlCQUFpQixjQUEwQyxLQUFLO0FBUXRFLE1BQU1BLHdCQUE2QyxDQUNqRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVUsb0JBQW9CLGFBQy9CLENBQ0Y7Q0FDRixFQUNEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixvQkFBb0I7Q0FDcEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUNaLEVBQ0UsVUFBVSxvQkFBb0IsYUFDL0IsQ0FDRjtDQUNGLENBQ0Y7QUFFRCxNQUFNLDBCQUEwQixhQUE2QztBQUMzRSxLQUFJLGFBQWEsY0FDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsY0FDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsZUFDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsZUFDZixRQUFPLHVCQUF1QjtBQUVoQyxPQUFNLElBQUksTUFBTSxxQkFBcUIsV0FBVzs7Ozs7QUFNbEQsTUFBTSwyQkFDSixpQkFDNkI7Q0FDN0IsTUFBTSxFQUFFLGNBQWM7QUFDdEIsS0FBSSxDQUFDLFVBQ0gsUUFBTztDQUVULE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUN0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
259
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1BBR0VfVkFSSUFOVFM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuICAgICAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICAgICAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgICAgICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnKSBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGZyb20gZnJvbnRlbmQudmFsdWVzIGlmIHYzUm9vdENvbmZpZyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmcm9udGVuZE1lcmNoYW50T3ZlcnJpZGVDc3MgPSBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuICAgICAgY29uc3QgdjNNZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNGcm9udGVuZENvbmZpZy51aUNvbmZpZ3M/Lm1lcmNoYW50T3ZlcnJpZGVDc3M7XG4gICAgICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNNZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kTWVyY2hhbnRPdmVycmlkZUNzcztcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgY29uc3QgaXNTdG9yeWJvb2sgPSB3aW5kb3cudG9wPy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/cGF0aD0nKTtcblxuICAgICAgLy8gSWYgdGhlIHYzIHJvb3QgY29uZmlnIGlzIG5vdCBmb3VuZCBhbmQgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBkZXByZWNhdGVkIGNvbmZpZywgd2Ugd2lsbCByZXR1cm4gdGhlIG1vY2tlZCBjb25maWdcbiAgICAgIGlmICgoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHx8IChpc1N0b3J5Ym9vayAmJiBpc1NlbWFudGljQ29sb3JzKSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIG1lcmNoYW50T3ZlcnJpZGVDc3MsXG4gICAgICAgICAgLy8gTmVlZCB0byByZXBsYWNlIHRoZSBhdXRvbWF0aWMgd2lkZ2V0IGNvbmZpZ3Mgd2l0aCB0aGUgb2JqZWN0IGJhc2VkIG9uZXNcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPOiBBZGQgd2lkZ2V0cyBhbmQgb3RoZXIgY29uZmlnIGhlcmVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnksIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ10pO1xuXG4gIGNvbnN0IGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IGdldENvbG9yc0FuZEZyb250ZW5kUXVlcnkoKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZyBxdWVyeSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkocXVlcnkpO1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8udmVyc2lvbiAhPT0gQ29uZmlnVmVyc2lvbkVudW0uVjMgJiZcbiAgICAgICAgIW1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb2xvcnNDb25maWcpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGZyb250ZW5kQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcnNDb25maWc6IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdSZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJFTU9WRSBNT0NLRUQgQ09ORklHIE9OQ0UgV0UgSEFWRSBUSEUgTkVXIENPTkZJRyBJTVBMRU1FTlRFRCBPTiBCQUNLRU5EXG4gICAgICBjb25zdCBtZXJjaGFudENvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChtZXJjaGFudENvbG9yc0NvbmZpZyk7XG5cbiAgICAgIGNvbnN0IGlzU2VtYW50aWNDb2xvcnMgPSAhd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2dsb2JhbHM9bWVyY2hhbnQnKTtcblxuICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSBtb2NrVjNGcm9udGVuZENvbmZpZztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiBpc1NlbWFudGljQ29sb3JzXG4gICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgOiAodHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeV0pO1xuXG4gIGNvbnN0IGdldENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICBpZiAocmVxdWVzdFYzQ29uZmlnKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBHZXR0aW5nIHYzIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgcmV0dXJuIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnKCk7XG4gIH0sIFtnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZywgZ2V0VjNDb25maWcsIHJlcXVlc3RWM0NvbmZpZ10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZXhlY3V0ZVF1ZXJ5LFxuICAgICAgZ2V0T3JnSWQsXG4gICAgICBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyxcbiAgICAgIGdldFYzQ29uZmlnLFxuICAgICAgZ2V0Q29uZmlnLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbZXhlY3V0ZVF1ZXJ5LCBnZXRPcmdJZCwgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCBnZXRDb25maWcsIGlzUmVhZHldLFxuICApO1xuXG4gIHJldHVybiA8R3JhcGhRTENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9HcmFwaFFMQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JhcGhRTENsaWVudCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR3JhcGhRTENvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUdyYXBoUUxDbGllbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEdyYXBoUUxQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0Es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