@projectcor/maia-components 2.50.1-2 → 2.51.0

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 (429) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +1 -3
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +1 -3
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +14 -24
  6. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +10 -28
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +15 -19
  8. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -8
  9. package/lib/components/atoms/ClientSelector/ClientSelector.js +13 -15
  10. package/lib/components/atoms/Fade/Fade.js +6 -10
  11. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  12. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  13. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +2 -3
  14. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +2 -3
  15. package/lib/components/atoms/MAIAInput/MAIAInput.js +99 -123
  16. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +4 -9
  17. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +5 -4
  18. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +26 -28
  19. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +14 -15
  20. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  21. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
  22. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
  23. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
  24. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
  25. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
  26. package/lib/components/index.js +1 -2
  27. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +8 -6
  28. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +4 -6
  29. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +16 -25
  30. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  31. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +72 -93
  32. package/lib/components/molecules/ChatAIHome/styles.js +78 -85
  33. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +14 -30
  34. package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
  35. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +1 -8
  36. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -25
  37. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  38. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  39. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  40. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +367 -63
  41. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
  42. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +2 -5
  43. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  44. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  45. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +7 -11
  46. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +1 -4
  47. package/lib/constants/permissions/index.js +2 -2
  48. package/lib/constants/permissions/utils.js +1 -4
  49. package/lib/dev/DevReasoningTimeline.js +37 -68
  50. package/lib/dev/Providers.js +3 -5
  51. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -7
  52. package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
  53. package/lib/hooks/useChatManager/useChatManager.js +7 -8
  54. package/lib/hooks/useEntitySearch.js +1 -3
  55. package/lib/hooks/useFrequentlyUsedActions.js +22 -61
  56. package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
  57. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +15 -16
  58. package/lib/hooks/useProjectSummaryConfig.js +5 -10
  59. package/lib/index.js +2 -5
  60. package/lib/lang/br/index.js +2 -27
  61. package/lib/lang/en/index.js +2 -27
  62. package/lib/lang/es/index.js +2 -27
  63. package/lib/lang/fr/index.js +2 -27
  64. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  65. package/lib/services/maia/Agents/connectors.js +1 -3
  66. package/lib/store/sessions/sessionStreamManager.js +55 -51
  67. package/lib/store/useChatsStore.js +3 -4
  68. package/lib/styles/cascade.js +3 -29
  69. package/lib/styles/transitions.js +1 -3
  70. package/lib/types/global.d.js +1 -1
  71. package/lib/utils/hoursPlannerQuickActionType.js +1 -116
  72. package/lib/utils/imagePreprocessor.js +3 -14
  73. package/lib/utils/navigateContextEntity.js +2 -2
  74. package/lib/utils/openTaskInCorPanel.js +2 -2
  75. package/lib/utils/streamActivityMessages.helpers.js +4 -5
  76. package/lib/utils/streamActivityMessages.js +20 -32
  77. package/package.json +1 -1
  78. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  79. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  80. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  81. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +0 -63
  82. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -183
  83. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  84. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -139
  85. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -385
  86. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  87. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -94
  88. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -396
  89. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  90. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -526
  91. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -169
  92. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  93. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  94. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  95. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  96. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  97. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  98. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  99. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  100. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +0 -45
  101. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -133
  102. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +0 -107
  103. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  104. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  105. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -109
  106. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  107. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -92
  108. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -319
  109. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  110. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  111. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  112. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  113. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  114. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  115. package/lib/components/atoms/Fade/Fade.spec.js +0 -66
  116. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  117. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  118. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  119. package/lib/components/atoms/HelpButton.spec.js +0 -87
  120. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  121. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  122. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  123. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  124. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  125. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  126. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  127. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  128. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +0 -113
  129. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -381
  130. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -719
  131. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -92
  132. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -193
  133. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -32
  134. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  135. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  136. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  137. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  138. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  139. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  140. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  141. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  142. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  143. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  144. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -146
  145. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  146. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  147. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  148. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  149. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
  150. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
  151. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  152. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  153. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
  154. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  155. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  156. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  157. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
  158. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
  159. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  160. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  161. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  162. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +0 -71
  163. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -120
  164. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  165. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  166. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +0 -25
  167. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -126
  168. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  169. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  170. package/lib/components/atoms/WithAppCfg.spec.js +0 -82
  171. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  172. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -742
  173. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -107
  174. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -256
  175. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -175
  176. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -318
  177. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  178. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  179. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  180. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  181. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  182. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  183. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  184. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  185. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  186. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  187. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  188. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  189. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  190. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +0 -622
  191. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -264
  192. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  193. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  194. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -742
  195. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -541
  196. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  197. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -1394
  198. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -1401
  199. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  200. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  201. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  202. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -142
  203. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  204. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +0 -69
  205. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +0 -144
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +0 -95
  207. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +0 -174
  208. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +0 -99
  209. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +0 -65
  210. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  211. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  212. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  213. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  214. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  215. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +0 -93
  216. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -297
  217. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +0 -62
  218. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -221
  219. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  220. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
  221. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  222. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -104
  223. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  224. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  225. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  226. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  227. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  228. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  229. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  230. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +0 -119
  231. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -464
  232. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -1067
  233. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1236
  234. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  235. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +0 -77
  236. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -503
  237. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  238. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  239. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
  240. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  242. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -291
  243. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  244. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -284
  245. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -343
  246. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -197
  247. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
  248. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
  249. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  250. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  251. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  252. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  253. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  254. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  255. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  256. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  257. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  258. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  259. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  260. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  261. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  262. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  263. package/lib/constants/formatExtensions.spec.js +0 -15
  264. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  265. package/lib/constants/maiaFeatureAccess.spec.js +0 -30
  266. package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
  267. package/lib/constants/maiaTaskPanelAccess.spec.js +0 -41
  268. package/lib/constants/permissions/clientRoleAccess.spec.js +0 -65
  269. package/lib/constants/permissions/utils.spec.js +0 -128
  270. package/lib/constants/plannerSyncEvents.spec.js +0 -31
  271. package/lib/constants/taskUrls.spec.js +0 -9
  272. package/lib/dev/DevMaiaPage.js +0 -30
  273. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  274. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  275. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  276. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  277. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +0 -268
  278. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -314
  279. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  280. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -374
  281. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  282. package/lib/hooks/useCaretPosition.spec.js +0 -58
  283. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -2027
  284. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -2409
  285. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -491
  286. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -729
  287. package/lib/hooks/useChats/useChats.spec.js +0 -208
  288. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  289. package/lib/hooks/useClientSearch.spec.js +0 -86
  290. package/lib/hooks/useContextMentions.helpers.spec.js +0 -267
  291. package/lib/hooks/useContextMentions.spec.js +0 -338
  292. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -183
  293. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  294. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  295. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  296. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +0 -257
  297. package/lib/hooks/useDebounce.spec.js +0 -42
  298. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -723
  299. package/lib/hooks/useEntitySearch.spec.js +0 -718
  300. package/lib/hooks/useEvent.spec.js +0 -45
  301. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  302. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -293
  303. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  304. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  305. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  306. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  307. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  308. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  309. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  310. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  311. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  312. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -100
  313. package/lib/hooks/useMentionPopover.spec.js +0 -392
  314. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -176
  315. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  316. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  317. package/lib/hooks/useModal/useModal.spec.js +0 -73
  318. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +0 -138
  319. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -417
  320. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -89
  321. package/lib/hooks/useProjectSearch.spec.js +0 -91
  322. package/lib/hooks/useProjectSummary.spec.js +0 -193
  323. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -151
  324. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  325. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  326. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  327. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  328. package/lib/hooks/useRecentContexts.spec.js +0 -139
  329. package/lib/hooks/useResize.spec.js +0 -37
  330. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  331. package/lib/hooks/useSlashCommands.spec.js +0 -139
  332. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  333. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  334. package/lib/hooks/useStreamResponse.spec.js +0 -199
  335. package/lib/hooks/useT.spec.js +0 -20
  336. package/lib/hooks/useToggle.spec.js +0 -33
  337. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  338. package/lib/services/appcues.spec.js +0 -37
  339. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  340. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -121
  341. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  342. package/lib/services/maia/Agents/connectors.spec.js +0 -496
  343. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  344. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  345. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  346. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  347. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  348. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  349. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -325
  350. package/lib/services/maia/Agents/getAgents.spec.js +0 -1135
  351. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  352. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  353. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  354. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  355. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  356. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  357. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  358. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  359. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  360. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  361. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  362. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  363. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  364. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -225
  365. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  366. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  367. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  368. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  369. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  370. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  371. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  372. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  373. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  374. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  375. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  376. package/lib/services/maia/client.spec.js +0 -56
  377. package/lib/services/utils/fetchCOR.spec.js +0 -211
  378. package/lib/services/utils/getCookie.spec.js +0 -20
  379. package/lib/services/utils/mapChatMessages.helpers.spec.js +0 -336
  380. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  381. package/lib/store/chatsSidebarOptimistic.spec.js +0 -145
  382. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  383. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  384. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  385. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  386. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  387. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +0 -177
  388. package/lib/store/sessions/sessionStreamManager.spec.js +0 -939
  389. package/lib/store/sessions/sessions.types.spec.js +0 -16
  390. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  391. package/lib/store/useChatsStore.spec.js +0 -619
  392. package/lib/store/useFaqsStore.spec.js +0 -57
  393. package/lib/utils/actionCategoryMap.spec.js +0 -18
  394. package/lib/utils/agentDisplayName.spec.js +0 -48
  395. package/lib/utils/autoApproveStorage.spec.js +0 -25
  396. package/lib/utils/chatInputFiles.spec.js +0 -39
  397. package/lib/utils/contextMentionIcons.spec.js +0 -41
  398. package/lib/utils/contextMentionLabel.spec.js +0 -13
  399. package/lib/utils/contextMentionTriggers.spec.js +0 -44
  400. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  401. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  402. package/lib/utils/entityLinkRender.spec.js +0 -72
  403. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  404. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  405. package/lib/utils/formatUnreadCount.spec.js +0 -12
  406. package/lib/utils/getUnitFileSize.spec.js +0 -18
  407. package/lib/utils/hitlAnalytics.spec.js +0 -136
  408. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -124
  409. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  410. package/lib/utils/imagePreprocessor.spec.js +0 -112
  411. package/lib/utils/maiaPageRoute.js +0 -24
  412. package/lib/utils/maiaPageRoute.spec.js +0 -23
  413. package/lib/utils/mapBackendLang.spec.js +0 -19
  414. package/lib/utils/navigateContextEntity.spec.js +0 -50
  415. package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
  416. package/lib/utils/openTaskInCorPanel.spec.js +0 -43
  417. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  418. package/lib/utils/reasoningMappers.spec.js +0 -103
  419. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  420. package/lib/utils/renderContextMentions.helpers.spec.js +0 -87
  421. package/lib/utils/renderContextMentions.spec.js +0 -268
  422. package/lib/utils/retryCompletion.spec.js +0 -181
  423. package/lib/utils/skillContentSize.spec.js +0 -13
  424. package/lib/utils/slashCommandMarker.spec.js +0 -43
  425. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  426. package/lib/utils/sseStreamContent.spec.js +0 -31
  427. package/lib/utils/streamActivityMessages.helpers.spec.js +0 -84
  428. package/lib/utils/streamActivityMessages.spec.js +0 -336
  429. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -1,24 +1,35 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
