@projectcor/maia-components 2.44.5-0 → 2.44.5

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 (427) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +51 -5
  4. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
  5. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
  6. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
  7. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
  8. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  11. package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
  12. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
  13. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  15. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
  18. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
  20. package/lib/components/index.js +1 -2
  21. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
  22. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
  23. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
  24. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
  25. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  26. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
  27. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
  28. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
  29. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
  30. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
  31. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  33. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
  35. package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
  36. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
  37. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  38. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
  39. package/lib/constants/permissions/index.js +2 -2
  40. package/lib/constants/permissions/utils.js +1 -4
  41. package/lib/dev/DevReasoningTimeline.js +37 -68
  42. package/lib/dev/Providers.js +3 -5
  43. package/lib/hooks/useChatManager/useChatManager.js +351 -76
  44. package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
  45. package/lib/hooks/useClientSearch.js +32 -4
  46. package/lib/hooks/useContextMentions.js +163 -2
  47. package/lib/hooks/useContextPinPopover.js +75 -16
  48. package/lib/hooks/useEntitySearch.js +391 -38
  49. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  50. package/lib/hooks/useMentionPopover.js +35 -9
  51. package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
  52. package/lib/hooks/useProjectSearch.js +58 -4
  53. package/lib/hooks/useProjectSummaryConfig.js +52 -14
  54. package/lib/hooks/useRecentClientsSearch.js +32 -4
  55. package/lib/index.js +2 -5
  56. package/lib/lang/br/index.js +9 -26
  57. package/lib/lang/en/index.js +9 -26
  58. package/lib/lang/es/index.js +9 -26
  59. package/lib/lang/fr/index.js +9 -26
  60. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  61. package/lib/services/maia/Agents/getAgents.js +242 -78
  62. package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
  63. package/lib/store/sessions/sessionNotifications.js +41 -35
  64. package/lib/store/sessions/sessionStreamManager.js +52 -40
  65. package/lib/styles/cascade.js +3 -29
  66. package/lib/styles/transitions.js +1 -3
  67. package/lib/types/agentModal.js +1 -1
  68. package/lib/types/global.d.js +1 -1
  69. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  70. package/lib/utils/imagePreprocessor.js +37 -12
  71. package/lib/utils/streamActivityMessages.js +21 -32
  72. package/package.json +1 -1
  73. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  74. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  75. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  76. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  77. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  78. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
  79. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
  80. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
  81. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  82. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
  83. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
  84. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
  85. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  86. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
  87. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
  88. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
  89. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
  90. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  91. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  92. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  93. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  94. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  95. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  96. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  97. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  98. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
  99. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  100. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  101. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
  102. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
  103. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  104. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
  105. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
  106. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
  107. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  108. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  109. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  110. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  111. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  112. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  113. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  114. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  115. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  116. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  117. package/lib/components/atoms/HelpButton.spec.js +0 -87
  118. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  119. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  120. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  121. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  122. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  123. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  124. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  125. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  126. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
  127. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
  128. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
  129. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
  130. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
  131. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
  132. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
  133. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  134. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  135. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  136. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  137. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  138. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  139. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  140. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  141. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
  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 -86
  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 -132
  150. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
  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 -4
  154. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
  155. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  156. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  157. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  158. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  159. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  160. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  161. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  162. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  163. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  164. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
  165. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  166. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  167. package/lib/components/atoms/WithAppCfg.spec.js +0 -60
  168. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
  169. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  170. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
  171. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
  172. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
  173. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
  174. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
  175. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
  176. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
  177. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
  178. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  179. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  180. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  181. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  182. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  183. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  184. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  185. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  186. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  187. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  188. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  189. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  190. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  191. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
  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.js +0 -54
  195. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
  196. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
  197. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  198. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
  199. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
  200. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
  201. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  202. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  203. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  204. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
  205. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  207. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  208. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  209. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  210. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  211. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  212. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
  213. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  214. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  215. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
  216. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  217. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
  218. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
  219. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  220. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  221. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  222. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  223. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  224. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  225. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  226. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
  227. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
  228. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
  229. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
  230. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  231. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
  232. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  233. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  234. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
  235. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  236. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  237. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  238. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  239. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
  240. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
  242. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
  243. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
  244. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  245. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  246. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  247. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  248. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  249. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  250. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  251. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  252. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  253. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  254. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  255. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  256. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  257. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  258. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  259. package/lib/constants/permissions/utils.spec.js +0 -128
  260. package/lib/dev/DevMaiaPage.js +0 -30
  261. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  262. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  263. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  264. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  265. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
  266. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  267. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
  268. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  269. package/lib/hooks/useCaretPosition.spec.js +0 -58
  270. package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
  271. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
  272. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
  273. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
  274. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
  275. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
  276. package/lib/hooks/useChats/useChats.spec.js +0 -208
  277. package/lib/hooks/useClientSearch.helpers.js +0 -36
  278. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  279. package/lib/hooks/useClientSearch.spec.js +0 -86
  280. package/lib/hooks/useContextMentions.helpers.js +0 -152
  281. package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
  282. package/lib/hooks/useContextMentions.spec.js +0 -239
  283. package/lib/hooks/useContextMentions.types.js +0 -2
  284. package/lib/hooks/useContextPinPopover.helpers.js +0 -95
  285. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
  286. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  287. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  288. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  289. package/lib/hooks/useDebounce.spec.js +0 -42
  290. package/lib/hooks/useEntitySearch.helpers.js +0 -359
  291. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
  292. package/lib/hooks/useEntitySearch.spec.js +0 -443
  293. package/lib/hooks/useEvent.spec.js +0 -45
  294. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  295. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
  296. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  297. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  298. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  299. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  300. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  301. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  302. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  303. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  304. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  305. package/lib/hooks/useMentionPopover.helpers.js +0 -41
  306. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
  307. package/lib/hooks/useMentionPopover.spec.js +0 -215
  308. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
  309. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
  310. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  311. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  312. package/lib/hooks/useModal/useModal.spec.js +0 -73
  313. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
  314. package/lib/hooks/useProjectSearch.helpers.js +0 -61
  315. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
  316. package/lib/hooks/useProjectSearch.spec.js +0 -91
  317. package/lib/hooks/useProjectSummary.spec.js +0 -193
  318. package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
  319. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
  320. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  321. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  322. package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
  323. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  324. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  325. package/lib/hooks/useRecentContexts.spec.js +0 -139
  326. package/lib/hooks/useResize.spec.js +0 -37
  327. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  328. package/lib/hooks/useSlashCommands.spec.js +0 -139
  329. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  330. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  331. package/lib/hooks/useStreamResponse.spec.js +0 -199
  332. package/lib/hooks/useT.spec.js +0 -20
  333. package/lib/hooks/useToggle.spec.js +0 -33
  334. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  335. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  336. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  337. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  338. package/lib/services/maia/Agents/connectors.spec.js +0 -359
  339. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  340. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  341. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  342. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  343. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  344. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  345. package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
  346. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
  347. package/lib/services/maia/Agents/getAgents.spec.js +0 -697
  348. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  349. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  350. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  351. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  352. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  353. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  354. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  355. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  356. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  357. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  358. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  359. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  360. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  361. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
  363. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  364. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  365. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  366. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  367. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  368. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  369. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  370. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  371. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  372. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  373. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  374. package/lib/services/maia/client.spec.js +0 -56
  375. package/lib/services/utils/fetchCOR.spec.js +0 -211
  376. package/lib/services/utils/getCookie.spec.js +0 -20
  377. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  378. package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
  379. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  380. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  381. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  382. package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
  383. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  384. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  385. package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
  386. package/lib/store/sessions/sessions.types.spec.js +0 -16
  387. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  388. package/lib/store/useChatsStore.spec.js +0 -619
  389. package/lib/store/useFaqsStore.spec.js +0 -57
  390. package/lib/test/mockSseStream.js +0 -121
  391. package/lib/test/streamdownCodeMock.js +0 -6
  392. package/lib/test/streamdownMock.js +0 -12
  393. package/lib/utils/actionCategoryMap.spec.js +0 -18
  394. package/lib/utils/agentDisplayName.spec.js +0 -44
  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 -38
  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 -100
  408. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  409. package/lib/utils/imagePreprocessor.helpers.js +0 -28
  410. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  411. package/lib/utils/imagePreprocessor.spec.js +0 -112
  412. package/lib/utils/maiaPageRoute.js +0 -24
  413. package/lib/utils/maiaPageRoute.spec.js +0 -23
  414. package/lib/utils/mapBackendLang.spec.js +0 -19
  415. package/lib/utils/navigateContextEntity.spec.js +0 -50
  416. package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
  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.spec.js +0 -158
  421. package/lib/utils/retryCompletion.spec.js +0 -99
  422. package/lib/utils/skillContentSize.spec.js +0 -13
  423. package/lib/utils/slashCommandMarker.spec.js +0 -43
  424. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  425. package/lib/utils/sseStreamContent.spec.js +0 -31
  426. package/lib/utils/streamActivityMessages.spec.js +0 -227
  427. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -20,9 +20,41 @@ import { useUser } from '../../../context/cor-user';
20
20
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
21
21
  import { useOnboardingNavigation } from '../../../hooks/useOnboardingNavigation';
22
22
  import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
23
- import { computeModelDropdownHeight, EMOJI_PORTAL_ID, filterAvailableAgentModels, resolveDropdownPosition, VALIDATION_FIELDS_RULES } from './AbmGeneralSection.helpers';
24
23
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
- var validationFieldsRules = VALIDATION_FIELDS_RULES;
24
+ var validationFieldsRules = {
25
+ name: 150,
26
+ userPrompt: 5000,
27
+ inputPlaceholder: 100,
28
+ introduction: 400
29
+ };
30
+ var MODEL_OPTION_HEIGHT = 58;
31
+ var MODEL_DROPDOWN_MAX_HEIGHT = 245;
32
+ var MODEL_DROPDOWN_GAP = 4;
33
+ var resolveDropdownPosition = function resolveDropdownPosition(anchor, dropdownHeight) {
34
+ var rect = anchor.getBoundingClientRect();
35
+ var spaceBelow = window.innerHeight - rect.bottom;
36
+ var spaceAbove = rect.top;
37
+ var placement = spaceBelow >= dropdownHeight || spaceBelow >= spaceAbove ? 'bottom' : 'top';
38
+ if (placement === 'bottom') {
39
+ return {
40
+ left: rect.left,
41
+ width: rect.width,
42
+ top: rect.bottom + MODEL_DROPDOWN_GAP,
43
+ placement: placement
44
+ };
45
+ }
46
+ return {
47
+ left: rect.left,
48
+ width: rect.width,
49
+ bottom: window.innerHeight - rect.top + MODEL_DROPDOWN_GAP,
50
+ placement: placement
51
+ };
52
+ };
53
+
54
+ // El picker se portea a un contenedor propio a nivel de body con position:fixed
55
+ // en el origen del viewport, para que el position:absolute que aplica la librería
56
+ // coincida con las coordenadas de getBoundingClientRect (inmune al scroll).
57
+ var EMOJI_PORTAL_ID = 'abm-general-emoji-portal';
26
58
  export var AbmGeneralSection = function AbmGeneralSection(_ref) {
27
59
  var _values$general$creat, _values$general$creat2, _values$general$userP, _formValues$aiModel4, _values$general$intro, _values$general$input;
28
60
  var values = _ref.values,
@@ -63,14 +95,16 @@ export var AbmGeneralSection = function AbmGeneralSection(_ref) {
63
95
  formValues = _useState8[0],
64
96
  setFormValues = _useState8[1];
65
97
  var availableAgentModels = useMemo(function () {
66
- return filterAvailableAgentModels(agentModels);
98
+ return agentModels.filter(function (model) {
99
+ return !model.is_deprecated;
100
+ });
67
101
  }, [agentModels]);
68
102
  var dropdownHeight = useMemo(function () {
69
- return computeModelDropdownHeight(availableAgentModels.length);
103
+ return Math.min(availableAgentModels.length * MODEL_OPTION_HEIGHT + 2, MODEL_DROPDOWN_MAX_HEIGHT);
70
104
  }, [availableAgentModels.length]);
71
105
  var updateDropdownPosition = useCallback(function () {
72
106
  if (!selectorRef.current) return;
73
- setDropdownPosition(resolveDropdownPosition(selectorRef.current.getBoundingClientRect(), dropdownHeight));
107
+ setDropdownPosition(resolveDropdownPosition(selectorRef.current, dropdownHeight));
74
108
  }, [dropdownHeight]);
75
109
  var handleOpenModalAiModel = function handleOpenModalAiModel() {
76
110
  eventAmplitude(EVENTS.selectModel);
@@ -378,4 +412,4 @@ export var AbmGeneralSection = function AbmGeneralSection(_ref) {
378
412
  }), renderModelDropdown()]
379
413
  });
380
414
  };
