botframework-webchat-api 4.17.1 → 4.18.1-hotfix.20260127.b53acdf

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 (708) hide show
  1. package/decorator.js +3 -0
  2. package/dist/botframework-webchat-api.d.mts +213 -55
  3. package/dist/botframework-webchat-api.d.ts +1612 -0
  4. package/dist/botframework-webchat-api.decorator.d.mts +30 -0
  5. package/dist/botframework-webchat-api.decorator.d.ts +30 -0
  6. package/dist/botframework-webchat-api.decorator.js +3 -0
  7. package/dist/botframework-webchat-api.decorator.js.map +1 -0
  8. package/dist/botframework-webchat-api.decorator.mjs +3 -0
  9. package/dist/botframework-webchat-api.decorator.mjs.LEGAL.txt +0 -0
  10. package/dist/botframework-webchat-api.decorator.mjs.map +1 -0
  11. package/dist/botframework-webchat-api.internal.d.mts +18 -1
  12. package/dist/botframework-webchat-api.internal.d.ts +20 -0
  13. package/dist/botframework-webchat-api.internal.js +3 -0
  14. package/dist/botframework-webchat-api.internal.js.LEGAL.txt +0 -0
  15. package/dist/botframework-webchat-api.internal.js.map +1 -0
  16. package/dist/botframework-webchat-api.internal.mjs +1 -1
  17. package/dist/botframework-webchat-api.internal.mjs.map +1 -1
  18. package/dist/botframework-webchat-api.js +3 -0
  19. package/dist/botframework-webchat-api.js.LEGAL.txt +0 -0
  20. package/dist/botframework-webchat-api.js.map +1 -0
  21. package/dist/botframework-webchat-api.mjs +1 -1
  22. package/dist/botframework-webchat-api.mjs.map +1 -1
  23. package/dist/chunk-2HABAU7C.mjs +3 -0
  24. package/dist/chunk-2HABAU7C.mjs.LEGAL.txt +0 -0
  25. package/dist/chunk-2HABAU7C.mjs.map +1 -0
  26. package/dist/chunk-45Z2ZE4M.js +3 -0
  27. package/dist/chunk-45Z2ZE4M.js.LEGAL.txt +0 -0
  28. package/dist/chunk-45Z2ZE4M.js.map +1 -0
  29. package/dist/chunk-7K3OK5TS.mjs +3 -0
  30. package/dist/chunk-7K3OK5TS.mjs.LEGAL.txt +0 -0
  31. package/dist/chunk-7K3OK5TS.mjs.map +1 -0
  32. package/dist/chunk-LXPINC7N.js +3 -0
  33. package/dist/chunk-LXPINC7N.js.LEGAL.txt +0 -0
  34. package/dist/chunk-LXPINC7N.js.map +1 -0
  35. package/dist/chunk-PRWGXTDA.mjs +3 -0
  36. package/dist/chunk-PRWGXTDA.mjs.LEGAL.txt +0 -0
  37. package/dist/chunk-PRWGXTDA.mjs.map +1 -0
  38. package/dist/chunk-WH7VSYKK.js +3 -0
  39. package/dist/chunk-WH7VSYKK.js.LEGAL.txt +0 -0
  40. package/dist/chunk-WH7VSYKK.js.map +1 -0
  41. package/dist/metafile-cjs.json +1 -0
  42. package/dist/metafile-esm.json +1 -1
  43. package/dist/types-BXPldIKA.d.mts +86 -0
  44. package/dist/types-BXPldIKA.d.ts +86 -0
  45. package/internal.js +1 -1
  46. package/package.json +68 -70
  47. package/src/StyleOptions.ts +123 -4
  48. package/src/decorator/ActivityBorder/ActivityBorderDecorator.tsx +48 -0
  49. package/src/decorator/ActivityBorder/private/ActivityBorderDecoratorMiddleware.ts +51 -0
  50. package/src/decorator/ActivityBorder/types.ts +1 -0
  51. package/src/decorator/ActivityGrouping/ActivityGroupingDecorator.tsx +31 -0
  52. package/src/decorator/ActivityGrouping/private/ActivityGroupingDecoratorMiddleware.ts +38 -0
  53. package/src/decorator/ActivityGrouping/types.ts +1 -0
  54. package/src/decorator/DecoratorComposer.tsx +22 -0
  55. package/src/decorator/internal/InternalDecoratorComposer.tsx +61 -0
  56. package/src/decorator/internal/LowPriorityDecoratorComposer.tsx +19 -0
  57. package/src/decorator/private/DecoratorComposerContext.ts +16 -0
  58. package/src/decorator/private/PassthroughFallback.tsx +12 -0
  59. package/src/decorator/private/templateMiddleware.test.tsx +100 -0
  60. package/src/decorator/private/templateMiddleware.ts +60 -0
  61. package/src/decorator/types.ts +15 -0
  62. package/src/decorator.ts +16 -0
  63. package/src/defaultStyleOptions.ts +26 -5
  64. package/{lib/external/PrecompiledGlobalize.cjs → src/external/PrecompiledGlobalize.js} +8 -7
  65. package/src/hooks/Composer.tsx +75 -53
  66. package/src/hooks/index.ts +7 -1
  67. package/src/hooks/internal/SendBoxMiddleware.ts +5 -3
  68. package/src/hooks/internal/SendBoxToolbarMiddleware.ts +5 -3
  69. package/src/hooks/internal/Tracker.ts +1 -1
  70. package/src/hooks/internal/WebChatAPIContext.ts +12 -5
  71. package/src/hooks/internal/private/templateMiddleware.ts +3 -43
  72. package/src/hooks/internal/usePrevious.ts +5 -2
  73. package/src/hooks/middleware/concatMiddleware.spec.js +20 -0
  74. package/src/hooks/middleware/concatMiddleware.ts +6 -5
  75. package/src/hooks/private/numberWithInfinity.spec.ts +9 -0
  76. package/src/hooks/private/numberWithInfinity.ts +15 -0
  77. package/src/hooks/private/reduceIterable.spec.ts +29 -0
  78. package/src/hooks/private/reduceIterable.ts +13 -0
  79. package/src/hooks/useActiveTyping.ts +31 -28
  80. package/src/hooks/useDisabled.ts +8 -2
  81. package/src/hooks/useGetActivitiesByKey.ts +3 -0
  82. package/src/hooks/useSuggestedActions.ts +17 -4
  83. package/src/hooks/useUIState.ts +18 -0
  84. package/src/hooks/validation/uiState.parseUIState.spec.ts +21 -0
  85. package/src/hooks/validation/uiState.ts +10 -0
  86. package/src/index.ts +4 -4
  87. package/src/internal.ts +3 -1
  88. package/src/localization/ar-SA.json +19 -0
  89. package/src/localization/bg-BG.json +19 -0
  90. package/src/localization/ca-ES.json +19 -0
  91. package/src/localization/cs-CZ.json +19 -0
  92. package/src/localization/da-DK.json +19 -0
  93. package/src/localization/de-DE.json +19 -0
  94. package/src/localization/el-GR.json +19 -0
  95. package/src/localization/en-US.json +20 -2
  96. package/src/localization/es-ES.json +19 -0
  97. package/src/localization/et-EE.json +19 -0
  98. package/src/localization/eu-ES.json +19 -0
  99. package/src/localization/fi-FI.json +19 -0
  100. package/src/localization/fr-FR.json +19 -0
  101. package/src/localization/gl-ES.json +19 -0
  102. package/src/localization/he-IL.json +20 -1
  103. package/src/localization/hi-IN.json +19 -0
  104. package/src/localization/hr-HR.json +19 -0
  105. package/src/localization/hu-HU.json +19 -0
  106. package/src/localization/id-ID.json +19 -0
  107. package/src/localization/it-IT.json +19 -0
  108. package/src/localization/ja-JP.json +19 -0
  109. package/src/localization/kk-KZ.json +19 -0
  110. package/src/localization/ko-KR.json +19 -0
  111. package/src/localization/lt-LT.json +19 -0
  112. package/src/localization/lv-LV.json +19 -0
  113. package/src/localization/ms-MY.json +19 -0
  114. package/src/localization/nb-NO.json +19 -0
  115. package/src/localization/nl-NL.json +19 -0
  116. package/src/localization/pl-PL.json +19 -0
  117. package/src/localization/pt-BR.json +19 -0
  118. package/src/localization/pt-PT.json +19 -0
  119. package/src/localization/ro-RO.json +19 -0
  120. package/src/localization/ru-RU.json +19 -0
  121. package/src/localization/sk-SK.json +19 -0
  122. package/src/localization/sl-SI.json +19 -0
  123. package/src/localization/sr-Cyrl-CS.json +19 -0
  124. package/src/localization/sr-Latn-CS.json +19 -0
  125. package/src/localization/sv-SE.json +19 -0
  126. package/src/localization/th-TH.json +19 -0
  127. package/src/localization/tr-TR.json +19 -0
  128. package/src/localization/uk-UA.json +19 -0
  129. package/src/localization/vi-VN.json +19 -0
  130. package/src/localization/zh-CN.json +21 -2
  131. package/src/localization/zh-HK.json +19 -0
  132. package/src/localization/zh-TW.json +19 -0
  133. package/src/normalizeStyleOptions.ts +45 -0
  134. package/src/providers/ActivityAcknowledgement/useLastReadActivityKey.ts +1 -1
  135. package/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx +50 -30
  136. package/src/providers/ActivityKeyer/private/Context.ts +2 -1
  137. package/src/providers/ActivityKeyer/private/lastOf.spec.ts +6 -0
  138. package/src/providers/ActivityKeyer/private/lastOf.ts +3 -0
  139. package/src/providers/ActivityKeyer/private/someIterable.spec.ts +44 -0
  140. package/src/providers/ActivityKeyer/private/someIterable.ts +9 -0
  141. package/src/providers/ActivityKeyer/useGetActivitiesByKey.ts +7 -0
  142. package/src/providers/ActivityListener/ActivityListenerComposer.tsx +28 -0
  143. package/src/providers/ActivityListener/private/Context.tsx +16 -0
  144. package/src/providers/ActivityListener/private/useContext.ts +6 -0
  145. package/src/providers/ActivityListener/useUpsertedActivities.ts +6 -0
  146. package/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx +2 -2
  147. package/src/providers/ActivityTyping/ActivityTypingComposer.tsx +170 -0
  148. package/src/providers/ActivityTyping/private/Context.ts +16 -0
  149. package/src/providers/ActivityTyping/private/useContext.ts +6 -0
  150. package/src/providers/ActivityTyping/private/useMemoWithPrevious.ts +17 -0
  151. package/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx +231 -0
  152. package/src/providers/ActivityTyping/private/useReduceActivities.ts +48 -0
  153. package/src/providers/ActivityTyping/types/AllTyping.ts +8 -0
  154. package/src/providers/ActivityTyping/useAllTyping.ts +6 -0
  155. package/src/providers/GroupActivities/GroupActivitiesComposer.tsx +115 -0
  156. package/src/providers/GroupActivities/private/GroupActivitiesContext.ts +23 -0
  157. package/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts +93 -0
  158. package/src/providers/GroupActivities/private/isGroupingValid.ts +41 -0
  159. package/src/providers/GroupActivities/private/useGroupActivitiesContext.ts +6 -0
  160. package/src/providers/GroupActivities/useGroupActivities.ts +20 -0
  161. package/src/providers/GroupActivities/useGroupActivitiesByName.ts +17 -0
  162. package/src/tsconfig.json +1 -5
  163. package/src/types/AttachmentForScreenReaderMiddleware.ts +9 -2
  164. package/src/types/AvatarMiddleware.ts +5 -1
  165. package/src/types/CardActionMiddleware.ts +2 -0
  166. package/src/types/ComponentMiddleware.ts +1 -1
  167. package/src/types/GroupActivitiesMiddleware.ts +7 -11
  168. package/src/types/Typing.ts +2 -3
  169. package/src/utils/validateProps.spec.ts +74 -0
  170. package/src/utils/validateProps.ts +56 -0
  171. package/dist/chunk-4ZIUY4G5.mjs +0 -3
  172. package/dist/chunk-4ZIUY4G5.mjs.map +0 -1
  173. package/lib/StyleOptions.d.ts +0 -697
  174. package/lib/StyleOptions.d.ts.map +0 -1
  175. package/lib/StyleOptions.js +0 -2
  176. package/lib/defaultStyleOptions.d.ts +0 -4
  177. package/lib/defaultStyleOptions.d.ts.map +0 -1
  178. package/lib/defaultStyleOptions.js +0 -277
  179. package/lib/hooks/Composer.d.ts +0 -88
  180. package/lib/hooks/Composer.d.ts.map +0 -1
  181. package/lib/hooks/Composer.js +0 -602
  182. package/lib/hooks/index.d.ts +0 -72
  183. package/lib/hooks/index.d.ts.map +0 -1
  184. package/lib/hooks/index.js +0 -497
  185. package/lib/hooks/internal/ErrorBox.js +0 -47
  186. package/lib/hooks/internal/SendBoxMiddleware.d.ts +0 -34
  187. package/lib/hooks/internal/SendBoxMiddleware.d.ts.map +0 -1
  188. package/lib/hooks/internal/SendBoxMiddleware.js +0 -17
  189. package/lib/hooks/internal/SendBoxToolbarMiddleware.d.ts +0 -34
  190. package/lib/hooks/internal/SendBoxToolbarMiddleware.d.ts.map +0 -1
  191. package/lib/hooks/internal/SendBoxToolbarMiddleware.js +0 -17
  192. package/lib/hooks/internal/Tracker.d.ts +0 -4
  193. package/lib/hooks/internal/Tracker.d.ts.map +0 -1
  194. package/lib/hooks/internal/Tracker.js +0 -15
  195. package/lib/hooks/internal/WebChatAPIContext.d.ts +0 -80
  196. package/lib/hooks/internal/WebChatAPIContext.d.ts.map +0 -1
  197. package/lib/hooks/internal/WebChatAPIContext.js +0 -12
  198. package/lib/hooks/internal/WebChatReduxContext.js +0 -17
  199. package/lib/hooks/internal/defaultSelectVoice.js +0 -28
  200. package/lib/hooks/internal/private/templateMiddleware.d.ts +0 -28
  201. package/lib/hooks/internal/private/templateMiddleware.d.ts.map +0 -1
  202. package/lib/hooks/internal/private/templateMiddleware.js +0 -48
  203. package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts +0 -4
  204. package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts.map +0 -1
  205. package/lib/hooks/internal/useCreateActivityRendererInternal.js +0 -37
  206. package/lib/hooks/internal/useDebugDeps.js +0 -39
  207. package/lib/hooks/internal/useDirFromProps.js +0 -12
  208. package/lib/hooks/internal/useErrorBoxClass.js +0 -14
  209. package/lib/hooks/internal/useForceRender.js +0 -24
  210. package/lib/hooks/internal/useLocalizedGlobalize.js +0 -12
  211. package/lib/hooks/internal/useLocalizedStrings.js +0 -14
  212. package/lib/hooks/internal/useMarkActivity.js +0 -12
  213. package/lib/hooks/internal/usePrevious.d.ts +0 -2
  214. package/lib/hooks/internal/usePrevious.d.ts.map +0 -1
  215. package/lib/hooks/internal/usePrevious.js +0 -15
  216. package/lib/hooks/internal/useReadTelemetryDimensions.js +0 -20
  217. package/lib/hooks/internal/useSetDictateState.d.ts +0 -2
  218. package/lib/hooks/internal/useSetDictateState.d.ts.map +0 -1
  219. package/lib/hooks/internal/useSetDictateState.js +0 -12
  220. package/lib/hooks/internal/useTimer.d.ts +0 -5
  221. package/lib/hooks/internal/useTimer.d.ts.map +0 -1
  222. package/lib/hooks/internal/useTimer.js +0 -43
  223. package/lib/hooks/internal/useTracker.js +0 -42
  224. package/lib/hooks/internal/useValueRef.d.ts +0 -3
  225. package/lib/hooks/internal/useValueRef.d.ts.map +0 -1
  226. package/lib/hooks/internal/useValueRef.js +0 -22
  227. package/lib/hooks/internal/useWebChatAPIContext.d.ts +0 -83
  228. package/lib/hooks/internal/useWebChatAPIContext.d.ts.map +0 -1
  229. package/lib/hooks/internal/useWebChatAPIContext.js +0 -17
  230. package/lib/hooks/middleware/UserlandBoundary.js +0 -48
  231. package/lib/hooks/middleware/applyMiddleware.js +0 -122
  232. package/lib/hooks/middleware/concatMiddleware.d.ts +0 -6
  233. package/lib/hooks/middleware/concatMiddleware.d.ts.map +0 -1
  234. package/lib/hooks/middleware/concatMiddleware.js +0 -33
  235. package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts +0 -3
  236. package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts.map +0 -1
  237. package/lib/hooks/middleware/createDefaultCardActionMiddleware.js +0 -43
  238. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts +0 -7
  239. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts.map +0 -1
  240. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.js +0 -68
  241. package/lib/hooks/useActiveTyping.d.ts +0 -6
  242. package/lib/hooks/useActiveTyping.d.ts.map +0 -1
  243. package/lib/hooks/useActiveTyping.js +0 -81
  244. package/lib/hooks/useActivities.d.ts +0 -3
  245. package/lib/hooks/useActivities.d.ts.map +0 -1
  246. package/lib/hooks/useActivities.js +0 -14
  247. package/lib/hooks/useActivityKeys.d.ts +0 -3
  248. package/lib/hooks/useActivityKeys.d.ts.map +0 -1
  249. package/lib/hooks/useActivityKeys.js +0 -11
  250. package/lib/hooks/useActivityKeysByRead.d.ts +0 -3
  251. package/lib/hooks/useActivityKeysByRead.d.ts.map +0 -1
  252. package/lib/hooks/useActivityKeysByRead.js +0 -11
  253. package/lib/hooks/useAvatarForBot.d.ts +0 -5
  254. package/lib/hooks/useAvatarForBot.d.ts.map +0 -1
  255. package/lib/hooks/useAvatarForBot.js +0 -26
  256. package/lib/hooks/useAvatarForUser.d.ts +0 -5
  257. package/lib/hooks/useAvatarForUser.d.ts.map +0 -1
  258. package/lib/hooks/useAvatarForUser.js +0 -26
  259. package/lib/hooks/useByteFormatter.d.ts +0 -2
  260. package/lib/hooks/useByteFormatter.d.ts.map +0 -1
  261. package/lib/hooks/useByteFormatter.js +0 -43
  262. package/lib/hooks/useConnectivityStatus.d.ts +0 -2
  263. package/lib/hooks/useConnectivityStatus.d.ts.map +0 -1
  264. package/lib/hooks/useConnectivityStatus.js +0 -14
  265. package/lib/hooks/useCreateActivityRenderer.d.ts +0 -3
  266. package/lib/hooks/useCreateActivityRenderer.d.ts.map +0 -1
  267. package/lib/hooks/useCreateActivityRenderer.js +0 -14
  268. package/lib/hooks/useCreateActivityStatusRenderer.d.ts +0 -10
  269. package/lib/hooks/useCreateActivityStatusRenderer.d.ts.map +0 -1
  270. package/lib/hooks/useCreateActivityStatusRenderer.js +0 -72
  271. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.d.ts +0 -3
  272. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.d.ts.map +0 -1
  273. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.js +0 -12
  274. package/lib/hooks/useCreateAvatarRenderer.d.ts +0 -6
  275. package/lib/hooks/useCreateAvatarRenderer.d.ts.map +0 -1
  276. package/lib/hooks/useCreateAvatarRenderer.js +0 -44
  277. package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts +0 -3
  278. package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts.map +0 -1
  279. package/lib/hooks/useCreateScrollToEndButtonRenderer.js +0 -12
  280. package/lib/hooks/useDateFormatter.d.ts +0 -2
  281. package/lib/hooks/useDateFormatter.d.ts.map +0 -1
  282. package/lib/hooks/useDateFormatter.js +0 -35
  283. package/lib/hooks/useDebouncedNotifications.d.ts +0 -13
  284. package/lib/hooks/useDebouncedNotifications.d.ts.map +0 -1
  285. package/lib/hooks/useDebouncedNotifications.js +0 -118
  286. package/lib/hooks/useDictateInterims.d.ts +0 -2
  287. package/lib/hooks/useDictateInterims.d.ts.map +0 -1
  288. package/lib/hooks/useDictateInterims.js +0 -16
  289. package/lib/hooks/useDictateState.d.ts +0 -2
  290. package/lib/hooks/useDictateState.d.ts.map +0 -1
  291. package/lib/hooks/useDictateState.js +0 -15
  292. package/lib/hooks/useDirection.d.ts +0 -2
  293. package/lib/hooks/useDirection.d.ts.map +0 -1
  294. package/lib/hooks/useDirection.js +0 -38
  295. package/lib/hooks/useDisabled.d.ts +0 -2
  296. package/lib/hooks/useDisabled.d.ts.map +0 -1
  297. package/lib/hooks/useDisabled.js +0 -12
  298. package/lib/hooks/useDismissNotification.d.ts +0 -2
  299. package/lib/hooks/useDismissNotification.d.ts.map +0 -1
  300. package/lib/hooks/useDismissNotification.js +0 -12
  301. package/lib/hooks/useEmitTypingIndicator.d.ts +0 -2
  302. package/lib/hooks/useEmitTypingIndicator.d.ts.map +0 -1
  303. package/lib/hooks/useEmitTypingIndicator.js +0 -12
  304. package/lib/hooks/useGetActivityByKey.d.ts +0 -3
  305. package/lib/hooks/useGetActivityByKey.d.ts.map +0 -1
  306. package/lib/hooks/useGetActivityByKey.js +0 -11
  307. package/lib/hooks/useGetHasAcknowledgedByActivityKey.d.ts +0 -3
  308. package/lib/hooks/useGetHasAcknowledgedByActivityKey.d.ts.map +0 -1
  309. package/lib/hooks/useGetHasAcknowledgedByActivityKey.js +0 -11
  310. package/lib/hooks/useGetKeyByActivity.d.ts +0 -3
  311. package/lib/hooks/useGetKeyByActivity.d.ts.map +0 -1
  312. package/lib/hooks/useGetKeyByActivity.js +0 -11
  313. package/lib/hooks/useGetKeyByActivityId.d.ts +0 -3
  314. package/lib/hooks/useGetKeyByActivityId.d.ts.map +0 -1
  315. package/lib/hooks/useGetKeyByActivityId.js +0 -11
  316. package/lib/hooks/useGetSendTimeoutForActivity.d.ts +0 -5
  317. package/lib/hooks/useGetSendTimeoutForActivity.d.ts.map +0 -1
  318. package/lib/hooks/useGetSendTimeoutForActivity.js +0 -33
  319. package/lib/hooks/useGrammars.d.ts +0 -2
  320. package/lib/hooks/useGrammars.d.ts.map +0 -1
  321. package/lib/hooks/useGrammars.js +0 -12
  322. package/lib/hooks/useGroupActivities.d.ts +0 -8
  323. package/lib/hooks/useGroupActivities.d.ts.map +0 -1
  324. package/lib/hooks/useGroupActivities.js +0 -12
  325. package/lib/hooks/useGroupTimestamp.d.ts +0 -2
  326. package/lib/hooks/useGroupTimestamp.d.ts.map +0 -1
  327. package/lib/hooks/useGroupTimestamp.js +0 -21
  328. package/lib/hooks/useLanguage.d.ts +0 -2
  329. package/lib/hooks/useLanguage.d.ts.map +0 -1
  330. package/lib/hooks/useLanguage.js +0 -19
  331. package/lib/hooks/useLastAcknowledgedActivityKey.d.ts +0 -3
  332. package/lib/hooks/useLastAcknowledgedActivityKey.d.ts.map +0 -1
  333. package/lib/hooks/useLastAcknowledgedActivityKey.js +0 -11
  334. package/lib/hooks/useLastReadActivityKey.d.ts +0 -3
  335. package/lib/hooks/useLastReadActivityKey.d.ts.map +0 -1
  336. package/lib/hooks/useLastReadActivityKey.js +0 -11
  337. package/lib/hooks/useLocalizer.d.ts +0 -13
  338. package/lib/hooks/useLocalizer.d.ts.map +0 -1
  339. package/lib/hooks/useLocalizer.js +0 -75
  340. package/lib/hooks/useMarkActivityAsSpoken.d.ts +0 -3
  341. package/lib/hooks/useMarkActivityAsSpoken.d.ts.map +0 -1
  342. package/lib/hooks/useMarkActivityAsSpoken.js +0 -16
  343. package/lib/hooks/useMarkActivityKeyAsRead.d.ts +0 -3
  344. package/lib/hooks/useMarkActivityKeyAsRead.d.ts.map +0 -1
  345. package/lib/hooks/useMarkActivityKeyAsRead.js +0 -11
  346. package/lib/hooks/useMarkAllAsAcknowledged.d.ts +0 -3
  347. package/lib/hooks/useMarkAllAsAcknowledged.d.ts.map +0 -1
  348. package/lib/hooks/useMarkAllAsAcknowledged.js +0 -11
  349. package/lib/hooks/useNotifications.d.ts +0 -3
  350. package/lib/hooks/useNotifications.d.ts.map +0 -1
  351. package/lib/hooks/useNotifications.js +0 -14
  352. package/lib/hooks/usePerformCardAction.d.ts +0 -3
  353. package/lib/hooks/usePerformCardAction.d.ts.map +0 -1
  354. package/lib/hooks/usePerformCardAction.js +0 -12
  355. package/lib/hooks/usePonyfill.d.ts +0 -3
  356. package/lib/hooks/usePonyfill.d.ts.map +0 -1
  357. package/lib/hooks/usePonyfill.js +0 -11
  358. package/lib/hooks/usePostActivity.d.ts +0 -3
  359. package/lib/hooks/usePostActivity.d.ts.map +0 -1
  360. package/lib/hooks/usePostActivity.js +0 -12
  361. package/lib/hooks/useReferenceGrammarID.d.ts +0 -2
  362. package/lib/hooks/useReferenceGrammarID.d.ts.map +0 -1
  363. package/lib/hooks/useReferenceGrammarID.js +0 -14
  364. package/lib/hooks/useRelativeTimeFormatter.d.ts +0 -2
  365. package/lib/hooks/useRelativeTimeFormatter.d.ts.map +0 -1
  366. package/lib/hooks/useRelativeTimeFormatter.js +0 -61
  367. package/lib/hooks/useRenderAttachment.d.ts +0 -3
  368. package/lib/hooks/useRenderAttachment.d.ts.map +0 -1
  369. package/lib/hooks/useRenderAttachment.js +0 -14
  370. package/lib/hooks/useRenderToast.d.ts +0 -3
  371. package/lib/hooks/useRenderToast.d.ts.map +0 -1
  372. package/lib/hooks/useRenderToast.js +0 -12
  373. package/lib/hooks/useRenderTypingIndicator.d.ts +0 -3
  374. package/lib/hooks/useRenderTypingIndicator.d.ts.map +0 -1
  375. package/lib/hooks/useRenderTypingIndicator.js +0 -12
  376. package/lib/hooks/useSendBoxAttachments.d.ts +0 -6
  377. package/lib/hooks/useSendBoxAttachments.d.ts.map +0 -1
  378. package/lib/hooks/useSendBoxAttachments.js +0 -23
  379. package/lib/hooks/useSendBoxValue.d.ts +0 -2
  380. package/lib/hooks/useSendBoxValue.d.ts.map +0 -1
  381. package/lib/hooks/useSendBoxValue.js +0 -16
  382. package/lib/hooks/useSendEvent.d.ts +0 -2
  383. package/lib/hooks/useSendEvent.d.ts.map +0 -1
  384. package/lib/hooks/useSendEvent.js +0 -12
  385. package/lib/hooks/useSendFiles.d.ts +0 -10
  386. package/lib/hooks/useSendFiles.d.ts.map +0 -1
  387. package/lib/hooks/useSendFiles.js +0 -35
  388. package/lib/hooks/useSendMessage.d.ts +0 -6
  389. package/lib/hooks/useSendMessage.d.ts.map +0 -1
  390. package/lib/hooks/useSendMessage.js +0 -33
  391. package/lib/hooks/useSendMessageBack.d.ts +0 -2
  392. package/lib/hooks/useSendMessageBack.d.ts.map +0 -1
  393. package/lib/hooks/useSendMessageBack.js +0 -12
  394. package/lib/hooks/useSendPostBack.d.ts +0 -2
  395. package/lib/hooks/useSendPostBack.d.ts.map +0 -1
  396. package/lib/hooks/useSendPostBack.js +0 -12
  397. package/lib/hooks/useSendStatusByActivityKey.d.ts +0 -22
  398. package/lib/hooks/useSendStatusByActivityKey.d.ts.map +0 -1
  399. package/lib/hooks/useSendStatusByActivityKey.js +0 -31
  400. package/lib/hooks/useSendTimeoutForActivity.d.ts +0 -4
  401. package/lib/hooks/useSendTimeoutForActivity.d.ts.map +0 -1
  402. package/lib/hooks/useSendTimeoutForActivity.js +0 -22
  403. package/lib/hooks/useSendTypingIndicator.d.ts +0 -2
  404. package/lib/hooks/useSendTypingIndicator.d.ts.map +0 -1
  405. package/lib/hooks/useSendTypingIndicator.js +0 -14
  406. package/lib/hooks/useSetNotification.d.ts +0 -3
  407. package/lib/hooks/useSetNotification.d.ts.map +0 -1
  408. package/lib/hooks/useSetNotification.js +0 -12
  409. package/lib/hooks/useShouldSpeakIncomingActivity.d.ts +0 -2
  410. package/lib/hooks/useShouldSpeakIncomingActivity.d.ts.map +0 -1
  411. package/lib/hooks/useShouldSpeakIncomingActivity.js +0 -22
  412. package/lib/hooks/useStartDictate.d.ts +0 -2
  413. package/lib/hooks/useStartDictate.d.ts.map +0 -1
  414. package/lib/hooks/useStartDictate.js +0 -12
  415. package/lib/hooks/useStopDictate.d.ts +0 -2
  416. package/lib/hooks/useStopDictate.d.ts.map +0 -1
  417. package/lib/hooks/useStopDictate.js +0 -12
  418. package/lib/hooks/useStyleOptions.d.ts +0 -3
  419. package/lib/hooks/useStyleOptions.d.ts.map +0 -1
  420. package/lib/hooks/useStyleOptions.js +0 -12
  421. package/lib/hooks/useSubmitSendBox.d.ts +0 -4
  422. package/lib/hooks/useSubmitSendBox.d.ts.map +0 -1
  423. package/lib/hooks/useSubmitSendBox.js +0 -49
  424. package/lib/hooks/useSuggestedActions.d.ts +0 -3
  425. package/lib/hooks/useSuggestedActions.d.ts.map +0 -1
  426. package/lib/hooks/useSuggestedActions.js +0 -25
  427. package/lib/hooks/useTimeoutForSend.d.ts +0 -3
  428. package/lib/hooks/useTimeoutForSend.d.ts.map +0 -1
  429. package/lib/hooks/useTimeoutForSend.js +0 -21
  430. package/lib/hooks/useTrackDimension.d.ts +0 -2
  431. package/lib/hooks/useTrackDimension.d.ts.map +0 -1
  432. package/lib/hooks/useTrackDimension.js +0 -14
  433. package/lib/hooks/useTrackEvent.d.ts +0 -10
  434. package/lib/hooks/useTrackEvent.d.ts.map +0 -1
  435. package/lib/hooks/useTrackEvent.js +0 -51
  436. package/lib/hooks/useTrackException.d.ts +0 -2
  437. package/lib/hooks/useTrackException.d.ts.map +0 -1
  438. package/lib/hooks/useTrackException.js +0 -31
  439. package/lib/hooks/useTrackTiming.d.ts +0 -2
  440. package/lib/hooks/useTrackTiming.d.ts.map +0 -1
  441. package/lib/hooks/useTrackTiming.js +0 -93
  442. package/lib/hooks/useUserID.d.ts +0 -2
  443. package/lib/hooks/useUserID.d.ts.map +0 -1
  444. package/lib/hooks/useUserID.js +0 -12
  445. package/lib/hooks/useUsername.d.ts +0 -2
  446. package/lib/hooks/useUsername.d.ts.map +0 -1
  447. package/lib/hooks/useUsername.js +0 -12
  448. package/lib/hooks/useVoiceSelector.d.ts +0 -2
  449. package/lib/hooks/useVoiceSelector.d.ts.map +0 -1
  450. package/lib/hooks/useVoiceSelector.js +0 -16
  451. package/lib/hooks/utils/ErrorBoundary.js +0 -68
  452. package/lib/hooks/utils/observableToPromise.d.ts +0 -3
  453. package/lib/hooks/utils/observableToPromise.d.ts.map +0 -1
  454. package/lib/hooks/utils/observableToPromise.js +0 -28
  455. package/lib/index.d.ts +0 -37
  456. package/lib/index.d.ts.map +0 -1
  457. package/lib/index.js +0 -88
  458. package/lib/internal.d.ts +0 -3
  459. package/lib/internal.d.ts.map +0 -1
  460. package/lib/internal.js +0 -14
  461. package/lib/localization/Localize.d.ts +0 -4
  462. package/lib/localization/Localize.d.ts.map +0 -1
  463. package/lib/localization/Localize.js +0 -50
  464. package/lib/localization/ar-EG.json +0 -42
  465. package/lib/localization/ar-JO.json +0 -45
  466. package/lib/localization/ar-SA.json +0 -97
  467. package/lib/localization/bg-BG.json +0 -97
  468. package/lib/localization/ca-ES.json +0 -97
  469. package/lib/localization/cs-CZ.json +0 -97
  470. package/lib/localization/da-DK.json +0 -97
  471. package/lib/localization/de-DE.json +0 -97
  472. package/lib/localization/el-GR.json +0 -97
  473. package/lib/localization/en-US.json +0 -167
  474. package/lib/localization/es-ES.json +0 -97
  475. package/lib/localization/et-EE.json +0 -97
  476. package/lib/localization/eu-ES.json +0 -97
  477. package/lib/localization/fi-FI.json +0 -97
  478. package/lib/localization/fr-FR.json +0 -97
  479. package/lib/localization/getAllLocalizedStrings.d.ts +0 -6
  480. package/lib/localization/getAllLocalizedStrings.d.ts.map +0 -1
  481. package/lib/localization/getAllLocalizedStrings.js +0 -117
  482. package/lib/localization/getRTLList.d.ts +0 -2
  483. package/lib/localization/getRTLList.d.ts.map +0 -1
  484. package/lib/localization/getRTLList.js +0 -46
  485. package/lib/localization/gl-ES.json +0 -97
  486. package/lib/localization/he-IL.json +0 -97
  487. package/lib/localization/hi-IN.json +0 -97
  488. package/lib/localization/hr-HR.json +0 -97
  489. package/lib/localization/hu-HU.json +0 -97
  490. package/lib/localization/id-ID.json +0 -97
  491. package/lib/localization/it-IT.json +0 -97
  492. package/lib/localization/ja-JP.json +0 -97
  493. package/lib/localization/kk-KZ.json +0 -97
  494. package/lib/localization/ko-KR.json +0 -97
  495. package/lib/localization/lt-LT.json +0 -97
  496. package/lib/localization/lv-LV.json +0 -97
  497. package/lib/localization/mergeLocalizedStrings.d.ts +0 -7
  498. package/lib/localization/mergeLocalizedStrings.d.ts.map +0 -1
  499. package/lib/localization/mergeLocalizedStrings.js +0 -49
  500. package/lib/localization/ms-MY.json +0 -97
  501. package/lib/localization/nb-NO.json +0 -97
  502. package/lib/localization/nl-NL.json +0 -97
  503. package/lib/localization/overrides.json +0 -257
  504. package/lib/localization/pl-PL.json +0 -97
  505. package/lib/localization/pt-BR.json +0 -97
  506. package/lib/localization/pt-PT.json +0 -97
  507. package/lib/localization/ro-RO.json +0 -97
  508. package/lib/localization/ru-RU.json +0 -97
  509. package/lib/localization/sk-SK.json +0 -97
  510. package/lib/localization/sl-SI.json +0 -97
  511. package/lib/localization/sl-SL.json +0 -3
  512. package/lib/localization/sr-Cyrl-CS.json +0 -97
  513. package/lib/localization/sr-Cyrl.json +0 -3
  514. package/lib/localization/sr-Latn-CS.json +0 -97
  515. package/lib/localization/sr-Latn.json +0 -3
  516. package/lib/localization/sv-SE.json +0 -97
  517. package/lib/localization/th-TH.json +0 -97
  518. package/lib/localization/tr-TR.json +0 -97
  519. package/lib/localization/uk-UA.json +0 -97
  520. package/lib/localization/vi-VN.json +0 -97
  521. package/lib/localization/yue.json +0 -100
  522. package/lib/localization/zh-CN.json +0 -97
  523. package/lib/localization/zh-HK.json +0 -97
  524. package/lib/localization/zh-TW.json +0 -97
  525. package/lib/normalizeStyleOptions.d.ts +0 -3
  526. package/lib/normalizeStyleOptions.d.ts.map +0 -1
  527. package/lib/normalizeStyleOptions.js +0 -147
  528. package/lib/patchStyleOptionsFromDeprecatedProps.js +0 -21
  529. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.d.ts +0 -6
  530. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.d.ts.map +0 -1
  531. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.js +0 -153
  532. package/lib/providers/ActivityAcknowledgement/private/Context.d.ts +0 -13
  533. package/lib/providers/ActivityAcknowledgement/private/Context.d.ts.map +0 -1
  534. package/lib/providers/ActivityAcknowledgement/private/Context.js +0 -14
  535. package/lib/providers/ActivityAcknowledgement/private/useContext.d.ts +0 -3
  536. package/lib/providers/ActivityAcknowledgement/private/useContext.d.ts.map +0 -1
  537. package/lib/providers/ActivityAcknowledgement/private/useContext.js +0 -18
  538. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.d.ts +0 -5
  539. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.d.ts.map +0 -1
  540. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.js +0 -15
  541. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.d.ts +0 -2
  542. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.d.ts.map +0 -1
  543. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.js +0 -12
  544. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.d.ts +0 -2
  545. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.d.ts.map +0 -1
  546. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.js +0 -12
  547. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.d.ts +0 -2
  548. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.d.ts.map +0 -1
  549. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.js +0 -12
  550. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.d.ts +0 -2
  551. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.d.ts.map +0 -1
  552. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.js +0 -12
  553. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.d.ts +0 -2
  554. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.d.ts.map +0 -1
  555. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.js +0 -12
  556. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.d.ts +0 -20
  557. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.d.ts.map +0 -1
  558. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.js +0 -119
  559. package/lib/providers/ActivityKeyer/private/Context.d.ts +0 -12
  560. package/lib/providers/ActivityKeyer/private/Context.d.ts.map +0 -1
  561. package/lib/providers/ActivityKeyer/private/Context.js +0 -10
  562. package/lib/providers/ActivityKeyer/private/getActivityId.d.ts +0 -3
  563. package/lib/providers/ActivityKeyer/private/getActivityId.d.ts.map +0 -1
  564. package/lib/providers/ActivityKeyer/private/getActivityId.js +0 -10
  565. package/lib/providers/ActivityKeyer/private/getClientActivityId.d.ts +0 -3
  566. package/lib/providers/ActivityKeyer/private/getClientActivityId.d.ts.map +0 -1
  567. package/lib/providers/ActivityKeyer/private/getClientActivityId.js +0 -11
  568. package/lib/providers/ActivityKeyer/private/uniqueId.d.ts +0 -2
  569. package/lib/providers/ActivityKeyer/private/uniqueId.d.ts.map +0 -1
  570. package/lib/providers/ActivityKeyer/private/uniqueId.js +0 -15
  571. package/lib/providers/ActivityKeyer/private/useContext.d.ts +0 -3
  572. package/lib/providers/ActivityKeyer/private/useContext.d.ts.map +0 -1
  573. package/lib/providers/ActivityKeyer/private/useContext.js +0 -18
  574. package/lib/providers/ActivityKeyer/useActivityKeys.d.ts +0 -2
  575. package/lib/providers/ActivityKeyer/useActivityKeys.d.ts.map +0 -1
  576. package/lib/providers/ActivityKeyer/useActivityKeys.js +0 -12
  577. package/lib/providers/ActivityKeyer/useGetActivityByKey.d.ts +0 -3
  578. package/lib/providers/ActivityKeyer/useGetActivityByKey.d.ts.map +0 -1
  579. package/lib/providers/ActivityKeyer/useGetActivityByKey.js +0 -12
  580. package/lib/providers/ActivityKeyer/useGetKeyByActivity.d.ts +0 -3
  581. package/lib/providers/ActivityKeyer/useGetKeyByActivity.d.ts.map +0 -1
  582. package/lib/providers/ActivityKeyer/useGetKeyByActivity.js +0 -12
  583. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.d.ts +0 -2
  584. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.d.ts.map +0 -1
  585. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.js +0 -12
  586. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.d.ts +0 -4
  587. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.d.ts.map +0 -1
  588. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.js +0 -149
  589. package/lib/providers/ActivitySendStatus/private/Context.d.ts +0 -9
  590. package/lib/providers/ActivitySendStatus/private/Context.d.ts.map +0 -1
  591. package/lib/providers/ActivitySendStatus/private/Context.js +0 -13
  592. package/lib/providers/ActivitySendStatus/private/isMapEqual.d.ts +0 -7
  593. package/lib/providers/ActivitySendStatus/private/isMapEqual.d.ts.map +0 -1
  594. package/lib/providers/ActivitySendStatus/private/isMapEqual.js +0 -55
  595. package/lib/providers/ActivitySendStatus/private/useContext.d.ts +0 -3
  596. package/lib/providers/ActivitySendStatus/private/useContext.d.ts.map +0 -1
  597. package/lib/providers/ActivitySendStatus/private/useContext.js +0 -18
  598. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.d.ts +0 -22
  599. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.d.ts.map +0 -1
  600. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.js +0 -31
  601. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.d.ts +0 -3
  602. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.d.ts.map +0 -1
  603. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.js +0 -71
  604. package/lib/providers/Ponyfill/PonyfillComposer.d.ts +0 -17
  605. package/lib/providers/Ponyfill/PonyfillComposer.d.ts.map +0 -1
  606. package/lib/providers/Ponyfill/PonyfillComposer.js +0 -87
  607. package/lib/providers/Ponyfill/private/PonyfillContext.d.ts +0 -8
  608. package/lib/providers/Ponyfill/private/PonyfillContext.d.ts.map +0 -1
  609. package/lib/providers/Ponyfill/private/PonyfillContext.js +0 -10
  610. package/lib/providers/Ponyfill/private/useContext.d.ts +0 -6
  611. package/lib/providers/Ponyfill/private/useContext.d.ts.map +0 -1
  612. package/lib/providers/Ponyfill/private/useContext.js +0 -17
  613. package/lib/providers/Ponyfill/usePonyfill.d.ts +0 -3
  614. package/lib/providers/Ponyfill/usePonyfill.d.ts.map +0 -1
  615. package/lib/providers/Ponyfill/usePonyfill.js +0 -12
  616. package/lib/tsconfig.json +0 -18
  617. package/lib/types/ActivityMiddleware.d.ts +0 -24
  618. package/lib/types/ActivityMiddleware.d.ts.map +0 -1
  619. package/lib/types/ActivityMiddleware.js +0 -2
  620. package/lib/types/ActivityStatusMiddleware.d.ts +0 -17
  621. package/lib/types/ActivityStatusMiddleware.d.ts.map +0 -1
  622. package/lib/types/ActivityStatusMiddleware.js +0 -2
  623. package/lib/types/AttachmentForScreenReaderMiddleware.d.ts +0 -14
  624. package/lib/types/AttachmentForScreenReaderMiddleware.d.ts.map +0 -1
  625. package/lib/types/AttachmentForScreenReaderMiddleware.js +0 -2
  626. package/lib/types/AttachmentMiddleware.d.ts +0 -12
  627. package/lib/types/AttachmentMiddleware.d.ts.map +0 -1
  628. package/lib/types/AttachmentMiddleware.js +0 -2
  629. package/lib/types/AvatarMiddleware.d.ts +0 -15
  630. package/lib/types/AvatarMiddleware.d.ts.map +0 -1
  631. package/lib/types/AvatarMiddleware.js +0 -2
  632. package/lib/types/CardActionMiddleware.d.ts +0 -19
  633. package/lib/types/CardActionMiddleware.d.ts.map +0 -1
  634. package/lib/types/CardActionMiddleware.js +0 -2
  635. package/lib/types/ComponentMiddleware.d.ts +0 -31
  636. package/lib/types/ComponentMiddleware.d.ts.map +0 -1
  637. package/lib/types/ComponentMiddleware.js +0 -2
  638. package/lib/types/ContextOf.d.ts +0 -4
  639. package/lib/types/ContextOf.d.ts.map +0 -1
  640. package/lib/types/ContextOf.js +0 -2
  641. package/lib/types/FunctionMiddleware.d.ts +0 -6
  642. package/lib/types/FunctionMiddleware.d.ts.map +0 -1
  643. package/lib/types/FunctionMiddleware.js +0 -2
  644. package/lib/types/GroupActivitiesMiddleware.d.ts +0 -22
  645. package/lib/types/GroupActivitiesMiddleware.d.ts.map +0 -1
  646. package/lib/types/GroupActivitiesMiddleware.js +0 -2
  647. package/lib/types/LocalizedStrings.d.ts +0 -5
  648. package/lib/types/LocalizedStrings.d.ts.map +0 -1
  649. package/lib/types/LocalizedStrings.js +0 -2
  650. package/lib/types/Notification.d.ts +0 -10
  651. package/lib/types/Notification.d.ts.map +0 -1
  652. package/lib/types/Notification.js +0 -2
  653. package/lib/types/PrecompiledGlobalize.d.ts +0 -13
  654. package/lib/types/PrecompiledGlobalize.d.ts.map +0 -1
  655. package/lib/types/PrecompiledGlobalize.js +0 -2
  656. package/lib/types/ScrollToEndButtonMiddleware.d.ts +0 -30
  657. package/lib/types/ScrollToEndButtonMiddleware.d.ts.map +0 -1
  658. package/lib/types/ScrollToEndButtonMiddleware.js +0 -2
  659. package/lib/types/SendStatus.d.ts +0 -3
  660. package/lib/types/SendStatus.d.ts.map +0 -1
  661. package/lib/types/SendStatus.js +0 -2
  662. package/lib/types/TelemetryMeasurementEvent.d.ts +0 -31
  663. package/lib/types/TelemetryMeasurementEvent.d.ts.map +0 -1
  664. package/lib/types/TelemetryMeasurementEvent.js +0 -2
  665. package/lib/types/ToastMiddleware.d.ts +0 -11
  666. package/lib/types/ToastMiddleware.d.ts.map +0 -1
  667. package/lib/types/ToastMiddleware.js +0 -2
  668. package/lib/types/Typing.d.ts +0 -8
  669. package/lib/types/Typing.d.ts.map +0 -1
  670. package/lib/types/Typing.js +0 -2
  671. package/lib/types/TypingIndicatorMiddleware.d.ts +0 -17
  672. package/lib/types/TypingIndicatorMiddleware.d.ts.map +0 -1
  673. package/lib/types/TypingIndicatorMiddleware.js +0 -2
  674. package/lib/types/WebSpeechPonyfill.d.ts +0 -19
  675. package/lib/types/WebSpeechPonyfill.d.ts.map +0 -1
  676. package/lib/types/WebSpeechPonyfill.js +0 -2
  677. package/lib/types/WebSpeechPonyfillFactory.d.ts +0 -6
  678. package/lib/types/WebSpeechPonyfillFactory.d.ts.map +0 -1
  679. package/lib/types/WebSpeechPonyfillFactory.js +0 -2
  680. package/lib/utils/createCustomEvent.d.ts +0 -4
  681. package/lib/utils/createCustomEvent.d.ts.map +0 -1
  682. package/lib/utils/createCustomEvent.js +0 -34
  683. package/lib/utils/findLastIndex.d.ts +0 -2
  684. package/lib/utils/findLastIndex.d.ts.map +0 -1
  685. package/lib/utils/findLastIndex.js +0 -22
  686. package/lib/utils/findMin.d.ts +0 -7
  687. package/lib/utils/findMin.d.ts.map +0 -1
  688. package/lib/utils/findMin.js +0 -46
  689. package/lib/utils/freezeArray.d.ts +0 -8
  690. package/lib/utils/freezeArray.d.ts.map +0 -1
  691. package/lib/utils/freezeArray.js +0 -19
  692. package/lib/utils/isObject.js +0 -12
  693. package/lib/utils/mapMap.d.ts +0 -6
  694. package/lib/utils/mapMap.d.ts.map +0 -1
  695. package/lib/utils/mapMap.js +0 -27
  696. package/lib/utils/normalizeLanguage.d.ts +0 -2
  697. package/lib/utils/normalizeLanguage.d.ts.map +0 -1
  698. package/lib/utils/normalizeLanguage.js +0 -115
  699. package/lib/utils/randomId.d.ts +0 -2
  700. package/lib/utils/randomId.d.ts.map +0 -1
  701. package/lib/utils/randomId.js +0 -15
  702. package/lib/utils/warnOnce.d.ts +0 -2
  703. package/lib/utils/warnOnce.d.ts.map +0 -1
  704. package/lib/utils/warnOnce.js +0 -16
  705. package/src/external/PrecompiledGlobalize.cjs +0 -8855
  706. package/src/hooks/middleware/createDefaultGroupActivitiesMiddleware.ts +0 -75
  707. package/src/hooks/useGroupActivities.ts +0 -10
  708. /package/dist/{chunk-4ZIUY4G5.mjs.LEGAL.txt → botframework-webchat-api.decorator.js.LEGAL.txt} +0 -0