5
  /* eslint-disable @typescript-eslint/indent */
5
- import { useCallback } from 'react';
6
+ /* eslint-disable no-nested-ternary */
7
+ import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
8
+ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
6
9
  import { Status } from '@projectcor/icons/lib/components/Status';
10
+ import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
7
11
  import { ChevronLeft } from '@projectcor/icons/lib/components/ChevronLeft';
12
+ import { Plus } from '@projectcor/icons/lib/components/Plus';
8
13
  import { useTranslation } from 'react-i18next';
9
14
  import { SECTIONS } from '../../../../../constants/config';
10
15
  import { useGlobalContext } from '../../../../../context/global-context';
16
+ import { useResizeListener } from '../../../../../hooks/useResize';
11
17
  import { IconButton } from '../../../../atoms/IconButton';
12
- import { SCCAIMHModal, SCCAIMHWrapperButton, SCCAIMHCreateAgentButton, SCCAIMHCreateAgentButtonText, SCCAIMHBackButton, SCCAIMHMinimizeIcon } from './ChatAiModalHeader.styles';
18
+ import { MAIAIcon, MaiaChatLayoutMenuIcon } from '../../../../atoms/icons';
19
+ import { MaiaChatLayoutSidebarIcon } from '../../../../atoms/icons/MaiaChatLayoutSidebarIcon';
20
+ import { MaiaChatLayoutFullscreenIcon } from '../../../../atoms/icons/MaiaChatLayoutFullscreenIcon';
21
+ import { MaiaChatLayoutFloatingIcon } from '../../../../atoms/icons/MaiaChatLayoutFloatingIcon';
22
+ import { ChatAIAgentOption } from '../ChatAiAgentOptions/ChatAiAgentOptions';
23
+ import { SCCAIMHModal, SCCAIMHSelectedAgent, SCCAIMHSelectedAgentText, SCCAIMHWrapper, SCCAIMHWrapperButton, SCCAIMHWrapperIcon, SCCAIMHWrapperModal, SCCAIMHWrapperModalContent, SCCAIMHWrapperModalContentTitle, SCCAIMHAddAgent, SCCAIMHCreateAgentButton, SCCAIMHCreateAgentButtonText, SCCAIMHDivider, SCCAIMHAgentsList, SCCAIMHLoaderWrapper, SCCAIMHPlusIconWrapper, SCCAIMHLayoutMenuAnchor, SCCAIMHLayoutMenuPanel, SCCAIMHLayoutMenuRow, SCCAIMHLayoutMenuRowIcon, SCCAIMHBackButton, SCCAIMHMinimizeIcon } from './ChatAiModalHeader.styles';
13
24
  import { EVENTS, useEvent } from '../../../../../hooks/useEvent';
14
25
  import { useUser } from '../../../../../context/cor-user';
26
+ import { isMaiaCloneAgentsRoleBlocked } from '../../../../../constants/maiaTaskPanelAccess';
27
+ import { Loader } from '../../../../atoms/Loader';
15
28
  import { useMaiaTaskPanelZIndex } from '../../../../../hooks/useMaiaTaskPanelZIndex';
16
- import { canUserCreateAgents, dispatchOpenCreateAgentModal, shouldShowAgentSelector } from './ChatAiModalHeader.utils';
17
- import { ChatAiModalHeaderAgentSelector } from './ChatAiModalHeaderAgentSelector';
18
- import { ChatAiModalHeaderLayoutMenu } from './ChatAiModalHeaderLayoutMenu';
29
+ import { canShowHeaderCreateAgentButton, filterAgentsForSelector, isMaiaOrchestratorAgent, resolveHeaderSelectorLabel, resolveLocalSelectedAgent, agentSelectionNeedsEntity, shouldRenderHeaderAgentSelector, shouldLoadMoreAgentsOnScroll, shouldRenderAgentDropdownItem, shouldShowDropdownAddAgentFooter } from './ChatAiModalHeader.helpers';
19
30
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
- var EMPTY_AGENTS = [];
21
31
  export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
32
+ var _user$permissions;
22
33
  var layoutMode = _ref.layoutMode,
23
34
  onLayoutModeChange = _ref.onLayoutModeChange,
24
35
  _ref$draggable = _ref.draggable,
@@ -28,7 +39,7 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
28
39
  onDragEnd = _ref.onDragEnd,
29
40
  handleMinimize = _ref.handleMinimize,
30
41
  _ref$agents = _ref.agents,
31
- agents = _ref$agents === void 0 ? EMPTY_AGENTS : _ref$agents,
42
+ agents = _ref$agents === void 0 ? [] : _ref$agents,
32
43
  _ref$hasError = _ref.hasError,
33
44
  hasError = _ref$hasError === void 0 ? false : _ref$hasError,
34
45
  _ref$loading = _ref.loading,
@@ -49,8 +60,6 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
49
60
  isMaiakerSection = _ref$isMaiakerSection === void 0 ? false : _ref$isMaiakerSection,
50
61
  _ref$hideAgentSelecto = _ref.hideAgentSelector,
51
62
  hideAgentSelector = _ref$hideAgentSelecto === void 0 ? false : _ref$hideAgentSelecto,
52
- _ref$hideControls = _ref.hideControls,
53
- hideControls = _ref$hideControls === void 0 ? false : _ref$hideControls,
54
63
  onAgentSelected = _ref.onAgentSelected,
55
64
  _ref$showBackButton = _ref.showBackButton,
56
65
  showBackButton = _ref$showBackButton === void 0 ? false : _ref$showBackButton,
@@ -63,90 +72,385 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
63
72
  var user = useUser();
64
73
  var amplitudEvent = useEvent();
65
74
  var _useGlobalContext = useGlobalContext(),
66
- selectedAgent = _useGlobalContext.agent;
75
+ selectedAgent = _useGlobalContext.agent,
76
+ selectAgent = _useGlobalContext.selectAgent,
77
+ setProject = _useGlobalContext.setProject,
78
+ setClient = _useGlobalContext.setClient,
79
+ setTask = _useGlobalContext.setTask,
80
+ section = _useGlobalContext.section;
67
81
  // En section 'task' el modal de Maia se eleva por encima del task panel (z-index 9800001).
68
82
  // Los tooltips se montan en portal con z-index 1500 por defecto, así que quedarían detrás.
69
83
  // Subimos su z-index sólo en este caso para que se vean por encima del modal.
70
84
  var tooltipZIndex = useMaiaTaskPanelZIndex(1500, 'overlay');
71
- var showHeaderCreateAgentButton = canUserCreateAgents(user) && (isMyAgentsSection || isMaiakerSection);
85
+ var _useState = useState(false),
86
+ _useState2 = _slicedToArray(_useState, 2),
87
+ isExpanded = _useState2[0],
88
+ setIsExpanded = _useState2[1];
89
+ var textRefAgent = useRef(null);
90
+ var dropdownRef = useRef(null);
91
+ var layoutMenuRef = useRef(null);
92
+ var _useState3 = useState(false),
93
+ _useState4 = _slicedToArray(_useState3, 2),
94
+ layoutMenuOpen = _useState4[0],
95
+ setLayoutMenuOpen = _useState4[1];
96
+ var _useResizeListener = useResizeListener(textRefAgent, [selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.name]),
97
+ showTooltipAgent = _useResizeListener.showTooltip;
98
+ var agentsRef = useRef(null);
99
+ var agentsForSelector = useMemo(function () {
100
+ return filterAgentsForSelector(agents);
101
+ }, [agents]);
102
+ var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
103
+ var showHeaderCreateAgentButton = canShowHeaderCreateAgentButton(userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.create, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS), isMyAgentsSection, isMaiakerSection);
72
104
  var handleOpenCreateAgentModal = useCallback(function () {
73
105
  amplitudEvent(EVENTS.openModal, {
74
106
  option: 'create_agent'
75
107
  });
76
- dispatchOpenCreateAgentModal();
108
+ document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
109
+ detail: {
110
+ agentValues: {
111
+ values: {
112
+ isEditing: false
113
+ },
114
+ isOpen: true
115
+ }
116
+ }
117
+ }));
77
118
  }, [amplitudEvent]);