381
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwiY3JlYXRlUG9ydGFsIiwiUGx1cyIsIkNoZXZyb25Eb3duIiwiT3BlbiIsIkNVU2VsZWN0IiwiQnV0dG9uRW1vamkiLCJ1c2VUcmFuc2xhdGlvbiIsIlRvb2x0aXAiLCJBZ2VudE1haWFJY29uIiwiQ3VzdG9tSW5wdXQiLCJTQ0FHU1dyYXBwZXJTZWxlY3RvciIsIlNDQUdTU2VsZWN0b3JNb2RhbCIsIlNDQUdTT3B0aW9uIiwiU0NBR1NPcHRpb25MYWJlbCIsIlNDQUdTT3B0aW9uRGVzY3JpcHRpb24iLCJTQ0FHU1NlbGVjdG9yTW9kYWxDb250ZW50IiwiU0NBR1NXcmFwcGVyQ29udGVudCIsIlNDQUdTV3JhcHBlckVtb2ppIiwiU0NBR1NXcmFwcGVyQWRkSWNvbiIsIlNDQUdTQnV0dG9uRW1vamkiLCJTQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQiLCJTQ0FHU1dyYXBwZXJFbW9qaUljb24iLCJTQ0FHU1dyYXBwZXIiLCJTQ0FHU1dyYXBwZXJIZWFkZXIiLCJTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZSIsIlNDQUdTV3JhcHBlckhlYWRlckluZm8iLCJTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nIiwiU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQiLCJTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nVGV4dCIsIlNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQiLCJTQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQUdTV3JhcHBlckhlYWRlclRpdGxlUmVxdWlyZWQiLCJTQ0FHU0dlbmVyYWxDYXJkIiwiU0NBR1NGaWVsZFN1cmZhY2UiLCJTQ0FHU05vTW9kZWxzQXZhaWxhYmxlIiwiU0NBR1NPcHRpb25hbEZpZWxkcyIsIlNDQUdTT3B0aW9uYWxMYWJlbCIsIkN1c3RvbVRleHRBcmVhIiwidXNlVXNlciIsIkVWRU5UUyIsInVzZUV2ZW50IiwidXNlT25ib2FyZGluZ05hdmlnYXRpb24iLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiY29tcHV0ZU1vZGVsRHJvcGRvd25IZWlnaHQiLCJFTU9KSV9QT1JUQUxfSUQiLCJmaWx0ZXJBdmFpbGFibGVBZ2VudE1vZGVscyIsInJlc29sdmVEcm9wZG93blBvc2l0aW9uIiwiVkFMSURBVElPTl9GSUVMRFNfUlVMRVMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwidmFsaWRhdGlvbkZpZWxkc1J1bGVzIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJfcmVmIiwiX3ZhbHVlcyRnZW5lcmFsJGNyZWF0IiwiX3ZhbHVlcyRnZW5lcmFsJGNyZWF0MiIsIl92YWx1ZXMkZ2VuZXJhbCR1c2VyUCIsIl9mb3JtVmFsdWVzJGFpTW9kZWw0IiwiX3ZhbHVlcyRnZW5lcmFsJGludHJvIiwiX3ZhbHVlcyRnZW5lcmFsJGlucHV0IiwidmFsdWVzIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJhZ2VudE1vZGVscyIsImxvYWRpbmciLCJ0b29sdGlwWkluZGV4IiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VPbmJvYXJkaW5nTmF2aWdhdCIsImhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiZW1vamlQb3J0YWxaSW5kZXgiLCJtb2RlbERyb3Bkb3duWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwib3Blbk1vZGFsQWlNb2RlbCIsInNldE9wZW5Nb2RhbEFpTW9kZWwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRyb3Bkb3duUG9zaXRpb24iLCJzZXREcm9wZG93blBvc2l0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJmb2N1c2VkRmllbGQiLCJzZXRGb2N1c2VkRmllbGQiLCJzZWxlY3RvclJlZiIsIl91c2VTdGF0ZTciLCJuYW1lIiwiZ2VuZXJhbCIsImFpTW9kZWwiLCJpbnB1dFBsYWNlaG9sZGVyIiwiaW50cm9kdWN0aW9uIiwidXNlclByb21wdCIsImVtb2ppIiwiX3VzZVN0YXRlOCIsImZvcm1WYWx1ZXMiLCJzZXRGb3JtVmFsdWVzIiwiYXZhaWxhYmxlQWdlbnRNb2RlbHMiLCJkcm9wZG93bkhlaWdodCIsImxlbmd0aCIsInVwZGF0ZURyb3Bkb3duUG9zaXRpb24iLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGFuZGxlT3Blbk1vZGFsQWlNb2RlbCIsInNlbGVjdE1vZGVsIiwicHJldiIsImhhbmRsZVNlbGVjdE1vZGVsIiwibW9kZWwiLCJldmVudCIsIl9mb3JtVmFsdWVzJGFpTW9kZWwiLCJzdG9wUHJvcGFnYXRpb24iLCJpZCIsImNob29zZU1vZGVsIiwib3B0aW9uIiwiZGlzcGxheV9uYW1lIiwiX29iamVjdFNwcmVhZCIsImtleSIsInZhbHVlIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiaXNJbk1vZGFsIiwiY2xvc2VzdCIsImlzSW5PcHRpb24iLCJoYW5kbGVLZXlEb3duIiwicHJldmVudERlZmF1bHQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5kZWZpbmVkIiwiaGFuZGxlUmVwb3NpdGlvbiIsIndpbmRvdyIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiY3JlYXRlZCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInBvc2l0aW9uIiwidG9wIiwibGVmdCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInpJbmRleCIsIlN0cmluZyIsIl9jb250YWluZXIiLCJwYXJlbnROb2RlIiwiaGFzQ2hpbGROb2RlcyIsInJlbW92ZUNoaWxkIiwiaGFuZGxlU2V0R2VuZXJhbFZhbHVlcyIsImhhbmRsZVNlbGVjdEVtb2ppIiwiaGFuZGxlRm9jdXMiLCJmaWVsZE5hbWUiLCJoYW5kbGVCbHVyIiwicmVuZGVyTW9kZWxEcm9wZG93biIsIiRsZWZ0IiwiJHdpZHRoIiwid2lkdGgiLCIkdG9wIiwiJGJvdHRvbSIsImJvdHRvbSIsIiR6SW5kZXgiLCIkcGxhY2VtZW50IiwicGxhY2VtZW50IiwiY2hpbGRyZW4iLCJtYXAiLCJfZm9ybVZhbHVlcyRhaU1vZGVsMiIsIl9mb3JtVmFsdWVzJGFpTW9kZWwzIiwiaXNTZWxlY3RlZCIsIm9uQ2xpY2siLCJrZXl3b3JkIiwiJGluZGV4IiwiY3JlYXRlZF9ieSIsInRpdGxlIiwiaXNfZGVsZXRlZCIsInBvcnRhbElkIiwib25TZWxlY3QiLCJyZW5kZXJDb21wb25lbnQiLCJhIiwicmVmIiwiaWNvblJlZiIsInR5cGUiLCJoYW5kbGVPcGVuU3VnZ2VzdGlvbkxpc3QiLCJoZWlnaHQiLCJjb2xvciIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJ0b1N0cmluZyIsImxhYmVsIiwiY29uY2F0IiwicGxhY2Vob2xkZXIiLCJlcnJvck1lc3NhZ2UiLCJvbkNoYW5nZSIsImlucHV0S2V5IiwibWF4TGVuZ3RoIiwiaXNUcmltbWVkIiwiaGFuZGxlQ2hhbmdlIiwiY3VzdG9tSGVpZ2h0IiwiZW5kSWNvbiIsImhhbmRsZUNsaWNrQWN0aW9uIiwiZGlzYWJsZSIsIm9wZW4iLCJoaWRkZW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1HZW5lcmFsU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUGx1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BsdXMnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL09wZW4nXG5pbXBvcnQgeyBDVVNlbGVjdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3NlbGVjdG9yL2xpYi9jb21wb25lbnRzL0NVU2VsZWN0J1xuaW1wb3J0IHsgQnV0dG9uRW1vamkgfSBmcm9tICdAcHJvamVjdGNvci9lbW9qaS1yZWFjdGlvbidcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHR5cGUgTW9kYWxWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWdlbnRNYWlhSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0FnZW50TWFpYUljb24nXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uLy4uL2F0b21zL0lucHV0J1xuaW1wb3J0IHtcbiAgU0NBR1NXcmFwcGVyU2VsZWN0b3IsXG4gIFNDQUdTU2VsZWN0b3JNb2RhbCxcbiAgU0NBR1NPcHRpb24sXG4gIFNDQUdTT3B0aW9uTGFiZWwsXG4gIFNDQUdTT3B0aW9uRGVzY3JpcHRpb24sXG4gIFNDQUdTU2VsZWN0b3JNb2RhbENvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckNvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckVtb2ppLFxuICBTQ0FHU1dyYXBwZXJBZGRJY29uLFxuICBTQ0FHU0J1dHRvbkVtb2ppLFxuICBTQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckVtb2ppSWNvbixcbiAgU0NBR1NXcmFwcGVyLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXIsXG4gIFNDQUdTV3JhcHBlckhlYWRlclRpdGxlLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXJJbmZvLFxuICBTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nLFxuICBTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nQ29udGVudCxcbiAgU0NBR1NXcmFwcGVyT25ib2FyZGluZ1RleHQsXG4gIFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQsXG4gIFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHROYW1lLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkLFxuICBTQ0FHU0dlbmVyYWxDYXJkLFxuICBTQ0FHU0ZpZWxkU3VyZmFjZSxcbiAgU0NBR1NOb01vZGVsc0F2YWlsYWJsZSxcbiAgU0NBR1NPcHRpb25hbEZpZWxkcyxcbiAgU0NBR1NPcHRpb25hbExhYmVsLFxufSBmcm9tICcuL0FibUdlbmVyYWxTZWN0aW9uLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQ3VzdG9tVGV4dEFyZWEgfSBmcm9tICcuLi8uLi9hdG9tcy9UZXh0QXJlYS9DdXN0b21UZXh0QXJlYSdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgdXNlT25ib2FyZGluZ05hdmlnYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VPbmJvYXJkaW5nTmF2aWdhdGlvbidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHtcbiAgY29tcHV0ZU1vZGVsRHJvcGRvd25IZWlnaHQsXG4gIEVNT0pJX1BPUlRBTF9JRCxcbiAgZmlsdGVyQXZhaWxhYmxlQWdlbnRNb2RlbHMsXG4gIHJlc29sdmVEcm9wZG93blBvc2l0aW9uLFxuICBWQUxJREFUSU9OX0ZJRUxEU19SVUxFUyxcbiAgdHlwZSBEcm9wZG93blBvc2l0aW9uLFxufSBmcm9tICcuL0FibUdlbmVyYWxTZWN0aW9uLmhlbHBlcnMnXG5cbmNvbnN0IHZhbGlkYXRpb25GaWVsZHNSdWxlcyA9IFZBTElEQVRJT05fRklFTERTX1JVTEVTXG5cbmV4cG9ydCBjb25zdCBBYm1HZW5lcmFsU2VjdGlvbiA9ICh7XG4gIHZhbHVlcyxcbiAgaGFuZGxlU2V0QWdlbnRWYWx1ZXMsXG4gIGFnZW50TW9kZWxzLFxuICBsb2FkaW5nLFxuICB0b29sdGlwWkluZGV4LFxufToge1xuICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXVxuICBsb2FkaW5nOiBib29sZWFuXG4gIHRvb2x0aXBaSW5kZXg/OiBudW1iZXJcbn0pID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ2FibV9hZ2VudF9zZWN0aW9uJ10pXG4gIGNvbnN0IHsgaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24gfSA9IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKClcbiAgY29uc3QgZW1vamlQb3J0YWxaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICduZXN0ZWRNb2RhbCcpXG4gIGNvbnN0IG1vZGVsRHJvcGRvd25aSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICduZXN0ZWRNb2RhbCcpXG4gIGNvbnN0IFtvcGVuTW9kYWxBaU1vZGVsLCBzZXRPcGVuTW9kYWxBaU1vZGVsXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZHJvcGRvd25Qb3NpdGlvbiwgc2V0RHJvcGRvd25Qb3NpdGlvbl0gPSB1c2VTdGF0ZTxEcm9wZG93blBvc2l0aW9uIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2ZvY3VzZWRGaWVsZCwgc2V0Rm9jdXNlZEZpZWxkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlbGVjdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlPHtcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBhaU1vZGVsOiBBZ2VudE1vZGVsIHwgbnVsbFxuICAgIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZ1xuICAgIGludHJvZHVjdGlvbjogc3RyaW5nXG4gICAgdXNlclByb21wdDogc3RyaW5nXG4gICAgZW1vamk6IHN0cmluZ1xuICB9Pih7XG4gICAgbmFtZTogdmFsdWVzLmdlbmVyYWwubmFtZSB8fCAnJyxcbiAgICBhaU1vZGVsOiB2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6IHZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgfHwgJycsXG4gICAgaW50cm9kdWN0aW9uOiB2YWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gfHwgJycsXG4gICAgdXNlclByb21wdDogdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCB8fCAnJyxcbiAgICBlbW9qaTogdmFsdWVzLmdlbmVyYWwuZW1vamkgfHwgJycsXG4gIH0pXG5cbiAgY29uc3QgYXZhaWxhYmxlQWdlbnRNb2RlbHMgPSB1c2VNZW1vKCgpID0+IGZpbHRlckF2YWlsYWJsZUFnZW50TW9kZWxzKGFnZW50TW9kZWxzKSwgW2FnZW50TW9kZWxzXSlcblxuICBjb25zdCBkcm9wZG93bkhlaWdodCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gY29tcHV0ZU1vZGVsRHJvcGRvd25IZWlnaHQoYXZhaWxhYmxlQWdlbnRNb2RlbHMubGVuZ3RoKSxcbiAgICBbYXZhaWxhYmxlQWdlbnRNb2RlbHMubGVuZ3RoXVxuICApXG5cbiAgY29uc3QgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdG9yUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNldERyb3Bkb3duUG9zaXRpb24ocmVzb2x2ZURyb3Bkb3duUG9zaXRpb24oc2VsZWN0b3JSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZHJvcGRvd25IZWlnaHQpKVxuICB9LCBbZHJvcGRvd25IZWlnaHRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbEFpTW9kZWwgPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLnNlbGVjdE1vZGVsKVxuICAgIGlmICghb3Blbk1vZGFsQWlNb2RlbCkge1xuICAgICAgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpXG4gICAgfVxuICAgIHNldE9wZW5Nb2RhbEFpTW9kZWwocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE1vZGVsID0gKG1vZGVsOiBBZ2VudE1vZGVsLCBldmVudD86IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICAgIGlmIChtb2RlbC5pZCAhPT0gZm9ybVZhbHVlcz8uYWlNb2RlbD8uaWQpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jaG9vc2VNb2RlbCwgeyBvcHRpb246IG1vZGVsLmRpc3BsYXlfbmFtZSB9KVxuICAgICAgc2V0Rm9ybVZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGFpTW9kZWw6IG1vZGVsLFxuICAgICAgfSkpXG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcyh7IGtleTogJ2FpTW9kZWwnLCB2YWx1ZTogbW9kZWwgfSlcbiAgICB9XG4gICAgc2V0T3Blbk1vZGFsQWlNb2RlbChmYWxzZSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgaWYgKG9wZW5Nb2RhbEFpTW9kZWwpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgIGNvbnN0IGlzSW5Nb2RhbCA9IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1zZWxlY3Rvci1tb2RhbF0nKVxuICAgICAgICBjb25zdCBpc0luT3B0aW9uID0gdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNlbGVjdG9yLW9wdGlvbl0nKVxuXG4gICAgICAgIGlmICghaXNJbk1vZGFsICYmICFpc0luT3B0aW9uKSB7XG4gICAgICAgICAgc2V0T3Blbk1vZGFsQWlNb2RlbChmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnICYmIG9wZW5Nb2RhbEFpTW9kZWwpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBzZXRPcGVuTW9kYWxBaU1vZGVsKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcGVuTW9kYWxBaU1vZGVsKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFtvcGVuTW9kYWxBaU1vZGVsXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3Blbk1vZGFsQWlNb2RlbCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUmVwb3NpdGlvbiA9ICgpID0+IHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXBvc2l0aW9uKVxuICAgIC8vIGNhcHR1cmU6IGVsIEFCTSBzY3JvbGxlYSBlbiBjb250ZW5lZG9yZXMgaW50ZXJub3MsIG5vIGVuIHdpbmRvd1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVSZXBvc2l0aW9uLCB0cnVlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVSZXBvc2l0aW9uLCB0cnVlKVxuICAgIH1cbiAgfSwgW29wZW5Nb2RhbEFpTW9kZWwsIHVwZGF0ZURyb3Bkb3duUG9zaXRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEVNT0pJX1BPUlRBTF9JRClcbiAgICBjb25zdCBjcmVhdGVkID0gIWNvbnRhaW5lclxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgY29udGFpbmVyLmlkID0gRU1PSklfUE9SVEFMX0lEXG4gICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnXG4gICAgICBjb250YWluZXIuc3R5bGUudG9wID0gJzAnXG4gICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9ICcwJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gICAgfVxuICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBTdHJpbmcoZW1vamlQb3J0YWxaSW5kZXgpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjcmVhdGVkICYmIGNvbnRhaW5lcj8ucGFyZW50Tm9kZSAmJiAhY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpXG4gICAgICB9XG4gICAgfVxuICB9LCBbZW1vamlQb3J0YWxaSW5kZXhdKVxuXG4gIGNvbnN0IGhhbmRsZVNldEdlbmVyYWxWYWx1ZXMgPSAodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcyh7IGtleSwgdmFsdWUgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEVtb2ppID0gZW1vamkgPT4ge1xuICAgIGhhbmRsZVNldEdlbmVyYWxWYWx1ZXMoZW1vamkuZW1vamksICdlbW9qaScpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGb2N1cyA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHNldEZvY3VzZWRGaWVsZChmaWVsZE5hbWUpXG4gIH1cblxuICBjb25zdCBoYW5kbGVCbHVyID0gKCkgPT4ge1xuICAgIHNldEZvY3VzZWRGaWVsZChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGb3JtVmFsdWVzKHtcbiAgICAgIG5hbWU6IHZhbHVlcy5nZW5lcmFsLm5hbWUgfHwgJycsXG4gICAgICBhaU1vZGVsOiB2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsLFxuICAgICAgaW5wdXRQbGFjZWhvbGRlcjogdmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciB8fCAnJyxcbiAgICAgIGludHJvZHVjdGlvbjogdmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uIHx8ICcnLFxuICAgICAgdXNlclByb21wdDogdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCB8fCAnJyxcbiAgICAgIGVtb2ppOiB2YWx1ZXMuZ2VuZXJhbC5lbW9qaSB8fCAnJyxcbiAgICB9KVxuICB9LCBbdmFsdWVzLmdlbmVyYWxdKVxuXG4gIGNvbnN0IHJlbmRlck1vZGVsRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgaWYgKCFvcGVuTW9kYWxBaU1vZGVsIHx8ICFkcm9wZG93blBvc2l0aW9uKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICAgIDxTQ0FHU1NlbGVjdG9yTW9kYWxcbiAgICAgICAgZGF0YS1zZWxlY3Rvci1tb2RhbFxuICAgICAgICAkbGVmdD17ZHJvcGRvd25Qb3NpdGlvbi5sZWZ0fVxuICAgICAgICAkd2lkdGg9e2Ryb3Bkb3duUG9zaXRpb24ud2lkdGh9XG4gICAgICAgICR0b3A9e2Ryb3Bkb3duUG9zaXRpb24udG9wfVxuICAgICAgICAkYm90dG9tPXtkcm9wZG93blBvc2l0aW9uLmJvdHRvbX1cbiAgICAgICAgJHpJbmRleD17bW9kZWxEcm9wZG93blpJbmRleH1cbiAgICAgICAgJHBsYWNlbWVudD17ZHJvcGRvd25Qb3NpdGlvbi5wbGFjZW1lbnR9XG4gICAgICA+XG4gICAgICAgIDxTQ0FHU1NlbGVjdG9yTW9kYWxDb250ZW50PlxuICAgICAgICAgIHthdmFpbGFibGVBZ2VudE1vZGVscy5sZW5ndGggPT09IDAgJiYgIWxvYWRpbmcgPyAoXG4gICAgICAgICAgICA8U0NBR1NOb01vZGVsc0F2YWlsYWJsZT57dCgnZ2VuZXJhbFNlY3Rpb24ubm9Nb2RlbHNBdmFpbGFibGUnKX08L1NDQUdTTm9Nb2RlbHNBdmFpbGFibGU+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIGF2YWlsYWJsZUFnZW50TW9kZWxzLm1hcChtb2RlbCA9PiAoXG4gICAgICAgICAgICAgIDxTQ0FHU09wdGlvblxuICAgICAgICAgICAgICAgIGtleT17bW9kZWwuaWR9XG4gICAgICAgICAgICAgICAgdmFsdWU9e21vZGVsLmlkfVxuICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e21vZGVsLmlkID09PSBmb3JtVmFsdWVzPy5haU1vZGVsPy5pZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiBoYW5kbGVTZWxlY3RNb2RlbChtb2RlbCwgZXZlbnQpfVxuICAgICAgICAgICAgICAgIGRhdGEtc2VsZWN0b3Itb3B0aW9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NBR1NPcHRpb25MYWJlbCBpc1NlbGVjdGVkPXttb2RlbC5pZCA9PT0gZm9ybVZhbHVlcz8uYWlNb2RlbD8uaWR9PlxuICAgICAgICAgICAgICAgICAge21vZGVsLmRpc3BsYXlfbmFtZX1cbiAgICAgICAgICAgICAgICA8L1NDQUdTT3B0aW9uTGFiZWw+XG4gICAgICAgICAgICAgICAge21vZGVsLmtleXdvcmQgJiYgPFNDQUdTT3B0aW9uRGVzY3JpcHRpb24+e21vZGVsLmtleXdvcmR9PC9TQ0FHU09wdGlvbkRlc2NyaXB0aW9uPn1cbiAgICAgICAgICAgICAgPC9TQ0FHU09wdGlvbj5cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0FHU1NlbGVjdG9yTW9kYWxDb250ZW50PlxuICAgICAgPC9TQ0FHU1NlbGVjdG9yTW9kYWw+LFxuICAgICAgZG9jdW1lbnQuYm9keVxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDQUdTV3JhcHBlciBvcGVuTW9kYWxBaU1vZGVsPXtvcGVuTW9kYWxBaU1vZGVsfT5cbiAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXIgJGluZGV4PXswfT5cbiAgICAgICAgPFNDQUdTV3JhcHBlckhlYWRlclRpdGxlPlxuICAgICAgICAgIDxzcGFuPnt0KCdnZW5lcmFsU2VjdGlvbi5nZW5lcmFsU2V0dGluZ3MnKX08L3NwYW4+XG4gICAgICAgICAgPFNDQUdTV3JhcHBlckhlYWRlclRpdGxlUmVxdWlyZWQ+e3QoJ2dlbmVyYWxTZWN0aW9uLnJlcXVpcmVkRmllbGRzTGFiZWwnKX08L1NDQUdTV3JhcHBlckhlYWRlclRpdGxlUmVxdWlyZWQ+XG4gICAgICAgIDwvU0NBR1NXcmFwcGVySGVhZGVyVGl0bGU+XG4gICAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXJJbmZvPnt0KCdnZW5lcmFsU2VjdGlvbi5pbmZvTGFiZWwnKX08L1NDQUdTV3JhcHBlckhlYWRlckluZm8+XG4gICAgICA8L1NDQUdTV3JhcHBlckhlYWRlcj5cbiAgICAgIHsnY3JlYXRlZF9ieScgaW4gdmFsdWVzLmdlbmVyYWwgJiYgdmFsdWVzLmdlbmVyYWwuY3JlYXRlZF9ieSAmJiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgekluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgIHZhbHVlcy5nZW5lcmFsLmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWRcbiAgICAgICAgICAgICAgPyB0KCdnZW5lcmFsU2VjdGlvbi5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpXG4gICAgICAgICAgICAgIDogdCgnZ2VuZXJhbFNlY3Rpb24uY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbFNlY3Rpb24uY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0TmFtZT57dmFsdWVzLmdlbmVyYWwuY3JlYXRlZF9ieT8ubmFtZX08L1NDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHROYW1lPlxuICAgICAgICAgIDwvU0NBR1NXcmFwcGVySGVhZGVyQ3JlYXRlZEJ5VGV4dD5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgKX1cbiAgICAgIDxTQ0FHU0dlbmVyYWxDYXJkICRpbmRleD17MX0+XG4gICAgICAgIDxTQ0FHU1dyYXBwZXJDb250ZW50PlxuICAgICAgICAgIDxTQ0FHU1dyYXBwZXJFbW9qaT5cbiAgICAgICAgICAgIDxCdXR0b25FbW9qaVxuICAgICAgICAgICAgICBwb3J0YWxJZD17RU1PSklfUE9SVEFMX0lEfVxuICAgICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0RW1vaml9XG4gICAgICAgICAgICAgIHJlbmRlckNvbXBvbmVudD17YSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxTQ0FHU0J1dHRvbkVtb2ppXG4gICAgICAgICAgICAgICAgICAgIHJlZj17YS5pY29uUmVmfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YS5oYW5kbGVPcGVuU3VnZ2VzdGlvbkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWdlbmVyYWwtZW1vamktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUdTV3JhcHBlckVtb2ppQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBR1NXcmFwcGVyRW1vamlJY29uPntmb3JtVmFsdWVzLmVtb2ppIHx8IDxBZ2VudE1haWFJY29uIC8+fTwvU0NBR1NXcmFwcGVyRW1vamlJY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FHU1dyYXBwZXJBZGRJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXMgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSBjb2xvcj1cInJnYmEoMTM1LCA2NCwgMTkxLCAxKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FHU1dyYXBwZXJBZGRJY29uPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQUdTV3JhcHBlckVtb2ppQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvU0NBR1NCdXR0b25FbW9qaT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNvbXBhbnlJZD17dXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBR1NXcmFwcGVyRW1vamk+XG4gICAgICAgICAgPFNDQUdTRmllbGRTdXJmYWNlPlxuICAgICAgICAgICAgPEN1c3RvbUlucHV0XG4gICAgICAgICAgICAgIGxhYmVsPXtgJHt0KCdnZW5lcmFsU2VjdGlvbi5uYW1lJyl9ICogKCR7dmFsdWVzLmdlbmVyYWwubmFtZS5sZW5ndGggfHwgMH0tJHt2YWxpZGF0aW9uRmllbGRzUnVsZXMubmFtZX0pYH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWxTZWN0aW9uLm5hbWVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U9e3QoJ2dlbmVyYWxTZWN0aW9uLmVycm9yLm1heENhcmFjdGVyTmFtZScpfVxuICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcz8ubmFtZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNldEdlbmVyYWxWYWx1ZXN9XG4gICAgICAgICAgICAgIGlucHV0S2V5PVwibmFtZVwiXG4gICAgICAgICAgICAgIGhhbmRsZUZvY3VzPXtoYW5kbGVGb2N1c31cbiAgICAgICAgICAgICAgaGFuZGxlQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgICAgICAgZm9jdXNlZEZpZWxkPXtmb2N1c2VkRmllbGR9XG4gICAgICAgICAgICAgIG1heExlbmd0aD17dmFsaWRhdGlvbkZpZWxkc1J1bGVzLm5hbWV9XG4gICAgICAgICAgICAgIGlzVHJpbW1lZFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQUdTRmllbGRTdXJmYWNlPlxuICAgICAgICA8L1NDQUdTV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgIDxTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nPlxuICAgICAgICAgIDxTQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgICAgIDxDdXN0b21UZXh0QXJlYVxuICAgICAgICAgICAgICBsYWJlbD17YCR7dCgnZ2VuZXJhbFNlY3Rpb24uaW5pdGlhbFByb21wdCcpfSAqICgke3ZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/Lmxlbmd0aCB8fCAwfS0ke3ZhbGlkYXRpb25GaWVsZHNSdWxlcy51c2VyUHJvbXB0fSlgfVxuICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcz8udXNlclByb21wdH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHRQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U9e2hhbmRsZVNldEdlbmVyYWxWYWx1ZXN9XG4gICAgICAgICAgICAgIGhhbmRsZUZvY3VzPXtoYW5kbGVGb2N1c31cbiAgICAgICAgICAgICAgaGFuZGxlQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgICAgICAgZm9jdXNlZEZpZWxkPXtmb2N1c2VkRmllbGR9XG4gICAgICAgICAgICAgIGlucHV0S2V5PVwidXNlclByb21wdFwiXG4gICAgICAgICAgICAgIG1heExlbmd0aD17dmFsaWRhdGlvbkZpZWxkc1J1bGVzLnVzZXJQcm9tcHR9XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZT17dCgnZ2VuZXJhbFNlY3Rpb24uZXJyb3IubWF4Q2FyYWN0ZXJJbml0aWFsUHJvbXB0Jyl9XG4gICAgICAgICAgICAgIGN1c3RvbUhlaWdodD17MTcwfVxuICAgICAgICAgICAgICBpc1RyaW1tZWRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgICA8U0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQgb25DbGljaz17KCkgPT4gaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24oJ2hvd1RvV3JpdGVQcm9tcHQnKX0+XG4gICAgICAgICAgICA8U0NBR1NXcmFwcGVyT25ib2FyZGluZ1RleHQ+e3QoJ2dlbmVyYWxTZWN0aW9uLmhvd1RvV3JpdGVQcm9tcHQnKX08L1NDQUdTV3JhcHBlck9uYm9hcmRpbmdUZXh0PnsnICd9XG4gICAgICAgICAgICA8T3BlbiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGNvbG9yPVwiIzAwNmZhZlwiIC8+XG4gICAgICAgICAgPC9TQ0FHU1dyYXBwZXJPbmJvYXJkaW5nQ29udGVudD5cbiAgICAgICAgPC9TQ0FHU1dyYXBwZXJPbmJvYXJkaW5nPlxuICAgICAgICA8U0NBR1NXcmFwcGVyT25ib2FyZGluZz5cbiAgICAgICAgICA8U0NBR1NXcmFwcGVyU2VsZWN0b3IgcmVmPXtzZWxlY3RvclJlZn0gZGF0YS1zZWxlY3Rvci1tb2RhbD5cbiAgICAgICAgICAgIDxTQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgICAgICAgPENVU2VsZWN0XG4gICAgICAgICAgICAgICAgdGl0bGU9e3QoJ2dlbmVyYWxTZWN0aW9uLm1vZGVsQWlMYWJlbCcpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtsb2FkaW5nID8gJ0NhcmdhbmRvIG1vZGVsb3MuLi4nIDogJ1NlbGVjY2lvbmFyIG1vZGVsbyd9XG4gICAgICAgICAgICAgICAgZW5kSWNvbj17PENoZXZyb25Eb3duIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiBjb2xvcj17bG9hZGluZyA/ICcjYmZiZmJmJyA6ICcjOTk5OTk5J30gLz59XG4gICAgICAgICAgICAgICAgaGFuZGxlQ2xpY2tBY3Rpb249e2hhbmRsZU9wZW5Nb2RhbEFpTW9kZWx9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXM/LmFpTW9kZWw/LmRpc3BsYXlfbmFtZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlPXtsb2FkaW5nfVxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb2RhbEFpTW9kZWx9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7LyogQ1VTZWxlY3QgZXhpZ2UgY2hpbGRyZW4gcGFyYSBoYWJpbGl0YXIgZWwgY2xpY2s7IGVsIG1lbsO6IHJlYWwgdmEgcG9yIHBvcnRhbC4gKi99XG4gICAgICAgICAgICAgICAgPHNwYW4gaGlkZGVuIGFyaWEtaGlkZGVuIC8+XG4gICAgICAgICAgICAgIDwvQ1VTZWxlY3Q+XG4gICAgICAgICAgICA8L1NDQUdTRmllbGRTdXJmYWNlPlxuICAgICAgICAgIDwvU0NBR1NXcmFwcGVyU2VsZWN0b3I+XG4gICAgICAgICAgPFNDQUdTV3JhcHBlck9uYm9hcmRpbmdDb250ZW50IG9uQ2xpY2s9eygpID0+IGhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKCd3aGF0SXNNb2RlbEFpJyl9PlxuICAgICAgICAgICAgPFNDQUdTV3JhcHBlck9uYm9hcmRpbmdUZXh0Pnt0KCdnZW5lcmFsU2VjdGlvbi53aGF0SXNNb2RlbEFpJyl9PC9TQ0FHU1dyYXBwZXJPbmJvYXJkaW5nVGV4dD57JyAnfVxuICAgICAgICAgICAgPE9wZW4gd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMwMDZmYWZcIiAvPlxuICAgICAgICAgIDwvU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQ+XG4gICAgICAgIDwvU0NBR1NXcmFwcGVyT25ib2FyZGluZz5cbiAgICAgIDwvU0NBR1NHZW5lcmFsQ2FyZD5cbiAgICAgIDxTQ0FHU09wdGlvbmFsRmllbGRzICRpbmRleD17Mn0+XG4gICAgICAgIDxTQ0FHU09wdGlvbmFsTGFiZWw+e3QoJ2dlbmVyYWxTZWN0aW9uLm9wdGlvbmFsTGFiZWwnKX08L1NDQUdTT3B0aW9uYWxMYWJlbD5cbiAgICAgICAgPEN1c3RvbVRleHRBcmVhXG4gICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXM/LmludHJvZHVjdGlvbn1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZ2VuZXJhbFNlY3Rpb24uaW50cm9kdWN0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICBoYW5kbGVDaGFuZ2U9e2hhbmRsZVNldEdlbmVyYWxWYWx1ZXN9XG4gICAgICAgICAgaGFuZGxlRm9jdXM9e2hhbmRsZUZvY3VzfVxuICAgICAgICAgIGhhbmRsZUJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgICAgZm9jdXNlZEZpZWxkPXtmb2N1c2VkRmllbGR9XG4gICAgICAgICAgaW5wdXRLZXk9XCJpbnRyb2R1Y3Rpb25cIlxuICAgICAgICAgIGxhYmVsPXtgJHt0KCdnZW5lcmFsU2VjdGlvbi5pbnRyb2R1Y3Rpb24nKX0gKCR7dmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uPy5sZW5ndGggfHwgMH0tJHt2YWxpZGF0aW9uRmllbGRzUnVsZXMuaW50cm9kdWN0aW9ufSlgfVxuICAgICAgICAgIGVycm9yTWVzc2FnZT17dCgnZ2VuZXJhbFNlY3Rpb24uZXJyb3IubWF4Q2FyYWN0ZXJJbnRyb2R1Y3Rpb24nKX1cbiAgICAgICAgICBtYXhMZW5ndGg9e3ZhbGlkYXRpb25GaWVsZHNSdWxlcy5pbnRyb2R1Y3Rpb259XG4gICAgICAgIC8+XG4gICAgICAgIDxDdXN0b21JbnB1dFxuICAgICAgICAgIGxhYmVsPXtgJHt0KCdnZW5lcmFsU2VjdGlvbi5pbnB1dFBsYWNlaG9sZGVyVGl0bGUnKX0gKCR7dmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlcj8ubGVuZ3RoIHx8IDB9LSR7dmFsaWRhdGlvbkZpZWxkc1J1bGVzLmlucHV0UGxhY2Vob2xkZXJ9KWB9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWxTZWN0aW9uLmlucHV0UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICBpbnB1dEtleT1cImlucHV0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgIGVycm9yTWVzc2FnZT17dCgnZ2VuZXJhbFNlY3Rpb24uZXJyb3IubWF4SW5wdXRQbGFjZWhvbGRlcicpfVxuICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzPy5pbnB1dFBsYWNlaG9sZGVyfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZXRHZW5lcmFsVmFsdWVzfVxuICAgICAgICAgIGhhbmRsZUZvY3VzPXtoYW5kbGVGb2N1c31cbiAgICAgICAgICBoYW5kbGVCbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAgIGZvY3VzZWRGaWVsZD17Zm9jdXNlZEZpZWxkfVxuICAgICAgICAgIG1heExlbmd0aD17dmFsaWRhdGlvbkZpZWxkc1J1bGVzLmlucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1NDQUdTT3B0aW9uYWxGaWVsZHM+XG4gICAgICB7cmVuZGVyTW9kZWxEcm9wZG93bigpfVxuICAgIDwvU0NBR1NXcmFwcGVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBLE9BQU9BLEtBQUssSUFBSUMsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxXQUFXLFFBQVEsT0FBTztBQUNoRixTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxRQUFRLFFBQVEsOENBQThDO0FBQ3ZFLFNBQVNDLFdBQVcsUUFBUSw0QkFBNEI7QUFDeEQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0RSxTQUFTQyxhQUFhLFFBQVEsaUNBQWlDO0FBQy9ELFNBQVNDLFdBQVcsUUFBUSxtQkFBbUI7QUFDL0MsU0FDRUMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLFdBQVcsRUFDWEMsZ0JBQWdCLEVBQ2hCQyxzQkFBc0IsRUFDdEJDLHlCQUF5QixFQUN6QkMsbUJBQW1CLEVBQ25CQyxpQkFBaUIsRUFDakJDLG1CQUFtQixFQUNuQkMsZ0JBQWdCLEVBQ2hCQyx3QkFB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
415
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwiY3JlYXRlUG9ydGFsIiwiUGx1cyIsIkNoZXZyb25Eb3duIiwiT3BlbiIsIkNVU2VsZWN0IiwiQnV0dG9uRW1vamkiLCJ1c2VUcmFuc2xhdGlvbiIsIlRvb2x0aXAiLCJBZ2VudE1haWFJY29uIiwiQ3VzdG9tSW5wdXQiLCJTQ0FHU1dyYXBwZXJTZWxlY3RvciIsIlNDQUdTU2VsZWN0b3JNb2RhbCIsIlNDQUdTT3B0aW9uIiwiU0NBR1NPcHRpb25MYWJlbCIsIlNDQUdTT3B0aW9uRGVzY3JpcHRpb24iLCJTQ0FHU1NlbGVjdG9yTW9kYWxDb250ZW50IiwiU0NBR1NXcmFwcGVyQ29udGVudCIsIlNDQUdTV3JhcHBlckVtb2ppIiwiU0NBR1NXcmFwcGVyQWRkSWNvbiIsIlNDQUdTQnV0dG9uRW1vamkiLCJTQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQiLCJTQ0FHU1dyYXBwZXJFbW9qaUljb24iLCJTQ0FHU1dyYXBwZXIiLCJTQ0FHU1dyYXBwZXJIZWFkZXIiLCJTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZSIsIlNDQUdTV3JhcHBlckhlYWRlckluZm8iLCJTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nIiwiU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQiLCJTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nVGV4dCIsIlNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQiLCJTQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQUdTV3JhcHBlckhlYWRlclRpdGxlUmVxdWlyZWQiLCJTQ0FHU0dlbmVyYWxDYXJkIiwiU0NBR1NGaWVsZFN1cmZhY2UiLCJTQ0FHU05vTW9kZWxzQXZhaWxhYmxlIiwiU0NBR1NPcHRpb25hbEZpZWxkcyIsIlNDQUdTT3B0aW9uYWxMYWJlbCIsIkN1c3RvbVRleHRBcmVhIiwidXNlVXNlciIsIkVWRU5UUyIsInVzZUV2ZW50IiwidXNlT25ib2FyZGluZ05hdmlnYXRpb24iLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsInZhbGlkYXRpb25GaWVsZHNSdWxlcyIsIm5hbWUiLCJ1c2VyUHJvbXB0IiwiaW5wdXRQbGFjZWhvbGRlciIsImludHJvZHVjdGlvbiIsIk1PREVMX09QVElPTl9IRUlHSFQiLCJNT0RFTF9EUk9QRE9XTl9NQVhfSEVJR0hUIiwiTU9ERUxfRFJPUERPV05fR0FQIiwicmVzb2x2ZURyb3Bkb3duUG9zaXRpb24iLCJhbmNob3IiLCJkcm9wZG93bkhlaWdodCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzcGFjZUJlbG93Iiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzcGFjZUFib3ZlIiwidG9wIiwicGxhY2VtZW50IiwibGVmdCIsIndpZHRoIiwiRU1PSklfUE9SVEFMX0lEIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJfcmVmIiwiX3ZhbHVlcyRnZW5lcmFsJGNyZWF0IiwiX3ZhbHVlcyRnZW5lcmFsJGNyZWF0MiIsIl92YWx1ZXMkZ2VuZXJhbCR1c2VyUCIsIl9mb3JtVmFsdWVzJGFpTW9kZWw0IiwiX3ZhbHVlcyRnZW5lcmFsJGludHJvIiwiX3ZhbHVlcyRnZW5lcmFsJGlucHV0IiwidmFsdWVzIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJhZ2VudE1vZGVscyIsImxvYWRpbmciLCJ0b29sdGlwWkluZGV4IiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VPbmJvYXJkaW5nTmF2aWdhdCIsImhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiZW1vamlQb3J0YWxaSW5kZXgiLCJtb2RlbERyb3Bkb3duWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwib3Blbk1vZGFsQWlNb2RlbCIsInNldE9wZW5Nb2RhbEFpTW9kZWwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRyb3Bkb3duUG9zaXRpb24iLCJzZXREcm9wZG93blBvc2l0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJmb2N1c2VkRmllbGQiLCJzZXRGb2N1c2VkRmllbGQiLCJzZWxlY3RvclJlZiIsIl91c2VTdGF0ZTciLCJnZW5lcmFsIiwiYWlNb2RlbCIsImVtb2ppIiwiX3VzZVN0YXRlOCIsImZvcm1WYWx1ZXMiLCJzZXRGb3JtVmFsdWVzIiwiYXZhaWxhYmxlQWdlbnRNb2RlbHMiLCJmaWx0ZXIiLCJtb2RlbCIsImlzX2RlcHJlY2F0ZWQiLCJNYXRoIiwibWluIiwibGVuZ3RoIiwidXBkYXRlRHJvcGRvd25Qb3NpdGlvbiIsImN1cnJlbnQiLCJoYW5kbGVPcGVuTW9kYWxBaU1vZGVsIiwic2VsZWN0TW9kZWwiLCJwcmV2IiwiaGFuZGxlU2VsZWN0TW9kZWwiLCJldmVudCIsIl9mb3JtVmFsdWVzJGFpTW9kZWwiLCJzdG9wUHJvcGFnYXRpb24iLCJpZCIsImNob29zZU1vZGVsIiwib3B0aW9uIiwiZGlzcGxheV9uYW1lIiwiX29iamVjdFNwcmVhZCIsImtleSIsInZhbHVlIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiaXNJbk1vZGFsIiwiY2xvc2VzdCIsImlzSW5PcHRpb24iLCJoYW5kbGVLZXlEb3duIiwicHJldmVudERlZmF1bHQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5kZWZpbmVkIiwiaGFuZGxlUmVwb3NpdGlvbiIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiY3JlYXRlZCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInBvc2l0aW9uIiwiYm9keSIsImFwcGVuZENoaWxkIiwiekluZGV4IiwiU3RyaW5nIiwiX2NvbnRhaW5lciIsInBhcmVudE5vZGUiLCJoYXNDaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGQiLCJoYW5kbGVTZXRHZW5lcmFsVmFsdWVzIiwiaGFuZGxlU2VsZWN0RW1vamkiLCJoYW5kbGVGb2N1cyIsImZpZWxkTmFtZSIsImhhbmRsZUJsdXIiLCJyZW5kZXJNb2RlbERyb3Bkb3duIiwiJGxlZnQiLCIkd2lkdGgiLCIkdG9wIiwiJGJvdHRvbSIsIiR6SW5kZXgiLCIkcGxhY2VtZW50IiwiY2hpbGRyZW4iLCJtYXAiLCJfZm9ybVZhbHVlcyRhaU1vZGVsMiIsIl9mb3JtVmFsdWVzJGFpTW9kZWwzIiwiaXNTZWxlY3RlZCIsIm9uQ2xpY2siLCJrZXl3b3JkIiwiJGluZGV4IiwiY3JlYXRlZF9ieSIsInRpdGxlIiwiaXNfZGVsZXRlZCIsInBvcnRhbElkIiwib25TZWxlY3QiLCJyZW5kZXJDb21wb25lbnQiLCJhIiwicmVmIiwiaWNvblJlZiIsInR5cGUiLCJoYW5kbGVPcGVuU3VnZ2VzdGlvbkxpc3QiLCJoZWlnaHQiLCJjb2xvciIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJ0b1N0cmluZyIsImxhYmVsIiwiY29uY2F0IiwicGxhY2Vob2xkZXIiLCJlcnJvck1lc3NhZ2UiLCJvbkNoYW5nZSIsImlucHV0S2V5IiwibWF4TGVuZ3RoIiwiaXNUcmltbWVkIiwiaGFuZGxlQ2hhbmdlIiwiY3VzdG9tSGVpZ2h0IiwiZW5kSWNvbiIsImhhbmRsZUNsaWNrQWN0aW9uIiwiZGlzYWJsZSIsIm9wZW4iLCJoaWRkZW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1HZW5lcmFsU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUGx1cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BsdXMnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL09wZW4nXG5pbXBvcnQgeyBDVVNlbGVjdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3NlbGVjdG9yL2xpYi9jb21wb25lbnRzL0NVU2VsZWN0J1xuaW1wb3J0IHsgQnV0dG9uRW1vamkgfSBmcm9tICdAcHJvamVjdGNvci9lbW9qaS1yZWFjdGlvbidcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHR5cGUgTW9kYWxWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWdlbnRNYWlhSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0FnZW50TWFpYUljb24nXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uLy4uL2F0b21zL0lucHV0J1xuaW1wb3J0IHtcbiAgU0NBR1NXcmFwcGVyU2VsZWN0b3IsXG4gIFNDQUdTU2VsZWN0b3JNb2RhbCxcbiAgU0NBR1NPcHRpb24sXG4gIFNDQUdTT3B0aW9uTGFiZWwsXG4gIFNDQUdTT3B0aW9uRGVzY3JpcHRpb24sXG4gIFNDQUdTU2VsZWN0b3JNb2RhbENvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckNvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckVtb2ppLFxuICBTQ0FHU1dyYXBwZXJBZGRJY29uLFxuICBTQ0FHU0J1dHRvbkVtb2ppLFxuICBTQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQsXG4gIFNDQUdTV3JhcHBlckVtb2ppSWNvbixcbiAgU0NBR1NXcmFwcGVyLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXIsXG4gIFNDQUdTV3JhcHBlckhlYWRlclRpdGxlLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXJJbmZvLFxuICBTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nLFxuICBTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nQ29udGVudCxcbiAgU0NBR1NXcmFwcGVyT25ib2FyZGluZ1RleHQsXG4gIFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQsXG4gIFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHROYW1lLFxuICBTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkLFxuICBTQ0FHU0dlbmVyYWxDYXJkLFxuICBTQ0FHU0ZpZWxkU3VyZmFjZSxcbiAgU0NBR1NOb01vZGVsc0F2YWlsYWJsZSxcbiAgU0NBR1NPcHRpb25hbEZpZWxkcyxcbiAgU0NBR1NPcHRpb25hbExhYmVsLFxufSBmcm9tICcuL0FibUdlbmVyYWxTZWN0aW9uLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQ3VzdG9tVGV4dEFyZWEgfSBmcm9tICcuLi8uLi9hdG9tcy9UZXh0QXJlYS9DdXN0b21UZXh0QXJlYSdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgdXNlT25ib2FyZGluZ05hdmlnYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VPbmJvYXJkaW5nTmF2aWdhdGlvbidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuXG5jb25zdCB2YWxpZGF0aW9uRmllbGRzUnVsZXMgPSB7XG4gIG5hbWU6IDE1MCxcbiAgdXNlclByb21wdDogNTAwMCxcbiAgaW5wdXRQbGFjZWhvbGRlcjogMTAwLFxuICBpbnRyb2R1Y3Rpb246IDQwMCxcbn1cblxuY29uc3QgTU9ERUxfT1BUSU9OX0hFSUdIVCA9IDU4XG5jb25zdCBNT0RFTF9EUk9QRE9XTl9NQVhfSEVJR0hUID0gMjQ1XG5jb25zdCBNT0RFTF9EUk9QRE9XTl9HQVAgPSA0XG5cbnR5cGUgRHJvcGRvd25QbGFjZW1lbnQgPSAndG9wJyB8ICdib3R0b20nXG5cbnR5cGUgRHJvcGRvd25Qb3NpdGlvbiA9IHtcbiAgbGVmdDogbnVtYmVyXG4gIHdpZHRoOiBudW1iZXJcbiAgdG9wPzogbnVtYmVyXG4gIGJvdHRvbT86IG51bWJlclxuICBwbGFjZW1lbnQ6IERyb3Bkb3duUGxhY2VtZW50XG59XG5cbmNvbnN0IHJlc29sdmVEcm9wZG93blBvc2l0aW9uID0gKGFuY2hvcjogSFRNTEVsZW1lbnQsIGRyb3Bkb3duSGVpZ2h0OiBudW1iZXIpOiBEcm9wZG93blBvc2l0aW9uID0+IHtcbiAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b21cbiAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wXG4gIGNvbnN0IHBsYWNlbWVudDogRHJvcGRvd25QbGFjZW1lbnQgPSBzcGFjZUJlbG93ID49IGRyb3Bkb3duSGVpZ2h0IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSA/ICdib3R0b20nIDogJ3RvcCdcblxuICBpZiAocGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgIHRvcDogcmVjdC5ib3R0b20gKyBNT0RFTF9EUk9QRE9XTl9HQVAsXG4gICAgICBwbGFjZW1lbnQsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCArIE1PREVMX0RST1BET1dOX0dBUCxcbiAgICBwbGFjZW1lbnQsXG4gIH1cbn1cblxuLy8gRWwgcGlja2VyIHNlIHBvcnRlYSBhIHVuIGNvbnRlbmVkb3IgcHJvcGlvIGEgbml2ZWwgZGUgYm9keSBjb24gcG9zaXRpb246Zml4ZWRcbi8vIGVuIGVsIG9yaWdlbiBkZWwgdmlld3BvcnQsIHBhcmEgcXVlIGVsIHBvc2l0aW9uOmFic29sdXRlIHF1ZSBhcGxpY2EgbGEgbGlicmVyw61hXG4vLyBjb2luY2lkYSBjb24gbGFzIGNvb3JkZW5hZGFzIGRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCAoaW5tdW5lIGFsIHNjcm9sbCkuXG5jb25zdCBFTU9KSV9QT1JUQUxfSUQgPSAnYWJtLWdlbmVyYWwtZW1vamktcG9ydGFsJ1xuXG5leHBvcnQgY29uc3QgQWJtR2VuZXJhbFNlY3Rpb24gPSAoe1xuICB2YWx1ZXMsXG4gIGhhbmRsZVNldEFnZW50VmFsdWVzLFxuICBhZ2VudE1vZGVscyxcbiAgbG9hZGluZyxcbiAgdG9vbHRpcFpJbmRleCxcbn06IHtcbiAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW11cbiAgbG9hZGluZzogYm9vbGVhblxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG59KSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oWydhYm1fYWdlbnRfc2VjdGlvbiddKVxuICBjb25zdCB7IGhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIH0gPSB1c2VPbmJvYXJkaW5nTmF2aWdhdGlvbigpXG4gIGNvbnN0IGVtb2ppUG9ydGFsWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCBtb2RlbERyb3Bkb3duWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCBbb3Blbk1vZGFsQWlNb2RlbCwgc2V0T3Blbk1vZGFsQWlNb2RlbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Ryb3Bkb3duUG9zaXRpb24sIHNldERyb3Bkb3duUG9zaXRpb25dID0gdXNlU3RhdGU8RHJvcGRvd25Qb3NpdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtmb2N1c2VkRmllbGQsIHNldEZvY3VzZWRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzZWxlY3RvclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICBjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZTx7XG4gICAgbmFtZTogc3RyaW5nXG4gICAgYWlNb2RlbDogQWdlbnRNb2RlbCB8IG51bGxcbiAgICBpbnB1dFBsYWNlaG9sZGVyOiBzdHJpbmdcbiAgICBpbnRyb2R1Y3Rpb246IHN0cmluZ1xuICAgIHVzZXJQcm9tcHQ6IHN0cmluZ1xuICAgIGVtb2ppOiBzdHJpbmdcbiAgfT4oe1xuICAgIG5hbWU6IHZhbHVlcy5nZW5lcmFsLm5hbWUgfHwgJycsXG4gICAgYWlNb2RlbDogdmFsdWVzLmdlbmVyYWwuYWlNb2RlbCxcbiAgICBpbnB1dFBsYWNlaG9sZGVyOiB2YWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyIHx8ICcnLFxuICAgIGludHJvZHVjdGlvbjogdmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uIHx8ICcnLFxuICAgIHVzZXJQcm9tcHQ6IHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgfHwgJycsXG4gICAgZW1vamk6IHZhbHVlcy5nZW5lcmFsLmVtb2ppIHx8ICcnLFxuICB9KVxuXG4gIGNvbnN0IGF2YWlsYWJsZUFnZW50TW9kZWxzID0gdXNlTWVtbygoKSA9PiBhZ2VudE1vZGVscy5maWx0ZXIobW9kZWwgPT4gIW1vZGVsLmlzX2RlcHJlY2F0ZWQpLCBbYWdlbnRNb2RlbHNdKVxuXG4gIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBNYXRoLm1pbihhdmFpbGFibGVBZ2VudE1vZGVscy5sZW5ndGggKiBNT0RFTF9PUFRJT05fSEVJR0hUICsgMiwgTU9ERUxfRFJPUERPV05fTUFYX0hFSUdIVCksXG4gICAgW2F2YWlsYWJsZUFnZW50TW9kZWxzLmxlbmd0aF1cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZURyb3Bkb3duUG9zaXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RvclJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBzZXREcm9wZG93blBvc2l0aW9uKHJlc29sdmVEcm9wZG93blBvc2l0aW9uKHNlbGVjdG9yUmVmLmN1cnJlbnQsIGRyb3Bkb3duSGVpZ2h0KSlcbiAgfSwgW2Ryb3Bkb3duSGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVPcGVuTW9kYWxBaU1vZGVsID0gKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5zZWxlY3RNb2RlbClcbiAgICBpZiAoIW9wZW5Nb2RhbEFpTW9kZWwpIHtcbiAgICAgIHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKVxuICAgIH1cbiAgICBzZXRPcGVuTW9kYWxBaU1vZGVsKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWxlY3RNb2RlbCA9IChtb2RlbDogQWdlbnRNb2RlbCwgZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICBpZiAobW9kZWwuaWQgIT09IGZvcm1WYWx1ZXM/LmFpTW9kZWw/LmlkKSB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY2hvb3NlTW9kZWwsIHsgb3B0aW9uOiBtb2RlbC5kaXNwbGF5X25hbWUgfSlcbiAgICAgIHNldEZvcm1WYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBhaU1vZGVsOiBtb2RlbCxcbiAgICAgIH0pKVxuICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXMoeyBrZXk6ICdhaU1vZGVsJywgdmFsdWU6IG1vZGVsIH0pXG4gICAgfVxuICAgIHNldE9wZW5Nb2RhbEFpTW9kZWwoZmFsc2UpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmIChvcGVuTW9kYWxBaU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgICBjb25zdCBpc0luTW9kYWwgPSB0YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2VsZWN0b3ItbW9kYWxdJylcbiAgICAgICAgY29uc3QgaXNJbk9wdGlvbiA9IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1zZWxlY3Rvci1vcHRpb25dJylcblxuICAgICAgICBpZiAoIWlzSW5Nb2RhbCAmJiAhaXNJbk9wdGlvbikge1xuICAgICAgICAgIHNldE9wZW5Nb2RhbEFpTW9kZWwoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJiBvcGVuTW9kYWxBaU1vZGVsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgc2V0T3Blbk1vZGFsQWlNb2RlbChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3Blbk1vZGFsQWlNb2RlbCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbb3Blbk1vZGFsQWlNb2RlbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW5Nb2RhbEFpTW9kZWwpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhhbmRsZVJlcG9zaXRpb24gPSAoKSA9PiB1cGRhdGVEcm9wZG93blBvc2l0aW9uKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcbiAgICAvLyBjYXB0dXJlOiBlbCBBQk0gc2Nyb2xsZWEgZW4gY29udGVuZWRvcmVzIGludGVybm9zLCBubyBlbiB3aW5kb3dcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlUmVwb3NpdGlvbiwgdHJ1ZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlcG9zaXRpb24pXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlUmVwb3NpdGlvbiwgdHJ1ZSlcbiAgICB9XG4gIH0sIFtvcGVuTW9kYWxBaU1vZGVsLCB1cGRhdGVEcm9wZG93blBvc2l0aW9uXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChFTU9KSV9QT1JUQUxfSUQpXG4gICAgY29uc3QgY3JlYXRlZCA9ICFjb250YWluZXJcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGNvbnRhaW5lci5pZCA9IEVNT0pJX1BPUlRBTF9JRFxuICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICcwJ1xuICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAnMCdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICAgIH1cbiAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gU3RyaW5nKGVtb2ppUG9ydGFsWkluZGV4KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY3JlYXRlZCAmJiBjb250YWluZXI/LnBhcmVudE5vZGUgJiYgIWNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2Vtb2ppUG9ydGFsWkluZGV4XSlcblxuICBjb25zdCBoYW5kbGVTZXRHZW5lcmFsVmFsdWVzID0gKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXMoeyBrZXksIHZhbHVlIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWxlY3RFbW9qaSA9IGVtb2ppID0+IHtcbiAgICBoYW5kbGVTZXRHZW5lcmFsVmFsdWVzKGVtb2ppLmVtb2ppLCAnZW1vamknKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRm9jdXMgPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRGb2N1c2VkRmllbGQoZmllbGROYW1lKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBzZXRGb2N1c2VkRmllbGQobnVsbClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Rm9ybVZhbHVlcyh7XG4gICAgICBuYW1lOiB2YWx1ZXMuZ2VuZXJhbC5uYW1lIHx8ICcnLFxuICAgICAgYWlNb2RlbDogdmFsdWVzLmdlbmVyYWwuYWlNb2RlbCxcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IHZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgfHwgJycsXG4gICAgICBpbnRyb2R1Y3Rpb246IHZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbiB8fCAnJyxcbiAgICAgIHVzZXJQcm9tcHQ6IHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgfHwgJycsXG4gICAgICBlbW9qaTogdmFsdWVzLmdlbmVyYWwuZW1vamkgfHwgJycsXG4gICAgfSlcbiAgfSwgW3ZhbHVlcy5nZW5lcmFsXSlcblxuICBjb25zdCByZW5kZXJNb2RlbERyb3Bkb3duID0gKCkgPT4ge1xuICAgIGlmICghb3Blbk1vZGFsQWlNb2RlbCB8fCAhZHJvcGRvd25Qb3NpdGlvbikgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgICA8U0NBR1NTZWxlY3Rvck1vZGFsXG4gICAgICAgIGRhdGEtc2VsZWN0b3ItbW9kYWxcbiAgICAgICAgJGxlZnQ9e2Ryb3Bkb3duUG9zaXRpb24ubGVmdH1cbiAgICAgICAgJHdpZHRoPXtkcm9wZG93blBvc2l0aW9uLndpZHRofVxuICAgICAgICAkdG9wPXtkcm9wZG93blBvc2l0aW9uLnRvcH1cbiAgICAgICAgJGJvdHRvbT17ZHJvcGRvd25Qb3NpdGlvbi5ib3R0b219XG4gICAgICAgICR6SW5kZXg9e21vZGVsRHJvcGRvd25aSW5kZXh9XG4gICAgICAgICRwbGFjZW1lbnQ9e2Ryb3Bkb3duUG9zaXRpb24ucGxhY2VtZW50fVxuICAgICAgPlxuICAgICAgICA8U0NBR1NTZWxlY3Rvck1vZGFsQ29udGVudD5cbiAgICAgICAgICB7YXZhaWxhYmxlQWdlbnRNb2RlbHMubGVuZ3RoID09PSAwICYmICFsb2FkaW5nID8gKFxuICAgICAgICAgICAgPFNDQUdTTm9Nb2RlbHNBdmFpbGFibGU+e3QoJ2dlbmVyYWxTZWN0aW9uLm5vTW9kZWxzQXZhaWxhYmxlJyl9PC9TQ0FHU05vTW9kZWxzQXZhaWxhYmxlPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICBhdmFpbGFibGVBZ2VudE1vZGVscy5tYXAobW9kZWwgPT4gKFxuICAgICAgICAgICAgICA8U0NBR1NPcHRpb25cbiAgICAgICAgICAgICAgICBrZXk9e21vZGVsLmlkfVxuICAgICAgICAgICAgICAgIHZhbHVlPXttb2RlbC5pZH1cbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXttb2RlbC5pZCA9PT0gZm9ybVZhbHVlcz8uYWlNb2RlbD8uaWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gaGFuZGxlU2VsZWN0TW9kZWwobW9kZWwsIGV2ZW50KX1cbiAgICAgICAgICAgICAgICBkYXRhLXNlbGVjdG9yLW9wdGlvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQUdTT3B0aW9uTGFiZWwgaXNTZWxlY3RlZD17bW9kZWwuaWQgPT09IGZvcm1WYWx1ZXM/LmFpTW9kZWw/LmlkfT5cbiAgICAgICAgICAgICAgICAgIHttb2RlbC5kaXNwbGF5X25hbWV9XG4gICAgICAgICAgICAgICAgPC9TQ0FHU09wdGlvbkxhYmVsPlxuICAgICAgICAgICAgICAgIHttb2RlbC5rZXl3b3JkICYmIDxTQ0FHU09wdGlvbkRlc2NyaXB0aW9uPnttb2RlbC5rZXl3b3JkfTwvU0NBR1NPcHRpb25EZXNjcmlwdGlvbj59XG4gICAgICAgICAgICAgIDwvU0NBR1NPcHRpb24+XG4gICAgICAgICAgICApKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NBR1NTZWxlY3Rvck1vZGFsQ29udGVudD5cbiAgICAgIDwvU0NBR1NTZWxlY3Rvck1vZGFsPixcbiAgICAgIGRvY3VtZW50LmJvZHlcbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ0FHU1dyYXBwZXIgb3Blbk1vZGFsQWlNb2RlbD17b3Blbk1vZGFsQWlNb2RlbH0+XG4gICAgICA8U0NBR1NXcmFwcGVySGVhZGVyICRpbmRleD17MH0+XG4gICAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZT5cbiAgICAgICAgICA8c3Bhbj57dCgnZ2VuZXJhbFNlY3Rpb24uZ2VuZXJhbFNldHRpbmdzJyl9PC9zcGFuPlxuICAgICAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkPnt0KCdnZW5lcmFsU2VjdGlvbi5yZXF1aXJlZEZpZWxkc0xhYmVsJyl9PC9TQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkPlxuICAgICAgICA8L1NDQUdTV3JhcHBlckhlYWRlclRpdGxlPlxuICAgICAgICA8U0NBR1NXcmFwcGVySGVhZGVySW5mbz57dCgnZ2VuZXJhbFNlY3Rpb24uaW5mb0xhYmVsJyl9PC9TQ0FHU1dyYXBwZXJIZWFkZXJJbmZvPlxuICAgICAgPC9TQ0FHU1dyYXBwZXJIZWFkZXI+XG4gICAgICB7J2NyZWF0ZWRfYnknIGluIHZhbHVlcy5nZW5lcmFsICYmIHZhbHVlcy5nZW5lcmFsLmNyZWF0ZWRfYnkgJiYgKFxuICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgIHpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICB2YWx1ZXMuZ2VuZXJhbC5jcmVhdGVkX2J5Py5pc19kZWxldGVkXG4gICAgICAgICAgICAgID8gdCgnZ2VuZXJhbFNlY3Rpb24uY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKVxuICAgICAgICAgICAgICA6IHQoJ2dlbmVyYWxTZWN0aW9uLmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxTQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAge3QoJ2dlbmVyYWxTZWN0aW9uLmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICA8U0NBR1NXcmFwcGVySGVhZGVyQ3JlYXRlZEJ5VGV4dE5hbWU+e3ZhbHVlcy5nZW5lcmFsLmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICA8L1NDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQ+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICl9XG4gICAgICA8U0NBR1NHZW5lcmFsQ2FyZCAkaW5kZXg9ezF9PlxuICAgICAgICA8U0NBR1NXcmFwcGVyQ29udGVudD5cbiAgICAgICAgICA8U0NBR1NXcmFwcGVyRW1vamk+XG4gICAgICAgICAgICA8QnV0dG9uRW1vamlcbiAgICAgICAgICAgICAgcG9ydGFsSWQ9e0VNT0pJX1BPUlRBTF9JRH1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdEVtb2ppfVxuICAgICAgICAgICAgICByZW5kZXJDb21wb25lbnQ9e2EgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8U0NBR1NCdXR0b25FbW9qaVxuICAgICAgICAgICAgICAgICAgICByZWY9e2EuaWNvblJlZn1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2EuaGFuZGxlT3BlblN1Z2dlc3Rpb25MaXN0fVxuICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1nZW5lcmFsLWVtb2ppLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUdTV3JhcHBlckVtb2ppSWNvbj57Zm9ybVZhbHVlcy5lbW9qaSB8fCA8QWdlbnRNYWlhSWNvbiAvPn08L1NDQUdTV3JhcHBlckVtb2ppSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBR1NXcmFwcGVyQWRkSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gY29sb3I9XCJyZ2JhKDEzNSwgNjQsIDE5MSwgMSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBR1NXcmFwcGVyQWRkSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FHU1dyYXBwZXJFbW9qaUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8L1NDQUdTQnV0dG9uRW1vamk+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBjb21wYW55SWQ9e3VzZXIuY29tcGFueV9pZC50b1N0cmluZygpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQUdTV3JhcHBlckVtb2ppPlxuICAgICAgICAgIDxTQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgICAgIDxDdXN0b21JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD17YCR7dCgnZ2VuZXJhbFNlY3Rpb24ubmFtZScpfSAqICgke3ZhbHVlcy5nZW5lcmFsLm5hbWUubGVuZ3RoIHx8IDB9LSR7dmFsaWRhdGlvbkZpZWxkc1J1bGVzLm5hbWV9KWB9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdnZW5lcmFsU2VjdGlvbi5uYW1lUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlPXt0KCdnZW5lcmFsU2VjdGlvbi5lcnJvci5tYXhDYXJhY3Rlck5hbWUnKX1cbiAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXM/Lm5hbWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZXRHZW5lcmFsVmFsdWVzfVxuICAgICAgICAgICAgICBpbnB1dEtleT1cIm5hbWVcIlxuICAgICAgICAgICAgICBoYW5kbGVGb2N1cz17aGFuZGxlRm9jdXN9XG4gICAgICAgICAgICAgIGhhbmRsZUJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgICAgICAgIGZvY3VzZWRGaWVsZD17Zm9jdXNlZEZpZWxkfVxuICAgICAgICAgICAgICBtYXhMZW5ndGg9e3ZhbGlkYXRpb25GaWVsZHNSdWxlcy5uYW1lfVxuICAgICAgICAgICAgICBpc1RyaW1tZWRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgPC9TQ0FHU1dyYXBwZXJDb250ZW50PlxuICAgICAgICA8U0NBR1NXcmFwcGVyT25ib2FyZGluZz5cbiAgICAgICAgICA8U0NBR1NGaWVsZFN1cmZhY2U+XG4gICAgICAgICAgICA8Q3VzdG9tVGV4dEFyZWFcbiAgICAgICAgICAgICAgbGFiZWw9e2Ake3QoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHQnKX0gKiAoJHt2YWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0Py5sZW5ndGggfHwgMH0tJHt2YWxpZGF0aW9uRmllbGRzUnVsZXMudXNlclByb21wdH0pYH1cbiAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXM/LnVzZXJQcm9tcHR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdnZW5lcmFsU2VjdGlvbi5pbml0aWFsUHJvbXB0UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlPXtoYW5kbGVTZXRHZW5lcmFsVmFsdWVzfVxuICAgICAgICAgICAgICBoYW5kbGVGb2N1cz17aGFuZGxlRm9jdXN9XG4gICAgICAgICAgICAgIGhhbmRsZUJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgICAgICAgIGZvY3VzZWRGaWVsZD17Zm9jdXNlZEZpZWxkfVxuICAgICAgICAgICAgICBpbnB1dEtleT1cInVzZXJQcm9tcHRcIlxuICAgICAgICAgICAgICBtYXhMZW5ndGg9e3ZhbGlkYXRpb25GaWVsZHNSdWxlcy51c2VyUHJvbXB0fVxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U9e3QoJ2dlbmVyYWxTZWN0aW9uLmVycm9yLm1heENhcmFjdGVySW5pdGlhbFByb21wdCcpfVxuICAgICAgICAgICAgICBjdXN0b21IZWlnaHQ9ezE3MH1cbiAgICAgICAgICAgICAgaXNUcmltbWVkXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBR1NGaWVsZFN1cmZhY2U+XG4gICAgICAgICAgPFNDQUdTV3JhcHBlck9uYm9hcmRpbmdDb250ZW50IG9uQ2xpY2s9eygpID0+IGhhbmRsZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKCdob3dUb1dyaXRlUHJvbXB0Jyl9PlxuICAgICAgICAgICAgPFNDQUdTV3JhcHBlck9uYm9hcmRpbmdUZXh0Pnt0KCdnZW5lcmFsU2VjdGlvbi5ob3dUb1dyaXRlUHJvbXB0Jyl9PC9TQ0FHU1dyYXBwZXJPbmJvYXJkaW5nVGV4dD57JyAnfVxuICAgICAgICAgICAgPE9wZW4gd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMwMDZmYWZcIiAvPlxuICAgICAgICAgIDwvU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQ+XG4gICAgICAgIDwvU0NBR1NXcmFwcGVyT25ib2FyZGluZz5cbiAgICAgICAgPFNDQUdTV3JhcHBlck9uYm9hcmRpbmc+XG4gICAgICAgICAgPFNDQUdTV3JhcHBlclNlbGVjdG9yIHJlZj17c2VsZWN0b3JSZWZ9IGRhdGEtc2VsZWN0b3ItbW9kYWw+XG4gICAgICAgICAgICA8U0NBR1NGaWVsZFN1cmZhY2U+XG4gICAgICAgICAgICAgIDxDVVNlbGVjdFxuICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdnZW5lcmFsU2VjdGlvbi5tb2RlbEFpTGFiZWwnKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17bG9hZGluZyA/ICdDYXJnYW5kbyBtb2RlbG9zLi4uJyA6ICdTZWxlY2Npb25hciBtb2RlbG8nfVxuICAgICAgICAgICAgICAgIGVuZEljb249ezxDaGV2cm9uRG93biB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgY29sb3I9e2xvYWRpbmcgPyAnI2JmYmZiZicgOiAnIzk5OTk5OSd9IC8+fVxuICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrQWN0aW9uPXtoYW5kbGVPcGVuTW9kYWxBaU1vZGVsfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzPy5haU1vZGVsPy5kaXNwbGF5X25hbWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZT17bG9hZGluZ31cbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9kYWxBaU1vZGVsfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIENVU2VsZWN0IGV4aWdlIGNoaWxkcmVuIHBhcmEgaGFiaWxpdGFyIGVsIGNsaWNrOyBlbCBtZW7DuiByZWFsIHZhIHBvciBwb3J0YWwuICovfVxuICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbiAvPlxuICAgICAgICAgICAgICA8L0NVU2VsZWN0PlxuICAgICAgICAgICAgPC9TQ0FHU0ZpZWxkU3VyZmFjZT5cbiAgICAgICAgICA8L1NDQUdTV3JhcHBlclNlbGVjdG9yPlxuICAgICAgICAgIDxTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nQ29udGVudCBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPbmJvYXJkaW5nTmF2aWdhdGlvbignd2hhdElzTW9kZWxBaScpfT5cbiAgICAgICAgICAgIDxTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nVGV4dD57dCgnZ2VuZXJhbFNlY3Rpb24ud2hhdElzTW9kZWxBaScpfTwvU0NBR1NXcmFwcGVyT25ib2FyZGluZ1RleHQ+eycgJ31cbiAgICAgICAgICAgIDxPcGVuIHdpZHRoPXsxMn0gaGVpZ2h0PXsxMn0gY29sb3I9XCIjMDA2ZmFmXCIgLz5cbiAgICAgICAgICA8L1NDQUdTV3JhcHBlck9uYm9hcmRpbmdDb250ZW50PlxuICAgICAgICA8L1NDQUdTV3JhcHBlck9uYm9hcmRpbmc+XG4gICAgICA8L1NDQUdTR2VuZXJhbENhcmQ+XG4gICAgICA8U0NBR1NPcHRpb25hbEZpZWxkcyAkaW5kZXg9ezJ9PlxuICAgICAgICA8U0NBR1NPcHRpb25hbExhYmVsPnt0KCdnZW5lcmFsU2VjdGlvbi5vcHRpb25hbExhYmVsJyl9PC9TQ0FHU09wdGlvbmFsTGFiZWw+XG4gICAgICAgIDxDdXN0b21UZXh0QXJlYVxuICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzPy5pbnRyb2R1Y3Rpb259XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWxTZWN0aW9uLmludHJvZHVjdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgaGFuZGxlQ2hhbmdlPXtoYW5kbGVTZXRHZW5lcmFsVmFsdWVzfVxuICAgICAgICAgIGhhbmRsZUZvY3VzPXtoYW5kbGVGb2N1c31cbiAgICAgICAgICBoYW5kbGVCbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAgIGZvY3VzZWRGaWVsZD17Zm9jdXNlZEZpZWxkfVxuICAgICAgICAgIGlucHV0S2V5PVwiaW50cm9kdWN0aW9uXCJcbiAgICAgICAgICBsYWJlbD17YCR7dCgnZ2VuZXJhbFNlY3Rpb24uaW50cm9kdWN0aW9uJyl9ICgke3ZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbj8ubGVuZ3RoIHx8IDB9LSR7dmFsaWRhdGlvbkZpZWxkc1J1bGVzLmludHJvZHVjdGlvbn0pYH1cbiAgICAgICAgICBlcnJvck1lc3NhZ2U9e3QoJ2dlbmVyYWxTZWN0aW9uLmVycm9yLm1heENhcmFjdGVySW50cm9kdWN0aW9uJyl9XG4gICAgICAgICAgbWF4TGVuZ3RoPXt2YWxpZGF0aW9uRmllbGRzUnVsZXMuaW50cm9kdWN0aW9ufVxuICAgICAgICAvPlxuICAgICAgICA8Q3VzdG9tSW5wdXRcbiAgICAgICAgICBsYWJlbD17YCR7dCgnZ2VuZXJhbFNlY3Rpb24uaW5wdXRQbGFjZWhvbGRlclRpdGxlJyl9ICgke3ZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXI/Lmxlbmd0aCB8fCAwfS0ke3ZhbGlkYXRpb25GaWVsZHNSdWxlcy5pbnB1dFBsYWNlaG9sZGVyfSlgfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdnZW5lcmFsU2VjdGlvbi5pbnB1dFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgaW5wdXRLZXk9XCJpbnB1dFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBlcnJvck1lc3NhZ2U9e3QoJ2dlbmVyYWxTZWN0aW9uLmVycm9yLm1heElucHV0UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcz8uaW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2V0R2VuZXJhbFZhbHVlc31cbiAgICAgICAgICBoYW5kbGVGb2N1cz17aGFuZGxlRm9jdXN9XG4gICAgICAgICAgaGFuZGxlQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgICBmb2N1c2VkRmllbGQ9e2ZvY3VzZWRGaWVsZH1cbiAgICAgICAgICBtYXhMZW5ndGg9e3ZhbGlkYXRpb25GaWVsZHNSdWxlcy5pbnB1dFBsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgICAgPC9TQ0FHU09wdGlvbmFsRmllbGRzPlxuICAgICAge3JlbmRlck1vZGVsRHJvcGRvd24oKX1cbiAgICA8L1NDQUdTV3JhcHBlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxPQUFPQSxLQUFLLElBQUlDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDaEYsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsUUFBUSxRQUFRLDhDQUE4QztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsNEJBQTRCO0FBQ3hELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FBU0MsYUFBYSxRQUFRLGlDQUFpQztBQUMvRCxTQUFTQyxXQUFXLFFBQVEsbUJBQW1CO0FBQy9DLFNBQ0VDLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsc0JBQXNCLEVBQ3RCQyx5QkFBeUIsRUFDekJDLG1CQUFtQixFQUNuQkMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLGdCQUFnQixFQUNoQkMsd0JBQXdCLEVBQ3hCQyxxQkFBcUIsRUFDckJDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsRUFDdkJDLHNCQUFzQixFQUN0QkMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLDBCQUEwQixFQUMxQkMsK0JBQStCLEVBQy9CQyxtQ0FBbUMsRUFDbkNDLCtCQUErQixFQUMvQkMsZ0JBQWdCLEVBQ2hCQyxpQkFBaUIsRUFDakJDLHNCQUFzQixFQUN0QkMsbUJBQW1CLEVBQ25CQyxrQkFBa0IsUUFDYiw0QkFBNEI7QUFFbkMsU0FBU0MsY0FBYyxRQUFRLHFDQUFxQztBQUNwRSxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyx1QkFBdUIsUUFBUSx3Q0FBd0M7QUFDaEYsU0FBU0Msc0JBQXNCLFFBQVEsdUNBQXVDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQUU5RSxJQUFNQyxxQkFBcUIsR0FBRztFQUM1QkMsSUFBSSxFQUFFLEdBQUc7RUFDVEMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLGdCQUFnQixFQUFFLEdBQUc7RUFDckJDLFlBQVksRUFBRTtBQUNoQixDQUFDO0FBRUQsSUFBTUMsbUJBQW1CLEdBQUcsRUFBRTtBQUM5QixJQUFNQyx5QkFBeUIsR0FBRyxHQUFHO0FBQ3JDLElBQU1DLGtCQUFrQixHQUFHLENBQUM7QUFZNUIsSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBSUMsTUFBbUIsRUFBRUMsY0FBc0IsRUFBdUI7RUFDakcsSUFBTUMsSUFBSSxHQUFHRixNQUFNLENBQUNHLHFCQUFxQixDQUFDLENBQUM7RUFDM0MsSUFBTUMsVUFBVSxHQUFHQyxNQUFNLENBQUNDLFdBQVcsR0FBR0osSUFBSSxDQUFDSyxNQUFNO0VBQ25ELElBQU1DLFVBQVUsR0FBR04sSUFBSSxDQUFDTyxHQUFHO0VBQzNCLElBQU1DLFNBQTRCLEdBQUdOLFVBQVUsSUFBSUgsY0FBYyxJQUFJRyxVQUFVLElBQUlJLFVBQVUsR0FBRyxRQUFRLEdBQUcsS0FBSztFQUVoSCxJQUFJRSxTQUFTLEtBQUssUUFBUSxFQUFFO0lBQzFCLE9BQU87TUFDTEMsSUFBSSxFQUFFVCxJQUFJLENBQUNTLElBQUk7TUFDZkMsS0FBSyxFQUFFVixJQUFJLENBQUNVLEtBQUs7TUFDakJILEdBQUcsRUFBRVAsSUFBSSxDQUFDSyxNQUFNLEdBQUdULGtCQUFrQjtNQUNyQ1ksU0FBUyxFQUFUQTtJQUNGLENBQUM7RUFDSDtFQUVBLE9BQU87SUFDTEMsSUFBSSxFQUFFVCxJQUFJLENBQUNTLElBQUk7SUFDZkMsS0FBSyxFQUFFVixJQUFJLENBQUNVLEtBQUs7SUFDakJMLE1BQU0sRUFBRUYsTUFBTSxDQUFDQyxXQUFXLEdBQUdKLElBQUksQ0FBQ08sR0FBRyxHQUFHWCxrQkFBa0I7SUFDMURZLFNBQVMsRUFBVEE7RUFDRixDQUFDO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFNRyxlQUFlLEdBQUcsMEJBQTBCO0FBRWxELE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBQUMsSUFBQSxFQVl4QjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQUEsSUFYSkMsTUFBTSxHQUFBUCxJQUFBLENBQU5PLE1BQU07SUFDTkMsb0JBQW9CLEdBQUFSLElBQUEsQ0FBcEJRLG9CQUFvQjtJQUNwQkMsV0FBVyxHQUFBVCxJQUFBLENBQVhTLFdBQVc7SUFDWEMsT0FBTyxHQUFBVixJQUFBLENBQVBVLE9BQU87SUFDUEMsYUFBYSxHQUFBWCxJQUFBLENBQWJXLGFBQWE7RUFRYixJQUFNQyxJQUFJLEdBQUc3QyxPQUFPLENBQUMsQ0FBQztFQUN0QixJQUFNOEMsY0FBYyxHQUFHNUMsUUFBUSxDQUFDLENBQUM7RUFDakMsSUFBQTZDLGVBQUEsR0FBYy9FLGNBQWMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFBM0NnRixDQUFDLEdBQUFELGVBQUEsQ0FBREMsQ0FBQztFQUNULElBQUFDLHFCQUFBLEdBQXVDOUMsdUJBQXVCLENBQUMsQ0FBQztJQUF4RCtDLDBCQUEwQixHQUFBRCxxQkFBQSxDQUExQkMsMEJBQTBCO0VBQ2xDLElBQU1DLGlCQUFpQixHQUFHL0Msc0JBQXNCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztFQUNyRSxJQUFNZ0QsbUJBQW1CLEdBQUdoRCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO0VBQ3ZFLElBQUFpRCxTQUFBLEdBQWdEL0YsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBZ0csVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBeERHLGdCQUFnQixHQUFBRixVQUFBO0lBQUVHLG1CQUFtQixHQUFBSCxVQUFBO0VBQzVDLElBQUFJLFVBQUEsR0FBZ0RwRyxRQUFRLENBQTBCLElBQUksQ0FBQztJQUFBcUcsVUFBQSxHQUFBSixjQUFBLENBQUFHLFVBQUE7SUFBaEZFLGdCQUFnQixHQUFBRCxVQUFBO0lBQUVFLG1CQUFtQixHQUFBRixVQUFBO0VBQzVDLElBQUFHLFVBQUEsR0FBd0N4RyxRQUFRLENBQWdCLElBQUksQ0FBQztJQUFBeUcsVUFBQSxHQUFBUixjQUFBLENBQUFPLFVBQUE7SUFBOURFLFlBQVksR0FBQUQsVUFBQTtJQUFFRSxlQUFlLEdBQUFGLFVBQUE7RUFDcEMsSUFBTUcsV0FBVyxHQUFHMUcsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFFaEQsSUFBQTJHLFVBQUEsR0FBb0M3RyxRQUFRLENBT3pDO01BQ0RvRCxJQUFJLEVBQUU4QixNQUFNLENBQUM0QixPQUFPLENBQUMxRCxJQUFJLElBQUksRUFBRTtNQUMvQjJELE9BQU8sRUFBRTdCLE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQ0MsT0FBTztNQUMvQnpELGdCQUFnQixFQUFFNEIsTUFBTSxDQUFDNEIsT0FBTyxDQUFDeEQsZ0JBQWdCLElBQUksRUFBRTtNQUN2REMsWUFBWSxFQUFFMkIsTUFBTSxDQUFDNEIsT0FBTyxDQUFDdkQsWUFBWSxJQUFJLEVBQUU7TUFDL0NGLFVBQVUsRUFBRTZCLE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQ3pELFVBQVUsSUFBSSxFQUFFO01BQzNDMkQsS0FBSyxFQUFFOUIsTUFBTSxDQUFDNEIsT0FBTyxDQUFDRSxLQUFLLElBQUk7SUFDakMsQ0FBQyxDQUFDO0lBQUFDLFVBQUEsR0FBQWhCLGNBQUEsQ0FBQVksVUFBQTtJQWRLSyxVQUFVLEdBQUFELFVBQUE7SUFBRUUsYUFBYSxHQUFBRixVQUFBO0VBZ0JoQyxJQUFNRyxvQkFBb0IsR0FBR25ILE9BQU8sQ0FBQztJQUFBLE9BQU1tRixXQUFXLENBQUNpQyxNQUFNLENBQUMsVUFBQUMsS0FBSztNQUFBLE9BQUksQ0FBQ0EsS0FBSyxDQUFDQyxhQUFhO0lBQUEsRUFBQztFQUFBLEdBQUUsQ0FBQ25DLFdBQVcsQ0FBQyxDQUFDO0VBRTVHLElBQU12QixjQUFjLEdBQUc1RCxPQUFPLENBQzVCO0lBQUEsT0FBTXVILElBQUksQ0FBQ0MsR0FBRyxDQUFDTCxvQkFBb0IsQ0FBQ00sTUFBTSxHQUFHbEUsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFQyx5QkFBeUIsQ0FBQztFQUFBLEdBQ2hHLENBQUMyRCxvQkFBb0IsQ0FBQ00sTUFBTSxDQUM5QixDQUFDO0VBRUQsSUFBTUMsc0JBQXNCLEdBQUd4SCxXQUFXLENBQUMsWUFBTTtJQUMvQyxJQUFJLENBQUN5RyxXQUFXLENBQUNnQixPQUFPLEVBQUU7SUFDMUJyQixtQkFBbUIsQ0FBQzVDLHVCQUF1QixDQUFDaUQsV0FBVyxDQUFDZ0IsT0FBTyxFQUFFL0QsY0FBYyxDQUFDLENBQUM7RUFDbkYsQ0FBQyxFQUFFLENBQUNBLGNBQWMsQ0FBQyxDQUFDO0VBRXBCLElBQU1nRSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBLEVBQVM7SUFDbkNyQyxjQUFjLENBQUM3QyxNQUFNLENBQUNtRixXQUFXLENBQUM7SUFDbEMsSUFBSSxDQUFDNUIsZ0JBQWdCLEVBQUU7TUFDckJ5QixzQkFBc0IsQ0FBQyxDQUFDO0lBQzFCO0lBQ0F4QixtQkFBbUIsQ0FBQyxVQUFBNEIsSUFBSTtNQUFBLE9BQUksQ0FBQ0EsSUFBSTtJQUFBLEVBQUM7RUFDcEMsQ0FBQztFQUVELElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlWLEtBQWlCLEVBQUVXLEtBQXdCLEVBQUs7SUFBQSxJQUFBQyxtQkFBQTtJQUN6RSxJQUFJRCxLQUFLLEVBQUU7TUFDVEEsS0FBSyxDQUFDRSxlQUFlLENBQUMsQ0FBQztJQUN6QjtJQUNBLElBQUliLEtBQUssQ0FBQ2MsRUFBRSxNQUFLbEIsVUFBVSxhQUFWQSxVQUFVLGdCQUFBZ0IsbUJBQUEsR0FBVmhCLFVBQVUsQ0FBRUgsT0FBTyxjQUFBbUIsbUJBQUEsdUJBQW5CQSxtQkFBQSxDQUFxQkUsRUFBRSxHQUFFO01BQ3hDNUMsY0FBYyxDQUFDN0MsTUFBTSxDQUFDMEYsV0FBVyxFQUFFO1FBQUVDLE1BQU0sRUFBRWhCLEtBQUssQ0FBQ2lCO01BQWEsQ0FBQyxDQUFDO01BQ2xFcEIsYUFBYSxDQUFDLFVBQUFZLElBQUk7UUFBQSxPQUFBUyxhQUFBLENBQUFBLGFBQUEsS0FDYlQsSUFBSTtVQUNQaEIsT0FBTyxFQUFFTztRQUFLO01BQUEsQ0FDZCxDQUFDO01BQ0huQyxvQkFBb0IsQ0FBQztRQUFFc0QsR0FBRyxFQUFFLFNBQVM7UUFBRUMsS0FBSyxFQUFFcEI7TUFBTSxDQUFDLENBQUM7SUFDeEQ7SUFDQW5CLG1CQUFtQixDQUFDLEtBQUssQ0FBQztFQUM1QixDQUFDO0VBRURwRyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU00SSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJVixLQUFZLEVBQUs7TUFDM0MsSUFBSS9CLGdCQUFnQixFQUFFO1FBQ3BCLElBQU0wQyxNQUFNLEdBQUdYLEtBQUssQ0FBQ1csTUFBcUI7UUFDMUMsSUFBTUMsU0FBUyxHQUFHRCxNQUFNLENBQUNFLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztRQUN6RCxJQUFNQyxVQUFVLEdBQUdILE1BQU0sQ0FBQ0UsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1FBRTNELElBQUksQ0FBQ0QsU0FBUyxJQUFJLENBQUNFLFVBQVUsRUFBRTtVQUM3QjVDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUM1QjtNQUNGO0lBQ0YsQ0FBQztJQUVELElBQU02QyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlmLEtBQW9CLEVBQUs7TUFDOUMsSUFBSUEsS0FBSyxDQUFDUSxHQUFHLEtBQUssUUFBUSxJQUFJdkMsZ0JBQWdCLEVBQUU7UUFDOUMrQixLQUFLLENBQUNnQixjQUFjLENBQUMsQ0FBQztRQUN0QmhCLEtBQUssQ0FBQ0UsZUFBZSxDQUFDLENBQUM7UUFDdkJoQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7TUFDNUI7SUFDRixDQUFDO0lBRUQsSUFBSUQsZ0JBQWdCLEVBQUU7TUFDcEJnRCxRQUFRLENBQUNDLGdCQUFnQixDQUFDLFNBQVMsRUFBRUgsYUFBYSxDQUFDO01BQ25ERSxRQUFRLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRVIsa0JBQWtCLENBQUM7TUFDdEQsT0FBTyxZQUFNO1FBQ1hPLFFBQVEsQ0FBQ0UsbUJBQW1CLENBQUMsU0FBUyxFQUFFSixhQUFhLENBQUM7UUFDdERFLFFBQVEsQ0FBQ0UsbUJBQW1CLENBQUMsT0FBTyxFQUFFVCxrQkFBa0IsQ0FBQztNQUMzRCxDQUFDO0lBQ0g7SUFDQSxPQUFPVSxTQUFTO0VBQ2xCLENBQUMsRUFBRSxDQUFDbkQsZ0JBQWdCLENBQUMsQ0FBQztFQUV0Qm5HLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDbUcsZ0JBQWdCLEVBQUUsT0FBT21ELFNBQVM7SUFFdkMsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQTtNQUFBLE9BQVMzQixzQkFBc0IsQ0FBQyxDQUFDO0lBQUE7SUFDdkQxRCxNQUFNLENBQUNrRixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVHLGdCQUFnQixDQUFDO0lBQ25EO0lBQ0FyRixNQUFNLENBQUNrRixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVHLGdCQUFnQixFQUFFLElBQUksQ0FBQztJQUN6RCxPQUFPLFlBQU07TUFDWHJGLE1BQU0sQ0FBQ21GLG1CQUFtQixDQUFDLFFBQVEsRUFBRUUsZ0JBQWdCLENBQUM7TUFDdERyRixNQUFNLENBQUNtRixtQkFBbUIsQ0FBQyxRQUFRLEVBQUVFLGdCQUFnQixFQUFFLElBQUksQ0FBQztJQUM5RCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNwRCxnQkFBZ0IsRUFBRXlCLHNCQUFzQixDQUFDLENBQUM7RUFFOUM1SCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUl3SixTQUFTLEdBQUdMLFFBQVEsQ0FBQ00sY0FBYyxDQUFDL0UsZUFBZSxDQUFDO0lBQ3hELElBQU1nRixPQUFPLEdBQUcsQ0FBQ0YsU0FBUztJQUMxQixJQUFJLENBQUNBLFNBQVMsRUFBRTtNQUNkQSxTQUFTLEdBQUdMLFFBQVEsQ0FBQ1EsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUN6Q0gsU0FBUyxDQUFDbkIsRUFBRSxHQUFHM0QsZUFBZTtNQUM5QjhFLFNBQVMsQ0FBQ0ksS0FBSyxDQUFDQyxRQUFRLEdBQUcsT0FBTztNQUNsQ0wsU0FBUyxDQUFDSSxLQUFLLENBQUN0RixHQUFHLEdBQUcsR0FBRztNQUN6QmtGLFNBQVMsQ0FBQ0ksS0FBSyxDQUFDcEYsSUFBSSxHQUFHLEdBQUc7TUFDMUIyRSxRQUFRLENBQUNXLElBQUksQ0FBQ0MsV0FBVyxDQUFDUCxTQUFTLENBQUM7SUFDdEM7SUFDQUEsU0FBUyxDQUFDSSxLQUFLLENBQUNJLE1BQU0sR0FBR0MsTUFBTSxDQUFDbkUsaUJBQWlCLENBQUM7SUFDbEQsT0FBTyxZQUFNO01BQUEsSUFBQW9FLFVBQUE7TUFDWCxJQUFJUixPQUFPLEtBQUFRLFVBQUEsR0FBSVYsU0FBUyxjQUFBVSxVQUFBLGVBQVRBLFVBQUEsQ0FBV0MsVUFBVSxJQUFJLENBQUNYLFNBQVMsQ0FBQ1ksYUFBYSxDQUFDLENBQUMsRUFBRTtRQUNsRVosU0FBUyxDQUFDVyxVQUFVLENBQUNFLFdBQVcsQ0FBQ2IsU0FBUyxDQUFDO01BQzdDO0lBQ0YsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDMUQsaUJBQWlCLENBQUMsQ0FBQztFQUV2QixJQUFNd0Usc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSTNCLEtBQWEsRUFBRUQsR0FBVyxFQUFLO0lBQzdEdEQsb0JBQW9CLENBQUM7TUFBRXNELEdBQUcsRUFBSEEsR0FBRztNQUFFQyxLQUFLLEVBQUxBO0lBQU0sQ0FBQyxDQUFDO0VBQ3RDLENBQUM7RUFFRCxJQUFNNEIsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBR3RELEtBQUssRUFBSTtJQUNqQ3FELHNCQUFzQixDQUFDckQsS0FBSyxDQUFDQSxLQUFLLEVBQUUsT0FBTyxDQUFDO0VBQzlDLENBQUM7RUFFRCxJQUFNdUQsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlDLFNBQWlCLEVBQUs7SUFDekM3RCxlQUFlLENBQUM2RCxTQUFTLENBQUM7RUFDNUIsQ0FBQztFQUVELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBLEVBQVM7SUFDdkI5RCxlQUFlLENBQUMsSUFBSSxDQUFDO0VBQ3ZCLENBQUM7RUFFRDVHLFNBQVMsQ0FBQyxZQUFNO0lBQ2RvSCxhQUFhLENBQUM7TUFDWi9ELElBQUksRUFBRThCLE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQzFELElBQUksSUFBSSxFQUFFO01BQy9CMkQsT0FBTyxFQUFFN0IsTUFBTSxDQUFDNEIsT0FBTyxDQUFDQyxPQUFPO01BQy9CekQsZ0JBQWdCLEVBQUU0QixNQUFNLENBQUM0QixPQUFPLENBQUN4RCxnQkFBZ0IsSUFBSSxFQUFFO01BQ3ZEQyxZQUFZLEVBQUUyQixNQUFNLENBQUM0QixPQUFPLENBQUN2RCxZQUFZLElBQUksRUFBRTtNQUMvQ0YsVUFBVSxFQUFFNkIsTUFBTSxDQUFDNEIsT0FBTyxDQUFDekQsVUFBVSxJQUFJLEVBQUU7TUFDM0MyRCxLQUFLLEVBQUU5QixNQUFNLENBQUM0QixPQUFPLENBQUNFLEtBQUssSUFBSTtJQUNqQyxDQUFDLENBQUM7RUFDSixDQUFDLEVBQUUsQ0FBQzlCLE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDO0VBRXBCLElBQU00RCxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFBLEVBQVM7SUFDaEMsSUFBSSxDQUFDeEUsZ0JBQWdCLElBQUksQ0FBQ0ksZ0JBQWdCLEVBQUUsT0FBTyxJQUFJO0lBRXZELG9CQUFPbEcsWUFBWSxjQUNqQjRDLElBQUEsQ0FBQ2pDLGtCQUFrQjtNQUNqQiwyQkFBbUI7TUFDbkI0SixLQUFLLEVBQUVyRSxnQkFBZ0IsQ0FBQy9CLElBQUs7TUFDN0JxRyxNQUFNLEVBQUV0RSxnQkFBZ0IsQ0FBQzlCLEtBQU07TUFDL0JxRyxJQUFJLEVBQUV2RSxnQkFBZ0IsQ0FBQ2pDLEdBQUk7TUFDM0J5RyxPQUFPLEVBQUV4RSxnQkFBZ0IsQ0FBQ25DLE1BQU87TUFDakM0RyxPQUFPLEVBQUVqRixtQkFBb0I7TUFDN0JrRixVQUFVLEVBQUUxRSxnQkFBZ0IsQ0FBQ2hDLFNBQVU7TUFBQTJHLFFBQUEsZUFFdkNqSSxJQUFBLENBQUM3Qix5QkFBeUI7UUFBQThKLFFBQUEsRUFDdkI3RCxvQkFBb0IsQ0FBQ00sTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDckMsT0FBTyxnQkFDNUNyQyxJQUFBLENBQUNWLHNCQUFzQjtVQUFBMkksUUFBQSxFQUFFdkYsQ0FBQyxDQUFDLGtDQUFrQztRQUFDLENBQXlCLENBQUMsR0FFeEYwQixvQkFBb0IsQ0FBQzhELEdBQUcsQ0FBQyxVQUFBNUQsS0FBSztVQUFBLElBQUE2RCxvQkFBQSxFQUFBQyxvQkFBQTtVQUFBLG9CQUM1QmxJLEtBQUEsQ0FBQ2xDLFdBQVc7WUFFVjBILEtBQUssRUFBRXBCLEtBQUssQ0FBQ2MsRUFBRztZQUNoQmlELFVBQVUsRUFBRS9ELEtBQUssQ0FBQ2MsRUFBRSxNQUFLbEIsVUFBVSxhQUFWQSxVQUFVLGdCQUFBaUUsb0JBQUEsR0FBVmpFLFVBQVUsQ0FBRUgsT0FBTyxjQUFBb0Usb0JBQUEsdUJBQW5CQSxvQkFBQSxDQUFxQi9DLEVBQUUsQ0FBQztZQUNqRGtELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFckQsS0FBSztjQUFBLE9BQUlELGlCQUFpQixDQUFDVixLQUFLLEVBQUVXLEtBQUssQ0FBQztZQUFBLENBQUM7WUFDbEQsNEJBQW9CO1lBQUFnRCxRQUFBLGdCQUVwQmpJLElBQUEsQ0FBQy9CLGdCQUFnQjtjQUFDb0ssVUFBVSxFQUFFL0QsS0FBSyxDQUFDYyxFQUFFLE1BQUtsQixVQUFVLGFBQVZBLFVBQVUsZ0JBQUFrRSxvQkFBQSxHQUFWbEUsVUFBVSxDQUFFSCxPQUFPLGNBQUFxRSxvQkFBQSx1QkFBbkJBLG9CQUFBLENBQXFCaEQsRUFBRSxDQUFDO2NBQUE2QyxRQUFBLEVBQ2hFM0QsS0FBSyxDQUFDaUI7WUFBWSxDQUNILENBQUMsRUFDbEJqQixLQUFLLENBQUNpRSxPQUFPLGlCQUFJdkksSUFBQSxDQUFDOUIsc0JBQXNCO2NBQUErSixRQUFBLEVBQUUzRCxLQUFLLENBQUNpRTtZQUFPLENBQXlCLENBQUM7VUFBQSxHQVQ3RWpFLEtBQUssQ0FBQ2MsRUFVQSxDQUFDO1FBQUEsQ0FDZjtNQUNGLENBQ3dCO0lBQUMsQ0FDVixDQUFDLEVBQ3JCYyxRQUFRLENBQUNXLElBQ1gsQ0FBQztFQUNILENBQUM7RUFFRCxvQkFDRTNHLEtBQUEsQ0FBQ3hCLFlBQVk7SUFBQ3dFLGdCQUFnQixFQUFFQSxnQkFBaUI7SUFBQStFLFFBQUEsZ0JBQy9DL0gsS0FBQSxDQUFDdkIsa0JBQWtCO01BQUM2SixNQUFNLEVBQUUsQ0FBRTtNQUFBUCxRQUFBLGdCQUM1Qi9ILEtBQUEsQ0FBQ3RCLHVCQUF1QjtRQUFBcUosUUFBQSxnQkFDdEJqSSxJQUFBO1VBQUFpSSxRQUFBLEVBQU92RixDQUFDLENBQUMsZ0NBQWdDO1FBQUMsQ0FBTyxDQUFDLGVBQ2xEMUMsSUFBQSxDQUFDYiwrQkFBK0I7VUFBQThJLFFBQUEsRUFBRXZGLENBQUMsQ0FBQyxvQ0FBb0M7UUFBQyxDQUFrQyxDQUFDO01BQUEsQ0FDckYsQ0FBQyxlQUMxQjFDLElBQUEsQ0FBQ25CLHNCQUFzQjtRQUFBb0osUUFBQSxFQUFFdkYsQ0FBQyxDQUFDLDBCQUEwQjtNQUFDLENBQXlCLENBQUM7SUFBQSxDQUM5RCxDQUFDLEVBQ3BCLFlBQVksSUFBSVIsTUFBTSxDQUFDNEIsT0FBTyxJQUFJNUIsTUFBTSxDQUFDNEIsT0FBTyxDQUFDMkUsVUFBVSxpQkFDMUR6SSxJQUFBLENBQUNyQyxPQUFPO01BQ05vSixNQUFNLEVBQUV6RSxhQUFjO01BQ3RCb0csS0FBSyxFQUNILENBQUE5RyxxQkFBQSxHQUFBTSxNQUFNLENBQUM0QixPQUFPLENBQUMyRSxVQUFVLGNBQUE3RyxxQkFBQSxlQUF6QkEscUJBQUEsQ0FBMkIrRyxVQUFVLEdBQ2pDakcsQ0FBQyxDQUFDLHdDQUF3QyxDQUFDLEdBQzNDQSxDQUFDLENBQUMsaUNBQWlDLENBQ3hDO01BQUF1RixRQUFBLGVBRUQvSCxLQUFBLENBQUNqQiwrQkFBK0I7UUFBQWdKLFFBQUEsR0FDN0J2RixDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHLGVBQ25DMUMsSUFBQSxDQUFDZCxtQ0FBbUM7VUFBQStJLFFBQUEsR0FBQXBHLHNCQUFBLEdBQUVLLE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQzJFLFVBQVUsY0FBQTVHLHNCQUFBLHVCQUF6QkEsc0JBQUEsQ0FBMkJ6QjtRQUFJLENBQXNDLENBQUM7TUFBQSxDQUM3RTtJQUFDLENBQzNCLENBQ1YsZUFDREYsS0FBQSxDQUFDZCxnQkFBZ0I7TUFBQ29KLE1BQU0sRUFBRSxDQUFFO01BQUFQLFFBQUEsZ0JBQzFCL0gsS0FBQSxDQUFDOUIsbUJBQW1CO1FBQUE2SixRQUFBLGdCQUNsQmpJLElBQUEsQ0FBQzNCLGlCQUFpQjtVQUFBNEosUUFBQSxlQUNoQmpJLElBQUEsQ0FBQ3ZDLFdBQVc7WUFDVm1MLFFBQVEsRUFBRW5ILGVBQWdCO1lBQzFCb0gsUUFBUSxFQUFFdkIsaUJBQWtCO1lBQzVCd0IsZUFBZSxFQUFFLFNBQWpCQSxlQUFlQSxDQUFFQyxDQUFDLEVBQUk7Y0FDcEIsb0JBQ0UvSSxJQUFBLENBQUN6QixnQkFBZ0I7Z0JBQ2Z5SyxHQUFHLEVBQUVELENBQUMsQ0FBQ0UsT0FBUTtnQkFDZkMsSUFBSSxFQUFDLFFBQVE7Z0JBQ2JaLE9BQU8sRUFBRVMsQ0FBQyxDQUFDSSx3QkFBeUI7Z0JBQ3BDL0QsRUFBRSxFQUFDLDBCQUEwQjtnQkFBQTZDLFFBQUEsZUFFN0IvSCxLQUFBLENBQUMxQix3QkFBd0I7a0JBQUF5SixRQUFBLGdCQUN2QmpJLElBQUEsQ0FBQ3ZCLHFCQUFxQjtvQkFBQXdKLFFBQUEsRUFBRS9ELFVBQVUsQ0FBQ0YsS0FBSyxpQkFBSWhFLElBQUEsQ0FBQ3BDLGFBQWEsSUFBRTtrQkFBQyxDQUF3QixDQUFDLGVBQ3RGb0MsSUFBQSxDQUFDMUIsbUJBQW1CO29CQUFBMkosUUFBQSxlQUNsQmpJLElBQUEsQ0FBQzNDLElBQUk7c0JBQUNtRSxLQUFLLEVBQUUsRUFBRztzQkFBQzRILE1BQU0sRUFBRSxFQUFHO3NCQUFDQyxLQUFLLEVBQUM7b0JBQXVCLENBQUU7a0JBQUMsQ0FDMUMsQ0FBQztnQkFBQSxDQUNFO2NBQUMsQ0FDWCxDQUFDO1lBRXZCLENBQUU7WUFDRkMsU0FBUyxFQUFFL0csSUFBSSxDQUFDZ0gsVUFBVSxDQUFDQyxRQUFRLENBQUM7VUFBRSxDQUN2QztRQUFDLENBQ2UsQ0FBQyxlQUNwQnhKLElBQUEsQ0FBQ1gsaUJBQWlCO1VBQUE0SSxRQUFBLGVBQ2hCakksSUFBQSxDQUFDbkMsV0FBVztZQUNWNEwsS0FBSyxLQUFBQyxNQUFBLENBQUtoSCxDQUFDLENBQUMscUJBQXFCLENBQUMsVUFBQWdILE1BQUEsQ0FBT3hILE1BQU0sQ0FBQzRCLE9BQU8sQ0FBQzFELElBQUksQ0FBQ3NFLE1BQU0sSUFBSSxDQUFDLE9BQUFnRixNQUFBLENBQUl2SixxQkFBcUIsQ0FBQ0MsSUFBSSxNQUFJO1lBQzFHdUosV0FBVyxFQUFFakgsQ0FBQyxDQUFDLGdDQUFnQyxDQUFFO1lBQ2pEa0gsWUFBWSxFQUFFbEgsQ0FBQyxDQUFDLHNDQUFzQyxDQUFFO1lBQ3hEZ0QsS0FBSyxFQUFFeEIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU5RCxJQUFLO1lBQ3hCeUosUUFBUSxFQUFFeEMsc0JBQXVCO1lBQ2pDeUMsUUFBUSxFQUFDLE1BQU07WUFDZnZDLFdBQVcsRUFBRUEsV0FBWTtZQUN6QkUsVUFBVSxFQUFFQSxVQUFXO1lBQ3ZCL0QsWUFBWSxFQUFFQSxZQUFhO1lBQzNCcUcsU0FBUyxFQUFFNUoscUJBQXFCLENBQUNDLElBQUs7WUFDdEM0SixTQUFTO1VBQUEsQ0FDVjtRQUFDLENBQ2UsQ0FBQztNQUFBLENBQ0QsQ0FBQyxlQUN0QjlKLEtBQUEsQ0FBQ3BCLHNCQUFzQjtRQUFBbUosUUFBQSxnQkFDckJqSSxJQUFBLENBQUNYLGlCQUFpQjtVQUFBNEksUUFBQSxlQUNoQmpJLElBQUEsQ0FBQ1AsY0FBYztZQUNiZ0ssS0FBSyxLQUFBQyxNQUFBLENBQUtoSCxDQUFDLENBQUMsOEJBQThCLENBQUMsVUFBQWdILE1BQUEsQ0FBTyxFQUFBNUgscUJBQUEsR0FBQUksTUFBTSxDQUFDNEIsT0FBTyxDQUFDekQsVUFBVSxjQUFBeUIscUJBQUEsdUJBQXpCQSxxQkFBQSxDQUEyQjRDLE1BQU0sS0FBSSxDQUFDLE9BQUFnRixNQUFBLENBQUl2SixxQkFBcUIsQ0FBQ0UsVUFBVSxNQUFJO1lBQ2hJcUYsS0FBSyxFQUFFeEIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU3RCxVQUFXO1lBQzlCc0osV0FBVyxFQUFFakgsQ0FBQyxDQUFDLHlDQUF5QyxDQUFFO1lBQzFEdUgsWUFBWSxFQUFFNUMsc0JBQXVCO1lBQ3JDRSxXQUFXLEVBQUVBLFdBQVk7WUFDekJFLFVBQVUsRUFBRUEsVUFBVztZQUN2Qi9ELFlBQVksRUFBRUEsWUFBYTtZQUMzQm9HLFFBQVEsRUFBQyxZQUFZO1lBQ3JCQyxTQUFTLEVBQUU1SixxQkFBcUIsQ0FBQ0UsVUFBVztZQUM1Q3VKLFlBQVksRUFBRWxILENBQUMsQ0FBQywrQ0FBK0MsQ0FBRTtZQUNqRXdILFlBQVksRUFBRSxHQUFJO1lBQ2xCRixTQUFTO1VBQUEsQ0FDVjtRQUFDLENBQ2UsQ0FBQyxlQUNwQjlKLEtBQUEsQ0FBQ25CLDZCQUE2QjtVQUFDdUosT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRMUYsMEJBQTBCLENBQUMsa0JBQWtCLENBQUM7VUFBQSxDQUFDO1VBQUFxRixRQUFBLGdCQUMzRmpJLElBQUEsQ0FBQ2hCLDBCQUEwQjtZQUFBaUosUUFBQSxFQUFFdkYsQ0FBQyxDQUFDLGlDQUFpQztVQUFDLENBQTZCLENBQUMsRUFBQyxHQUFHLGVBQ25HMUMsSUFBQSxDQUFDekMsSUFBSTtZQUFDaUUsS0FBSyxFQUFFLEVBQUc7WUFBQzRILE1BQU0sRUFBRSxFQUFHO1lBQUNDLEtBQUssRUFBQztVQUFTLENBQUUsQ0FBQztRQUFBLENBQ2xCLENBQUM7TUFBQSxDQUNWLENBQUMsZUFDekJuSixLQUFBLENBQUNwQixzQkFBc0I7UUFBQW1KLFFBQUEsZ0JBQ3JCakksSUFBQSxDQUFDbEMsb0JBQW9CO1VBQUNrTCxHQUFHLEVBQUVwRixXQUFZO1VBQUMsMkJBQW1CO1VBQUFxRSxRQUFBLGVBQ3pEakksSUFBQSxDQUFDWCxpQkFBaUI7WUFBQTRJLFFBQUEsZUFDaEJqSSxJQUFBLENBQUN4QyxRQUFRO2NBQ1BrTCxLQUFLLEVBQUVoRyxDQUFDLENBQUMsNkJBQTZCLENBQUU7Y0FDeENpSCxXQUFXLEVBQUV0SCxPQUFPLEdBQUcscUJBQXFCLEdBQUcsb0JBQXFCO2NBQ3BFOEgsT0FBTyxlQUFFbkssSUFBQSxDQUFDMUMsV0FBVztnQkFBQ2tFLEtBQUssRUFBQyxNQUFNO2dCQUFDNEgsTUFBTSxFQUFDLE1BQU07Z0JBQUNDLEtBQUssRUFBRWhILE9BQU8sR0FBRyxTQUFTLEdBQUc7Y0FBVSxDQUFFLENBQUU7Y0FDNUYrSCxpQkFBaUIsRUFBRXZGLHNCQUF1QjtjQUMxQ2EsS0FBSyxFQUFFeEIsVUFBVSxhQUFWQSxVQUFVLGdCQUFBbkMsb0JBQUEsR0FBVm1DLFVBQVUsQ0FBRUgsT0FBTyxjQUFBaEMsb0JBQUEsdUJBQW5CQSxvQkFBQSxDQUFxQndELFlBQWE7Y0FDekM4RSxPQUFPLEVBQUVoSSxPQUFRO2NBQ2pCaUksSUFBSSxFQUFFcEgsZ0JBQWlCO2NBQUErRSxRQUFBLGVBR3ZCakksSUFBQTtnQkFBTXVLLE1BQU07Z0JBQUM7Y0FBVyxDQUFFO1lBQUMsQ0FDbkI7VUFBQyxDQUNNO1FBQUMsQ0FDQSxDQUFDLGVBQ3ZCckssS0FBQSxDQUFDbkIsNkJBQTZCO1VBQUN1SixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtZQUFBLE9BQVExRiwwQkFBMEIsQ0FBQyxlQUFlLENBQUM7VUFBQSxDQUFDO1VBQUFxRixRQUFBLGdCQUN4RmpJLElBQUEsQ0FBQ2hCLDBCQUEwQjtZQUFBaUosUUFBQSxFQUFFdkYsQ0FBQyxDQUFDLDhCQUE4QjtVQUFDLENBQTZCLENBQUMsRUFBQyxHQUFHLGVBQ2hHMUMsSUFBQSxDQUFDekMsSUFBSTtZQUFDaUUsS0FBSyxFQUFFLEVBQUc7WUFBQzRILE1BQU0sRUFBRSxFQUFHO1lBQUNDLEtBQUssRUFBQztVQUFTLENBQUUsQ0FBQztRQUFBLENBQ2xCLENBQUM7TUFBQSxDQUNWLENBQUM7SUFBQSxDQUNULENBQUMsZUFDbkJuSixLQUFBLENBQUNYLG1CQUFtQjtNQUFDaUosTUFBTSxFQUFFLENBQUU7TUFBQVAsUUFBQSxnQkFDN0JqSSxJQUFBLENBQUNSLGtCQUFrQjtRQUFBeUksUUFBQSxFQUFFdkYsQ0FBQyxDQUFDLDhCQUE4QjtNQUFDLENBQXFCLENBQUMsZUFDNUUxQyxJQUFBLENBQUNQLGNBQWM7UUFDYmlHLEtBQUssRUFBRXhCLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFM0QsWUFBYTtRQUNoQ29KLFdBQVcsRUFBRWpILENBQUMsQ0FBQyx3Q0FBd0MsQ0FBRTtRQUN6RHVILFlBQVksRUFBRTVDLHNCQUF1QjtRQUNyQ0UsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCRSxVQUFVLEVBQUVBLFVBQVc7UUFDdkIvRCxZQUFZLEVBQUVBLFlBQWE7UUFDM0JvRyxRQUFRLEVBQUMsY0FBYztRQUN2QkwsS0FBSyxLQUFBQyxNQUFBLENBQUtoSCxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBQWdILE1BQUEsQ0FBSyxFQUFBMUgscUJBQUEsR0FBQUUsTUFBTSxDQUFDNEIsT0FBTyxDQUFDdkQsWUFBWSxjQUFBeUIscUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE2QjBDLE1BQU0sS0FBSSxDQUFDLE9BQUFnRixNQUFBLENBQUl2SixxQkFBcUIsQ0FBQ0ksWUFBWSxNQUFJO1FBQ2pJcUosWUFBWSxFQUFFbEgsQ0FBQyxDQUFDLDhDQUE4QyxDQUFFO1FBQ2hFcUgsU0FBUyxFQUFFNUoscUJBQXFCLENBQUNJO01BQWEsQ0FDL0MsQ0FBQyxlQUNGUCxJQUFBLENBQUNuQyxXQUFXO1FBQ1Y0TCxLQUFLLEtBQUFDLE1BQUEsQ0FBS2hILENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxRQUFBZ0gsTUFBQSxDQUFLLEVBQUF6SCxxQkFBQSxHQUFBQyxNQUFNLENBQUM0QixPQUFPLENBQUN4RCxnQkFBZ0IsY0FBQTJCLHFCQUFBLHVCQUEvQkEscUJBQUEsQ0FBaUN5QyxNQUFNLEtBQUksQ0FBQyxPQUFBZ0YsTUFBQSxDQUFJdkoscUJBQXFCLENBQUNHLGdCQUFnQixNQUFJO1FBQ2xKcUosV0FBVyxFQUFFakgsQ0FBQyxDQUFDLGlDQUFpQyxDQUFFO1FBQ2xEb0gsUUFBUSxFQUFDLGtCQUFrQjtRQUMzQkYsWUFBWSxFQUFFbEgsQ0FBQyxDQUFDLDBDQUEwQyxDQUFFO1FBQzVEZ0QsS0FBSyxFQUFFeEIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU1RCxnQkFBaUI7UUFDcEN1SixRQUFRLEVBQUV4QyxzQkFBdUI7UUFDakNFLFdBQVcsRUFBRUEsV0FBWTtRQUN6QkUsVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCL0QsWUFBWSxFQUFFQSxZQUFhO1FBQzNCcUcsU0FBUyxFQUFFNUoscUJBQXFCLENBQUNHO01BQWlCLENBQ25ELENBQUM7SUFBQSxDQUNpQixDQUFDLEVBQ3JCb0gsbUJBQW1CLENBQUMsQ0FBQztFQUFBLENBQ1YsQ0FBQztBQUVuQixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -21,9 +21,27 @@ import { useDownloadKnowledge } from '../../../hooks/useKnowledge/downloadKnowle
21
21
  import { useOnboardingNavigation } from '../../../hooks/useOnboardingNavigation';