@@ -1,602 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _botframeworkWebchatCore = require("botframework-webchat-core");
8
- var _propTypes = _interopRequireDefault(require("prop-types"));
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _reactRedux = require("react-redux");
11
- var _simpleUpdateIn = _interopRequireDefault(require("simple-update-in"));
12
- var _usePonyfill5 = _interopRequireDefault(require("../hooks/usePonyfill"));
13
- var _getAllLocalizedStrings = _interopRequireDefault(require("../localization/getAllLocalizedStrings"));
14
- var _normalizeStyleOptions = _interopRequireDefault(require("../normalizeStyleOptions"));
15
- var _patchStyleOptionsFromDeprecatedProps = _interopRequireDefault(require("../patchStyleOptionsFromDeprecatedProps"));
16
- var _ActivityAcknowledgementComposer = _interopRequireDefault(require("../providers/ActivityAcknowledgement/ActivityAcknowledgementComposer"));
17
- var _ActivityKeyerComposer = _interopRequireDefault(require("../providers/ActivityKeyer/ActivityKeyerComposer"));
18
- var _ActivitySendStatusComposer = _interopRequireDefault(require("../providers/ActivitySendStatus/ActivitySendStatusComposer"));
19
- var _ActivitySendStatusTelemetryComposer = _interopRequireDefault(require("../providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer"));
20
- var _PonyfillComposer = _interopRequireDefault(require("../providers/Ponyfill/PonyfillComposer"));
21
- var _createCustomEvent = _interopRequireDefault(require("../utils/createCustomEvent"));
22
- var _isObject = _interopRequireDefault(require("../utils/isObject"));
23
- var _mapMap = _interopRequireDefault(require("../utils/mapMap"));
24
- var _normalizeLanguage = _interopRequireDefault(require("../utils/normalizeLanguage"));
25
- var _SendBoxMiddleware = require("./internal/SendBoxMiddleware");
26
- var _SendBoxToolbarMiddleware = require("./internal/SendBoxToolbarMiddleware");
27
- var _Tracker = _interopRequireDefault(require("./internal/Tracker"));
28
- var _WebChatAPIContext = _interopRequireDefault(require("./internal/WebChatAPIContext"));
29
- var _WebChatReduxContext = _interopRequireWildcard(require("./internal/WebChatReduxContext"));
30
- var _defaultSelectVoice = _interopRequireDefault(require("./internal/defaultSelectVoice"));
31
- var _applyMiddleware = _interopRequireWildcard(require("./middleware/applyMiddleware"));
32
- var _createDefaultCardActionMiddleware = _interopRequireDefault(require("./middleware/createDefaultCardActionMiddleware"));
33
- var _createDefaultGroupActivitiesMiddleware = _interopRequireDefault(require("./middleware/createDefaultGroupActivitiesMiddleware"));
34
- var _useMarkAllAsAcknowledged = _interopRequireDefault(require("./useMarkAllAsAcknowledged"));
35
- var _ErrorBoundary = _interopRequireDefault(require("./utils/ErrorBoundary"));
36
- var _observableToPromise = _interopRequireDefault(require("./utils/observableToPromise"));
37
- var _PrecompiledGlobalize = _interopRequireDefault(require("../external/PrecompiledGlobalize.cjs"));
38
- var _excluded = ["onTelemetry", "store"],
39
- _excluded2 = ["internalRenderErrorBox", "onTelemetry", "ponyfill"];
40
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
42
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
44
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
45
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
46
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
47
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
48
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
49
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
50
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
51
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
52
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
53
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
54
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
55
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
56
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
57
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
58
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
59
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } // PrecompileGlobalize is a generated file and is not ES module. TypeScript don't work with UMD.
60
- // @ts-ignore
61
- // List of Redux actions factory we are hoisting as Web Chat functions
62
- var DISPATCHERS = {
63
- clearSuggestedActions: _botframeworkWebchatCore.clearSuggestedActions,
64
- dismissNotification: _botframeworkWebchatCore.dismissNotification,
65
- emitTypingIndicator: _botframeworkWebchatCore.emitTypingIndicator,
66
- markActivity: _botframeworkWebchatCore.markActivity,
67
- postActivity: _botframeworkWebchatCore.postActivity,
68
- sendEvent: _botframeworkWebchatCore.sendEvent,
69
- sendFiles: _botframeworkWebchatCore.sendFiles,
70
- sendMessage: _botframeworkWebchatCore.sendMessage,
71
- sendMessageBack: _botframeworkWebchatCore.sendMessageBack,
72
- sendPostBack: _botframeworkWebchatCore.sendPostBack,
73
- setDictateInterims: _botframeworkWebchatCore.setDictateInterims,
74
- setDictateState: _botframeworkWebchatCore.setDictateState,
75
- setNotification: _botframeworkWebchatCore.setNotification,
76
- setSendBox: _botframeworkWebchatCore.setSendBox,
77
- setSendBoxAttachments: _botframeworkWebchatCore.setSendBoxAttachments,
78
- setSendTimeout: _botframeworkWebchatCore.setSendTimeout,
79
- startDictate: _botframeworkWebchatCore.startDictate,
80
- startSpeakingActivity: _botframeworkWebchatCore.startSpeakingActivity,
81
- stopDictate: _botframeworkWebchatCore.stopDictate,
82
- stopSpeakingActivity: _botframeworkWebchatCore.stopSpeakingActivity,
83
- submitSendBox: _botframeworkWebchatCore.submitSendBox
84
- };
85
- function createCardActionContext(_ref) {
86
- var cardActionMiddleware = _ref.cardActionMiddleware,
87
- directLine = _ref.directLine,
88
- dispatch = _ref.dispatch,
89
- markAllAsAcknowledged = _ref.markAllAsAcknowledged,
90
- ponyfill = _ref.ponyfill;
91
- var runMiddleware = _applyMiddleware.default.apply(void 0, ['card action'].concat(_toConsumableArray(cardActionMiddleware), [(0, _createDefaultCardActionMiddleware.default)()]))({
92
- dispatch: dispatch
93
- });
94
- return {
95
- onCardAction: function onCardAction(cardAction) {
96
- var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
97
- target = _ref2.target;
98
- markAllAsAcknowledged();
99
- return runMiddleware({
100
- cardAction: cardAction,
101
- getSignInUrl: cardAction.type === 'signin' ? function () {
102
- var value = cardAction.value;
103
- if (directLine.getSessionId) {
104
- /**
105
- * @todo TODO: [P3] We should change this one to async/await.
106
- * This is the first place in this project to use async.
107
- * Thus, we need to add @babel/plugin-transform-runtime and @babel/runtime.
108
- */
109
- return (0, _observableToPromise.default)(directLine.getSessionId(), ponyfill).then(function (sessionId) {
110
- return "".concat(value).concat(encodeURIComponent("&code_challenge=".concat(sessionId)));
111
- });
112
- }
113
- console.warn('botframework-webchat: OAuth is not supported on this Direct Line adapter.');
114
- return value;
115
- } : null,
116
- target: target
117
- });
118
- }
119
- };
120
- }
121
- function createGroupActivitiesContext(_ref3) {
122
- var groupActivitiesMiddleware = _ref3.groupActivitiesMiddleware,
123
- groupTimestamp = _ref3.groupTimestamp,
124
- ponyfill = _ref3.ponyfill;
125
- var runMiddleware = _applyMiddleware.default.apply(void 0, ['group activities'].concat(_toConsumableArray(groupActivitiesMiddleware), [(0, _createDefaultGroupActivitiesMiddleware.default)({
126
- groupTimestamp: groupTimestamp,
127
- ponyfill: ponyfill
128
- })]));
129
- return {
130
- groupActivities: runMiddleware({})
131
- };
132
- }
133
- function mergeStringsOverrides(localizedStrings, language, overrideLocalizedStrings) {
134
- if (!overrideLocalizedStrings) {
135
- return localizedStrings;
136
- } else if (typeof overrideLocalizedStrings === 'function') {
137
- var merged = overrideLocalizedStrings(localizedStrings, language);
138
- if (!(0, _isObject.default)(merged)) {
139
- throw new Error('botframework-webchat: overrideLocalizedStrings function must return an object.');
140
- }
141
- return merged;
142
- }
143
- if (!(0, _isObject.default)(overrideLocalizedStrings)) {
144
- throw new Error('botframework-webchat: overrideLocalizedStrings must be either a function, an object, or falsy.');
145
- }
146
- return _objectSpread(_objectSpread({}, localizedStrings), overrideLocalizedStrings);
147
- }
148
-
149
- // It seems "react/require-default-props" did not pick up `ComposerCore.defaultProps`.
150
- // And it falsely complaint `optional?: string` must have a corresponding `ComposerCore.defaultProps.optional = undefined`, even we already set it below.
151
- // Since we set both TypeScript `Props` class and `ComposerCore.propTypes`, this check will be done there as well.
152
- // Ignoring it in TypeScript version should be safe, as we have `propTypes` version to protect us.
153
-
154
- var ComposerCore = function ComposerCore(_ref4) {
155
- var activityMiddleware = _ref4.activityMiddleware,
156
- activityStatusMiddleware = _ref4.activityStatusMiddleware,
157
- attachmentForScreenReaderMiddleware = _ref4.attachmentForScreenReaderMiddleware,
158
- attachmentMiddleware = _ref4.attachmentMiddleware,
159
- avatarMiddleware = _ref4.avatarMiddleware,
160
- cardActionMiddleware = _ref4.cardActionMiddleware,
161
- children = _ref4.children,
162
- dir = _ref4.dir,
163
- directLine = _ref4.directLine,
164
- disabled = _ref4.disabled,
165
- downscaleImageToDataURL = _ref4.downscaleImageToDataURL,
166
- grammars = _ref4.grammars,
167
- groupActivitiesMiddleware = _ref4.groupActivitiesMiddleware,
168
- internalErrorBoxClass = _ref4.internalErrorBoxClass,
169
- locale = _ref4.locale,
170
- onTelemetry = _ref4.onTelemetry,
171
- overrideLocalizedStrings = _ref4.overrideLocalizedStrings,
172
- renderMarkdown = _ref4.renderMarkdown,
173
- scrollToEndButtonMiddleware = _ref4.scrollToEndButtonMiddleware,
174
- selectVoice = _ref4.selectVoice,
175
- sendBoxMiddleware = _ref4.sendBoxMiddleware,
176
- sendBoxToolbarMiddleware = _ref4.sendBoxToolbarMiddleware,
177
- sendTypingIndicator = _ref4.sendTypingIndicator,
178
- styleOptions = _ref4.styleOptions,
179
- toastMiddleware = _ref4.toastMiddleware,
180
- typingIndicatorMiddleware = _ref4.typingIndicatorMiddleware,
181
- userID = _ref4.userID,
182
- username = _ref4.username;
183
- var _usePonyfill = (0, _usePonyfill5.default)(),
184
- _usePonyfill2 = _slicedToArray(_usePonyfill, 1),
185
- ponyfill = _usePonyfill2[0];
186
- var dispatch = (0, _WebChatReduxContext.useDispatch)();
187
- var telemetryDimensionsRef = (0, _react.useRef)({});
188
- var patchedDir = (0, _react.useMemo)(function () {
189
- return dir === 'ltr' || dir === 'rtl' ? dir : 'auto';
190
- }, [dir]);
191
- var patchedGrammars = (0, _react.useMemo)(function () {
192
- return grammars || [];
193
- }, [grammars]);
194
- var patchedStyleOptions = (0, _react.useMemo)(function () {
195
- return (0, _normalizeStyleOptions.default)((0, _patchStyleOptionsFromDeprecatedProps.default)(styleOptions));
196
- }, [styleOptions]);
197
- (0, _react.useEffect)(function () {
198
- dispatch((0, _botframeworkWebchatCore.setLanguage)(locale));
199
- }, [dispatch, locale]);
200
- (0, _react.useEffect)(function () {
201
- dispatch((0, _botframeworkWebchatCore.setSendTypingIndicator)(!!sendTypingIndicator));
202
- }, [dispatch, sendTypingIndicator]);
203
- (0, _react.useEffect)(function () {
204
- dispatch((0, _botframeworkWebchatCore.connect)({
205
- directLine: directLine,
206
- userID: userID,
207
- username: username
208
- }));
209
- return function () {
210
- /**
211
- * @todo TODO: [P3] disconnect() is an async call (pending -> fulfilled), we need to wait, or change it to reconnect()
212
- */
213
- dispatch((0, _botframeworkWebchatCore.disconnect)());
214
- };
215
- }, [dispatch, directLine, userID, username]);
216
- var markAllAsAcknowledged = (0, _useMarkAllAsAcknowledged.default)();
217
- var cardActionContext = (0, _react.useMemo)(function () {
218
- return createCardActionContext({
219
- cardActionMiddleware: Object.freeze(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(cardActionMiddleware))),
220
- directLine: directLine,
221
- dispatch: dispatch,
222
- markAllAsAcknowledged: markAllAsAcknowledged,
223
- ponyfill: ponyfill
224
- });
225
- }, [cardActionMiddleware, directLine, dispatch, markAllAsAcknowledged, ponyfill]);
226
- var patchedSelectVoice = (0, _react.useMemo)(function () {
227
- return selectVoice || _defaultSelectVoice.default.bind(null, {
228
- language: locale
229
- });
230
- }, [locale, selectVoice]);
231
- var groupActivitiesContext = (0, _react.useMemo)(function () {
232
- return createGroupActivitiesContext({
233
- groupActivitiesMiddleware: Object.freeze(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(groupActivitiesMiddleware))),
234
- groupTimestamp: patchedStyleOptions.groupTimestamp,
235
- ponyfill: ponyfill
236
- });
237
- }, [groupActivitiesMiddleware, patchedStyleOptions.groupTimestamp, ponyfill]);
238
- var hoistedDispatchers = (0, _react.useMemo)(function () {
239
- return (0, _mapMap.default)(DISPATCHERS, function (dispatcher) {
240
- return function () {
241
- return (
242
- // @ts-expect-error
243
- dispatch(dispatcher.apply(void 0, arguments))
244
- );
245
- };
246
- });
247
- }, [dispatch]);
248
- var patchedLocalizedStrings = (0, _react.useMemo)(function () {
249
- return mergeStringsOverrides((0, _getAllLocalizedStrings.default)()[(0, _normalizeLanguage.default)(locale)], locale, overrideLocalizedStrings);
250
- }, [locale, overrideLocalizedStrings]);
251
- var localizedGlobalize = (0, _react.useMemo)(function () {
252
- var _ref5 = patchedLocalizedStrings || {},
253
- GLOBALIZE = _ref5.GLOBALIZE,
254
- GLOBALIZE_LANGUAGE = _ref5.GLOBALIZE_LANGUAGE;
255
- return GLOBALIZE || GLOBALIZE_LANGUAGE && (0, _PrecompiledGlobalize.default)(GLOBALIZE_LANGUAGE) || (0, _PrecompiledGlobalize.default)('en');
256
- }, [patchedLocalizedStrings]);
257
- var trackDimension = (0, _react.useCallback)(function (name, data) {
258
- if (!name || typeof name !== 'string') {
259
- return console.warn('botframework-webchat: Telemetry dimension name must be a string.');
260
- }
261
- var type = _typeof(data);
262
- if (type !== 'string' && type !== 'undefined') {
263
- return console.warn('botframework-webchat: Telemetry dimension data must be a string or undefined.');
264
- }
265
- telemetryDimensionsRef.current = (0, _simpleUpdateIn.default)(telemetryDimensionsRef.current, [name], type === 'undefined' ? data : function () {
266
- return data;
267
- });
268
- }, [telemetryDimensionsRef]);
269
- var patchedActivityRenderer = (0, _react.useMemo)(function () {
270
- return _applyMiddleware.forRenderer.apply(void 0, ['activity', {
271
- strict: false
272
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityMiddleware)), [function () {
273
- return function () {
274
- return function (_ref6) {
275
- var activity = _ref6.activity;
276
- if (activity) {
277
- throw new Error("No renderer for activity of type \"".concat(activity.type, "\""));
278
- } else {
279
- throw new Error('No activity to render');
280
- }
281
- };
282
- };
283
- }]))({});
284
- }, [activityMiddleware]);
285
- var patchedActivityStatusRenderer = (0, _react.useMemo)(function () {
286
- return _applyMiddleware.forRenderer.apply(void 0, ['activity status', {
287
- strict: false
288
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityStatusMiddleware)), [function () {
289
- return function () {
290
- return function () {
291
- return false;
292
- };
293
- };
294
- }]))({});
295
- }, [activityStatusMiddleware]);
296
- var patchedAttachmentForScreenReaderRenderer = (0, _react.useMemo)(function () {
297
- return _applyMiddleware.forRenderer.apply(void 0, ['attachment for screen reader', {
298
- strict: true
299
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentForScreenReaderMiddleware)), [function () {
300
- return function () {
301
- return function (_ref7) {
302
- var attachment = _ref7.attachment;
303
- if (attachment) {
304
- console.warn("No renderer for attachment for screen reader of type \"".concat(attachment.contentType, "\""));
305
- return false;
306
- }
307
- return function () {
308
- /**
309
- * @todo TODO: [P4] Might be able to throw without returning a function -- investigate and possibly fix
310
- */
311
- throw new Error('No attachment to render');
312
- };
313
- };
314
- };
315
- }]))({});
316
- }, [attachmentForScreenReaderMiddleware]);
317
- var patchedAttachmentRenderer = (0, _react.useMemo)(function () {
318
- return _applyMiddleware.forLegacyRenderer.apply(void 0, ['attachment'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentMiddleware)), [function () {
319
- return function () {
320
- return function (_ref8) {
321
- var attachment = _ref8.attachment;
322
- if (attachment) {
323
- throw new Error("No renderer for attachment of type \"".concat(attachment.contentType, "\""));
324
- } else {
325
- throw new Error('No attachment to render');
326
- }
327
- };
328
- };
329
- }]))({});
330
- }, [attachmentMiddleware]);
331
- var patchedAvatarRenderer = (0, _react.useMemo)(function () {
332
- return _applyMiddleware.forRenderer.apply(void 0, ['avatar', {
333
- strict: false
334
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(avatarMiddleware)), [function () {
335
- return function () {
336
- return function () {
337
- return false;
338
- };
339
- };
340
- }]))({});
341
- }, [avatarMiddleware]);
342
- var patchedToastRenderer = (0, _react.useMemo)(function () {
343
- return _applyMiddleware.forRenderer.apply(void 0, ['toast', {
344
- strict: false
345
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(toastMiddleware)), [function () {
346
- return function () {
347
- return function (_ref9) {
348
- var notification = _ref9.notification;
349
- if (notification) {
350
- throw new Error("No renderer for notification of type \"".concat(notification.contentType, "\""));
351
- } else {
352
- throw new Error('No notification to render');
353
- }
354
- };
355
- };
356
- }]))({});
357
- }, [toastMiddleware]);
358
- var patchedTypingIndicatorRenderer = (0, _react.useMemo)(function () {
359
- return _applyMiddleware.forRenderer.apply(void 0, ['typing indicator', {
360
- strict: false
361
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(typingIndicatorMiddleware)), [function () {
362
- return function () {
363
- return function () {
364
- return false;
365
- };
366
- };
367
- }]))({});
368
- }, [typingIndicatorMiddleware]);
369
- var scrollToEndButtonRenderer = (0, _react.useMemo)(function () {
370
- return _applyMiddleware.forRenderer.apply(void 0, ['scroll to end button', {
371
- strict: true
372
- }].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(scrollToEndButtonMiddleware)), [function () {
373
- return function () {
374
- return function () {
375
- return false;
376
- };
377
- };
378
- }]))();
379
- }, [scrollToEndButtonMiddleware]);
380
-
381
- /**
382
- * This is a heavy function, and it is expected to be only called when there is a need to recreate business logic, e.g.
383
- * - User ID changed, causing all send* functions to be updated
384
- * - send
385
- * @todo TODO: [P3] We should think about if we allow the user to change onSendBoxValueChanged/sendBoxValue, e.g.
386
- * 1. Turns text into UPPERCASE
387
- * 2. Filter out profanity
388
- * @todo TODO: [P4] Revisit all members of context
389
- * This context should consist of members that are not in the Redux store
390
- * i.e. members that are not interested in other types of UIs
391
- */
392
- var context = (0, _react.useMemo)(function () {
393
- return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, cardActionContext), groupActivitiesContext), hoistedDispatchers), {}, {
394
- activityRenderer: patchedActivityRenderer,
395
- activityStatusRenderer: patchedActivityStatusRenderer,
396
- attachmentForScreenReaderRenderer: patchedAttachmentForScreenReaderRenderer,
397
- attachmentRenderer: patchedAttachmentRenderer,
398
- avatarRenderer: patchedAvatarRenderer,
399
- dir: patchedDir,
400
- directLine: directLine,
401
- disabled: disabled,
402
- downscaleImageToDataURL: downscaleImageToDataURL,
403
- grammars: patchedGrammars,
404
- internalErrorBoxClass: internalErrorBoxClass,
405
- language: locale,
406
- localizedGlobalizeState: [localizedGlobalize],
407
- localizedStrings: patchedLocalizedStrings,
408
- onTelemetry: onTelemetry,
409
- renderMarkdown: renderMarkdown,
410
- scrollToEndButtonRenderer: scrollToEndButtonRenderer,
411
- selectVoice: patchedSelectVoice,
412
- sendTypingIndicator: sendTypingIndicator,
413
- styleOptions: patchedStyleOptions,
414
- telemetryDimensionsRef: telemetryDimensionsRef,
415
- toastRenderer: patchedToastRenderer,
416
- trackDimension: trackDimension,
417
- typingIndicatorRenderer: patchedTypingIndicatorRenderer,
418
- userID: userID,
419
- username: username
420
- });
421
- }, [cardActionContext, directLine, disabled, downscaleImageToDataURL, groupActivitiesContext, hoistedDispatchers, internalErrorBoxClass, locale, localizedGlobalize, onTelemetry, patchedActivityRenderer, patchedActivityStatusRenderer, patchedAttachmentForScreenReaderRenderer, patchedAttachmentRenderer, patchedAvatarRenderer, patchedDir, patchedGrammars, patchedLocalizedStrings, patchedSelectVoice, patchedStyleOptions, patchedToastRenderer, patchedTypingIndicatorRenderer, renderMarkdown, scrollToEndButtonRenderer, sendTypingIndicator, telemetryDimensionsRef, trackDimension, userID, username]);
422
- return /*#__PURE__*/_react.default.createElement(_WebChatAPIContext.default.Provider, {
423
- value: context
424
- }, /*#__PURE__*/_react.default.createElement(_ActivitySendStatusComposer.default, null, /*#__PURE__*/_react.default.createElement(_SendBoxMiddleware.SendBoxMiddlewareProvider, {
425
- middleware: sendBoxMiddleware || Object.freeze([])
426
- }, /*#__PURE__*/_react.default.createElement(_SendBoxToolbarMiddleware.SendBoxToolbarMiddlewareProvider, {
427
- middleware: sendBoxToolbarMiddleware || Object.freeze([])
428
- }, typeof children === 'function' ? children(context) : children, /*#__PURE__*/_react.default.createElement(_ActivitySendStatusTelemetryComposer.default, null)))), onTelemetry && /*#__PURE__*/_react.default.createElement(_Tracker.default, null));
429
- };
430
-
431
- /**
432
- * @todo TODO: [P3] We should consider moving some data from Redux store to props
433
- * Although we use `connectToWebChat` to hide the details of accessor of Redux store,
434
- * we should clean up the responsibility between Context and Redux store
435
- * We should decide which data is needed for React but not in other environment such as CLI/VSCode
436
- */
437
- ComposerCore.defaultProps = {
438
- activityMiddleware: undefined,
439
- activityStatusMiddleware: undefined,
440
- attachmentForScreenReaderMiddleware: undefined,
441
- attachmentMiddleware: undefined,
442
- avatarMiddleware: undefined,
443
- cardActionMiddleware: undefined,
444
- children: undefined,
445
- dir: 'auto',
446
- disabled: false,
447
- downscaleImageToDataURL: undefined,
448
- grammars: [],
449
- groupActivitiesMiddleware: undefined,
450
- internalErrorBoxClass: undefined,
451
- locale: window.navigator.language || 'en-US',
452
- onTelemetry: undefined,
453
- overrideLocalizedStrings: undefined,
454
- renderMarkdown: undefined,
455
- scrollToEndButtonMiddleware: undefined,
456
- selectVoice: undefined,
457
- sendTypingIndicator: false,
458
- styleOptions: {},
459
- toastMiddleware: undefined,
460
- typingIndicatorMiddleware: undefined,
461
- userID: '',
462
- username: ''
463
- };
464
- ComposerCore.propTypes = {
465
- activityMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
466
- activityStatusMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
467
- attachmentForScreenReaderMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
468
- attachmentMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
469
- avatarMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
470
- cardActionMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
471
- children: _propTypes.default.any,
472
- dir: _propTypes.default.oneOf(['auto', 'ltr', 'rtl']),
473
- // PropTypes.shape({ ... }) did not honor isRequired for its members.
474
- // @ts-ignore
475
- directLine: _propTypes.default.shape({
476
- activity$: _propTypes.default.shape({
477
- subscribe: _propTypes.default.func.isRequired
478
- }).isRequired,
479
- connectionStatus$: _propTypes.default.shape({
480
- subscribe: _propTypes.default.func.isRequired
481
- }).isRequired,
482
- end: _propTypes.default.func,
483
- getSessionId: _propTypes.default.func,
484
- postActivity: _propTypes.default.func.isRequired,
485
- referenceGrammarID: _propTypes.default.string,
486
- token: _propTypes.default.string
487
- }).isRequired,
488
- disabled: _propTypes.default.bool,
489
- downscaleImageToDataURL: _propTypes.default.func,
490
- grammars: _propTypes.default.arrayOf(_propTypes.default.string),
491
- groupActivitiesMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
492
- internalErrorBoxClass: _propTypes.default.func,
493
- // This is for internal use only. We don't allow customization of error box.
494
- locale: _propTypes.default.string,
495
- onTelemetry: _propTypes.default.func,
496
- overrideLocalizedStrings: _propTypes.default.oneOfType([_propTypes.default.any, _propTypes.default.func]),
497
- renderMarkdown: _propTypes.default.func,
498
- scrollToEndButtonMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
499
- selectVoice: _propTypes.default.func,
500
- sendTypingIndicator: _propTypes.default.bool,
501
- styleOptions: _propTypes.default.any,
502
- toastMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
503
- typingIndicatorMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
504
- userID: _propTypes.default.string,
505
- username: _propTypes.default.string
506
- };
507
- // We will create a Redux store if it was not passed in
508
- var ComposerWithStore = function ComposerWithStore(_ref10) {
509
- var onTelemetry = _ref10.onTelemetry,
510
- store = _ref10.store,
511
- props = _objectWithoutProperties(_ref10, _excluded);
512
- var _usePonyfill3 = (0, _usePonyfill5.default)(),
513
- _usePonyfill4 = _slicedToArray(_usePonyfill3, 1),
514
- ponyfill = _usePonyfill4[0];
515
- var memoizedStore = (0, _react.useMemo)(function () {
516
- var _nextStore$getState$i;
517
- var nextStore = store || (0, _botframeworkWebchatCore.createStoreWithOptions)({
518
- ponyfill: ponyfill
519
- });
520
- var storePonyfill = ((_nextStore$getState$i = nextStore.getState().internal) === null || _nextStore$getState$i === void 0 ? void 0 : _nextStore$getState$i.ponyfill) || {};
521
- var keys = new Set([].concat(_toConsumableArray(Object.keys(storePonyfill)), _toConsumableArray(Object.keys(ponyfill))));
522
-
523
- // Filter out forbidden properties.
524
- keys.delete('prototype');
525
- Object.getOwnPropertyNames(Object.prototype).forEach(function (key) {
526
- keys.delete(key);
527
- });
528
- var nativeFunction = function nativeFunction(fn) {
529
- return typeof fn === 'function' && ('' + fn).endsWith('() { [native code] }');
530
- };
531
- var ponyfillFunctionEquals = function ponyfillFunctionEquals(x, y) {
532
- return nativeFunction(x) && nativeFunction(y) || x === y;
533
- };
534
-
535
- // We have filtered out all forbidden properties.
536
- // eslint-disable-next-line security/detect-object-injection
537
- var differentKeys = Array.from(keys).filter(function (key) {
538
- return !ponyfillFunctionEquals(storePonyfill[key], ponyfill[key]);
539
- });
540
- if (differentKeys.length) {
541
- console.warn("botframework-webchat: Ponyfill used in store should match the ponyfill passed in props: ".concat(differentKeys.join(', ')));
542
- }
543
- return nextStore;
544
- }, [ponyfill, store]);
545
- return /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
546
- context: _WebChatReduxContext.default,
547
- store: memoizedStore
548
- }, /*#__PURE__*/_react.default.createElement(_ActivityKeyerComposer.default, null, /*#__PURE__*/_react.default.createElement(_ActivityAcknowledgementComposer.default, null, /*#__PURE__*/_react.default.createElement(ComposerCore, _extends({
549
- onTelemetry: onTelemetry
550
- }, props)))));
551
- };
552
- ComposerWithStore.defaultProps = {
553
- onTelemetry: undefined,
554
- store: undefined
555
- };
556
- ComposerWithStore.propTypes = {
557
- onTelemetry: _propTypes.default.func,
558
- store: _propTypes.default.any
559
- };
560
- var Composer = function Composer(_ref11) {
561
- var internalRenderErrorBox = _ref11.internalRenderErrorBox,
562
- onTelemetry = _ref11.onTelemetry,
563
- ponyfill = _ref11.ponyfill,
564
- props = _objectWithoutProperties(_ref11, _excluded2);
565
- var _useState = (0, _react.useState)(),
566
- _useState2 = _slicedToArray(_useState, 2),
567
- error = _useState2[0],
568
- setError = _useState2[1];
569
- var handleError = (0, _react.useCallback)(function (error) {
570
- console.error('botframework-webchat: Uncaught exception', {
571
- error: error
572
- });
573
- onTelemetry && onTelemetry((0, _createCustomEvent.default)('exception', {
574
- error: error,
575
- fatal: true
576
- }));
577
- setError(error);
578
- }, [onTelemetry, setError]);
579
- return error ? !!internalRenderErrorBox && internalRenderErrorBox({
580
- error: error,
581
- type: 'uncaught exception'
582
- }) : /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, {
583
- onError: handleError
584
- }, /*#__PURE__*/_react.default.createElement(_PonyfillComposer.default, {
585
- ponyfill: ponyfill
586
- }, /*#__PURE__*/_react.default.createElement(ComposerWithStore, _extends({
587
- onTelemetry: onTelemetry
588
- }, props))));
589
- };
590
- Composer.defaultProps = _objectSpread(_objectSpread({}, ComposerWithStore.defaultProps), {}, {
591
- internalRenderErrorBox: undefined,
592
- onTelemetry: undefined,
593
- ponyfill: undefined
594
- });
595
- Composer.propTypes = _objectSpread(_objectSpread({}, ComposerWithStore.propTypes), {}, {
596
- internalRenderErrorBox: _propTypes.default.any,
597
- onTelemetry: _propTypes.default.func,
598
- ponyfill: _propTypes.default.any
599
- });
600
- var _default = Composer;
601
- exports.default = _default;
602
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdENvcmUiLCJyZXF1aXJlIiwiX3Byb3BUeXBlcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9yZWFjdFJlZHV4IiwiX3NpbXBsZVVwZGF0ZUluIiwiX3VzZVBvbnlmaWxsNSIsIl9nZXRBbGxMb2NhbGl6ZWRTdHJpbmdzIiwiX25vcm1hbGl6ZVN0eWxlT3B0aW9ucyIsIl9wYXRjaFN0eWxlT3B0aW9uc0Zyb21EZXByZWNhdGVkUHJvcHMiLCJfQWN0aXZpdHlBY2tub3dsZWRnZW1lbnRDb21wb3NlciIsIl9BY3Rpdml0eUtleWVyQ29tcG9zZXIiLCJfQWN0aXZpdHlTZW5kU3RhdHVzQ29tcG9zZXIiLCJfQWN0aXZpdHlTZW5kU3RhdHVzVGVsZW1ldHJ5Q29tcG9zZXIiLCJfUG9ueWZpbGxDb21wb3NlciIsIl9jcmVhdGVDdXN0b21FdmVudCIsIl9pc09iamVjdCIsIl9tYXBNYXAiLCJfbm9ybWFsaXplTGFuZ3VhZ2UiLCJfU2VuZEJveE1pZGRsZXdhcmUiLCJfU2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlIiwiX1RyYWNrZXIiLCJfV2ViQ2hhdEFQSUNvbnRleHQiLCJfV2ViQ2hhdFJlZHV4Q29udGV4dCIsIl9kZWZhdWx0U2VsZWN0Vm9pY2UiLCJfYXBwbHlNaWRkbGV3YXJlIiwiX2NyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSIsIl9jcmVhdGVEZWZhdWx0R3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSIsIl91c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQiLCJfRXJyb3JCb3VuZGFyeSIsIl9vYnNlcnZhYmxlVG9Qcm9taXNlIiwiX1ByZWNvbXBpbGVkR2xvYmFsaXplIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImFwcGx5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiZXhjbHVkZWQiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsInNvdXJjZVN5bWJvbEtleXMiLCJpbmRleE9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJzb3VyY2VLZXlzIiwia2V5cyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJfaSIsIl9hcnIiLCJfbiIsIl9kIiwiX3MiLCJfZSIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyIiwiQXJyYXkiLCJpc0FycmF5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJpdGVyIiwibGVuIiwiYXJyMiIsIkRJU1BBVENIRVJTIiwiY2xlYXJTdWdnZXN0ZWRBY3Rpb25zIiwiZGlzbWlzc05vdGlmaWNhdGlvbiIsImVtaXRUeXBpbmdJbmRpY2F0b3IiLCJtYXJrQWN0aXZpdHkiLCJwb3N0QWN0aXZpdHkiLCJzZW5kRXZlbnQiLCJzZW5kRmlsZXMiLCJzZW5kTWVzc2FnZSIsInNlbmRNZXNzYWdlQmFjayIsInNlbmRQb3N0QmFjayIsInNldERpY3RhdGVJbnRlcmltcyIsInNldERpY3RhdGVTdGF0ZSIsInNldE5vdGlmaWNhdGlvbiIsInNldFNlbmRCb3giLCJzZXRTZW5kQm94QXR0YWNobWVudHMiLCJzZXRTZW5kVGltZW91dCIsInN0YXJ0RGljdGF0ZSIsInN0YXJ0U3BlYWtpbmdBY3Rpdml0eSIsInN0b3BEaWN0YXRlIiwic3RvcFNwZWFraW5nQWN0aXZpdHkiLCJzdWJtaXRTZW5kQm94IiwiY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQiLCJfcmVmIiwiY2FyZEFjdGlvbk1pZGRsZXdhcmUiLCJkaXJlY3RMaW5lIiwiZGlzcGF0Y2giLCJtYXJrQWxsQXNBY2tub3dsZWRnZWQiLCJwb255ZmlsbCIsInJ1bk1pZGRsZXdhcmUiLCJhcHBseU1pZGRsZXdhcmUiLCJjb25jYXQiLCJjcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUiLCJvbkNhcmRBY3Rpb24iLCJjYXJkQWN0aW9uIiwiX3JlZjIiLCJ1bmRlZmluZWQiLCJnZXRTaWduSW5VcmwiLCJ0eXBlIiwiZ2V0U2Vzc2lvbklkIiwib2JzZXJ2YWJsZVRvUHJvbWlzZSIsInRoZW4iLCJzZXNzaW9uSWQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQiLCJfcmVmMyIsImdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUiLCJncm91cFRpbWVzdGFtcCIsImNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlIiwiZ3JvdXBBY3Rpdml0aWVzIiwibWVyZ2VTdHJpbmdzT3ZlcnJpZGVzIiwibG9jYWxpemVkU3RyaW5ncyIsImxhbmd1YWdlIiwib3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIiwibWVyZ2VkIiwiaXNPYmplY3QiLCJFcnJvciIsIkNvbXBvc2VyQ29yZSIsIl9yZWY0IiwiYWN0aXZpdHlNaWRkbGV3YXJlIiwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlIiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUiLCJhdHRhY2htZW50TWlkZGxld2FyZSIsImF2YXRhck1pZGRsZXdhcmUiLCJjaGlsZHJlbiIsImRpciIsImRpc2FibGVkIiwiZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwiLCJncmFtbWFycyIsImludGVybmFsRXJyb3JCb3hDbGFzcyIsImxvY2FsZSIsIm9uVGVsZW1ldHJ5IiwicmVuZGVyTWFya2Rvd24iLCJzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUiLCJzZWxlY3RWb2ljZSIsInNlbmRCb3hNaWRkbGV3YXJlIiwic2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlIiwic2VuZFR5cGluZ0luZGljYXRvciIsInN0eWxlT3B0aW9ucyIsInRvYXN0TWlkZGxld2FyZSIsInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUiLCJ1c2VySUQiLCJ1c2VybmFtZSIsIl91c2VQb255ZmlsbCIsInVzZVBvbnlmaWxsIiwiX3VzZVBvbnlmaWxsMiIsInVzZURpc3BhdGNoIiwidGVsZW1ldHJ5RGltZW5zaW9uc1JlZiIsInVzZVJlZiIsInBhdGNoZWREaXIiLCJ1c2VNZW1vIiwicGF0Y2hlZEdyYW1tYXJzIiwicGF0Y2hlZFN0eWxlT3B0aW9ucyIsIm5vcm1hbGl6ZVN0eWxlT3B0aW9ucyIsInBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyIsInVzZUVmZmVjdCIsInNldExhbmd1YWdlIiwic2V0U2VuZFR5cGluZ0luZGljYXRvciIsImNyZWF0ZUNvbm5lY3RBY3Rpb24iLCJkaXNjb25uZWN0IiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwiY2FyZEFjdGlvbkNvbnRleHQiLCJmcmVlemUiLCJzaW5nbGVUb0FycmF5IiwicGF0Y2hlZFNlbGVjdFZvaWNlIiwiZGVmYXVsdFNlbGVjdFZvaWNlIiwiZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCIsImhvaXN0ZWREaXNwYXRjaGVycyIsIm1hcE1hcCIsImRpc3BhdGNoZXIiLCJwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyIsImdldEFsbExvY2FsaXplZFN0cmluZ3MiLCJub3JtYWxpemVMYW5ndWFnZSIsImxvY2FsaXplZEdsb2JhbGl6ZSIsIl9yZWY1IiwiR0xPQkFMSVpFIiwiR0xPQkFMSVpFX0xBTkdVQUdFIiwiUHJlY29tcGlsZWRHbG9iYWxpemUiLCJ0cmFja0RpbWVuc2lvbiIsInVzZUNhbGxiYWNrIiwiZGF0YSIsImN1cnJlbnQiLCJ1cGRhdGVJbiIsInBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyIiwiYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIiLCJzdHJpY3QiLCJfcmVmNiIsImFjdGl2aXR5IiwicGF0Y2hlZEFjdGl2aXR5U3RhdHVzUmVuZGVyZXIiLCJwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwiX3JlZjciLCJhdHRhY2htZW50IiwiY29udGVudFR5cGUiLCJwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyIiwiYXBwbHlNaWRkbGV3YXJlRm9yTGVnYWN5UmVuZGVyZXIiLCJfcmVmOCIsInBhdGNoZWRBdmF0YXJSZW5kZXJlciIsInBhdGNoZWRUb2FzdFJlbmRlcmVyIiwiX3JlZjkiLCJub3RpZmljYXRpb24iLCJwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIiLCJzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyIiwiY29udGV4dCIsImFjdGl2aXR5UmVuZGVyZXIiLCJhY3Rpdml0eVN0YXR1c1JlbmRlcmVyIiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwiYXR0YWNobWVudFJlbmRlcmVyIiwiYXZhdGFyUmVuZGVyZXIiLCJsb2NhbGl6ZWRHbG9iYWxpemVTdGF0ZSIsInRvYXN0UmVuZGVyZXIiLCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsIlNlbmRCb3hNaWRkbGV3YXJlUHJvdmlkZXIiLCJtaWRkbGV3YXJlIiwiU2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlUHJvdmlkZXIiLCJkZWZhdWx0UHJvcHMiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwiZnVuYyIsImFueSIsIm9uZU9mIiwic2hhcGUiLCJhY3Rpdml0eSQiLCJzdWJzY3JpYmUiLCJpc1JlcXVpcmVkIiwiY29ubmVjdGlvblN0YXR1cyQiLCJlbmQiLCJyZWZlcmVuY2VHcmFtbWFySUQiLCJzdHJpbmciLCJ0b2tlbiIsImJvb2wiLCJDb21wb3NlcldpdGhTdG9yZSIsIl9yZWYxMCIsInN0b3JlIiwicHJvcHMiLCJfdXNlUG9ueWZpbGwzIiwiX3VzZVBvbnlmaWxsNCIsIm1lbW9pemVkU3RvcmUiLCJfbmV4dFN0b3JlJGdldFN0YXRlJGkiLCJuZXh0U3RvcmUiLCJjcmVhdGVTdG9yZVdpdGhPcHRpb25zIiwic3RvcmVQb255ZmlsbCIsImdldFN0YXRlIiwiaW50ZXJuYWwiLCJTZXQiLCJkZWxldGUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibmF0aXZlRnVuY3Rpb24iLCJmbiIsImVuZHNXaXRoIiwicG9ueWZpbGxGdW5jdGlvbkVxdWFscyIsIngiLCJ5IiwiZGlmZmVyZW50S2V5cyIsImpvaW4iLCJXZWJDaGF0UmVkdXhDb250ZXh0IiwiQ29tcG9zZXIiLCJfcmVmMTEiLCJpbnRlcm5hbFJlbmRlckVycm9yQm94IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXJyb3IiLCJzZXRFcnJvciIsImhhbmRsZUVycm9yIiwiY3JlYXRlQ3VzdG9tRXZlbnQiLCJmYXRhbCIsIm9uRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9Db21wb3Nlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY2xlYXJTdWdnZXN0ZWRBY3Rpb25zLFxuICBjb25uZWN0IGFzIGNyZWF0ZUNvbm5lY3RBY3Rpb24sXG4gIGNyZWF0ZVN0b3JlV2l0aE9wdGlvbnMsXG4gIGRpc2Nvbm5lY3QsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0TGFuZ3VhZ2UsXG4gIHNldE5vdGlmaWNhdGlvbixcbiAgc2V0U2VuZEJveCxcbiAgc2V0U2VuZEJveEF0dGFjaG1lbnRzLFxuICBzZXRTZW5kVGltZW91dCxcbiAgc2V0U2VuZFR5cGluZ0luZGljYXRvcixcbiAgc2luZ2xlVG9BcnJheSxcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveCxcbiAgdHlwZSBEaXJlY3RMaW5lSlNCb3RDb25uZWN0aW9uLFxuICB0eXBlIEdsb2JhbFNjb3BlUG9ueWZpbGwsXG4gIHR5cGUgT25lT3JNYW55LFxuICB0eXBlIFdlYkNoYXRBY3Rpdml0eVxufSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB1cGRhdGVJbiBmcm9tICdzaW1wbGUtdXBkYXRlLWluJztcblxuaW1wb3J0IFN0eWxlT3B0aW9ucyBmcm9tICcuLi9TdHlsZU9wdGlvbnMnO1xuaW1wb3J0IHVzZVBvbnlmaWxsIGZyb20gJy4uL2hvb2tzL3VzZVBvbnlmaWxsJztcbmltcG9ydCBnZXRBbGxMb2NhbGl6ZWRTdHJpbmdzIGZyb20gJy4uL2xvY2FsaXphdGlvbi9nZXRBbGxMb2NhbGl6ZWRTdHJpbmdzJztcbmltcG9ydCBub3JtYWxpemVTdHlsZU9wdGlvbnMgZnJvbSAnLi4vbm9ybWFsaXplU3R5bGVPcHRpb25zJztcbmltcG9ydCBwYXRjaFN0eWxlT3B0aW9uc0Zyb21EZXByZWNhdGVkUHJvcHMgZnJvbSAnLi4vcGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzJztcbmltcG9ydCBBY3Rpdml0eUFja25vd2xlZGdlbWVudENvbXBvc2VyIGZyb20gJy4uL3Byb3ZpZGVycy9BY3Rpdml0eUFja25vd2xlZGdlbWVudC9BY3Rpdml0eUFja25vd2xlZGdlbWVudENvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eUtleWVyQ29tcG9zZXIgZnJvbSAnLi4vcHJvdmlkZXJzL0FjdGl2aXR5S2V5ZXIvQWN0aXZpdHlLZXllckNvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eVNlbmRTdGF0dXNDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvQWN0aXZpdHlTZW5kU3RhdHVzL0FjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eVNlbmRTdGF0dXNUZWxlbWV0cnlDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvQWN0aXZpdHlTZW5kU3RhdHVzVGVsZW1ldHJ5L0FjdGl2aXR5U2VuZFN0YXR1c1RlbGVtZXRyeUNvbXBvc2VyJztcbmltcG9ydCBQb255ZmlsbENvbXBvc2VyIGZyb20gJy4uL3Byb3ZpZGVycy9Qb255ZmlsbC9Qb255ZmlsbENvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eU1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQWN0aXZpdHlNaWRkbGV3YXJlJztcbmltcG9ydCB7IHR5cGUgQWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlLCB0eXBlIFJlbmRlckFjdGl2aXR5U3RhdHVzIH0gZnJvbSAnLi4vdHlwZXMvQWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlJztcbmltcG9ydCBBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9BdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSc7XG5pbXBvcnQgQXR0YWNobWVudE1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQXR0YWNobWVudE1pZGRsZXdhcmUnO1xuaW1wb3J0IEF2YXRhck1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQXZhdGFyTWlkZGxld2FyZSc7XG5pbXBvcnQgQ2FyZEFjdGlvbk1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQ2FyZEFjdGlvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvR3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSc7XG5pbXBvcnQgTG9jYWxpemVkU3RyaW5ncyBmcm9tICcuLi90eXBlcy9Mb2NhbGl6ZWRTdHJpbmdzJztcbmltcG9ydCBQcmVjb21waWxlZEdsb2JhbGl6ZVR5cGUgZnJvbSAnLi4vdHlwZXMvUHJlY29tcGlsZWRHbG9iYWxpemUnO1xuaW1wb3J0IFNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSwgeyBTY3JvbGxUb0VuZEJ1dHRvbkNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICcuLi90eXBlcy9TY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IFRlbGVtZXRyeU1lYXN1cmVtZW50RXZlbnQsIHsgVGVsZW1ldHJ5RXhjZXB0aW9uTWVhc3VyZW1lbnRFdmVudCB9IGZyb20gJy4uL3R5cGVzL1RlbGVtZXRyeU1lYXN1cmVtZW50RXZlbnQnO1xuaW1wb3J0IFRvYXN0TWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9Ub2FzdE1pZGRsZXdhcmUnO1xuaW1wb3J0IFR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvVHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSc7XG5pbXBvcnQgeyB0eXBlIENvbnRleHRPZiB9IGZyb20gJy4uL3R5cGVzL0NvbnRleHRPZic7XG5pbXBvcnQgY3JlYXRlQ3VzdG9tRXZlbnQgZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ3VzdG9tRXZlbnQnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4uL3V0aWxzL2lzT2JqZWN0JztcbmltcG9ydCBtYXBNYXAgZnJvbSAnLi4vdXRpbHMvbWFwTWFwJztcbmltcG9ydCBub3JtYWxpemVMYW5ndWFnZSBmcm9tICcuLi91dGlscy9ub3JtYWxpemVMYW5ndWFnZSc7XG5pbXBvcnQgeyBTZW5kQm94TWlkZGxld2FyZVByb3ZpZGVyLCB0eXBlIFNlbmRCb3hNaWRkbGV3YXJlIH0gZnJvbSAnLi9pbnRlcm5hbC9TZW5kQm94TWlkZGxld2FyZSc7XG5pbXBvcnQgeyBTZW5kQm94VG9vbGJhck1pZGRsZXdhcmVQcm92aWRlciwgdHlwZSBTZW5kQm94VG9vbGJhck1pZGRsZXdhcmUgfSBmcm9tICcuL2ludGVybmFsL1NlbmRCb3hUb29sYmFyTWlkZGxld2FyZSc7XG5pbXBvcnQgVHJhY2tlciBmcm9tICcuL2ludGVybmFsL1RyYWNrZXInO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBXZWJDaGF0QVBJQ29udGV4dCB9IGZyb20gJy4vaW50ZXJuYWwvV2ViQ2hhdEFQSUNvbnRleHQnO1xuaW1wb3J0IFdlYkNoYXRSZWR1eENvbnRleHQsIHsgdXNlRGlzcGF0Y2ggfSBmcm9tICcuL2ludGVybmFsL1dlYkNoYXRSZWR1eENvbnRleHQnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RWb2ljZSBmcm9tICcuL2ludGVybmFsL2RlZmF1bHRTZWxlY3RWb2ljZSc7XG5pbXBvcnQgYXBwbHlNaWRkbGV3YXJlLCB7XG4gIGZvckxlZ2FjeVJlbmRlcmVyIGFzIGFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyLFxuICBmb3JSZW5kZXJlciBhcyBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlclxufSBmcm9tICcuL21pZGRsZXdhcmUvYXBwbHlNaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUgZnJvbSAnLi9taWRkbGV3YXJlL2NyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUgZnJvbSAnLi9taWRkbGV3YXJlL2NyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlJztcbmltcG9ydCB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQgZnJvbSAnLi91c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQnO1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi91dGlscy9FcnJvckJvdW5kYXJ5JztcbmltcG9ydCBvYnNlcnZhYmxlVG9Qcm9taXNlIGZyb20gJy4vdXRpbHMvb2JzZXJ2YWJsZVRvUHJvbWlzZSc7XG5cbi8vIFByZWNvbXBpbGVHbG9iYWxpemUgaXMgYSBnZW5lcmF0ZWQgZmlsZSBhbmQgaXMgbm90IEVTIG1vZHVsZS4gVHlwZVNjcmlwdCBkb24ndCB3b3JrIHdpdGggVU1ELlxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IFByZWNvbXBpbGVkR2xvYmFsaXplIGZyb20gJy4uL2V4dGVybmFsL1ByZWNvbXBpbGVkR2xvYmFsaXplLmNqcyc7XG5cbi8vIExpc3Qgb2YgUmVkdXggYWN0aW9ucyBmYWN0b3J5IHdlIGFyZSBob2lzdGluZyBhcyBXZWIgQ2hhdCBmdW5jdGlvbnNcbmNvbnN0IERJU1BBVENIRVJTID0ge1xuICBjbGVhclN1Z2dlc3RlZEFjdGlvbnMsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kQm94QXR0YWNobWVudHMsXG4gIHNldFNlbmRUaW1lb3V0LFxuICBzdGFydERpY3RhdGUsXG4gIHN0YXJ0U3BlYWtpbmdBY3Rpdml0eSxcbiAgc3RvcERpY3RhdGUsXG4gIHN0b3BTcGVha2luZ0FjdGl2aXR5LFxuICBzdWJtaXRTZW5kQm94XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDYXJkQWN0aW9uQ29udGV4dCh7XG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlLFxuICBkaXJlY3RMaW5lLFxuICBkaXNwYXRjaCxcbiAgbWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICBwb255ZmlsbFxufToge1xuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogcmVhZG9ubHkgQ2FyZEFjdGlvbk1pZGRsZXdhcmVbXTtcbiAgZGlyZWN0TGluZTogRGlyZWN0TGluZUpTQm90Q29ubmVjdGlvbjtcbiAgZGlzcGF0Y2g6IEZ1bmN0aW9uO1xuICBtYXJrQWxsQXNBY2tub3dsZWRnZWQ6ICgpID0+IHZvaWQ7XG4gIHBvbnlmaWxsOiBHbG9iYWxTY29wZVBvbnlmaWxsO1xufSkge1xuICBjb25zdCBydW5NaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgICdjYXJkIGFjdGlvbicsXG4gICAgLi4uY2FyZEFjdGlvbk1pZGRsZXdhcmUsXG4gICAgY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlKClcbiAgKSh7IGRpc3BhdGNoIH0pO1xuXG4gIHJldHVybiB7XG4gICAgb25DYXJkQWN0aW9uOiAoY2FyZEFjdGlvbiwgeyB0YXJnZXQgfTogeyB0YXJnZXQ/OiBhbnkgfSA9IHt9KSA9PiB7XG4gICAgICBtYXJrQWxsQXNBY2tub3dsZWRnZWQoKTtcblxuICAgICAgcmV0dXJuIHJ1bk1pZGRsZXdhcmUoe1xuICAgICAgICBjYXJkQWN0aW9uLFxuICAgICAgICBnZXRTaWduSW5Vcmw6XG4gICAgICAgICAgY2FyZEFjdGlvbi50eXBlID09PSAnc2lnbmluJ1xuICAgICAgICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gY2FyZEFjdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RMaW5lLmdldFNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgKiBAdG9kbyBUT0RPOiBbUDNdIFdlIHNob3VsZCBjaGFuZ2UgdGhpcyBvbmUgdG8gYXN5bmMvYXdhaXQuXG4gICAgICAgICAgICAgICAgICAgKiAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBpbiB0aGlzIHByb2plY3QgdG8gdXNlIGFzeW5jLlxuICAgICAgICAgICAgICAgICAgICogICAgICAgVGh1cywgd2UgbmVlZCB0byBhZGQgQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcnVudGltZSBhbmQgQGJhYmVsL3J1bnRpbWUuXG4gICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVG9Qcm9taXNlKGRpcmVjdExpbmUuZ2V0U2Vzc2lvbklkKCksIHBvbnlmaWxsKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQgPT4gYCR7dmFsdWV9JHtlbmNvZGVVUklDb21wb25lbnQoYCZjb2RlX2NoYWxsZW5nZT0ke3Nlc3Npb25JZH1gKX1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IE9BdXRoIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBEaXJlY3QgTGluZSBhZGFwdGVyLicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0KHtcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSxcbiAgZ3JvdXBUaW1lc3RhbXAsXG4gIHBvbnlmaWxsXG59OiB7XG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU6IHJlYWRvbmx5IEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmVbXTtcbiAgZ3JvdXBUaW1lc3RhbXA6IGJvb2xlYW4gfCBudW1iZXI7XG4gIHBvbnlmaWxsOiBHbG9iYWxTY29wZVBvbnlmaWxsO1xufSkge1xuICBjb25zdCBydW5NaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgICdncm91cCBhY3Rpdml0aWVzJyxcbiAgICAuLi5ncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLFxuICAgIGNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlKHsgZ3JvdXBUaW1lc3RhbXAsIHBvbnlmaWxsIH0pXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBncm91cEFjdGl2aXRpZXM6IHJ1bk1pZGRsZXdhcmUoe30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlU3RyaW5nc092ZXJyaWRlcyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSwgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gIGlmICghb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gICAgcmV0dXJuIGxvY2FsaXplZFN0cmluZ3M7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZCA9IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSk7XG5cbiAgICBpZiAoIWlzT2JqZWN0KG1lcmdlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGlmICghaXNPYmplY3Qob3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBtdXN0IGJlIGVpdGhlciBhIGZ1bmN0aW9uLCBhbiBvYmplY3QsIG9yIGZhbHN5LicpO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4ubG9jYWxpemVkU3RyaW5ncywgLi4ub3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIH07XG59XG5cbi8vIEl0IHNlZW1zIFwicmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzXCIgZGlkIG5vdCBwaWNrIHVwIGBDb21wb3NlckNvcmUuZGVmYXVsdFByb3BzYC5cbi8vIEFuZCBpdCBmYWxzZWx5IGNvbXBsYWludCBgb3B0aW9uYWw/OiBzdHJpbmdgIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYENvbXBvc2VyQ29yZS5kZWZhdWx0UHJvcHMub3B0aW9uYWwgPSB1bmRlZmluZWRgLCBldmVuIHdlIGFscmVhZHkgc2V0IGl0IGJlbG93LlxuLy8gU2luY2Ugd2Ugc2V0IGJvdGggVHlwZVNjcmlwdCBgUHJvcHNgIGNsYXNzIGFuZCBgQ29tcG9zZXJDb3JlLnByb3BUeXBlc2AsIHRoaXMgY2hlY2sgd2lsbCBiZSBkb25lIHRoZXJlIGFzIHdlbGwuXG4vLyBJZ25vcmluZyBpdCBpbiBUeXBlU2NyaXB0IHZlcnNpb24gc2hvdWxkIGJlIHNhZmUsIGFzIHdlIGhhdmUgYHByb3BUeXBlc2AgdmVyc2lvbiB0byBwcm90ZWN0IHVzLlxuXG50eXBlIENvbXBvc2VyQ29yZVByb3BzID0gUmVhZG9ubHk8e1xuICBhY3Rpdml0eU1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QWN0aXZpdHlNaWRkbGV3YXJlPjtcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlPzogT25lT3JNYW55PEFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZT47XG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlPzogT25lT3JNYW55PEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlPjtcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXR0YWNobWVudE1pZGRsZXdhcmU+O1xuICBhdmF0YXJNaWRkbGV3YXJlPzogT25lT3JNYW55PEF2YXRhck1pZGRsZXdhcmU+O1xuICBjYXJkQWN0aW9uTWlkZGxld2FyZT86IE9uZU9yTWFueTxDYXJkQWN0aW9uTWlkZGxld2FyZT47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgKChjb250ZXh0OiBDb250ZXh0T2Y8dHlwZW9mIFdlYkNoYXRBUElDb250ZXh0PikgPT4gUmVhY3ROb2RlKTtcbiAgZGlyPzogc3RyaW5nO1xuICBkaXJlY3RMaW5lOiBEaXJlY3RMaW5lSlNCb3RDb25uZWN0aW9uO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMPzogKFxuICAgIGJsb2I6IEJsb2IsXG4gICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcXVhbGl0eTogbnVtYmVyXG4gICkgPT4gUHJvbWlzZTxVUkw+O1xuICBncmFtbWFycz86IGFueTtcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZT86IE9uZU9yTWFueTxHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlPjtcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzPzogUmVhY3QuQ29tcG9uZW50IHwgRnVuY3Rpb247XG4gIGxvY2FsZT86IHN0cmluZztcbiAgb25UZWxlbWV0cnk/OiAoZXZlbnQ6IFRlbGVtZXRyeU1lYXN1cmVtZW50RXZlbnQpID0+IHZvaWQ7XG4gIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncz86IExvY2FsaXplZFN0cmluZ3MgfCAoKHN0cmluZ3M6IExvY2FsaXplZFN0cmluZ3MsIGxhbmd1YWdlOiBzdHJpbmcpID0+IExvY2FsaXplZFN0cmluZ3MpO1xuICByZW5kZXJNYXJrZG93bj86IChcbiAgICBtYXJrZG93bjogc3RyaW5nLFxuICAgIG5ld0xpbmVPcHRpb25zOiB7IG1hcmtkb3duUmVzcGVjdENSTEY6IGJvb2xlYW4gfSxcbiAgICBsaW5rT3B0aW9uczogeyBleHRlcm5hbExpbmtBbHQ6IHN0cmluZyB9XG4gICkgPT4gc3RyaW5nO1xuICBzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmU/OiBPbmVPck1hbnk8U2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlPjtcbiAgc2VsZWN0Vm9pY2U/OiAodm9pY2VzOiAodHlwZW9mIHdpbmRvdy5TcGVlY2hTeW50aGVzaXNWb2ljZSlbXSwgYWN0aXZpdHk6IFdlYkNoYXRBY3Rpdml0eSkgPT4gdm9pZDtcbiAgc2VuZEJveE1pZGRsZXdhcmU/OiByZWFkb25seSBTZW5kQm94TWlkZGxld2FyZVtdIHwgdW5kZWZpbmVkO1xuICBzZW5kQm94VG9vbGJhck1pZGRsZXdhcmU/OiByZWFkb25seSBTZW5kQm94VG9vbGJhck1pZGRsZXdhcmVbXSB8IHVuZGVmaW5lZDtcbiAgc2VuZFR5cGluZ0luZGljYXRvcj86IGJvb2xlYW47XG4gIHN0eWxlT3B0aW9ucz86IFN0eWxlT3B0aW9ucztcbiAgdG9hc3RNaWRkbGV3YXJlPzogT25lT3JNYW55PFRvYXN0TWlkZGxld2FyZT47XG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmU/OiBPbmVPck1hbnk8VHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZT47XG4gIHVzZXJJRD86IHN0cmluZztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59PjtcblxuY29uc3QgQ29tcG9zZXJDb3JlID0gKHtcbiAgYWN0aXZpdHlNaWRkbGV3YXJlLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlLFxuICBhdHRhY2htZW50TWlkZGxld2FyZSxcbiAgYXZhdGFyTWlkZGxld2FyZSxcbiAgY2FyZEFjdGlvbk1pZGRsZXdhcmUsXG4gIGNoaWxkcmVuLFxuICBkaXIsXG4gIGRpcmVjdExpbmUsXG4gIGRpc2FibGVkLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTCxcbiAgZ3JhbW1hcnMsXG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUsXG4gIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgbG9jYWxlLFxuICBvblRlbGVtZXRyeSxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzLFxuICByZW5kZXJNYXJrZG93bixcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlLFxuICBzZWxlY3RWb2ljZSxcbiAgc2VuZEJveE1pZGRsZXdhcmUsXG4gIHNlbmRCb3hUb29sYmFyTWlkZGxld2FyZSxcbiAgc2VuZFR5cGluZ0luZGljYXRvcixcbiAgc3R5bGVPcHRpb25zLFxuICB0b2FzdE1pZGRsZXdhcmUsXG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUsXG4gIHVzZXJJRCxcbiAgdXNlcm5hbWVcbn06IENvbXBvc2VyQ29yZVByb3BzKSA9PiB7XG4gIGNvbnN0IFtwb255ZmlsbF0gPSB1c2VQb255ZmlsbCgpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHRlbGVtZXRyeURpbWVuc2lvbnNSZWYgPSB1c2VSZWYoe30pO1xuXG4gIGNvbnN0IHBhdGNoZWREaXIgPSB1c2VNZW1vKCgpID0+IChkaXIgPT09ICdsdHInIHx8IGRpciA9PT0gJ3J0bCcgPyBkaXIgOiAnYXV0bycpLCBbZGlyXSk7XG4gIGNvbnN0IHBhdGNoZWRHcmFtbWFycyA9IHVzZU1lbW8oKCkgPT4gZ3JhbW1hcnMgfHwgW10sIFtncmFtbWFyc10pO1xuICBjb25zdCBwYXRjaGVkU3R5bGVPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiBub3JtYWxpemVTdHlsZU9wdGlvbnMocGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzKHN0eWxlT3B0aW9ucykpLFxuICAgIFtzdHlsZU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRMYW5ndWFnZShsb2NhbGUpKTtcbiAgfSwgW2Rpc3BhdGNoLCBsb2NhbGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNlbmRUeXBpbmdJbmRpY2F0b3IoISFzZW5kVHlwaW5nSW5kaWNhdG9yKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2VuZFR5cGluZ0luZGljYXRvcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goXG4gICAgICBjcmVhdGVDb25uZWN0QWN0aW9uKHtcbiAgICAgICAgZGlyZWN0TGluZSxcbiAgICAgICAgdXNlcklELFxuICAgICAgICB1c2VybmFtZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogQHRvZG8gVE9ETzogW1AzXSBkaXNjb25uZWN0KCkgaXMgYW4gYXN5bmMgY2FsbCAocGVuZGluZyAtPiBmdWxmaWxsZWQpLCB3ZSBuZWVkIHRvIHdhaXQsIG9yIGNoYW5nZSBpdCB0byByZWNvbm5lY3QoKVxuICAgICAgICovXG4gICAgICBkaXNwYXRjaChkaXNjb25uZWN0KCkpO1xuICAgIH07XG4gIH0sIFtkaXNwYXRjaCwgZGlyZWN0TGluZSwgdXNlcklELCB1c2VybmFtZV0pO1xuXG4gIGNvbnN0IG1hcmtBbGxBc0Fja25vd2xlZGdlZCA9IHVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuXG4gIGNvbnN0IGNhcmRBY3Rpb25Db250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQoe1xuICAgICAgICBjYXJkQWN0aW9uTWlkZGxld2FyZTogT2JqZWN0LmZyZWV6ZShbLi4uc2luZ2xlVG9BcnJheShjYXJkQWN0aW9uTWlkZGxld2FyZSldKSxcbiAgICAgICAgZGlyZWN0TGluZSxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCxcbiAgICAgICAgcG9ueWZpbGxcbiAgICAgIH0pLFxuICAgIFtjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2gsIG1hcmtBbGxBc0Fja25vd2xlZGdlZCwgcG9ueWZpbGxdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZFNlbGVjdFZvaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RWb2ljZSB8fCBkZWZhdWx0U2VsZWN0Vm9pY2UuYmluZChudWxsLCB7IGxhbmd1YWdlOiBsb2NhbGUgfSksXG4gICAgW2xvY2FsZSwgc2VsZWN0Vm9pY2VdXG4gICk7XG5cbiAgY29uc3QgZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQoe1xuICAgICAgICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlOiBPYmplY3QuZnJlZXplKFsuLi5zaW5nbGVUb0FycmF5KGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUpXSksXG4gICAgICAgIGdyb3VwVGltZXN0YW1wOiBwYXRjaGVkU3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wLFxuICAgICAgICBwb255ZmlsbFxuICAgICAgfSksXG4gICAgW2dyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUsIHBhdGNoZWRTdHlsZU9wdGlvbnMuZ3JvdXBUaW1lc3RhbXAsIHBvbnlmaWxsXVxuICApO1xuXG4gIGNvbnN0IGhvaXN0ZWREaXNwYXRjaGVycyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIG1hcE1hcChcbiAgICAgICAgRElTUEFUQ0hFUlMsXG4gICAgICAgIGRpc3BhdGNoZXIgPT5cbiAgICAgICAgICAoLi4uYXJncykgPT5cbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXIoLi4uYXJncykpXG4gICAgICApLFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbWVyZ2VTdHJpbmdzT3ZlcnJpZGVzKGdldEFsbExvY2FsaXplZFN0cmluZ3MoKVtub3JtYWxpemVMYW5ndWFnZShsb2NhbGUpXSwgbG9jYWxlLCBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MpLFxuICAgIFtsb2NhbGUsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nc11cbiAgKTtcblxuICBjb25zdCBsb2NhbGl6ZWRHbG9iYWxpemUgPSB1c2VNZW1vPFByZWNvbXBpbGVkR2xvYmFsaXplVHlwZT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgR0xPQkFMSVpFLCBHTE9CQUxJWkVfTEFOR1VBR0UgfSA9IHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzIHx8IHt9O1xuXG4gICAgcmV0dXJuIEdMT0JBTElaRSB8fCAoR0xPQkFMSVpFX0xBTkdVQUdFICYmIFByZWNvbXBpbGVkR2xvYmFsaXplKEdMT0JBTElaRV9MQU5HVUFHRSkpIHx8IFByZWNvbXBpbGVkR2xvYmFsaXplKCdlbicpO1xuICB9LCBbcGF0Y2hlZExvY2FsaXplZFN0cmluZ3NdKTtcblxuICBjb25zdCB0cmFja0RpbWVuc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdib3RmcmFtZXdvcmstd2ViY2hhdDogVGVsZW1ldHJ5IGRpbWVuc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTtcblxuICAgICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUZWxlbWV0cnkgZGltZW5zaW9uIGRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIHRlbGVtZXRyeURpbWVuc2lvbnNSZWYuY3VycmVudCA9IHVwZGF0ZUluKFxuICAgICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLmN1cnJlbnQsXG4gICAgICAgIFtuYW1lXSxcbiAgICAgICAgdHlwZSA9PT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogKCkgPT4gZGF0YVxuICAgICAgKTtcbiAgICB9LFxuICAgIFt0ZWxlbWV0cnlEaW1lbnNpb25zUmVmXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhY3Rpdml0eScsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGFjdGl2aXR5TWlkZGxld2FyZSksXG4gICAgICAgICgpID0+XG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAoeyBhY3Rpdml0eSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW5kZXJlciBmb3IgYWN0aXZpdHkgb2YgdHlwZSBcIiR7YWN0aXZpdHkudHlwZX1cImApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhY3Rpdml0eSB0byByZW5kZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICApKHt9KSxcbiAgICBbYWN0aXZpdHlNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyID0gdXNlTWVtbzxSZW5kZXJBY3Rpdml0eVN0YXR1cz4oXG4gICAgKCkgPT5cbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYWN0aXZpdHkgc3RhdHVzJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pLFxuICAgIFthY3Rpdml0eVN0YXR1c01pZGRsZXdhcmVdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlciA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYXR0YWNobWVudCBmb3Igc2NyZWVuIHJlYWRlcicsXG4gICAgICAgIHsgc3RyaWN0OiB0cnVlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgKHsgYXR0YWNobWVudCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIHJlbmRlcmVyIGZvciBhdHRhY2htZW50IGZvciBzY3JlZW4gcmVhZGVyIG9mIHR5cGUgXCIke2F0dGFjaG1lbnQuY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogQHRvZG8gVE9ETzogW1A0XSBNaWdodCBiZSBhYmxlIHRvIHRocm93IHdpdGhvdXQgcmV0dXJuaW5nIGEgZnVuY3Rpb24gLS0gaW52ZXN0aWdhdGUgYW5kIHBvc3NpYmx5IGZpeFxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdHRhY2htZW50IHRvIHJlbmRlcicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICApKHt9KSxcbiAgICBbYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmVdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZEF0dGFjaG1lbnRSZW5kZXJlciA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyKFxuICAgICAgICAnYXR0YWNobWVudCcsXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYXR0YWNobWVudE1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgKHsgYXR0YWNobWVudCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBhdHRhY2htZW50IG9mIHR5cGUgXCIke2F0dGFjaG1lbnQuY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXR0YWNobWVudCB0byByZW5kZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICApKHt9KSxcbiAgICBbYXR0YWNobWVudE1pZGRsZXdhcmVdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZEF2YXRhclJlbmRlcmVyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhdmF0YXInLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhdmF0YXJNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pLFxuICAgIFthdmF0YXJNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRUb2FzdFJlbmRlcmVyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICd0b2FzdCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHRvYXN0TWlkZGxld2FyZSksXG4gICAgICAgICgpID0+XG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAoeyBub3RpZmljYXRpb24gfSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBub3RpZmljYXRpb24gb2YgdHlwZSBcIiR7bm90aWZpY2F0aW9uLmNvbnRlbnRUeXBlfVwiYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vdGlmaWNhdGlvbiB0byByZW5kZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICApKHt9KSxcbiAgICBbdG9hc3RNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRUeXBpbmdJbmRpY2F0b3JSZW5kZXJlciA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAndHlwaW5nIGluZGljYXRvcicsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoKSA9PiBmYWxzZVxuICAgICAgKSh7fSksXG4gICAgW3R5cGluZ0luZGljYXRvck1pZGRsZXdhcmVdXG4gICk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcjogU2Nyb2xsVG9FbmRCdXR0b25Db21wb25lbnRGYWN0b3J5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdzY3JvbGwgdG8gZW5kIGJ1dHRvbicsXG4gICAgICAgIHsgc3RyaWN0OiB0cnVlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoKSBhcyBhbnksXG4gICAgW3Njcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZV1cbiAgKTtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhlYXZ5IGZ1bmN0aW9uLCBhbmQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIG5lZWQgdG8gcmVjcmVhdGUgYnVzaW5lc3MgbG9naWMsIGUuZy5cbiAgICogLSBVc2VyIElEIGNoYW5nZWQsIGNhdXNpbmcgYWxsIHNlbmQqIGZ1bmN0aW9ucyB0byBiZSB1cGRhdGVkXG4gICAqIC0gc2VuZFxuICAgKiBAdG9kbyBUT0RPOiBbUDNdIFdlIHNob3VsZCB0aGluayBhYm91dCBpZiB3ZSBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2Ugb25TZW5kQm94VmFsdWVDaGFuZ2VkL3NlbmRCb3hWYWx1ZSwgZS5nLlxuICAgKiAxLiBUdXJucyB0ZXh0IGludG8gVVBQRVJDQVNFXG4gICAqIDIuIEZpbHRlciBvdXQgcHJvZmFuaXR5XG4gICAqIEB0b2RvIFRPRE86IFtQNF0gUmV2aXNpdCBhbGwgbWVtYmVycyBvZiBjb250ZXh0XG4gICAqICAgICAgIFRoaXMgY29udGV4dCBzaG91bGQgY29uc2lzdCBvZiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgUmVkdXggc3RvcmVcbiAgICogICAgICAgaS5lLiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG90aGVyIHR5cGVzIG9mIFVJc1xuICAgKi9cbiAgY29uc3QgY29udGV4dCA9IHVzZU1lbW88Q29udGV4dE9mPHR5cGVvZiBXZWJDaGF0QVBJQ29udGV4dD4+KFxuICAgICgpID0+ICh7XG4gICAgICAuLi5jYXJkQWN0aW9uQ29udGV4dCxcbiAgICAgIC4uLmdyb3VwQWN0aXZpdGllc0NvbnRleHQsXG4gICAgICAuLi5ob2lzdGVkRGlzcGF0Y2hlcnMsXG4gICAgICBhY3Rpdml0eVJlbmRlcmVyOiBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXI6IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudFJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyLFxuICAgICAgYXZhdGFyUmVuZGVyZXI6IHBhdGNoZWRBdmF0YXJSZW5kZXJlcixcbiAgICAgIGRpcjogcGF0Y2hlZERpcixcbiAgICAgIGRpcmVjdExpbmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICAgICAgZ3JhbW1hcnM6IHBhdGNoZWRHcmFtbWFycyxcbiAgICAgIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgICAgIGxhbmd1YWdlOiBsb2NhbGUsXG4gICAgICBsb2NhbGl6ZWRHbG9iYWxpemVTdGF0ZTogW2xvY2FsaXplZEdsb2JhbGl6ZV0sXG4gICAgICBsb2NhbGl6ZWRTdHJpbmdzOiBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyxcbiAgICAgIG9uVGVsZW1ldHJ5LFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2VsZWN0Vm9pY2U6IHBhdGNoZWRTZWxlY3RWb2ljZSxcbiAgICAgIHNlbmRUeXBpbmdJbmRpY2F0b3IsXG4gICAgICBzdHlsZU9wdGlvbnM6IHBhdGNoZWRTdHlsZU9wdGlvbnMsXG4gICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLFxuICAgICAgdG9hc3RSZW5kZXJlcjogcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICB0cmFja0RpbWVuc2lvbixcbiAgICAgIHR5cGluZ0luZGljYXRvclJlbmRlcmVyOiBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICB1c2VySUQsXG4gICAgICB1c2VybmFtZVxuICAgIH0pLFxuICAgIFtcbiAgICAgIGNhcmRBY3Rpb25Db250ZXh0LFxuICAgICAgZGlyZWN0TGluZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwsXG4gICAgICBncm91cEFjdGl2aXRpZXNDb250ZXh0LFxuICAgICAgaG9pc3RlZERpc3BhdGNoZXJzLFxuICAgICAgaW50ZXJuYWxFcnJvckJveENsYXNzLFxuICAgICAgbG9jYWxlLFxuICAgICAgbG9jYWxpemVkR2xvYmFsaXplLFxuICAgICAgb25UZWxlbWV0cnksXG4gICAgICBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgcGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQXZhdGFyUmVuZGVyZXIsXG4gICAgICBwYXRjaGVkRGlyLFxuICAgICAgcGF0Y2hlZEdyYW1tYXJzLFxuICAgICAgcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MsXG4gICAgICBwYXRjaGVkU2VsZWN0Vm9pY2UsXG4gICAgICBwYXRjaGVkU3R5bGVPcHRpb25zLFxuICAgICAgcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICByZW5kZXJNYXJrZG93bixcbiAgICAgIHNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRyYWNrRGltZW5zaW9uLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2ViQ2hhdEFQSUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAgPEFjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyPlxuICAgICAgICA8U2VuZEJveE1pZGRsZXdhcmVQcm92aWRlciBtaWRkbGV3YXJlPXtzZW5kQm94TWlkZGxld2FyZSB8fCBPYmplY3QuZnJlZXplKFtdKX0+XG4gICAgICAgICAgPFNlbmRCb3hUb29sYmFyTWlkZGxld2FyZVByb3ZpZGVyIG1pZGRsZXdhcmU9e3NlbmRCb3hUb29sYmFyTWlkZGxld2FyZSB8fCBPYmplY3QuZnJlZXplKFtdKX0+XG4gICAgICAgICAgICB7dHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oY29udGV4dCkgOiBjaGlsZHJlbn1cbiAgICAgICAgICAgIDxBY3Rpdml0eVNlbmRTdGF0dXNUZWxlbWV0cnlDb21wb3NlciAvPlxuICAgICAgICAgIDwvU2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlUHJvdmlkZXI+XG4gICAgICAgIDwvU2VuZEJveE1pZGRsZXdhcmVQcm92aWRlcj5cbiAgICAgIDwvQWN0aXZpdHlTZW5kU3RhdHVzQ29tcG9zZXI+XG4gICAgICB7b25UZWxlbWV0cnkgJiYgPFRyYWNrZXIgLz59XG4gICAgPC9XZWJDaGF0QVBJQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbi8qKlxuICogQHRvZG8gVE9ETzogW1AzXSBXZSBzaG91bGQgY29uc2lkZXIgbW92aW5nIHNvbWUgZGF0YSBmcm9tIFJlZHV4IHN0b3JlIHRvIHByb3BzXG4gKiAgICAgICBBbHRob3VnaCB3ZSB1c2UgYGNvbm5lY3RUb1dlYkNoYXRgIHRvIGhpZGUgdGhlIGRldGFpbHMgb2YgYWNjZXNzb3Igb2YgUmVkdXggc3RvcmUsXG4gKiAgICAgICB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlIHJlc3BvbnNpYmlsaXR5IGJldHdlZW4gQ29udGV4dCBhbmQgUmVkdXggc3RvcmVcbiAqICAgICAgIFdlIHNob3VsZCBkZWNpZGUgd2hpY2ggZGF0YSBpcyBuZWVkZWQgZm9yIFJlYWN0IGJ1dCBub3QgaW4gb3RoZXIgZW52aXJvbm1lbnQgc3VjaCBhcyBDTEkvVlNDb2RlXG4gKi9cbkNvbXBvc2VyQ29yZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXZhdGFyTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBkaXI6ICdhdXRvJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogdW5kZWZpbmVkLFxuICBncmFtbWFyczogW10sXG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzOiB1bmRlZmluZWQsXG4gIGxvY2FsZTogd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSB8fCAnZW4tVVMnLFxuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3M6IHVuZGVmaW5lZCxcbiAgcmVuZGVyTWFya2Rvd246IHVuZGVmaW5lZCxcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIHNlbGVjdFZvaWNlOiB1bmRlZmluZWQsXG4gIHNlbmRUeXBpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICBzdHlsZU9wdGlvbnM6IHt9LFxuICB0b2FzdE1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICB1c2VySUQ6ICcnLFxuICB1c2VybmFtZTogJydcbn07XG5cbkNvbXBvc2VyQ29yZS5wcm9wVHlwZXMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXZhdGFyTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgZGlyOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ2x0cicsICdydGwnXSksXG4gIC8vIFByb3BUeXBlcy5zaGFwZSh7IC4uLiB9KSBkaWQgbm90IGhvbm9yIGlzUmVxdWlyZWQgZm9yIGl0cyBtZW1iZXJzLlxuICAvLyBAdHMtaWdub3JlXG4gIGRpcmVjdExpbmU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWN0aXZpdHkkOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgZW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZXRTZXNzaW9uSWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBvc3RBY3Rpdml0eTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZlcmVuY2VHcmFtbWFySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG9rZW46IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogUHJvcFR5cGVzLmZ1bmMsXG4gIGdyYW1tYXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M6IFByb3BUeXBlcy5mdW5jLCAvLyBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gV2UgZG9uJ3QgYWxsb3cgY3VzdG9taXphdGlvbiBvZiBlcnJvciBib3guXG4gIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25UZWxlbWV0cnk6IFByb3BUeXBlcy5mdW5jLFxuICBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnksIFByb3BUeXBlcy5mdW5jXSksXG4gIHJlbmRlck1hcmtkb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIHNlbGVjdFZvaWNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VuZFR5cGluZ0luZGljYXRvcjogUHJvcFR5cGVzLmJvb2wsXG4gIHN0eWxlT3B0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgdG9hc3RNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgdXNlcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1c2VybmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBDb21wb3NlcldpdGhTdG9yZVByb3BzID0gQ29tcG9zZXJDb3JlUHJvcHMgJlxuICBSZWFkb25seTx7XG4gICAgc3RvcmU/OiBhbnk7XG4gIH0+O1xuXG50eXBlIENvbXBvc2VyUHJvcHMgPSBDb21wb3NlcldpdGhTdG9yZVByb3BzICYge1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94PzogYW55O1xuXG4gIC8qKlxuICAgKiBQb255ZmlsbCB0byBvdmVycmlkZXMgc3BlY2lmaWMgZ2xvYmFsIHNjb3BlIG1lbWJlcnMuIFRoaXMgcHJvcCBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciBpbml0aWFsIHJlbmRlci5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgZm9yIGRldmVsb3BtZW50IHVzZSBvbmx5LiBOb3QgYWxsIGZlYXR1cmVzIGluIFdlYiBDaGF0IGFyZSBwb255ZmlsbGVkLlxuICAgKlxuICAgKiBUbyBmYWtlIHRpbWVycywgYHNldFRpbWVvdXRgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIG92ZXJyaWRlcyB0aGUgb3JpZ2luYWwgZ2xvYmFsIHNjb3BlIG1lbWJlcnMuXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgWyM0NjYyXShodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L0JvdEZyYW1ld29yay1XZWJDaGF0L3B1bGwvNDY2MikgZm9yIGRldGFpbHMuXG4gICAqL1xuICBwb255ZmlsbD86IFBhcnRpYWw8R2xvYmFsU2NvcGVQb255ZmlsbD47XG59O1xuXG4vLyBXZSB3aWxsIGNyZWF0ZSBhIFJlZHV4IHN0b3JlIGlmIGl0IHdhcyBub3QgcGFzc2VkIGluXG5jb25zdCBDb21wb3NlcldpdGhTdG9yZSA9ICh7IG9uVGVsZW1ldHJ5LCBzdG9yZSwgLi4ucHJvcHMgfTogQ29tcG9zZXJXaXRoU3RvcmVQcm9wcykgPT4ge1xuICBjb25zdCBbcG9ueWZpbGxdID0gdXNlUG9ueWZpbGwoKTtcblxuICBjb25zdCBtZW1vaXplZFN0b3JlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbmV4dFN0b3JlID0gc3RvcmUgfHwgY3JlYXRlU3RvcmVXaXRoT3B0aW9ucyh7IHBvbnlmaWxsIH0pO1xuXG4gICAgY29uc3Qgc3RvcmVQb255ZmlsbCA9IG5leHRTdG9yZS5nZXRTdGF0ZSgpLmludGVybmFsPy5wb255ZmlsbCB8fCB7fTtcblxuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhzdG9yZVBvbnlmaWxsKSwgLi4uT2JqZWN0LmtleXMocG9ueWZpbGwpXSk7XG5cbiAgICAvLyBGaWx0ZXIgb3V0IGZvcmJpZGRlbiBwcm9wZXJ0aWVzLlxuICAgIGtleXMuZGVsZXRlKCdwcm90b3R5cGUnKTtcblxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBuYXRpdmVGdW5jdGlvbiA9IChmbjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik6IGJvb2xlYW4gPT5cbiAgICAgIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiAoJycgKyBmbikuZW5kc1dpdGgoJygpIHsgW25hdGl2ZSBjb2RlXSB9Jyk7XG5cbiAgICBjb25zdCBwb255ZmlsbEZ1bmN0aW9uRXF1YWxzID0gKHg6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24sIHk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pID0+XG4gICAgICAobmF0aXZlRnVuY3Rpb24oeCkgJiYgbmF0aXZlRnVuY3Rpb24oeSkpIHx8IHggPT09IHk7XG5cbiAgICAvLyBXZSBoYXZlIGZpbHRlcmVkIG91dCBhbGwgZm9yYmlkZGVuIHByb3BlcnRpZXMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IEFycmF5LmZyb20oa2V5cykuZmlsdGVyKGtleSA9PiAhcG9ueWZpbGxGdW5jdGlvbkVxdWFscyhzdG9yZVBvbnlmaWxsW2tleV0sIHBvbnlmaWxsW2tleV0pKTtcblxuICAgIGlmIChkaWZmZXJlbnRLZXlzLmxlbmd0aCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IFBvbnlmaWxsIHVzZWQgaW4gc3RvcmUgc2hvdWxkIG1hdGNoIHRoZSBwb255ZmlsbCBwYXNzZWQgaW4gcHJvcHM6ICR7ZGlmZmVyZW50S2V5cy5qb2luKFxuICAgICAgICAgICcsICdcbiAgICAgICAgKX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0U3RvcmU7XG4gIH0sIFtwb255ZmlsbCwgc3RvcmVdKTtcblxuICByZXR1cm4gKFxuICAgIDxQcm92aWRlciBjb250ZXh0PXtXZWJDaGF0UmVkdXhDb250ZXh0fSBzdG9yZT17bWVtb2l6ZWRTdG9yZX0+XG4gICAgICA8QWN0aXZpdHlLZXllckNvbXBvc2VyPlxuICAgICAgICA8QWN0aXZpdHlBY2tub3dsZWRnZW1lbnRDb21wb3Nlcj5cbiAgICAgICAgICA8Q29tcG9zZXJDb3JlIG9uVGVsZW1ldHJ5PXtvblRlbGVtZXRyeX0gey4uLnByb3BzfSAvPlxuICAgICAgICA8L0FjdGl2aXR5QWNrbm93bGVkZ2VtZW50Q29tcG9zZXI+XG4gICAgICA8L0FjdGl2aXR5S2V5ZXJDb21wb3Nlcj5cbiAgICA8L1Byb3ZpZGVyPlxuICApO1xufTtcblxuQ29tcG9zZXJXaXRoU3RvcmUuZGVmYXVsdFByb3BzID0ge1xuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBzdG9yZTogdW5kZWZpbmVkXG59O1xuXG5Db21wb3NlcldpdGhTdG9yZS5wcm9wVHlwZXMgPSB7XG4gIG9uVGVsZW1ldHJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RvcmU6IFByb3BUeXBlcy5hbnlcbn07XG5cbmNvbnN0IENvbXBvc2VyID0gKHsgaW50ZXJuYWxSZW5kZXJFcnJvckJveCwgb25UZWxlbWV0cnksIHBvbnlmaWxsLCAuLi5wcm9wcyB9OiBDb21wb3NlclByb3BzKSA9PiB7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBVbmNhdWdodCBleGNlcHRpb24nLCB7IGVycm9yIH0pO1xuXG4gICAgICBvblRlbGVtZXRyeSAmJlxuICAgICAgICBvblRlbGVtZXRyeShjcmVhdGVDdXN0b21FdmVudCgnZXhjZXB0aW9uJywgeyBlcnJvciwgZmF0YWw6IHRydWUgfSkgYXMgVGVsZW1ldHJ5RXhjZXB0aW9uTWVhc3VyZW1lbnRFdmVudCk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgICBbb25UZWxlbWV0cnksIHNldEVycm9yXVxuICApO1xuXG4gIHJldHVybiBlcnJvciA/IChcbiAgICAhIWludGVybmFsUmVuZGVyRXJyb3JCb3ggJiYgaW50ZXJuYWxSZW5kZXJFcnJvckJveCh7IGVycm9yLCB0eXBlOiAndW5jYXVnaHQgZXhjZXB0aW9uJyB9KVxuICApIDogKFxuICAgIDxFcnJvckJvdW5kYXJ5IG9uRXJyb3I9e2hhbmRsZUVycm9yfT5cbiAgICAgIDxQb255ZmlsbENvbXBvc2VyIHBvbnlmaWxsPXtwb255ZmlsbH0+XG4gICAgICAgIDxDb21wb3NlcldpdGhTdG9yZSBvblRlbGVtZXRyeT17b25UZWxlbWV0cnl9IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvUG9ueWZpbGxDb21wb3Nlcj5cbiAgICA8L0Vycm9yQm91bmRhcnk+XG4gICk7XG59O1xuXG5Db21wb3Nlci5kZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkNvbXBvc2VyV2l0aFN0b3JlLmRlZmF1bHRQcm9wcyxcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogdW5kZWZpbmVkLFxuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBwb255ZmlsbDogdW5kZWZpbmVkXG59O1xuXG5Db21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIC4uLkNvbXBvc2VyV2l0aFN0b3JlLnByb3BUeXBlcyxcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogUHJvcFR5cGVzLmFueSxcbiAgb25UZWxlbWV0cnk6IFByb3BUeXBlcy5mdW5jLFxuICBwb255ZmlsbDogUHJvcFR5cGVzLmFueVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zZXI7XG5cbmV4cG9ydCB0eXBlIHsgQ29tcG9zZXJQcm9wcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx3QkFBQSxHQUFBQyxPQUFBO0FBaUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGVBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFPLGFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLHVCQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUscUNBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLGdDQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBWSxzQkFBQSxHQUFBVixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFB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