@envive-ai/react-hooks 0.1.5 → 0.1.6

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 (491) hide show
  1. package/dist/amplitudeContext-CHzas7Cf.d.cts +52 -0
  2. package/dist/amplitudeContext-D-7fmVh1.cjs +356 -0
  3. package/dist/amplitudeContext-hY3caPC6.js +322 -0
  4. package/dist/amplitudeContext-tJ4y-SzX.d.ts +52 -0
  5. package/dist/api-DjeZXxl_.js +207 -0
  6. package/dist/api-_JaUnIUj.cjs +292 -0
  7. package/dist/app-CjsQ2_n-.js +132 -0
  8. package/dist/app-CnKRZ9RW.cjs +178 -0
  9. package/dist/application/models/graphql/index.cjs +3 -12
  10. package/dist/application/models/graphql/index.d.cts +1 -1
  11. package/dist/application/models/graphql/index.d.ts +1 -1
  12. package/dist/application/models/graphql/index.js +1 -10
  13. package/dist/application/models/guards/api/index.cjs +1 -2
  14. package/dist/application/models/guards/api/index.d.cts +2 -2
  15. package/dist/application/models/guards/api/index.d.ts +2 -2
  16. package/dist/application/models/guards/api/index.js +1 -2
  17. package/dist/application/models/index.cjs +48 -54
  18. package/dist/application/models/index.d.cts +7 -9
  19. package/dist/application/models/index.d.ts +7 -9
  20. package/dist/application/models/index.js +7 -11
  21. package/dist/application/models/utilityTypes/index.cjs +1 -1
  22. package/dist/application/models/utilityTypes/index.d.cts +1 -1
  23. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  24. package/dist/application/models/utilityTypes/index.js +1 -1
  25. package/dist/application/models/variantInfo/index.cjs +1 -1
  26. package/dist/application/models/variantInfo/index.d.cts +1 -1
  27. package/dist/application/models/variantInfo/index.d.ts +1 -1
  28. package/dist/application/models/variantInfo/index.js +1 -1
  29. package/dist/application/utils/index.cjs +40 -37
  30. package/dist/application/utils/index.d.cts +18 -14
  31. package/dist/application/utils/index.d.ts +19 -15
  32. package/dist/application/utils/index.js +13 -10
  33. package/dist/{atomStore-JwGb7pcy.cjs → atomStore-B4jIaDPd.cjs} +1 -1
  34. package/dist/{atomStore-B1cgmbP0.js → atomStore-D8pjE1vL.js} +1 -1
  35. package/dist/atoms/app/index.cjs +14 -16
  36. package/dist/atoms/app/index.d.cts +20 -19
  37. package/dist/atoms/app/index.d.ts +20 -19
  38. package/dist/atoms/app/index.js +10 -11
  39. package/dist/atoms/atomStore/index.cjs +2 -1
  40. package/dist/atoms/atomStore/index.d.cts +24 -2
  41. package/dist/atoms/atomStore/index.d.ts +24 -2
  42. package/dist/atoms/atomStore/index.js +2 -1
  43. package/dist/atoms/chat/index.cjs +44 -40
  44. package/dist/atoms/chat/index.d.cts +35 -36
  45. package/dist/atoms/chat/index.d.ts +35 -36
  46. package/dist/atoms/chat/index.js +14 -10
  47. package/dist/atoms/globalSearch/index.cjs +1 -1
  48. package/dist/atoms/globalSearch/index.d.cts +5 -5
  49. package/dist/atoms/globalSearch/index.d.ts +6 -6
  50. package/dist/atoms/globalSearch/index.js +1 -1
  51. package/dist/atoms/org/index.cjs +26 -38
  52. package/dist/atoms/org/index.d.cts +35 -48
  53. package/dist/atoms/org/index.d.ts +35 -48
  54. package/dist/atoms/org/index.js +11 -11
  55. package/dist/atoms/search/index.cjs +47 -41
  56. package/dist/atoms/search/index.d.cts +7 -9
  57. package/dist/atoms/search/index.d.ts +7 -9
  58. package/dist/atoms/search/index.js +16 -10
  59. package/dist/bandolier-DYEz4-8C.js +1229 -0
  60. package/dist/bandolier-o_-xrbOV.cjs +1229 -0
  61. package/dist/carpe-CsG5jCcl.cjs +607 -0
  62. package/dist/carpe-DONk00bZ.js +605 -0
  63. package/dist/cdnUtils-32v8bDX9.cjs +16 -0
  64. package/dist/cdnUtils-E4tLBt2g.js +11 -0
  65. package/dist/{chat-_NzpO_Hn.cjs → chat-BubCW1as.cjs} +1 -1
  66. package/dist/chat-CO7cRkaq.cjs +506 -0
  67. package/dist/{chat-CHmD79E1.js → chat-CV6MXeID.js} +1 -1
  68. package/dist/chat-hcRc4RRd.js +285 -0
  69. package/dist/{components-Dl-TMD9k.js → components-B4T3Uzth.js} +1 -1
  70. package/dist/{components-D0XDRcaN.cjs → components-Cw9WjA6g.cjs} +1 -1
  71. package/dist/config/locators/components/chat/index.cjs +1 -1
  72. package/dist/config/locators/components/chat/index.d.cts +1 -1
  73. package/dist/config/locators/components/chat/index.d.ts +1 -1
  74. package/dist/config/locators/components/chat/index.js +1 -1
  75. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  76. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  77. package/dist/config/locators/components/index.cjs +1 -1
  78. package/dist/config/locators/components/index.d.cts +1 -1
  79. package/dist/config/locators/components/index.d.ts +1 -1
  80. package/dist/config/locators/components/index.js +1 -1
  81. package/dist/config/locators/components/search/index.d.ts +1 -1
  82. package/dist/config/locators/index.cjs +4 -4
  83. package/dist/config/locators/index.d.cts +2 -2
  84. package/dist/config/locators/index.d.ts +2 -2
  85. package/dist/config/locators/index.js +4 -4
  86. package/dist/contexts/index.cjs +45 -14
  87. package/dist/contexts/index.d.cts +10 -10
  88. package/dist/contexts/index.d.ts +10 -10
  89. package/dist/contexts/index.js +22 -11
  90. package/dist/contexts-B4ihTBsV.cjs +2980 -0
  91. package/dist/contexts-DGlr7M1o.js +2596 -0
  92. package/dist/coterie-CKB93qfz.cjs +239 -0
  93. package/dist/{coterie--MGvWeVh.cjs → coterie-DHcj2fRE.js} +64 -65
  94. package/dist/{custservice-types-C8-9vKWb.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
  95. package/dist/{custservice-types-CamCiXjq.js → custservice-types-mnIunabv.js} +1 -1
  96. package/dist/default-BnB4p0Se.cjs +234 -0
  97. package/dist/default-D6f5Dyt7.js +199 -0
  98. package/dist/default-ZKkE5zT4.cjs +4 -0
  99. package/dist/default-legGZJwI.js +4 -0
  100. package/dist/{divIds-CjceLRD9.cjs → divIds-2dJlU3z8.cjs} +1 -15
  101. package/dist/{divIds-0Vj9g-fM.js → divIds-BUrN2vY-.js} +2 -4
  102. package/dist/dreamlandBaby-BiRYYFav.js +346 -0
  103. package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
  104. package/dist/{embedded-_cLpd6FK.js → embedded-BJLWIriJ.js} +1 -1
  105. package/dist/{embedded-B5Wi9g0T.cjs → embedded-Dl79TJLC.cjs} +1 -1
  106. package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
  107. package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
  108. package/dist/enviveConfig-BccuzS2a.cjs +240 -0
  109. package/dist/enviveConfig-CzhTz8Aa.js +152 -0
  110. package/dist/events/index.cjs +1 -1
  111. package/dist/events/index.js +1 -1
  112. package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
  113. package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
  114. package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
  115. package/dist/fiveCbd-Dz2NouOF.js +613 -0
  116. package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
  117. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
  118. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
  119. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
  120. package/dist/graphql-BNW60InJ.cjs +128 -0
  121. package/dist/graphql-CjB8wHzm.js +74 -0
  122. package/dist/graphqlConfig-CYt6tWII.js +30 -0
  123. package/dist/graphqlConfig-DicykC-o.cjs +61 -0
  124. package/dist/greenpan-B_EbPkSP.js +397 -0
  125. package/dist/greenpan-kPE4fJgd.cjs +397 -0
  126. package/dist/grooveLife-Ckuir319.js +342 -0
  127. package/dist/grooveLife-DKSEQp1F.cjs +342 -0
  128. package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
  129. package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
  130. package/dist/hooks/index.cjs +39 -13
  131. package/dist/hooks/index.d.cts +127 -45
  132. package/dist/hooks/index.d.ts +124 -42
  133. package/dist/hooks/index.js +22 -11
  134. package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
  135. package/dist/{index-BdNKc2ix.d.cts → index-BDPWBU3h.d.cts} +1 -1
  136. package/dist/index-BMPtlgac.d.ts +191 -0
  137. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  138. package/dist/{index-BrXuc_Ck.d.cts → index-Byb45OPg.d.cts} +1 -1
  139. package/dist/{index-CSIOQD-A.d.ts → index-C6KdON7d.d.ts} +1 -1
  140. package/dist/index-C7pGDl1A.d.ts +1609 -0
  141. package/dist/{index-K2kNsOTw.d.cts → index-C9lgsCWp.d.cts} +32 -32
  142. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  143. package/dist/{index-CbJZOEU4.d.ts → index-Cc-wBCn6.d.ts} +32 -32
  144. package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
  145. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  146. package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
  147. package/dist/{index-Cr2y08f1.d.ts → index-DOii3C6b.d.ts} +1 -1
  148. package/dist/index-DTu2X-YS.d.cts +1609 -0
  149. package/dist/index-OEifcBsm.d.cts +191 -0
  150. package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
  151. package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
  152. package/dist/interceptors/index.cjs +2 -12
  153. package/dist/interceptors/index.d.cts +8 -13
  154. package/dist/interceptors/index.d.ts +8 -13
  155. package/dist/interceptors/index.js +2 -11
  156. package/dist/jackArcher-B39OEIj6.cjs +727 -0
  157. package/dist/{jackArcher-sO9EbgrZ.js → jackArcher-BwkWGybC.js} +24 -25
  158. package/dist/jordanCraig-CxRH_jLi.js +1786 -0
  159. package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
  160. package/dist/kindredBravely-D78VwL20.cjs +490 -0
  161. package/dist/kindredBravely-DQDpAzdl.js +490 -0
  162. package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
  163. package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
  164. package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
  165. package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
  166. package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
  167. package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
  168. package/dist/longevityrx-DdV3v26F.cjs +320 -0
  169. package/dist/longevityrx-DfPDfvAt.js +320 -0
  170. package/dist/lookOptic-DgXFGBPP.cjs +282 -0
  171. package/dist/{lookOptic-Jwf7EAU8.js → lookOptic-FgVW1afF.js} +19 -20
  172. package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
  173. package/dist/{mantraBrand-DoaVj837.js → mantraBrand-uV8HCDR8.js} +22 -23
  174. package/dist/medterra-BtDpr1Hw.cjs +583 -0
  175. package/dist/medterra-DgzE7-mj.js +583 -0
  176. package/dist/modells-CJjsxOIR.js +484 -0
  177. package/dist/modells-Ck5KbRFj.cjs +484 -0
  178. package/dist/models-BkXg5eIP.cjs +1534 -0
  179. package/dist/models-UZ6HszfZ.js +1281 -0
  180. package/dist/{nodeSelector-DybpVr-i.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
  181. package/dist/{nodeSelector-vKB44CDB.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
  182. package/dist/org-C2RrBVQR.cjs +81 -0
  183. package/dist/org-xMytX--e.js +38 -0
  184. package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
  185. package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
  186. package/dist/pressedFloral-Bteoboms.js +661 -0
  187. package/dist/pressedFloral-CexgV-xy.cjs +661 -0
  188. package/dist/search-BMOAmrmY.js +459 -0
  189. package/dist/search-Df0Ifneg.cjs +672 -0
  190. package/dist/{search-filter-types-9rTb3jMj.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
  191. package/dist/{search-filter-types-C-zZSpGo.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
  192. package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
  193. package/dist/skinPerfection-BlvcEcUE.js +334 -0
  194. package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
  195. package/dist/snapSupplements-kcsPAOm9.js +285 -0
  196. package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
  197. package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
  198. package/dist/spanx-B4WFA_rI.js +661 -0
  199. package/dist/spanx-BWoE4F8b.cjs +663 -0
  200. package/dist/spanxStaging-BOrOjhXn.js +845 -0
  201. package/dist/spanxStaging-BfdfIug4.cjs +848 -0
  202. package/dist/{suggestionBarV2-types-Penx3Y67.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
  203. package/dist/{suggestionBarV2-types-B3lwrENK.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
  204. package/dist/supergoop-22dd5_BS.js +323 -0
  205. package/dist/supergoop-B-a4cku2.cjs +323 -0
  206. package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
  207. package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
  208. package/dist/types/index.cjs +2 -2
  209. package/dist/types/index.d.cts +2 -2
  210. package/dist/types/index.d.ts +2 -2
  211. package/dist/types/index.js +2 -2
  212. package/dist/types--pr1GQQx.js +154 -0
  213. package/dist/types-BVSyY3Hk.cjs +196 -0
  214. package/dist/{uniqueVintage-BWkDgt1z.js → uniqueVintage-CJXiNNe7.js} +19 -20
  215. package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
  216. package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
  217. package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
  218. package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
  219. package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
  220. package/dist/utils-C9ZSCx12.js +888 -0
  221. package/dist/utils-D5HO61hG.cjs +1016 -0
  222. package/dist/variantInfo-DbVxA1yE.js +1 -0
  223. package/dist/variantInfo-orXoPBCU.cjs +0 -0
  224. package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
  225. package/dist/venaCbd-CanovPS_.js +365 -0
  226. package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
  227. package/dist/{westonJonBoucher-BAGXegsX.js → westonJonBoucher-BUu1_wP1.js} +19 -20
  228. package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
  229. package/dist/{wineEnthusiast-EJbhMeKQ.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
  230. package/dist/wolfMattress-D9Mjq-HP.js +372 -0
  231. package/dist/wolfMattress-JssghhC-.cjs +372 -0
  232. package/dist/wolfTactical-C6exYhL7.cjs +349 -0
  233. package/dist/wolfTactical-CnV3KQdI.js +349 -0
  234. package/package.json +100 -19
  235. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  236. package/src/application/models/colorsConfig.ts +18 -18
  237. package/src/application/models/frontendConfig.ts +3 -3
  238. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  239. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  240. package/src/application/models/index.ts +0 -2
  241. package/src/application/models/localStorageEventListener.ts +2 -2
  242. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  243. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  244. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  245. package/src/application/utils/analyticsUtils.ts +53 -22
  246. package/src/application/utils/cdnUtils.ts +11 -0
  247. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  248. package/src/atoms/app/index.ts +7 -17
  249. package/src/atoms/app/variant.ts +13 -4
  250. package/src/atoms/chat/chatState.ts +28 -18
  251. package/src/atoms/chat/messageQueue.ts +36 -5
  252. package/src/atoms/chat/replies.ts +45 -37
  253. package/src/atoms/envive/enviveConfig.ts +10 -6
  254. package/src/atoms/org/graphqlConfig.ts +7 -1
  255. package/src/atoms/org/index.ts +3 -3
  256. package/src/atoms/org/newOrgConfigAtom.ts +8 -0
  257. package/src/atoms/org/orgPageConfig.ts +6 -5
  258. package/src/atoms/search/chatSearch.ts +11 -5
  259. package/src/atoms/search/searchAPI.ts +22 -12
  260. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  261. package/src/contexts/amplitudeContext.tsx +466 -0
  262. package/src/contexts/cdnContext.tsx +48 -0
  263. package/src/contexts/chatContext.tsx +15 -12
  264. package/src/contexts/enviveConfigContext.tsx +22 -17
  265. package/src/contexts/enviveCssContext.tsx +34 -5
  266. package/src/contexts/featureFlagContext.tsx +193 -0
  267. package/src/contexts/featureFlagServiceContext.tsx +87 -0
  268. package/src/contexts/graphqlContext.tsx +165 -0
  269. package/src/contexts/index.ts +13 -3
  270. package/src/contexts/localStorageContext.tsx +159 -0
  271. package/src/contexts/newOrgConfigContext.tsx +104 -0
  272. package/src/contexts/orgConfigContext.tsx +92 -92
  273. package/src/contexts/searchContext.tsx +187 -0
  274. package/src/contexts/sessionStorageContext.tsx +80 -0
  275. package/src/contexts/shopifyUrlContext.tsx +97 -0
  276. package/src/contexts/types.ts +12 -8
  277. package/src/contexts/userIdentityContext.tsx +197 -0
  278. package/src/events/registerAnalyticsListeners.ts +32 -38
  279. package/src/hooks/index.ts +10 -4
  280. package/src/hooks/useAmplitudeOperations.ts +35 -0
  281. package/src/hooks/useAppDetails.ts +49 -0
  282. package/src/hooks/useCdnOperations.ts +16 -0
  283. package/src/hooks/useChatToggle.ts +5 -4
  284. package/src/hooks/useChatToggleAnalytics.ts +15 -0
  285. package/src/hooks/useGraphQLConfig.ts +63 -0
  286. package/src/hooks/useIdentifyUser.ts +33 -0
  287. package/src/hooks/useImageResolver.ts +7 -7
  288. package/src/hooks/useLocalStorageOperations.ts +92 -0
  289. package/src/hooks/useNewOrgConfig.ts +3 -76
  290. package/src/hooks/useSearch.tsx +21 -18
  291. package/src/hooks/useSearchOperations.ts +97 -0
  292. package/src/hooks/useSessionStorageOperations.ts +28 -0
  293. package/src/hooks/useShopifyUrlOperations.ts +45 -0
  294. package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
  295. package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
  296. package/src/interceptors/index.ts +0 -1
  297. package/src/interceptors/useMessageInterceptor.ts +5 -8
  298. package/src/merchants/bandolier/bandolier.ts +10 -28
  299. package/src/merchants/carpe/carpe.ts +5 -8
  300. package/src/merchants/coterie/coterie.ts +3 -6
  301. package/src/merchants/default.ts +73 -70
  302. package/src/merchants/domInsertion.ts +30 -0
  303. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
  304. package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
  305. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
  306. package/src/merchants/greenpan/greenpan.ts +6 -12
  307. package/src/merchants/gridInsertion.ts +19 -0
  308. package/src/merchants/grooveLife/grooveLife.ts +13 -7
  309. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
  310. package/src/merchants/jackArcher/jackArcher.ts +26 -11
  311. package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
  312. package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
  313. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
  314. package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
  315. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
  316. package/src/merchants/longevityrx/longevityrx.ts +14 -8
  317. package/src/merchants/lookOptic/lookOptic.ts +6 -6
  318. package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
  319. package/src/merchants/medterra/medterra.ts +14 -11
  320. package/src/merchants/modells/modells.ts +6 -9
  321. package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
  322. package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
  323. package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
  324. package/src/merchants/spanx/spanx.ts +6 -6
  325. package/src/merchants/spanx/spanxStaging.ts +6 -12
  326. package/src/merchants/supergoop/supergoop.ts +11 -12
  327. package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
  328. package/src/merchants/venaCbd/venaCbd.ts +6 -9
  329. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
  330. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
  331. package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
  332. package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
  333. package/src/types/config-versions.ts +6 -0
  334. package/src/types.ts +0 -53
  335. package/dist/adapters/amplitude/index.cjs +0 -14
  336. package/dist/adapters/amplitude/index.d.cts +0 -6
  337. package/dist/adapters/amplitude/index.d.ts +0 -6
  338. package/dist/adapters/amplitude/index.js +0 -12
  339. package/dist/api-B2euFL-5.cjs +0 -269
  340. package/dist/api-XRr_lAG6.js +0 -190
  341. package/dist/application/config/index.cjs +0 -43
  342. package/dist/application/config/index.d.cts +0 -15
  343. package/dist/application/config/index.d.ts +0 -15
  344. package/dist/application/config/index.js +0 -41
  345. package/dist/application/service/customerService/index.cjs +0 -4
  346. package/dist/application/service/customerService/index.d.cts +0 -3
  347. package/dist/application/service/customerService/index.d.ts +0 -3
  348. package/dist/application/service/customerService/index.js +0 -4
  349. package/dist/application/service/index.cjs +0 -42
  350. package/dist/application/service/index.d.cts +0 -413
  351. package/dist/application/service/index.d.ts +0 -413
  352. package/dist/application/service/index.js +0 -12
  353. package/dist/atomStore-ONYy0XuA.d.cts +0 -24
  354. package/dist/atomStore-kOKiEcNl.d.ts +0 -24
  355. package/dist/bandolier-Da4wt6sm.cjs +0 -1230
  356. package/dist/bandolier-DzEmYWcz.js +0 -1230
  357. package/dist/carpe-AXipz0Xl.cjs +0 -608
  358. package/dist/carpe-CaUKwcEa.js +0 -606
  359. package/dist/contexts-CtRlNXaS.js +0 -7674
  360. package/dist/contexts-CtgmnYNn.cjs +0 -9088
  361. package/dist/coterie-oKHAT0lx.js +0 -240
  362. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  363. package/dist/customerService-BHQRnLhC.js +0 -23
  364. package/dist/default-B4fINY5_.cjs +0 -4
  365. package/dist/default-BrTQxA0c.js +0 -4
  366. package/dist/default-C3LrcbZB.cjs +0 -199
  367. package/dist/default-CXkYrLEr.js +0 -176
  368. package/dist/dreamlandBaby-BEqt0eKF.js +0 -347
  369. package/dist/dreamlandBaby-DBDjEJCc.cjs +0 -347
  370. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  371. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  372. package/dist/fiveCbd-CdqNt16h.cjs +0 -614
  373. package/dist/fiveCbd-D6B-sgnX.js +0 -614
  374. package/dist/forLoveAndLemons-C7GsJG7f.cjs +0 -668
  375. package/dist/forLoveAndLemons-gNDlMtPR.js +0 -666
  376. package/dist/greenpan-B5AaW4M_.js +0 -398
  377. package/dist/greenpan-DrORpYms.cjs +0 -398
  378. package/dist/grooveLife-BJqsfH2H.cjs +0 -343
  379. package/dist/grooveLife-xIUmDM8s.js +0 -343
  380. package/dist/homegrownCannabis-8TZ21u6L.cjs +0 -411
  381. package/dist/homegrownCannabis-BtMuEvbZ.js +0 -411
  382. package/dist/index-CKUpnyJQ.d.ts +0 -72
  383. package/dist/index-DFL1dIT_.d.ts +0 -7
  384. package/dist/index-DXpgMVpp.d.ts +0 -749
  385. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  386. package/dist/index-VHFMGkO-.d.cts +0 -72
  387. package/dist/index-VSFakgAI.d.cts +0 -95
  388. package/dist/index-aNW5V9fh.d.cts +0 -749
  389. package/dist/index-zZjcds15.d.cts +0 -7
  390. package/dist/jackArcher-WtkbLBZj.cjs +0 -728
  391. package/dist/jordanCraig-471FcgqF.cjs +0 -1787
  392. package/dist/jordanCraig-DNOncplU.js +0 -1787
  393. package/dist/kindredBravely-BlLyHGMX.cjs +0 -491
  394. package/dist/kindredBravely-cqZ4OvXp.js +0 -491
  395. package/dist/kutFromTheKloth-3mOIryvt.cjs +0 -370
  396. package/dist/kutFromTheKloth-DtVNCMKa.js +0 -370
  397. package/dist/larryAndSerges-88Bvq-Us.cjs +0 -262
  398. package/dist/larryAndSerges-cvak6May.js +0 -262
  399. package/dist/leapsAndRebounds-Dmf8eUPq.js +0 -361
  400. package/dist/leapsAndRebounds-iWKc923H.cjs +0 -361
  401. package/dist/logger-Dln20ans.cjs +0 -26
  402. package/dist/logger-pdEEY8T2.js +0 -20
  403. package/dist/longevityrx-BTMI9vn-.js +0 -321
  404. package/dist/longevityrx-CobPyigd.cjs +0 -321
  405. package/dist/lookOptic-C4H_c0JZ.cjs +0 -283
  406. package/dist/mantraBrand-CySGqbn6.cjs +0 -751
  407. package/dist/medterra-BnZ5p27n.cjs +0 -584
  408. package/dist/medterra-DaICcPPp.js +0 -584
  409. package/dist/modells-CZ1L6dD_.js +0 -485
  410. package/dist/modells-DF0SndHr.cjs +0 -485
  411. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  412. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  413. package/dist/pressedFloral-B3t2cYzs.cjs +0 -662
  414. package/dist/pressedFloral-Dsws2Kfb.js +0 -662
  415. package/dist/skinPerfection-CILQM2bR.cjs +0 -335
  416. package/dist/skinPerfection-DmQCntRf.js +0 -335
  417. package/dist/snapSupplements--X_v0KRM.js +0 -286
  418. package/dist/snapSupplements-Djuzl0Ed.cjs +0 -286
  419. package/dist/spanx-Bo81yXSF.cjs +0 -664
  420. package/dist/spanx-DauxB8KE.js +0 -662
  421. package/dist/spanxStaging-BucYQvR1.cjs +0 -849
  422. package/dist/spanxStaging-CfXUukdP.js +0 -846
  423. package/dist/supergoop-8qa_NV3F.cjs +0 -338
  424. package/dist/supergoop-DOaui-A6.js +0 -336
  425. package/dist/types-CD4LFta-.d.cts +0 -33
  426. package/dist/types-CGC6Oozp.cjs +0 -231
  427. package/dist/types-CnTCkyvK.js +0 -177
  428. package/dist/types-DBdI0j89.d.ts +0 -33
  429. package/dist/uniqueVintage-DAne8XcL.cjs +0 -1214
  430. package/dist/variant-CC1nrywd.d.ts +0 -13
  431. package/dist/variant-CQTuQQSq.d.cts +0 -13
  432. package/dist/venaCbd-B1HO_Pkr.cjs +0 -366
  433. package/dist/venaCbd-CnByO-5R.js +0 -366
  434. package/dist/westonJonBoucher-BRfHWMbs.cjs +0 -423
  435. package/dist/wineEnthusiast-DW8JVwV8.cjs +0 -941
  436. package/dist/wolfMattress-B6INZNRJ.cjs +0 -373
  437. package/dist/wolfMattress-D9P7ErH_.js +0 -373
  438. package/dist/wolfTactical-C5Pupi3J.js +0 -350
  439. package/dist/wolfTactical-TMthZM93.cjs +0 -350
  440. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  441. package/src/adapters/amplitude/index.ts +0 -2
  442. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  443. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  444. package/src/application/config/generalStaticConfig.ts +0 -40
  445. package/src/application/config/index.ts +0 -1
  446. package/src/application/models/domMutationContinuation.ts +0 -7
  447. package/src/application/models/domObservationStrategy.ts +0 -9
  448. package/src/application/service/cachingService.ts +0 -84
  449. package/src/application/service/cdnService.ts +0 -20
  450. package/src/application/service/customerService/index.ts +0 -8
  451. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  452. package/src/application/service/domMutationObserver.ts +0 -320
  453. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  454. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  455. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  456. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  457. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  458. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  459. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  460. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  461. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  462. package/src/application/service/featureFlagService.ts +0 -130
  463. package/src/application/service/graphqlConfigService.ts +0 -59
  464. package/src/application/service/index.ts +0 -32
  465. package/src/application/service/kustomerIntegrationService.ts +0 -111
  466. package/src/application/service/localStorageService.ts +0 -77
  467. package/src/application/service/pageVariantService.ts +0 -866
  468. package/src/application/service/searchService.ts +0 -147
  469. package/src/application/service/sessionStorageService.ts +0 -27
  470. package/src/application/service/shopifyUrlService.ts +0 -63
  471. package/src/application/service/userIdentityService.ts +0 -114
  472. package/src/application/service/windowChatToggleService.ts +0 -80
  473. package/src/application/service/windowDataLayerService.ts +0 -181
  474. package/src/application/service/windowFrontendConfigService.ts +0 -129
  475. package/src/atoms/org/merchantCss.ts +0 -161
  476. package/src/atoms/org/org.ts +0 -251
  477. package/src/atoms/org/orgUIConfig.ts +0 -142
  478. package/src/enabled-features.ts +0 -83
  479. package/src/hooks/useDynamicVariants.ts +0 -226
  480. package/src/hooks/useFileUpload.ts +0 -63
  481. package/src/hooks/useHideElements.ts +0 -85
  482. package/src/interceptors/useFormEscalation.ts +0 -57
  483. /package/dist/{locators-DnKpajbY.js → atomStore-CZnUUsrr.js} +0 -0
  484. /package/dist/{locators-CugndTUM.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
  485. /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
  486. /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
  487. /package/dist/{variantInfo-CzhR5W6h.js → utilityTypes-8sETsYPk.js} +0 -0
  488. /package/dist/{variantInfo-CNRTY0gH.cjs → utilityTypes-COShxVir.cjs} +0 -0
  489. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  490. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  491. /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
@@ -0,0 +1,1609 @@
1
+ import { GetMerchantColorsQueryData } from "./index-Bmub8e38.cjs";
2
+ import { AcceptableFormFieldType, ApiFormResponseAttributes, ApiPageResponseAttributes, OrderResponseAttributes as OrderResponseAttributes$1, PageResponseAttributes, ProductResponseAttributes, Response as Response$1, ReviewResponseAttributes, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, TextResponseAttributes } from "./index-CiWEYzXl.cjs";
3
+ import { CamelCasedPropertiesDeep, NonRecursiveType, UnknownArray, UpperCaseCharacters, WordSeparators } from "./index-CESxqFso.cjs";
4
+ import { ChatState, SuggestionBarLocationForMetrics, TestProps } from "./test-types-CgVJtwUr.cjs";
5
+ import { VariantInfo } from "./index-B0NW9KTj.cjs";
6
+ import { Context, CustServiceAttachment, FormSubmittedAttributes, FormType, FulfillmentDisplayStatus, GenerationParams, OrderItemInfo, OrderResponseAttributes, OrganizationConfig, OrganizationSettings, OrganizationStatusEnum, PDPAttributes, PLPAttributes, PLPIdAttributes, PageVisitCategory, ProductSearchFilterResponseAttributes, ProductSearchResponse, ProductSearchResponseAttributes, QueryTypedAttributes, SearchAttributes, SearchResponseProduct, StatsigExperiment, StatsigFeatureGate, Suggestion, SuggestionClickedAttributes, SupportedEventProductCategory, UserEvent, UserEventCategory } from "@spiffy-ai/commerce-api-client";
7
+
8
+ //#region src/application/models/cachedValue.d.ts
9
+ interface CachedValue {
10
+ value: unknown;
11
+ expiry: number;
12
+ }
13
+ //#endregion
14
+ //#region src/application/models/chatElementDisplayLocation.d.ts
15
+ declare enum ChatElementDisplayLocation {
16
+ IN_CHAT = "in_chat",
17
+ CHAT_PREVIEW = "chat_preview",
18
+ FLOATING_BUTTON = "floating_button",
19
+ HELP_ME_CHOOSE = "help_me_choose",
20
+ PLP_IMAGE_BANNER = "plp_image_banner",
21
+ TOP_REVIEWS_SNIPPET = "top_reviews_snippet",
22
+ BOTTOM_REVIEWS_SNIPPET = "bottom_reviews_snippet",
23
+ BLOCK_BACK_BUTTON = "block_back_button",
24
+ SWITCH_TO_AGENT = "switch_to_agent",
25
+ CONVERSATIONAL_SEARCH = "conversational_search",
26
+ GLOBAL_SEARCH_ENTRYPOINT = "global_search_entrypoint",
27
+ SEARCH_NAV_ENTRYPOINT = "search_nav_entrypoint",
28
+ SEARCH_PROMPT = "search_prompt",
29
+ SEARCH_PROMPT_BUTTON = "search_prompt_button",
30
+ PRODUCT_GRID = "product_grid",
31
+ UNSPECIFIED = "unspecified",
32
+ FILTER_MODAL = "filter_modal",
33
+ PROMPT_CARD = "prompt_card",
34
+ WINDOW_API_CALL = "window_api_call",
35
+ }
36
+ //#endregion
37
+ //#region src/application/models/clientDetails.d.ts
38
+ interface ClientDetails {
39
+ os?: string;
40
+ osVersion?: string;
41
+ deviceBrand?: string;
42
+ deviceManufacturer?: string;
43
+ deviceModel?: string;
44
+ carrier?: string;
45
+ country?: string;
46
+ region?: string;
47
+ browser?: string;
48
+ browserVersion?: string;
49
+ browserIpAddress?: string;
50
+ userAgent?: string;
51
+ }
52
+ //#endregion
53
+ //#region src/application/models/colorsConfig.d.ts
54
+ declare enum ColorNames {
55
+ TextPrimary = "text-primary",
56
+ TextSecondary = "text-secondary",
57
+ TextAccent = "text-accent",
58
+ TextLink = "text-link",
59
+ TextLight = "text-light",
60
+ BackgroundPrimary = "background-primary",
61
+ BackgroundSecondary = "background-secondary",
62
+ BackgroundSecondaryDark = "background-secondary-dark",
63
+ BackgroundTertiary = "background-tertiary",
64
+ BackgroundDark = "background-dark",
65
+ BackgroundLight = "background-light",
66
+ BackgroundSaturated = "background-saturated",
67
+ BorderLight = "border-light",
68
+ BorderMedium = "border-medium",
69
+ BorderDark = "border-dark",
70
+ BorderOutline = "border-outline",
71
+ AccentPrimary = "accent-primary",
72
+ AccentSecondary = "accent-secondary",
73
+ }
74
+ type ColorMapping = { [key in ColorNames]: string };
75
+ declare const colorVar: (color: ColorNames) => string;
76
+ //#endregion
77
+ //#region src/application/models/conversationalSearchIds.d.ts
78
+ type ConversationalSearchIds = {
79
+ conversationalSearchEntrypointId?: string;
80
+ conversationalSearchInputId?: string;
81
+ conversationalSearchModalId?: string;
82
+ };
83
+ //#endregion
84
+ //#region src/application/models/dataLayer.d.ts
85
+ /**
86
+ * Base interface for common properties across all ecommerce events
87
+ */
88
+ interface BaseEcommerceEvent {
89
+ event: string;
90
+ ecommerce: UAEcommerceData | GA4EcommerceData;
91
+ }
92
+ /**
93
+ * Legacy universal analytics data. The actual payload contains more fields, but we
94
+ * only need the ones listed below.
95
+ */
96
+ interface UAEcommerceData {
97
+ add: {
98
+ products: {
99
+ name: string;
100
+ category: string;
101
+ price: string;
102
+ quantity: string;
103
+ }[];
104
+ currencyCode: string;
105
+ };
106
+ }
107
+ /**
108
+ * Google Analytics 4 data. The actual payload contains more fields, but we
109
+ * only need the ones listed below.
110
+ */
111
+ interface GA4EcommerceData {
112
+ currency: string;
113
+ items: {
114
+ item_name: string;
115
+ item_category: string;
116
+ price: number;
117
+ quantity: number;
118
+ }[];
119
+ }
120
+ interface UAEcommerceEvent extends BaseEcommerceEvent {
121
+ ecommerce: UAEcommerceData;
122
+ }
123
+ interface GA4EcommerceEvent extends BaseEcommerceEvent {
124
+ ecommerce: GA4EcommerceData;
125
+ }
126
+ //#endregion
127
+ //#region src/application/models/events.d.ts
128
+ declare enum SpiffyEventName {
129
+ WidgetOpen = "spiffy:widgetopen",
130
+ WidgetClose = "spiffy:widgetclose",
131
+ }
132
+ //#endregion
133
+ //#region src/application/models/featureGates.d.ts
134
+ declare enum FeatureGates {
135
+ IsClientSessionEnabled = "is_client_session_enabled",
136
+ IsNewFeatureEnabled = "is_new_feature_enabled",
137
+ IsFineTunedModel8b = "is_fine_tuned_model_8b",
138
+ IsIntegratedCXEnabled = "is_integrated_cx_enabled",
139
+ IsNonShapewearEnabled = "is_non_shapewear_enabled",
140
+ IsImageBannerEnabled = "is_image_banner_enabled",
141
+ IsOrderLookupEnabled = "is_order_lookup_enabled",
142
+ IsSummarizeReviewsEnabled = "is_summarize_reviews_enabled",
143
+ IsGlobalSearchEnabled = "is_global_search_enabled",
144
+ IsImagePromptEnabled = "is_image_prompt_enabled",
145
+ IsWatermarkEnabled = "is_watermark_enabled",
146
+ IsInferenceRegion0 = "is_inference_region_0",
147
+ IsGraphQLUIConfigsEnabled = "is_graphql_ui_configs_enabled",
148
+ IsGraphQLPageConfigsEnabled = "is_graphql_page_configs_enabled",
149
+ IsGraphQLComponentConfigsEnabled = "is_graphql_component_configs_enabled",
150
+ IsChatVariantEnabled = "is_chat_variant_enabled",
151
+ IsChatVariantAEnabled = "is_chat_variant_a_enabled",
152
+ IsChatVariantBEnabled = "is_chat_variant_b_enabled",
153
+ IsUserQueryAlwaysEnabled = "is_user_query_always_enabled",
154
+ }
155
+ //#endregion
156
+ //#region src/types/customerService.d.ts
157
+ declare enum CustomerServiceType {
158
+ shopify = "shopify",
159
+ gorgias = "gorgias",
160
+ kustomer = "kustomer",
161
+ groove = "groove",
162
+ tidio = "tidio",
163
+ zowie = "zowie",
164
+ redo = "redo",
165
+ gladly = "gladly",
166
+ richpanel = "richpanel",
167
+ zendesk = "zendesk",
168
+ unsupported = "unsupported",
169
+ }
170
+ declare enum CustomerServiceIntegrationMode {
171
+ none = "none",
172
+ simple = "simple",
173
+ full = "full",
174
+ }
175
+ //#endregion
176
+ //#region src/merchants/gridInsertion.d.ts
177
+ declare enum GridInsertionType {
178
+ FIXED_1 = "fixed-1",
179
+ FIXED_2 = "fixed-2",
180
+ FIXED_3 = "fixed-3",
181
+ FIXED_4 = "fixed-4",
182
+ FIXED_5 = "fixed-5",
183
+ FIXED_6 = "fixed-6",
184
+ FIXED_7 = "fixed-7",
185
+ FIXED_8 = "fixed-8",
186
+ FIXED_9 = "fixed-9",
187
+ FIXED_12 = "fixed-12",
188
+ FIXED_13 = "fixed-13",
189
+ ROW_1 = "row-1",
190
+ ROW_2 = "row-2",
191
+ ROW_3 = "row-3",
192
+ ROW_4 = "row-4",
193
+ }
194
+ //#endregion
195
+ //#region src/merchants/domInsertion.d.ts
196
+ declare enum DOMInsertionType {
197
+ AFTER = "after",
198
+ BEFORE = "before",
199
+ ADJACENT_AFTER_BEGIN = "adjacent-after-begin",
200
+ ADJACENT_BEFORE_BEGIN = "adjacent-before-begin",
201
+ ADJACENT_AFTER_END = "adjacent-after-end",
202
+ ADJACENT_BEFORE_END = "adjacent-before-end",
203
+ APPEND_CHILD = "append-child",
204
+ NONE = "none",
205
+ }
206
+ //#endregion
207
+ //#region src/application/models/api/orgAnalyticsConfig.d.ts
208
+ interface OrgAnalyticsConfig {
209
+ amplitude?: OrgAnalyticsAmplitudeConfig;
210
+ customerService?: OrgAnalyticsCustomerServiceConfig;
211
+ googleAnalytics?: OrgAnalyticsGoogleAnalyticsConfig;
212
+ }
213
+ interface OrgAnalyticsAmplitudeConfig {
214
+ sessionReplayEnabled: boolean;
215
+ sessionReplaySampleRate: number;
216
+ trackingEnabled: boolean;
217
+ }
218
+ interface OrgAnalyticsCustomerServiceConfig {
219
+ provider: string;
220
+ }
221
+ interface OrgAnalyticsGoogleAnalyticsConfig {
222
+ measurementId?: string;
223
+ }
224
+ //#endregion
225
+ //#region src/application/models/api/organizationConfig.d.ts
226
+ interface OrganizationConfig$1 {
227
+ createdAt: string;
228
+ namespace: string;
229
+ isLatest: boolean;
230
+ version: string;
231
+ updatedAt: string;
232
+ config: OrgAnalyticsConfig;
233
+ organizationId?: string;
234
+ id?: string;
235
+ }
236
+ //#endregion
237
+ //#region src/application/models/api/orgConfigResults.d.ts
238
+ interface OrgConfigExperiment {
239
+ group?: string;
240
+ groupName?: string;
241
+ name?: string;
242
+ ruleId?: string;
243
+ value?: Record<string, unknown>;
244
+ }
245
+ interface OrgConfigFeatureGate {
246
+ groupName?: string;
247
+ name?: string;
248
+ ruleId?: string;
249
+ value?: boolean;
250
+ }
251
+ interface Organization {
252
+ id: string;
253
+ displayName: string;
254
+ domain: string;
255
+ shortName: string;
256
+ status: OrganizationStatusEnum;
257
+ createdAt?: string;
258
+ updatedAt?: string;
259
+ }
260
+ interface OrganizationSettings$1 {
261
+ org: Organization;
262
+ settings: Record<string, unknown>;
263
+ }
264
+ interface OrgConfig {
265
+ configs: OrganizationConfig$1[];
266
+ experiments: OrgConfigExperiment[];
267
+ gates: OrgConfigFeatureGate[];
268
+ org: OrganizationSettings$1;
269
+ colorsConfig?: ColorMapping;
270
+ frontendConfig?: FrontendConfig;
271
+ }
272
+ //#endregion
273
+ //#region src/contexts/types.d.ts
274
+ type ShowFloatingButtonOptions = "always" | "after-interaction-on-mobile-always-desktop" | "after-interaction-anywhere" | "never";
275
+ type FloatingEntryPointConfig = {
276
+ position: "bottom-left" | "middle-left" | "middle-right" | "bottom-right";
277
+ expansionText?: {
278
+ pdp: string;
279
+ plp: string;
280
+ };
281
+ minimizedColor: string;
282
+ expandedColor: string;
283
+ textColor?: string;
284
+ showOption: ShowFloatingButtonOptions;
285
+ iconSVGSrc?: string;
286
+ iconSize?: number;
287
+ iconStrokeColor?: string;
288
+ iconFillColor?: string;
289
+ height?: number;
290
+ fontSize?: number;
291
+ };
292
+ type WelcomeSectionVariant = "standard" | "outlined";
293
+ type WelcomeSectionColorVariant = "standard" | "accent" | "brand" | "light";
294
+ type WelcomeSectionConfig = {
295
+ variant: WelcomeSectionVariant;
296
+ colorVariant?: WelcomeSectionColorVariant;
297
+ title?: string;
298
+ subtitle?: string;
299
+ iconName?: string;
300
+ imageSrc?: string;
301
+ };
302
+ type ChatPreviewConfig = {
303
+ variant: "flat" | "filled" | "outlined";
304
+ largeProductComparison?: boolean;
305
+ filledBackgroundColor: string;
306
+ iconFillColor: string;
307
+ buttonTextColor?: string;
308
+ buttonTextSecondaryColor?: string;
309
+ buttonTextHoverColor?: string;
310
+ buttonBackgroundColor: string;
311
+ buttonBackgroundHoverColor: string;
312
+ buttonBorderColor?: string;
313
+ buttonBorderHoverColor?: string;
314
+ copies: {
315
+ pdp: string[];
316
+ plp: string[];
317
+ };
318
+ staticSuggestionCopies?: {
319
+ pdp: string[];
320
+ plp: string[];
321
+ };
322
+ staticPLPImages?: string[];
323
+ footerConfig?: ChatPreviewFooterConfig;
324
+ headerConfig?: ChatPreviewHeaderConfig;
325
+ topMargin?: number;
326
+ };
327
+ type ChatPreviewHeaderConfig = {
328
+ title?: string;
329
+ imageSrc?: string;
330
+ imageHeight?: number;
331
+ sparklesColor?: string;
332
+ fontSize?: string;
333
+ iconWidth?: string;
334
+ iconHeight?: string;
335
+ };
336
+ interface ChatPreviewFooterConfig {
337
+ hasFade?: boolean;
338
+ suggestionButtonVariant?: "dark" | "light" | "outlined";
339
+ suggestionsBackground?: string;
340
+ replyButtonIcon?: "send" | "magnifyingGlass" | "thinMagnifyingGlass" | "searchIcon";
341
+ replyButtonText?: string;
342
+ replyInputHasShadow?: boolean;
343
+ replyInputHasBorder?: boolean;
344
+ backgroundColor?: string;
345
+ }
346
+ type ProductReviewStyleVariant = "standard" | "bordered";
347
+ type ProductReviewColorVariant = "neutral" | "brand" | "premium";
348
+ interface ProductReviewConfig {
349
+ styleVariant: ProductReviewStyleVariant;
350
+ colorVariant: ProductReviewColorVariant;
351
+ verifiedBuyerTitle: string;
352
+ incentivizedReviewFlag?: boolean;
353
+ }
354
+ type PageCardVariant = "filled" | "outlined" | "minimal";
355
+ type PageCardHoverVariant = "none" | "shadow" | "lift";
356
+ type PageCardIconVariant = "primary" | "accent" | "background" | "none";
357
+ type PageCardConfig = {
358
+ variant: PageCardVariant;
359
+ hoverVariant: PageCardHoverVariant;
360
+ iconVariant: PageCardIconVariant;
361
+ };
362
+ type ProductCardVariant = "filled" | "bordered" | "minimal" | "transparentBordered";
363
+ type ProductCardHoverVariant = "backgroundDark" | "none";
364
+ type ProductCardLayoutVariant = "normal" | "tall" | "square";
365
+ interface ProductCardConfig {
366
+ variant: ProductCardVariant;
367
+ hoverVariant: ProductCardHoverVariant;
368
+ layoutVariant: ProductCardLayoutVariant;
369
+ pricePrefix?: string;
370
+ }
371
+ type CSSwitchConfig = {
372
+ variant: "attached" | "detached";
373
+ backgroundColor: string;
374
+ borderColor: string;
375
+ selectedTextColor: string;
376
+ selectedBackgroundColor?: string;
377
+ unselectedTextColor: string;
378
+ unselectedBackgroundColor?: string;
379
+ supportTitle?: string;
380
+ spiffyTitle?: string;
381
+ spiffyTitleHasLogo?: boolean;
382
+ };
383
+ type ChatHeaderConfig = {
384
+ collapsedColor: string;
385
+ expandedColor: string;
386
+ chevronColor: string;
387
+ imageSrc?: string;
388
+ icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
389
+ closeIcon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
390
+ borderBottom?: string;
391
+ headerBarHeightPartialView: number;
392
+ headerBarHeightFullView: number;
393
+ customerSupportSwitchConfig?: CSSwitchConfig;
394
+ };
395
+ type SimpleCustomerServiceIntegration = {
396
+ integrationMode: CustomerServiceIntegrationMode;
397
+ provider: CustomerServiceType;
398
+ useUnifiedButton?: boolean;
399
+ maxfileUploadSize?: number;
400
+ };
401
+ type FullCustomerServiceIntegration = {
402
+ integrationMode: CustomerServiceIntegrationMode;
403
+ provider: CustomerServiceType;
404
+ useUnifiedButton?: boolean;
405
+ chatEnabledDuringBusinessHours?: boolean;
406
+ showNameInput?: boolean;
407
+ formAiName?: string;
408
+ welcomeTitle: string;
409
+ welcomeDescription: string;
410
+ showWelcomeOnForm?: boolean;
411
+ contactSubjectOptions?: string[];
412
+ getCustomWaitingMessage?: (name?: string) => string;
413
+ withinBusinessHoursMessage?: string;
414
+ withinBusinessHoursWaitingMessage?: string;
415
+ outsideBusinessHoursMessage?: string;
416
+ outsideBusinessHoursWaitingMessage?: string;
417
+ withinBusinessHoursFormMessage?: string;
418
+ outsideBusinessHoursFormMessage?: string;
419
+ suggestedAIQuestions?: string[];
420
+ businessHoursPolling?: number;
421
+ maxfileUploadSize?: number;
422
+ /**
423
+ * @deprecated This is handled by the BE.
424
+ */
425
+ businessHoursStartUTC?: string;
426
+ /**
427
+ * @deprecated This is handled by the BE.
428
+ */
429
+ businessHoursEndUTC?: string;
430
+ /**
431
+ * @deprecated This is handled by the BE.
432
+ */
433
+ businessHoursTimezone?: string;
434
+ showAISuggestionsWithinBusinessHours?: boolean;
435
+ waitingMessagePosition?: "BEFORE_MESSAGES" | "AFTER_MESSAGES";
436
+ legalMessage?: string;
437
+ withinBusinessHoursInitialState?: ChatState;
438
+ outsideBusinessHoursInitialState?: ChatState;
439
+ withinBusinessHoursButtontext?: string;
440
+ outsideBusinessHoursButtontext?: string;
441
+ reopenChatMessage: string;
442
+ };
443
+ type CustomerServiceIntegration = SimpleCustomerServiceIntegration | FullCustomerServiceIntegration;
444
+ type ConversationalSeach = {
445
+ enabled?: boolean;
446
+ replyInput?: ReplyInputConfig;
447
+ suggestions?: string[];
448
+ entrypointBgColor?: string;
449
+ entrypointTextColor?: string;
450
+ entrypointBtnColor?: string;
451
+ entrypointBtnTextColor?: string;
452
+ entrypointBtnBorderColor?: string;
453
+ entrypointContainer?: string;
454
+ entrypointTrigger?: string;
455
+ productGridContainer?: string;
456
+ generalSearchBtn?: string;
457
+ pageContent?: string;
458
+ searchContent?: string;
459
+ sortingTitle?: string;
460
+ selectionTitle?: string;
461
+ sortingFont?: string;
462
+ optionsFont?: string;
463
+ sortingButtonText?: string;
464
+ };
465
+ type ChatMessageVariant = "standard" | "premium" | "accent";
466
+ interface ChatMessageConfig {
467
+ assistantChatTitle: string;
468
+ variant: ChatMessageVariant;
469
+ productLink: {
470
+ variant: ProductLinkVariant;
471
+ hoverVariant: ProductLinkHoverVariant;
472
+ iconVariant: ProductLinkIconVariant;
473
+ };
474
+ }
475
+ interface ReplyInputConfig {
476
+ size?: "md" | "lg";
477
+ sendIcon: "arrowUp" | "send" | "search";
478
+ placeholder?: string;
479
+ }
480
+ interface PartialViewConfig {
481
+ maxHeight: number;
482
+ borderRadius?: string;
483
+ }
484
+ type ProductLinkIconVariant = "accentPrimary" | "backgroundPrimary" | "backgroundPrimaryDark" | "borderLight" | "backgroundSaturated";
485
+ type ProductLinkVariant = "textLink";
486
+ type ProductLinkHoverVariant = "backgroundDark";
487
+ type SearchCardVariant = "backgroundPrimary" | "backgroundSecondary" | "backgroundSecondaryDark" | "backgroundLight" | "backgroundSaturated";
488
+ type SuggestionButtonVariant = "outlined" | "outlinedLight" | "primary" | "secondary" | "tertiary" | "dark" | "darkAccent" | "darkPrimary" | "secondaryDark" | "secondaryAccent" | "transparent" | "transparentDark" | "lightDark";
489
+ interface SuggestionButtonConfig {
490
+ variant?: SuggestionButtonVariant;
491
+ hoverVariant?: SuggestionButtonVariant;
492
+ answerVariant?: SuggestionButtonVariant;
493
+ borderRadius?: "sm" | "md" | "lg";
494
+ }
495
+ type NumRows = "default" | "alwaysOneRow" | "alwaysTwoRows" | "twoRowsOnMobile";
496
+ interface AlphabeticFilterSorting {
497
+ type: "alphabetic";
498
+ }
499
+ interface ProductCountFilterSorting {
500
+ type: "productCount";
501
+ }
502
+ interface CustomFilterSorting {
503
+ type: "custom";
504
+ map: Record<string, number>;
505
+ }
506
+ type FilterSorting = AlphabeticFilterSorting | ProductCountFilterSorting | CustomFilterSorting;
507
+ interface BaseFilterConfig {
508
+ filterId: string;
509
+ displayName: string;
510
+ }
511
+ interface DynamicFilterConfig extends BaseFilterConfig {
512
+ type: "dynamic";
513
+ attribute: string;
514
+ sorting: FilterSorting;
515
+ }
516
+ interface PriceFilterConfig extends BaseFilterConfig {
517
+ type: "price";
518
+ bucketSize: number;
519
+ }
520
+ type FilterAttribute = DynamicFilterConfig | PriceFilterConfig;
521
+ type SearchZeroStateVariant = "backgroundTertiary" | "backgroundDark" | "backgroundPrimary";
522
+ type SearchZeroStateLayout = "input" | "icon";
523
+ type SearchInputVariant = "standard";
524
+ type SearchIconVariant = "thin" | "bold";
525
+ type SearchFilterSidebarVariant = "darkButton" | "lightButton";
526
+ type ProductGridVariant = "standard" | "square";
527
+ type UserQueryButtonIcon = "magnifyingGlass" | "send" | "magnifyingGlassThin" | "sendArrow" | "searchIcon";
528
+ interface UserQueryButtonConfig {
529
+ variant?: "box" | "underlineLight" | "underlineDark";
530
+ placeholderText?: string;
531
+ icon: UserQueryButtonIcon;
532
+ }
533
+ interface TermsAndConditionsConfig {
534
+ copy: string;
535
+ link: string;
536
+ linkText: string;
537
+ }
538
+ interface MerchantVariantSettings {
539
+ dynamicVariants: {
540
+ enabled: boolean;
541
+ refreshInterval?: number;
542
+ };
543
+ }
544
+ interface FloatingChatConfig {
545
+ enableWatermark: boolean;
546
+ userQueryInputEnabled: boolean;
547
+ ignoreFirstModelResponse?: boolean;
548
+ neverShowSingleProductCards?: boolean;
549
+ termsAndConditionsConfig?: TermsAndConditionsConfig;
550
+ suggestionButtonConfig?: SuggestionButtonConfig;
551
+ replyInputConfig: ReplyInputConfig;
552
+ }
553
+ interface SearchConfig {
554
+ enableGlobalSearch: boolean;
555
+ searchFilterConfig: FilterAttribute[];
556
+ redirectSearchResultsUrl?: string;
557
+ additiveDynamicFilters?: boolean;
558
+ }
559
+ type OrgUIConfig = {
560
+ shortName: string;
561
+ id?: string;
562
+ floatingEntrypointConfig?: FloatingEntryPointConfig;
563
+ chatPreviewConfig?: ChatPreviewConfig;
564
+ customerServiceIntegration: CustomerServiceIntegration;
565
+ conversationalSearch?: ConversationalSeach;
566
+ merchantOverrideCss?: string;
567
+ hiddenElementSelectors?: string[];
568
+ merchantVariantSettings?: MerchantVariantSettings;
569
+ floatingChatConfig: FloatingChatConfig;
570
+ searchConfig: SearchConfig;
571
+ chatHeader: ChatHeaderConfig;
572
+ stickyAgentSwitchSuggestion?: boolean;
573
+ partialViewConfig: PartialViewConfig;
574
+ welcomeSectionConfig?: WelcomeSectionConfig;
575
+ productCardConfig?: ProductCardConfig;
576
+ productReviewConfig?: ProductReviewConfig;
577
+ pageCardConfig?: PageCardConfig;
578
+ chatMessageConfig: ChatMessageConfig;
579
+ };
580
+ type InsertionPoint = {
581
+ selector: string;
582
+ selectionIndex?: number;
583
+ insertionType: DOMInsertionType;
584
+ };
585
+ type URLTest = "shopify" | "null";
586
+ type IdExtractor = "shopify-product-id" | "shopify-collection-id" | "shopify-product-variant-id" | "url-resolver-product-id" | "url-resolver-plp-id" | "null";
587
+ declare enum CategoryExtractorType {
588
+ VisitCategoryMap = "VisitCategoryMap",
589
+ VisitCategoryDefault = "VisitCategoryDefault",
590
+ }
591
+ interface BaseCategoryExtractor<T extends CategoryExtractorType> {
592
+ type: T;
593
+ }
594
+ interface VisitCategoryMap extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryMap> {
595
+ map: { [key in PageVisitCategory]?: string[] };
596
+ }
597
+ interface VisitCategoryDefault extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryDefault> {
598
+ value: PageVisitCategory;
599
+ }
600
+ type CategoryExtractor = VisitCategoryMap | VisitCategoryDefault;
601
+ type WrappingElement = {
602
+ className: string;
603
+ element: string;
604
+ insertionType: DOMInsertionType;
605
+ };
606
+ declare enum PageVariantTestType {
607
+ ShopifyPLP = "ShopifyPLP",
608
+ ShopifyPDP = "ShopifyPDP",
609
+ PageCategory = "PageCategory",
610
+ CatalogCategory = "CatalogCategory",
611
+ TopCatalogCategory = "TopCatalogCategory",
612
+ HasReviews = "HasReviews",
613
+ InCollection = "InCollection",
614
+ HasMerchantTag = "HasMerchantTag",
615
+ FeatureGate = "FeatureGate",
616
+ PlpId = "PlpId",
617
+ QueryParam = "QueryParam",
618
+ ProductId = "ProductId",
619
+ UserHasInteracted = "UserHasInteracted",
620
+ UserHasNotInteracted = "UserHasNotInteracted",
621
+ isLoading = "isLoading",
622
+ isProductComparison = "isProductComparison",
623
+ Fallback = "Fallback",
624
+ UrlResolver = "UrlResolver",
625
+ Null = "null",
626
+ }
627
+ interface BasePageVariantTest<T extends PageVariantTestType> {
628
+ testType: T;
629
+ }
630
+ interface TopCatalogCategory extends BasePageVariantTest<PageVariantTestType.TopCatalogCategory> {
631
+ topCategory: string[];
632
+ }
633
+ interface CatalogCategoryTest extends BasePageVariantTest<PageVariantTestType.CatalogCategory> {
634
+ category: SupportedEventProductCategory;
635
+ }
636
+ interface HasReviewsTest extends BasePageVariantTest<PageVariantTestType.HasReviews> {
637
+ reviewMinimum?: number;
638
+ }
639
+ interface InCollectionTest extends BasePageVariantTest<PageVariantTestType.InCollection> {
640
+ collections: string[];
641
+ }
642
+ interface HasMerchantTagTest extends BasePageVariantTest<PageVariantTestType.HasMerchantTag> {
643
+ merchantTags: string[];
644
+ }
645
+ interface ShopifyPLPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPLP> {}
646
+ interface ShopifyPDPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPDP> {}
647
+ interface PageCategoryTest extends BasePageVariantTest<PageVariantTestType.PageCategory> {
648
+ extractor: CategoryExtractor;
649
+ }
650
+ interface FeatureGateTest extends BasePageVariantTest<PageVariantTestType.FeatureGate> {
651
+ featureGate: FeatureGates;
652
+ }
653
+ interface ProductIdTest extends BasePageVariantTest<PageVariantTestType.ProductId> {
654
+ productIdExtractor: IdExtractor;
655
+ productIds: string[];
656
+ }
657
+ interface PlpIdTest extends BasePageVariantTest<PageVariantTestType.PlpId> {
658
+ plpIdExtractor: IdExtractor;
659
+ plpIds: string[];
660
+ }
661
+ interface QueryParamTest extends BasePageVariantTest<PageVariantTestType.QueryParam> {
662
+ queryParam: string;
663
+ }
664
+ interface UserHasInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasInteracted> {}
665
+ interface UserHasNotInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasNotInteracted> {}
666
+ interface IsLoadingTest extends BasePageVariantTest<PageVariantTestType.isLoading> {}
667
+ interface IsProductComparison extends BasePageVariantTest<PageVariantTestType.isProductComparison> {}
668
+ interface PageFallbackTest extends BasePageVariantTest<PageVariantTestType.Fallback> {}
669
+ interface UrlResolverTest extends BasePageVariantTest<PageVariantTestType.UrlResolver> {}
670
+ type PageVariantTest = PageCategoryTest | ShopifyPLPURLTest | ShopifyPDPURLTest | CatalogCategoryTest | TopCatalogCategory | HasReviewsTest | InCollectionTest | HasMerchantTagTest | FeatureGateTest | ProductIdTest | PlpIdTest | QueryParamTest | UserHasInteractedTest | UserHasNotInteractedTest | IsLoadingTest | IsProductComparison | PageFallbackTest | UrlResolverTest;
671
+ /**
672
+ * Configuration for the social proof embedded widget
673
+ *
674
+ * @param headerTitle - The title text to display in the widget header
675
+ * @param staticSuggestions - A list of strings to display as suggestions in the widget
676
+ * @param suggestionButtonVariantDefault - The variant of the suggestion button to display in the widget footer
677
+ * @param suggestionButtonVariantAccent - The variant of the suggestion button to display in the widget body
678
+ * @param staticImageIndex - Index of the imageUrl to use from the product response
679
+ */
680
+ interface SocialProofConfig {
681
+ customerQuery: string;
682
+ headerTitle: string;
683
+ staticPLPImagesLayout?: "grid" | "horizontal";
684
+ headerFontFamily?: string;
685
+ staticPLPImageNames?: string[];
686
+ staticImageIndex?: number;
687
+ suggestionButtonStrings: string[];
688
+ suggestionButtonVariantDefault: SuggestionButtonVariant;
689
+ suggestionButtonVariantAccent?: SuggestionButtonVariant;
690
+ suggestionButtonDataAttributes?: Record<string, string>;
691
+ userQueryButtonConfig?: UserQueryButtonConfig;
692
+ logoName?: string;
693
+ }
694
+ /**
695
+ * Configuration for creating the mount point for a widget
696
+ *
697
+ * @param className - Optional class name to apply to the mount point. Tailwind classes are supported
698
+ * and encouraged. Use this parameter to style the mounting container for the widget.
699
+ */
700
+ type WidgetMountingConfig = {
701
+ mountingConfigId: string;
702
+ containerId: string;
703
+ testId: string;
704
+ parentInsertionPoint?: InsertionPoint;
705
+ insertionPoint: InsertionPoint;
706
+ gridInsertionType?: GridInsertionType;
707
+ wrappingElement?: WrappingElement;
708
+ divCheckSelector?: string;
709
+ suppressionSelector?: string;
710
+ style?: Partial<CSSStyleDeclaration>;
711
+ className?: string;
712
+ dataAttributes?: Record<string, string>;
713
+ };
714
+ type StaticWidgetMounting = {
715
+ mountingConfigId: string;
716
+ widgetConfigId: string;
717
+ };
718
+ type DynamicWidgetMounting = {
719
+ mountingConfigId: string;
720
+ mountingPointWidgets: WidgetDisplayTests[];
721
+ };
722
+ type WidgetDisplayTests = {
723
+ tests: PageVariantTest[];
724
+ widgetConfigId: string;
725
+ };
726
+ type WidgetMounting = StaticWidgetMounting | DynamicWidgetMounting;
727
+ declare enum WidgetType {
728
+ ChatPreview = "ChatPreview",
729
+ SocialProofV2 = "SocialProofV2",
730
+ ChatPreviewV2 = "ChatPreviewV2",
731
+ ChatPreviewIsLoading = "ChatPreviewIsLoading",
732
+ ChatPreviewPostInteraction = "ChatPreviewPostInteraction",
733
+ ChatPreviewProductComparison = "ChatPreviewProductComparison",
734
+ SuggestionBar = "SuggestionBar",
735
+ SuggestionBarV2 = "SuggestionBarV2",
736
+ ImagePromptCard = "ImagePromptCard",
737
+ ImageBanner = "ImageBanner",
738
+ SingleImagePrompt = "SingleImagePrompt",
739
+ SearchPrompt = "SearchPrompt",
740
+ SearchZeroStateEntryPoint = "SearchZeroStateEntryPoint",
741
+ SearchResultsEntryPoint = "SearchResultsEntryPoint",
742
+ SearchOverlayHost = "SearchOverlayHost",
743
+ NoOp = "NoOp",
744
+ }
745
+ type WidgetConfig = ChatPreviewWidgetConfig | SocialProofV2WidgetConfig | ChatPreviewV2WidgetConfig | ChatPreviewPostInteractionWidgetConfig | ChatPreviewIsLoadingWidgetConfig | ChatPreviewProductComparisonWidgetConfig | SuggestionBarWidgetV2Config | ImagePromptWidgetConfig | ImageBannerWidgetConfig | SingleImagePromptWidgetConfig | SearchPromptWidgetConfig | SearchEntryPointWidgetConfig | SearchResultsEntryPointWidgetConfig | SearchOverlayHostWidgetConfig | NoOpWidgetConfig;
746
+ interface BaseWidgetConfig<T extends WidgetType> {
747
+ widgetConfigId: string;
748
+ type: T;
749
+ contentId?: string;
750
+ }
751
+ interface ImageBannerWidgetConfig extends BaseWidgetConfig<WidgetType.ImageBanner> {
752
+ imageSrc: string;
753
+ title: string;
754
+ subtitle: string;
755
+ assistantMessage: string;
756
+ }
757
+ interface ChatPreviewWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreview> {
758
+ variant: "filled" | "flat" | "outlined";
759
+ addSeparators?: boolean;
760
+ socialProofConfig?: SocialProofConfig;
761
+ footerConfig?: ChatPreviewFooterConfig;
762
+ }
763
+ interface ChatPreviewHeaderV2Config {
764
+ title?: string;
765
+ imageSrc?: string;
766
+ imageHeight?: number;
767
+ }
768
+ type SingleImageConfig = {
769
+ layout: "single";
770
+ imageIndex: number;
771
+ };
772
+ type MultiImageConfig = {
773
+ layout: "grid" | "horizontal";
774
+ imageNames: string[];
775
+ };
776
+ type SocialProofImageConfig = SingleImageConfig | MultiImageConfig;
777
+ type ChatPreviewSuggestionButtonConfig = {
778
+ buttonStrings: string[];
779
+ accentButtonVariants?: {
780
+ button: SuggestionButtonVariant;
781
+ hover: SuggestionButtonVariant;
782
+ };
783
+ buttonVariants: {
784
+ button: SuggestionButtonVariant;
785
+ hover: SuggestionButtonVariant;
786
+ };
787
+ numRows?: NumRows;
788
+ };
789
+ type ChatPreviewAnimatedTextConfig = {
790
+ leadingText: string;
791
+ animatedStrings: string[];
792
+ };
793
+ type ChatPreviewVariant = {
794
+ variant: "flat";
795
+ } | {
796
+ variant: "filled";
797
+ backgroundFillColor: string;
798
+ } | {
799
+ variant: "outlined";
800
+ };
801
+ interface BaseChatPreviewConfig {
802
+ headerConfig: ChatPreviewHeaderV2Config;
803
+ suggestionButtonsConfig: ChatPreviewSuggestionButtonConfig;
804
+ userQueryButtonConfig: UserQueryButtonConfig;
805
+ chatPreviewVariant: ChatPreviewVariant;
806
+ addSeparators?: boolean;
807
+ }
808
+ interface ChatPreviewPostInteractionWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewPostInteraction>, BaseChatPreviewConfig {
809
+ chatPreviewVariant: ChatPreviewVariant;
810
+ addSeparators?: boolean;
811
+ }
812
+ interface ChatPreviewIsLoadingWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewIsLoading>, BaseChatPreviewConfig {}
813
+ interface ChatPreviewProductComparisonWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewProductComparison>, BaseChatPreviewConfig {
814
+ useLargeProductComparison?: boolean;
815
+ }
816
+ interface ChatPreviewV2WidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewV2>, BaseChatPreviewConfig {
817
+ animatedTextConfig: ChatPreviewAnimatedTextConfig;
818
+ }
819
+ interface SocialProofV2WidgetConfig extends BaseWidgetConfig<WidgetType.SocialProofV2>, BaseChatPreviewConfig {
820
+ customerQuery?: string;
821
+ imageConfig: SocialProofImageConfig;
822
+ }
823
+ interface SuggestionBarWidgetV2Config extends BaseWidgetConfig<WidgetType.SuggestionBarV2> {
824
+ metricDisplayLocation: ChatElementDisplayLocation;
825
+ location: SuggestionBarLocationForMetrics;
826
+ variant: SuggestionButtonVariant;
827
+ hoverVariant: SuggestionButtonVariant;
828
+ buttonTexts: {
829
+ default: string[];
830
+ productSpecific?: {
831
+ [productId: string]: string[];
832
+ };
833
+ };
834
+ boldFirstButton?: boolean;
835
+ twoRowsOnMobile?: boolean;
836
+ animationSpeed?: "standard" | "slow" | "none";
837
+ buttonBorderRadius?: "sm" | "md" | "lg";
838
+ }
839
+ interface ImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.ImagePromptCard> {
840
+ url: string;
841
+ lightText?: boolean;
842
+ title: string;
843
+ subtitle: string[];
844
+ staticSuggestionCopies: string[];
845
+ userQueryButtonConfig: UserQueryButtonConfig;
846
+ fallbackBackgroundColor?: string;
847
+ }
848
+ interface SingleImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.SingleImagePrompt> {
849
+ title: string;
850
+ staticSuggestionCopies: string[];
851
+ userQueryButtonConfig: UserQueryButtonConfig;
852
+ }
853
+ interface SearchEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchZeroStateEntryPoint> {
854
+ searchZeroStateVariant: SearchZeroStateVariant;
855
+ searchInputVariant: SearchInputVariant;
856
+ searchIconVariant?: SearchIconVariant;
857
+ searchIconSize?: number;
858
+ suggestionButtonConfig: SuggestionButtonConfig;
859
+ layout: SearchZeroStateLayout;
860
+ searchBoxPlaceholder: string;
861
+ animationSpeed?: "standard" | "slow" | "none";
862
+ compactLabel?: string;
863
+ initialSuggestions?: string[];
864
+ usingPortal?: boolean;
865
+ }
866
+ interface NoOpWidgetConfig extends BaseWidgetConfig<WidgetType.NoOp> {}
867
+ interface SearchOverlayHostWidgetConfig extends BaseWidgetConfig<WidgetType.SearchOverlayHost> {}
868
+ interface SearchResultsEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchResultsEntryPoint> {
869
+ searchInputVariant: SearchInputVariant;
870
+ searchFilterSidebarVariant: SearchFilterSidebarVariant;
871
+ productGridVariant: ProductGridVariant;
872
+ searchBoxPlaceholder: string;
873
+ noResultsFoundText?: string;
874
+ }
875
+ interface WidgetHeaderProps extends TestProps {
876
+ title?: string;
877
+ logo?: string;
878
+ logoHeight?: number;
879
+ orgShortName: string;
880
+ variant?: SearchPromptVariant;
881
+ }
882
+ interface UserQueryOptions {
883
+ footerVariant?: "standard";
884
+ replyButtonText?: string;
885
+ replyButtonIcon?: "magnifyingGlass" | "send" | "thinMagnifyingGlass" | "ai-search";
886
+ }
887
+ type SearchPromptVariant = "primary";
888
+ interface SearchPromptWidgetConfig extends BaseWidgetConfig<WidgetType.SearchPrompt> {
889
+ variant: SearchPromptVariant;
890
+ title: string;
891
+ headerConfig: WidgetHeaderProps;
892
+ suggestionButtons: {
893
+ variant: SuggestionButtonVariant;
894
+ hoverVariant: SuggestionButtonVariant;
895
+ buttonTexts: string[];
896
+ };
897
+ footerConfig?: UserQueryOptions;
898
+ }
899
+ type PageVariantBase = {
900
+ variantId: string;
901
+ widgetMounting: WidgetMounting[];
902
+ variantTests: PageVariantTest[];
903
+ };
904
+ type PLPPageVariant = PageVariantBase & {
905
+ variantType: "plp";
906
+ plpIdExtractor: IdExtractor;
907
+ };
908
+ type PDPPageVariant = PageVariantBase & {
909
+ variantType: "pdp";
910
+ parentProductIdExtractor?: IdExtractor;
911
+ productIdExtractor: IdExtractor;
912
+ };
913
+ type VisitPageVariant = PageVariantBase & {
914
+ variantType: "page_visit";
915
+ };
916
+ type OtherPageVariant = PageVariantBase & {
917
+ variantType: "other";
918
+ };
919
+ type HomePageVariant = PageVariantBase & {
920
+ variantType: "homepage";
921
+ };
922
+ type SearchPageVariant = PageVariantBase & {
923
+ variantType: "search";
924
+ };
925
+ type PageVariantConfig = PLPPageVariant | PDPPageVariant | VisitPageVariant | OtherPageVariant | HomePageVariant | SearchPageVariant;
926
+ type OrgPageConfig = {
927
+ pageVariants: PageVariantConfig[];
928
+ widgetConfigs: Record<string, WidgetConfig>;
929
+ mountingConfigs: Record<string, WidgetMountingConfig>;
930
+ };
931
+ type OrgConfig$1 = OrgUIConfig;
932
+ interface EnviveConfig {
933
+ amplitudeApiKey?: string;
934
+ dataResidency?: string;
935
+ env?: string;
936
+ baseUrl?: string;
937
+ reactAppName?: string;
938
+ cdnUrl?: string;
939
+ contextSource?: string;
940
+ orgLevelApiKey?: string;
941
+ orgShortName?: string;
942
+ identifyingPrefix?: string;
943
+ featureOverrides?: Record<string, boolean>;
944
+ variantUrlOverride?: string;
945
+ variantInfoOverride?: any;
946
+ show?: boolean;
947
+ publicKey?: string;
948
+ featureGates?: OrgConfigFeatureGate[];
949
+ }
950
+ //#endregion
951
+ //#region src/application/models/frontendConfig.d.ts
952
+ interface FrontendConfig {
953
+ merchant_override_css?: string;
954
+ pageVariants?: PageVariantConfig[];
955
+ mountingConfigs?: Record<string, WidgetMountingConfig>;
956
+ widgetConfigs?: Record<string, WidgetConfig>;
957
+ uiConfigs?: Omit<OrgUIConfig, "merchantOverrideCss">;
958
+ }
959
+ //#endregion
960
+ //#region src/application/models/googleAnalyticsEvents.d.ts
961
+ declare enum GoogleAnalyticsEvents {
962
+ ADD_TO_CART_v1 = "add_to_cart",
963
+ ADD_TO_CART_v2 = "addToCart",
964
+ }
965
+ //#endregion
966
+ //#region src/application/models/message.d.ts
967
+ declare enum MessageRole {
968
+ User = "user",
969
+ Assistant = "assistant",
970
+ }
971
+ declare enum MessageType {
972
+ Text = "text",
973
+ SuggestionClicked = "suggestion_clicked",
974
+ Product = "product",
975
+ ProductSearch = "product_search",
976
+ Review = "review",
977
+ QueryTyped = "query_typed",
978
+ Separator = "separator",
979
+ Page = "page",
980
+ Search = "search",
981
+ Attachment = "attachment",
982
+ CXAgentResponse = "cx_agent_response",
983
+ Form = "form",
984
+ Order = "order",
985
+ ProductSearchFilter = "product_search_filter",
986
+ }
987
+ type Message = {
988
+ id: string;
989
+ role: MessageRole;
990
+ createdAt: string;
991
+ } & (TextMessageMetadata | QueryTypedMetadata | SuggestionMessageMetadata | ProductMessageMetadata | ProductSearchMessageMetadata | ReviewMessageMetadata | SeparatorMessageMetadata | PageMessageMetadata | SearchMessageMetadata | AttachmentMetadata | CXAgentResponseMetadata | FormMessageMetadata | OrderMessageMetadata | ProductSearchFilterMetadata);
992
+ type AttachmentMetadata = {
993
+ type: MessageType.Attachment;
994
+ metadata: {
995
+ message?: string;
996
+ attachment: CustServiceAttachment[];
997
+ };
998
+ };
999
+ type CXAgentResponseMetadata = {
1000
+ type: MessageType.CXAgentResponse;
1001
+ metadata: {
1002
+ message: string;
1003
+ agentName: string;
1004
+ };
1005
+ };
1006
+ type TextMessageMetadata = {
1007
+ type: MessageType.Text;
1008
+ metadata: TextResponseAttributes['attributes'];
1009
+ };
1010
+ type QueryTypedMetadata = {
1011
+ type: MessageType.QueryTyped;
1012
+ metadata: TextResponseAttributes['attributes'];
1013
+ };
1014
+ type SuggestionMessageMetadata = {
1015
+ type: MessageType.SuggestionClicked;
1016
+ metadata: {
1017
+ suggestionId: string;
1018
+ suggestionContent: string;
1019
+ };
1020
+ };
1021
+ type ProductMessageMetadata = {
1022
+ type: MessageType.Product;
1023
+ metadata: ProductResponseAttributes['attributes'];
1024
+ };
1025
+ type ProductSearchMessageMetadata = {
1026
+ type: MessageType.ProductSearch;
1027
+ metadata: SearchProductResponseAttributes['attributes'];
1028
+ };
1029
+ type ReviewMessageMetadata = {
1030
+ type: MessageType.Review;
1031
+ metadata: ReviewResponseAttributes['attributes'];
1032
+ };
1033
+ type SeparatorMessageMetadata = {
1034
+ type: MessageType.Separator;
1035
+ };
1036
+ type PageMessageMetadata = {
1037
+ type: MessageType.Page;
1038
+ metadata: PageResponseAttributes['attributes'];
1039
+ };
1040
+ type SearchMessageMetadata = {
1041
+ type: MessageType.Search;
1042
+ metadata: SearchResponseAttributes['attributes'];
1043
+ };
1044
+ type ProductSearchFilterMetadata = {
1045
+ type: MessageType.ProductSearchFilter;
1046
+ metadata: SearchProductFilterAttributes['attributes'];
1047
+ };
1048
+ type FormField = {
1049
+ key: string;
1050
+ title: string;
1051
+ type: AcceptableFormFieldType;
1052
+ required: boolean;
1053
+ format?: 'email';
1054
+ value?: string;
1055
+ };
1056
+ type FormMessageMetadata = {
1057
+ type: MessageType.Form;
1058
+ metadata: {
1059
+ formType?: FormType;
1060
+ fields: FormField[];
1061
+ };
1062
+ };
1063
+ type OrderMessageMetadata = {
1064
+ type: MessageType.Order;
1065
+ metadata: OrderResponseAttributes$1['attributes'];
1066
+ };
1067
+ //#endregion
1068
+ //#region src/application/models/mobilePLPChatPlacementParameter.d.ts
1069
+ interface MobilePLPChatPlacementParameter {
1070
+ rowIndex: number;
1071
+ }
1072
+ //#endregion
1073
+ //#region src/application/models/orgsEnum.d.ts
1074
+ declare const OrgShortName: {
1075
+ readonly Coterie: "coterie";
1076
+ readonly ForLoveAndLemons: "for-love-and-lemons";
1077
+ readonly Greenpan: "greenpan";
1078
+ readonly JordanCraig: "jordan-craig";
1079
+ readonly LarryAndSerges: "larry_and_serges";
1080
+ readonly LeapsAndRebounds: "leaps-and-rebounds";
1081
+ readonly MantraBrand: "mantra-brand";
1082
+ readonly Spanx: "spanx";
1083
+ readonly SpanxStaging: "staging-spanx";
1084
+ readonly Supergoop: "supergoop";
1085
+ readonly UniqueVintage: "unique-vintage";
1086
+ readonly JackArcher: "jack-archer";
1087
+ readonly SkinPerfection: "skin-perfection";
1088
+ readonly LookOptic: "look-optic";
1089
+ readonly FiveCbd: "five-cbd";
1090
+ readonly SnapSupplements: "snap-supplements";
1091
+ readonly Longevityrx: "longevityrx";
1092
+ readonly VenaCbd: "vena-cbd";
1093
+ readonly Medterra: "medterra";
1094
+ readonly Modells: "modells";
1095
+ readonly PressedFloral: "pressed-floral";
1096
+ readonly KindredBravely: "kindred-bravely";
1097
+ readonly WineEnthusiast: "wine-enthusiast";
1098
+ readonly HomegrownCannabis: "homegrown-cannabis";
1099
+ readonly DreamlandBaby: "dreamland-baby";
1100
+ readonly Bandolier: "bandolier";
1101
+ readonly WestonJonBoucher: "weston-jon-boucher";
1102
+ readonly KutFromTheKloth: "kut-from-the-kloth";
1103
+ readonly GrooveLife: "groove-life";
1104
+ readonly Carpe: "carpe";
1105
+ readonly WolfTactical: "wolf-tactical";
1106
+ readonly WolfMattress: "wolfmattress";
1107
+ readonly Default: "default";
1108
+ };
1109
+ //#endregion
1110
+ //#region src/application/models/productExperiment.d.ts
1111
+ declare enum ProductExperiment {
1112
+ Default = "default",
1113
+ }
1114
+ //#endregion
1115
+ //#region src/application/models/spanxTakeAQuizCtaParameter.d.ts
1116
+ interface SpanxTakeAQuizCtaParameter {
1117
+ text?: string;
1118
+ value?: string;
1119
+ }
1120
+ //#endregion
1121
+ //#region src/application/models/spiffyWidgets.d.ts
1122
+ /**
1123
+ * Enum of all widget names. These are widgets that are rendered and integrated into
1124
+ * a merchant's website.
1125
+ */
1126
+ declare enum SpiffyWidgets {
1127
+ ImageBanner = "image_banner",
1128
+ ImagePromptCard = "image_prompt_card",
1129
+ SingleImagePrompt = "single_image_prompt",
1130
+ EmbeddedWidget = "embedded_widget",
1131
+ FloatingButton = "floating_button",
1132
+ SuggestionBar = "suggestion_bar",
1133
+ SearchPrompt = "search_prompt",
1134
+ GlobalSearch = "global_search",
1135
+ SearchResults = "search_results",
1136
+ GlobalSearchEntryPoint = "global_search_entry_point",
1137
+ }
1138
+ //#endregion
1139
+ //#region src/application/models/supportedOrgs.d.ts
1140
+ type BasicOrgInfoType = {
1141
+ shortName: string;
1142
+ name: string;
1143
+ domain: string;
1144
+ defaultProductId: string;
1145
+ alwaysEnabledMerchants: boolean;
1146
+ orgUIConfig: () => OrgUIConfig | undefined;
1147
+ orgPageConfig: () => OrgPageConfig;
1148
+ orgColors: () => ColorMapping | {};
1149
+ };
1150
+ declare const getOrgInfo: (orgShortName?: string) => Promise<BasicOrgInfoType>;
1151
+ //#endregion
1152
+ //#region src/application/models/api/context.d.ts
1153
+ interface Context$1 extends CamelCasedPropertiesDeep<Context> {}
1154
+ //#endregion
1155
+ //#region src/application/models/api/generationParams.d.ts
1156
+ interface GenerationParams$1 extends CamelCasedPropertiesDeep<GenerationParams> {}
1157
+ //#endregion
1158
+ //#region src/application/models/api/userEvent.d.ts
1159
+ interface PDPAttributes$1 extends CamelCasedPropertiesDeep<PDPAttributes> {}
1160
+ interface PLPAttributes$1 extends CamelCasedPropertiesDeep<PLPAttributes> {}
1161
+ interface SearchAttributes$1 extends CamelCasedPropertiesDeep<SearchAttributes> {}
1162
+ interface QueryTypedAttributes$1 extends CamelCasedPropertiesDeep<QueryTypedAttributes> {}
1163
+ interface FormSubmittedAttributes$1 {
1164
+ filledSchema: Record<string, unknown>;
1165
+ formResponseId: string;
1166
+ formType: FormType;
1167
+ }
1168
+ interface PageVisitAttributes {
1169
+ url: string;
1170
+ pageVisitCategory: PageVisitCategory;
1171
+ }
1172
+ interface SuggestionClickedAttributes$1 extends CamelCasedPropertiesDeep<SuggestionClickedAttributes> {}
1173
+ type UserEventAttributes = PDPAttributes$1 | PLPAttributes$1 | QueryTypedAttributes$1 | SearchAttributes$1 | SuggestionClickedAttributes$1 | PageVisitAttributes;
1174
+ interface PDPUserEvent {
1175
+ category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
1176
+ attributes: PDPAttributes$1;
1177
+ }
1178
+ interface PLPUserEvent {
1179
+ category: UserEventCategory.PlpVisit;
1180
+ attributes: PLPAttributes$1;
1181
+ }
1182
+ interface QueryTypedUserEvent {
1183
+ category: UserEventCategory.QueryTyped;
1184
+ attributes: QueryTypedAttributes$1;
1185
+ }
1186
+ interface SearchUserEvent {
1187
+ category: UserEventCategory.Search;
1188
+ attributes: SearchAttributes$1;
1189
+ }
1190
+ interface SuggestionsClickedUserEvent {
1191
+ category: UserEventCategory.SuggestionClicked;
1192
+ attributes: SuggestionClickedAttributes$1;
1193
+ }
1194
+ interface AppLoadedUserEvent {
1195
+ category: UserEventCategory.AppLoaded;
1196
+ }
1197
+ interface AppUnloadedEvent {
1198
+ category: UserEventCategory.AppUnloaded;
1199
+ }
1200
+ interface PageVisitEvent {
1201
+ category: UserEventCategory.PageVisit;
1202
+ attributes: PageVisitAttributes;
1203
+ }
1204
+ interface FormSubmitted {
1205
+ category: UserEventCategory.FormSubmitted;
1206
+ attributes: FormSubmittedAttributes$1;
1207
+ }
1208
+ type UserEvent$1 = CamelCasedPropertiesDeep<Pick<UserEvent, 'event_id' | 'category' | 'created_at'>> & (SuggestionsClickedUserEvent | AppLoadedUserEvent | PDPUserEvent | QueryTypedUserEvent | SearchUserEvent | AppUnloadedEvent | PLPUserEvent | PageVisitEvent | FormSubmitted);
1209
+ //#endregion
1210
+ //#region src/application/models/api/nextMessageRequest.d.ts
1211
+ interface NextMessageRequest$1 {
1212
+ id: string;
1213
+ context: Context$1;
1214
+ userEvents?: UserEvent$1[];
1215
+ featureFlags?: Record<string, boolean>;
1216
+ generationParams?: GenerationParams$1;
1217
+ }
1218
+ //#endregion
1219
+ //#region src/application/models/api/search.d.ts
1220
+ interface ProductSearchResponse$1 extends CamelCasedPropertiesDeep<ProductSearchResponse> {}
1221
+ interface ProductSearchResponseAttributes$1 extends CamelCasedPropertiesDeep<ProductSearchResponseAttributes> {}
1222
+ interface SearchResult {
1223
+ products: SearchResponseProduct[];
1224
+ filters: string[];
1225
+ generatedQuery?: string;
1226
+ totalProductCount: number;
1227
+ searchResponseId: string;
1228
+ }
1229
+ interface SearchParams {
1230
+ query: string;
1231
+ limit?: number;
1232
+ }
1233
+ //#endregion
1234
+ //#region src/application/models/api/suggestion.d.ts
1235
+ interface Suggestion$1 extends CamelCasedPropertiesDeep<Suggestion> {}
1236
+ //#endregion
1237
+ //#region src/application/models/api/supportedEventRequest.d.ts
1238
+ interface SupportedEventRequest$1 {
1239
+ id: string;
1240
+ context: Context$1;
1241
+ userEvent: UserEvent$1;
1242
+ }
1243
+ //#endregion
1244
+ //#region src/application/models/graphql/queries/getMerchantOrgIdQuery.d.ts
1245
+ declare const getMerchantOrgIdQuery = "\n query {\n me {\n org {\n id\n }\n }\n }\n";
1246
+ //#endregion
1247
+ //#region src/application/models/guards/isBaseEcommerceEvent.d.ts
1248
+ /**
1249
+ * Checks if an event is a base Google Analytics ecommerce event.
1250
+ *
1251
+ * @param data The event to check.
1252
+ *
1253
+ * @returns True if the event is a base ecommerce event, false otherwise.
1254
+ */
1255
+ declare const isBaseEcommerceEvent: (data: unknown) => data is BaseEcommerceEvent;
1256
+ //#endregion
1257
+ //#region src/application/models/guards/isGA4EcommerceEvent.d.ts
1258
+ /**
1259
+ * Checks if an event is a Google Analytics 4 ecommerce event.
1260
+ *
1261
+ * @param data The event to check.
1262
+ *
1263
+ * @returns True if the event is a GA4 ecommerce event, false otherwise.
1264
+ */
1265
+ declare const isGA4EcommerceEvent: (data: unknown) => data is GA4EcommerceEvent;
1266
+ //#endregion
1267
+ //#region src/application/models/guards/isLegacyUAEcommerceEvent.d.ts
1268
+ /**
1269
+ * Checks if an event is a legacy Universal Analytics ecommerce event.
1270
+ *
1271
+ * @param data The event to check.
1272
+ *
1273
+ * @returns True if the event is a legacy UA ecommerce event, false otherwise.
1274
+ */
1275
+ declare const isLegacyUAEcommerceEvent: (data: unknown) => data is UAEcommerceEvent;
1276
+ //#endregion
1277
+ //#region src/application/models/guards/isMobilePLPChatPlacementParameter.d.ts
1278
+ interface MobilePlpChatPlacementParameter {
1279
+ row_index: number;
1280
+ }
1281
+ declare const isMobilePLPChatPlacementParameter: (value: unknown) => value is MobilePlpChatPlacementParameter;
1282
+ //#endregion
1283
+ //#region src/application/models/guards/isSpanxTakeAQuizCtaParameter.d.ts
1284
+ declare const isSpanxTakeAQuizCtaParameter: (value: unknown) => value is SpanxTakeAQuizCtaParameter;
1285
+ //#endregion
1286
+ //#region src/application/models/guards/isVariantInfo.d.ts
1287
+ /**
1288
+ * Type guard to check if an object is a valid VariantInfo.
1289
+ *
1290
+ * @param variantInfo - The unknown object to check.
1291
+ *
1292
+ * @returns True if the data is a valid VariantInfo object, false otherwise.
1293
+ */
1294
+ declare const isVariantInfo: (variantInfo: unknown) => variantInfo is VariantInfo;
1295
+ //#endregion
1296
+ //#region src/application/models/guards/utils.d.ts
1297
+ /**
1298
+ * Checks if an object has a property of a specific type
1299
+ *
1300
+ * @param obj - The object to check
1301
+ * @param prop - The property name to check
1302
+ * @param type - The expected type of the property
1303
+ * @param isOptional - Whether the property is optional (defaults to false)
1304
+ *
1305
+ * @returns boolean indicating if the object has the property of the specified type
1306
+ */
1307
+ declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
1308
+ //#endregion
1309
+ //#region src/application/models/guards/api/isApiFormResponse.d.ts
1310
+ /**
1311
+ * Type guard to check if the provided data has the all of the properties (with the correct types) of
1312
+ * a FormResponseAttribute
1313
+ *
1314
+ * @param data - The data to check
1315
+ *
1316
+ * @returns true if the data has the correct properties, false otherwise
1317
+ */
1318
+ declare const isApiFormResponseAttributes: (data: unknown) => data is ApiFormResponseAttributes;
1319
+ //#endregion
1320
+ //#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.d.ts
1321
+ declare const isApiFormSubmittedResponseAttributes: (data: unknown) => data is FormSubmittedAttributes;
1322
+ //#endregion
1323
+ //#region src/application/models/guards/api/isApiOrderResponseAttributes.d.ts
1324
+ interface ApiOrderItemInfo extends Omit<OrderItemInfo, 'delivered_at' | 'estimated_delivery_at' | 'in_transit_at'> {
1325
+ delivered_at?: string;
1326
+ estimated_delivery_at?: string;
1327
+ in_transit_at?: string;
1328
+ }
1329
+ interface ApiOrderResponseAttributes extends Omit<OrderResponseAttributes, 'created_at' | 'latest_event_date' | 'line_items'> {
1330
+ created_at: string;
1331
+ latest_event_date: string;
1332
+ line_items: ApiOrderItemInfo[];
1333
+ }
1334
+ declare const isApiOrderResponseAttributes: (data: unknown) => data is ApiOrderResponseAttributes;
1335
+ //#endregion
1336
+ //#region src/application/models/guards/api/isApiOrganizationConfig.d.ts
1337
+ interface ApiOrgAnalyticsConfigAmplitude {
1338
+ session_replay_enabled: boolean;
1339
+ session_replay_sample_rate: number;
1340
+ tracking_enabled: boolean;
1341
+ }
1342
+ interface ApiOrgAnalyticsConfigCustomerService {
1343
+ provider: string;
1344
+ }
1345
+ interface ApiOrgAnalyticsConfigGoogleAnalytics {
1346
+ measurement_id: string;
1347
+ }
1348
+ interface ApiOrgAnalyticsConfig {
1349
+ amplitude?: ApiOrgAnalyticsConfigAmplitude;
1350
+ customer_service?: ApiOrgAnalyticsConfigCustomerService;
1351
+ google_analytics?: ApiOrgAnalyticsConfigGoogleAnalytics;
1352
+ }
1353
+ interface ApiOrganizationConfig extends OrganizationConfig {
1354
+ config: ApiOrgAnalyticsConfig;
1355
+ }
1356
+ /**
1357
+ *
1358
+ * @param data
1359
+ * @returns
1360
+ */
1361
+ declare const isApiOrganizationConfig: (data: unknown) => data is ApiOrganizationConfig;
1362
+ //#endregion
1363
+ //#region src/application/models/guards/api/isApiOrgConfigResults.d.ts
1364
+ interface ApiOrgConfigResults {
1365
+ configs: ApiOrganizationConfig[];
1366
+ experiments: StatsigExperiment[];
1367
+ gates: StatsigFeatureGate[];
1368
+ org: OrganizationSettings;
1369
+ }
1370
+ /**
1371
+ *
1372
+ * @param data
1373
+ * @returns
1374
+ */
1375
+ declare const isApiOrgConfigResults: (data: unknown) => data is Required<ApiOrgConfigResults>;
1376
+ //#endregion
1377
+ //#region src/application/models/guards/api/isApiPageResponseAttributes.d.ts
1378
+ declare const isApiPageResponseAttributes: (obj: unknown) => obj is ApiPageResponseAttributes;
1379
+ //#endregion
1380
+ //#region src/application/models/guards/api/isApiPLPEventAttributes.d.ts
1381
+ declare const isApiPLPIdAttribute: (data: unknown) => data is PLPIdAttributes;
1382
+ declare const isApiPLPEventAttributes: (data: unknown) => data is PLPAttributes;
1383
+ //#endregion
1384
+ //#region src/application/models/guards/api/isApiProductSearchFilterAttributes.d.ts
1385
+ declare const isApiProductSearchFilterResponseAttributes: (attributes: unknown) => attributes is ProductSearchFilterResponseAttributes;
1386
+ //#endregion
1387
+ //#region src/application/models/guards/graphQL/isGraphQLColorsConfig.d.ts
1388
+ declare const isGraphQLColorsConfig: (data: unknown) => data is GetMerchantColorsQueryData;
1389
+ //#endregion
1390
+ //#region src/application/models/utilityTypes/delimiterCase.d.ts
1391
+ type UpperCaseToLowerCase<T extends string> = T extends Uppercase<T> ? Lowercase<T> : T;
1392
+ type SplitIncludingDelimiters_<Source extends string, Delimiter extends string> = Source extends '' ? [] : Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` ? UsedDelimiter extends Delimiter ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` ? [...SplitIncludingDelimiters<FirstPart, Delimiter>, UsedDelimiter, ...SplitIncludingDelimiters<SecondPart, Delimiter>] : never : never : never : [Source];
1393
+ /**
1394
+ * Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters.
1395
+ *
1396
+ * @category Template literal
1397
+ */
1398
+ type SplitIncludingDelimiters<Source extends string, Delimiter extends string> = SplitIncludingDelimiters_<UpperCaseToLowerCase<Source>, Delimiter>;
1399
+ /**
1400
+ *Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing.
1401
+ *
1402
+ *@see StringArrayToDelimiterCase
1403
+ */
1404
+ type StringPartToDelimiterCase<StringPart extends string, Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = StringPart extends UsedWordSeparators ? Delimiter : Start extends true ? Lowercase<StringPart> : StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase<StringPart>}` : StringPart;
1405
+ /**
1406
+ * Takes the result of a splitted string literal and recursively concatenates it together into the desired casing.
1407
+ *
1408
+ * It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated.
1409
+ *
1410
+ * @see SplitIncludingDelimiters
1411
+ */
1412
+ type StringArrayToDelimiterCase<Parts extends readonly any[], Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts] ? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}` : Parts extends [string] ? string : '';
1413
+ /**
1414
+ * Convert a string literal to a custom string delimiter casing.
1415
+ *
1416
+ * This can be useful when, for example, converting a camel-cased object property to an oddly cased one.
1417
+ *
1418
+ * @see KebabCase
1419
+ * @see SnakeCase
1420
+ *
1421
+ * @example
1422
+ * ```
1423
+ * import type {DelimiterCase} from 'type-fest';
1424
+ *
1425
+ * // Simple
1426
+ *
1427
+ * const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar';
1428
+ *
1429
+ * // Advanced
1430
+ *
1431
+ * type OddlyCasedProperties<T> = {
1432
+ * [K in keyof T as DelimiterCase<K, '#'>]: T[K]
1433
+ * };
1434
+ *
1435
+ * interface SomeOptions {
1436
+ * dryRun: boolean;
1437
+ * includeFile: string;
1438
+ * foo: number;
1439
+ * }
1440
+ *
1441
+ * const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
1442
+ * 'dry#run': true,
1443
+ * 'include#file': 'bar.js',
1444
+ * foo: 123
1445
+ * };
1446
+ * ```
1447
+ *
1448
+ * @category Change case
1449
+ * @category Template literal
1450
+ */
1451
+ type DelimiterCase<Value, Delimiter extends string> = string extends Value ? Value : Value extends string ? StringArrayToDelimiterCase<SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>, true, WordSeparators, UpperCaseCharacters, Delimiter> : Value;
1452
+ //#endregion
1453
+ //#region src/application/models/utilityTypes/delimiterCasedPropertiesDeep.d.ts
1454
+ /**
1455
+ * Convert object properties to delimiter case recursively.
1456
+ *
1457
+ * This can be useful when, for example, converting some API types from a different style.
1458
+ *
1459
+ * @see DelimiterCase
1460
+ * @see DelimiterCasedProperties
1461
+ *
1462
+ * @example
1463
+ * ```
1464
+ * import type {DelimiterCasedPropertiesDeep} from 'type-fest';
1465
+ *
1466
+ * interface User {
1467
+ * userId: number;
1468
+ * userName: string;
1469
+ * }
1470
+ *
1471
+ * interface UserWithFriends {
1472
+ * userInfo: User;
1473
+ * userFriends: User[];
1474
+ * }
1475
+ *
1476
+ * const result: DelimiterCasedPropertiesDeep<UserWithFriends, '-'> = {
1477
+ * 'user-info': {
1478
+ * 'user-id': 1,
1479
+ * 'user-name': 'Tom',
1480
+ * },
1481
+ * 'user-friends': [
1482
+ * {
1483
+ * 'user-id': 2,
1484
+ * 'user-name': 'Jerry',
1485
+ * },
1486
+ * {
1487
+ * 'user-id': 3,
1488
+ * 'user-name': 'Spike',
1489
+ * },
1490
+ * ],
1491
+ * };
1492
+ * ```
1493
+ *
1494
+ * @category Change case
1495
+ * @category Template literal
1496
+ * @category Object
1497
+ */
1498
+ type DelimiterCasedPropertiesDeep<Value, Delimiter extends string> = Value extends NonRecursiveType ? Value : Value extends UnknownArray ? DelimiterCasedPropertiesArrayDeep<Value, Delimiter> : Value extends Set<infer U> ? Set<DelimiterCasedPropertiesDeep<U, Delimiter>> : { [K in keyof Value as DelimiterCase<K, Delimiter>]: DelimiterCasedPropertiesDeep<Value[K], Delimiter> };
1499
+ type DelimiterCasedPropertiesArrayDeep<Value extends UnknownArray, Delimiter extends string> = Value extends [] ? [] : Value extends [infer U, ...infer V] ? [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [infer U, ...infer V] ? readonly [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? readonly [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends Array<infer U> ? Array<DelimiterCasedPropertiesDeep<U, Delimiter>> : Value extends ReadonlyArray<infer U> ? ReadonlyArray<DelimiterCasedPropertiesDeep<U, Delimiter>> : never;
1500
+ //#endregion
1501
+ //#region src/application/models/utilityTypes/snakeCasedPropertiesDeep.d.ts
1502
+ /**
1503
+ * Convert object properties to snake case recursively.
1504
+ *
1505
+ * This can be useful when, for example, converting some API types from a different style.
1506
+ *
1507
+ * @see SnakeCase
1508
+ * @see SnakeCasedProperties
1509
+ *
1510
+ * @example
1511
+ * ```
1512
+ * import type {SnakeCasedPropertiesDeep} from 'type-fest';
1513
+ *
1514
+ * interface User {
1515
+ * userId: number;
1516
+ * userName: string;
1517
+ * }
1518
+ *
1519
+ * interface UserWithFriends {
1520
+ * userInfo: User;
1521
+ * userFriends: User[];
1522
+ * }
1523
+ *
1524
+ * const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
1525
+ * user_info: {
1526
+ * user_id: 1,
1527
+ * user_name: 'Tom',
1528
+ * },
1529
+ * user_friends: [
1530
+ * {
1531
+ * user_id: 2,
1532
+ * user_name: 'Jerry',
1533
+ * },
1534
+ * {
1535
+ * user_id: 3,
1536
+ * user_name: 'Spike',
1537
+ * },
1538
+ * ],
1539
+ * };
1540
+ * ```
1541
+ *
1542
+ * @category Change case
1543
+ * @category Template literal
1544
+ * @category Object
1545
+ */
1546
+ type SnakeCasedPropertiesDeep<Value> = DelimiterCasedPropertiesDeep<Value, '_'>;
1547
+ //#endregion
1548
+ //#region src/application/models/utils/snakeToCamelTransformer.d.ts
1549
+ /**
1550
+ * Generic utility to transform snake_case object keys to camelCase at runtime.
1551
+ * This is the runtime equivalent of the CamelCasedPropertiesDeep type utility.
1552
+ */
1553
+ /**
1554
+ * Recursively transforms all object keys from snake_case to camelCase
1555
+ */
1556
+ declare const transformSnakeToCamel: (obj: unknown) => unknown;
1557
+ /**
1558
+ * Recursively transforms all object keys from camelCase to snake_case
1559
+ */
1560
+ declare const transformCamelToSnake: (obj: unknown) => unknown;
1561
+ //#endregion
1562
+ //#region src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.d.ts
1563
+ /**
1564
+ * Converts a string to a FulfillmentDisplayStatus enum value.
1565
+ *
1566
+ * @param status - The string to convert.
1567
+ *
1568
+ * @returns The FulfillmentDisplayStatus enum value or undefined if the string
1569
+ * does not map to a valid enum
1570
+ */
1571
+ declare const stringToFulfillmentDisplayStatusEnumValue: (status: string) => FulfillmentDisplayStatus | undefined;
1572
+ //#endregion
1573
+ //#region src/application/models/validators/validateGraphQLColorsConfig.d.ts
1574
+ declare const validateGraphQLColorsConfig: (data: unknown) => ColorMapping | undefined;
1575
+ //#endregion
1576
+ //#region src/application/models/validators/validateGraphQLFrontendConfig.d.ts
1577
+ declare const validateAndTransformPageVariants: (config: Record<string, unknown>) => PageVariantConfig;
1578
+ declare const validateAndTransformMountingConfig: (config: Record<string, unknown>, configKey: string) => WidgetMountingConfig;
1579
+ declare const validateAndTransformWidgetConfig: (config: Record<string, unknown>, configKey: string) => WidgetConfig;
1580
+ declare const validateGraphQLFrontendConfig: (data: unknown) => FrontendConfig | undefined;
1581
+ //#endregion
1582
+ //#region src/application/models/validators/validateGraphQLOrgId.d.ts
1583
+ declare const validateGraphQLOrgId: (data: unknown) => string | undefined;
1584
+ //#endregion
1585
+ //#region src/application/models/validators/validateMobilePLPChatPlacementParameter.d.ts
1586
+ declare const validateMobilePLPChatPlacementParameter: (value: unknown) => MobilePLPChatPlacementParameter | undefined;
1587
+ //#endregion
1588
+ //#region src/application/models/validators/validateOrganizationConfig.d.ts
1589
+ declare const validateOrganizationConfig: (data: unknown) => OrganizationConfig$1 | undefined;
1590
+ //#endregion
1591
+ //#region src/application/models/validators/validateOrgConfigResults.d.ts
1592
+ /**
1593
+ *
1594
+ * @param data
1595
+ * @returns
1596
+ */
1597
+ declare const validateOrgConfigResults: (data: unknown) => OrgConfig | undefined;
1598
+ //#endregion
1599
+ //#region src/application/models/validators/validateResponse.d.ts
1600
+ declare const validateResponse: (data: unknown) => Response$1 | undefined;
1601
+ //#endregion
1602
+ //#region src/application/models/validators/validateSuggestion.d.ts
1603
+ declare const validateSuggestion: (data: unknown) => Suggestion$1 | undefined;
1604
+ //#endregion
1605
+ //#region src/application/models/validators/validateUserEvent.d.ts
1606
+ declare const validateUserEvent: (data: unknown) => UserEvent$1 | undefined;
1607
+ //#endregion
1608
+ export { ApiOrderItemInfo, ApiOrderResponseAttributes, ApiOrganizationConfig, AppLoadedUserEvent, AppUnloadedEvent, BaseEcommerceEvent, BasicOrgInfoType, type CachedValue, type CategoryExtractor, CategoryExtractorType, ChatElementDisplayLocation, type ChatMessageConfig, type ChatMessageVariant, type ChatPreviewConfig, type ChatPreviewFooterConfig, type ChatPreviewHeaderConfig, type ChatPreviewHeaderV2Config, type ChatPreviewIsLoadingWidgetConfig, type ChatPreviewPostInteractionWidgetConfig, type ChatPreviewProductComparisonWidgetConfig, type ChatPreviewSuggestionButtonConfig, type ChatPreviewV2WidgetConfig, type ChatPreviewVariant, type ChatPreviewWidgetConfig, type ClientDetails, type ColorMapping, ColorNames, Context$1 as Context, ConversationalSearchIds, type CustomerServiceIntegration, DelimiterCase, DelimiterCasedPropertiesDeep, type DynamicWidgetMounting, EnviveConfig, FeatureGates, FilterAttribute, type FloatingEntryPointConfig, FormField, FormSubmitted, FormSubmittedAttributes$1 as FormSubmittedAttributes, FrontendConfig, type FullCustomerServiceIntegration, GA4EcommerceEvent, GenerationParams$1 as GenerationParams, GoogleAnalyticsEvents, type HomePageVariant, type IdExtractor, type ImageBannerWidgetConfig, type ImagePromptWidgetConfig, type InsertionPoint, Message, MessageRole, MessageType, MobilePLPChatPlacementParameter, type MultiImageConfig, NextMessageRequest$1 as NextMessageRequest, type NoOpWidgetConfig, type NumRows, OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig, OrgAnalyticsGoogleAnalyticsConfig, OrgConfig$1 as OrgConfig, OrgConfig as OrgConfig$1, OrgConfigExperiment, OrgConfigFeatureGate, OrgPageConfig, OrgShortName, type OrgUIConfig, Organization, OrganizationConfig$1 as OrganizationConfig, OrganizationSettings$1 as OrganizationSettings, type OtherPageVariant, PDPAttributes$1 as PDPAttributes, type PDPPageVariant, PDPUserEvent, PLPAttributes$1 as PLPAttributes, type PLPPageVariant, PLPUserEvent, type PageCardConfig, type PageCardHoverVariant, type PageCardIconVariant, type PageCardVariant, PageVariantConfig, PageVariantTest, PageVariantTestType, PageVisitAttributes, PageVisitEvent, type ProductCardConfig, type ProductCardHoverVariant, type ProductCardLayoutVariant, type ProductCardVariant, ProductExperiment, ProductGridVariant, type ProductLinkHoverVariant, type ProductLinkIconVariant, type ProductLinkVariant, ProductMessageMetadata, type ProductReviewColorVariant, type ProductReviewConfig, type ProductReviewStyleVariant, ProductSearchMessageMetadata, ProductSearchResponse$1 as ProductSearchResponse, ProductSearchResponseAttributes$1 as ProductSearchResponseAttributes, QueryTypedAttributes$1 as QueryTypedAttributes, QueryTypedUserEvent, SearchAttributes$1 as SearchAttributes, type SearchCardVariant, type SearchEntryPointWidgetConfig, SearchFilterSidebarVariant, SearchIconVariant, SearchInputVariant, type SearchOverlayHostWidgetConfig, type SearchPageVariant, SearchParams, type SearchPromptVariant, type SearchPromptWidgetConfig, SearchResult, type SearchResultsEntryPointWidgetConfig, SearchUserEvent, SearchZeroStateLayout, SearchZeroStateVariant, type ShowFloatingButtonOptions, type SingleImagePromptWidgetConfig, SnakeCasedPropertiesDeep, type SocialProofConfig, type SocialProofV2WidgetConfig, SpanxTakeAQuizCtaParameter, SpiffyEventName, SpiffyWidgets, SplitIncludingDelimiters, type StaticWidgetMounting, Suggestion$1 as Suggestion, type SuggestionBarWidgetV2Config, type SuggestionButtonConfig, type SuggestionButtonVariant, SuggestionClickedAttributes$1 as SuggestionClickedAttributes, SuggestionsClickedUserEvent, SupportedEventRequest$1 as SupportedEventRequest, UAEcommerceEvent, type URLTest, UserEvent$1 as UserEvent, UserEventAttributes, type UserQueryButtonConfig, type UserQueryButtonIcon, UserQueryOptions, type VisitPageVariant, type WelcomeSectionColorVariant, type WelcomeSectionConfig, type WelcomeSectionVariant, type WidgetConfig, type WidgetDisplayTests, WidgetHeaderProps, type WidgetMounting, WidgetMountingConfig, WidgetType, type WrappingElement, colorVar, getMerchantOrgIdQuery, getOrgInfo, hasPropertyOfType, isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
1609
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRFR1MlgtWVMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jYWNoZWRWYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb252ZXJzYXRpb25hbFNlYXJjaElkcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9kYXRhTGF5ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZXZlbnRzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2ZlYXR1cmVHYXRlcy5kLnRzIiwiLi4vc3JjL3R5cGVzL2N1c3RvbWVyU2VydmljZS5kLnRzIiwiLi4vc3JjL21lcmNoYW50cy9ncmlkSW5zZXJ0aW9uLmQudHMiLCIuLi9zcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMuZC50cyIsIi4uL3NyYy9jb250ZXh0cy90eXBlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9nb29nbGVBbmFseXRpY3NFdmVudHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL29yZ3NFbnVtLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3VwcG9ydGVkT3Jncy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvY29udGV4dC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvZ2VuZXJhdGlvblBhcmFtcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvdXNlckV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9uZXh0TWVzc2FnZVJlcXVlc3QuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VnZ2VzdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnkuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzQmFzZUVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXAuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL3NuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb24uZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBDYWNoZWRWYWx1ZSB7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZXhwaXJ5OiBudW1iZXI7XG59XG5leHBvcnQgdHlwZSB7IENhY2hlZFZhbHVlIH07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIHtcbiAgICBJTl9DSEFUID0gXCJpbl9jaGF0XCIsXG4gICAgQ0hBVF9QUkVWSUVXID0gXCJjaGF0X3ByZXZpZXdcIixcbiAgICBGTE9BVElOR19CVVRUT04gPSBcImZsb2F0aW5nX2J1dHRvblwiLFxuICAgIEhFTFBfTUVfQ0hPT1NFID0gXCJoZWxwX21lX2Nob29zZVwiLFxuICAgIFBMUF9JTUFHRV9CQU5ORVIgPSBcInBscF9pbWFnZV9iYW5uZXJcIixcbiAgICBUT1BfUkVWSUVXU19TTklQUEVUID0gXCJ0b3BfcmV2aWV3c19zbmlwcGV0XCIsXG4gICAgQk9UVE9NX1JFVklFV1NfU05JUFBFVCA9IFwiYm90dG9tX3Jldmlld3Nfc25pcHBldFwiLFxuICAgIEJMT0NLX0JBQ0tfQlVUVE9OID0gXCJibG9ja19iYWNrX2J1dHRvblwiLFxuICAgIFNXSVRDSF9UT19BR0VOVCA9IFwic3dpdGNoX3RvX2FnZW50XCIsXG4gICAgQ09OVkVSU0FUSU9OQUxfU0VBUkNIID0gXCJjb252ZXJzYXRpb25hbF9zZWFyY2hcIixcbiAgICBHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlwb2ludFwiLFxuICAgIFNFQVJDSF9OQVZfRU5UUllQT0lOVCA9IFwic2VhcmNoX25hdl9lbnRyeXBvaW50XCIsXG4gICAgU0VBUkNIX1BST01QVCA9IFwic2VhcmNoX3Byb21wdFwiLFxuICAgIFNFQVJDSF9QUk9NUFRfQlVUVE9OID0gXCJzZWFyY2hfcHJvbXB0X2J1dHRvblwiLFxuICAgIFBST0RVQ1RfR1JJRCA9IFwicHJvZHVjdF9ncmlkXCIsXG4gICAgVU5TUEVDSUZJRUQgPSBcInVuc3BlY2lmaWVkXCIsXG4gICAgRklMVEVSX01PREFMID0gXCJmaWx0ZXJfbW9kYWxcIixcbiAgICBQUk9NUFRfQ0FSRCA9IFwicHJvbXB0X2NhcmRcIixcbiAgICBXSU5ET1dfQVBJX0NBTEwgPSBcIndpbmRvd19hcGlfY2FsbFwiXG59XG4iLCJpbnRlcmZhY2UgQ2xpZW50RGV0YWlscyB7XG4gICAgb3M/OiBzdHJpbmc7XG4gICAgb3NWZXJzaW9uPzogc3RyaW5nO1xuICAgIGRldmljZUJyYW5kPzogc3RyaW5nO1xuICAgIGRldmljZU1hbnVmYWN0dXJlcj86IHN0cmluZztcbiAgICBkZXZpY2VNb2RlbD86IHN0cmluZztcbiAgICBjYXJyaWVyPzogc3RyaW5nO1xuICAgIGNvdW50cnk/OiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgYnJvd3NlclZlcnNpb24/OiBzdHJpbmc7XG4gICAgYnJvd3NlcklwQWRkcmVzcz86IHN0cmluZztcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSB7IENsaWVudERldGFpbHMsIH07XG4iLCJkZWNsYXJlIGVudW0gQ29sb3JOYW1lcyB7XG4gICAgVGV4dFByaW1hcnkgPSBcInRleHQtcHJpbWFyeVwiLFxuICAgIFRleHRTZWNvbmRhcnkgPSBcInRleHQtc2Vjb25kYXJ5XCIsXG4gICAgVGV4dEFjY2VudCA9IFwidGV4dC1hY2NlbnRcIixcbiAgICBUZXh0TGluayA9IFwidGV4dC1saW5rXCIsXG4gICAgVGV4dExpZ2h0ID0gXCJ0ZXh0LWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFByaW1hcnkgPSBcImJhY2tncm91bmQtcHJpbWFyeVwiLFxuICAgIEJhY2tncm91bmRTZWNvbmRhcnkgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5XCIsXG4gICAgQmFja2dyb3VuZFNlY29uZGFyeURhcmsgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5LWRhcmtcIixcbiAgICBCYWNrZ3JvdW5kVGVydGlhcnkgPSBcImJhY2tncm91bmQtdGVydGlhcnlcIixcbiAgICBCYWNrZ3JvdW5kRGFyayA9IFwiYmFja2dyb3VuZC1kYXJrXCIsXG4gICAgQmFja2dyb3VuZExpZ2h0ID0gXCJiYWNrZ3JvdW5kLWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFNhdHVyYXRlZCA9IFwiYmFja2dyb3VuZC1zYXR1cmF0ZWRcIixcbiAgICBCb3JkZXJMaWdodCA9IFwiYm9yZGVyLWxpZ2h0XCIsXG4gICAgQm9yZGVyTWVkaXVtID0gXCJib3JkZXItbWVkaXVtXCIsXG4gICAgQm9yZGVyRGFyayA9IFwiYm9yZGVyLWRhcmtcIixcbiAgICBCb3JkZXJPdXRsaW5lID0gXCJib3JkZXItb3V0bGluZVwiLFxuICAgIEFjY2VudFByaW1hcnkgPSBcImFjY2VudC1wcmltYXJ5XCIsXG4gICAgQWNjZW50U2Vjb25kYXJ5ID0gXCJhY2NlbnQtc2Vjb25kYXJ5XCJcbn1cbnR5cGUgQ29sb3JNYXBwaW5nID0ge1xuICAgIFtrZXkgaW4gQ29sb3JOYW1lc106IHN0cmluZztcbn07XG5kZWNsYXJlIGNvbnN0IGNvbG9yVmFyOiAoY29sb3I6IENvbG9yTmFtZXMpID0+IHN0cmluZztcbmV4cG9ydCB7IENvbG9yTmFtZXMsIGNvbG9yVmFyIH07XG5leHBvcnQgdHlwZSB7IENvbG9yTWFwcGluZyB9O1xuIiwiZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uYWxTZWFyY2hJZHMgPSB7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hFbnRyeXBvaW50SWQ/OiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hJbnB1dElkPzogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvbmFsU2VhcmNoTW9kYWxJZD86IHN0cmluZztcbn07XG4iLCIvKipcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBjb21tb24gcHJvcGVydGllcyBhY3Jvc3MgYWxsIGVjb21tZXJjZSBldmVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWNvbW1lcmNlRXZlbnQge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGEgfCBHQTRFY29tbWVyY2VEYXRhO1xufVxuLyoqXG4gKiBMZWdhY3kgdW5pdmVyc2FsIGFuYWx5dGljcyBkYXRhLiBUaGUgYWN0dWFsIHBheWxvYWQgY29udGFpbnMgbW9yZSBmaWVsZHMsIGJ1dCB3ZVxuICogb25seSBuZWVkIHRoZSBvbmVzIGxpc3RlZCBiZWxvdy5cbiAqL1xuaW50ZXJmYWNlIFVBRWNvbW1lcmNlRGF0YSB7XG4gICAgYWRkOiB7XG4gICAgICAgIHByb2R1Y3RzOiB7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBjYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICAgICAgcHJpY2U6IHN0cmluZztcbiAgICAgICAgICAgIHF1YW50aXR5OiBzdHJpbmc7XG4gICAgICAgIH1bXTtcbiAgICAgICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogR29vZ2xlIEFuYWx5dGljcyA0IGRhdGEuIFRoZSBhY3R1YWwgcGF5bG9hZCBjb250YWlucyBtb3JlIGZpZWxkcywgYnV0IHdlXG4gKiBvbmx5IG5lZWQgdGhlIG9uZXMgbGlzdGVkIGJlbG93LlxuICovXG5pbnRlcmZhY2UgR0E0RWNvbW1lcmNlRGF0YSB7XG4gICAgY3VycmVuY3k6IHN0cmluZztcbiAgICBpdGVtczoge1xuICAgICAgICBpdGVtX25hbWU6IHN0cmluZztcbiAgICAgICAgaXRlbV9jYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICBwcmljZTogbnVtYmVyO1xuICAgICAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIH1bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVUFFY29tbWVyY2VFdmVudCBleHRlbmRzIEJhc2VFY29tbWVyY2VFdmVudCB7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGE7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdBNEVjb21tZXJjZUV2ZW50IGV4dGVuZHMgQmFzZUVjb21tZXJjZUV2ZW50IHtcbiAgICBlY29tbWVyY2U6IEdBNEVjb21tZXJjZURhdGE7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFNwaWZmeUV2ZW50TmFtZSB7XG4gICAgV2lkZ2V0T3BlbiA9IFwic3BpZmZ5OndpZGdldG9wZW5cIixcbiAgICBXaWRnZXRDbG9zZSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCJcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGVudW0gRmVhdHVyZUdhdGVzIHtcbiAgICBJc0NsaWVudFNlc3Npb25FbmFibGVkID0gXCJpc19jbGllbnRfc2Vzc2lvbl9lbmFibGVkXCIsXG4gICAgSXNOZXdGZWF0dXJlRW5hYmxlZCA9IFwiaXNfbmV3X2ZlYXR1cmVfZW5hYmxlZFwiLFxuICAgIElzRmluZVR1bmVkTW9kZWw4YiA9IFwiaXNfZmluZV90dW5lZF9tb2RlbF84YlwiLFxuICAgIElzSW50ZWdyYXRlZENYRW5hYmxlZCA9IFwiaXNfaW50ZWdyYXRlZF9jeF9lbmFibGVkXCIsXG4gICAgSXNOb25TaGFwZXdlYXJFbmFibGVkID0gXCJpc19ub25fc2hhcGV3ZWFyX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlQmFubmVyRW5hYmxlZCA9IFwiaXNfaW1hZ2VfYmFubmVyX2VuYWJsZWRcIixcbiAgICBJc09yZGVyTG9va3VwRW5hYmxlZCA9IFwiaXNfb3JkZXJfbG9va3VwX2VuYWJsZWRcIixcbiAgICBJc1N1bW1hcml6ZVJldmlld3NFbmFibGVkID0gXCJpc19zdW1tYXJpemVfcmV2aWV3c19lbmFibGVkXCIsXG4gICAgSXNHbG9iYWxTZWFyY2hFbmFibGVkID0gXCJpc19nbG9iYWxfc2VhcmNoX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlUHJvbXB0RW5hYmxlZCA9IFwiaXNfaW1hZ2VfcHJvbXB0X2VuYWJsZWRcIixcbiAgICBJc1dhdGVybWFya0VuYWJsZWQgPSBcImlzX3dhdGVybWFya19lbmFibGVkXCIsXG4gICAgSXNJbmZlcmVuY2VSZWdpb24wID0gXCJpc19pbmZlcmVuY2VfcmVnaW9uXzBcIixcbiAgICBJc0dyYXBoUUxVSUNvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX3VpX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTFBhZ2VDb25maWdzRW5hYmxlZCA9IFwiaXNfZ3JhcGhxbF9wYWdlX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTENvbXBvbmVudENvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX2NvbXBvbmVudF9jb25maWdzX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50RW5hYmxlZCA9IFwiaXNfY2hhdF92YXJpYW50X2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QUVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9hX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QkVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9iX2VuYWJsZWRcIixcbiAgICBJc1VzZXJRdWVyeUFsd2F5c0VuYWJsZWQgPSBcImlzX3VzZXJfcXVlcnlfYWx3YXlzX2VuYWJsZWRcIlxufVxuIiwiaW1wb3J0IHsgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5leHBvcnQgZGVjbGFyZSBlbnVtIEN1c3RvbWVyU2VydmljZVR5cGUge1xuICAgIHNob3BpZnkgPSBcInNob3BpZnlcIixcbiAgICBnb3JnaWFzID0gXCJnb3JnaWFzXCIsXG4gICAga3VzdG9tZXIgPSBcImt1c3RvbWVyXCIsXG4gICAgZ3Jvb3ZlID0gXCJncm9vdmVcIixcbiAgICB0aWRpbyA9IFwidGlkaW9cIixcbiAgICB6b3dpZSA9IFwiem93aWVcIixcbiAgICByZWRvID0gXCJyZWRvXCIsXG4gICAgZ2xhZGx5ID0gXCJnbGFkbHlcIixcbiAgICByaWNocGFuZWwgPSBcInJpY2hwYW5lbFwiLFxuICAgIHplbmRlc2sgPSBcInplbmRlc2tcIixcbiAgICB1bnN1cHBvcnRlZCA9IFwidW5zdXBwb3J0ZWRcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUge1xuICAgIG5vbmUgPSBcIm5vbmVcIixcbiAgICBzaW1wbGUgPSBcInNpbXBsZVwiLFxuICAgIGZ1bGwgPSBcImZ1bGxcIlxufVxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiB7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuICAgIHN1cHBvcnRlZEludGVncmF0aW9uTW9kZXM6IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZVtdO1xuICAgIGFsbG93RmlsZVVwbG9hZD86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgb25Td2l0Y2hUb0FnZW50OiAoKSA9PiB2b2lkO1xuICAgIGlzRW5hYmxlZDogKCkgPT4gYm9vbGVhbjtcbiAgICBpc0J1c2luZXNzSG91cnM6IChhcGlLZXk/OiBzdHJpbmcsIGFwaUVuZHBvaW50Pzogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIiwiZGVjbGFyZSBlbnVtIEdyaWRJbnNlcnRpb25UeXBlIHtcbiAgICBGSVhFRF8xID0gXCJmaXhlZC0xXCIsXG4gICAgRklYRURfMiA9IFwiZml4ZWQtMlwiLFxuICAgIEZJWEVEXzMgPSBcImZpeGVkLTNcIixcbiAgICBGSVhFRF80ID0gXCJmaXhlZC00XCIsXG4gICAgRklYRURfNSA9IFwiZml4ZWQtNVwiLFxuICAgIEZJWEVEXzYgPSBcImZpeGVkLTZcIixcbiAgICBGSVhFRF83ID0gXCJmaXhlZC03XCIsXG4gICAgRklYRURfOCA9IFwiZml4ZWQtOFwiLFxuICAgIEZJWEVEXzkgPSBcImZpeGVkLTlcIixcbiAgICBGSVhFRF8xMiA9IFwiZml4ZWQtMTJcIixcbiAgICBGSVhFRF8xMyA9IFwiZml4ZWQtMTNcIixcbiAgICBST1dfMSA9IFwicm93LTFcIixcbiAgICBST1dfMiA9IFwicm93LTJcIixcbiAgICBST1dfMyA9IFwicm93LTNcIixcbiAgICBST1dfNCA9IFwicm93LTRcIlxufVxuZXhwb3J0IHsgR3JpZEluc2VydGlvblR5cGUgfTtcbiIsImRlY2xhcmUgZW51bSBET01JbnNlcnRpb25UeXBlIHtcbiAgICBBRlRFUiA9IFwiYWZ0ZXJcIixcbiAgICBCRUZPUkUgPSBcImJlZm9yZVwiLFxuICAgIEFESkFDRU5UX0FGVEVSX0JFR0lOID0gXCJhZGphY2VudC1hZnRlci1iZWdpblwiLFxuICAgIEFESkFDRU5UX0JFRk9SRV9CRUdJTiA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCIsXG4gICAgQURKQUNFTlRfQUZURVJfRU5EID0gXCJhZGphY2VudC1hZnRlci1lbmRcIixcbiAgICBBREpBQ0VOVF9CRUZPUkVfRU5EID0gXCJhZGphY2VudC1iZWZvcmUtZW5kXCIsXG4gICAgQVBQRU5EX0NISUxEID0gXCJhcHBlbmQtY2hpbGRcIixcbiAgICBOT05FID0gXCJub25lXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IERPTUluc2VydGlvblR5cGVUb0luc2VydFBvc2l0aW9uOiAodHlwZTogRE9NSW5zZXJ0aW9uVHlwZSkgPT4gSW5zZXJ0UG9zaXRpb247XG5leHBvcnQgeyBET01JbnNlcnRpb25UeXBlIH07XG4iLCJleHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0NvbmZpZyB7XG4gICAgYW1wbGl0dWRlPzogT3JnQW5hbHl0aWNzQW1wbGl0dWRlQ29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZT86IE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZztcbiAgICBnb29nbGVBbmFseXRpY3M/OiBPcmdBbmFseXRpY3NHb29nbGVBbmFseXRpY3NDb25maWc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0FtcGxpdHVkZUNvbmZpZyB7XG4gICAgc2Vzc2lvblJlcGxheUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvblJlcGxheVNhbXBsZVJhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ0VuYWJsZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQW5hbHl0aWNzR29vZ2xlQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBtZWFzdXJlbWVudElkPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IHsgT3JnQW5hbHl0aWNzQ29uZmlnIH0gZnJvbSAnLi9vcmdBbmFseXRpY3NDb25maWcnO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGlzTGF0ZXN0OiBib29sZWFuO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgICBjb25maWc6IE9yZ0FuYWx5dGljc0NvbmZpZztcbiAgICBvcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgICBpZD86IHN0cmluZztcbn1cbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvblN0YXR1c0VudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnYW5pemF0aW9uQ29uZmlnXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdcIjtcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWdcIjtcbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnRXhwZXJpbWVudCB7XG4gICAgZ3JvdXA/OiBzdHJpbmc7XG4gICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcnVsZUlkPzogc3RyaW5nO1xuICAgIHZhbHVlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIHtcbiAgICBncm91cE5hbWU/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBydWxlSWQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBzaG9ydE5hbWU6IHN0cmluZztcbiAgICBzdGF0dXM6IE9yZ2FuaXphdGlvblN0YXR1c0VudW07XG4gICAgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAgIHVwZGF0ZWRBdD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uU2V0dGluZ3Mge1xuICAgIG9yZzogT3JnYW5pemF0aW9uO1xuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnIHtcbiAgICBjb25maWdzOiBPcmdhbml6YXRpb25Db25maWdbXTtcbiAgICBleHBlcmltZW50czogT3JnQ29uZmlnRXhwZXJpbWVudFtdO1xuICAgIGdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuICAgIG9yZzogT3JnYW5pemF0aW9uU2V0dGluZ3M7XG4gICAgY29sb3JzQ29uZmlnPzogQ29sb3JNYXBwaW5nO1xuICAgIGZyb250ZW5kQ29uZmlnPzogRnJvbnRlbmRDb25maWc7XG59XG4iLCJpbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMsIGNvbG9yVmFyIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnXCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSwgQ3VzdG9tZXJTZXJ2aWNlVHlwZSB9IGZyb20gXCJzcmMvdHlwZXMvY3VzdG9tZXJTZXJ2aWNlXCI7XG5pbXBvcnQgeyBHcmlkSW5zZXJ0aW9uVHlwZSB9IGZyb20gXCJzcmMvbWVyY2hhbnRzL2dyaWRJbnNlcnRpb25cIjtcbmltcG9ydCB7IERPTUluc2VydGlvblR5cGUgfSBmcm9tIFwic3JjL21lcmNoYW50cy9kb21JbnNlcnRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZVZpc2l0Q2F0ZWdvcnksIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgQ2hhdFN0YXRlIH0gZnJvbSBcInNyYy90eXBlcy9jdXN0c2VydmljZS10eXBlc1wiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyB9IGZyb20gXCJzcmMvdHlwZXMvc3VnZ2VzdGlvbkJhclYyLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXN0UHJvcHMgfSBmcm9tIFwic3JjL3R5cGVzL3Rlc3QtdHlwZXNcIjtcbmltcG9ydCB7IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHNcIjtcbnR5cGUgU2hvd0Zsb2F0aW5nQnV0dG9uT3B0aW9ucyA9IFwiYWx3YXlzXCIgfCBcImFmdGVyLWludGVyYWN0aW9uLW9uLW1vYmlsZS1hbHdheXMtZGVza3RvcFwiIHwgXCJhZnRlci1pbnRlcmFjdGlvbi1hbnl3aGVyZVwiIHwgXCJuZXZlclwiO1xudHlwZSBGbG9hdGluZ0VudHJ5UG9pbnRDb25maWcgPSB7XG4gICAgcG9zaXRpb246IFwiYm90dG9tLWxlZnRcIiB8IFwibWlkZGxlLWxlZnRcIiB8IFwibWlkZGxlLXJpZ2h0XCIgfCBcImJvdHRvbS1yaWdodFwiO1xuICAgIGV4cGFuc2lvblRleHQ/OiB7XG4gICAgICAgIHBkcDogc3RyaW5nO1xuICAgICAgICBwbHA6IHN0cmluZztcbiAgICB9O1xuICAgIG1pbmltaXplZENvbG9yOiBzdHJpbmc7XG4gICAgZXhwYW5kZWRDb2xvcjogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgICBzaG93T3B0aW9uOiBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zO1xuICAgIGljb25TVkdTcmM/OiBzdHJpbmc7XG4gICAgaWNvblNpemU/OiBudW1iZXI7XG4gICAgaWNvblN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIGljb25GaWxsQ29sb3I/OiBzdHJpbmc7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGZvbnRTaXplPzogbnVtYmVyO1xufTtcbnR5cGUgV2VsY29tZVNlY3Rpb25WYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJvdXRsaW5lZFwiO1xudHlwZSBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYWNjZW50XCIgfCBcImJyYW5kXCIgfCBcImxpZ2h0XCI7XG50eXBlIFdlbGNvbWVTZWN0aW9uQ29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFdlbGNvbWVTZWN0aW9uVmFyaWFudDtcbiAgICBjb2xvclZhcmlhbnQ/OiBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudDtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICBpY29uTmFtZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbn07XG50eXBlIENoYXRQcmV2aWV3Q29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFwiZmxhdFwiIHwgXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIjtcbiAgICBsYXJnZVByb2R1Y3RDb21wYXJpc29uPzogYm9vbGVhbjtcbiAgICBmaWxsZWRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBpY29uRmlsbENvbG9yOiBzdHJpbmc7XG4gICAgYnV0dG9uVGV4dENvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvblRleHRTZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25UZXh0SG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kSG92ZXJDb2xvcjogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckNvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gICAgY29waWVzOiB7XG4gICAgICAgIHBkcDogc3RyaW5nW107XG4gICAgICAgIHBscDogc3RyaW5nW107XG4gICAgfTtcbiAgICBzdGF0aWNTdWdnZXN0aW9uQ29waWVzPzoge1xuICAgICAgICBwZHA6IHN0cmluZ1tdO1xuICAgICAgICBwbHA6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgc3RhdGljUExQSW1hZ2VzPzogc3RyaW5nW107XG4gICAgZm9vdGVyQ29uZmlnPzogQ2hhdFByZXZpZXdGb290ZXJDb25maWc7XG4gICAgaGVhZGVyQ29uZmlnPzogQ2hhdFByZXZpZXdIZWFkZXJDb25maWc7XG4gICAgdG9wTWFyZ2luPzogbnVtYmVyO1xufTtcbnR5cGUgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcgPSB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaW1hZ2VTcmM/OiBzdHJpbmc7XG4gICAgaW1hZ2VIZWlnaHQ/OiBudW1iZXI7XG4gICAgc3BhcmtsZXNDb2xvcj86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBpY29uV2lkdGg/OiBzdHJpbmc7XG4gICAgaWNvbkhlaWdodD86IHN0cmluZztcbn07XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdGb290ZXJDb25maWcge1xuICAgIGhhc0ZhZGU/OiBib29sZWFuO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50PzogXCJkYXJrXCIgfCBcImxpZ2h0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgc3VnZ2VzdGlvbnNCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICAgIHJlcGx5QnV0dG9uSWNvbj86IFwic2VuZFwiIHwgXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwidGhpbk1hZ25pZnlpbmdHbGFzc1wiIHwgXCJzZWFyY2hJY29uXCI7XG4gICAgcmVwbHlCdXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIHJlcGx5SW5wdXRIYXNTaGFkb3c/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXRIYXNCb3JkZXI/OiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbn1cbnR5cGUgUHJvZHVjdFJldmlld1N0eWxlVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudCA9IFwibmV1dHJhbFwiIHwgXCJicmFuZFwiIHwgXCJwcmVtaXVtXCI7XG5pbnRlcmZhY2UgUHJvZHVjdFJldmlld0NvbmZpZyB7XG4gICAgc3R5bGVWYXJpYW50OiBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50O1xuICAgIGNvbG9yVmFyaWFudDogUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudDtcbiAgICB2ZXJpZmllZEJ1eWVyVGl0bGU6IHN0cmluZztcbiAgICBpbmNlbnRpdml6ZWRSZXZpZXdGbGFnPzogYm9vbGVhbjtcbn1cbnR5cGUgUGFnZUNhcmRWYXJpYW50ID0gXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIiB8IFwibWluaW1hbFwiO1xudHlwZSBQYWdlQ2FyZEhvdmVyVmFyaWFudCA9IFwibm9uZVwiIHwgXCJzaGFkb3dcIiB8IFwibGlmdFwiO1xudHlwZSBQYWdlQ2FyZEljb25WYXJpYW50ID0gXCJwcmltYXJ5XCIgfCBcImFjY2VudFwiIHwgXCJiYWNrZ3JvdW5kXCIgfCBcIm5vbmVcIjtcbnR5cGUgUGFnZUNhcmRDb25maWcgPSB7XG4gICAgdmFyaWFudDogUGFnZUNhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUGFnZUNhcmRIb3ZlclZhcmlhbnQ7XG4gICAgaWNvblZhcmlhbnQ6IFBhZ2VDYXJkSWNvblZhcmlhbnQ7XG59O1xudHlwZSBQcm9kdWN0Q2FyZFZhcmlhbnQgPSBcImZpbGxlZFwiIHwgXCJib3JkZXJlZFwiIHwgXCJtaW5pbWFsXCIgfCBcInRyYW5zcGFyZW50Qm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQgPSBcImJhY2tncm91bmREYXJrXCIgfCBcIm5vbmVcIjtcbnR5cGUgUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50ID0gXCJub3JtYWxcIiB8IFwidGFsbFwiIHwgXCJzcXVhcmVcIjtcbmludGVyZmFjZSBQcm9kdWN0Q2FyZENvbmZpZyB7XG4gICAgdmFyaWFudDogUHJvZHVjdENhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQ7XG4gICAgbGF5b3V0VmFyaWFudDogUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50O1xuICAgIHByaWNlUHJlZml4Pzogc3RyaW5nO1xufVxudHlwZSBDU1N3aXRjaENvbmZpZyA9IHtcbiAgICB2YXJpYW50OiBcImF0dGFjaGVkXCIgfCBcImRldGFjaGVkXCI7XG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFRleHRDb2xvcjogc3RyaW5nO1xuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHVuc2VsZWN0ZWRUZXh0Q29sb3I6IHN0cmluZztcbiAgICB1bnNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHN1cHBvcnRUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZUhhc0xvZ28/OiBib29sZWFuO1xufTtcbnR5cGUgQ2hhdEhlYWRlckNvbmZpZyA9IHtcbiAgICBjb2xsYXBzZWRDb2xvcjogc3RyaW5nO1xuICAgIGV4cGFuZGVkQ29sb3I6IHN0cmluZztcbiAgICBjaGV2cm9uQ29sb3I6IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpY29uPzogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD4+O1xuICAgIGNsb3NlSWNvbj86IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PFJlYWN0LlNWR1Byb3BzPFNWR1NWR0VsZW1lbnQ+PjtcbiAgICBib3JkZXJCb3R0b20/OiBzdHJpbmc7XG4gICAgaGVhZGVyQmFySGVpZ2h0UGFydGlhbFZpZXc6IG51bWJlcjtcbiAgICBoZWFkZXJCYXJIZWlnaHRGdWxsVmlldzogbnVtYmVyO1xuICAgIGN1c3RvbWVyU3VwcG9ydFN3aXRjaENvbmZpZz86IENTU3dpdGNoQ29uZmlnO1xufTtcbnR5cGUgU2ltcGxlQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG59O1xudHlwZSBGdWxsQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgY2hhdEVuYWJsZWREdXJpbmdCdXNpbmVzc0hvdXJzPzogYm9vbGVhbjtcbiAgICBzaG93TmFtZUlucHV0PzogYm9vbGVhbjtcbiAgICBmb3JtQWlOYW1lPzogc3RyaW5nO1xuICAgIHdlbGNvbWVUaXRsZTogc3RyaW5nO1xuICAgIHdlbGNvbWVEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHNob3dXZWxjb21lT25Gb3JtPzogYm9vbGVhbjtcbiAgICBjb250YWN0U3ViamVjdE9wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICBnZXRDdXN0b21XYWl0aW5nTWVzc2FnZT86IChuYW1lPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc01lc3NhZ2U/OiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIG91dHNpZGVCdXNpbmVzc0hvdXJzTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNGb3JtTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc0Zvcm1NZXNzYWdlPzogc3RyaW5nO1xuICAgIHN1Z2dlc3RlZEFJUXVlc3Rpb25zPzogc3RyaW5nW107XG4gICAgYnVzaW5lc3NIb3Vyc1BvbGxpbmc/OiBudW1iZXI7XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzU3RhcnRVVEM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzRW5kVVRDPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgQkUuXG4gICAgICovXG4gICAgYnVzaW5lc3NIb3Vyc1RpbWV6b25lPzogc3RyaW5nO1xuICAgIHNob3dBSVN1Z2dlc3Rpb25zV2l0aGluQnVzaW5lc3NIb3Vycz86IGJvb2xlYW47XG4gICAgd2FpdGluZ01lc3NhZ2VQb3NpdGlvbj86IFwiQkVGT1JFX01FU1NBR0VTXCIgfCBcIkFGVEVSX01FU1NBR0VTXCI7XG4gICAgbGVnYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc0J1dHRvbnRleHQ/OiBzdHJpbmc7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNCdXR0b250ZXh0Pzogc3RyaW5nO1xuICAgIHJlb3BlbkNoYXRNZXNzYWdlOiBzdHJpbmc7XG59O1xudHlwZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiA9IFNpbXBsZUN1c3RvbWVyU2VydmljZUludGVncmF0aW9uIHwgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uO1xudHlwZSBDb252ZXJzYXRpb25hbFNlYWNoID0ge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXQ/OiBSZXBseUlucHV0Q29uZmlnO1xuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW107XG4gICAgZW50cnlwb2ludEJnQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludFRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludEJ0blRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludENvbnRhaW5lcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50VHJpZ2dlcj86IHN0cmluZztcbiAgICBwcm9kdWN0R3JpZENvbnRhaW5lcj86IHN0cmluZztcbiAgICBnZW5lcmFsU2VhcmNoQnRuPzogc3RyaW5nO1xuICAgIHBhZ2VDb250ZW50Pzogc3RyaW5nO1xuICAgIHNlYXJjaENvbnRlbnQ/OiBzdHJpbmc7XG4gICAgc29ydGluZ1RpdGxlPzogc3RyaW5nO1xuICAgIHNlbGVjdGlvblRpdGxlPzogc3RyaW5nO1xuICAgIHNvcnRpbmdGb250Pzogc3RyaW5nO1xuICAgIG9wdGlvbnNGb250Pzogc3RyaW5nO1xuICAgIHNvcnRpbmdCdXR0b25UZXh0Pzogc3RyaW5nO1xufTtcbnR5cGUgQ2hhdE1lc3NhZ2VWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJwcmVtaXVtXCIgfCBcImFjY2VudFwiO1xuaW50ZXJmYWNlIENoYXRNZXNzYWdlQ29uZmlnIHtcbiAgICBhc3Npc3RhbnRDaGF0VGl0bGU6IHN0cmluZztcbiAgICB2YXJpYW50OiBDaGF0TWVzc2FnZVZhcmlhbnQ7XG4gICAgcHJvZHVjdExpbms6IHtcbiAgICAgICAgdmFyaWFudDogUHJvZHVjdExpbmtWYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFByb2R1Y3RMaW5rSG92ZXJWYXJpYW50O1xuICAgICAgICBpY29uVmFyaWFudDogUHJvZHVjdExpbmtJY29uVmFyaWFudDtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFJlcGx5SW5wdXRDb25maWcge1xuICAgIHNpemU/OiBcIm1kXCIgfCBcImxnXCI7XG4gICAgc2VuZEljb246IFwiYXJyb3dVcFwiIHwgXCJzZW5kXCIgfCBcInNlYXJjaFwiO1xuICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFBhcnRpYWxWaWV3Q29uZmlnIHtcbiAgICBtYXhIZWlnaHQ6IG51bWJlcjtcbiAgICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG59XG50eXBlIFByb2R1Y3RMaW5rSWNvblZhcmlhbnQgPSBcImFjY2VudFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlEYXJrXCIgfCBcImJvcmRlckxpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgUHJvZHVjdExpbmtWYXJpYW50ID0gXCJ0ZXh0TGlua1wiO1xudHlwZSBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCA9IFwiYmFja2dyb3VuZERhcmtcIjtcbnR5cGUgU2VhcmNoQ2FyZFZhcmlhbnQgPSBcImJhY2tncm91bmRQcmltYXJ5XCIgfCBcImJhY2tncm91bmRTZWNvbmRhcnlcIiB8IFwiYmFja2dyb3VuZFNlY29uZGFyeURhcmtcIiB8IFwiYmFja2dyb3VuZExpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQgPSBcIm91dGxpbmVkXCIgfCBcIm91dGxpbmVkTGlnaHRcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIiB8IFwiZGFya1wiIHwgXCJkYXJrQWNjZW50XCIgfCBcImRhcmtQcmltYXJ5XCIgfCBcInNlY29uZGFyeURhcmtcIiB8IFwic2Vjb25kYXJ5QWNjZW50XCIgfCBcInRyYW5zcGFyZW50XCIgfCBcInRyYW5zcGFyZW50RGFya1wiIHwgXCJsaWdodERhcmtcIjtcbmludGVyZmFjZSBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnIHtcbiAgICB2YXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgaG92ZXJWYXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgYW5zd2VyVmFyaWFudD86IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJvcmRlclJhZGl1cz86IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbn1cbnR5cGUgTnVtUm93cyA9IFwiZGVmYXVsdFwiIHwgXCJhbHdheXNPbmVSb3dcIiB8IFwiYWx3YXlzVHdvUm93c1wiIHwgXCJ0d29Sb3dzT25Nb2JpbGVcIjtcbmludGVyZmFjZSBBbHBoYWJldGljRmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJhbHBoYWJldGljXCI7XG59XG5pbnRlcmZhY2UgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJwcm9kdWN0Q291bnRcIjtcbn1cbmludGVyZmFjZSBDdXN0b21GaWx0ZXJTb3J0aW5nIHtcbiAgICB0eXBlOiBcImN1c3RvbVwiO1xuICAgIG1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn1cbnR5cGUgRmlsdGVyU29ydGluZyA9IEFscGhhYmV0aWNGaWx0ZXJTb3J0aW5nIHwgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB8IEN1c3RvbUZpbHRlclNvcnRpbmc7XG5pbnRlcmZhY2UgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgZmlsdGVySWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJDb25maWcgZXh0ZW5kcyBCYXNlRmlsdGVyQ29uZmlnIHtcbiAgICB0eXBlOiBcImR5bmFtaWNcIjtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBzb3J0aW5nOiBGaWx0ZXJTb3J0aW5nO1xufVxuaW50ZXJmYWNlIFByaWNlRmlsdGVyQ29uZmlnIGV4dGVuZHMgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgdHlwZTogXCJwcmljZVwiO1xuICAgIGJ1Y2tldFNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCB0eXBlIEZpbHRlckF0dHJpYnV0ZSA9IER5bmFtaWNGaWx0ZXJDb25maWcgfCBQcmljZUZpbHRlckNvbmZpZztcbmV4cG9ydCB0eXBlIFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQgPSBcImJhY2tncm91bmRUZXJ0aWFyeVwiIHwgXCJiYWNrZ3JvdW5kRGFya1wiIHwgXCJiYWNrZ3JvdW5kUHJpbWFyeVwiO1xuZXhwb3J0IHR5cGUgU2VhcmNoWmVyb1N0YXRlTGF5b3V0ID0gXCJpbnB1dFwiIHwgXCJpY29uXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJbnB1dFZhcmlhbnQgPSBcInN0YW5kYXJkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJY29uVmFyaWFudCA9IFwidGhpblwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudCA9IFwiZGFya0J1dHRvblwiIHwgXCJsaWdodEJ1dHRvblwiO1xuZXhwb3J0IHR5cGUgUHJvZHVjdEdyaWRWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJzcXVhcmVcIjtcbnR5cGUgVXNlclF1ZXJ5QnV0dG9uSWNvbiA9IFwibWFnbmlmeWluZ0dsYXNzXCIgfCBcInNlbmRcIiB8IFwibWFnbmlmeWluZ0dsYXNzVGhpblwiIHwgXCJzZW5kQXJyb3dcIiB8IFwic2VhcmNoSWNvblwiO1xuaW50ZXJmYWNlIFVzZXJRdWVyeUJ1dHRvbkNvbmZpZyB7XG4gICAgdmFyaWFudD86IFwiYm94XCIgfCBcInVuZGVybGluZUxpZ2h0XCIgfCBcInVuZGVybGluZURhcmtcIjtcbiAgICBwbGFjZWhvbGRlclRleHQ/OiBzdHJpbmc7XG4gICAgaWNvbjogVXNlclF1ZXJ5QnV0dG9uSWNvbjtcbn1cbmludGVyZmFjZSBUZXJtc0FuZENvbmRpdGlvbnNDb25maWcge1xuICAgIGNvcHk6IHN0cmluZztcbiAgICBsaW5rOiBzdHJpbmc7XG4gICAgbGlua1RleHQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncyB7XG4gICAgZHluYW1pY1ZhcmlhbnRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlcjtcbiAgICB9O1xufVxuaW50ZXJmYWNlIEZsb2F0aW5nQ2hhdENvbmZpZyB7XG4gICAgZW5hYmxlV2F0ZXJtYXJrOiBib29sZWFuO1xuICAgIHVzZXJRdWVyeUlucHV0RW5hYmxlZDogYm9vbGVhbjtcbiAgICBpZ25vcmVGaXJzdE1vZGVsUmVzcG9uc2U/OiBib29sZWFuO1xuICAgIG5ldmVyU2hvd1NpbmdsZVByb2R1Y3RDYXJkcz86IGJvb2xlYW47XG4gICAgdGVybXNBbmRDb25kaXRpb25zQ29uZmlnPzogVGVybXNBbmRDb25kaXRpb25zQ29uZmlnO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25Db25maWc/OiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIHJlcGx5SW5wdXRDb25maWc6IFJlcGx5SW5wdXRDb25maWc7XG59XG5pbnRlcmZhY2UgU2VhcmNoQ29uZmlnIHtcbiAgICBlbmFibGVHbG9iYWxTZWFyY2g6IGJvb2xlYW47XG4gICAgc2VhcmNoRmlsdGVyQ29uZmlnOiBGaWx0ZXJBdHRyaWJ1dGVbXTtcbiAgICByZWRpcmVjdFNlYXJjaFJlc3VsdHNVcmw/OiBzdHJpbmc7XG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycz86IGJvb2xlYW47XG59XG50eXBlIE9yZ1VJQ29uZmlnID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZsb2F0aW5nRW50cnlwb2ludENvbmZpZz86IEZsb2F0aW5nRW50cnlQb2ludENvbmZpZztcbiAgICBjaGF0UHJldmlld0NvbmZpZz86IENoYXRQcmV2aWV3Q29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZUludGVncmF0aW9uOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbjtcbiAgICBjb252ZXJzYXRpb25hbFNlYXJjaD86IENvbnZlcnNhdGlvbmFsU2VhY2g7XG4gICAgbWVyY2hhbnRPdmVycmlkZUNzcz86IHN0cmluZztcbiAgICBoaWRkZW5FbGVtZW50U2VsZWN0b3JzPzogc3RyaW5nW107XG4gICAgbWVyY2hhbnRWYXJpYW50U2V0dGluZ3M/OiBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncztcbiAgICBmbG9hdGluZ0NoYXRDb25maWc6IEZsb2F0aW5nQ2hhdENvbmZpZztcbiAgICBzZWFyY2hDb25maWc6IFNlYXJjaENvbmZpZztcbiAgICBjaGF0SGVhZGVyOiBDaGF0SGVhZGVyQ29uZmlnO1xuICAgIHN0aWNreUFnZW50U3dpdGNoU3VnZ2VzdGlvbj86IGJvb2xlYW47XG4gICAgcGFydGlhbFZpZXdDb25maWc6IFBhcnRpYWxWaWV3Q29uZmlnO1xuICAgIHdlbGNvbWVTZWN0aW9uQ29uZmlnPzogV2VsY29tZVNlY3Rpb25Db25maWc7XG4gICAgcHJvZHVjdENhcmRDb25maWc/OiBQcm9kdWN0Q2FyZENvbmZpZztcbiAgICBwcm9kdWN0UmV2aWV3Q29uZmlnPzogUHJvZHVjdFJldmlld0NvbmZpZztcbiAgICBwYWdlQ2FyZENvbmZpZz86IFBhZ2VDYXJkQ29uZmlnO1xuICAgIGNoYXRNZXNzYWdlQ29uZmlnOiBDaGF0TWVzc2FnZUNvbmZpZztcbn07XG50eXBlIEluc2VydGlvblBvaW50ID0ge1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgc2VsZWN0aW9uSW5kZXg/OiBudW1iZXI7XG4gICAgaW5zZXJ0aW9uVHlwZTogRE9NSW5zZXJ0aW9uVHlwZTtcbn07XG50eXBlIFVSTFRlc3QgPSBcInNob3BpZnlcIiB8IFwibnVsbFwiO1xudHlwZSBJZEV4dHJhY3RvciA9IFwic2hvcGlmeS1wcm9kdWN0LWlkXCIgfCBcInNob3BpZnktY29sbGVjdGlvbi1pZFwiIHwgXCJzaG9waWZ5LXByb2R1Y3QtdmFyaWFudC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcHJvZHVjdC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcGxwLWlkXCIgfCBcIm51bGxcIjtcbmRlY2xhcmUgZW51bSBDYXRlZ29yeUV4dHJhY3RvclR5cGUge1xuICAgIFZpc2l0Q2F0ZWdvcnlNYXAgPSBcIlZpc2l0Q2F0ZWdvcnlNYXBcIixcbiAgICBWaXNpdENhdGVnb3J5RGVmYXVsdCA9IFwiVmlzaXRDYXRlZ29yeURlZmF1bHRcIlxufVxuaW50ZXJmYWNlIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxUIGV4dGVuZHMgQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlPiB7XG4gICAgdHlwZTogVDtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5TWFwIGV4dGVuZHMgQmFzZUNhdGVnb3J5RXh0cmFjdG9yPENhdGVnb3J5RXh0cmFjdG9yVHlwZS5WaXNpdENhdGVnb3J5TWFwPiB7XG4gICAgbWFwOiB7XG4gICAgICAgIFtrZXkgaW4gUGFnZVZpc2l0Q2F0ZWdvcnldPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5RGVmYXVsdCBleHRlbmRzIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxDYXRlZ29yeUV4dHJhY3RvclR5cGUuVmlzaXRDYXRlZ29yeURlZmF1bHQ+IHtcbiAgICB2YWx1ZTogUGFnZVZpc2l0Q2F0ZWdvcnk7XG59XG50eXBlIENhdGVnb3J5RXh0cmFjdG9yID0gVmlzaXRDYXRlZ29yeU1hcCB8IFZpc2l0Q2F0ZWdvcnlEZWZhdWx0O1xudHlwZSBXcmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudDogc3RyaW5nO1xuICAgIGluc2VydGlvblR5cGU6IERPTUluc2VydGlvblR5cGU7XG59O1xuZGVjbGFyZSBlbnVtIFBhZ2VWYXJpYW50VGVzdFR5cGUge1xuICAgIFNob3BpZnlQTFAgPSBcIlNob3BpZnlQTFBcIixcbiAgICBTaG9waWZ5UERQID0gXCJTaG9waWZ5UERQXCIsXG4gICAgUGFnZUNhdGVnb3J5ID0gXCJQYWdlQ2F0ZWdvcnlcIixcbiAgICBDYXRhbG9nQ2F0ZWdvcnkgPSBcIkNhdGFsb2dDYXRlZ29yeVwiLFxuICAgIFRvcENhdGFsb2dDYXRlZ29yeSA9IFwiVG9wQ2F0YWxvZ0NhdGVnb3J5XCIsXG4gICAgSGFzUmV2aWV3cyA9IFwiSGFzUmV2aWV3c1wiLFxuICAgIEluQ29sbGVjdGlvbiA9IFwiSW5Db2xsZWN0aW9uXCIsXG4gICAgSGFzTWVyY2hhbnRUYWcgPSBcIkhhc01lcmNoYW50VGFnXCIsXG4gICAgRmVhdHVyZUdhdGUgPSBcIkZlYXR1cmVHYXRlXCIsXG4gICAgUGxwSWQgPSBcIlBscElkXCIsXG4gICAgUXVlcnlQYXJhbSA9IFwiUXVlcnlQYXJhbVwiLFxuICAgIFByb2R1Y3RJZCA9IFwiUHJvZHVjdElkXCIsXG4gICAgVXNlckhhc0ludGVyYWN0ZWQgPSBcIlVzZXJIYXNJbnRlcmFjdGVkXCIsXG4gICAgVXNlckhhc05vdEludGVyYWN0ZWQgPSBcIlVzZXJIYXNOb3RJbnRlcmFjdGVkXCIsXG4gICAgaXNMb2FkaW5nID0gXCJpc0xvYWRpbmdcIixcbiAgICBpc1Byb2R1Y3RDb21wYXJpc29uID0gXCJpc1Byb2R1Y3RDb21wYXJpc29uXCIsXG4gICAgRmFsbGJhY2sgPSBcIkZhbGxiYWNrXCIsXG4gICAgVXJsUmVzb2x2ZXIgPSBcIlVybFJlc29sdmVyXCIsXG4gICAgTnVsbCA9IFwibnVsbFwiXG59XG5pbnRlcmZhY2UgQmFzZVBhZ2VWYXJpYW50VGVzdDxUIGV4dGVuZHMgUGFnZVZhcmlhbnRUZXN0VHlwZT4ge1xuICAgIHRlc3RUeXBlOiBUO1xufVxuaW50ZXJmYWNlIFRvcENhdGFsb2dDYXRlZ29yeSBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Ub3BDYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICB0b3BDYXRlZ29yeTogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgQ2F0YWxvZ0NhdGVnb3J5VGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5DYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICBjYXRlZ29yeTogU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG59XG5pbnRlcmZhY2UgSGFzUmV2aWV3c1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuSGFzUmV2aWV3cz4ge1xuICAgIHJldmlld01pbmltdW0/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgSW5Db2xsZWN0aW9uVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5JbkNvbGxlY3Rpb24+IHtcbiAgICBjb2xsZWN0aW9uczogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgSGFzTWVyY2hhbnRUYWdUZXN0IGV4dGVuZHMgQmFzZVBhZ2VWYXJpYW50VGVzdDxQYWdlVmFyaWFudFRlc3RUeXBlLkhhc01lcmNoYW50VGFnPiB7XG4gICAgbWVyY2hhbnRUYWdzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBTaG9waWZ5UExQVVJMVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5TaG9waWZ5UExQPiB7XG59XG5pbnRlcmZhY2UgU2hvcGlmeVBEUFVSTFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuU2hvcGlmeVBEUD4ge1xufVxuaW50ZXJmYWNlIFBhZ2VDYXRlZ29yeVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGFnZUNhdGVnb3J5PiB7XG4gICAgZXh0cmFjdG9yOiBDYXRlZ29yeUV4dHJhY3Rvcjtcbn1cbmludGVyZmFjZSBGZWF0dXJlR2F0ZVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuRmVhdHVyZUdhdGU+IHtcbiAgICBmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzO1xufVxuaW50ZXJmYWNlIFByb2R1Y3RJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUHJvZHVjdElkPiB7XG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiBJZEV4dHJhY3RvcjtcbiAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBQbHBJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGxwSWQ+IHtcbiAgICBwbHBJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG4gICAgcGxwSWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBRdWVyeVBhcmFtVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5RdWVyeVBhcmFtPiB7XG4gICAgcXVlcnlQYXJhbTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZXJIYXNJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzSW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIFVzZXJIYXNOb3RJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzTm90SW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIElzTG9hZGluZ1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuaXNMb2FkaW5nPiB7XG59XG5pbnRlcmZhY2UgSXNQcm9kdWN0Q29tcGFyaXNvbiBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5pc1Byb2R1Y3RDb21wYXJpc29uPiB7XG59XG5pbnRlcmZhY2UgUGFnZUZhbGxiYWNrVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5GYWxsYmFjaz4ge1xufVxuaW50ZXJmYWNlIFVybFJlc29sdmVyVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlcj4ge1xufVxuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRUZXN0ID0gUGFnZUNhdGVnb3J5VGVzdCB8IFNob3BpZnlQTFBVUkxUZXN0IHwgU2hvcGlmeVBEUFVSTFRlc3QgfCBDYXRhbG9nQ2F0ZWdvcnlUZXN0IHwgVG9wQ2F0YWxvZ0NhdGVnb3J5IHwgSGFzUmV2aWV3c1Rlc3QgfCBJbkNvbGxlY3Rpb25UZXN0IHwgSGFzTWVyY2hhbnRUYWdUZXN0IHwgRmVhdHVyZUdhdGVUZXN0IHwgUHJvZHVjdElkVGVzdCB8IFBscElkVGVzdCB8IFF1ZXJ5UGFyYW1UZXN0IHwgVXNlckhhc0ludGVyYWN0ZWRUZXN0IHwgVXNlckhhc05vdEludGVyYWN0ZWRUZXN0IHwgSXNMb2FkaW5nVGVzdCB8IElzUHJvZHVjdENvbXBhcmlzb24gfCBQYWdlRmFsbGJhY2tUZXN0IHwgVXJsUmVzb2x2ZXJUZXN0O1xuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgc29jaWFsIHByb29mIGVtYmVkZGVkIHdpZGdldFxuICpcbiAqIEBwYXJhbSBoZWFkZXJUaXRsZSAtIFRoZSB0aXRsZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIHdpZGdldCBoZWFkZXJcbiAqIEBwYXJhbSBzdGF0aWNTdWdnZXN0aW9ucyAtIEEgbGlzdCBvZiBzdHJpbmdzIHRvIGRpc3BsYXkgYXMgc3VnZ2VzdGlvbnMgaW4gdGhlIHdpZGdldFxuICogQHBhcmFtIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50RGVmYXVsdCAtIFRoZSB2YXJpYW50IG9mIHRoZSBzdWdnZXN0aW9uIGJ1dHRvbiB0byBkaXNwbGF5IGluIHRoZSB3aWRnZXQgZm9vdGVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnRBY2NlbnQgLSBUaGUgdmFyaWFudCBvZiB0aGUgc3VnZ2VzdGlvbiBidXR0b24gdG8gZGlzcGxheSBpbiB0aGUgd2lkZ2V0IGJvZHlcbiAqIEBwYXJhbSBzdGF0aWNJbWFnZUluZGV4IC0gSW5kZXggb2YgdGhlIGltYWdlVXJsIHRvIHVzZSBmcm9tIHRoZSBwcm9kdWN0IHJlc3BvbnNlXG4gKi9cbmludGVyZmFjZSBTb2NpYWxQcm9vZkNvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeTogc3RyaW5nO1xuICAgIGhlYWRlclRpdGxlOiBzdHJpbmc7XG4gICAgc3RhdGljUExQSW1hZ2VzTGF5b3V0PzogXCJncmlkXCIgfCBcImhvcml6b250YWxcIjtcbiAgICBoZWFkZXJGb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIHN0YXRpY1BMUEltYWdlTmFtZXM/OiBzdHJpbmdbXTtcbiAgICBzdGF0aWNJbWFnZUluZGV4PzogbnVtYmVyO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25TdHJpbmdzOiBzdHJpbmdbXTtcbiAgICBzdWdnZXN0aW9uQnV0dG9uVmFyaWFudERlZmF1bHQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50QWNjZW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbkRhdGFBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc/OiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgbG9nb05hbWU/OiBzdHJpbmc7XG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBtb3VudCBwb2ludCBmb3IgYSB3aWRnZXRcbiAqXG4gKiBAcGFyYW0gY2xhc3NOYW1lIC0gT3B0aW9uYWwgY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgbW91bnQgcG9pbnQuIFRhaWx3aW5kIGNsYXNzZXMgYXJlIHN1cHBvcnRlZFxuICogYW5kIGVuY291cmFnZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzdHlsZSB0aGUgbW91bnRpbmcgY29udGFpbmVyIGZvciB0aGUgd2lkZ2V0LlxuICovXG5leHBvcnQgdHlwZSBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgY29udGFpbmVySWQ6IHN0cmluZztcbiAgICB0ZXN0SWQ6IHN0cmluZztcbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludD86IEluc2VydGlvblBvaW50O1xuICAgIGluc2VydGlvblBvaW50OiBJbnNlcnRpb25Qb2ludDtcbiAgICBncmlkSW5zZXJ0aW9uVHlwZT86IEdyaWRJbnNlcnRpb25UeXBlO1xuICAgIHdyYXBwaW5nRWxlbWVudD86IFdyYXBwaW5nRWxlbWVudDtcbiAgICBkaXZDaGVja1NlbGVjdG9yPzogc3RyaW5nO1xuICAgIHN1cHByZXNzaW9uU2VsZWN0b3I/OiBzdHJpbmc7XG4gICAgc3R5bGU/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICBkYXRhQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBTdGF0aWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgd2lkZ2V0Q29uZmlnSWQ6IHN0cmluZztcbn07XG50eXBlIER5bmFtaWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgbW91bnRpbmdQb2ludFdpZGdldHM6IFdpZGdldERpc3BsYXlUZXN0c1tdO1xufTtcbnR5cGUgV2lkZ2V0RGlzcGxheVRlc3RzID0ge1xuICAgIHRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbiAgICB3aWRnZXRDb25maWdJZDogc3RyaW5nO1xufTtcbnR5cGUgV2lkZ2V0TW91bnRpbmcgPSBTdGF0aWNXaWRnZXRNb3VudGluZyB8IER5bmFtaWNXaWRnZXRNb3VudGluZztcbmRlY2xhcmUgZW51bSBXaWRnZXRUeXBlIHtcbiAgICBDaGF0UHJldmlldyA9IFwiQ2hhdFByZXZpZXdcIixcbiAgICBTb2NpYWxQcm9vZlYyID0gXCJTb2NpYWxQcm9vZlYyXCIsXG4gICAgQ2hhdFByZXZpZXdWMiA9IFwiQ2hhdFByZXZpZXdWMlwiLFxuICAgIENoYXRQcmV2aWV3SXNMb2FkaW5nID0gXCJDaGF0UHJldmlld0lzTG9hZGluZ1wiLFxuICAgIENoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uID0gXCJDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvblwiLFxuICAgIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb24gPSBcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIixcbiAgICBTdWdnZXN0aW9uQmFyID0gXCJTdWdnZXN0aW9uQmFyXCIsXG4gICAgU3VnZ2VzdGlvbkJhclYyID0gXCJTdWdnZXN0aW9uQmFyVjJcIixcbiAgICBJbWFnZVByb21wdENhcmQgPSBcIkltYWdlUHJvbXB0Q2FyZFwiLFxuICAgIEltYWdlQmFubmVyID0gXCJJbWFnZUJhbm5lclwiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0ID0gXCJTaW5nbGVJbWFnZVByb21wdFwiLFxuICAgIFNlYXJjaFByb21wdCA9IFwiU2VhcmNoUHJvbXB0XCIsXG4gICAgU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludCA9IFwiU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50ID0gXCJTZWFyY2hSZXN1bHRzRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaE92ZXJsYXlIb3N0ID0gXCJTZWFyY2hPdmVybGF5SG9zdFwiLFxuICAgIE5vT3AgPSBcIk5vT3BcIlxufVxudHlwZSBXaWRnZXRDb25maWcgPSBDaGF0UHJldmlld1dpZGdldENvbmZpZyB8IFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgfCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnIHwgQ2hhdFByZXZpZXdQb3N0SW50ZXJhY3Rpb25XaWRnZXRDb25maWcgfCBDaGF0UHJldmlld0lzTG9hZGluZ1dpZGdldENvbmZpZyB8IENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgfCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgfCBJbWFnZVByb21wdFdpZGdldENvbmZpZyB8IEltYWdlQmFubmVyV2lkZ2V0Q29uZmlnIHwgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hFbnRyeVBvaW50V2lkZ2V0Q29uZmlnIHwgU2VhcmNoUmVzdWx0c0VudHJ5UG9pbnRXaWRnZXRDb25maWcgfCBTZWFyY2hPdmVybGF5SG9zdFdpZGdldENvbmZpZyB8IE5vT3BXaWRnZXRDb25maWc7XG5pbnRlcmZhY2UgQmFzZVdpZGdldENvbmZpZzxUIGV4dGVuZHMgV2lkZ2V0VHlwZT4ge1xuICAgIHdpZGdldENvbmZpZ0lkOiBzdHJpbmc7XG4gICAgdHlwZTogVDtcbiAgICBjb250ZW50SWQ/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuSW1hZ2VCYW5uZXI+IHtcbiAgICBpbWFnZVNyYzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRNZXNzYWdlOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXc+IHtcbiAgICB2YXJpYW50OiBcImZpbGxlZFwiIHwgXCJmbGF0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG4gICAgc29jaWFsUHJvb2ZDb25maWc/OiBTb2NpYWxQcm9vZkNvbmZpZztcbiAgICBmb290ZXJDb25maWc/OiBDaGF0UHJldmlld0Zvb3RlckNvbmZpZztcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnIHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpbWFnZUhlaWdodD86IG51bWJlcjtcbn1cbnR5cGUgU2luZ2xlSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcInNpbmdsZVwiO1xuICAgIGltYWdlSW5kZXg6IG51bWJlcjtcbn07XG50eXBlIE11bHRpSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcImdyaWRcIiB8IFwiaG9yaXpvbnRhbFwiO1xuICAgIGltYWdlTmFtZXM6IHN0cmluZ1tdO1xufTtcbnR5cGUgU29jaWFsUHJvb2ZJbWFnZUNvbmZpZyA9IFNpbmdsZUltYWdlQ29uZmlnIHwgTXVsdGlJbWFnZUNvbmZpZztcbnR5cGUgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnID0ge1xuICAgIGJ1dHRvblN0cmluZ3M6IHN0cmluZ1tdO1xuICAgIGFjY2VudEJ1dHRvblZhcmlhbnRzPzoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBidXR0b25WYXJpYW50czoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBudW1Sb3dzPzogTnVtUm93cztcbn07XG50eXBlIENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnID0ge1xuICAgIGxlYWRpbmdUZXh0OiBzdHJpbmc7XG4gICAgYW5pbWF0ZWRTdHJpbmdzOiBzdHJpbmdbXTtcbn07XG50eXBlIENoYXRQcmV2aWV3VmFyaWFudCA9IHtcbiAgICB2YXJpYW50OiBcImZsYXRcIjtcbn0gfCB7XG4gICAgdmFyaWFudDogXCJmaWxsZWRcIjtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBzdHJpbmc7XG59IHwge1xuICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIjtcbn07XG5pbnRlcmZhY2UgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBoZWFkZXJDb25maWc6IENoYXRQcmV2aWV3SGVhZGVyVjJDb25maWc7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbnNDb25maWc6IENoYXRQcmV2aWV3U3VnZ2VzdGlvbkJ1dHRvbkNvbmZpZztcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc6IFVzZXJRdWVyeUJ1dHRvbkNvbmZpZztcbiAgICBjaGF0UHJldmlld1ZhcmlhbnQ6IENoYXRQcmV2aWV3VmFyaWFudDtcbiAgICBhZGRTZXBhcmF0b3JzPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY2hhdFByZXZpZXdWYXJpYW50OiBDaGF0UHJldmlld1ZhcmlhbnQ7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdJc0xvYWRpbmdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdJc0xvYWRpbmc+LCBCYXNlQ2hhdFByZXZpZXdDb25maWcge1xufVxuaW50ZXJmYWNlIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgdXNlTGFyZ2VQcm9kdWN0Q29tcGFyaXNvbj86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdWMldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1YyPiwgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBhbmltYXRlZFRleHRDb25maWc6IENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnO1xufVxuaW50ZXJmYWNlIFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU29jaWFsUHJvb2ZWMj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeT86IHN0cmluZztcbiAgICBpbWFnZUNvbmZpZzogU29jaWFsUHJvb2ZJbWFnZUNvbmZpZztcbn1cbmludGVyZmFjZSBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU3VnZ2VzdGlvbkJhclYyPiB7XG4gICAgbWV0cmljRGlzcGxheUxvY2F0aW9uOiBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbjtcbiAgICBsb2NhdGlvbjogU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcztcbiAgICB2YXJpYW50OiBTdWdnZXN0aW9uQnV0dG9uVmFyaWFudDtcbiAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJ1dHRvblRleHRzOiB7XG4gICAgICAgIGRlZmF1bHQ6IHN0cmluZ1tdO1xuICAgICAgICBwcm9kdWN0U3BlY2lmaWM/OiB7XG4gICAgICAgICAgICBbcHJvZHVjdElkOiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGJvbGRGaXJzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgdHdvUm93c09uTW9iaWxlPzogYm9vbGVhbjtcbiAgICBhbmltYXRpb25TcGVlZD86IFwic3RhbmRhcmRcIiB8IFwic2xvd1wiIHwgXCJub25lXCI7XG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzPzogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xufVxuaW50ZXJmYWNlIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLkltYWdlUHJvbXB0Q2FyZD4ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGxpZ2h0VGV4dD86IGJvb2xlYW47XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBzdWJ0aXRsZTogc3RyaW5nW107XG4gICAgc3RhdGljU3VnZ2VzdGlvbkNvcGllczogc3RyaW5nW107XG4gICAgdXNlclF1ZXJ5QnV0dG9uQ29uZmlnOiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgZmFsbGJhY2tCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2luZ2xlSW1hZ2VQcm9tcHQ+IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN0YXRpY1N1Z2dlc3Rpb25Db3BpZXM6IHN0cmluZ1tdO1xuICAgIHVzZXJRdWVyeUJ1dHRvbkNvbmZpZzogVXNlclF1ZXJ5QnV0dG9uQ29uZmlnO1xufVxuaW50ZXJmYWNlIFNlYXJjaEVudHJ5UG9pbnRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ6IFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ7XG4gICAgc2VhcmNoSW5wdXRWYXJpYW50OiBTZWFyY2hJbnB1dFZhcmlhbnQ7XG4gICAgc2VhcmNoSWNvblZhcmlhbnQ/OiBTZWFyY2hJY29uVmFyaWFudDtcbiAgICBzZWFyY2hJY29uU2l6ZT86IG51bWJlcjtcbiAgICBzdWdnZXN0aW9uQnV0dG9uQ29uZmlnOiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIGxheW91dDogU2VhcmNoWmVyb1N0YXRlTGF5b3V0O1xuICAgIHNlYXJjaEJveFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgYW5pbWF0aW9uU3BlZWQ/OiBcInN0YW5kYXJkXCIgfCBcInNsb3dcIiB8IFwibm9uZVwiO1xuICAgIGNvbXBhY3RMYWJlbD86IHN0cmluZztcbiAgICBpbml0aWFsU3VnZ2VzdGlvbnM/OiBzdHJpbmdbXTtcbiAgICB1c2luZ1BvcnRhbD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgTm9PcFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5Ob09wPiB7XG59XG5pbnRlcmZhY2UgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoT3ZlcmxheUhvc3Q+IHtcbn1cbmludGVyZmFjZSBTZWFyY2hSZXN1bHRzRW50cnlQb2ludFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5TZWFyY2hSZXN1bHRzRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaElucHV0VmFyaWFudDogU2VhcmNoSW5wdXRWYXJpYW50O1xuICAgIHNlYXJjaEZpbHRlclNpZGViYXJWYXJpYW50OiBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudDtcbiAgICBwcm9kdWN0R3JpZFZhcmlhbnQ6IFByb2R1Y3RHcmlkVmFyaWFudDtcbiAgICBzZWFyY2hCb3hQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIG5vUmVzdWx0c0ZvdW5kVGV4dD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SGVhZGVyUHJvcHMgZXh0ZW5kcyBUZXN0UHJvcHMge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgbG9nb0hlaWdodD86IG51bWJlcjtcbiAgICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgICB2YXJpYW50PzogU2VhcmNoUHJvbXB0VmFyaWFudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclF1ZXJ5T3B0aW9ucyB7XG4gICAgZm9vdGVyVmFyaWFudD86IFwic3RhbmRhcmRcIjtcbiAgICByZXBseUJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gICAgcmVwbHlCdXR0b25JY29uPzogXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwic2VuZFwiIHwgXCJ0aGluTWFnbmlmeWluZ0dsYXNzXCIgfCBcImFpLXNlYXJjaFwiO1xufVxudHlwZSBTZWFyY2hQcm9tcHRWYXJpYW50ID0gXCJwcmltYXJ5XCI7XG5pbnRlcmZhY2UgU2VhcmNoUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLlNlYXJjaFByb21wdD4ge1xuICAgIHZhcmlhbnQ6IFNlYXJjaFByb21wdFZhcmlhbnQ7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWFkZXJDb25maWc6IFdpZGdldEhlYWRlclByb3BzO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25zOiB7XG4gICAgICAgIHZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBidXR0b25UZXh0czogc3RyaW5nW107XG4gICAgfTtcbiAgICBmb290ZXJDb25maWc/OiBVc2VyUXVlcnlPcHRpb25zO1xufVxudHlwZSBQYWdlVmFyaWFudEJhc2UgPSB7XG4gICAgdmFyaWFudElkOiBzdHJpbmc7XG4gICAgd2lkZ2V0TW91bnRpbmc6IFdpZGdldE1vdW50aW5nW107XG4gICAgdmFyaWFudFRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbn07XG50eXBlIFBMUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBscFwiO1xuICAgIHBscElkRXh0cmFjdG9yOiBJZEV4dHJhY3Rvcjtcbn07XG50eXBlIFBEUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBkcFwiO1xuICAgIHBhcmVudFByb2R1Y3RJZEV4dHJhY3Rvcj86IElkRXh0cmFjdG9yO1xuICAgIHByb2R1Y3RJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG59O1xudHlwZSBWaXNpdFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBhZ2VfdmlzaXRcIjtcbn07XG50eXBlIE90aGVyUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwib3RoZXJcIjtcbn07XG50eXBlIEhvbWVQYWdlVmFyaWFudCA9IFBhZ2VWYXJpYW50QmFzZSAmIHtcbiAgICB2YXJpYW50VHlwZTogXCJob21lcGFnZVwiO1xufTtcbnR5cGUgU2VhcmNoUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwic2VhcmNoXCI7XG59O1xuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRDb25maWcgPSBQTFBQYWdlVmFyaWFudCB8IFBEUFBhZ2VWYXJpYW50IHwgVmlzaXRQYWdlVmFyaWFudCB8IE90aGVyUGFnZVZhcmlhbnQgfCBIb21lUGFnZVZhcmlhbnQgfCBTZWFyY2hQYWdlVmFyaWFudDtcbmV4cG9ydCB0eXBlIE9yZ1BhZ2VDb25maWcgPSB7XG4gICAgcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIHdpZGdldENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZz47XG4gICAgbW91bnRpbmdDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz47XG59O1xuZXhwb3J0IHR5cGUgT3JnQ29uZmlnID0gT3JnVUlDb25maWc7XG5leHBvcnQgeyBDYXRlZ29yeUV4dHJhY3RvclR5cGUsIENvbG9yTmFtZXMsIGNvbG9yVmFyLCBQYWdlVmFyaWFudFRlc3RUeXBlLCBXaWRnZXRUeXBlLCB9O1xuZXhwb3J0IGludGVyZmFjZSBFbnZpdmVDb25maWcge1xuICAgIGFtcGxpdHVkZUFwaUtleT86IHN0cmluZztcbiAgICBkYXRhUmVzaWRlbmN5Pzogc3RyaW5nO1xuICAgIGVudj86IHN0cmluZztcbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHJlYWN0QXBwTmFtZT86IHN0cmluZztcbiAgICBjZG5Vcmw/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBvcmdMZXZlbEFwaUtleT86IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU/OiBzdHJpbmc7XG4gICAgaWRlbnRpZnlpbmdQcmVmaXg/OiBzdHJpbmc7XG4gICAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICB2YXJpYW50SW5mb092ZXJyaWRlPzogYW55O1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIHB1YmxpY0tleT86IHN0cmluZztcbiAgICBmZWF0dXJlR2F0ZXM/OiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xufVxuZXhwb3J0IHR5cGUgeyBDYXRlZ29yeUV4dHJhY3RvciwgQ2hhdE1lc3NhZ2VWYXJpYW50LCBDaGF0TWVzc2FnZUNvbmZpZywgQ2hhdFByZXZpZXdDb25maWcsIENoYXRQcmV2aWV3SXNMb2FkaW5nV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnLCBTb2NpYWxQcm9vZlYyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnLCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0Zvb3RlckNvbmZpZywgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcsIENoYXRQcmV2aWV3V2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1ZhcmlhbnQsIENvbG9yTWFwcGluZywgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24sIEZsb2F0aW5nRW50cnlQb2ludENvbmZpZywgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uLCBJZEV4dHJhY3RvciwgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcsIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnLCBJbnNlcnRpb25Qb2ludCwgTXVsdGlJbWFnZUNvbmZpZywgT3JnVUlDb25maWcsIFBhZ2VDYXJkQ29uZmlnLCBQYWdlQ2FyZFZhcmlhbnQsIFBhZ2VDYXJkSG92ZXJWYXJpYW50LCBQYWdlQ2FyZEljb25WYXJpYW50LCBQcm9kdWN0Q2FyZENvbmZpZywgUHJvZHVjdENhcmRWYXJpYW50LCBQcm9kdWN0Q2FyZExheW91dFZhcmlhbnQsIFByb2R1Y3RDYXJkSG92ZXJWYXJpYW50LCBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCwgUHJvZHVjdExpbmtJY29uVmFyaWFudCwgUHJvZHVjdExpbmtWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29uZmlnLCBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29sb3JWYXJpYW50LCBTZWFyY2hQcm9tcHRWYXJpYW50LCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcsIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50V2lkZ2V0Q29uZmlnLCBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zLCBTaW5nbGVJbWFnZVByb21wdFdpZGdldENvbmZpZywgU2VhcmNoRW50cnlQb2ludFdpZGdldENvbmZpZywgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcsIFNvY2lhbFByb29mQ29uZmlnLCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcsIFN1Z2dlc3Rpb25CdXR0b25Db25maWcsIFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50LCBVUkxUZXN0LCBVc2VyUXVlcnlCdXR0b25Db25maWcsIFVzZXJRdWVyeUJ1dHRvbkljb24sIFdlbGNvbWVTZWN0aW9uQ29uZmlnLCBXZWxjb21lU2VjdGlvblZhcmlhbnQsIFdlbGNvbWVTZWN0aW9uQ29sb3JWYXJpYW50LCBXaWRnZXRDb25maWcsIFdyYXBwaW5nRWxlbWVudCwgU2VhcmNoQ2FyZFZhcmlhbnQsIFdpZGdldERpc3BsYXlUZXN0cywgTm9PcFdpZGdldENvbmZpZywgV2lkZ2V0TW91bnRpbmcsIFN0YXRpY1dpZGdldE1vdW50aW5nLCBEeW5hbWljV2lkZ2V0TW91bnRpbmcsIFBEUFBhZ2VWYXJpYW50LCBQTFBQYWdlVmFyaWFudCwgVmlzaXRQYWdlVmFyaWFudCwgT3RoZXJQYWdlVmFyaWFudCwgSG9tZVBhZ2VWYXJpYW50LCBTZWFyY2hQYWdlVmFyaWFudCwgTnVtUm93cywgfTtcbiIsImltcG9ydCB7IFBhZ2VWYXJpYW50Q29uZmlnLCBXaWRnZXRNb3VudGluZ0NvbmZpZywgV2lkZ2V0Q29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRlbmRDb25maWcge1xuICAgIG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudHM/OiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIG1vdW50aW5nQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPjtcbiAgICB3aWRnZXRDb25maWdzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnPjtcbiAgICB1aUNvbmZpZ3M/OiBPbWl0PE9yZ1VJQ29uZmlnLCBcIm1lcmNoYW50T3ZlcnJpZGVDc3NcIj47XG59XG4iLCJkZWNsYXJlIGVudW0gR29vZ2xlQW5hbHl0aWNzRXZlbnRzIHtcbiAgICBBRERfVE9fQ0FSVF92MSA9IFwiYWRkX3RvX2NhcnRcIixcbiAgICBBRERfVE9fQ0FSVF92MiA9IFwiYWRkVG9DYXJ0XCJcbn1cbmV4cG9ydCB7IEdvb2dsZUFuYWx5dGljc0V2ZW50cyB9O1xuIiwiaW1wb3J0IHsgQ3VzdFNlcnZpY2VBdHRhY2htZW50LCBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzLCBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLCBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzLCBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsIEFjY2VwdGFibGVGb3JtRmllbGRUeXBlLCBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB9IGZyb20gJy4vYXBpL3Jlc3BvbnNlJztcbmV4cG9ydCBkZWNsYXJlIGVudW0gTWVzc2FnZVJvbGUge1xuICAgIFVzZXIgPSBcInVzZXJcIixcbiAgICBBc3Npc3RhbnQgPSBcImFzc2lzdGFudFwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgICBUZXh0ID0gXCJ0ZXh0XCIsXG4gICAgU3VnZ2VzdGlvbkNsaWNrZWQgPSBcInN1Z2dlc3Rpb25fY2xpY2tlZFwiLFxuICAgIFByb2R1Y3QgPSBcInByb2R1Y3RcIixcbiAgICBQcm9kdWN0U2VhcmNoID0gXCJwcm9kdWN0X3NlYXJjaFwiLFxuICAgIFJldmlldyA9IFwicmV2aWV3XCIsXG4gICAgUXVlcnlUeXBlZCA9IFwicXVlcnlfdHlwZWRcIixcbiAgICBTZXBhcmF0b3IgPSBcInNlcGFyYXRvclwiLFxuICAgIFBhZ2UgPSBcInBhZ2VcIixcbiAgICBTZWFyY2ggPSBcInNlYXJjaFwiLFxuICAgIEF0dGFjaG1lbnQgPSBcImF0dGFjaG1lbnRcIixcbiAgICBDWEFnZW50UmVzcG9uc2UgPSBcImN4X2FnZW50X3Jlc3BvbnNlXCIsXG4gICAgRm9ybSA9IFwiZm9ybVwiLFxuICAgIE9yZGVyID0gXCJvcmRlclwiLFxuICAgIFByb2R1Y3RTZWFyY2hGaWx0ZXIgPSBcInByb2R1Y3Rfc2VhcmNoX2ZpbHRlclwiXG59XG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcm9sZTogTWVzc2FnZVJvbGU7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG59ICYgKFRleHRNZXNzYWdlTWV0YWRhdGEgfCBRdWVyeVR5cGVkTWV0YWRhdGEgfCBTdWdnZXN0aW9uTWVzc2FnZU1ldGFkYXRhIHwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB8IFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfCBSZXZpZXdNZXNzYWdlTWV0YWRhdGEgfCBTZXBhcmF0b3JNZXNzYWdlTWV0YWRhdGEgfCBQYWdlTWVzc2FnZU1ldGFkYXRhIHwgU2VhcmNoTWVzc2FnZU1ldGFkYXRhIHwgQXR0YWNobWVudE1ldGFkYXRhIHwgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgfCBGb3JtTWVzc2FnZU1ldGFkYXRhIHwgT3JkZXJNZXNzYWdlTWV0YWRhdGEgfCBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEpO1xudHlwZSBBdHRhY2htZW50TWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQXR0YWNobWVudDtcbiAgICBtZXRhZGF0YToge1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgICBhdHRhY2htZW50OiBDdXN0U2VydmljZUF0dGFjaG1lbnRbXTtcbiAgICB9O1xufTtcbnR5cGUgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQ1hBZ2VudFJlc3BvbnNlO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICAgICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgfTtcbn07XG50eXBlIFRleHRNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dDtcbiAgICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgUXVlcnlUeXBlZE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQ7XG4gICAgbWV0YWRhdGE6IFRleHRSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFN1Z2dlc3Rpb25NZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQ7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc3VnZ2VzdGlvbklkOiBzdHJpbmc7XG4gICAgICAgIHN1Z2dlc3Rpb25Db250ZW50OiBzdHJpbmc7XG4gICAgfTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3Q7XG4gICAgbWV0YWRhdGE6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2g7XG4gICAgbWV0YWRhdGE6IFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFJldmlld01lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXc7XG4gICAgbWV0YWRhdGE6IFJldmlld1Jlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VwYXJhdG9yTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcjtcbn07XG50eXBlIFBhZ2VNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUGFnZTtcbiAgICBtZXRhZGF0YTogUGFnZVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaDtcbiAgICBtZXRhZGF0YTogU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaEZpbHRlcjtcbiAgICBtZXRhZGF0YTogU2VhcmNoUHJvZHVjdEZpbHRlckF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBGb3JtRmllbGQgPSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB0eXBlOiBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZTtcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBmb3JtYXQ/OiAnZW1haWwnO1xuICAgIHZhbHVlPzogc3RyaW5nO1xufTtcbnR5cGUgRm9ybU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGZvcm1UeXBlPzogRm9ybVR5cGU7XG4gICAgICAgIGZpZWxkczogRm9ybUZpZWxkW107XG4gICAgfTtcbn07XG50eXBlIE9yZGVyTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLk9yZGVyO1xuICAgIG1ldGFkYXRhOiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB7XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IE9yZ1Nob3J0TmFtZToge1xuICAgIHJlYWRvbmx5IENvdGVyaWU6IFwiY290ZXJpZVwiO1xuICAgIHJlYWRvbmx5IEZvckxvdmVBbmRMZW1vbnM6IFwiZm9yLWxvdmUtYW5kLWxlbW9uc1wiO1xuICAgIHJlYWRvbmx5IEdyZWVucGFuOiBcImdyZWVucGFuXCI7XG4gICAgcmVhZG9ubHkgSm9yZGFuQ3JhaWc6IFwiam9yZGFuLWNyYWlnXCI7XG4gICAgcmVhZG9ubHkgTGFycnlBbmRTZXJnZXM6IFwibGFycnlfYW5kX3Nlcmdlc1wiO1xuICAgIHJlYWRvbmx5IExlYXBzQW5kUmVib3VuZHM6IFwibGVhcHMtYW5kLXJlYm91bmRzXCI7XG4gICAgcmVhZG9ubHkgTWFudHJhQnJhbmQ6IFwibWFudHJhLWJyYW5kXCI7XG4gICAgcmVhZG9ubHkgU3Bhbng6IFwic3BhbnhcIjtcbiAgICByZWFkb25seSBTcGFueFN0YWdpbmc6IFwic3RhZ2luZy1zcGFueFwiO1xuICAgIHJlYWRvbmx5IFN1cGVyZ29vcDogXCJzdXBlcmdvb3BcIjtcbiAgICByZWFkb25seSBVbmlxdWVWaW50YWdlOiBcInVuaXF1ZS12aW50YWdlXCI7XG4gICAgcmVhZG9ubHkgSmFja0FyY2hlcjogXCJqYWNrLWFyY2hlclwiO1xuICAgIHJlYWRvbmx5IFNraW5QZXJmZWN0aW9uOiBcInNraW4tcGVyZmVjdGlvblwiO1xuICAgIHJlYWRvbmx5IExvb2tPcHRpYzogXCJsb29rLW9wdGljXCI7XG4gICAgcmVhZG9ubHkgRml2ZUNiZDogXCJmaXZlLWNiZFwiO1xuICAgIHJlYWRvbmx5IFNuYXBTdXBwbGVtZW50czogXCJzbmFwLXN1cHBsZW1lbnRzXCI7XG4gICAgcmVhZG9ubHkgTG9uZ2V2aXR5cng6IFwibG9uZ2V2aXR5cnhcIjtcbiAgICByZWFkb25seSBWZW5hQ2JkOiBcInZlbmEtY2JkXCI7XG4gICAgcmVhZG9ubHkgTWVkdGVycmE6IFwibWVkdGVycmFcIjtcbiAgICByZWFkb25seSBNb2RlbGxzOiBcIm1vZGVsbHNcIjtcbiAgICByZWFkb25seSBQcmVzc2VkRmxvcmFsOiBcInByZXNzZWQtZmxvcmFsXCI7XG4gICAgcmVhZG9ubHkgS2luZHJlZEJyYXZlbHk6IFwia2luZHJlZC1icmF2ZWx5XCI7XG4gICAgcmVhZG9ubHkgV2luZUVudGh1c2lhc3Q6IFwid2luZS1lbnRodXNpYXN0XCI7XG4gICAgcmVhZG9ubHkgSG9tZWdyb3duQ2FubmFiaXM6IFwiaG9tZWdyb3duLWNhbm5hYmlzXCI7XG4gICAgcmVhZG9ubHkgRHJlYW1sYW5kQmFieTogXCJkcmVhbWxhbmQtYmFieVwiO1xuICAgIHJlYWRvbmx5IEJhbmRvbGllcjogXCJiYW5kb2xpZXJcIjtcbiAgICByZWFkb25seSBXZXN0b25Kb25Cb3VjaGVyOiBcIndlc3Rvbi1qb24tYm91Y2hlclwiO1xuICAgIHJlYWRvbmx5IEt1dEZyb21UaGVLbG90aDogXCJrdXQtZnJvbS10aGUta2xvdGhcIjtcbiAgICByZWFkb25seSBHcm9vdmVMaWZlOiBcImdyb292ZS1saWZlXCI7XG4gICAgcmVhZG9ubHkgQ2FycGU6IFwiY2FycGVcIjtcbiAgICByZWFkb25seSBXb2xmVGFjdGljYWw6IFwid29sZi10YWN0aWNhbFwiO1xuICAgIHJlYWRvbmx5IFdvbGZNYXR0cmVzczogXCJ3b2xmbWF0dHJlc3NcIjtcbiAgICByZWFkb25seSBEZWZhdWx0OiBcImRlZmF1bHRcIjtcbn07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFByb2R1Y3RFeHBlcmltZW50IHtcbiAgICBEZWZhdWx0ID0gXCJkZWZhdWx0XCJcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIge1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG59XG4iLCIvKipcbiAqIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuICogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gU3BpZmZ5V2lkZ2V0cyB7XG4gICAgSW1hZ2VCYW5uZXIgPSBcImltYWdlX2Jhbm5lclwiLFxuICAgIEltYWdlUHJvbXB0Q2FyZCA9IFwiaW1hZ2VfcHJvbXB0X2NhcmRcIixcbiAgICBTaW5nbGVJbWFnZVByb21wdCA9IFwic2luZ2xlX2ltYWdlX3Byb21wdFwiLFxuICAgIEVtYmVkZGVkV2lkZ2V0ID0gXCJlbWJlZGRlZF93aWRnZXRcIixcbiAgICBGbG9hdGluZ0J1dHRvbiA9IFwiZmxvYXRpbmdfYnV0dG9uXCIsXG4gICAgU3VnZ2VzdGlvbkJhciA9IFwic3VnZ2VzdGlvbl9iYXJcIixcbiAgICBTZWFyY2hQcm9tcHQgPSBcInNlYXJjaF9wcm9tcHRcIixcbiAgICBHbG9iYWxTZWFyY2ggPSBcImdsb2JhbF9zZWFyY2hcIixcbiAgICBTZWFyY2hSZXN1bHRzID0gXCJzZWFyY2hfcmVzdWx0c1wiLFxuICAgIEdsb2JhbFNlYXJjaEVudHJ5UG9pbnQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlfcG9pbnRcIlxufVxuIiwiaW1wb3J0IHsgQ29sb3JNYXBwaW5nLCBPcmdQYWdlQ29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCB7IE9yZ1Nob3J0TmFtZSB9IGZyb20gXCIuL29yZ3NFbnVtXCI7XG5leHBvcnQgdHlwZSBCYXNpY09yZ0luZm9UeXBlID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBkZWZhdWx0UHJvZHVjdElkOiBzdHJpbmc7XG4gICAgYWx3YXlzRW5hYmxlZE1lcmNoYW50czogYm9vbGVhbjtcbiAgICBvcmdVSUNvbmZpZzogKCkgPT4gT3JnVUlDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgb3JnUGFnZUNvbmZpZzogKCkgPT4gT3JnUGFnZUNvbmZpZztcbiAgICBvcmdDb2xvcnM6ICgpID0+IENvbG9yTWFwcGluZyB8IHt9O1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldE9yZ0luZm86IChvcmdTaG9ydE5hbWU/OiBzdHJpbmcpID0+IFByb21pc2U8QmFzaWNPcmdJbmZvVHlwZT47XG4iLCJpbXBvcnQgeyBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHtcbn1cbiIsImltcG9ydCB7IEdlbmVyYXRpb25QYXJhbXMgYXMgQXBpR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRpb25QYXJhbXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpR2VuZXJhdGlvblBhcmFtcz4ge1xufVxuIiwiaW1wb3J0IHsgUERQQXR0cmlidXRlcyBhcyBBcGlQRFBBdHRyaWJ1dGVzLCBQTFBBdHRyaWJ1dGVzIGFzIEFwaVBMUEF0dHJpYnV0ZXMsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzIGFzIEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzLCBTZWFyY2hBdHRyaWJ1dGVzIGFzIEFwaVNlYXJjaEF0dHJpYnV0ZXMsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyBhcyBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMsIFVzZXJFdmVudCBhcyBBcGlVc2VyRXZlbnQsIEZvcm1UeXBlLCBQYWdlVmlzaXRDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBQRFBBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVBEUEF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUExQQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQTFBBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU2VhcmNoQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlRdWVyeVR5cGVkQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyB7XG4gICAgZmlsbGVkU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3JtUmVzcG9uc2VJZDogc3RyaW5nO1xuICAgIGZvcm1UeXBlOiBGb3JtVHlwZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZpc2l0QXR0cmlidXRlcyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcGFnZVZpc2l0Q2F0ZWdvcnk6IFBhZ2VWaXNpdENhdGVnb3J5O1xufVxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgdHlwZSBVc2VyRXZlbnRBdHRyaWJ1dGVzID0gUERQQXR0cmlidXRlcyB8IFBMUEF0dHJpYnV0ZXMgfCBRdWVyeVR5cGVkQXR0cmlidXRlcyB8IFNlYXJjaEF0dHJpYnV0ZXMgfCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgfCBQYWdlVmlzaXRBdHRyaWJ1dGVzO1xuZXhwb3J0IGludGVyZmFjZSBQRFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCB8IFVzZXJFdmVudENhdGVnb3J5LkFkZFRvQ2FydDtcbiAgICBhdHRyaWJ1dGVzOiBQRFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBQTFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdDtcbiAgICBhdHRyaWJ1dGVzOiBQTFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZDtcbiAgICBhdHRyaWJ1dGVzOiBRdWVyeVR5cGVkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoO1xuICAgIGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkO1xuICAgIGF0dHJpYnV0ZXM6IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTG9hZGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcHBVbmxvYWRlZEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwVW5sb2FkZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VWaXNpdEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0O1xuICAgIGF0dHJpYnV0ZXM6IFBhZ2VWaXNpdEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TdWJtaXR0ZWQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkO1xuICAgIGF0dHJpYnV0ZXM6IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IHR5cGUgVXNlckV2ZW50ID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPFBpY2s8QXBpVXNlckV2ZW50LCAnZXZlbnRfaWQnIHwgJ2NhdGVnb3J5JyB8ICdjcmVhdGVkX2F0Jz4+ICYgKFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB8IEFwcExvYWRlZFVzZXJFdmVudCB8IFBEUFVzZXJFdmVudCB8IFF1ZXJ5VHlwZWRVc2VyRXZlbnQgfCBTZWFyY2hVc2VyRXZlbnQgfCBBcHBVbmxvYWRlZEV2ZW50IHwgUExQVXNlckV2ZW50IHwgUGFnZVZpc2l0RXZlbnQgfCBGb3JtU3VibWl0dGVkKTtcbiIsImltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGlvblBhcmFtcyc7XG5leHBvcnQgaW50ZXJmYWNlIE5leHRNZXNzYWdlUmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudHM/OiBVc2VyRXZlbnRbXTtcbiAgICBmZWF0dXJlRmxhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbn1cbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hSZXNwb25zZSBhcyBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UsIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgYXMgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZT4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgICBwcm9kdWN0czogU2VhcmNoUmVzcG9uc2VQcm9kdWN0W107XG4gICAgZmlsdGVyczogc3RyaW5nW107XG4gICAgZ2VuZXJhdGVkUXVlcnk/OiBzdHJpbmc7XG4gICAgdG90YWxQcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhcmFtcyB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBsaW1pdD86IG51bWJlcjtcbn1cbiIsImltcG9ydCB7IFN1Z2dlc3Rpb24gYXMgQXBpU3VnZ2VzdGlvbiB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb24gZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbj4ge1xufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuIiwiZGVjbGFyZSBjb25zdCBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgPSBcIlxcbiAgcXVlcnkge1xcbiAgICBtZSB7XFxuICAgICAgb3JnIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI7XG5leHBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfTtcbiIsImltcG9ydCB0eXBlIHsgQmFzZUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGJhc2UgR29vZ2xlIEFuYWx5dGljcyBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgYmFzZSBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNCYXNlRWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEJhc2VFY29tbWVyY2VFdmVudDtcbiIsImltcG9ydCB0eXBlIHsgR0E0RWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIGEgR29vZ2xlIEFuYWx5dGljcyA0IGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBHQTQgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzR0E0RWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEdBNEVjb21tZXJjZUV2ZW50O1xuIiwiaW1wb3J0IHR5cGUgeyBVQUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGxlZ2FjeSBVbml2ZXJzYWwgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBsZWdhY3kgVUEgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudDogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgVUFFY29tbWVyY2VFdmVudDtcbiIsImludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgICByb3dfaW5kZXg6IG51bWJlcjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcjogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIgfSBmcm9tICcuLi9zcGFueFRha2VBUXVpekN0YVBhcmFtZXRlcic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyO1xuIiwiaW1wb3J0IHsgVmFyaWFudEluZm8gfSBmcm9tICcuLi92YXJpYW50SW5mbyc7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgVmFyaWFudEluZm8uXG4gKlxuICogQHBhcmFtIHZhcmlhbnRJbmZvIC0gVGhlIHVua25vd24gb2JqZWN0IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgaXMgYSB2YWxpZCBWYXJpYW50SW5mbyBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNWYXJpYW50SW5mbzogKHZhcmlhbnRJbmZvOiB1bmtub3duKSA9PiB2YXJpYW50SW5mbyBpcyBWYXJpYW50SW5mbztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlOiA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiB1bmtub3duLCBwcm9wOiBrZXlvZiBULCB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIiB8IFwiYXJyYXlcIiwgaXNPcHRpb25hbD86IGJvb2xlYW4pID0+IG9iaiBpcyBUO1xuIiwiaW1wb3J0IHsgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBkYXRhIGhhcyB0aGUgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzICh3aXRoIHRoZSBjb3JyZWN0IHR5cGVzKSBvZlxuICogYSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBoYXMgdGhlIGNvcnJlY3QgcHJvcGVydGllcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG4iLCJpbXBvcnQgeyBPcmRlckl0ZW1JbmZvLCBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVySXRlbUluZm8gZXh0ZW5kcyBPbWl0PE9yZGVySXRlbUluZm8sICdkZWxpdmVyZWRfYXQnIHwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcgfCAnaW5fdHJhbnNpdF9hdCc+IHtcbiAgICBkZWxpdmVyZWRfYXQ/OiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0Pzogc3RyaW5nO1xuICAgIGluX3RyYW5zaXRfYXQ/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgT21pdDxPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgJ2NyZWF0ZWRfYXQnIHwgJ2xhdGVzdF9ldmVudF9kYXRlJyB8ICdsaW5lX2l0ZW1zJz4ge1xuICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICBsYXRlc3RfZXZlbnRfZGF0ZTogc3RyaW5nO1xuICAgIGxpbmVfaXRlbXM6IEFwaU9yZGVySXRlbUluZm9bXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUge1xuICAgIHNlc3Npb25fcmVwbGF5X2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ19lbmFibGVkOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3Mge1xuICAgIG1lYXN1cmVtZW50X2lkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBhbXBsaXR1ZGU/OiBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGU7XG4gICAgY3VzdG9tZXJfc2VydmljZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZTtcbiAgICBnb29nbGVfYW5hbHl0aWNzPzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmdhbml6YXRpb25Db25maWcgZXh0ZW5kcyBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNvbmZpZzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnO1xufVxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBBcGlPcmdhbml6YXRpb25Db25maWc7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBTdGF0c2lnRXhwZXJpbWVudCBhcyBBcGlPcmdDb25maWdFeHBlcmltZW50LCBTdGF0c2lnRmVhdHVyZUdhdGUgYXMgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUsIE9yZ2FuaXphdGlvblNldHRpbmdzIGFzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJy4vaXNBcGlPcmdhbml6YXRpb25Db25maWcnO1xuaW50ZXJmYWNlIEFwaU9yZ0NvbmZpZ1Jlc3VsdHMge1xuICAgIGNvbmZpZ3M6IEFwaU9yZ2FuaXphdGlvbkNvbmZpZ1tdO1xuICAgIGV4cGVyaW1lbnRzOiBBcGlPcmdDb25maWdFeHBlcmltZW50W107XG4gICAgZ2F0ZXM6IEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gICAgb3JnOiBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncztcbn1cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIFJlcXVpcmVkPEFwaU9yZ0NvbmZpZ1Jlc3VsdHM+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzOiAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFBMUEF0dHJpYnV0ZXMsIFBMUElkQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUElkQXR0cmlidXRlOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBQTFBJZEF0dHJpYnV0ZXM7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUEV2ZW50QXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgUExQQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzOiAoYXR0cmlidXRlczogdW5rbm93bikgPT4gYXR0cmlidXRlcyBpcyBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YTtcbiIsImltcG9ydCB0eXBlIHsgVXBwZXJDYXNlQ2hhcmFjdGVycywgV29yZFNlcGFyYXRvcnMgfSBmcm9tICcuL2ludGVybmFsJztcbnR5cGUgVXBwZXJDYXNlVG9Mb3dlckNhc2U8VCBleHRlbmRzIHN0cmluZz4gPSBUIGV4dGVuZHMgVXBwZXJjYXNlPFQ+ID8gTG93ZXJjYXNlPFQ+IDogVDtcbnR5cGUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXzxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTb3VyY2UgZXh0ZW5kcyAnJyA/IFtdIDogU291cmNlIGV4dGVuZHMgYCR7aW5mZXIgRmlyc3RQYXJ0fSR7RGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gU291cmNlIGV4dGVuZHMgYCR7Rmlyc3RQYXJ0fSR7aW5mZXIgVXNlZERlbGltaXRlcn0ke1NlY29uZFBhcnR9YCA/IFVzZWREZWxpbWl0ZXIgZXh0ZW5kcyBEZWxpbWl0ZXIgPyBTb3VyY2UgZXh0ZW5kcyBgJHtpbmZlciBGaXJzdFBhcnR9JHtVc2VkRGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gW1xuICAgIC4uLlNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxGaXJzdFBhcnQsIERlbGltaXRlcj4sXG4gICAgVXNlZERlbGltaXRlcixcbiAgICAuLi5TcGxpdEluY2x1ZGluZ0RlbGltaXRlcnM8U2Vjb25kUGFydCwgRGVsaW1pdGVyPlxuXSA6IG5ldmVyIDogbmV2ZXIgOiBuZXZlciA6IFtTb3VyY2VdO1xuLyoqXG4gKiBVbmxpa2UgYSBzaW1wbGVyIHNwbGl0LCB0aGlzIG9uZSBpbmNsdWRlcyB0aGUgZGVsaW1pdGVyIHNwbGl0dGVkIG9uIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgbGl0ZXJhbC4gVGhpcyBpcyB0byBlbmFibGUgc3BsaXR0aW5nIG9uLCBmb3IgZXhhbXBsZSwgdXBwZXItY2FzZSBjaGFyYWN0ZXJzLlxuICpcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKi9cbmV4cG9ydCB0eXBlIFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTcGxpdEluY2x1ZGluZ0RlbGltaXRlcnNfPFVwcGVyQ2FzZVRvTG93ZXJDYXNlPFNvdXJjZT4sIERlbGltaXRlcj47XG4vKipcbiAqRm9ybWF0IGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgc3BsaXR0ZWQgc3RyaW5nIGxpdGVyYWwgdGhhdCBgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8PmAgZnVzZXMgdG9nZXRoZXIsIGVuc3VyaW5nIGRlc2lyZWQgY2FzaW5nLlxuICpcbiAqQHNlZSBTdHJpbmdBcnJheVRvRGVsaW1pdGVyQ2FzZVxuICovXG50eXBlIFN0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8U3RyaW5nUGFydCBleHRlbmRzIHN0cmluZywgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gU3RyaW5nUGFydCBleHRlbmRzIFVzZWRXb3JkU2VwYXJhdG9ycyA/IERlbGltaXRlciA6IFN0YXJ0IGV4dGVuZHMgdHJ1ZSA/IExvd2VyY2FzZTxTdHJpbmdQYXJ0PiA6IFN0cmluZ1BhcnQgZXh0ZW5kcyBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycyA/IGAke0RlbGltaXRlcn0ke0xvd2VyY2FzZTxTdHJpbmdQYXJ0Pn1gIDogU3RyaW5nUGFydDtcbi8qKlxuICogVGFrZXMgdGhlIHJlc3VsdCBvZiBhIHNwbGl0dGVkIHN0cmluZyBsaXRlcmFsIGFuZCByZWN1cnNpdmVseSBjb25jYXRlbmF0ZXMgaXQgdG9nZXRoZXIgaW50byB0aGUgZGVzaXJlZCBjYXNpbmcuXG4gKlxuICogSXQgcmVjZWl2ZXMgYFVzZWRXb3JkU2VwYXJhdG9yc2AgYW5kIGBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVyc2AgYXMgaW5wdXQgdG8gZW5zdXJlIGl0J3MgZnVsbHkgZW5jYXBzdWxhdGVkLlxuICpcbiAqIEBzZWUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXG4gKi9cbnR5cGUgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8UGFydHMgZXh0ZW5kcyByZWFkb25seSBhbnlbXSwgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gUGFydHMgZXh0ZW5kcyBbYCR7aW5mZXIgRmlyc3RQYXJ0fWAsIC4uLmluZmVyIFJlbWFpbmluZ1BhcnRzXSA/IGAke1N0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8Rmlyc3RQYXJ0LCBTdGFydCwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn0ke1N0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFJlbWFpbmluZ1BhcnRzLCBmYWxzZSwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn1gIDogUGFydHMgZXh0ZW5kcyBbc3RyaW5nXSA/IHN0cmluZyA6ICcnO1xuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGxpdGVyYWwgdG8gYSBjdXN0b20gc3RyaW5nIGRlbGltaXRlciBjYXNpbmcuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4sIGZvciBleGFtcGxlLCBjb252ZXJ0aW5nIGEgY2FtZWwtY2FzZWQgb2JqZWN0IHByb3BlcnR5IHRvIGFuIG9kZGx5IGNhc2VkIG9uZS5cbiAqXG4gKiBAc2VlIEtlYmFiQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZX0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiAvLyBTaW1wbGVcbiAqXG4gKiBjb25zdCBzb21lVmFyaWFibGU6IERlbGltaXRlckNhc2U8J2Zvb0JhcicsICcjJz4gPSAnZm9vI2Jhcic7XG4gKlxuICogLy8gQWR2YW5jZWRcbiAqXG4gKiB0eXBlIE9kZGx5Q2FzZWRQcm9wZXJ0aWVzPFQ+ID0ge1xuICogXHRbSyBpbiBrZXlvZiBUIGFzIERlbGltaXRlckNhc2U8SywgJyMnPl06IFRbS11cbiAqIH07XG4gKlxuICogaW50ZXJmYWNlIFNvbWVPcHRpb25zIHtcbiAqIFx0ZHJ5UnVuOiBib29sZWFuO1xuICogXHRpbmNsdWRlRmlsZTogc3RyaW5nO1xuICogXHRmb286IG51bWJlcjtcbiAqIH1cbiAqXG4gKiBjb25zdCByYXdDbGlPcHRpb25zOiBPZGRseUNhc2VkUHJvcGVydGllczxTb21lT3B0aW9ucz4gPSB7XG4gKiBcdCdkcnkjcnVuJzogdHJ1ZSxcbiAqIFx0J2luY2x1ZGUjZmlsZSc6ICdiYXIuanMnLFxuICogXHRmb286IDEyM1xuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqL1xuZXhwb3J0IHR5cGUgRGVsaW1pdGVyQ2FzZTxWYWx1ZSwgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFZhbHVlID8gVmFsdWUgOiBWYWx1ZSBleHRlbmRzIHN0cmluZyA/IFN0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxWYWx1ZSwgV29yZFNlcGFyYXRvcnMgfCBVcHBlckNhc2VDaGFyYWN0ZXJzPiwgdHJ1ZSwgV29yZFNlcGFyYXRvcnMsIFVwcGVyQ2FzZUNoYXJhY3RlcnMsIERlbGltaXRlcj4gOiBWYWx1ZTtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZSB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZSc7XG5pbXBvcnQgdHlwZSB7IE5vblJlY3Vyc2l2ZVR5cGUgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB0eXBlIHsgVW5rbm93bkFycmF5IH0gZnJvbSAnLi91bmtub3duQXJyYXknO1xuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBwcm9wZXJ0aWVzIHRvIGRlbGltaXRlciBjYXNlIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuLCBmb3IgZXhhbXBsZSwgY29udmVydGluZyBzb21lIEFQSSB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IHN0eWxlLlxuICpcbiAqIEBzZWUgRGVsaW1pdGVyQ2FzZVxuICogQHNlZSBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiBcdHVzZXJJZDogbnVtYmVyO1xuICogXHR1c2VyTmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGludGVyZmFjZSBVc2VyV2l0aEZyaWVuZHMge1xuICogXHR1c2VySW5mbzogVXNlcjtcbiAqIFx0dXNlckZyaWVuZHM6IFVzZXJbXTtcbiAqIH1cbiAqXG4gKiBjb25zdCByZXN1bHQ6IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzLCAnLSc+ID0ge1xuICogXHQndXNlci1pbmZvJzoge1xuICogXHQndXNlci1pZCc6IDEsXG4gKiBcdFx0J3VzZXItbmFtZSc6ICdUb20nLFxuICogXHR9LFxuICogXHQndXNlci1mcmllbmRzJzogW1xuICogXHRcdHtcbiAqIFx0XHRcdCd1c2VyLWlkJzogMixcbiAqIFx0XHRcdCd1c2VyLW5hbWUnOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0J3VzZXItaWQnOiAzLFxuICogXHRcdFx0J3VzZXItbmFtZSc6ICdTcGlrZScsXG4gKiBcdFx0fSxcbiAqIFx0XSxcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgQ2hhbmdlIGNhc2VcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBWYWx1ZSBleHRlbmRzIE5vblJlY3Vyc2l2ZVR5cGUgPyBWYWx1ZSA6IFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5ID8gRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlLCBEZWxpbWl0ZXI+IDogVmFsdWUgZXh0ZW5kcyBTZXQ8aW5mZXIgVT4gPyBTZXQ8RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+PiA6IHtcbiAgICBbSyBpbiBrZXlvZiBWYWx1ZSBhcyBEZWxpbWl0ZXJDYXNlPEssIERlbGltaXRlcj5dOiBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlW0tdLCBEZWxpbWl0ZXI+O1xufTtcbnR5cGUgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5LCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gVmFsdWUgZXh0ZW5kcyBbXSA/IFtdIDogVmFsdWUgZXh0ZW5kcyBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyBbRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LCAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5dIDogVmFsdWUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyByZWFkb25seSBbXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LFxuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8ViwgRGVsaW1pdGVyPlxuXSA6IFZhbHVlIGV4dGVuZHMgcmVhZG9ubHkgWy4uLmluZmVyIFUsIGluZmVyIFZdID8gW1xuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPixcbiAgICBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5cbl0gOiBWYWx1ZSBleHRlbmRzIHJlYWRvbmx5IFsuLi5pbmZlciBVLCBpbmZlciBWXSA/IHJlYWRvbmx5IFtcbiAgICAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4sXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWLCBEZWxpbWl0ZXI+XG5dIDogVmFsdWUgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBWYWx1ZSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBuZXZlcjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCc7XG4vKipcbiAqIENvbnZlcnQgb2JqZWN0IHByb3BlcnRpZXMgdG8gc25ha2UgY2FzZSByZWN1cnNpdmVseS5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiwgZm9yIGV4YW1wbGUsIGNvbnZlcnRpbmcgc29tZSBBUEkgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBzdHlsZS5cbiAqXG4gKiBAc2VlIFNuYWtlQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VkUHJvcGVydGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB0eXBlIHtTbmFrZUNhc2VkUHJvcGVydGllc0RlZXB9IGZyb20gJ3R5cGUtZmVzdCc7XG4gKlxuICogaW50ZXJmYWNlIFVzZXIge1xuICogXHR1c2VySWQ6IG51bWJlcjtcbiAqIFx0dXNlck5hbWU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBpbnRlcmZhY2UgVXNlcldpdGhGcmllbmRzIHtcbiAqIFx0dXNlckluZm86IFVzZXI7XG4gKiBcdHVzZXJGcmllbmRzOiBVc2VyW107XG4gKiB9XG4gKlxuICogY29uc3QgcmVzdWx0OiBTbmFrZUNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzPiA9IHtcbiAqIFx0dXNlcl9pbmZvOiB7XG4gKiBcdFx0dXNlcl9pZDogMSxcbiAqIFx0XHR1c2VyX25hbWU6ICdUb20nLFxuICogXHR9LFxuICogXHR1c2VyX2ZyaWVuZHM6IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHR1c2VyX2lkOiAyLFxuICogXHRcdFx0dXNlcl9uYW1lOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0dXNlcl9pZDogMyxcbiAqIFx0XHRcdHVzZXJfbmFtZTogJ1NwaWtlJyxcbiAqIFx0XHR9LFxuICogXHRdLFxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqL1xuZXhwb3J0IHR5cGUgU25ha2VDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlPiA9IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsICdfJz47XG4iLCIvKipcbiAqIEdlbmVyaWMgdXRpbGl0eSB0byB0cmFuc2Zvcm0gc25ha2VfY2FzZSBvYmplY3Qga2V5cyB0byBjYW1lbENhc2UgYXQgcnVudGltZS5cbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIHR5cGUgdXRpbGl0eS5cbiAqL1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRyYW5zZm9ybVNuYWtlVG9DYW1lbDogKG9iajogdW5rbm93bikgPT4gdW5rbm93bjtcbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgb2JqZWN0IGtleXMgZnJvbSBjYW1lbENhc2UgdG8gc25ha2VfY2FzZVxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB0cmFuc2Zvcm1DYW1lbFRvU25ha2U6IChvYmo6IHVua25vd24pID0+IHVua25vd247XG4iLCJpbXBvcnQgeyBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKlxuICogQHJldHVybnMgVGhlIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nXG4gKiBkb2VzIG5vdCBtYXAgdG8gYSB2YWxpZCBlbnVtXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHN0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlOiAoc3RhdHVzOiBzdHJpbmcpID0+IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1wiO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gQ29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCB7IFdpZGdldENvbmZpZywgUGFnZVZhcmlhbnRDb25maWcsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUGFnZVZhcmlhbnRDb25maWc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29uZmlnS2V5OiBzdHJpbmcpID0+IFdpZGdldE1vdW50aW5nQ29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWc6IChjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWdLZXk6IHN0cmluZykgPT4gV2lkZ2V0Q29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWc6IChkYXRhOiB1bmtub3duKSA9PiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZDtcbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlR3JhcGhRTE9yZ0lkOiAoZGF0YTogdW5rbm93bikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB9IGZyb20gJy4uL21vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IE1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWc6IChkYXRhOiB1bmtub3duKSA9PiBPcmdhbml6YXRpb25Db25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBPcmdDb25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVSZXNwb25zZTogKGRhdGE6IHVua25vd24pID0+IFJlc3BvbnNlIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbiB9IGZyb20gJy4uL2FwaS9zdWdnZXN0aW9uJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlU3VnZ2VzdGlvbjogKGRhdGE6IHVua25vd24pID0+IFN1Z2dlc3Rpb24gfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2luZGV4JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlVXNlckV2ZW50OiAoZGF0YTogdW5rbm93bikgPT4gVXNlckV2ZW50IHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUksY0FBYyxDQUFDLElBQUc7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