22
22
  import { ModalFileExceeds } from '../../organisms/ModalFileExceeds/ModalFileExceeds';
23
23
  import { allowedFileTypesForKnowledge, fileTypes } from '../../../constants/formatExtensions';
24
- import { canPreviewKnowledgeAttachment, computeAttachmentsTotalSize, MAX_KNOWLEDGE_TOTAL_SIZE, processKnowledgeFiles } from './AbmKnowledgeSection.helpers';
25
24
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
- var MAX_TOTAL_SIZE = MAX_KNOWLEDGE_TOTAL_SIZE;
25
+ function getUniqueString(prevStrings, stringToChange) {
26
+ var _stringToChange$split = stringToChange.split('.'),
27
+ _stringToChange$split2 = _slicedToArray(_stringToChange$split, 2),
28
+ filename = _stringToChange$split2[0],
29
+ _stringToChange$split3 = _stringToChange$split2[1],
30
+ extension = _stringToChange$split3 === void 0 ? '' : _stringToChange$split3;
31
+ var ext = extension ? ".".concat(extension) : '';
32
+ if (!(prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(stringToChange))) {
33
+ return stringToChange;
34
+ }
35
+ var counter = 1;
36
+ var newFilename;
37
+ do {
38
+ newFilename = "".concat(filename, "(").concat(counter, ")").concat(ext);
39
+ counter++;
40
+ } while (prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(newFilename));
41
+ return newFilename;
42
+ }
43
+ var MAX_TOTAL_SIZE = 5 * 1024 * 1024; // 5MB total
44
+
27
45
  export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