78
- var shouldRenderSelector = shouldShowAgentSelector({
119
+
120
+ // Manejar scroll infinito para cargar más agents
121
+ useEffect(function () {
122
+ // Solo cuando el dropdown esté abierto
123
+ if (!isExpanded) {
124
+ return undefined;
125
+ }
126
+ var handleScroll = function handleScroll() {
127
+ if (!agentsRef.current || !loadMoreAgents || !hasMore || loadingMore) {
128
+ return;
129
+ }
130
+ var _agentsRef$current = agentsRef.current,
131
+ scrollTop = _agentsRef$current.scrollTop,
132
+ scrollHeight = _agentsRef$current.scrollHeight,
133
+ clientHeight = _agentsRef$current.clientHeight;
134
+ var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
135
+ if (shouldLoadMoreAgentsOnScroll(distanceFromBottom)) {
136
+ loadMoreAgents();
137
+ }
138
+ };
139
+
140
+ // delay para asegurar que el DOM esté renderizado
141
+ var timeoutId = setTimeout(function () {
142
+ var scrollElement = agentsRef.current;
143
+ if (scrollElement) {
144
+ scrollElement.addEventListener('scroll', handleScroll);
145
+ }
146
+ }, 100);
147
+ return function () {
148
+ clearTimeout(timeoutId);
149
+ var scrollElement = agentsRef.current;
150
+ if (scrollElement) {
151
+ scrollElement.removeEventListener('scroll', handleScroll);
152
+ }
153
+ };
154
+ }, [isExpanded, loadMoreAgents, hasMore, loadingMore]);
155
+ var localAgents = useMemo(function () {
156
+ return resolveLocalSelectedAgent(agents, selectedAgent);
157
+ }, [agents, selectedAgent]);
158
+
159
+ // En 'Mis agentes' / 'Skills' sin agente seteado, el selector muestra el icono de MAIA y el nombre de la sección
160
+ // en lugar del agente, para que el usuario pueda abrir el dropdown y elegir uno.
161
+ var selectorIcon = (localAgents === null || localAgents === void 0 ? void 0 : localAgents.type) === 'custom' && !(localAgents !== null && localAgents !== void 0 && localAgents.is_legacy_context) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {});
162
+ var selectorLabel = resolveHeaderSelectorLabel(localAgents, isMyAgentsSection, isMySkillsSection, t('marketplace.myAgentsTitle', {
163
+ ns: SECTIONS.chatAI
164
+ }), t('conversations.mySkillsNav', {
165
+ ns: SECTIONS.chatAI
166
+ }));
167
+ var handleSelectAgent = useCallback(function (agent) {
168
+ selectAgent(agent);
169
+ amplitudEvent(EVENTS.aiChatAgentSelect, {
170
+ agent_type: agent === null || agent === void 0 ? void 0 : agent.type
171
+ });
172
+ setIsExpanded(false);
173
+ setProject(null);
174
+ setClient === null || setClient === void 0 || setClient(null);
175
+ setTask(null);
176
+ setTimeout(function () {
177
+ handleResetChat();
178
+ // Si el agente no depende de una entity (custom o clone+global) ya podemos
179
+ // resolver si existe una sesión previa y, en ese caso, navegar a ella.
180
+ // Para clone+project|client, la resolución ocurre en los selectors de entity.
181
+ if (!agentSelectionNeedsEntity(agent)) {
182
+ onAgentSelected === null || onAgentSelected === void 0 || onAgentSelected(agent);
183
+ }
184
+ }, 100);
185
+ }, [selectAgent, amplitudEvent, handleResetChat, setProject, setClient, setTask, onAgentSelected]);
186
+ var handleExpandModal = function handleExpandModal() {
187
+ if (!isExpanded) {
188
+ amplitudEvent(EVENTS.aiChatOpenAgentSelect);
189
+ // Cuando se abre el selector, ordenar los agentes
190
+ if (sortAgentsList) {
191
+ sortAgentsList();
192
+ }
193
+ }
194
+ setIsExpanded(function (prev) {
195
+ return !prev;
196
+ });
197
+ };
198
+ useEffect(function () {
199
+ if (!isExpanded && !layoutMenuOpen) {
200
+ return undefined;
201
+ }
202
+ var handleClickOutside = function handleClickOutside(event) {
203
+ var target = event.target;
204
+ if (isExpanded && dropdownRef.current && !dropdownRef.current.contains(target)) {
205
+ setIsExpanded(false);
206
+ }
207
+ if (layoutMenuOpen && layoutMenuRef.current && !layoutMenuRef.current.contains(target)) {
208
+ setLayoutMenuOpen(false);
209
+ }
210
+ };
211
+ document.addEventListener('mousedown', handleClickOutside);
212
+ return function () {
213
+ document.removeEventListener('mousedown', handleClickOutside);
214
+ };
215
+ }, [isExpanded, layoutMenuOpen]);
216
+ var handlePickLayout = useCallback(function (mode) {
217
+ amplitudEvent(EVENTS.projectResumeExpand, {
218
+ expanded: mode === 'fullscreen'
219
+ });
220
+ amplitudEvent(EVENTS.aiChatSelectViewOptions, {
221
+ option: mode
222
+ });
223
+ onLayoutModeChange(mode);
224
+ setLayoutMenuOpen(false);
225
+ }, [amplitudEvent, onLayoutModeChange]);
226
+ var cloneAgentsRoleBlocked = isMaiaCloneAgentsRoleBlocked(user, section);
227
+ var renderModal = function renderModal() {
228
+ return /*#__PURE__*/_jsxs(SCCAIMHWrapper, {
229
+ ref: dropdownRef,
230
+ "data-no-drag": "true",
231
+ onClick: agents.length ? handleExpandModal : undefined,
232
+ id: "chat-ai-modal-header-wrapper",
233
+ children: [/*#__PURE__*/_jsx(SCCAIMHSelectedAgent, {
234
+ children: /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
235
+ title: showTooltipAgent ? /*#__PURE__*/_jsxs("span", {
236
+ style: {
237
+ display: 'flex',
238
+ alignItems: 'center',
239
+ gap: '4px'
240
+ },
241
+ children: [(localAgents === null || localAgents === void 0 ? void 0 : localAgents.type) === 'custom' && !(localAgents !== null && localAgents !== void 0 && localAgents.is_legacy_context) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {}), ' ', localAgents === null || localAgents === void 0 ? void 0 : localAgents.name]
242
+ }) : '',
243
+ placement: isExpanded ? 'left' : 'top'
244
+ }, tooltipZIndex != null ? {
245
+ zIndex: tooltipZIndex
246
+ } : {}), {}, {
247
+ children: /*#__PURE__*/_jsx(SCCAIMHSelectedAgentText, {
248
+ ref: textRefAgent,
249
+ isAgentDeleted: !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_legacy_context),
250
+ children: /*#__PURE__*/_jsxs("span", {
251
+ style: {
252
+ display: 'flex',
253
+ alignItems: 'center',
254
+ gap: '4px'
255
+ },
256
+ children: [selectorIcon, " ", selectorLabel]
257
+ })
258
+ })
259
+ }))
260
+ }), /*#__PURE__*/_jsx(SCCAIMHWrapperIcon, {
261
+ children: /*#__PURE__*/_jsx(ChevronDown, {
262
+ width: 14,
263
+ height: 14,
264
+ color: "#20201F"
265
+ })
266
+ }), isExpanded && /*#__PURE__*/_jsx(SCCAIMHWrapperModal, {
267
+ children: /*#__PURE__*/_jsxs(SCCAIMHWrapperModalContent, {
268
+ children: [window.MAIA_CHAT_AI_FEATURE_ACCESS && !cloneAgentsRoleBlocked && /*#__PURE__*/_jsx(_Fragment, {
269
+ children: function () {
270
+ var maiaAgents = agentsForSelector.filter(isMaiaOrchestratorAgent);
271
+ if (!maiaAgents.length) return null;
272
+ return /*#__PURE__*/_jsx(_Fragment, {
273
+ children: maiaAgents.map(function (maiaAgent, index) {
274
+ return /*#__PURE__*/_jsx(ChatAIAgentOption, {
275
+ agent: maiaAgent,
276
+ index: index,
277
+ handleSelectAgent: handleSelectAgent,
278
+ isSelected: (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) === maiaAgent.id,
279
+ isMaia: true,
280
+ onFavoriteToggle: onAgentUpdate
281
+ }, "agent-".concat(maiaAgent.id));
282
+ })
283
+ });
284
+ }()
285
+ }), agentsForSelector.some(function (agent) {
286
+ return agent.type === 'custom';
287
+ }) && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && /*#__PURE__*/_jsxs(_Fragment, {
288
+ children: [/*#__PURE__*/_jsxs(SCCAIMHWrapperModalContentTitle, {
289
+ children: [t('agents'), " by ", user.company]
290
+ }), /*#__PURE__*/_jsx(SCCAIMHDivider, {})]
291
+ }), /*#__PURE__*/_jsxs(SCCAIMHAgentsList, {
292
+ hasMore: hasMore,
293
+ agentsCount: agentsForSelector.length,
294
+ ref: agentsRef,
295
+ children: [agentsForSelector === null || agentsForSelector === void 0 ? void 0 : agentsForSelector.map(function (agent, index) {
296
+ if (!shouldRenderAgentDropdownItem({
297
+ agent: agent,
298
+ multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS)
299
+ })) {
300
+ return null;
301
+ }
302
+ return /*#__PURE__*/_jsx(ChatAIAgentOption, {
303
+ agent: agent,
304
+ index: index,
305
+ handleSelectAgent: handleSelectAgent,
306
+ isSelected: (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) === agent.id,
307
+ onFavoriteToggle: onAgentUpdate,
308
+ setIsExpanded: setIsExpanded
309
+ }, "agent-".concat(agent.id));
310
+ }), loadingMore && /*#__PURE__*/_jsx(SCCAIMHLoaderWrapper, {
311
+ children: /*#__PURE__*/_jsx(Loader, {
312
+ size: "small"
313
+ })
314
+ })]
315
+ }), shouldShowDropdownAddAgentFooter({
316
+ canCreate: userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.create,
317
+ multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS),
318
+ isMyAgentsSection: isMyAgentsSection,
319
+ isMySkillsSection: isMySkillsSection,
320
+ isMaiakerSection: isMaiakerSection
321
+ }) && /*#__PURE__*/_jsxs(SCCAIMHAddAgent, {
322
+ onClick: function onClick() {
323
+ setIsExpanded(false);
324
+ amplitudEvent(EVENTS.openModal, {
325
+ option: 'create_agent'
326
+ });
327
+ document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
328
+ detail: {
329
+ agentValues: {
330
+ values: {
331
+ isEditing: false
332
+ },
333
+ isOpen: true
334
+ }
335
+ }
336
+ }));
337
+ },
338
+ children: [/*#__PURE__*/_jsx(SCCAIMHPlusIconWrapper, {
339
+ children: /*#__PURE__*/_jsx(Plus, {
340
+ color: "white",
341
+ width: 18,
342
+ height: 18
343
+ })
344
+ }), t('createAgent')]
345
+ })]
346
+ })
347
+ })]
348
+ });
349
+ };
350
+ var shouldRenderSelector = shouldRenderHeaderAgentSelector({
79
351
  hasError: hasError,
80
352
  loading: loading,
81
353
  hideAgentSelector: hideAgentSelector,
82
- hasSelectedAgent: !!selectedAgent,
83
- isAgentsSection: isMyAgentsSection || isMySkillsSection
354
+ selectedAgent: selectedAgent,
355
+ isMyAgentsSection: isMyAgentsSection,
356
+ isMySkillsSection: isMySkillsSection,
357
+ multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS),
358
+ legacyMaiaAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS)
84
359
  });