28
46
  var handleSetAgentValues = _ref.handleSetAgentValues,
29
47
  values = _ref.values,
@@ -61,7 +79,12 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
61
79
  _useState8 = _slicedToArray(_useState7, 2),
62
80
  isDragging = _useState8[0],
63
81
  setIsDragging = _useState8[1];
64
- var currentTotalSize = computeAttachmentsTotalSize(localAttachments || []);
82
+
83
+ // Calcular el tamaño total actual de archivos
84
+ var currentTotalSize = (localAttachments || []).reduce(function (total, attachment) {
85
+ var size = typeof attachment.size === 'number' ? attachment.size : Number(attachment.size);
86
+ return total + (Number.isNaN(size) ? 0 : size);
87
+ }, 0);
65
88
  var isAtSizeLimit = currentTotalSize >= MAX_TOTAL_SIZE;
66
89
  var handleAttachClick = function handleAttachClick() {
67
90
  var _fileInputRef$current;
@@ -73,21 +96,63 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
73
96
  var handleFileSelect = function handleFileSelect(e) {
74
97
  var files = e.target.files;
75
98
  if (!files) return;
76
- var _processKnowledgeFile = processKnowledgeFiles({
77
- files: Array.from(files),
78
- existingAttachments: localAttachments || [],
79
- allowedExtensions: allowedFileTypesForKnowledge,
80
- fileTypes: fileTypes,
81
- maxTotalSize: MAX_TOTAL_SIZE
82
- }),
83
- insertedFiles = _processKnowledgeFile.insertedFiles,
84
- exceededFiles = _processKnowledgeFile.exceededFiles,
85
- invalidExtensionFiles = _processKnowledgeFile.invalidExtensionFiles,
86
- hasErrors = _processKnowledgeFile.hasErrors;
99
+ var exceededFiles = [];
100
+ var excludedFiles = [];
101
+ var invalidExtensionFiles = [];
102
+ var insertedFiles = [];
103
+ var attachmentsNames = (localAttachments || []).map(function (attachment) {
104
+ return attachment.name;
105
+ });
106
+
107
+ // Calcular el tamaño total actual de archivos ya adjuntos
108
+ var existingTotalSize = (localAttachments || []).reduce(function (total, attachment) {
109
+ var size = typeof attachment.size === 'number' ? attachment.size : Number(attachment.size);
110
+ return total + (Number.isNaN(size) ? 0 : size);
111
+ }, 0);
112
+ var runningTotalSize = existingTotalSize;
113
+ Array.from(files).forEach(function (file) {
114
+ var _fileNameParts$pop;
115
+ var fileNameParts = file.name.split('.');
116
+ var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop = fileNameParts.pop()) === null || _fileNameParts$pop === void 0 ? void 0 : _fileNameParts$pop.toLowerCase()) : '';
117
+ if (!allowedFileTypesForKnowledge.includes(fileExtension)) {
118
+ invalidExtensionFiles.push(file.name);
119
+ return;
120
+ }
121
+
122
+ // Verificar si agregar este archivo excedería el límite total de 5MB
123
+ var newTotalSize = runningTotalSize + file.size;
124
+ if (newTotalSize > MAX_TOTAL_SIZE) {
125
+ exceededFiles.push(file.name);
126
+ return;
127
+ }
128
+ var typeFile = file.type || fileTypes[fileExtension];
129
+ var uniqueName = getUniqueString(attachmentsNames, file.name);
130
+ var parsedFile = new File([file], uniqueName, {
131
+ type: typeFile
132
+ });
133
+ var attachmentFile = {
134
+ file: parsedFile,
135
+ id: "".concat(Date.now(), "-").concat(Math.random()),
136
+ name: uniqueName,
137
+ size: file.size,
138
+ type: typeFile,
139
+ status: 'started'
140
+ };
141
+
142
+ // Solo agregar el archivo si no está en la lista de archivos excedidos
143
+ if (!exceededFiles.includes(file.name)) {
144
+ insertedFiles.push(attachmentFile);
145
+ // Actualizar el tamaño total para la siguiente validación
146
+ runningTotalSize += file.size;
147
+ }
148
+ });
149
+
150
+ // Mostrar modal si hay archivos con extensión inválida o que exceden el límite
151
+ var hasErrors = invalidExtensionFiles.length > 0 || exceededFiles.length > 0;
87
152
  if (hasErrors) {
88
153
  setModalProps({
89
154
  isOpen: true,
90
- excludedFiles: [],
155
+ excludedFiles: excludedFiles,
91
156
  exceededFiles: exceededFiles,
92
157
  invalidExtensionFiles: invalidExtensionFiles
93
158
  });
@@ -95,13 +160,15 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
95
160
  } else {
96
161
  onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
97
162
  }
163
+
164
+ // Solo agregar archivos válidos que no excedan el límite
98
165
  if (insertedFiles.length) {
99
166
  handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
100
167
  key: 'knowledge',
101
168
  value: insertedFiles
102
169
  });
103
170
  setLocalAttachments(function (prev) {
104
- return [].concat(_toConsumableArray(prev || []), _toConsumableArray(insertedFiles));
171
+ return [].concat(_toConsumableArray(prev || []), insertedFiles);
105
172
  });
106
173
  }
107
174
  };
@@ -192,7 +259,12 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
192
259
  }
193
260
  };
194
261
  var handleAttachmentClick = function handleAttachmentClick(attachment) {
195
- if (canPreviewKnowledgeAttachment(attachment)) {
262
+ // Permitir previsualización si tiene archivo local o URLs del backend
263
+ // Solo si no tiene errores (status !== 'failed')
264
+ if (attachment.status === 'failed') {
265
+ return;
266
+ }
267
+ if (attachment.file instanceof File || attachment.originalFile instanceof File || attachment.url_thumbnail || attachment.url_original || attachment.url_file) {
196
268
  setPreviewAttachment(attachment);
197
269
  }
198
270
  };
@@ -299,4 +371,4 @@ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
299
371
  })]
300
372
  });
301
373
  };