85
- var dragHandlers = draggable ? {
86
- onPointerDown: onDragStart,
87
- onPointerMove: onDragMove,
88
- onPointerUp: onDragEnd,
89
- onPointerCancel: onDragEnd,
90
- onLostPointerCapture: onDragEnd,
91
- style: {
92
- cursor: 'grab',
93
- touchAction: 'manipulation'
94
- }
95
- } : {};
96
- return /*#__PURE__*/_jsxs(SCCAIMHModal, _objectSpread(_objectSpread({
360
+ return /*#__PURE__*/_jsxs(SCCAIMHModal, {
97
361
  $hasError: hasError,
98
362
  $loading: loading,
99
- $hasAgents: !!agents.length
100
- }, dragHandlers), {}, {
101
- children: [shouldRenderSelector ? /*#__PURE__*/_jsx(ChatAiModalHeaderAgentSelector, {
102
- agents: agents,
103
- hasMore: hasMore,
104
- loadingMore: loadingMore,
105
- isMyAgentsSection: isMyAgentsSection,
106
- isMySkillsSection: isMySkillsSection,
107
- isMaiakerSection: isMaiakerSection,
108
- tooltipZIndex: tooltipZIndex,
109
- handleResetChat: handleResetChat,
110
- onAgentUpdate: onAgentUpdate,
111
- loadMoreAgents: loadMoreAgents,
112
- sortAgentsList: sortAgentsList,
113
- onAgentSelected: onAgentSelected
114
- }) : /*#__PURE__*/_jsx("div", {}), /*#__PURE__*/_jsxs(SCCAIMHWrapperButton, {
363
+ $hasAgents: !!agents.length,
364
+ onPointerDown: draggable ? onDragStart : undefined,
365
+ onPointerMove: draggable ? onDragMove : undefined,
366
+ onPointerUp: draggable ? onDragEnd : undefined,
367
+ onPointerCancel: draggable ? onDragEnd : undefined,
368
+ onLostPointerCapture: draggable ? onDragEnd : undefined,
369
+ style: {
370
+ cursor: draggable ? 'grab' : undefined,
371
+ touchAction: draggable ? 'manipulation' : undefined
372
+ },
373
+ children: [shouldRenderSelector ? renderModal() : /*#__PURE__*/_jsx("div", {}), /*#__PURE__*/_jsxs(SCCAIMHWrapperButton, {
115
374
  "data-no-drag": "true",
116
- children: [showBackButton ? /*#__PURE__*/_jsxs(SCCAIMHBackButton, {
375
+ children: [showBackButton && /*#__PURE__*/_jsxs(SCCAIMHBackButton, {
117
376
  type: "button",
118
377
  onClick: function onClick() {
119
- return onBack();
378
+ onBack();
120
379
  },
121
380
  children: [/*#__PURE__*/_jsx(ChevronLeft, {
122
381
  width: 14,
123
382
  height: 14,
124
383
  color: "#343433"
125
384
  }), t('back')]
126
- }) : null, showHeaderCreateAgentButton ? /*#__PURE__*/_jsx(SCCAIMHCreateAgentButton, {
385
+ }), showHeaderCreateAgentButton && /*#__PURE__*/_jsx(SCCAIMHCreateAgentButton, {
127
386
  type: "button",
128
387
  onClick: handleOpenCreateAgentModal,
129
388
  children: /*#__PURE__*/_jsx(SCCAIMHCreateAgentButtonText, {
130
389
  children: t('openAgentCreator')
131
390
  })
132
- }) : null, hideControls ? null : /*#__PURE__*/_jsxs(_Fragment, {
133
- children: [/*#__PURE__*/_jsx(ChatAiModalHeaderLayoutMenu, {
134
- layoutMode: layoutMode,
135
- onLayoutModeChange: onLayoutModeChange,
136
- tooltipZIndex: tooltipZIndex
137
- }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
138
- handleClick: handleMinimize,
139
- tooltip: t('globals.minimize'),
391
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuAnchor, {
392
+ ref: layoutMenuRef,
393
+ "data-no-drag": "true",
394
+ children: [/*#__PURE__*/_jsx(IconButton, {
395
+ buttonId: "btn-maia-layout-menu",
396
+ handleClick: function handleClick() {
397
+ if (!layoutMenuOpen) {
398
+ amplitudEvent(EVENTS.aiChatOpenViewOptions);
399
+ }
400
+ setLayoutMenuOpen(function (prev) {
401
+ return !prev;
402
+ });
403
+ },
404
+ tooltip: t('layoutMenuTooltip'),
405
+ disableTooltip: layoutMenuOpen,
140
406
  tooltipZIndex: tooltipZIndex,
141
- children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
142
- children: /*#__PURE__*/_jsx(Status, {
143
- width: 24,
144
- height: 24
145
- })
146
- })
407
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
408
+ }), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
409
+ role: "menu",
410
+ children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
411
+ type: "button",
412
+ $active: layoutMode === 'sidebar',
413
+ onClick: function onClick() {
414
+ return handlePickLayout('sidebar');
415
+ },
416
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
417
+ "aria-hidden": true,
418
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
419
+ }), t('layoutSidebar')]
420
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
421
+ type: "button",
422
+ $active: layoutMode === 'fullscreen',
423
+ onClick: function onClick() {
424
+ return handlePickLayout('fullscreen');
425
+ },
426
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
427
+ "aria-hidden": true,
428
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
429
+ }), t('layoutFullscreen')]
430
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
431
+ type: "button",
432
+ $active: layoutMode === 'floating',
433
+ onClick: function onClick() {
434
+ return handlePickLayout('floating');
435
+ },
436
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
437
+ "aria-hidden": true,
438
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
439
+ }), t('layoutFloating')]
440
+ })]
147
441
  }) : null]
148
- })]
442
+ }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
443
+ handleClick: handleMinimize,
444
+ tooltip: t('globals.minimize'),
445
+ tooltipZIndex: tooltipZIndex,
446
+ children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
447
+ children: /*#__PURE__*/_jsx(Status, {
448
+ width: 24,
449
+ height: 24
450
+ })
451
+ })
452
+ }) : null]
149
453
  })]
150
- }));
454
+ });
151
455
  };