302
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sdGlwIiwiRmlsZVVwbG9hZCIsIk9wZW4iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVRyYW5zbGF0aW9uIiwiQXR0YWNobWVudENhcmQiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiU0NBS1NXcmFwcGVyIiwiU0NBS1NXcmFwcGVySGVhZGVyIiwiU0NBS1NXcmFwcGVyQ29udGVudCIsIlNDQUtTV3JhcHBlckhlYWRlclRpdGxlIiwiU0NBS1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50IiwiU0NBS1NBdHRhY2htZW50c1dyYXBwZXIiLCJTQ0FLU01vcmVJbmZvU3BhbiIsIlNDQUtTTW9yZUluZm9JY29uV3JhcHBlciIsIlNDQUtTRHJvcFpvbmUiLCJTQ0FLU0Ryb3Bab25lSWNvbiIsIlNDQUtTRHJvcFpvbmVUZXh0IiwiU0NBS1NEcm9wWm9uZUluZm8iLCJTQ0FLU0Ryb3Bab25lVGV4dFNwYW4iLCJ1c2VEb3dubG9hZEtub3dsZWRnZSIsInVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiTW9kYWxGaWxlRXhjZWVkcyIsImFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UiLCJmaWxlVHlwZXMiLCJjYW5QcmV2aWV3S25vd2xlZGdlQXR0YWNobWVudCIsImNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZSIsIk1BWF9LTk9XTEVER0VfVE9UQUxfU0laRSIsInByb2Nlc3NLbm93bGVkZ2VGaWxlcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIk1BWF9UT1RBTF9TSVpFIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIl9yZWYiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsInZhbHVlcyIsIm9uRmlsZUVycm9yQ2hhbmdlIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsImtub3dsZWRnZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImxvY2FsQXR0YWNobWVudHMiLCJzZXRMb2NhbEF0dGFjaG1lbnRzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VTdGF0ZTUiLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImludmFsaWRFeHRlbnNpb25GaWxlcyIsIl91c2VTdGF0ZTYiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsIl91c2VEb3dubG9hZEtub3dsZWRnZSIsImhhbmRsZURvd25sb2FkS25vd2xlZGdlIiwiaXNEb3dubG9hZGluZ1N1Y2Nlc3MiLCJzdWNjZXNzIiwiaXNEb3dubG9hZGluZ0Vycm9yIiwiZXJyb3IiLCJpc0Rvd25sb2FkaW5nIiwiaXNMb2FkaW5nIiwiaGFuZGxlUmVzZXRTdGF0ZXMiLCJfdXNlT25ib2FyZGluZ05hdmlnYXQiLCJoYW5kbGVPbmJvYXJkaW5nTmF2aWdhdGlvbiIsImZpbGVJbnB1dFJlZiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNEcmFnZ2luZyIsInNldElzRHJhZ2dpbmciLCJjdXJyZW50VG90YWxTaXplIiwiaXNBdFNpemVMaW1pdCIsImhhbmRsZUF0dGFjaENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiY3VycmVudCIsImNsaWNrIiwiaGFuZGxlRmlsZVNlbGVjdCIsImUiLCJmaWxlcyIsInRhcmdldCIsIl9wcm9jZXNzS25vd2xlZGdlRmlsZSIsIkFycmF5IiwiZnJvbSIsImV4aXN0aW5nQXR0YWNobWVudHMiLCJhbGxvd2VkRXh0ZW5zaW9ucyIsIm1heFRvdGFsU2l6ZSIsImluc2VydGVkRmlsZXMiLCJoYXNFcnJvcnMiLCJsZW5ndGgiLCJrZXkiLCJ2YWx1ZSIsInByZXYiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJoYW5kbGVEcmFnRW50ZXIiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJvcCIsImRhdGFUcmFuc2ZlciIsInN5bnRoZXRpY0V2ZW50IiwiaGFuZGxlRGVsZXRlQXR0YWNobWVudCIsImlkIiwiZmlsZVRvRGVsZXRlIiwibmV3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJfIiwiaW5kZXgiLCJkZWxldGVLbm93bGVkZ2UiLCJoYW5kbGVEb3dubG9hZEF0dGFjaG1lbnQiLCJmaWxlIiwiYWdlbnRJZCIsImdlbmVyYWwiLCJ0b1N0cmluZyIsImtub3dsZWRnZUlkIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYmxvYiIsImxpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJmaWxlbmFtZSIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImhhbmRsZUFjdGlvbiIsIl9yZWYyIiwiYWN0aW9uIiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImhhbmRsZUNsb3NlUHJldmlldyIsImNoaWxkcmVuIiwiJGluZGV4Iiwib25DbGljayIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJ0aXRsZSIsInpJbmRleCIsIm9uRHJhZ0VudGVyIiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25Ecm9wIiwibWFwIiwicG9zaXRpb25JbmRleCIsImFibUtub3dsZWRnZVNlY3Rpb24iLCJmdWxsV2lkdGgiLCJuYW1lIiwicmVmIiwidHlwZSIsIm11bHRpcGxlIiwiYWNjZXB0Iiwib25DaGFuZ2UiLCJvbkNsb3NlIiwic2VjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUtub3dsZWRnZVNlY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWN5Y2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9hbmNob3ItaXMtdmFsaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvRmlsZVVwbG9hZCdcbmltcG9ydCB7IE9wZW4gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9PcGVuJ1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIERyYWdFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIFNDQUtTV3JhcHBlcixcbiAgU0NBS1NXcmFwcGVySGVhZGVyLFxuICBTQ0FLU1dyYXBwZXJDb250ZW50LFxuICBTQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZSxcbiAgU0NBS1NXcmFwcGVySGVhZGVySW5mbyxcbiAgU0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQsXG4gIFNDQUtTQXR0YWNobWVudHNXcmFwcGVyLFxuICBTQ0FLU01vcmVJbmZvU3BhbixcbiAgU0NBS1NNb3JlSW5mb0ljb25XcmFwcGVyLFxuICBTQ0FLU0Ryb3Bab25lLFxuICBTQ0FLU0Ryb3Bab25lSWNvbixcbiAgU0NBS1NEcm9wWm9uZVRleHQsXG4gIFNDQUtTRHJvcFpvbmVJbmZvLFxuICBTQ0FLU0Ryb3Bab25lVGV4dFNwYW4sXG59IGZyb20gJy4vQWJtS25vd2xlZGdlU2VjdGlvbi5zdHlsZXMnXG5pbXBvcnQgeyB1c2VEb3dubG9hZEtub3dsZWRnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUtub3dsZWRnZS9kb3dubG9hZEtub3dsZWRnZSdcbmltcG9ydCB7IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlT25ib2FyZGluZ05hdmlnYXRpb24nXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IGFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UsIGZpbGVUeXBlcyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9mb3JtYXRFeHRlbnNpb25zJ1xuaW1wb3J0IHtcbiAgY2FuUHJldmlld0tub3dsZWRnZUF0dGFjaG1lbnQsXG4gIGNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZSxcbiAgTUFYX0tOT1dMRURHRV9UT1RBTF9TSVpFLFxuICBwcm9jZXNzS25vd2xlZGdlRmlsZXMsXG59IGZyb20gJy4vQWJtS25vd2xlZGdlU2VjdGlvbi5oZWxwZXJzJ1xuXG5jb25zdCBNQVhfVE9UQUxfU0laRSA9IE1BWF9LTk9XTEVER0VfVE9UQUxfU0laRVxuXG5leHBvcnQgY29uc3QgQWJtS25vd2xlZGdlU2VjdGlvbiA9ICh7XG4gIGhhbmRsZVNldEFnZW50VmFsdWVzLFxuICB2YWx1ZXMsXG4gIG9uRmlsZUVycm9yQ2hhbmdlLFxuICB0b29sdGlwWkluZGV4LFxufToge1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogdW5rbm93blxuICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgfSkgPT4gdm9pZFxuICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gIG9uRmlsZUVycm9yQ2hhbmdlPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG59KSA9PiB7XG4gIGNvbnN0IFtsb2NhbEF0dGFjaG1lbnRzLCBzZXRMb2NhbEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlW10+KHZhbHVlcy5rbm93bGVkZ2UgfHwgW10pXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGludmFsaWRFeHRlbnNpb25GaWxlczogW10gYXMgc3RyaW5nW10sXG4gIH0pXG4gIGNvbnN0IHtcbiAgICBoYW5kbGVEb3dubG9hZEtub3dsZWRnZSxcbiAgICBzdWNjZXNzOiBpc0Rvd25sb2FkaW5nU3VjY2VzcyxcbiAgICBlcnJvcjogaXNEb3dubG9hZGluZ0Vycm9yLFxuICAgIGlzTG9hZGluZzogaXNEb3dubG9hZGluZyxcbiAgICBoYW5kbGVSZXNldFN0YXRlcyxcbiAgfSA9IHVzZURvd25sb2FkS25vd2xlZGdlKClcbiAgY29uc3QgeyBoYW5kbGVPbmJvYXJkaW5nTmF2aWdhdGlvbiB9ID0gdXNlT25ib2FyZGluZ05hdmlnYXRpb24oKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2lzRHJhZ2dpbmcsIHNldElzRHJhZ2dpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFRvdGFsU2l6ZSA9IGNvbXB1dGVBdHRhY2htZW50c1RvdGFsU2l6ZShsb2NhbEF0dGFjaG1lbnRzIHx8IFtdKVxuICBjb25zdCBpc0F0U2l6ZUxpbWl0ID0gY3VycmVudFRvdGFsU2l6ZSA+PSBNQVhfVE9UQUxfU0laRVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0F0U2l6ZUxpbWl0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLnRhcmdldFxuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgeyBpbnNlcnRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXMsIGhhc0Vycm9ycyB9ID0gcHJvY2Vzc0tub3dsZWRnZUZpbGVzKHtcbiAgICAgIGZpbGVzOiBBcnJheS5mcm9tKGZpbGVzKSxcbiAgICAgIGV4aXN0aW5nQXR0YWNobWVudHM6IGxvY2FsQXR0YWNobWVudHMgfHwgW10sXG4gICAgICBhbGxvd2VkRXh0ZW5zaW9uczogYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZSxcbiAgICAgIGZpbGVUeXBlcyxcbiAgICAgIG1heFRvdGFsU2l6ZTogTUFYX1RPVEFMX1NJWkUsXG4gICAgfSlcblxuICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzLCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXMgfSlcbiAgICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4odHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/LihmYWxzZSlcbiAgICB9XG5cbiAgICBpZiAoaW5zZXJ0ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzPy4oeyBrZXk6ICdrbm93bGVkZ2UnLCB2YWx1ZTogaW5zZXJ0ZWRGaWxlcyB9KVxuICAgICAgc2V0TG9jYWxBdHRhY2htZW50cyhwcmV2ID0+IFsuLi4ocHJldiB8fCBbXSksIC4uLmluc2VydGVkRmlsZXNdKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbnRlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmICghaXNBdFNpemVMaW1pdCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG5cbiAgICBpZiAoaXNBdFNpemVMaW1pdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgeyBmaWxlcyB9ID0gZS5kYXRhVHJhbnNmZXJcbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ3JlYXIgdW4gZXZlbnRvIHNpbnTDqXRpY28gcGFyYSByZXV0aWxpemFyIGxhIGzDs2dpY2EgZGUgaGFuZGxlRmlsZVNlbGVjdFxuICAgIGNvbnN0IHN5bnRoZXRpY0V2ZW50ID0ge1xuICAgICAgdGFyZ2V0OiB7IGZpbGVzIH0sXG4gICAgfSBhcyBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PlxuXG4gICAgaGFuZGxlRmlsZVNlbGVjdChzeW50aGV0aWNFdmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpbGVUb0RlbGV0ZSA9IGxvY2FsQXR0YWNobWVudHNbaWRdXG4gICAgaWYgKCFmaWxlVG9EZWxldGUpIHJldHVyblxuXG4gICAgY29uc3QgbmV3QXR0YWNobWVudHMgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGlkKVxuICAgIHNldExvY2FsQXR0YWNobWVudHMobmV3QXR0YWNobWVudHMpXG5cbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcz8uKHsga2V5OiAna25vd2xlZGdlJywgdmFsdWU6IG5ld0F0dGFjaG1lbnRzLCBkZWxldGVLbm93bGVkZ2U6IHRydWUgfSlcblxuICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEb3dubG9hZEF0dGFjaG1lbnQgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSlbaWRdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cblxuICAgIGhhbmRsZURvd25sb2FkS25vd2xlZGdlKHsgYWdlbnRJZDogdmFsdWVzLmdlbmVyYWwuaWQhLnRvU3RyaW5nKCksIGtub3dsZWRnZUlkOiBmaWxlLmlkIH0pXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Rvd25sb2FkaW5nU3VjY2VzcyAmJiAhaXNEb3dubG9hZGluZ0Vycm9yICYmICFpc0Rvd25sb2FkaW5nKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGlzRG93bmxvYWRpbmdTdWNjZXNzLmJsb2IpXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSB1cmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBpc0Rvd25sb2FkaW5nU3VjY2Vzcy5maWxlbmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICAgICAgaGFuZGxlUmVzZXRTdGF0ZXMoKVxuICAgICAgfSwgMTAwKVxuICAgIH1cbiAgfSwgW2lzRG93bmxvYWRpbmdTdWNjZXNzLCBpc0Rvd25sb2FkaW5nRXJyb3IsIGlzRG93bmxvYWRpbmcsIGhhbmRsZVJlc2V0U3RhdGVzXSlcblxuICBjb25zdCBoYW5kbGVBY3Rpb24gPSAoeyBpZCwgYWN0aW9uIH06IHsgaWQ6IG51bWJlcjsgYWN0aW9uOiAnZGVsZXRlJyB8ICdkb3dubG9hZCcgfSkgPT4ge1xuICAgIGlmIChpc0Rvd25sb2FkaW5nKSByZXR1cm5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgaGFuZGxlRGVsZXRlQXR0YWNobWVudChpZClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYWN0aW9uID09PSAnZG93bmxvYWQnKSB7XG4gICAgICBoYW5kbGVEb3dubG9hZEF0dGFjaG1lbnQoaWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgaWYgKGNhblByZXZpZXdLbm93bGVkZ2VBdHRhY2htZW50KGF0dGFjaG1lbnQpKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNDQUtTV3JhcHBlcj5cbiAgICAgICAgPFNDQUtTV3JhcHBlckhlYWRlciAkaW5kZXg9ezB9PlxuICAgICAgICAgIDxTQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZT57dCgna25vd2xlZGdlU2VjdGlvbi5rbm93bGVkZ2VUYWInKX08L1NDQUtTV3JhcHBlckhlYWRlclRpdGxlPlxuICAgICAgICAgIDxTQ0FLU1dyYXBwZXJIZWFkZXJJbmZvPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24uaW5mb0xhYmVsJyl9XG4gICAgICAgICAgICAgIDxTQ0FLU01vcmVJbmZvU3BhbiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPbmJvYXJkaW5nTmF2aWdhdGlvbignbW9yZUluZm8nKX0+XG4gICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24ubW9yZUluZm8nKX1cbiAgICAgICAgICAgICAgICA8U0NBS1NNb3JlSW5mb0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgPE9wZW4gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSBjb2xvcj1cIiMwMDZGQUZcIiAvPlxuICAgICAgICAgICAgICAgIDwvU0NBS1NNb3JlSW5mb0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICA8L1NDQUtTTW9yZUluZm9TcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9TQ0FLU1dyYXBwZXJIZWFkZXJJbmZvPlxuICAgICAgICA8L1NDQUtTV3JhcHBlckhlYWRlcj5cbiAgICAgICAgPFNDQUtTV3JhcHBlckNvbnRlbnQgJGluZGV4PXsxfT5cbiAgICAgICAgICA8U0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNBdFNpemVMaW1pdCA/IHQoJ2tub3dsZWRnZVNlY3Rpb24uZXJyb3IubWF4U2l6ZVRpdGxlJykgOiAnJ30gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVcbiAgICAgICAgICAgICAgICBpc0F0U2l6ZUxpbWl0PXtpc0F0U2l6ZUxpbWl0fVxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmc9e2lzRHJhZ2dpbmd9XG4gICAgICAgICAgICAgICAgb25EcmFnRW50ZXI9e2hhbmRsZURyYWdFbnRlcn1cbiAgICAgICAgICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxuICAgICAgICAgICAgICAgIG9uRHJhZ092ZXI9e2hhbmRsZURyYWdPdmVyfVxuICAgICAgICAgICAgICAgIG9uRHJvcD17aGFuZGxlRHJvcH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxGaWxlVXBsb2FkIHdpZHRoPXszMH0gaGVpZ2h0PXszMH0gY29sb3I9e2lzQXRTaXplTGltaXQgPyAnIzk5OScgOiAnIzAwNkZBRid9IC8+XG4gICAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lSWNvbj5cbiAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZVRleHQ+XG4gICAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZVRleHRTcGFuIGlzQXRTaXplTGltaXQ9e2lzQXRTaXplTGltaXR9IGRhdGEtZHJvcHpvbmUtbGluayBvbkNsaWNrPXtoYW5kbGVBdHRhY2hDbGlja30+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLmRyb3Bab25lVGV4dC4xJyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmVUZXh0U3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt0KCdrbm93bGVkZ2VTZWN0aW9uLmRyb3Bab25lVGV4dC4yJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZVRleHQ+XG4gICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVJbmZvPnt0KCdrbm93bGVkZ2VTZWN0aW9uLmluZm9GaWxlVHlwZXMnKX08L1NDQUtTRHJvcFpvbmVJbmZvPlxuICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmU+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPC9TQ0FLU0ZpbGVVcGxvYWRXcmFwcGVyQ29udGVudD5cbiAgICAgICAgICA8U0NBS1NBdHRhY2htZW50c1dyYXBwZXI+XG4gICAgICAgICAgICB7KGxvY2FsQXR0YWNobWVudHMgfHwgW10pLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAga2V5PXtgYXR0YWNobWVudC0ke2F0dGFjaG1lbnQ/Lm5hbWV9LSR7YXR0YWNobWVudD8uaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVBY3Rpb249e2hhbmRsZUFjdGlvbn1cbiAgICAgICAgICAgICAgICAgIGFibUtub3dsZWRnZVNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBS1NBdHRhY2htZW50c1dyYXBwZXI+XG4gICAgICAgIDwvU0NBS1NXcmFwcGVyQ29udGVudD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgYWNjZXB0PVwiLnR4dCwubWQsLmNzdiwuZG9jLC5kb2N4LC5wcHQsLnBwdHgsLnBkZiwucG5nLC5qcGcsLmpwZWcsLnhsc3gsLnhsc1wiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1NDQUtTV3JhcHBlcj5cbiAgICAgIHttb2RhbFByb3BzLmlzT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbEZpbGVFeGNlZWRzXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogZmFsc2UsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzOiBbXSwgaW52YWxpZEV4dGVuc2lvbkZpbGVzOiBbXSB9KVxuICAgICAgICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/LihmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgaW52YWxpZEV4dGVuc2lvbkZpbGVzPXttb2RhbFByb3BzLmludmFsaWRFeHRlbnNpb25GaWxlc31cbiAgICAgICAgICBzZWN0aW9uPVwiYWJtX2FnZW50XCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBaUNDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUMzRSxTQUFTQyxjQUFjLFFB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
374
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sdGlwIiwiRmlsZVVwbG9hZCIsIk9wZW4iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVRyYW5zbGF0aW9uIiwiQXR0YWNobWVudENhcmQiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiU0NBS1NXcmFwcGVyIiwiU0NBS1NXcmFwcGVySGVhZGVyIiwiU0NBS1NXcmFwcGVyQ29udGVudCIsIlNDQUtTV3JhcHBlckhlYWRlclRpdGxlIiwiU0NBS1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50IiwiU0NBS1NBdHRhY2htZW50c1dyYXBwZXIiLCJTQ0FLU01vcmVJbmZvU3BhbiIsIlNDQUtTTW9yZUluZm9JY29uV3JhcHBlciIsIlNDQUtTRHJvcFpvbmUiLCJTQ0FLU0Ryb3Bab25lSWNvbiIsIlNDQUtTRHJvcFpvbmVUZXh0IiwiU0NBS1NEcm9wWm9uZUluZm8iLCJTQ0FLU0Ryb3Bab25lVGV4dFNwYW4iLCJ1c2VEb3dubG9hZEtub3dsZWRnZSIsInVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiTW9kYWxGaWxlRXhjZWVkcyIsImFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UiLCJmaWxlVHlwZXMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJnZXRVbmlxdWVTdHJpbmciLCJwcmV2U3RyaW5ncyIsInN0cmluZ1RvQ2hhbmdlIiwiX3N0cmluZ1RvQ2hhbmdlJHNwbGl0Iiwic3BsaXQiLCJfc3RyaW5nVG9DaGFuZ2Ukc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJmaWxlbmFtZSIsIl9zdHJpbmdUb0NoYW5nZSRzcGxpdDMiLCJleHRlbnNpb24iLCJleHQiLCJjb25jYXQiLCJpbmNsdWRlcyIsImNvdW50ZXIiLCJuZXdGaWxlbmFtZSIsIk1BWF9UT1RBTF9TSVpFIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIl9yZWYiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsInZhbHVlcyIsIm9uRmlsZUVycm9yQ2hhbmdlIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsImtub3dsZWRnZSIsIl91c2VTdGF0ZTIiLCJsb2NhbEF0dGFjaG1lbnRzIiwic2V0TG9jYWxBdHRhY2htZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGU1IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJpbnZhbGlkRXh0ZW5zaW9uRmlsZXMiLCJfdXNlU3RhdGU2IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJfdXNlRG93bmxvYWRLbm93bGVkZ2UiLCJoYW5kbGVEb3dubG9hZEtub3dsZWRnZSIsImlzRG93bmxvYWRpbmdTdWNjZXNzIiwic3VjY2VzcyIsImlzRG93bmxvYWRpbmdFcnJvciIsImVycm9yIiwiaXNEb3dubG9hZGluZyIsImlzTG9hZGluZyIsImhhbmRsZVJlc2V0U3RhdGVzIiwiX3VzZU9uYm9hcmRpbmdOYXZpZ2F0IiwiaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24iLCJmaWxlSW5wdXRSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiY3VycmVudFRvdGFsU2l6ZSIsInJlZHVjZSIsInRvdGFsIiwiYXR0YWNobWVudCIsInNpemUiLCJOdW1iZXIiLCJpc05hTiIsImlzQXRTaXplTGltaXQiLCJoYW5kbGVBdHRhY2hDbGljayIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnQiLCJjbGljayIsImhhbmRsZUZpbGVTZWxlY3QiLCJlIiwiZmlsZXMiLCJ0YXJnZXQiLCJpbnNlcnRlZEZpbGVzIiwiYXR0YWNobWVudHNOYW1lcyIsIm1hcCIsIm5hbWUiLCJleGlzdGluZ1RvdGFsU2l6ZSIsInJ1bm5pbmdUb3RhbFNpemUiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImZpbGVOYW1lUGFydHMiLCJmaWxlRXh0ZW5zaW9uIiwibGVuZ3RoIiwicG9wIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwibmV3VG90YWxTaXplIiwidHlwZUZpbGUiLCJ0eXBlIiwidW5pcXVlTmFtZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiYXR0YWNobWVudEZpbGUiLCJpZCIsIkRhdGUiLCJub3ciLCJNYXRoIiwicmFuZG9tIiwic3RhdHVzIiwiaGFzRXJyb3JzIiwia2V5IiwidmFsdWUiLCJwcmV2IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFuZGxlRHJhZ0VudGVyIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJzeW50aGV0aWNFdmVudCIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlVG9EZWxldGUiLCJuZXdBdHRhY2htZW50cyIsImZpbHRlciIsIl8iLCJpbmRleCIsImRlbGV0ZUtub3dsZWRnZSIsImhhbmRsZURvd25sb2FkQXR0YWNobWVudCIsImFnZW50SWQiLCJnZW5lcmFsIiwidG9TdHJpbmciLCJrbm93bGVkZ2VJZCIsInVybCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJsb2IiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImRvd25sb2FkIiwic3R5bGUiLCJkaXNwbGF5IiwiYm9keSIsImFwcGVuZENoaWxkIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiaGFuZGxlQWN0aW9uIiwiX3JlZjIiLCJhY3Rpb24iLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJjaGlsZHJlbiIsIiRpbmRleCIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidGl0bGUiLCJ6SW5kZXgiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsInBvc2l0aW9uSW5kZXgiLCJhYm1Lbm93bGVkZ2VTZWN0aW9uIiwiZnVsbFdpZHRoIiwicmVmIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJzZWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtS25vd2xlZGdlU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2FuY2hvci1pcy12YWxpZCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9GaWxlVXBsb2FkJ1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL09wZW4nXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgRHJhZ0V2ZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgU0NBS1NXcmFwcGVyLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXIsXG4gIFNDQUtTV3JhcHBlckNvbnRlbnQsXG4gIFNDQUtTV3JhcHBlckhlYWRlclRpdGxlLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXJJbmZvLFxuICBTQ0FLU0ZpbGVVcGxvYWRXcmFwcGVyQ29udGVudCxcbiAgU0NBS1NBdHRhY2htZW50c1dyYXBwZXIsXG4gIFNDQUtTTW9yZUluZm9TcGFuLFxuICBTQ0FLU01vcmVJbmZvSWNvbldyYXBwZXIsXG4gIFNDQUtTRHJvcFpvbmUsXG4gIFNDQUtTRHJvcFpvbmVJY29uLFxuICBTQ0FLU0Ryb3Bab25lVGV4dCxcbiAgU0NBS1NEcm9wWm9uZUluZm8sXG4gIFNDQUtTRHJvcFpvbmVUZXh0U3Bhbixcbn0gZnJvbSAnLi9BYm1Lbm93bGVkZ2VTZWN0aW9uLnN0eWxlcydcbmltcG9ydCB7IHVzZURvd25sb2FkS25vd2xlZGdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlL2Rvd25sb2FkS25vd2xlZGdlJ1xuaW1wb3J0IHsgdXNlT25ib2FyZGluZ05hdmlnYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VPbmJvYXJkaW5nTmF2aWdhdGlvbidcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZSwgZmlsZVR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5cbmZ1bmN0aW9uIGdldFVuaXF1ZVN0cmluZyhwcmV2U3RyaW5nczogc3RyaW5nW10sIHN0cmluZ1RvQ2hhbmdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbZmlsZW5hbWUsIGV4dGVuc2lvbiA9ICcnXSA9IHN0cmluZ1RvQ2hhbmdlLnNwbGl0KCcuJylcbiAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uID8gYC4ke2V4dGVuc2lvbn1gIDogJydcblxuICBpZiAoIXByZXZTdHJpbmdzPy5pbmNsdWRlcyhzdHJpbmdUb0NoYW5nZSkpIHtcbiAgICByZXR1cm4gc3RyaW5nVG9DaGFuZ2VcbiAgfVxuXG4gIGxldCBjb3VudGVyID0gMVxuICBsZXQgbmV3RmlsZW5hbWVcbiAgZG8ge1xuICAgIG5ld0ZpbGVuYW1lID0gYCR7ZmlsZW5hbWV9KCR7Y291bnRlcn0pJHtleHR9YFxuICAgIGNvdW50ZXIrK1xuICB9IHdoaWxlIChwcmV2U3RyaW5ncz8uaW5jbHVkZXMobmV3RmlsZW5hbWUpKVxuXG4gIHJldHVybiBuZXdGaWxlbmFtZVxufVxuXG5jb25zdCBNQVhfVE9UQUxfU0laRSA9IDUgKiAxMDI0ICogMTAyNCAvLyA1TUIgdG90YWxcblxuZXhwb3J0IGNvbnN0IEFibUtub3dsZWRnZVNlY3Rpb24gPSAoe1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlcyxcbiAgdmFsdWVzLFxuICBvbkZpbGVFcnJvckNoYW5nZSxcbiAgdG9vbHRpcFpJbmRleCxcbn06IHtcbiAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHZvaWRcbiAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICBvbkZpbGVFcnJvckNoYW5nZT86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxufSkgPT4ge1xuICBjb25zdCBbbG9jYWxBdHRhY2htZW50cywgc2V0TG9jYWxBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZVtdPih2YWx1ZXMua25vd2xlZGdlIHx8IFtdKVxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYWJtX2FnZW50X3NlY3Rpb24nKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICB9KVxuICBjb25zdCB7XG4gICAgaGFuZGxlRG93bmxvYWRLbm93bGVkZ2UsXG4gICAgc3VjY2VzczogaXNEb3dubG9hZGluZ1N1Y2Nlc3MsXG4gICAgZXJyb3I6IGlzRG93bmxvYWRpbmdFcnJvcixcbiAgICBpc0xvYWRpbmc6IGlzRG93bmxvYWRpbmcsXG4gICAgaGFuZGxlUmVzZXRTdGF0ZXMsXG4gIH0gPSB1c2VEb3dubG9hZEtub3dsZWRnZSgpXG4gIGNvbnN0IHsgaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24gfSA9IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zXG4gIGNvbnN0IGN1cnJlbnRUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJyA/IGF0dGFjaG1lbnQuc2l6ZSA6IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgcmV0dXJuIHRvdGFsICsgKE51bWJlci5pc05hTihzaXplKSA/IDAgOiBzaXplKVxuICB9LCAwKVxuICBjb25zdCBpc0F0U2l6ZUxpbWl0ID0gY3VycmVudFRvdGFsU2l6ZSA+PSBNQVhfVE9UQUxfU0laRVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0F0U2l6ZUxpbWl0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLnRhcmdldFxuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnNlcnRlZEZpbGVzOiBBdHRhY2htZW50RmlsZVtdID0gW11cbiAgICBjb25zdCBhdHRhY2htZW50c05hbWVzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLm1hcChhdHRhY2htZW50ID0+IGF0dGFjaG1lbnQubmFtZSlcblxuICAgIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zIHlhIGFkanVudG9zXG4gICAgY29uc3QgZXhpc3RpbmdUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInID8gYXR0YWNobWVudC5zaXplIDogTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgIHJldHVybiB0b3RhbCArIChOdW1iZXIuaXNOYU4oc2l6ZSkgPyAwIDogc2l6ZSlcbiAgICB9LCAwKVxuICAgIGxldCBydW5uaW5nVG90YWxTaXplID0gZXhpc3RpbmdUb3RhbFNpemVcbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgYWdyZWdhciBlc3RlIGFyY2hpdm8gZXhjZWRlcsOtYSBlbCBsw61taXRlIHRvdGFsIGRlIDVNQlxuICAgICAgY29uc3QgbmV3VG90YWxTaXplID0gcnVubmluZ1RvdGFsU2l6ZSArIGZpbGUuc2l6ZVxuICAgICAgaWYgKG5ld1RvdGFsU2l6ZSA+IE1BWF9UT1RBTF9TSVpFKSB7XG4gICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBnZXRVbmlxdWVTdHJpbmcoYXR0YWNobWVudHNOYW1lcywgZmlsZS5uYW1lKVxuICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgdW5pcXVlTmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuXG4gICAgICBjb25zdCBhdHRhY2htZW50RmlsZTogQXR0YWNobWVudEZpbGUgPSB7XG4gICAgICAgIGZpbGU6IHBhcnNlZEZpbGUsXG4gICAgICAgIGlkOiBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCxcbiAgICAgICAgbmFtZTogdW5pcXVlTmFtZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICB0eXBlOiB0eXBlRmlsZSxcbiAgICAgICAgc3RhdHVzOiAnc3RhcnRlZCcsXG4gICAgICB9XG5cbiAgICAgIC8vIFNvbG8gYWdyZWdhciBlbCBhcmNoaXZvIHNpIG5vIGVzdMOhIGVuIGxhIGxpc3RhIGRlIGFyY2hpdm9zIGV4Y2VkaWRvc1xuICAgICAgaWYgKCFleGNlZWRlZEZpbGVzLmluY2x1ZGVzKGZpbGUubmFtZSkpIHtcbiAgICAgICAgaW5zZXJ0ZWRGaWxlcy5wdXNoKGF0dGFjaG1lbnRGaWxlKVxuICAgICAgICAvLyBBY3R1YWxpemFyIGVsIHRhbWHDsW8gdG90YWwgcGFyYSBsYSBzaWd1aWVudGUgdmFsaWRhY2nDs25cbiAgICAgICAgcnVubmluZ1RvdGFsU2l6ZSArPSBmaWxlLnNpemVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gTW9zdHJhciBtb2RhbCBzaSBoYXkgYXJjaGl2b3MgY29uIGV4dGVuc2nDs24gaW52w6FsaWRhIG8gcXVlIGV4Y2VkZW4gZWwgbMOtbWl0ZVxuICAgIGNvbnN0IGhhc0Vycm9ycyA9IGludmFsaWRFeHRlbnNpb25GaWxlcy5sZW5ndGggPiAwIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoID4gMFxuICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXMsIGV4Y2VlZGVkRmlsZXMsIGludmFsaWRFeHRlbnNpb25GaWxlcyB9KVxuICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/Lih0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICAgIH1cblxuICAgIC8vIFNvbG8gYWdyZWdhciBhcmNoaXZvcyB2w6FsaWRvcyBxdWUgbm8gZXhjZWRhbiBlbCBsw61taXRlXG4gICAgaWYgKGluc2VydGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcz8uKHsga2V5OiAna25vd2xlZGdlJywgdmFsdWU6IGluc2VydGVkRmlsZXMgfSlcbiAgICAgIHNldExvY2FsQXR0YWNobWVudHMocHJldiA9PiBbLi4uKHByZXYgfHwgW10pLCAuLi5pbnNlcnRlZEZpbGVzXSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoIWlzQXRTaXplTGltaXQpIHtcbiAgICAgIHNldElzRHJhZ2dpbmcodHJ1ZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuXG4gICAgaWYgKGlzQXRTaXplTGltaXQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuZGF0YVRyYW5zZmVyXG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENyZWFyIHVuIGV2ZW50byBzaW50w6l0aWNvIHBhcmEgcmV1dGlsaXphciBsYSBsw7NnaWNhIGRlIGhhbmRsZUZpbGVTZWxlY3RcbiAgICBjb25zdCBzeW50aGV0aWNFdmVudCA9IHtcbiAgICAgIHRhcmdldDogeyBmaWxlcyB9LFxuICAgIH0gYXMgQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD5cblxuICAgIGhhbmRsZUZpbGVTZWxlY3Qoc3ludGhldGljRXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlVG9EZWxldGUgPSBsb2NhbEF0dGFjaG1lbnRzW2lkXVxuICAgIGlmICghZmlsZVRvRGVsZXRlKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSBpZClcbiAgICBzZXRMb2NhbEF0dGFjaG1lbnRzKG5ld0F0dGFjaG1lbnRzKVxuXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM/Lih7IGtleTogJ2tub3dsZWRnZScsIHZhbHVlOiBuZXdBdHRhY2htZW50cywgZGVsZXRlS25vd2xlZGdlOiB0cnVlIH0pXG5cbiAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pW2lkXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBoYW5kbGVEb3dubG9hZEtub3dsZWRnZSh7IGFnZW50SWQ6IHZhbHVlcy5nZW5lcmFsLmlkIS50b1N0cmluZygpLCBrbm93bGVkZ2VJZDogZmlsZS5pZCB9KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZ1N1Y2Nlc3MgJiYgIWlzRG93bmxvYWRpbmdFcnJvciAmJiAhaXNEb3dubG9hZGluZykge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpc0Rvd25sb2FkaW5nU3VjY2Vzcy5ibG9iKVxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gaXNEb3dubG9hZGluZ1N1Y2Nlc3MuZmlsZW5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgICAgIGhhbmRsZVJlc2V0U3RhdGVzKClcbiAgICAgIH0sIDEwMClcbiAgICB9XG4gIH0sIFtpc0Rvd25sb2FkaW5nU3VjY2VzcywgaXNEb3dubG9hZGluZ0Vycm9yLCBpc0Rvd25sb2FkaW5nLCBoYW5kbGVSZXNldFN0YXRlc10pXG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uID0gKHsgaWQsIGFjdGlvbiB9OiB7IGlkOiBudW1iZXI7IGFjdGlvbjogJ2RlbGV0ZScgfCAnZG93bmxvYWQnIH0pID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZykgcmV0dXJuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoaWQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2Rvd25sb2FkJykge1xuICAgICAgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50KGlkKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgLy8gU29sbyBzaSBubyB0aWVuZSBlcnJvcmVzIChzdGF0dXMgIT09ICdmYWlsZWQnKVxuICAgIGlmIChhdHRhY2htZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTQ0FLU1dyYXBwZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJIZWFkZXIgJGluZGV4PXswfT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVyVGl0bGU+e3QoJ2tub3dsZWRnZVNlY3Rpb24ua25vd2xlZGdlVGFiJyl9PC9TQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLmluZm9MYWJlbCcpfVxuICAgICAgICAgICAgICA8U0NBS1NNb3JlSW5mb1NwYW4gb25DbGljaz17KCkgPT4gaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24oJ21vcmVJbmZvJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLm1vcmVJbmZvJyl9XG4gICAgICAgICAgICAgICAgPFNDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgIDxPcGVuIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9XCIjMDA2RkFGXCIgLz5cbiAgICAgICAgICAgICAgICA8L1NDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgPC9TQ0FLU01vcmVJbmZvU3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgPC9TQ0FLU1dyYXBwZXJIZWFkZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJDb250ZW50ICRpbmRleD17MX0+XG4gICAgICAgICAgPFNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50PlxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzQXRTaXplTGltaXQgPyB0KCdrbm93bGVkZ2VTZWN0aW9uLmVycm9yLm1heFNpemVUaXRsZScpIDogJyd9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lXG4gICAgICAgICAgICAgICAgaXNBdFNpemVMaW1pdD17aXNBdFNpemVMaW1pdH1cbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nPXtpc0RyYWdnaW5nfVxuICAgICAgICAgICAgICAgIG9uRHJhZ0VudGVyPXtoYW5kbGVEcmFnRW50ZXJ9XG4gICAgICAgICAgICAgICAgb25EcmFnTGVhdmU9e2hhbmRsZURyYWdMZWF2ZX1cbiAgICAgICAgICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZCB3aWR0aD17MzB9IGhlaWdodD17MzB9IGNvbG9yPXtpc0F0U2l6ZUxpbWl0ID8gJyM5OTknIDogJyMwMDZGQUYnfSAvPlxuICAgICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0U3BhbiBpc0F0U2l6ZUxpbWl0PXtpc0F0U2l6ZUxpbWl0fSBkYXRhLWRyb3B6b25lLWxpbmsgb25DbGljaz17aGFuZGxlQXR0YWNoQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lVGV4dFNwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMicpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lSW5mbz57dCgna25vd2xlZGdlU2VjdGlvbi5pbmZvRmlsZVR5cGVzJyl9PC9TQ0FLU0Ryb3Bab25lSW5mbz5cbiAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgICAgPFNDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICAgICAgeyhsb2NhbEF0dGFjaG1lbnRzIHx8IFtdKS5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGtleT17YGF0dGFjaG1lbnQtJHthdHRhY2htZW50Py5uYW1lfS0ke2F0dGFjaG1lbnQ/LmlkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgaGFuZGxlQWN0aW9uPXtoYW5kbGVBY3Rpb259XG4gICAgICAgICAgICAgICAgICBhYm1Lbm93bGVkZ2VTZWN0aW9uXG4gICAgICAgICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICA8L1NDQUtTV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucHB0LC5wcHR4LC5wZGYsLnBuZywuanBnLC5qcGVnLC54bHN4LC54bHNcIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9TQ0FLU1dyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGludmFsaWRFeHRlbnNpb25GaWxlczogW10gfSlcbiAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGludmFsaWRFeHRlbnNpb25GaWxlcz17bW9kYWxQcm9wcy5pbnZhbGlkRXh0ZW5zaW9uRmlsZXN9XG4gICAgICAgICAgc2VjdGlvbj1cImFibV9hZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQWlDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDM0UsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFHM0UsU0FDRUMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsdUJBQXVCLEVBQ3ZCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsUUFDaEIsOEJBQThCO0FBQ3JDLFNBQVNDLG9CQUFvQixRQUFRLCtDQUErQztBQUNwRixTQUFTQyx1QkFBdUIsUUFBUSx3Q0FBd0M7QUFDaEYsU0FBU0MsZ0JBQWdCLFFBQVEsbURBQW1EO0FBQ3BGLFNBQVNDLDRCQUE0QixFQUFFQyxTQUFTLFFBQVEscUNBQXFDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFFN0YsU0FBU0Ms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