152
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsIlN0YXR1cyIsIkNoZXZyb25MZWZ0IiwidXNlVHJhbnNsYXRpb24iLCJTRUNUSU9OUyIsInVzZUdsb2JhbENvbnRleHQiLCJJY29uQnV0dG9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFdyYXBwZXJCdXR0b24iLCJTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24iLCJTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0IiwiU0NDQUlNSEJhY2tCdXR0b24iLCJTQ0NBSU1ITWluaW1pemVJY29uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJ1c2VVc2VyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImNhblVzZXJDcmVhdGVBZ2VudHMiLCJkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsIiwic2hvdWxkU2hvd0FnZW50U2VsZWN0b3IiLCJDaGF0QWlNb2RhbEhlYWRlckFnZW50U2VsZWN0b3IiLCJDaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJFTVBUWV9BR0VOVFMiLCJDaGF0QUlNb2RhbEhlYWRlciIsIl9yZWYiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJfcmVmJGhpZGVDb250cm9scyIsImhpZGVDb250cm9scyIsIm9uQWdlbnRTZWxlY3RlZCIsIl9yZWYkc2hvd0JhY2tCdXR0b24iLCJzaG93QmFja0J1dHRvbiIsIl9yZWYkb25CYWNrIiwib25CYWNrIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwidXNlciIsImFtcGxpdHVkRXZlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInRvb2x0aXBaSW5kZXgiLCJzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24iLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsInNob3VsZFJlbmRlclNlbGVjdG9yIiwiaGFzU2VsZWN0ZWRBZ2VudCIsImlzQWdlbnRzU2VjdGlvbiIsImRyYWdIYW5kbGVycyIsIm9uUG9pbnRlckRvd24iLCJvblBvaW50ZXJNb3ZlIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJvbkxvc3RQb2ludGVyQ2FwdHVyZSIsInN0eWxlIiwiY3Vyc29yIiwidG91Y2hBY3Rpb24iLCJfb2JqZWN0U3ByZWFkIiwiJGhhc0Vycm9yIiwiJGxvYWRpbmciLCIkaGFzQWdlbnRzIiwibGVuZ3RoIiwiY2hpbGRyZW4iLCJ0eXBlIiwib25DbGljayIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJoYW5kbGVDbGljayIsInRvb2x0aXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhdHVzJ1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uTGVmdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL0ljb25CdXR0b24nXG5pbXBvcnQge1xuICBTQ0NBSU1ITW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyQnV0dG9uLFxuICBTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24sXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQsXG4gIFNDQ0FJTUhCYWNrQnV0dG9uLFxuICBTQ0NBSU1ITWluaW1pemVJY29uLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuLi8uLi9sYXlvdXQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IGNhblVzZXJDcmVhdGVBZ2VudHMsIGRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwsIHNob3VsZFNob3dBZ2VudFNlbGVjdG9yIH0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci51dGlscydcbmltcG9ydCB7IENoYXRBaU1vZGFsSGVhZGVyQWdlbnRTZWxlY3RvciB9IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXJBZ2VudFNlbGVjdG9yJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxIZWFkZXJMYXlvdXRNZW51IH0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnUnXG5cbmNvbnN0IEVNUFRZX0FHRU5UUzogQWdlbnRbXSA9IFtdXG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbEhlYWRlciA9ICh7XG4gIGxheW91dE1vZGUsXG4gIG9uTGF5b3V0TW9kZUNoYW5nZSxcbiAgZHJhZ2dhYmxlID0gZmFsc2UsXG4gIG9uRHJhZ1N0YXJ0LFxuICBvbkRyYWdNb3ZlLFxuICBvbkRyYWdFbmQsXG4gIGhhbmRsZU1pbmltaXplLFxuICBhZ2VudHMgPSBFTVBUWV9BR0VOVFMsXG4gIGhhc0Vycm9yID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmUgPSBmYWxzZSxcbiAgaGFzTW9yZSA9IGZhbHNlLFxuICBoYW5kbGVSZXNldENoYXQsXG4gIG9uQWdlbnRVcGRhdGUsXG4gIGxvYWRNb3JlQWdlbnRzLFxuICBzb3J0QWdlbnRzTGlzdCxcbiAgaXNNeUFnZW50c1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNeVNraWxsc1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNYWlha2VyU2VjdGlvbiA9IGZhbHNlLFxuICBoaWRlQWdlbnRTZWxlY3RvciA9IGZhbHNlLFxuICBoaWRlQ29udHJvbHMgPSBmYWxzZSxcbiAgb25BZ2VudFNlbGVjdGVkLFxuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlLFxuICBvbkJhY2sgPSAoKSA9PiBudWxsLFxufToge1xuICBsYXlvdXRNb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZVxuICBvbkxheW91dE1vZGVDaGFuZ2U6IChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4gdm9pZFxuICBleHBhbmRlZDogYm9vbGVhblxuICBkcmFnZ2FibGU/OiBib29sZWFuXG4gIG9uRHJhZ1N0YXJ0PzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnTW92ZT86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ0VuZD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIGhhbmRsZU1pbmltaXplPzogKCkgPT4gdm9pZFxuICBhZ2VudHM6IEFnZW50W11cbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBsb2FkaW5nTW9yZT86IGJvb2xlYW5cbiAgaGFzTW9yZT86IGJvb2xlYW5cbiAgaGFuZGxlUmVzZXRDaGF0OiAoKSA9PiB2b2lkXG4gIG9uQWdlbnRVcGRhdGU/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBsb2FkTW9yZUFnZW50cz86ICgpID0+IHZvaWRcbiAgc29ydEFnZW50c0xpc3Q/OiAoKSA9PiB2b2lkXG4gIC8qKiBTZWNjacOzbiBcIk1pcyBhZ2VudGVzXCI6IHNpIG5vIGhheSBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlBZ2VudHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJTa2lsbHNcIjogbWlzbW8gY29tcG9ydGFtaWVudG8gZGUgc2VsZWN0b3IgcXVlIE1pcyBhZ2VudGVzLCBjb24gZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlTa2lsbHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGVsIGNoaXAgZGUgbW9kZWxvIExMTSAocC4gZWouIGVuIE1pcyBhZ2VudGVzIC8gTWlzIHNraWxscykgKi9cbiAgaGlkZUFnZW50U2VsZWN0b3I/OiBib29sZWFuXG4gIC8qKiBPY3VsdGEgbG9zIGJvdG9uZXMgZGUgbGF5b3V0IHkgY2llcnJlIChtb2RvIHDDoWdpbmEgY29tcGxldGEpICovXG4gIGhpZGVDb250cm9scz86IGJvb2xlYW5cbiAgLyoqIFNlY2Npw7NuIFwiQ3JlYWRvciBkZSBhZ2VudGVzXCIgKE1haWFrZXIpOiBoYWJpbGl0YSBlbCBib3TDs24gXCJDcmVhciBhZ2VudGVcIiBkZWwgaGVhZGVyICovXG4gIGlzTWFpYWtlclNlY3Rpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTZSBpbnZvY2EgZGVzcHXDqXMgZGVsIHJlc2V0IGN1YW5kbyBlbCBhZ2VudGUgc2VsZWNjaW9uYWRvIE5PIHJlcXVpZXJlIHNlbGVjY2nDs25cbiAgICogZGUgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpLiBQZXJtaXRlIHJlc29sdmVyIGBHRVQgL3YyL3Nlc3Npb25zL2FnZW50L3tpZH1gXG4gICAqIHkgbmF2ZWdhciBhIHVuYSBjb252ZXJzYWNpw7NuIGV4aXN0ZW50ZSBzaSBsYSBoYXkuXG4gICAqL1xuICBvbkFnZW50U2VsZWN0ZWQ/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPlxuICBzaG93QmFja0J1dHRvbj86IGJvb2xlYW5cbiAgb25CYWNrPzogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudCwgU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgLy8gRW4gc2VjdGlvbiAndGFzaycgZWwgbW9kYWwgZGUgTWFpYSBzZSBlbGV2YSBwb3IgZW5jaW1hIGRlbCB0YXNrIHBhbmVsICh6LWluZGV4IDk4MDAwMDEpLlxuICAvLyBMb3MgdG9vbHRpcHMgc2UgbW9udGFuIGVuIHBvcnRhbCBjb24gei1pbmRleCAxNTAwIHBvciBkZWZlY3RvLCBhc8OtIHF1ZSBxdWVkYXLDrWFuIGRldHLDoXMuXG4gIC8vIFN1Ymltb3Mgc3Ugei1pbmRleCBzw7NsbyBlbiBlc3RlIGNhc28gcGFyYSBxdWUgc2UgdmVhbiBwb3IgZW5jaW1hIGRlbCBtb2RhbC5cbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuXG4gIGNvbnN0IHNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiA9IGNhblVzZXJDcmVhdGVBZ2VudHModXNlcikgJiYgKGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTWFpYWtlclNlY3Rpb24pXG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW2FtcGxpdHVkRXZlbnRdKVxuXG4gIGNvbnN0IHNob3VsZFJlbmRlclNlbGVjdG9yID0gc2hvdWxkU2hvd0FnZW50U2VsZWN0b3Ioe1xuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgaGlkZUFnZW50U2VsZWN0b3IsXG4gICAgaGFzU2VsZWN0ZWRBZ2VudDogISFzZWxlY3RlZEFnZW50LFxuICAgIGlzQWdlbnRzU2VjdGlvbjogaXNNeUFnZW50c1NlY3Rpb24gfHwgaXNNeVNraWxsc1NlY3Rpb24sXG4gIH0pXG4gIGNvbnN0IGRyYWdIYW5kbGVycyA9IGRyYWdnYWJsZVxuICAgID8ge1xuICAgICAgICBvblBvaW50ZXJEb3duOiBvbkRyYWdTdGFydCxcbiAgICAgICAgb25Qb2ludGVyTW92ZTogb25EcmFnTW92ZSxcbiAgICAgICAgb25Qb2ludGVyVXA6IG9uRHJhZ0VuZCxcbiAgICAgICAgb25Qb2ludGVyQ2FuY2VsOiBvbkRyYWdFbmQsXG4gICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlOiBvbkRyYWdFbmQsXG4gICAgICAgIHN0eWxlOiB7IGN1cnNvcjogJ2dyYWInLCB0b3VjaEFjdGlvbjogJ21hbmlwdWxhdGlvbicgfSxcbiAgICAgIH1cbiAgICA6IHt9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNSE1vZGFsICRoYXNFcnJvcj17aGFzRXJyb3J9ICRsb2FkaW5nPXtsb2FkaW5nfSAkaGFzQWdlbnRzPXshIWFnZW50cy5sZW5ndGh9IHsuLi5kcmFnSGFuZGxlcnN9PlxuICAgICAge3Nob3VsZFJlbmRlclNlbGVjdG9yID8gKFxuICAgICAgICA8Q2hhdEFpTW9kYWxIZWFkZXJBZ2VudFNlbGVjdG9yXG4gICAgICAgICAgYWdlbnRzPXthZ2VudHN9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJTZWN0aW9ufVxuICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIG9uQWdlbnRTZWxlY3RlZD17b25BZ2VudFNlbGVjdGVkfVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiAvPlxuICAgICAgKX1cbiAgICAgIDxTQ0NBSU1IV3JhcHBlckJ1dHRvbiBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgIHtzaG93QmFja0J1dHRvbiA/IChcbiAgICAgICAgICA8U0NDQUlNSEJhY2tCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IG9uQmFjaygpfT5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzM0MzQzM1wiIC8+XG4gICAgICAgICAgICB7dCgnYmFjaycpfVxuICAgICAgICAgIDwvU0NDQUlNSEJhY2tCdXR0b24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7c2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uID8gKFxuICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsfT5cbiAgICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0Pnt0KCdvcGVuQWdlbnRDcmVhdG9yJyl9PC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0PlxuICAgICAgICAgIDwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2hpZGVDb250cm9scyA/IG51bGwgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnVcbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtvbkxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2hhbmRsZU1pbmltaXplID8gKFxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBoYW5kbGVDbGljaz17aGFuZGxlTWluaW1pemV9IHRvb2x0aXA9e3QoJ2dsb2JhbHMubWluaW1pemUnKX0gdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgICAgICA8U3RhdHVzIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlckJ1dHRvbj5cbiAgICA8L1NDQ0FJTUhNb2RhbD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFdBQVcsUUFBMkMsT0FBTztBQUN0RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLGlDQUFpQztBQUMxRCxTQUFTQyxnQkFBZ0IsUUFBUSx1Q0FBdUM7QUFDeEUsU0FBU0MsVUFBVSxRQUFRLDhCQUE4QjtBQUN6RCxTQUNFQyxZQUFZLEVBQ1pDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hC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
456
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImNhblNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiIsImZpbHRlckFnZW50c0ZvclNlbGVjdG9yIiwiaXNNYWlhT3JjaGVzdHJhdG9yQWdlbnQiLCJyZXNvbHZlSGVhZGVyU2VsZWN0b3JMYWJlbCIsInJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQiLCJhZ2VudFNlbGVjdGlvbk5lZWRzRW50aXR5Iiwic2hvdWxkUmVuZGVySGVhZGVyQWdlbnRTZWxlY3RvciIsInNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwiLCJzaG91bGRSZW5kZXJBZ2VudERyb3Bkb3duSXRlbSIsInNob3VsZFNob3dEcm9wZG93bkFkZEFnZW50Rm9vdGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiQ2hhdEFJTW9kYWxIZWFkZXIiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJvbkFnZW50U2VsZWN0ZWQiLCJfcmVmJHNob3dCYWNrQnV0dG9uIiwic2hvd0JhY2tCdXR0b24iLCJfcmVmJG9uQmFjayIsIm9uQmFjayIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiY2hhdEFJIiwidCIsInVzZXIiLCJhbXBsaXR1ZEV2ZW50IiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2VjdGlvbiIsInRvb2x0aXBaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc0V4cGFuZGVkIiwic2V0SXNFeHBhbmRlZCIsInRleHRSZWZBZ2VudCIsImRyb3Bkb3duUmVmIiwibGF5b3V0TWVudVJlZiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibGF5b3V0TWVudU9wZW4iLCJzZXRMYXlvdXRNZW51T3BlbiIsIl91c2VSZXNpemVMaXN0ZW5lciIsIm5hbWUiLCJzaG93VG9vbHRpcEFnZW50Iiwic2hvd1Rvb2x0aXAiLCJhZ2VudHNSZWYiLCJhZ2VudHNGb3JTZWxlY3RvciIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwic2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uIiwiY3JlYXRlIiwiQm9vbGVhbiIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJpc09wZW4iLCJ1bmRlZmluZWQiLCJoYW5kbGVTY3JvbGwiLCJjdXJyZW50IiwiX2FnZW50c1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGltZW91dElkIiwic2V0VGltZW91dCIsInNjcm9sbEVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxvY2FsQWdlbnRzIiwic2VsZWN0b3JJY29uIiwidHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0IiwiZW1vamkiLCJzZWxlY3RvckxhYmVsIiwibnMiLCJoYW5kbGVTZWxlY3RBZ2VudCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWdlbnRfdHlwZSIsImhhbmRsZUV4cGFuZE1vZGFsIiwiYWlDaGF0T3BlbkFnZW50U2VsZWN0IiwicHJldiIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImV2ZW50IiwidGFyZ2V0IiwiY29udGFpbnMiLCJoYW5kbGVQaWNrTGF5b3V0IiwibW9kZSIsInByb2plY3RSZXN1bWVFeHBhbmQiLCJleHBhbmRlZCIsImFpQ2hhdFNlbGVjdFZpZXdPcHRpb25zIiwiY2xvbmVBZ2VudHNSb2xlQmxvY2tlZCIsInJlbmRlck1vZGFsIiwicmVmIiwib25DbGljayIsImxlbmd0aCIsImlkIiwiY2hpbGRyZW4iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwicGxhY2VtZW50IiwiekluZGV4IiwiaXNBZ2VudERlbGV0ZWQiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIm1haWFBZ2VudHMiLCJmaWx0ZXIiLCJtYXAiLCJtYWlhQWdlbnQiLCJpbmRleCIsImlzU2VsZWN0ZWQiLCJpc01haWEiLCJvbkZhdm9yaXRlVG9nZ2xlIiwiY29uY2F0Iiwic29tZSIsImNvbXBhbnkiLCJhZ2VudHNDb3VudCIsIm11bHRpQWdlbnRzQWNjZXNzIiwic2l6ZSIsImNhbkNyZWF0ZSIsInNob3VsZFJlbmRlclNlbGVjdG9yIiwibGVnYWN5TWFpYUFjY2VzcyIsIiRoYXNFcnJvciIsIiRsb2FkaW5nIiwiJGhhc0FnZW50cyIsIm9uUG9pbnRlckRvd24iLCJvblBvaW50ZXJNb3ZlIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJvbkxvc3RQb2ludGVyQ2FwdHVyZSIsImN1cnNvciIsInRvdWNoQWN0aW9uIiwiYnV0dG9uSWQiLCJoYW5kbGVDbGljayIsImFpQ2hhdE9wZW5WaWV3T3B0aW9ucyIsInRvb2x0aXAiLCJkaXNhYmxlVG9vbHRpcCIsInJvbGUiLCIkYWN0aXZlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXR1cydcbmltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvd24nXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25MZWZ0J1xuaW1wb3J0IHsgUGx1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BsdXMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVJlc2l6ZUxpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlUmVzaXplJ1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL0ljb25CdXR0b24nXG5pbXBvcnQgeyBNQUlBSWNvbiwgTWFpYUNoYXRMYXlvdXRNZW51SWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zL01haWFDaGF0TGF5b3V0U2lkZWJhckljb24nXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRGdWxsc2NyZWVuSWNvbidcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0RmxvYXRpbmdJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24nXG5pbXBvcnQgeyBDaGF0QUlBZ2VudE9wdGlvbiB9IGZyb20gJy4uL0NoYXRBaUFnZW50T3B0aW9ucy9DaGF0QWlBZ2VudE9wdGlvbnMnXG5pbXBvcnQge1xuICBTQ0NBSU1ITW9kYWwsXG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50LFxuICBTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQsXG4gIFNDQ0FJTUhXcmFwcGVyLFxuICBTQ0NBSU1IV3JhcHBlckJ1dHRvbixcbiAgU0NDQUlNSFdyYXBwZXJJY29uLFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsLFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudCxcbiAgU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSxcbiAgU0NDQUlNSEFkZEFnZW50LFxuICBTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24sXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQsXG4gIFNDQ0FJTUhEaXZpZGVyLFxuICBTQ0NBSU1IQWdlbnRzTGlzdCxcbiAgU0NDQUlNSExvYWRlcldyYXBwZXIsXG4gIFNDQ0FJTUhQbHVzSWNvbldyYXBwZXIsXG4gIFNDQ0FJTUhMYXlvdXRNZW51QW5jaG9yLFxuICBTQ0NBSU1ITGF5b3V0TWVudVBhbmVsLFxuICBTQ0NBSU1ITGF5b3V0TWVudVJvdyxcbiAgU0NDQUlNSExheW91dE1lbnVSb3dJY29uLFxuICBTQ0NBSU1IQmFja0J1dHRvbixcbiAgU0NDQUlNSE1pbmltaXplSWNvbixcbn0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci5zdHlsZXMnXG5pbXBvcnQgdHlwZSB7IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlIH0gZnJvbSAnLi4vLi4vbGF5b3V0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL21haWFUYXNrUGFuZWxBY2Nlc3MnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQge1xuICBjYW5TaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24sXG4gIGZpbHRlckFnZW50c0ZvclNlbGVjdG9yLFxuICBpc01haWFPcmNoZXN0cmF0b3JBZ2VudCxcbiAgcmVzb2x2ZUhlYWRlclNlbGVjdG9yTGFiZWwsXG4gIHJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQsXG4gIGFnZW50U2VsZWN0aW9uTmVlZHNFbnRpdHksXG4gIHNob3VsZFJlbmRlckhlYWRlckFnZW50U2VsZWN0b3IsXG4gIHNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwsXG4gIHNob3VsZFJlbmRlckFnZW50RHJvcGRvd25JdGVtLFxuICBzaG91bGRTaG93RHJvcGRvd25BZGRBZ2VudEZvb3Rlcixcbn0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci5oZWxwZXJzJ1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWxIZWFkZXIgPSAoe1xuICBsYXlvdXRNb2RlLFxuICBvbkxheW91dE1vZGVDaGFuZ2UsXG4gIGRyYWdnYWJsZSA9IGZhbHNlLFxuICBvbkRyYWdTdGFydCxcbiAgb25EcmFnTW92ZSxcbiAgb25EcmFnRW5kLFxuICBoYW5kbGVNaW5pbWl6ZSxcbiAgYWdlbnRzID0gW10sXG4gIGhhc0Vycm9yID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmUgPSBmYWxzZSxcbiAgaGFzTW9yZSA9IGZhbHNlLFxuICBoYW5kbGVSZXNldENoYXQsXG4gIG9uQWdlbnRVcGRhdGUsXG4gIGxvYWRNb3JlQWdlbnRzLFxuICBzb3J0QWdlbnRzTGlzdCxcbiAgaXNNeUFnZW50c1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNeVNraWxsc1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNYWlha2VyU2VjdGlvbiA9IGZhbHNlLFxuICBoaWRlQWdlbnRTZWxlY3RvciA9IGZhbHNlLFxuICBvbkFnZW50U2VsZWN0ZWQsXG4gIHNob3dCYWNrQnV0dG9uID0gZmFsc2UsXG4gIG9uQmFjayA9ICgpID0+IG51bGwsXG59OiB7XG4gIGxheW91dE1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlXG4gIG9uTGF5b3V0TW9kZUNoYW5nZTogKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB2b2lkXG4gIGV4cGFuZGVkOiBib29sZWFuXG4gIGRyYWdnYWJsZT86IGJvb2xlYW5cbiAgb25EcmFnU3RhcnQ/OiAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZFxuICBvbkRyYWdNb3ZlPzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnRW5kPzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgaGFuZGxlTWluaW1pemU/OiAoKSA9PiB2b2lkXG4gIGFnZW50czogQWdlbnRbXVxuICBoYXNFcnJvcjogYm9vbGVhblxuICBsb2FkaW5nOiBib29sZWFuXG4gIGxvYWRpbmdNb3JlPzogYm9vbGVhblxuICBoYXNNb3JlPzogYm9vbGVhblxuICBoYW5kbGVSZXNldENoYXQ6ICgpID0+IHZvaWRcbiAgb25BZ2VudFVwZGF0ZT86ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBzb3J0QWdlbnRzTGlzdD86ICgpID0+IHZvaWRcbiAgLyoqIFNlY2Npw7NuIFwiTWlzIGFnZW50ZXNcIjogc2kgbm8gaGF5IGFnZW50ZSBzZXRlYWRvLCBlbCBzZWxlY3RvciBtdWVzdHJhIGVsIGljb25vIGRlIE1BSUEgeSBlbCBub21icmUgZGUgbGEgc2VjY2nDs24gKi9cbiAgaXNNeUFnZW50c1NlY3Rpb24/OiBib29sZWFuXG4gIC8qKiBTZWNjacOzbiBcIlNraWxsc1wiOiBtaXNtbyBjb21wb3J0YW1pZW50byBkZSBzZWxlY3RvciBxdWUgTWlzIGFnZW50ZXMsIGNvbiBlbCBub21icmUgZGUgbGEgc2VjY2nDs24gKi9cbiAgaXNNeVNraWxsc1NlY3Rpb24/OiBib29sZWFuXG4gIC8qKiBPY3VsdGEgZWwgY2hpcCBkZSBtb2RlbG8gTExNIChwLiBlai4gZW4gTWlzIGFnZW50ZXMgLyBNaXMgc2tpbGxzKSAqL1xuICBoaWRlQWdlbnRTZWxlY3Rvcj86IGJvb2xlYW5cbiAgLyoqIFNlY2Npw7NuIFwiQ3JlYWRvciBkZSBhZ2VudGVzXCIgKE1haWFrZXIpOiBoYWJpbGl0YSBlbCBib3TDs24gXCJDcmVhciBhZ2VudGVcIiBkZWwgaGVhZGVyICovXG4gIGlzTWFpYWtlclNlY3Rpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTZSBpbnZvY2EgZGVzcHXDqXMgZGVsIHJlc2V0IGN1YW5kbyBlbCBhZ2VudGUgc2VsZWNjaW9uYWRvIE5PIHJlcXVpZXJlIHNlbGVjY2nDs25cbiAgICogZGUgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpLiBQZXJtaXRlIHJlc29sdmVyIGBHRVQgL3YyL3Nlc3Npb25zL2FnZW50L3tpZH1gXG4gICAqIHkgbmF2ZWdhciBhIHVuYSBjb252ZXJzYWNpw7NuIGV4aXN0ZW50ZSBzaSBsYSBoYXkuXG4gICAqL1xuICBvbkFnZW50U2VsZWN0ZWQ/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPlxuICBzaG93QmFja0J1dHRvbj86IGJvb2xlYW5cbiAgb25CYWNrPzogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudCwgU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZWN0aW9uIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgLy8gRW4gc2VjdGlvbiAndGFzaycgZWwgbW9kYWwgZGUgTWFpYSBzZSBlbGV2YSBwb3IgZW5jaW1hIGRlbCB0YXNrIHBhbmVsICh6LWluZGV4IDk4MDAwMDEpLlxuICAvLyBMb3MgdG9vbHRpcHMgc2UgbW9udGFuIGVuIHBvcnRhbCBjb24gei1pbmRleCAxNTAwIHBvciBkZWZlY3RvLCBhc8OtIHF1ZSBxdWVkYXLDrWFuIGRldHLDoXMuXG4gIC8vIFN1Ymltb3Mgc3Ugei1pbmRleCBzw7NsbyBlbiBlc3RlIGNhc28gcGFyYSBxdWUgc2UgdmVhbiBwb3IgZW5jaW1hIGRlbCBtb2RhbC5cbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGV4dFJlZkFnZW50ID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGxheW91dE1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtsYXlvdXRNZW51T3Blbiwgc2V0TGF5b3V0TWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXA6IHNob3dUb29sdGlwQWdlbnQgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWZBZ2VudCwgW3NlbGVjdGVkQWdlbnQ/Lm5hbWVdKVxuICBjb25zdCBhZ2VudHNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgY29uc3QgYWdlbnRzRm9yU2VsZWN0b3IgPSB1c2VNZW1vKCgpID0+IGZpbHRlckFnZW50c0ZvclNlbGVjdG9yKGFnZW50cyksIFthZ2VudHNdKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3Qgc2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uID0gY2FuU2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uKFxuICAgIHVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlLFxuICAgIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpLFxuICAgIGlzTXlBZ2VudHNTZWN0aW9uLFxuICAgIGlzTWFpYWtlclNlY3Rpb25cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLm9wZW5Nb2RhbCwgeyBvcHRpb246ICdjcmVhdGVfYWdlbnQnIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVxuICB9LCBbYW1wbGl0dWRFdmVudF0pXG5cbiAgLy8gTWFuZWphciBzY3JvbGwgaW5maW5pdG8gcGFyYSBjYXJnYXIgbcOhcyBhZ2VudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBTb2xvIGN1YW5kbyBlbCBkcm9wZG93biBlc3TDqSBhYmllcnRvXG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaWYgKCFhZ2VudHNSZWYuY3VycmVudCB8fCAhbG9hZE1vcmVBZ2VudHMgfHwgIWhhc01vcmUgfHwgbG9hZGluZ01vcmUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gYWdlbnRzUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgaWYgKHNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwoZGlzdGFuY2VGcm9tQm90dG9tKSkge1xuICAgICAgICBsb2FkTW9yZUFnZW50cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVsYXkgcGFyYSBhc2VndXJhciBxdWUgZWwgRE9NIGVzdMOpIHJlbmRlcml6YWRvXG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gYWdlbnRzUmVmLmN1cnJlbnRcbiAgICAgIGlmIChzY3JvbGxFbGVtZW50KSB7XG4gICAgICAgIHNjcm9sbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH0sIDEwMClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgICBpZiAoc2Nyb2xsRWxlbWVudCkge1xuICAgICAgICBzY3JvbGxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc0V4cGFuZGVkLCBsb2FkTW9yZUFnZW50cywgaGFzTW9yZSwgbG9hZGluZ01vcmVdKVxuXG4gIGNvbnN0IGxvY2FsQWdlbnRzID0gdXNlTWVtbygoKSA9PiByZXNvbHZlTG9jYWxTZWxlY3RlZEFnZW50KGFnZW50cywgc2VsZWN0ZWRBZ2VudCksIFthZ2VudHMsIHNlbGVjdGVkQWdlbnRdKVxuXG4gIC8vIEVuICdNaXMgYWdlbnRlcycgLyAnU2tpbGxzJyBzaW4gYWdlbnRlIHNldGVhZG8sIGVsIHNlbGVjdG9yIG11ZXN0cmEgZWwgaWNvbm8gZGUgTUFJQSB5IGVsIG5vbWJyZSBkZSBsYSBzZWNjacOzblxuICAvLyBlbiBsdWdhciBkZWwgYWdlbnRlLCBwYXJhIHF1ZSBlbCB1c3VhcmlvIHB1ZWRhIGFicmlyIGVsIGRyb3Bkb3duIHkgZWxlZ2lyIHVuby5cbiAgY29uc3Qgc2VsZWN0b3JJY29uID1cbiAgICBsb2NhbEFnZW50cz8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIWxvY2FsQWdlbnRzPy5pc19sZWdhY3lfY29udGV4dCA/IGxvY2FsQWdlbnRzPy5lbW9qaSA6IDxNQUlBSWNvbiAvPlxuICBjb25zdCBzZWxlY3RvckxhYmVsID0gcmVzb2x2ZUhlYWRlclNlbGVjdG9yTGFiZWwoXG4gICAgbG9jYWxBZ2VudHMsXG4gICAgaXNNeUFnZW50c1NlY3Rpb24sXG4gICAgaXNNeVNraWxsc1NlY3Rpb24sXG4gICAgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUaXRsZScsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KSxcbiAgICB0KCdjb252ZXJzYXRpb25zLm15U2tpbGxzTmF2JywgeyBuczogU0VDVElPTlMuY2hhdEFJIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudDogQWdlbnQpID0+IHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QWdlbnRTZWxlY3QsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzZXRDaGF0KClcbiAgICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIGRlcGVuZGUgZGUgdW5hIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKSB5YSBwb2RlbW9zXG4gICAgICAgIC8vIHJlc29sdmVyIHNpIGV4aXN0ZSB1bmEgc2VzacOzbiBwcmV2aWEgeSwgZW4gZXNlIGNhc28sIG5hdmVnYXIgYSBlbGxhLlxuICAgICAgICAvLyBQYXJhIGNsb25lK3Byb2plY3R8Y2xpZW50LCBsYSByZXNvbHVjacOzbiBvY3VycmUgZW4gbG9zIHNlbGVjdG9ycyBkZSBlbnRpdHkuXG4gICAgICAgIGlmICghYWdlbnRTZWxlY3Rpb25OZWVkc0VudGl0eShhZ2VudCkpIHtcbiAgICAgICAgICBvbkFnZW50U2VsZWN0ZWQ/LihhZ2VudClcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBhbXBsaXR1ZEV2ZW50LCBoYW5kbGVSZXNldENoYXQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgb25BZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRXhwYW5kTW9kYWwgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuQWdlbnRTZWxlY3QpXG4gICAgICAvLyBDdWFuZG8gc2UgYWJyZSBlbCBzZWxlY3Rvciwgb3JkZW5hciBsb3MgYWdlbnRlc1xuICAgICAgaWYgKHNvcnRBZ2VudHNMaXN0KSB7XG4gICAgICAgIHNvcnRBZ2VudHNMaXN0KClcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SXNFeHBhbmRlZChwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQgJiYgIWxheW91dE1lbnVPcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZVxuICAgICAgaWYgKGlzRXhwYW5kZWQgJiYgZHJvcGRvd25SZWYuY3VycmVudCAmJiAhZHJvcGRvd25SZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAobGF5b3V0TWVudU9wZW4gJiYgbGF5b3V0TWVudVJlZi5jdXJyZW50ICYmICFsYXlvdXRNZW51UmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICBzZXRMYXlvdXRNZW51T3BlbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtpc0V4cGFuZGVkLCBsYXlvdXRNZW51T3Blbl0pXG5cbiAgY29uc3QgaGFuZGxlUGlja0xheW91dCA9IHVzZUNhbGxiYWNrKFxuICAgIChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4ge1xuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMucHJvamVjdFJlc3VtZUV4cGFuZCwge1xuICAgICAgICBleHBhbmRlZDogbW9kZSA9PT0gJ2Z1bGxzY3JlZW4nLFxuICAgICAgfSlcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdFNlbGVjdFZpZXdPcHRpb25zLCB7IG9wdGlvbjogbW9kZSB9KVxuICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlKG1vZGUpXG4gICAgICBzZXRMYXlvdXRNZW51T3BlbihmYWxzZSlcbiAgICB9LFxuICAgIFthbXBsaXR1ZEV2ZW50LCBvbkxheW91dE1vZGVDaGFuZ2VdXG4gIClcblxuICBjb25zdCBjbG9uZUFnZW50c1JvbGVCbG9ja2VkID0gaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCh1c2VyLCBzZWN0aW9uKVxuXG4gIGNvbnN0IHJlbmRlck1vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NDQUlNSFdyYXBwZXJcbiAgICAgICAgcmVmPXtkcm9wZG93blJlZn1cbiAgICAgICAgZGF0YS1uby1kcmFnPVwidHJ1ZVwiXG4gICAgICAgIG9uQ2xpY2s9e2FnZW50cy5sZW5ndGggPyBoYW5kbGVFeHBhbmRNb2RhbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgaWQ9XCJjaGF0LWFpLW1vZGFsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50PlxuICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIHNob3dUb29sdGlwQWdlbnQgPyAoXG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnNHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgIHtsb2NhbEFnZW50cz8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIWxvY2FsQWdlbnRzPy5pc19sZWdhY3lfY29udGV4dCA/IChcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxBZ2VudHM/LmVtb2ppXG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8TUFJQUljb24gLz5cbiAgICAgICAgICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICAgICAgICAgIHtsb2NhbEFnZW50cz8ubmFtZX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxhY2VtZW50PXtpc0V4cGFuZGVkID8gJ2xlZnQnIDogJ3RvcCd9XG4gICAgICAgICAgICB7Li4uKHRvb2x0aXBaSW5kZXggIT0gbnVsbCA/IHsgekluZGV4OiB0b29sdGlwWkluZGV4IH0gOiB7fSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dFxuICAgICAgICAgICAgICByZWY9e3RleHRSZWZBZ2VudH1cbiAgICAgICAgICAgICAgaXNBZ2VudERlbGV0ZWQ9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkQWdlbnQ/LmlzX2xlZ2FjeV9jb250ZXh0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnNHB4JyB9fT5cbiAgICAgICAgICAgICAgICB7c2VsZWN0b3JJY29ufSB7c2VsZWN0b3JMYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9TQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDQ0FJTUhTZWxlY3RlZEFnZW50PlxuICAgICAgICA8U0NDQUlNSFdyYXBwZXJJY29uPlxuICAgICAgICAgIDxDaGV2cm9uRG93biB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzIwMjAxRlwiIC8+XG4gICAgICAgIDwvU0NDQUlNSFdyYXBwZXJJY29uPlxuICAgICAgICB7aXNFeHBhbmRlZCAmJiAoXG4gICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWw+XG4gICAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQ+XG4gICAgICAgICAgICAgIHt3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICFjbG9uZUFnZW50c1JvbGVCbG9ja2VkICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1haWFBZ2VudHMgPSBhZ2VudHNGb3JTZWxlY3Rvci5maWx0ZXIoaXNNYWlhT3JjaGVzdHJhdG9yQWdlbnQpXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWFpYUFnZW50cy5sZW5ndGgpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttYWlhQWdlbnRzLm1hcCgobWFpYUFnZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BhZ2VudC0ke21haWFBZ2VudC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50PXttYWlhQWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFnZW50PXtoYW5kbGVTZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gbWFpYUFnZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmF2b3JpdGVUb2dnbGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2FnZW50c0ZvclNlbGVjdG9yLnNvbWUoYWdlbnQgPT4gYWdlbnQudHlwZSA9PT0gJ2N1c3RvbScpICYmXG4gICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2FnZW50cycpfSBieSB7dXNlci5jb21wYW55fVxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IRGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPFNDQ0FJTUhBZ2VudHNMaXN0IGhhc01vcmU9e2hhc01vcmV9IGFnZW50c0NvdW50PXthZ2VudHNGb3JTZWxlY3Rvci5sZW5ndGh9IHJlZj17YWdlbnRzUmVmfT5cbiAgICAgICAgICAgICAgICB7YWdlbnRzRm9yU2VsZWN0b3I/Lm1hcCgoYWdlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFzaG91bGRSZW5kZXJBZ2VudERyb3Bkb3duSXRlbSh7XG4gICAgICAgICAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgbXVsdGlBZ2VudHNBY2Nlc3M6IEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BhZ2VudC0ke2FnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBZ2VudD17aGFuZGxlU2VsZWN0QWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRBZ2VudD8uaWQgPT09IGFnZW50LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRmF2b3JpdGVUb2dnbGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNFeHBhbmRlZD17c2V0SXNFeHBhbmRlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICB7bG9hZGluZ01vcmUgJiYgKFxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMb2FkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMb2FkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvU0NDQUlNSEFnZW50c0xpc3Q+XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RHJvcGRvd25BZGRBZ2VudEZvb3Rlcih7XG4gICAgICAgICAgICAgICAgY2FuQ3JlYXRlOiB1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSxcbiAgICAgICAgICAgICAgICBtdWx0aUFnZW50c0FjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgICAgICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb24sXG4gICAgICAgICAgICAgICAgaXNNeVNraWxsc1NlY3Rpb24sXG4gICAgICAgICAgICAgICAgaXNNYWlha2VyU2VjdGlvbixcbiAgICAgICAgICAgICAgfSkgJiYgKFxuICAgICAgICAgICAgICAgIDxTQ0NBSU1IQWRkQWdlbnRcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8UGx1cyBjb2xvcj1cIndoaXRlXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICAgICAge3QoJ2NyZWF0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1IQWRkQWdlbnQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50PlxuICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbD5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNSFdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0b3IgPSBzaG91bGRSZW5kZXJIZWFkZXJBZ2VudFNlbGVjdG9yKHtcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGhpZGVBZ2VudFNlbGVjdG9yLFxuICAgIHNlbGVjdGVkQWdlbnQsXG4gICAgaXNNeUFnZW50c1NlY3Rpb24sXG4gICAgaXNNeVNraWxsc1NlY3Rpb24sXG4gICAgbXVsdGlBZ2VudHNBY2Nlc3M6IEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpLFxuICAgIGxlZ2FjeU1haWFBY2Nlc3M6IEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyksXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNSE1vZGFsXG4gICAgICAkaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgJGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAkaGFzQWdlbnRzPXshIWFnZW50cy5sZW5ndGh9XG4gICAgICBvblBvaW50ZXJEb3duPXtkcmFnZ2FibGUgPyBvbkRyYWdTdGFydCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlck1vdmU9e2RyYWdnYWJsZSA/IG9uRHJhZ01vdmUgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJVcD17ZHJhZ2dhYmxlID8gb25EcmFnRW5kIDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBvbkxvc3RQb2ludGVyQ2FwdHVyZT17ZHJhZ2dhYmxlID8gb25EcmFnRW5kIDogdW5kZWZpbmVkfVxuICAgICAgc3R5bGU9e3sgY3Vyc29yOiBkcmFnZ2FibGUgPyAnZ3JhYicgOiB1bmRlZmluZWQsIHRvdWNoQWN0aW9uOiBkcmFnZ2FibGUgPyAnbWFuaXB1bGF0aW9uJyA6IHVuZGVmaW5lZCB9fVxuICAgID5cbiAgICAgIHtzaG91bGRSZW5kZXJTZWxlY3RvciA/IHJlbmRlck1vZGFsKCkgOiA8ZGl2IC8+fVxuICAgICAgPFNDQ0FJTUhXcmFwcGVyQnV0dG9uIGRhdGEtbm8tZHJhZz1cInRydWVcIj5cbiAgICAgICAge3Nob3dCYWNrQnV0dG9uICYmIChcbiAgICAgICAgICA8U0NDQUlNSEJhY2tCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBvbkJhY2soKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkxlZnQgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiMzNDM0MzNcIiAvPlxuICAgICAgICAgICAge3QoJ2JhY2snKX1cbiAgICAgICAgICA8L1NDQ0FJTUhCYWNrQnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICB7c2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uICYmIChcbiAgICAgICAgICA8U0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbH0+XG4gICAgICAgICAgICA8U0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dD57dCgnb3BlbkFnZW50Q3JlYXRvcicpfTwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dD5cbiAgICAgICAgICA8L1NDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51QW5jaG9yIHJlZj17bGF5b3V0TWVudVJlZn0gZGF0YS1uby1kcmFnPVwidHJ1ZVwiPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICBidXR0b25JZD1cImJ0bi1tYWlhLWxheW91dC1tZW51XCJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbGF5b3V0TWVudU9wZW4pIHtcbiAgICAgICAgICAgICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuVmlld09wdGlvbnMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2V0TGF5b3V0TWVudU9wZW4ocHJldiA9PiAhcHJldilcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0b29sdGlwPXt0KCdsYXlvdXRNZW51VG9vbHRpcCcpfVxuICAgICAgICAgICAgZGlzYWJsZVRvb2x0aXA9e2xheW91dE1lbnVPcGVufVxuICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRNZW51SWNvbiAvPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICB7bGF5b3V0TWVudU9wZW4gPyAoXG4gICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVQYW5lbCByb2xlPVwibWVudVwiPlxuICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnc2lkZWJhcid9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnc2lkZWJhcicpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dFNpZGViYXJJY29uIC8+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAge3QoJ2xheW91dFNpZGViYXInKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVBpY2tMYXlvdXQoJ2Z1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRGdWxsc2NyZWVuSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRGdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3c+XG4gICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdmbG9hdGluZyd9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnZmxvYXRpbmcnKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICB7dCgnbGF5b3V0RmxvYXRpbmcnKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVQYW5lbD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudUFuY2hvcj5cbiAgICAgICAge2hhbmRsZU1pbmltaXplID8gKFxuICAgICAgICAgIDxJY29uQnV0dG9uIGhhbmRsZUNsaWNrPXtoYW5kbGVNaW5pbWl6ZX0gdG9vbHRpcD17dCgnZ2xvYmFscy5taW5pbWl6ZScpfSB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgIDxTQ0NBSU1ITWluaW1pemVJY29uPlxuICAgICAgICAgICAgICA8U3RhdHVzIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0gLz5cbiAgICAgICAgICAgIDwvU0NDQUlNSE1pbmltaXplSWNvbj5cbiAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlckJ1dHRvbj5cbiAgICA8L1NDQ0FJTUhNb2RhbD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxRQUEyQyxPQUFPO0FBQzVHLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsTUFBTSxRQUFRLHlDQUF5QztBQUNoRSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxRQUFRLFFBQVEsaUNBQWlDO0FBQzFELFNBQVNDLGdCQUFnQixRQUFRLHVDQUF1QztBQUN4RSxTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFDbEUsU0FBU0MsVUFBVSxRQUFRLDhCQUE4QjtBQUN6RCxTQUFTQyxRQUFRLEVBQUVDLHNCQUFzQixRQUFRLHlCQUF5QjtBQUMxRSxTQUFTQyx5QkFBeUIsUUFBUSxtREFBbUQ7QUFDN0YsU0FBU0MsNEJBQTRCLFFBQVEsc0RBQXNEO0FBQ25HLFNBQVNDLDBCQUEwQixRQUFRLG9EQUFvRDtBQUMvRixTQUFTQyxpQkFBaUIsUUFBUSwwQ0FBMEM7QUFDNUUsU0FDRUMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsY0FBYyxFQUNkQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQywwQkFBMEIsRUFD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