@projectcor/maia-components 2.11.110-0 → 2.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +3 -3
- package/CHANGELOG.md +0 -642
- package/lib/App.js +0 -55
- package/lib/components/atoms/ActionableButton.js +0 -60
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +0 -89
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +0 -21
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +0 -9
- package/lib/components/atoms/AgentActivityIndicator/index.js +0 -2
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +0 -209
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +0 -93
- package/lib/components/atoms/ApprovalBox/index.js +0 -2
- package/lib/components/atoms/AttachmentCard/AttachmentCard.js +0 -218
- package/lib/components/atoms/AttachmentCard/AttachmentCard.styles.js +0 -52
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +0 -448
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.styles.js +0 -58
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +0 -55
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.styles.js +0 -14
- package/lib/components/atoms/AttachmentCard/index.js +0 -4
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +0 -442
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.styles.js +0 -119
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +0 -222
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +0 -313
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +0 -128
- package/lib/components/atoms/AttachmentPreviewModal/index.js +0 -2
- package/lib/components/atoms/Backdrop/Backdrop.js +0 -17
- package/lib/components/atoms/Backdrop/Backdrop.styles.js +0 -9
- package/lib/components/atoms/Backdrop/index.js +0 -2
- package/lib/components/atoms/CardItem.js +0 -7
- package/lib/components/atoms/CardMenu/CardMenu.js +0 -131
- package/lib/components/atoms/CardMenu/index.js +0 -2
- package/lib/components/atoms/CardMenu/styles.js +0 -21
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +0 -77
- package/lib/components/atoms/ChatClientSelector/index.js +0 -2
- package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +0 -9
- package/lib/components/atoms/ChatDisclaimerMessage/index.js +0 -2
- package/lib/components/atoms/ChatDisclaimerMessage/styles.js +0 -6
- package/lib/components/atoms/Checkbox/Checkbox.js +0 -34
- package/lib/components/atoms/Checkbox/index.js +0 -2
- package/lib/components/atoms/Checkbox/styles.js +0 -39
- package/lib/components/atoms/Chip/Chip.js +0 -150
- package/lib/components/atoms/Chip/index.js +0 -2
- package/lib/components/atoms/Chip/styles.js +0 -43
- package/lib/components/atoms/ChipLlm/ChipLlm.js +0 -45
- package/lib/components/atoms/ChipLlm/ChipLlm.style.js +0 -21
- package/lib/components/atoms/ChipLlm/index.js +0 -2
- package/lib/components/atoms/ChipStatus/ChipStatus.interface.js +0 -2
- package/lib/components/atoms/ChipStatus/ChipStatus.js +0 -14
- package/lib/components/atoms/ChipStatus/ChipStatus.styles.js +0 -27
- package/lib/components/atoms/ChipStatus/index.js +0 -2
- package/lib/components/atoms/ClearButton.js +0 -6
- package/lib/components/atoms/ClientSelector/ClientSelector.js +0 -146
- package/lib/components/atoms/ClientSelector/ClientSelector.styles.js +0 -15
- package/lib/components/atoms/ClientSelector/index.js +0 -2
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -38
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -188
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +0 -39
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -445
- package/lib/components/atoms/ContextMentionChip/index.js +0 -4
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -533
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -10
- package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -282
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -148
- package/lib/components/atoms/ContextMentionItem/index.js +0 -2
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -290
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -108
- package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
- package/lib/components/atoms/CopyToClipboard.js +0 -70
- package/lib/components/atoms/EditableLabel/EditableLabel.js +0 -110
- package/lib/components/atoms/EditableLabel/index.js +0 -2
- package/lib/components/atoms/EditableLabel/styles.js +0 -7
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.js +0 -22
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.styles.js +0 -18
- package/lib/components/atoms/EmptySearchClients/index.js +0 -2
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.js +0 -19
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.styles.js +0 -15
- package/lib/components/atoms/EmptySearchProjects/index.js +0 -2
- package/lib/components/atoms/EntitySelector/EntitySelector.js +0 -247
- package/lib/components/atoms/EntitySelector/EntitySelector.skeleton.js +0 -38
- package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +0 -67
- package/lib/components/atoms/EntitySelector/index.js +0 -2
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.js +0 -14
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.styles.js +0 -15
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.js +0 -14
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.style.js +0 -15
- package/lib/components/atoms/ErrorSearchFaqs/index.js +0 -2
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +0 -18
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.style.js +0 -15
- package/lib/components/atoms/ErrorSearchProjects/index.js +0 -2
- package/lib/components/atoms/Expand/Expand.js +0 -32
- package/lib/components/atoms/Expand/index.js +0 -2
- package/lib/components/atoms/Fade/Fade.js +0 -56
- package/lib/components/atoms/Fade/index.js +0 -2
- package/lib/components/atoms/FeedbackButton/FeedbackButton.js +0 -59
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +0 -14
- package/lib/components/atoms/FeedbackButton/index.js +0 -2
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +0 -138
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.skeleton.js +0 -44
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +0 -43
- package/lib/components/atoms/FrequentlyAskedQuestions/index.js +0 -2
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +0 -122
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.skeleton.js +0 -43
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +0 -62
- package/lib/components/atoms/FrequentlyUsedActions/index.js +0 -2
- package/lib/components/atoms/GoBackButton.js +0 -24
- package/lib/components/atoms/HelpButton.js +0 -44
- package/lib/components/atoms/IconButton.js +0 -56
- package/lib/components/atoms/ImagePreview/ImagePreview.js +0 -96
- package/lib/components/atoms/ImagePreview/ImagePreview.styles.js +0 -70
- package/lib/components/atoms/Input/CustomInput.interface.js +0 -2
- package/lib/components/atoms/Input/CustomInput.js +0 -91
- package/lib/components/atoms/Input/CustomInput.styles.js +0 -39
- package/lib/components/atoms/Input/index.js +0 -2
- package/lib/components/atoms/ListMenuOption/ListMenuOption.js +0 -41
- package/lib/components/atoms/ListMenuOption/index.js +0 -2
- package/lib/components/atoms/ListMenuOption/styles.js +0 -9
- package/lib/components/atoms/Loader.js +0 -41
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.js +0 -11
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.style.js +0 -6
- package/lib/components/atoms/LoadingFaqs/index.js +0 -2
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.js +0 -11
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.styles.js +0 -6
- package/lib/components/atoms/LoadingSearchClients/index.js +0 -2
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.js +0 -14
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.style.js +0 -10
- package/lib/components/atoms/LoadingSearchProjects/index.js +0 -2
- package/lib/components/atoms/LoadingText/LoadingText.js +0 -18
- package/lib/components/atoms/LoadingText/index.js +0 -2
- package/lib/components/atoms/LoadingText/styles.js +0 -7
- package/lib/components/atoms/MAIAButton/MAIAButton.js +0 -33
- package/lib/components/atoms/MAIAButton/index.js +0 -2
- package/lib/components/atoms/MAIAError/MAIAError.js +0 -15
- package/lib/components/atoms/MAIAError/index.js +0 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +0 -1232
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +0 -266
- package/lib/components/atoms/MAIAInput/index.js +0 -2
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
- package/lib/components/atoms/MAIAInput/styles.js +0 -186
- package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +0 -2
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +0 -22
- package/lib/components/atoms/MAIAMessage/index.js +0 -2
- package/lib/components/atoms/MAIAMessage/styles.js +0 -7
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.config.js +0 -23
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.interfaces.js +0 -2
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.js +0 -51
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.styles.js +0 -26
- package/lib/components/atoms/MaiaStreamdown/index.js +0 -2
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.js +0 -18
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +0 -84
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.js +0 -15
- package/lib/components/atoms/MaiaWrapper/index.js +0 -3
- package/lib/components/atoms/MaiaWrapper/styles.js +0 -21
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.interface.js +0 -2
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.js +0 -84
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.styles.js +0 -53
- package/lib/components/atoms/ModalClientAccess/index.js +0 -2
- package/lib/components/atoms/ModalInfo/ModalInfo.js +0 -52
- package/lib/components/atoms/ModalInfo/ModalInfoContent.js +0 -7
- package/lib/components/atoms/ModalInfo/index.js +0 -3
- package/lib/components/atoms/ModalInfo/styles.js +0 -7
- package/lib/components/atoms/ModalProject/ModalProject.interface.js +0 -2
- package/lib/components/atoms/ModalProject/ModalProject.js +0 -112
- package/lib/components/atoms/ModalProject/ModalProject.style.js +0 -59
- package/lib/components/atoms/ModalProject/index.js +0 -2
- package/lib/components/atoms/NextPageLoader.js +0 -33
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.js +0 -28
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +0 -180
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.styles.js +0 -34
- package/lib/components/atoms/OnboardingModalButton/index.js +0 -3
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +0 -131
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.styles.js +0 -59
- package/lib/components/atoms/OptionAccessibility/index.js +0 -2
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +0 -27
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +0 -18
- package/lib/components/atoms/OptionCorPermission/index.js +0 -2
- package/lib/components/atoms/PrimaryButton.js +0 -31
- package/lib/components/atoms/ProjectSelector/ProjectSelector.js +0 -77
- package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +0 -61
- package/lib/components/atoms/ProjectSelector/index.js +0 -2
- package/lib/components/atoms/SecondaryButton.js +0 -20
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +0 -20
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +0 -20
- package/lib/components/atoms/SessionGeneratingDot/index.js +0 -2
- package/lib/components/atoms/Skeleton/Skeleton.js +0 -36
- package/lib/components/atoms/Skeleton/index.js +0 -2
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -188
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -69
- package/lib/components/atoms/SkillsDropdown/index.js +0 -2
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.js +0 -16
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.styles.js +0 -24
- package/lib/components/atoms/SlashCommandChip/buildSlashChipElement.js +0 -18
- package/lib/components/atoms/SlashCommandChip/index.js +0 -4
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +0 -210
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +0 -53
- package/lib/components/atoms/SlashCommandDropdown/index.js +0 -2
- package/lib/components/atoms/Switch/Switch.js +0 -27
- package/lib/components/atoms/Switch/Switch.styles.js +0 -22
- package/lib/components/atoms/Switch/index.js +0 -2
- package/lib/components/atoms/TextArea/CustomTextArea.interface.js +0 -2
- package/lib/components/atoms/TextArea/CustomTextArea.js +0 -93
- package/lib/components/atoms/TextArea/CustomTextArea.styles.js +0 -25
- package/lib/components/atoms/TextArea/TextArea.interfaces.js +0 -2
- package/lib/components/atoms/TextArea/TextArea.js +0 -172
- package/lib/components/atoms/TextArea/TextArea.styles.js +0 -16
- package/lib/components/atoms/TextArea/index.js +0 -2
- package/lib/components/atoms/ThirdButton.js +0 -19
- package/lib/components/atoms/VideoModal/VideoModal.js +0 -76
- package/lib/components/atoms/VideoModal/index.js +0 -2
- package/lib/components/atoms/WithAppCfg.js +0 -26
- package/lib/components/atoms/WithFeatureValidation.js +0 -23
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.js +0 -9
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.styles.js +0 -6
- package/lib/components/atoms/WrapperCenterIcon/index.js +0 -2
- package/lib/components/atoms/icons/AIIcon.js +0 -23
- package/lib/components/atoms/icons/AacFile.js +0 -39
- package/lib/components/atoms/icons/AccessibilityIcon.js +0 -42
- package/lib/components/atoms/icons/ActionAssignIcon.js +0 -111
- package/lib/components/atoms/icons/ActionCalendarIcon.js +0 -112
- package/lib/components/atoms/icons/ActionChargeHoursIcon.js +0 -111
- package/lib/components/atoms/icons/ActionChatIcon.js +0 -71
- package/lib/components/atoms/icons/ActionCreateIcon.js +0 -91
- package/lib/components/atoms/icons/ActionCreateReworkIcon.js +0 -39
- package/lib/components/atoms/icons/ActionCreateSubtaskIcon.js +0 -37
- package/lib/components/atoms/icons/ActionEditIcon.js +0 -39
- package/lib/components/atoms/icons/ActionSummaryMessagesIcon.js +0 -88
- package/lib/components/atoms/icons/ActionSummaryTaskIcon.js +0 -37
- package/lib/components/atoms/icons/ActionTimeBackIcon.js +0 -112
- package/lib/components/atoms/icons/AgentMaiaIcon.js +0 -31
- package/lib/components/atoms/icons/Brain.js +0 -77
- package/lib/components/atoms/icons/CorAccessIcon.js +0 -41
- package/lib/components/atoms/icons/CorLogo.js +0 -76
- package/lib/components/atoms/icons/CsvFile.js +0 -41
- package/lib/components/atoms/icons/DocFile.js +0 -41
- package/lib/components/atoms/icons/DocxFile.js +0 -41
- package/lib/components/atoms/icons/EmptyClientIllustration.js +0 -67
- package/lib/components/atoms/icons/EmptyHistory.js +0 -46
- package/lib/components/atoms/icons/EmptySearchIllustration.js +0 -37
- package/lib/components/atoms/icons/EmptyState.js +0 -84
- package/lib/components/atoms/icons/EmptyStateAgents.js +0 -58
- package/lib/components/atoms/icons/ErrorIcon.js +0 -14
- package/lib/components/atoms/icons/ErrorSearchIllustration.js +0 -52
- package/lib/components/atoms/icons/ErrorState.js +0 -51
- package/lib/components/atoms/icons/FaqChevronIcon.js +0 -39
- package/lib/components/atoms/icons/FaqsIcon.js +0 -51
- package/lib/components/atoms/icons/FlacIcon.js +0 -39
- package/lib/components/atoms/icons/FolderIcon.js +0 -29
- package/lib/components/atoms/icons/HomeIcon.js +0 -30
- package/lib/components/atoms/icons/ImageFile.js +0 -46
- package/lib/components/atoms/icons/M4aFile.js +0 -39
- package/lib/components/atoms/icons/MAIAIcon.js +0 -20
- package/lib/components/atoms/icons/MAIAIsologo.js +0 -65
- package/lib/components/atoms/icons/MDFile.js +0 -41
- package/lib/components/atoms/icons/MaiaChatLayoutFloatingIcon.js +0 -41
- package/lib/components/atoms/icons/MaiaChatLayoutFullscreenIcon.js +0 -41
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
- package/lib/components/atoms/icons/MaiaChatLayoutSidebarIcon.js +0 -41
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
- package/lib/components/atoms/icons/MaiaSettingsProject.js +0 -111
- package/lib/components/atoms/icons/MaiaSettingsProjectV2.js +0 -193
- package/lib/components/atoms/icons/MaiaSparkleIcon.js +0 -75
- package/lib/components/atoms/icons/MaiaStoreIcon.js +0 -31
- package/lib/components/atoms/icons/Mp3File.js +0 -39
- package/lib/components/atoms/icons/Mp4File.js +0 -39
- package/lib/components/atoms/icons/MyAgentsNavIcon.js +0 -51
- package/lib/components/atoms/icons/NewChat.js +0 -29
- package/lib/components/atoms/icons/NotionIcon.js +0 -36
- package/lib/components/atoms/icons/OgaFile.js +0 -39
- package/lib/components/atoms/icons/OggFile.js +0 -39
- package/lib/components/atoms/icons/PdfFile.js +0 -39
- package/lib/components/atoms/icons/PlusIcon.js +0 -29
- package/lib/components/atoms/icons/PptFile.js +0 -47
- package/lib/components/atoms/icons/PptxFile.js +0 -49
- package/lib/components/atoms/icons/RetryIcon.js +0 -34
- package/lib/components/atoms/icons/SkillIcon.js +0 -30
- package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
- package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
- package/lib/components/atoms/icons/SkillsNavIcon.js +0 -24
- package/lib/components/atoms/icons/SubtaskIcon.js +0 -36
- package/lib/components/atoms/icons/TaskLinkIcon.js +0 -27
- package/lib/components/atoms/icons/TelescopeIcon.js +0 -60
- package/lib/components/atoms/icons/TemplateGradientIcon.js +0 -42
- package/lib/components/atoms/icons/TextFile.js +0 -41
- package/lib/components/atoms/icons/WavFile.js +0 -39
- package/lib/components/atoms/icons/WebmFile.js +0 -50
- package/lib/components/atoms/icons/XlsFile.js +0 -42
- package/lib/components/atoms/icons/XlsxFile.js +0 -42
- package/lib/components/atoms/icons/index.js +0 -53
- package/lib/components/atoms/index.js +0 -42
- package/lib/components/index.js +0 -11
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.interface.js +0 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +0 -149
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +0 -53
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +0 -415
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +0 -152
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +0 -374
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +0 -106
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +0 -92
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.styles.js +0 -57
- package/lib/components/molecules/AbmSection/index.js +0 -4
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +0 -52
- package/lib/components/molecules/ChatAIClientSelector/index.js +0 -2
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +0 -119
- package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +0 -187
- package/lib/components/molecules/ChatAIContent/ChatAIContent.styles.js +0 -6
- package/lib/components/molecules/ChatAIContent/index.js +0 -2
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +0 -241
- package/lib/components/molecules/ChatAIHistory/index.js +0 -2
- package/lib/components/molecules/ChatAIHistory/styles.js +0 -22
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +0 -649
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +0 -115
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +0 -95
- package/lib/components/molecules/ChatAIHome/index.js +0 -2
- package/lib/components/molecules/ChatAIHome/styles.js +0 -335
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +0 -137
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +0 -853
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +0 -47
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +0 -37
- package/lib/components/molecules/ChatAIMessages/README.md +0 -101
- package/lib/components/molecules/ChatAIMessages/index.js +0 -2
- package/lib/components/molecules/ChatAIMessages/newStyles.js +0 -131
- package/lib/components/molecules/ChatAIMessages/styles.js +0 -94
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +0 -1250
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +0 -58
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +0 -127
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +0 -34
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/index.js +0 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +0 -189
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +0 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/index.js +0 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +0 -453
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +0 -108
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/index.js +0 -2
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +0 -48
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +0 -38
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +0 -2
- package/lib/components/molecules/ChatAIModal/constants.js +0 -40
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +0 -12
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +0 -13
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +0 -3
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +0 -57
- package/lib/components/molecules/ChatAIModal/index.js +0 -2
- package/lib/components/molecules/ChatAIModal/layout.js +0 -74
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +0 -457
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +0 -218
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +0 -384
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +0 -165
- package/lib/components/molecules/ChatAIMySkills/index.js +0 -2
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +0 -48
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.styles.js +0 -49
- package/lib/components/molecules/ChatAIProjectSelector/index.js +0 -2
- package/lib/components/molecules/ChatFooter/ChatFooter.js +0 -337
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +0 -32
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +0 -14
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +0 -201
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +0 -51
- package/lib/components/molecules/ChatFooter/index.js +0 -2
- package/lib/components/molecules/ChatFooter/styles.js +0 -23
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -60
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
- package/lib/components/molecules/ContextMentionInput/index.js +0 -2
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +0 -118
- package/lib/components/molecules/MessageFeedback/index.js +0 -2
- package/lib/components/molecules/MessageFeedback/styles.js +0 -14
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +0 -127
- package/lib/components/molecules/ProjectSummaryChat/index.js +0 -2
- package/lib/components/molecules/ProjectSummaryChat/styles.js +0 -8
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.js +0 -152
- package/lib/components/molecules/ProjectSummaryConfig/index.js +0 -2
- package/lib/components/molecules/ProjectSummaryConfig/styles.js +0 -86
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.js +0 -49
- package/lib/components/molecules/ProjectSummaryContent/index.js +0 -2
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.js +0 -19
- package/lib/components/molecules/ProjectSummaryModal/index.js +0 -2
- package/lib/components/molecules/ProjectSummaryModal/styles.js +0 -2
- package/lib/components/molecules/Sidebar/Sidebar.js +0 -716
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +0 -157
- package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +0 -48
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +0 -75
- package/lib/components/molecules/Sidebar/index.js +0 -2
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +0 -1420
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +0 -93
- package/lib/components/organisms/AbmAgentModal/index.js +0 -2
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +0 -182
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +0 -34
- package/lib/components/organisms/AbmSkillGenerateModal/index.js +0 -2
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +0 -550
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +0 -118
- package/lib/components/organisms/AbmSkillModal/index.js +0 -2
- package/lib/components/organisms/ChatAI/ChatAI.js +0 -167
- package/lib/components/organisms/ChatAI/index.js +0 -2
- package/lib/components/organisms/ChatAI/styles.js +0 -7
- package/lib/components/organisms/ClientAIButton/ClientAIButton.js +0 -23
- package/lib/components/organisms/ClientAIButton/index.js +0 -2
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.js +0 -86
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.styles.js +0 -39
- package/lib/components/organisms/DeleteAgentModal/index.js +0 -2
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +0 -122
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.styles.js +0 -47
- package/lib/components/organisms/DeleteQuestionModal/index.js +0 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +0 -138
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.styles.js +0 -69
- package/lib/components/organisms/EditQuestionModal/index.js +0 -2
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.js +0 -113
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.styles.js +0 -54
- package/lib/components/organisms/ModalFileExceeds/index.js +0 -2
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +0 -26
- package/lib/components/organisms/ProjectAIButton/index.js +0 -2
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +0 -60
- package/lib/components/organisms/ProjectSummary/index.js +0 -2
- package/lib/components/organisms/ProjectSummary/styles.js +0 -7
- package/lib/components/organisms/SnackBar/Snackbar.interface.js +0 -2
- package/lib/components/organisms/SnackBar/Snackbar.js +0 -73
- package/lib/components/organisms/SnackBar/Snackbar.styles.js +0 -9
- package/lib/components/organisms/SnackBar/index.js +0 -2
- package/lib/components/organisms/SourcesInformation/SourceItem.js +0 -18
- package/lib/components/organisms/SourcesInformation/SourceItem.styles.js +0 -14
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.styles.js +0 -27
- package/lib/components/organisms/SourcesInformation/index.js +0 -2
- package/lib/constants/config.js +0 -10
- package/lib/constants/formatExtensions.js +0 -55
- package/lib/constants/gqlClient.js +0 -4
- package/lib/constants/maiaHourAgentAccess.js +0 -15
- package/lib/constants/maiaTaskPanelAccess.js +0 -24
- package/lib/constants/maiaTaskPanelOutsideClick.js +0 -9
- package/lib/constants/maiaTaskPanelZIndex.js +0 -19
- package/lib/constants/permissions/config.js +0 -72
- package/lib/constants/permissions/index.js +0 -3
- package/lib/constants/permissions/types.js +0 -2
- package/lib/constants/permissions/utils.js +0 -18
- package/lib/constants/plannerSyncEvents.js +0 -15
- package/lib/constants/taskLinkIcon.js +0 -15
- package/lib/constants/taskUrls.js +0 -11
- package/lib/context/cor-user.js +0 -31
- package/lib/context/global-context.js +0 -39
- package/lib/dev/DevChatAI.js +0 -101
- package/lib/dev/DevContextMentionInput.js +0 -67
- package/lib/dev/ProjectSummary.js +0 -9
- package/lib/dev/Providers.js +0 -27
- package/lib/exports.js +0 -2
- package/lib/hooks/README.md +0 -192
- package/lib/hooks/index.js +0 -30
- package/lib/hooks/useAccessClient/index.js +0 -2
- package/lib/hooks/useAccessClient/useAccessClient.js +0 -81
- package/lib/hooks/useAgentModel/index.js +0 -2
- package/lib/hooks/useAgentModel/useAgentModel.js +0 -62
- package/lib/hooks/useAgentModel/useCreateAgent.js +0 -128
- package/lib/hooks/useAgentModel/useDeleteAgent.js +0 -88
- package/lib/hooks/useAgentModel/useUpdateAgent.js +0 -129
- package/lib/hooks/useAgentSuggestions.js +0 -60
- package/lib/hooks/useCaretPosition.js +0 -65
- package/lib/hooks/useChatManager/index.js +0 -2
- package/lib/hooks/useChatManager/useChatManager.interface.js +0 -2
- package/lib/hooks/useChatManager/useChatManager.js +0 -1782
- package/lib/hooks/useChatMessages/index.js +0 -2
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +0 -2
- package/lib/hooks/useChatMessages/useChatMessages.js +0 -722
- package/lib/hooks/useChats/index.js +0 -2
- package/lib/hooks/useChats/useChats.interfaces.js +0 -2
- package/lib/hooks/useChats/useChats.js +0 -187
- package/lib/hooks/useClientSearch.js +0 -163
- package/lib/hooks/useContextMentions.js +0 -500
- package/lib/hooks/useContextPinPopover.js +0 -228
- package/lib/hooks/useDebounce.js +0 -18
- package/lib/hooks/useEntitySearch.js +0 -1053
- package/lib/hooks/useEvent.js +0 -93
- package/lib/hooks/useFrequentlyAskedQuestions.js +0 -150
- package/lib/hooks/useFrequentlyUsedActions.js +0 -94
- package/lib/hooks/useKnowledge/deleteKnowledge.js +0 -69
- package/lib/hooks/useKnowledge/downloadKnowledge.js +0 -81
- package/lib/hooks/useKnowledge/index.js +0 -4
- package/lib/hooks/useKnowledge/saveKnowledge.js +0 -107
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +0 -156
- package/lib/hooks/useMaiaTaskPanelZIndex.js +0 -17
- package/lib/hooks/useMentionAllowedTypes.js +0 -120
- package/lib/hooks/useMentionPopover.js +0 -342
- package/lib/hooks/useMinimizedPillBottomOffset.js +0 -110
- package/lib/hooks/useModal/index.js +0 -2
- package/lib/hooks/useModal/useModal.interfaces.js +0 -2
- package/lib/hooks/useModal/useModal.js +0 -47
- package/lib/hooks/useOnboardingNavigation.js +0 -20
- package/lib/hooks/useOrchestratorStream/index.js +0 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +0 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +0 -269
- package/lib/hooks/useProjectSearch.js +0 -183
- package/lib/hooks/useProjectSummary.js +0 -101
- package/lib/hooks/useProjectSummaryConfig.js +0 -211
- package/lib/hooks/useProjects.js +0 -46
- package/lib/hooks/useRecentClientsSearch.js +0 -150
- package/lib/hooks/useRecentContexts.js +0 -86
- package/lib/hooks/useResize.js +0 -29
- package/lib/hooks/useSkillsCatalog.js +0 -66
- package/lib/hooks/useSlashCommands.js +0 -84
- package/lib/hooks/useSmoothStreamText/index.js +0 -2
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -197
- package/lib/hooks/useSnackBarManager/useSnackBarManager.js +0 -41
- package/lib/hooks/useStreamResponse.js +0 -112
- package/lib/hooks/useStreamdownStyles.js +0 -13
- package/lib/hooks/useStreamingMessage/index.js +0 -2
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -18
- package/lib/hooks/useT.js +0 -17
- package/lib/hooks/useTabTaskDefault.js +0 -33
- package/lib/hooks/useTaskPanel.js +0 -22
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +0 -34
- package/lib/hooks/useToggle.js +0 -19
- package/lib/hooks/useToggleFavorite/index.js +0 -2
- package/lib/hooks/useToggleFavorite/useToggleFavorite.js +0 -83
- package/lib/index.css +0 -76
- package/lib/index.js +0 -30
- package/lib/lang/br/index.js +0 -783
- package/lib/lang/en/index.js +0 -783
- package/lib/lang/es/index.js +0 -784
- package/lib/lang/fr/index.js +0 -604
- package/lib/lang/index.js +0 -24
- package/lib/lang/utils.js +0 -33
- package/lib/mocks/mockChats.js +0 -395
- package/lib/mocks/mockOrchestrator.js +0 -5
- package/lib/mocks/mockProject.js +0 -11
- package/lib/mocks/mockProjectSummary.js +0 -6
- package/lib/mocks/mockedUser.js +0 -169
- package/lib/services/apolloClient.js +0 -3
- package/lib/services/appcues.js +0 -19
- package/lib/services/corpilot/ProjectSummary/getProjectSummary.js +0 -31
- package/lib/services/corpilot/ProjectSummary/index.js +0 -5
- package/lib/services/corpilot/client.js +0 -27
- package/lib/services/corpilot/index.js +0 -5
- package/lib/services/maia/Access/updateAccess.js +0 -59
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +0 -46
- package/lib/services/maia/Actions/getSlashCommands.js +0 -39
- package/lib/services/maia/Actions/index.js +0 -7
- package/lib/services/maia/Agents/createAgent.js +0 -39
- package/lib/services/maia/Agents/deleteAgent.js +0 -38
- package/lib/services/maia/Agents/fetchAgentDetail.js +0 -122
- package/lib/services/maia/Agents/getAgentById.js +0 -162
- package/lib/services/maia/Agents/getAgentModels.js +0 -112
- package/lib/services/maia/Agents/getAgentSuggestions.js +0 -44
- package/lib/services/maia/Agents/getAgents.js +0 -718
- package/lib/services/maia/Agents/setAgentToolGroups.js +0 -42
- package/lib/services/maia/Agents/toggleFavorite.js +0 -34
- package/lib/services/maia/Agents/updateAgent.js +0 -39
- package/lib/services/maia/Chats/deleteChat.js +0 -32
- package/lib/services/maia/Chats/getChatMessages.js +0 -144
- package/lib/services/maia/Chats/getChatsByUserId.js +0 -82
- package/lib/services/maia/Chats/index.js +0 -15
- package/lib/services/maia/Chats/markSessionAsRead.js +0 -32
- package/lib/services/maia/Chats/patchChat.js +0 -43
- package/lib/services/maia/Chats/wasHelpfulChat.js +0 -31
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +0 -55
- package/lib/services/maia/Faqs/index.js +0 -5
- package/lib/services/maia/Knowledge/delete.js +0 -41
- package/lib/services/maia/Knowledge/download.js +0 -48
- package/lib/services/maia/Knowledge/index.js +0 -3
- package/lib/services/maia/Knowledge/save.js +0 -43
- package/lib/services/maia/Orchestrator/index.js +0 -7
- package/lib/services/maia/Orchestrator/orchestrator.js +0 -246
- package/lib/services/maia/RecentClients/getRecentClients.js +0 -43
- package/lib/services/maia/RecentClients/index.js +0 -6
- package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -54
- package/lib/services/maia/RecentContexts/index.js +0 -6
- package/lib/services/maia/RecentProjects/getRecentProjects.js +0 -55
- package/lib/services/maia/RecentProjects/index.js +0 -6
- package/lib/services/maia/RecentTasks/getRecentTasks.js +0 -54
- package/lib/services/maia/RecentTasks/index.js +0 -6
- package/lib/services/maia/RecentUsers/getRecentUsers.js +0 -59
- package/lib/services/maia/RecentUsers/index.js +0 -6
- package/lib/services/maia/Skills/createSkill.js +0 -39
- package/lib/services/maia/Skills/deleteSkill.js +0 -38
- package/lib/services/maia/Skills/generateSkill.js +0 -41
- package/lib/services/maia/Skills/getSkills.js +0 -120
- package/lib/services/maia/Skills/updateSkill.js +0 -39
- package/lib/services/maia/client.js +0 -27
- package/lib/services/maia/index.js +0 -17
- package/lib/services/query/ClientSearchQuery.js +0 -5
- package/lib/services/query/entitySearchQuery.js +0 -18
- package/lib/services/query/index.js +0 -2
- package/lib/services/query/projectSearchByValueQuery.js +0 -5
- package/lib/services/query/taskUserTabQuery.js +0 -8
- package/lib/services/query/usersDirectoryQuery.js +0 -19
- package/lib/services/types.js +0 -6
- package/lib/services/utils/fetchCOR.js +0 -117
- package/lib/services/utils/getCookie.js +0 -10
- package/lib/services/utils/index.js +0 -3
- package/lib/services/utils/mapChatMessages.js +0 -287
- package/lib/services/utils/validateIsMaia.js +0 -4
- package/lib/store/chatsSidebarOptimistic.js +0 -92
- package/lib/store/chatsStore.types.js +0 -2
- package/lib/store/chatsStoreLifecycle.js +0 -8
- package/lib/store/faqsStore.types.js +0 -2
- package/lib/store/index.js +0 -4
- package/lib/store/maiaLastChatPersistence.js +0 -35
- package/lib/store/sessions/activeView.js +0 -22
- package/lib/store/sessions/index.js +0 -9
- package/lib/store/sessions/sessionHitlContext.js +0 -15
- package/lib/store/sessions/sessionNotificationSound.js +0 -57
- package/lib/store/sessions/sessionNotifications.js +0 -110
- package/lib/store/sessions/sessionNotifications.types.js +0 -2
- package/lib/store/sessions/sessionStreamManager.js +0 -715
- package/lib/store/sessions/sessionStreamingText.js +0 -80
- package/lib/store/sessions/sessions.types.js +0 -35
- package/lib/store/sessions/useSessionMeta.js +0 -39
- package/lib/store/sessions/useSessionStreamingText.js +0 -18
- package/lib/store/sessions/useSessionsStore.js +0 -197
- package/lib/store/useChatsStore.js +0 -387
- package/lib/store/useFaqsStore.js +0 -27
- package/lib/streamdownStyles.js +0 -9
- package/lib/styles/StyledCleanContainer.js +0 -7
- package/lib/styles/cascade.js +0 -14
- package/lib/styles/config.js +0 -47
- package/lib/styles/shared/scrollable.js +0 -3
- package/lib/styles/transitions.js +0 -21
- package/lib/types/Action.js +0 -2
- package/lib/types/AgentSuggestion.js +0 -2
- package/lib/types/Chat.js +0 -10
- package/lib/types/Client.js +0 -2
- package/lib/types/FrequentlyAskedQuestion.js +0 -2
- package/lib/types/Project.js +0 -2
- package/lib/types/ProjectSummaryConfigKeys.js +0 -9
- package/lib/types/Task.js +0 -2
- package/lib/types/agent.js +0 -2
- package/lib/types/agentModal.js +0 -2
- package/lib/types/contextMention.js +0 -37
- package/lib/types/global.d.js +0 -2
- package/lib/types/skill.js +0 -2
- package/lib/types/streamActivity.js +0 -2
- package/lib/types/userType.d.js +0 -2
- package/lib/utils/actionCategoryMap.js +0 -37
- package/lib/utils/actionIconMap.js +0 -61
- package/lib/utils/agentDisplayName.js +0 -42
- package/lib/utils/chatInputFiles.js +0 -52
- package/lib/utils/contextMentionIcons.js +0 -134
- package/lib/utils/contextMentionLabel.js +0 -4
- package/lib/utils/contextMentionTriggers.js +0 -51
- package/lib/utils/contextMentionTypeLabel.js +0 -17
- package/lib/utils/corConnectorMentionTypes.js +0 -41
- package/lib/utils/ensureStreamdownStyles.js +0 -21
- package/lib/utils/entityLinkRender.js +0 -135
- package/lib/utils/fileDownloadHelper.js +0 -40
- package/lib/utils/formatQuickActionMessage.js +0 -16
- package/lib/utils/formatUnreadCount.js +0 -6
- package/lib/utils/getUnitFileSize.js +0 -13
- package/lib/utils/hitlAnalytics.js +0 -65
- package/lib/utils/hoursPlannerQuickActionType.js +0 -64
- package/lib/utils/imagePreprocessor.js +0 -108
- package/lib/utils/index.js +0 -3
- package/lib/utils/maiaHostOpen.js +0 -19
- package/lib/utils/maiaStreamdownRehypePlugins.js +0 -27
- package/lib/utils/mapBackendLang.js +0 -8
- package/lib/utils/normalizeAgentConnectors.js +0 -70
- package/lib/utils/openTaskInCorPanel.js +0 -22
- package/lib/utils/orchestratorSubagents.js +0 -11
- package/lib/utils/renderContextMentions.js +0 -420
- package/lib/utils/retryCompletion.js +0 -85
- package/lib/utils/slashCommandMarker.js +0 -30
- package/lib/utils/sortManagerHoursHomeFuas.js +0 -14
- package/lib/utils/sseStreamContent.js +0 -17
- package/lib/utils/streamActivityMessages.js +0 -359
- package/lib/utils/validateTrimmedFields.js +0 -8
|
@@ -1,1232 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
-
/* eslint-disable no-restricted-syntax */
|
|
6
|
-
/* eslint-disable no-continue */
|
|
7
|
-
/* eslint-disable no-void */
|
|
8
|
-
/* eslint-disable react/no-array-index-key */
|
|
9
|
-
/* eslint-disable no-lonely-if */
|
|
10
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
|
-
/* eslint-disable prefer-destructuring */
|
|
12
|
-
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
13
|
-
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
14
|
-
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
15
|
-
import { createPortal } from 'react-dom';
|
|
16
|
-
import { Popover } from '@mui/material';
|
|
17
|
-
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
18
|
-
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
19
|
-
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
20
|
-
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SkillsToggleButton, SCInputChipsRow, SCInputMetaIconButton, SCInputMetaIndicators, SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIAttachmentFileIcon, SCMIAttachmentIcon, SCMIAttachmentName, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, SCInputEditorCell, SCInputToolbarRow, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon, StyledMAIADropOverlay } from './styles';
|
|
21
|
-
import { getMaiaInputEditorMaxHeight, MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX } from './maiaInputLayout';
|
|
22
|
-
import { useGlobalContext } from '../../../context/global-context';
|
|
23
|
-
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
24
|
-
import { SlashCommandDropdown } from '../SlashCommandDropdown';
|
|
25
|
-
import { SkillsDropdown } from '../SkillsDropdown';
|
|
26
|
-
import { useSlashCommands } from '../../../hooks/useSlashCommands';
|
|
27
|
-
import { useSkillsCatalog } from '../../../hooks/useSkillsCatalog';
|
|
28
|
-
import { canAccessToSkills } from '../../../constants/permissions';
|
|
29
|
-
import { useUser } from '../../../context/cor-user';
|
|
30
|
-
import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
|
|
31
|
-
import { useT } from '../../../hooks/useT';
|
|
32
|
-
import { MaiaInputAddIcon } from '../icons/MaiaInputAddIcon';
|
|
33
|
-
import { MaiaInputAttachIcon } from '../icons/MaiaInputAttachIcon';
|
|
34
|
-
import { MaiaInputAttachmentImageIcon } from '../icons/MaiaInputAttachmentImageIcon';
|
|
35
|
-
import { MaiaInputDeepSearchIcon } from '../icons/MaiaInputDeepSearchIcon';
|
|
36
|
-
import { CorAccessIcon } from '../icons/CorAccessIcon';
|
|
37
|
-
import { MaiaInputMentionIcon } from '../icons/MaiaInputMentionIcon';
|
|
38
|
-
import { MaiaInputRobotIcon } from '../icons/MaiaInputRobotIcon';
|
|
39
|
-
import { MaiaInputSendIcon } from '../icons/MaiaInputSendIcon';
|
|
40
|
-
import { MaiaInputSlashIcon } from '../icons/MaiaInputSlashIcon';
|
|
41
|
-
import { SkillIcon } from '../icons/SkillIcon';
|
|
42
|
-
import { MaiaInputWebSearchIcon } from '../icons/MaiaInputWebSearchIcon';
|
|
43
|
-
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
44
|
-
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
45
|
-
import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
|
|
46
|
-
import { allowedFileTypes, fileTypes, getMaxAttachmentSizeMb, MAX_CHAT_INPUT_ATTACHMENTS } from '../../../constants/formatExtensions';
|
|
47
|
-
import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
|
|
48
|
-
import { Chip } from '../Chip';
|
|
49
|
-
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
50
|
-
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
51
|
-
// eslint-disable-next-line import/no-cycle
|
|
52
|
-
import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
53
|
-
import { useCaretPosition } from '../../../hooks/useCaretPosition';
|
|
54
|
-
import { dataTransferHasFiles, filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
55
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
56
|
-
var TOOL_CHIP_EXIT_MS = 220;
|
|
57
|
-
var SLASH_DROPDOWN_WIDTH_PX = 340;
|
|
58
|
-
var SLASH_DROPDOWN_MAX_HEIGHT_PX = 416;
|
|
59
|
-
var SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX = 4;
|
|
60
|
-
var SLASH_DROPDOWN_VIEWPORT_EDGE_PX = 8;
|
|
61
|
-
var SKILLS_DROPDOWN_WIDTH_PX = 339;
|
|
62
|
-
var SLASH_DROPDOWN_GAP_PX = 4;
|
|
63
|
-
var SLASH_DROPDOWN_VIEWPORT_PAD_PX = 8;
|
|
64
|
-
export var MAIAInput = function MAIAInput(_ref) {
|
|
65
|
-
var _agent$entity, _contextChip$items, _contextChip$items2, _agent$connectors, _agent$model_display_, _contextChip$items3;
|
|
66
|
-
var onSendMessage = _ref.onSendMessage,
|
|
67
|
-
className = _ref.className,
|
|
68
|
-
disabled = _ref.disabled,
|
|
69
|
-
isStreaming = _ref.isStreaming,
|
|
70
|
-
isWriting = _ref.isWriting,
|
|
71
|
-
onStopGeneration = _ref.onStopGeneration,
|
|
72
|
-
placeholder = _ref.placeholder,
|
|
73
|
-
onChange = _ref.onChange,
|
|
74
|
-
onFocus = _ref.onFocus,
|
|
75
|
-
_ref$alignButtons = _ref.alignButtons,
|
|
76
|
-
alignButtons = _ref$alignButtons === void 0 ? 'vertical' : _ref$alignButtons,
|
|
77
|
-
onFileAttach = _ref.onFileAttach,
|
|
78
|
-
onDeleteAttachment = _ref.onDeleteAttachment,
|
|
79
|
-
_ref$attachments = _ref.attachments,
|
|
80
|
-
attachments = _ref$attachments === void 0 ? [] : _ref$attachments,
|
|
81
|
-
chatId = _ref.chatId,
|
|
82
|
-
newChatKey = _ref.newChatKey,
|
|
83
|
-
tooltipZIndex = _ref.tooltipZIndex,
|
|
84
|
-
externalPopoverAnchorRef = _ref.popoverAnchorRef,
|
|
85
|
-
layoutMode = _ref.layoutMode,
|
|
86
|
-
contextChip = _ref.contextChip;
|
|
87
|
-
var _useT = useT(),
|
|
88
|
-
t = _useT.t;
|
|
89
|
-
var editorRef = useRef(null);
|
|
90
|
-
var fileInputRef = useRef(null);
|
|
91
|
-
var chipsRowRef = useRef(null);
|
|
92
|
-
var toolbarRowRef = useRef(null);
|
|
93
|
-
var internalWrapperRef = useRef(null);
|
|
94
|
-
var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
|
|
95
|
-
var _useState = useState(false),
|
|
96
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
97
|
-
hasTypingPresence = _useState2[0],
|
|
98
|
-
setHasTypingPresence = _useState2[1];
|
|
99
|
-
var _useState3 = useState(0),
|
|
100
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
101
|
-
chipsRowHeight = _useState4[0],
|
|
102
|
-
setChipsRowHeight = _useState4[1];
|
|
103
|
-
var _useState5 = useState(MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX),
|
|
104
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
105
|
-
toolbarRowHeight = _useState6[0],
|
|
106
|
-
setToolbarRowHeight = _useState6[1];
|
|
107
|
-
var _useState7 = useState({
|
|
108
|
-
isOpen: false,
|
|
109
|
-
excludedFiles: [],
|
|
110
|
-
exceededFiles: [],
|
|
111
|
-
fileSizes: {}
|
|
112
|
-
}),
|
|
113
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
114
|
-
modalProps = _useState8[0],
|
|
115
|
-
setModalProps = _useState8[1];
|
|
116
|
-
var eventAmplitude = useEvent();
|
|
117
|
-
var _useGlobalContext = useGlobalContext(),
|
|
118
|
-
toggleWebSearch = _useGlobalContext.toggleWebSearch,
|
|
119
|
-
isWebSearchActive = _useGlobalContext.isWebSearchActive,
|
|
120
|
-
toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
|
|
121
|
-
isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
|
|
122
|
-
agent = _useGlobalContext.agent,
|
|
123
|
-
initialDraft = _useGlobalContext.initialDraft,
|
|
124
|
-
deepLinkSendPendingRef = _useGlobalContext.deepLinkSendPendingRef;
|
|
125
|
-
var plusMenuZIndex = useMaiaTaskPanelZIndex(1300, 'overlay');
|
|
126
|
-
var initialDraftAppliedRef = useRef(false);
|
|
127
|
-
var _useMentionPopover = useMentionPopover({
|
|
128
|
-
editorRef: editorRef,
|
|
129
|
-
popoverAnchorRef: wrapperRef
|
|
130
|
-
}),
|
|
131
|
-
popoverOpen = _useMentionPopover.popoverOpen,
|
|
132
|
-
resetMentionOpenTracking = _useMentionPopover.resetMentionOpenTracking,
|
|
133
|
-
handleTrigger = _useMentionPopover.handleTrigger,
|
|
134
|
-
handlePopoverKeyDown = _useMentionPopover.handleKeyDown,
|
|
135
|
-
popoverNode = _useMentionPopover.popoverNode;
|
|
136
|
-
var _useState9 = useState(null),
|
|
137
|
-
_useState0 = _slicedToArray(_useState9, 2),
|
|
138
|
-
plusMenuAnchor = _useState0[0],
|
|
139
|
-
setPlusMenuAnchor = _useState0[1];
|
|
140
|
-
var _useState1 = useState(false),
|
|
141
|
-
_useState10 = _slicedToArray(_useState1, 2),
|
|
142
|
-
activeToolChipHovered = _useState10[0],
|
|
143
|
-
setActiveToolChipHovered = _useState10[1];
|
|
144
|
-
var _useState11 = useState(false),
|
|
145
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
146
|
-
toolChipExiting = _useState12[0],
|
|
147
|
-
setToolChipExiting = _useState12[1];
|
|
148
|
-
var _useState13 = useState(false),
|
|
149
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
150
|
-
isFileDragActive = _useState14[0],
|
|
151
|
-
setIsFileDragActive = _useState14[1];
|
|
152
|
-
var toolChipExitTimerRef = useRef(null);
|
|
153
|
-
var fileDragCounterRef = useRef(0);
|
|
154
|
-
var searchModeActiveRef = useRef({
|
|
155
|
-
web: false,
|
|
156
|
-
deep: false
|
|
157
|
-
});
|
|
158
|
-
var plusMenuOpen = Boolean(plusMenuAnchor);
|
|
159
|
-
|
|
160
|
-
// Inicializar las referencias como undefined para detectar el primer cambio correctamente
|
|
161
|
-
var previousAgentIdRef = useRef(undefined);
|
|
162
|
-
var previousChatIdRef = useRef(undefined);
|
|
163
|
-
var previousNewChatKeyRef = useRef(undefined);
|
|
164
|
-
var previousLayoutModeRef = useRef(undefined);
|
|
165
|
-
var analyticsAgentType = getChatToolsMenuAgentType(agent);
|
|
166
|
-
var analyticsCloneEntityPayload = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? {
|
|
167
|
-
entity: (_agent$entity = agent.entity) !== null && _agent$entity !== void 0 ? _agent$entity : null
|
|
168
|
-
} : {};
|
|
169
|
-
|
|
170
|
-
// Slash commands aplican a clones especialistas y al orchestrator global (este agrega los de sus subagentes).
|
|
171
|
-
// Los custom y los clone global/maiaker no los tienen habilitados.
|
|
172
|
-
var _useSlashCommands = useSlashCommands((agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global' || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'global' ? agent === null || agent === void 0 ? void 0 : agent.id : undefined),
|
|
173
|
-
slashCommands = _useSlashCommands.commands;
|
|
174
|
-
var _useState15 = useState(false),
|
|
175
|
-
_useState16 = _slicedToArray(_useState15, 2),
|
|
176
|
-
showSlashDropdown = _useState16[0],
|
|
177
|
-
setShowSlashDropdown = _useState16[1];
|
|
178
|
-
var _useState17 = useState(''),
|
|
179
|
-
_useState18 = _slicedToArray(_useState17, 2),
|
|
180
|
-
slashQuery = _useState18[0],
|
|
181
|
-
setSlashQuery = _useState18[1];
|
|
182
|
-
var slashMenuWasOpenRef = useRef(false);
|
|
183
|
-
var slashDropdownZIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
184
|
-
var getCaretRect = useCaretPosition();
|
|
185
|
-
var _useState19 = useState({
|
|
186
|
-
bottom: 0,
|
|
187
|
-
left: 0,
|
|
188
|
-
maxHeight: SLASH_DROPDOWN_MAX_HEIGHT_PX
|
|
189
|
-
}),
|
|
190
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
|
191
|
-
slashDropdownPos = _useState20[0],
|
|
192
|
-
setSlashDropdownPos = _useState20[1];
|
|
193
|
-
var user = useUser();
|
|
194
|
-
var showSkillsButton = canAccessToSkills(user);
|
|
195
|
-
var skillsButtonRef = useRef(null);
|
|
196
|
-
var skillsMenuWasOpenRef = useRef(false);
|
|
197
|
-
var _useSkillsCatalog = useSkillsCatalog(),
|
|
198
|
-
skills = _useSkillsCatalog.skills,
|
|
199
|
-
skillsLoading = _useSkillsCatalog.loading,
|
|
200
|
-
skillsError = _useSkillsCatalog.error,
|
|
201
|
-
fetchSkills = _useSkillsCatalog.fetchSkills;
|
|
202
|
-
var _useState21 = useState(false),
|
|
203
|
-
_useState22 = _slicedToArray(_useState21, 2),
|
|
204
|
-
showSkillsDropdown = _useState22[0],
|
|
205
|
-
setShowSkillsDropdown = _useState22[1];
|
|
206
|
-
var _useState23 = useState(''),
|
|
207
|
-
_useState24 = _slicedToArray(_useState23, 2),
|
|
208
|
-
skillsQuery = _useState24[0],
|
|
209
|
-
setSkillsQuery = _useState24[1];
|
|
210
|
-
var _useState25 = useState({
|
|
211
|
-
bottom: 0,
|
|
212
|
-
right: 0,
|
|
213
|
-
maxHeight: SLASH_DROPDOWN_MAX_HEIGHT_PX
|
|
214
|
-
}),
|
|
215
|
-
_useState26 = _slicedToArray(_useState25, 2),
|
|
216
|
-
skillsDropdownPos = _useState26[0],
|
|
217
|
-
setSkillsDropdownPos = _useState26[1];
|
|
218
|
-
var positionSlashDropdown = useCallback(function () {
|
|
219
|
-
var _wrapperRef$current, _caret$top, _caret$left;
|
|
220
|
-
var wrapperRect = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.getBoundingClientRect();
|
|
221
|
-
var caret = getCaretRect('/');
|
|
222
|
-
var topSource = (_caret$top = caret === null || caret === void 0 ? void 0 : caret.top) !== null && _caret$top !== void 0 ? _caret$top : wrapperRect && wrapperRect.width > 0 ? wrapperRect.top : null;
|
|
223
|
-
var leftSource = (_caret$left = caret === null || caret === void 0 ? void 0 : caret.left) !== null && _caret$left !== void 0 ? _caret$left : wrapperRect && wrapperRect.width > 0 ? wrapperRect.left : null;
|
|
224
|
-
if (topSource == null || leftSource == null) return;
|
|
225
|
-
var viewportH = window.innerHeight;
|
|
226
|
-
var viewportW = window.innerWidth;
|
|
227
|
-
var left = Math.max(SLASH_DROPDOWN_VIEWPORT_PAD_PX, Math.min(viewportW - SLASH_DROPDOWN_WIDTH_PX - SLASH_DROPDOWN_VIEWPORT_PAD_PX, leftSource));
|
|
228
|
-
var availableHeightPx = topSource - SLASH_DROPDOWN_GAP_PX - SLASH_DROPDOWN_VIEWPORT_PAD_PX;
|
|
229
|
-
var maxHeight = Math.min(SLASH_DROPDOWN_MAX_HEIGHT_PX, Math.max(0, availableHeightPx));
|
|
230
|
-
setSlashDropdownPos({
|
|
231
|
-
left: left,
|
|
232
|
-
bottom: viewportH - topSource + SLASH_DROPDOWN_GAP_PX,
|
|
233
|
-
maxHeight: maxHeight
|
|
234
|
-
});
|
|
235
|
-
}, [wrapperRef, getCaretRect]);
|
|
236
|
-
useLayoutEffect(function () {
|
|
237
|
-
if (!showSlashDropdown) return undefined;
|
|
238
|
-
positionSlashDropdown();
|
|
239
|
-
var handler = function handler() {
|
|
240
|
-
return positionSlashDropdown();
|
|
241
|
-
};
|
|
242
|
-
window.addEventListener('scroll', handler, true);
|
|
243
|
-
window.addEventListener('resize', handler);
|
|
244
|
-
return function () {
|
|
245
|
-
window.removeEventListener('scroll', handler, true);
|
|
246
|
-
window.removeEventListener('resize', handler);
|
|
247
|
-
};
|
|
248
|
-
}, [showSlashDropdown, slashQuery, positionSlashDropdown]);
|
|
249
|
-
|
|
250
|
-
/** El popover de skills se ancla al borde derecho del input (a diferencia del de slash). */
|
|
251
|
-
var positionSkillsDropdown = useCallback(function () {
|
|
252
|
-
var _wrapperRef$current2;
|
|
253
|
-
var rect = (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.getBoundingClientRect();
|
|
254
|
-
if (!rect || rect.width <= 0) return;
|
|
255
|
-
var viewportH = window.innerHeight;
|
|
256
|
-
var viewportW = window.innerWidth;
|
|
257
|
-
var right = Math.max(SLASH_DROPDOWN_VIEWPORT_EDGE_PX, Math.min(viewportW - SKILLS_DROPDOWN_WIDTH_PX - SLASH_DROPDOWN_VIEWPORT_EDGE_PX, viewportW - rect.right));
|
|
258
|
-
var availableHeightPx = rect.top - SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX - SLASH_DROPDOWN_VIEWPORT_EDGE_PX;
|
|
259
|
-
setSkillsDropdownPos({
|
|
260
|
-
right: right,
|
|
261
|
-
bottom: viewportH - rect.top + SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX,
|
|
262
|
-
maxHeight: Math.min(SLASH_DROPDOWN_MAX_HEIGHT_PX, Math.max(0, availableHeightPx))
|
|
263
|
-
});
|
|
264
|
-
}, [wrapperRef]);
|
|
265
|
-
useLayoutEffect(function () {
|
|
266
|
-
if (!showSkillsDropdown) return undefined;
|
|
267
|
-
positionSkillsDropdown();
|
|
268
|
-
var handler = function handler() {
|
|
269
|
-
return positionSkillsDropdown();
|
|
270
|
-
};
|
|
271
|
-
window.addEventListener('scroll', handler, true);
|
|
272
|
-
window.addEventListener('resize', handler);
|
|
273
|
-
return function () {
|
|
274
|
-
window.removeEventListener('scroll', handler, true);
|
|
275
|
-
window.removeEventListener('resize', handler);
|
|
276
|
-
};
|
|
277
|
-
}, [showSkillsDropdown, positionSkillsDropdown]);
|
|
278
|
-
|
|
279
|
-
/** Tras elegir o quitar búsqueda web/profunda: volver al textarea (Popover/menu puede robar foco). */
|
|
280
|
-
var scheduleInputFocusAfterToolAction = function scheduleInputFocusAfterToolAction() {
|
|
281
|
-
if (disabled) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
requestAnimationFrame(function () {
|
|
285
|
-
window.setTimeout(function () {
|
|
286
|
-
var _editorRef$current;
|
|
287
|
-
(_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.focus();
|
|
288
|
-
}, 0);
|
|
289
|
-
});
|
|
290
|
-
};
|
|
291
|
-
var closePlusMenu = function closePlusMenu() {
|
|
292
|
-
setPlusMenuAnchor(null);
|
|
293
|
-
scheduleInputFocusAfterToolAction();
|
|
294
|
-
};
|
|
295
|
-
var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
|
|
296
|
-
if (toolChipExitTimerRef.current !== null) {
|
|
297
|
-
clearTimeout(toolChipExitTimerRef.current);
|
|
298
|
-
toolChipExitTimerRef.current = null;
|
|
299
|
-
}
|
|
300
|
-
setToolChipExiting(false);
|
|
301
|
-
};
|
|
302
|
-
var handlePlusButtonMouseDown = function handlePlusButtonMouseDown(e) {
|
|
303
|
-
// Evita que el botón robe el foco del input al abrir el menú.
|
|
304
|
-
e.preventDefault();
|
|
305
|
-
};
|
|
306
|
-
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
307
|
-
e.stopPropagation();
|
|
308
|
-
if (plusMenuAnchor) {
|
|
309
|
-
closePlusMenu();
|
|
310
|
-
return;
|
|
311
|
-
}
|
|
312
|
-
setPlusMenuAnchor(e.currentTarget);
|
|
313
|
-
eventAmplitude(EVENTS.aiChatPlusOpen, _objectSpread({
|
|
314
|
-
agent_type: analyticsAgentType
|
|
315
|
-
}, analyticsCloneEntityPayload));
|
|
316
|
-
};
|
|
317
|
-
var handleMentionButtonClick = function handleMentionButtonClick(e) {
|
|
318
|
-
var _editorRef$current2;
|
|
319
|
-
e.stopPropagation();
|
|
320
|
-
if (disabled) return;
|
|
321
|
-
closePlusMenu();
|
|
322
|
-
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMentionTrigger();
|
|
323
|
-
};
|
|
324
|
-
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
325
|
-
var _fileInputRef$current;
|
|
326
|
-
closePlusMenu();
|
|
327
|
-
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
328
|
-
agent_type: analyticsAgentType,
|
|
329
|
-
option: 'files'
|
|
330
|
-
}, analyticsCloneEntityPayload));
|
|
331
|
-
if (attachments.length >= MAX_CHAT_INPUT_ATTACHMENTS) return;
|
|
332
|
-
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
333
|
-
};
|
|
334
|
-
var beginToolChipExit = function beginToolChipExit() {
|
|
335
|
-
if (toolChipExitTimerRef.current !== null) {
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
var wasWeb = isWebSearchActive;
|
|
339
|
-
var wasDeep = isDeepSearchActive;
|
|
340
|
-
if (!wasWeb && !wasDeep) {
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
setToolChipExiting(true);
|
|
344
|
-
toolChipExitTimerRef.current = setTimeout(function () {
|
|
345
|
-
toolChipExitTimerRef.current = null;
|
|
346
|
-
var _searchModeActiveRef$ = searchModeActiveRef.current,
|
|
347
|
-
web = _searchModeActiveRef$.web,
|
|
348
|
-
deep = _searchModeActiveRef$.deep;
|
|
349
|
-
if (wasWeb && web) {
|
|
350
|
-
toggleWebSearch();
|
|
351
|
-
} else if (wasDeep && deep) {
|
|
352
|
-
toggleDeepSearch();
|
|
353
|
-
}
|
|
354
|
-
setToolChipExiting(false);
|
|
355
|
-
scheduleInputFocusAfterToolAction();
|
|
356
|
-
}, TOOL_CHIP_EXIT_MS);
|
|
357
|
-
};
|
|
358
|
-
var handlePlusMenuWebSearch = function handlePlusMenuWebSearch() {
|
|
359
|
-
closePlusMenu();
|
|
360
|
-
if (isWebSearchActive) {
|
|
361
|
-
beginToolChipExit();
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
cancelPendingToolChipExit();
|
|
365
|
-
if (isDeepSearchActive) {
|
|
366
|
-
toggleDeepSearch();
|
|
367
|
-
}
|
|
368
|
-
toggleWebSearch();
|
|
369
|
-
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
370
|
-
agent_type: analyticsAgentType,
|
|
371
|
-
option: 'search'
|
|
372
|
-
}, analyticsCloneEntityPayload));
|
|
373
|
-
scheduleInputFocusAfterToolAction();
|
|
374
|
-
};
|
|
375
|
-
var handlePlusMenuDeepSearch = function handlePlusMenuDeepSearch() {
|
|
376
|
-
closePlusMenu();
|
|
377
|
-
if (isDeepSearchActive) {
|
|
378
|
-
beginToolChipExit();
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
cancelPendingToolChipExit();
|
|
382
|
-
if (isWebSearchActive) {
|
|
383
|
-
toggleWebSearch();
|
|
384
|
-
}
|
|
385
|
-
toggleDeepSearch();
|
|
386
|
-
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
387
|
-
agent_type: analyticsAgentType,
|
|
388
|
-
option: 'deep_search'
|
|
389
|
-
}, analyticsCloneEntityPayload));
|
|
390
|
-
scheduleInputFocusAfterToolAction();
|
|
391
|
-
};
|
|
392
|
-
var handlePlusMenuQuickActions = function handlePlusMenuQuickActions() {
|
|
393
|
-
var _editorRef$current3;
|
|
394
|
-
setPlusMenuAnchor(null);
|
|
395
|
-
if (disabled) return;
|
|
396
|
-
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.insertSlashTrigger();
|
|
397
|
-
};
|
|
398
|
-
useEffect(function () {
|
|
399
|
-
if (!disabled) {
|
|
400
|
-
var _editorRef$current4;
|
|
401
|
-
(_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
|
|
402
|
-
}
|
|
403
|
-
}, [disabled]);
|
|
404
|
-
useEffect(function () {
|
|
405
|
-
initialDraftAppliedRef.current = false;
|
|
406
|
-
}, [initialDraft]);
|
|
407
|
-
useEffect(function () {
|
|
408
|
-
var _editorRef$current5;
|
|
409
|
-
var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
|
|
410
|
-
if (!draft || initialDraftAppliedRef.current || disabled) {
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
initialDraftAppliedRef.current = true;
|
|
414
|
-
if (deepLinkSendPendingRef) {
|
|
415
|
-
deepLinkSendPendingRef.current = true;
|
|
416
|
-
}
|
|
417
|
-
(_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.setPlainText(draft);
|
|
418
|
-
setHasTypingPresence(true);
|
|
419
|
-
if (!disabled) {
|
|
420
|
-
var _editorRef$current6;
|
|
421
|
-
(_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
|
|
422
|
-
}
|
|
423
|
-
}, [initialDraft, disabled, deepLinkSendPendingRef]);
|
|
424
|
-
var sendDisabled = useMemo(function () {
|
|
425
|
-
return !hasTypingPresence && attachments.length === 0;
|
|
426
|
-
}, [hasTypingPresence, attachments.length]);
|
|
427
|
-
useEffect(function () {
|
|
428
|
-
searchModeActiveRef.current = {
|
|
429
|
-
web: isWebSearchActive,
|
|
430
|
-
deep: isDeepSearchActive
|
|
431
|
-
};
|
|
432
|
-
}, [isWebSearchActive, isDeepSearchActive]);
|
|
433
|
-
useEffect(function () {
|
|
434
|
-
return function () {
|
|
435
|
-
if (toolChipExitTimerRef.current !== null) {
|
|
436
|
-
clearTimeout(toolChipExitTimerRef.current);
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
}, []);
|
|
440
|
-
useEffect(function () {
|
|
441
|
-
if (!isWebSearchActive && !isDeepSearchActive) {
|
|
442
|
-
setActiveToolChipHovered(false);
|
|
443
|
-
}
|
|
444
|
-
}, [isWebSearchActive, isDeepSearchActive]);
|
|
445
|
-
|
|
446
|
-
// Auto-focus cuando cambia el agente o la conversación, o al montar el componente
|
|
447
|
-
useEffect(function () {
|
|
448
|
-
var agentChanged = previousAgentIdRef.current !== (agent === null || agent === void 0 ? void 0 : agent.id);
|
|
449
|
-
var previousChatId = previousChatIdRef.current;
|
|
450
|
-
var currentChatId = chatId;
|
|
451
|
-
var chatChanged = previousChatId !== currentChatId;
|
|
452
|
-
var changedFromNewChatToOldChat = (previousChatId === undefined || previousChatId === null) && currentChatId !== undefined && currentChatId !== null;
|
|
453
|
-
var newChatStarted = previousNewChatKeyRef.current !== newChatKey;
|
|
454
|
-
var isInitialMount = previousAgentIdRef.current === undefined && previousChatIdRef.current === undefined;
|
|
455
|
-
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
456
|
-
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
457
|
-
setTimeout(function () {
|
|
458
|
-
var _editorRef$current7;
|
|
459
|
-
if (!disabled) (_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.focus();
|
|
460
|
-
}, delay);
|
|
461
|
-
}
|
|
462
|
-
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
463
|
-
previousChatIdRef.current = chatId;
|
|
464
|
-
previousNewChatKeyRef.current = newChatKey;
|
|
465
|
-
}, [agent === null || agent === void 0 ? void 0 : agent.id, chatId, newChatKey, disabled]);
|
|
466
|
-
|
|
467
|
-
// Auto-focus cuando cambia la disposición del modal (sidebar / fullscreen / floating)
|
|
468
|
-
useEffect(function () {
|
|
469
|
-
if (!layoutMode) {
|
|
470
|
-
return undefined;
|
|
471
|
-
}
|
|
472
|
-
var previousLayoutMode = previousLayoutModeRef.current;
|
|
473
|
-
previousLayoutModeRef.current = layoutMode;
|
|
474
|
-
if (previousLayoutMode === undefined || previousLayoutMode === layoutMode || disabled) {
|
|
475
|
-
return undefined;
|
|
476
|
-
}
|
|
477
|
-
var timeoutId = window.setTimeout(function () {
|
|
478
|
-
if (!disabled) {
|
|
479
|
-
var _editorRef$current8;
|
|
480
|
-
(_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
|
|
481
|
-
}
|
|
482
|
-
}, 200);
|
|
483
|
-
return function () {
|
|
484
|
-
return window.clearTimeout(timeoutId);
|
|
485
|
-
};
|
|
486
|
-
}, [layoutMode, disabled]);
|
|
487
|
-
|
|
488
|
-
// Appcues: notify that the input is visible for specialist agents (clone + project/client)
|
|
489
|
-
useEffect(function () {
|
|
490
|
-
var isSpecialistAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client');
|
|
491
|
-
if (!wrapperRef.current || !isSpecialistAgent) return undefined;
|
|
492
|
-
var observer = new IntersectionObserver(function (_ref2) {
|
|
493
|
-
var _ref3 = _slicedToArray(_ref2, 1),
|
|
494
|
-
entry = _ref3[0];
|
|
495
|
-
if (entry.isIntersecting) {
|
|
496
|
-
trackAppcuesEvent(APPCUES_EVENTS.maiaContextMentionInit);
|
|
497
|
-
observer.disconnect();
|
|
498
|
-
}
|
|
499
|
-
}, {
|
|
500
|
-
threshold: 0.1
|
|
501
|
-
});
|
|
502
|
-
observer.observe(wrapperRef.current);
|
|
503
|
-
return function () {
|
|
504
|
-
return observer.disconnect();
|
|
505
|
-
};
|
|
506
|
-
}, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.entity]);
|
|
507
|
-
|
|
508
|
-
// Clear input when session changes (user switches to a different chat)
|
|
509
|
-
useEffect(function () {
|
|
510
|
-
var handleSessionChange = function handleSessionChange() {
|
|
511
|
-
var _editorRef$current9;
|
|
512
|
-
if (deepLinkSendPendingRef) {
|
|
513
|
-
deepLinkSendPendingRef.current = false;
|
|
514
|
-
}
|
|
515
|
-
(_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 || _editorRef$current9.clear();
|
|
516
|
-
setHasTypingPresence(false);
|
|
517
|
-
setShowSlashDropdown(false);
|
|
518
|
-
setSlashQuery('');
|
|
519
|
-
resetMentionOpenTracking();
|
|
520
|
-
};
|
|
521
|
-
document.addEventListener('chat-session-changed', handleSessionChange);
|
|
522
|
-
return function () {
|
|
523
|
-
return document.removeEventListener('chat-session-changed', handleSessionChange);
|
|
524
|
-
};
|
|
525
|
-
}, [resetMentionOpenTracking, deepLinkSendPendingRef]);
|
|
526
|
-
|
|
527
|
-
// Mantener foco al seleccionar un contexto reciente (el click en el pill lo roba al input).
|
|
528
|
-
useEffect(function () {
|
|
529
|
-
var handleRefocus = function handleRefocus() {
|
|
530
|
-
if (disabled) return;
|
|
531
|
-
requestAnimationFrame(function () {
|
|
532
|
-
var _editorRef$current0;
|
|
533
|
-
(_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.focus();
|
|
534
|
-
});
|
|
535
|
-
};
|
|
536
|
-
document.addEventListener('maia-input-refocus', handleRefocus);
|
|
537
|
-
return function () {
|
|
538
|
-
return document.removeEventListener('maia-input-refocus', handleRefocus);
|
|
539
|
-
};
|
|
540
|
-
}, [disabled]);
|
|
541
|
-
useEffect(function () {
|
|
542
|
-
var handleInsertSkillMention = function handleInsertSkillMention(event) {
|
|
543
|
-
var _editorRef$current1, _editorRef$current10;
|
|
544
|
-
var _ref4 = event.detail || {},
|
|
545
|
-
skill = _ref4.skill;
|
|
546
|
-
if (!skill || disabled) return;
|
|
547
|
-
var normalizedName = skill.name.replace(/^(@\/|#)/, '');
|
|
548
|
-
(_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 || _editorRef$current1.clear();
|
|
549
|
-
(_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.appendMentionAtEnd({
|
|
550
|
-
id: skill.id,
|
|
551
|
-
type: 'skill',
|
|
552
|
-
label: "#".concat(normalizedName)
|
|
553
|
-
});
|
|
554
|
-
requestAnimationFrame(function () {
|
|
555
|
-
var _editorRef$current11;
|
|
556
|
-
(_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 || _editorRef$current11.focus();
|
|
557
|
-
});
|
|
558
|
-
};
|
|
559
|
-
document.addEventListener('maia-insert-skill-mention', handleInsertSkillMention);
|
|
560
|
-
return function () {
|
|
561
|
-
return document.removeEventListener('maia-insert-skill-mention', handleInsertSkillMention);
|
|
562
|
-
};
|
|
563
|
-
}, [disabled]);
|
|
564
|
-
var handleSendMessage = useCallback(function () {
|
|
565
|
-
var _editorRef$current12, _state$text, _state$mentions, _editorRef$current13;
|
|
566
|
-
var state = (_editorRef$current12 = editorRef.current) === null || _editorRef$current12 === void 0 ? void 0 : _editorRef$current12.serialize();
|
|
567
|
-
var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
|
|
568
|
-
if (!text.trim() && !attachments.length) return;
|
|
569
|
-
var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
|
|
570
|
-
onSendMessage(text, attachments, mentions);
|
|
571
|
-
(_editorRef$current13 = editorRef.current) === null || _editorRef$current13 === void 0 || _editorRef$current13.clear();
|
|
572
|
-
setHasTypingPresence(false);
|
|
573
|
-
setShowSlashDropdown(false);
|
|
574
|
-
setSlashQuery('');
|
|
575
|
-
setShowSkillsDropdown(false);
|
|
576
|
-
setSkillsQuery('');
|
|
577
|
-
skillsMenuWasOpenRef.current = false;
|
|
578
|
-
resetMentionOpenTracking();
|
|
579
|
-
}, [attachments, onSendMessage, resetMentionOpenTracking]);
|
|
580
|
-
var handleSelectSlashCommand = useCallback(function (command) {
|
|
581
|
-
var _editorRef$current14, _state$text2, _editorRef$current16;
|
|
582
|
-
eventAmplitude(EVENTS.aiChatQuickActionSelect, {
|
|
583
|
-
type_quick_action: resolveQuickActionType(command),
|
|
584
|
-
origin_quick_action: 'slash_menu'
|
|
585
|
-
});
|
|
586
|
-
var state = (_editorRef$current14 = editorRef.current) === null || _editorRef$current14 === void 0 ? void 0 : _editorRef$current14.serialize();
|
|
587
|
-
var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
|
|
588
|
-
var triggerPart = "/".concat(slashQuery);
|
|
589
|
-
var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
|
|
590
|
-
var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
|
|
591
|
-
if (isEmptyBeforeTrigger) {
|
|
592
|
-
var _editorRef$current15;
|
|
593
|
-
onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
|
|
594
|
-
(_editorRef$current15 = editorRef.current) === null || _editorRef$current15 === void 0 || _editorRef$current15.clear();
|
|
595
|
-
setHasTypingPresence(false);
|
|
596
|
-
setShowSlashDropdown(false);
|
|
597
|
-
setSlashQuery('');
|
|
598
|
-
slashMenuWasOpenRef.current = false;
|
|
599
|
-
resetMentionOpenTracking();
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
(_editorRef$current16 = editorRef.current) === null || _editorRef$current16 === void 0 || _editorRef$current16.insertSlashCommand({
|
|
603
|
-
id: command.id,
|
|
604
|
-
label: command.title
|
|
605
|
-
});
|
|
606
|
-
setShowSlashDropdown(false);
|
|
607
|
-
setSlashQuery('');
|
|
608
|
-
slashMenuWasOpenRef.current = false;
|
|
609
|
-
}, [attachments, onSendMessage, resetMentionOpenTracking, slashQuery, eventAmplitude]);
|
|
610
|
-
var handleCloseSlashDropdown = function handleCloseSlashDropdown() {
|
|
611
|
-
setShowSlashDropdown(false);
|
|
612
|
-
slashMenuWasOpenRef.current = false;
|
|
613
|
-
};
|
|
614
|
-
var handleCloseSkillsDropdown = useCallback(function () {
|
|
615
|
-
setShowSkillsDropdown(false);
|
|
616
|
-
setSkillsQuery('');
|
|
617
|
-
skillsMenuWasOpenRef.current = false;
|
|
618
|
-
}, []);
|
|
619
|
-
|
|
620
|
-
/** Abre el listado desde el botón: inserta `#` en el editor para que el trigger quede activo. */
|
|
621
|
-
var handleSkillsButtonClick = function handleSkillsButtonClick(e) {
|
|
622
|
-
var _editorRef$current17;
|
|
623
|
-
e.stopPropagation();
|
|
624
|
-
if (disabled) return;
|
|
625
|
-
if (showSkillsDropdown) {
|
|
626
|
-
handleCloseSkillsDropdown();
|
|
627
|
-
return;
|
|
628
|
-
}
|
|
629
|
-
closePlusMenu();
|
|
630
|
-
(_editorRef$current17 = editorRef.current) === null || _editorRef$current17 === void 0 || _editorRef$current17.insertSkillTrigger();
|
|
631
|
-
};
|
|
632
|
-
var handleSelectSkill = useCallback(function (skill) {
|
|
633
|
-
var _editorRef$current18;
|
|
634
|
-
(_editorRef$current18 = editorRef.current) === null || _editorRef$current18 === void 0 || _editorRef$current18.insertSkillMention({
|
|
635
|
-
id: skill.id,
|
|
636
|
-
type: 'skill',
|
|
637
|
-
label: "#".concat(skill.name)
|
|
638
|
-
});
|
|
639
|
-
setShowSkillsDropdown(false);
|
|
640
|
-
setSkillsQuery('');
|
|
641
|
-
skillsMenuWasOpenRef.current = false;
|
|
642
|
-
}, []);
|
|
643
|
-
var handleCreateSkill = useCallback(function () {
|
|
644
|
-
setShowSkillsDropdown(false);
|
|
645
|
-
setSkillsQuery('');
|
|
646
|
-
skillsMenuWasOpenRef.current = false;
|
|
647
|
-
document.dispatchEvent(new CustomEvent('abm-skill-modal-set-values', {
|
|
648
|
-
detail: {
|
|
649
|
-
skillValues: {
|
|
650
|
-
values: {
|
|
651
|
-
isEditing: false,
|
|
652
|
-
intent: 'write'
|
|
653
|
-
},
|
|
654
|
-
isOpen: true
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
}));
|
|
658
|
-
}, []);
|
|
659
|
-
var handleEditorInput = useCallback(function (_ref5) {
|
|
660
|
-
var text = _ref5.text,
|
|
661
|
-
trigger = _ref5.trigger,
|
|
662
|
-
slashTrigger = _ref5.slashTrigger,
|
|
663
|
-
hashTrigger = _ref5.hashTrigger;
|
|
664
|
-
setHasTypingPresence(text.trim().length > 0);
|
|
665
|
-
onChange === null || onChange === void 0 || onChange();
|
|
666
|
-
handleTrigger(trigger);
|
|
667
|
-
if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
|
|
668
|
-
if (!slashMenuWasOpenRef.current) {
|
|
669
|
-
eventAmplitude(EVENTS.aiChatQuickActionOpen);
|
|
670
|
-
slashMenuWasOpenRef.current = true;
|
|
671
|
-
}
|
|
672
|
-
setShowSlashDropdown(true);
|
|
673
|
-
setSlashQuery(slashTrigger.query);
|
|
674
|
-
} else {
|
|
675
|
-
slashMenuWasOpenRef.current = false;
|
|
676
|
-
setShowSlashDropdown(false);
|
|
677
|
-
setSlashQuery('');
|
|
678
|
-
}
|
|
679
|
-
if (hashTrigger !== null && hashTrigger !== void 0 && hashTrigger.active && showSkillsButton) {
|
|
680
|
-
// Fetch on-open: una sola llamada por apertura del listado.
|
|
681
|
-
if (!skillsMenuWasOpenRef.current) {
|
|
682
|
-
skillsMenuWasOpenRef.current = true;
|
|
683
|
-
void fetchSkills();
|
|
684
|
-
}
|
|
685
|
-
setShowSkillsDropdown(true);
|
|
686
|
-
setSkillsQuery(hashTrigger.query);
|
|
687
|
-
} else {
|
|
688
|
-
skillsMenuWasOpenRef.current = false;
|
|
689
|
-
setShowSkillsDropdown(false);
|
|
690
|
-
setSkillsQuery('');
|
|
691
|
-
}
|
|
692
|
-
}, [onChange, handleTrigger, slashCommands, eventAmplitude, showSkillsButton, fetchSkills]);
|
|
693
|
-
var handleKeyDown = useCallback(function (e) {
|
|
694
|
-
if (handlePopoverKeyDown(e)) return;
|
|
695
|
-
if (e.key === 'Enter' && !e.shiftKey && !popoverOpen) {
|
|
696
|
-
e.preventDefault();
|
|
697
|
-
if (!sendDisabled && !disabled) handleSendMessage();
|
|
698
|
-
}
|
|
699
|
-
}, [handlePopoverKeyDown, popoverOpen, sendDisabled, disabled, handleSendMessage]);
|
|
700
|
-
var addFiles = function addFiles(incoming) {
|
|
701
|
-
if (!incoming.length || disabled) return;
|
|
702
|
-
var exceededFiles = [];
|
|
703
|
-
var excludedFiles = [];
|
|
704
|
-
var fileSizes = {};
|
|
705
|
-
var filesInserted = attachments.length;
|
|
706
|
-
var isNewFormat = function isNewFormat(extension) {
|
|
707
|
-
return ['.png', '.jpg', '.jpeg', '.pdf'].includes(extension);
|
|
708
|
-
};
|
|
709
|
-
var isOldFormat = function isOldFormat(extension) {
|
|
710
|
-
return ['.txt', '.md', '.csv', '.doc', '.docx', '.xlsx', '.xls', '.ppt', '.pptx'].includes(extension);
|
|
711
|
-
};
|
|
712
|
-
var isAudioFormat = function isAudioFormat(extension) {
|
|
713
|
-
return ['.flac', '.m4a', '.mp3', '.mp4', '.oga', '.ogg', '.wav', '.webm'].includes(extension);
|
|
714
|
-
};
|
|
715
|
-
var exceedsMaxSize = function exceedsMaxSize(extension, size) {
|
|
716
|
-
return size > getMaxAttachmentSizeMb(extension) * 1024 * 1024;
|
|
717
|
-
};
|
|
718
|
-
incoming.forEach(function (file) {
|
|
719
|
-
var _fileNameParts$pop;
|
|
720
|
-
var excludedFile = false;
|
|
721
|
-
var fileNameParts = file.name.split('.');
|
|
722
|
-
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop = fileNameParts.pop()) === null || _fileNameParts$pop === void 0 ? void 0 : _fileNameParts$pop.toLowerCase()) : '';
|
|
723
|
-
if (!(allowedFileTypes !== null && allowedFileTypes !== void 0 && allowedFileTypes.includes(fileExtension))) {
|
|
724
|
-
return;
|
|
725
|
-
}
|
|
726
|
-
fileSizes[file.name] = file.size;
|
|
727
|
-
if (isNewFormat(fileExtension)) {
|
|
728
|
-
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
729
|
-
exceededFiles.push(file.name);
|
|
730
|
-
excludedFile = true;
|
|
731
|
-
}
|
|
732
|
-
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
733
|
-
excludedFiles.push(file.name);
|
|
734
|
-
excludedFile = true;
|
|
735
|
-
}
|
|
736
|
-
} else if (isOldFormat(fileExtension)) {
|
|
737
|
-
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
738
|
-
exceededFiles.push(file.name);
|
|
739
|
-
excludedFile = true;
|
|
740
|
-
}
|
|
741
|
-
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
742
|
-
excludedFiles.push(file.name);
|
|
743
|
-
excludedFile = true;
|
|
744
|
-
}
|
|
745
|
-
} else if (isAudioFormat(fileExtension)) {
|
|
746
|
-
if (exceedsMaxSize(fileExtension, file.size)) {
|
|
747
|
-
exceededFiles.push(file.name);
|
|
748
|
-
excludedFile = true;
|
|
749
|
-
}
|
|
750
|
-
if (filesInserted + 1 > MAX_CHAT_INPUT_ATTACHMENTS) {
|
|
751
|
-
excludedFiles.push(file.name);
|
|
752
|
-
excludedFile = true;
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
if (!excludedFile) {
|
|
756
|
-
filesInserted += 1;
|
|
757
|
-
var typeFile = file.type || fileTypes[fileExtension];
|
|
758
|
-
var parsedFile = new File([file], file.name, {
|
|
759
|
-
type: typeFile
|
|
760
|
-
});
|
|
761
|
-
onFileAttach === null || onFileAttach === void 0 || onFileAttach(parsedFile);
|
|
762
|
-
}
|
|
763
|
-
});
|
|
764
|
-
if (excludedFiles.length || exceededFiles.length) {
|
|
765
|
-
setModalProps({
|
|
766
|
-
isOpen: true,
|
|
767
|
-
excludedFiles: excludedFiles,
|
|
768
|
-
exceededFiles: exceededFiles,
|
|
769
|
-
fileSizes: fileSizes
|
|
770
|
-
});
|
|
771
|
-
}
|
|
772
|
-
};
|
|
773
|
-
var handleFileSelect = function handleFileSelect(e) {
|
|
774
|
-
var files = e.target.files;
|
|
775
|
-
if (files) {
|
|
776
|
-
addFiles(Array.from(files));
|
|
777
|
-
}
|
|
778
|
-
if (fileInputRef.current) {
|
|
779
|
-
fileInputRef.current.value = '';
|
|
780
|
-
}
|
|
781
|
-
};
|
|
782
|
-
var resetFileDrag = function resetFileDrag() {
|
|
783
|
-
fileDragCounterRef.current = 0;
|
|
784
|
-
setIsFileDragActive(false);
|
|
785
|
-
};
|
|
786
|
-
var handleDragEnter = function handleDragEnter(e) {
|
|
787
|
-
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
788
|
-
e.preventDefault();
|
|
789
|
-
e.stopPropagation();
|
|
790
|
-
if (disabled) return;
|
|
791
|
-
fileDragCounterRef.current += 1;
|
|
792
|
-
setIsFileDragActive(true);
|
|
793
|
-
};
|
|
794
|
-
var handleDragLeave = function handleDragLeave(e) {
|
|
795
|
-
if (!isFileDragActive && !dataTransferHasFiles(e.dataTransfer)) return;
|
|
796
|
-
e.preventDefault();
|
|
797
|
-
e.stopPropagation();
|
|
798
|
-
fileDragCounterRef.current = Math.max(0, fileDragCounterRef.current - 1);
|
|
799
|
-
if (fileDragCounterRef.current === 0) {
|
|
800
|
-
setIsFileDragActive(false);
|
|
801
|
-
}
|
|
802
|
-
};
|
|
803
|
-
var handleDragOver = function handleDragOver(e) {
|
|
804
|
-
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
805
|
-
e.preventDefault();
|
|
806
|
-
e.stopPropagation();
|
|
807
|
-
if (disabled) return;
|
|
808
|
-
e.dataTransfer.dropEffect = 'copy';
|
|
809
|
-
};
|
|
810
|
-
var handleDrop = function handleDrop(e) {
|
|
811
|
-
if (!dataTransferHasFiles(e.dataTransfer)) {
|
|
812
|
-
resetFileDrag();
|
|
813
|
-
return;
|
|
814
|
-
}
|
|
815
|
-
e.preventDefault();
|
|
816
|
-
e.stopPropagation();
|
|
817
|
-
resetFileDrag();
|
|
818
|
-
if (disabled) return;
|
|
819
|
-
addFiles(filesFromDataTransfer(e.dataTransfer));
|
|
820
|
-
};
|
|
821
|
-
var handlePasteFiles = function handlePasteFiles(files) {
|
|
822
|
-
addFiles(files);
|
|
823
|
-
};
|
|
824
|
-
var handleWrapperPaste = function handleWrapperPaste(e) {
|
|
825
|
-
var _wrapperRef$current3;
|
|
826
|
-
var editorEl = (_wrapperRef$current3 = wrapperRef.current) === null || _wrapperRef$current3 === void 0 ? void 0 : _wrapperRef$current3.querySelector('[contenteditable="true"]');
|
|
827
|
-
if (editorEl && editorEl.contains(e.target)) return;
|
|
828
|
-
var files = filesFromDataTransfer(e.clipboardData);
|
|
829
|
-
if (!files.length) return;
|
|
830
|
-
e.preventDefault();
|
|
831
|
-
addFiles(files);
|
|
832
|
-
};
|
|
833
|
-
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
834
|
-
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
835
|
-
};
|
|
836
|
-
var handleStopGeneration = function handleStopGeneration() {
|
|
837
|
-
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
838
|
-
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
839
|
-
};
|
|
840
|
-
var showChipsRow = Boolean((contextChip === null || contextChip === void 0 || (_contextChip$items = contextChip.items) === null || _contextChip$items === void 0 ? void 0 : _contextChip$items.length) || attachments.length);
|
|
841
|
-
useLayoutEffect(function () {
|
|
842
|
-
var chipsEl = chipsRowRef.current;
|
|
843
|
-
var toolbarEl = toolbarRowRef.current;
|
|
844
|
-
var updateHeights = function updateHeights() {
|
|
845
|
-
var nextChips = showChipsRow && chipsEl ? Math.ceil(chipsEl.getBoundingClientRect().height) : 0;
|
|
846
|
-
var nextToolbar = toolbarEl ? Math.ceil(toolbarEl.getBoundingClientRect().height) : MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX;
|
|
847
|
-
setChipsRowHeight(function (prev) {
|
|
848
|
-
return prev === nextChips ? prev : nextChips;
|
|
849
|
-
});
|
|
850
|
-
setToolbarRowHeight(function (prev) {
|
|
851
|
-
return prev === nextToolbar ? prev : nextToolbar;
|
|
852
|
-
});
|
|
853
|
-
};
|
|
854
|
-
updateHeights();
|
|
855
|
-
var observer = new ResizeObserver(updateHeights);
|
|
856
|
-
if (showChipsRow && chipsEl) observer.observe(chipsEl);
|
|
857
|
-
if (toolbarEl) observer.observe(toolbarEl);
|
|
858
|
-
return function () {
|
|
859
|
-
return observer.disconnect();
|
|
860
|
-
};
|
|
861
|
-
}, [showChipsRow, contextChip === null || contextChip === void 0 || (_contextChip$items2 = contextChip.items) === null || _contextChip$items2 === void 0 ? void 0 : _contextChip$items2.length, attachments.length]);
|
|
862
|
-
var editorMaxHeight = useMemo(function () {
|
|
863
|
-
return getMaiaInputEditorMaxHeight({
|
|
864
|
-
chipsRowHeightPx: chipsRowHeight,
|
|
865
|
-
toolbarRowHeightPx: toolbarRowHeight
|
|
866
|
-
});
|
|
867
|
-
}, [chipsRowHeight, toolbarRowHeight]);
|
|
868
|
-
var toolbarIconColor = '#808080';
|
|
869
|
-
var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
|
|
870
|
-
var isCustomAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom';
|
|
871
|
-
var hasCorAccess = Boolean(isCustomAgent && (agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.some(function (connector) {
|
|
872
|
-
return connector.group === 'COR' && connector.slugs.some(function (slug) {
|
|
873
|
-
return typeof slug === 'string' && slug.trim().length > 0;
|
|
874
|
-
});
|
|
875
|
-
})));
|
|
876
|
-
var agentModelName = isCustomAgent ? (agent === null || agent === void 0 || (_agent$model_display_ = agent.model_display_name) === null || _agent$model_display_ === void 0 ? void 0 : _agent$model_display_.trim()) || null : null;
|
|
877
|
-
var showCustomMetaIndicators = hasCorAccess || Boolean(agentModelName);
|
|
878
|
-
var showMentionButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' || hasCorAccess;
|
|
879
|
-
var activeToolChipLeadingIcon;
|
|
880
|
-
if (activeToolChipHovered) {
|
|
881
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
882
|
-
color: MAIA_CHAT_INPUT_UI.chipCloseIcon,
|
|
883
|
-
width: 18,
|
|
884
|
-
height: 18
|
|
885
|
-
});
|
|
886
|
-
} else if (isWebSearchActive) {
|
|
887
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
888
|
-
color: plusMenuIconColor,
|
|
889
|
-
width: 18,
|
|
890
|
-
height: 18
|
|
891
|
-
});
|
|
892
|
-
} else {
|
|
893
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
894
|
-
color: plusMenuIconColor,
|
|
895
|
-
width: 18,
|
|
896
|
-
height: 18
|
|
897
|
-
});
|
|
898
|
-
}
|
|
899
|
-
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
900
|
-
children: [/*#__PURE__*/_jsxs(StyledMAIAInputWrapper, {
|
|
901
|
-
ref: wrapperRef,
|
|
902
|
-
disabled: false,
|
|
903
|
-
alignButtons: alignButtons,
|
|
904
|
-
hasAttachments: !!attachments.length,
|
|
905
|
-
$fileDragActive: isFileDragActive,
|
|
906
|
-
"data-appcues": "maia_chat_input",
|
|
907
|
-
"data-maia-streaming": isStreaming ? 'true' : 'false',
|
|
908
|
-
onPaste: handleWrapperPaste,
|
|
909
|
-
onDragEnter: handleDragEnter,
|
|
910
|
-
onDragLeave: handleDragLeave,
|
|
911
|
-
onDragOver: handleDragOver,
|
|
912
|
-
onDrop: handleDrop,
|
|
913
|
-
children: [showChipsRow && /*#__PURE__*/_jsxs(SCInputChipsRow, {
|
|
914
|
-
ref: chipsRowRef,
|
|
915
|
-
children: [contextChip !== null && contextChip !== void 0 && (_contextChip$items3 = contextChip.items) !== null && _contextChip$items3 !== void 0 && _contextChip$items3.length ? /*#__PURE__*/_jsx(Chip, {
|
|
916
|
-
items: contextChip.items,
|
|
917
|
-
type: contextChip.type,
|
|
918
|
-
leadingIcon: contextChip.leadingIcon,
|
|
919
|
-
tooltipZIndex: tooltipZIndex
|
|
920
|
-
}) : null, attachments.map(function (attachment, index) {
|
|
921
|
-
var _attachment$type;
|
|
922
|
-
var isImage = ((_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/')) || /\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name || '');
|
|
923
|
-
var chipIcon = isImage ? /*#__PURE__*/_jsx(MaiaInputAttachmentImageIcon, {
|
|
924
|
-
color: "#808080",
|
|
925
|
-
width: 12,
|
|
926
|
-
height: 12
|
|
927
|
-
}) : /*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
928
|
-
color: "#808080",
|
|
929
|
-
width: 13,
|
|
930
|
-
height: 13
|
|
931
|
-
});
|
|
932
|
-
return /*#__PURE__*/_jsx(Tooltip, {
|
|
933
|
-
title: attachment.name,
|
|
934
|
-
zIndex: tooltipZIndex,
|
|
935
|
-
children: /*#__PURE__*/_jsxs(SCMIAttachment, {
|
|
936
|
-
children: [/*#__PURE__*/_jsxs(SCMIAttachmentIcon, {
|
|
937
|
-
children: [/*#__PURE__*/_jsx(SCMIAttachmentFileIcon, {
|
|
938
|
-
children: chipIcon
|
|
939
|
-
}), /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
|
|
940
|
-
type: "button",
|
|
941
|
-
"aria-label": t('chat.removeAttachmentAria', {
|
|
942
|
-
defaultValue: 'Quitar archivo'
|
|
943
|
-
}),
|
|
944
|
-
onClick: function onClick() {
|
|
945
|
-
return handleDeleteAttachment(attachment.id);
|
|
946
|
-
},
|
|
947
|
-
children: /*#__PURE__*/_jsx(Cross, {
|
|
948
|
-
color: "#666666",
|
|
949
|
-
width: 14,
|
|
950
|
-
height: 14
|
|
951
|
-
})
|
|
952
|
-
})]
|
|
953
|
-
}), /*#__PURE__*/_jsx(SCMIAttachmentName, {
|
|
954
|
-
children: attachment.name
|
|
955
|
-
})]
|
|
956
|
-
})
|
|
957
|
-
}, "".concat(attachment.id, "-").concat(index));
|
|
958
|
-
})]
|
|
959
|
-
}), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
|
|
960
|
-
children: [/*#__PURE__*/_jsx(SCInputEditorCell, {
|
|
961
|
-
children: /*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
962
|
-
ref: editorRef,
|
|
963
|
-
disabled: disabled,
|
|
964
|
-
placeholder: placeholder,
|
|
965
|
-
maxHeight: editorMaxHeight,
|
|
966
|
-
onInput: handleEditorInput,
|
|
967
|
-
onKeyDown: handleKeyDown,
|
|
968
|
-
onFocus: onFocus,
|
|
969
|
-
onPasteFiles: handlePasteFiles
|
|
970
|
-
})
|
|
971
|
-
}), /*#__PURE__*/_jsxs(SCInputToolbarRow, {
|
|
972
|
-
ref: toolbarRowRef,
|
|
973
|
-
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
974
|
-
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
975
|
-
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
976
|
-
type: "button",
|
|
977
|
-
$menuOpen: plusMenuOpen,
|
|
978
|
-
onMouseDown: handlePlusButtonMouseDown,
|
|
979
|
-
onClick: handlePlusButtonClick,
|
|
980
|
-
"aria-label": t('chat.openPlusMenuAria'),
|
|
981
|
-
"aria-haspopup": "true",
|
|
982
|
-
"aria-expanded": plusMenuOpen,
|
|
983
|
-
children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
|
|
984
|
-
color: toolbarIconColor,
|
|
985
|
-
width: 18,
|
|
986
|
-
height: 18
|
|
987
|
-
})
|
|
988
|
-
}), showMentionButton && /*#__PURE__*/_jsx(PlusToggleButton, {
|
|
989
|
-
type: "button",
|
|
990
|
-
$menuOpen: false,
|
|
991
|
-
onClick: handleMentionButtonClick,
|
|
992
|
-
disabled: disabled,
|
|
993
|
-
"aria-label": t('chat.openMentionAria'),
|
|
994
|
-
children: /*#__PURE__*/_jsx(MaiaInputMentionIcon, {
|
|
995
|
-
color: toolbarIconColor,
|
|
996
|
-
width: 18,
|
|
997
|
-
height: 18
|
|
998
|
-
})
|
|
999
|
-
}), showSkillsButton && /*#__PURE__*/_jsxs(SkillsToggleButton, {
|
|
1000
|
-
ref: skillsButtonRef,
|
|
1001
|
-
type: "button",
|
|
1002
|
-
onMouseDown: handlePlusButtonMouseDown,
|
|
1003
|
-
onClick: handleSkillsButtonClick,
|
|
1004
|
-
disabled: disabled,
|
|
1005
|
-
"aria-haspopup": "listbox",
|
|
1006
|
-
"aria-expanded": showSkillsDropdown,
|
|
1007
|
-
children: [/*#__PURE__*/_jsx(SkillIcon, {
|
|
1008
|
-
width: 16,
|
|
1009
|
-
height: 16,
|
|
1010
|
-
color: toolbarIconColor
|
|
1011
|
-
}), t('mySkills.dropdownButton')]
|
|
1012
|
-
}), /*#__PURE__*/_jsx(Popover, {
|
|
1013
|
-
open: plusMenuOpen,
|
|
1014
|
-
anchorEl: plusMenuAnchor,
|
|
1015
|
-
onClose: closePlusMenu,
|
|
1016
|
-
disableAutoFocus: true,
|
|
1017
|
-
disableEnforceFocus: true,
|
|
1018
|
-
disableRestoreFocus: true,
|
|
1019
|
-
anchorOrigin: {
|
|
1020
|
-
vertical: 'top',
|
|
1021
|
-
horizontal: 'left'
|
|
1022
|
-
},
|
|
1023
|
-
transformOrigin: {
|
|
1024
|
-
vertical: 'bottom',
|
|
1025
|
-
horizontal: 'left'
|
|
1026
|
-
},
|
|
1027
|
-
sx: {
|
|
1028
|
-
zIndex: plusMenuZIndex
|
|
1029
|
-
},
|
|
1030
|
-
slotProps: {
|
|
1031
|
-
paper: {
|
|
1032
|
-
elevation: 0,
|
|
1033
|
-
sx: {
|
|
1034
|
-
overflow: 'visible',
|
|
1035
|
-
borderRadius: '4px',
|
|
1036
|
-
boxShadow: 'none',
|
|
1037
|
-
backgroundColor: 'transparent',
|
|
1038
|
-
marginTop: '-4px'
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
},
|
|
1042
|
-
children: /*#__PURE__*/_jsx(PlusMenuPaper, {
|
|
1043
|
-
children: /*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
1044
|
-
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
1045
|
-
type: "button",
|
|
1046
|
-
onClick: handlePlusMenuAttach,
|
|
1047
|
-
children: [/*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
1048
|
-
color: plusMenuIconColor,
|
|
1049
|
-
width: 21,
|
|
1050
|
-
height: 20
|
|
1051
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
1052
|
-
children: t('chat.plusMenuAttach')
|
|
1053
|
-
})]
|
|
1054
|
-
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
1055
|
-
type: "button",
|
|
1056
|
-
onClick: handlePlusMenuWebSearch,
|
|
1057
|
-
children: [/*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
1058
|
-
color: plusMenuIconColor,
|
|
1059
|
-
width: 20,
|
|
1060
|
-
height: 20
|
|
1061
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
1062
|
-
children: t('chat.searchWeb')
|
|
1063
|
-
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
1064
|
-
color: plusMenuIconColor,
|
|
1065
|
-
width: 16,
|
|
1066
|
-
height: 16
|
|
1067
|
-
}) : null]
|
|
1068
|
-
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
1069
|
-
type: "button",
|
|
1070
|
-
onClick: handlePlusMenuDeepSearch,
|
|
1071
|
-
children: [/*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
1072
|
-
color: plusMenuIconColor,
|
|
1073
|
-
width: 20,
|
|
1074
|
-
height: 20
|
|
1075
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
1076
|
-
children: t('chat.plusMenuDeepInvestigation')
|
|
1077
|
-
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
1078
|
-
color: plusMenuIconColor,
|
|
1079
|
-
width: 16,
|
|
1080
|
-
height: 16
|
|
1081
|
-
}) : null]
|
|
1082
|
-
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
1083
|
-
type: "button",
|
|
1084
|
-
onClick: handlePlusMenuQuickActions,
|
|
1085
|
-
children: [/*#__PURE__*/_jsx(MaiaInputSlashIcon, {
|
|
1086
|
-
color: plusMenuIconColor,
|
|
1087
|
-
width: 20,
|
|
1088
|
-
height: 20
|
|
1089
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
1090
|
-
children: t('chat.plusMenuQuickActions')
|
|
1091
|
-
})]
|
|
1092
|
-
})]
|
|
1093
|
-
})
|
|
1094
|
-
})
|
|
1095
|
-
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
1096
|
-
$hovered: activeToolChipHovered,
|
|
1097
|
-
$exiting: toolChipExiting,
|
|
1098
|
-
onMouseEnter: function onMouseEnter() {
|
|
1099
|
-
return setActiveToolChipHovered(true);
|
|
1100
|
-
},
|
|
1101
|
-
onMouseLeave: function onMouseLeave() {
|
|
1102
|
-
return setActiveToolChipHovered(false);
|
|
1103
|
-
},
|
|
1104
|
-
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
1105
|
-
type: "button",
|
|
1106
|
-
$closeShown: activeToolChipHovered,
|
|
1107
|
-
"aria-label": t('chat.removeActiveToolAria'),
|
|
1108
|
-
onClick: function onClick(e) {
|
|
1109
|
-
e.stopPropagation();
|
|
1110
|
-
beginToolChipExit();
|
|
1111
|
-
},
|
|
1112
|
-
children: activeToolChipLeadingIcon
|
|
1113
|
-
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
1114
|
-
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
1115
|
-
})]
|
|
1116
|
-
})]
|
|
1117
|
-
})
|
|
1118
|
-
}), /*#__PURE__*/_jsxs(StyledMAIASendToolbarCell, {
|
|
1119
|
-
children: [showCustomMetaIndicators && /*#__PURE__*/_jsxs(SCInputMetaIndicators, {
|
|
1120
|
-
children: [hasCorAccess && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
1121
|
-
title: t('chat.footer.corAccessTooltip')
|
|
1122
|
-
}, tooltipZIndex != null ? {
|
|
1123
|
-
zIndex: tooltipZIndex
|
|
1124
|
-
} : {}), {}, {
|
|
1125
|
-
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
1126
|
-
"aria-label": t('chat.footer.corAccessLabel'),
|
|
1127
|
-
children: /*#__PURE__*/_jsx(CorAccessIcon, {
|
|
1128
|
-
width: 15,
|
|
1129
|
-
height: 14,
|
|
1130
|
-
color: toolbarIconColor
|
|
1131
|
-
})
|
|
1132
|
-
})
|
|
1133
|
-
})), agentModelName && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
1134
|
-
title: t('chipLlm.tooltip', {
|
|
1135
|
-
model: agentModelName
|
|
1136
|
-
})
|
|
1137
|
-
}, tooltipZIndex != null ? {
|
|
1138
|
-
zIndex: tooltipZIndex
|
|
1139
|
-
} : {}), {}, {
|
|
1140
|
-
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
1141
|
-
"aria-label": agentModelName,
|
|
1142
|
-
children: /*#__PURE__*/_jsx(MaiaInputRobotIcon, {
|
|
1143
|
-
width: 18,
|
|
1144
|
-
height: 18,
|
|
1145
|
-
color: toolbarIconColor
|
|
1146
|
-
})
|
|
1147
|
-
})
|
|
1148
|
-
}))]
|
|
1149
|
-
}), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
1150
|
-
title: t('chat.stop'),
|
|
1151
|
-
zIndex: tooltipZIndex,
|
|
1152
|
-
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
1153
|
-
disabled: false,
|
|
1154
|
-
onClick: handleStopGeneration,
|
|
1155
|
-
className: className,
|
|
1156
|
-
children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
|
|
1157
|
-
})
|
|
1158
|
-
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
1159
|
-
title: t('chat.send'),
|
|
1160
|
-
zIndex: tooltipZIndex,
|
|
1161
|
-
children: /*#__PURE__*/_jsx("span", {
|
|
1162
|
-
style: {
|
|
1163
|
-
display: 'inline-flex',
|
|
1164
|
-
alignItems: 'center'
|
|
1165
|
-
},
|
|
1166
|
-
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
1167
|
-
onClick: handleSendMessage,
|
|
1168
|
-
className: className,
|
|
1169
|
-
disabled: sendDisabled || disabled,
|
|
1170
|
-
hasValues: hasTypingPresence || attachments.length > 0,
|
|
1171
|
-
children: /*#__PURE__*/_jsx(MaiaInputSendIcon, {
|
|
1172
|
-
color: "#BFBFBF",
|
|
1173
|
-
width: 16,
|
|
1174
|
-
height: 16
|
|
1175
|
-
})
|
|
1176
|
-
})
|
|
1177
|
-
})
|
|
1178
|
-
})]
|
|
1179
|
-
})]
|
|
1180
|
-
})]
|
|
1181
|
-
}), /*#__PURE__*/_jsx("input", {
|
|
1182
|
-
ref: fileInputRef,
|
|
1183
|
-
type: "file",
|
|
1184
|
-
multiple: true,
|
|
1185
|
-
accept: ".txt,.md,.csv,.doc,.docx,.ppt,.pptx,.png,.jpg,.jpeg,.pdf,.xlsx,.xls,.flac,.m4a,.mp3,.mp4,.oga,.ogg,.wav,.webm",
|
|
1186
|
-
onChange: handleFileSelect,
|
|
1187
|
-
style: {
|
|
1188
|
-
display: 'none'
|
|
1189
|
-
}
|
|
1190
|
-
}), isFileDragActive && /*#__PURE__*/_jsx(StyledMAIADropOverlay, {
|
|
1191
|
-
children: t('chat.dropFilesHere')
|
|
1192
|
-
})]
|
|
1193
|
-
}), modalProps.isOpen && /*#__PURE__*/_jsx(ModalFileExceeds, {
|
|
1194
|
-
onClose: function onClose() {
|
|
1195
|
-
return setModalProps({
|
|
1196
|
-
isOpen: false,
|
|
1197
|
-
excludedFiles: [],
|
|
1198
|
-
exceededFiles: [],
|
|
1199
|
-
fileSizes: {}
|
|
1200
|
-
});
|
|
1201
|
-
},
|
|
1202
|
-
excludedFiles: modalProps.excludedFiles,
|
|
1203
|
-
exceededFiles: modalProps.exceededFiles,
|
|
1204
|
-
fileSizes: modalProps.fileSizes
|
|
1205
|
-
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body), showSlashDropdown && /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(SlashCommandDropdown, {
|
|
1206
|
-
commands: slashCommands,
|
|
1207
|
-
query: slashQuery,
|
|
1208
|
-
onSelect: handleSelectSlashCommand,
|
|
1209
|
-
onClose: handleCloseSlashDropdown,
|
|
1210
|
-
bottom: slashDropdownPos.bottom,
|
|
1211
|
-
left: slashDropdownPos.left,
|
|
1212
|
-
maxHeight: slashDropdownPos.maxHeight,
|
|
1213
|
-
zIndex: slashDropdownZIndex,
|
|
1214
|
-
anchorRef: wrapperRef
|
|
1215
|
-
}), document.body), showSkillsDropdown && /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(SkillsDropdown, {
|
|
1216
|
-
skills: skills,
|
|
1217
|
-
query: skillsQuery,
|
|
1218
|
-
loading: skillsLoading,
|
|
1219
|
-
error: skillsError,
|
|
1220
|
-
canCreate: showSkillsButton,
|
|
1221
|
-
onSelect: handleSelectSkill,
|
|
1222
|
-
onCreate: handleCreateSkill,
|
|
1223
|
-
onClose: handleCloseSkillsDropdown,
|
|
1224
|
-
bottom: skillsDropdownPos.bottom,
|
|
1225
|
-
right: skillsDropdownPos.right,
|
|
1226
|
-
maxHeight: skillsDropdownPos.maxHeight,
|
|
1227
|
-
zIndex: slashDropdownZIndex,
|
|
1228
|
-
anchorRef: wrapperRef
|
|
1229
|
-
}), document.body)]
|
|
1230
|
-
});
|
|
1231
|
-
};
|
|
1232
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTa2lsbHNUb2dnbGVCdXR0b24iLCJTQ0lucHV0Q2hpcHNSb3ciLCJTQ0lucHV0TWV0YUljb25CdXR0b24iLCJTQ0lucHV0TWV0YUluZGljYXRvcnMiLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlNDTUlBdHRhY2htZW50RmlsZUljb24iLCJTQ01JQXR0YWNobWVudEljb24iLCJTQ01JQXR0YWNobWVudE5hbWUiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkIiwiU0NJbnB1dEVkaXRvckNlbGwiLCJTQ0lucHV0VG9vbGJhclJvdyIsIlN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwiLCJTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVN0b3BCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEljb24iLCJTdHlsZWRNQUlBRHJvcE92ZXJsYXkiLCJnZXRNYWlhSW5wdXRFZGl0b3JNYXhIZWlnaHQiLCJNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWCIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwiU2xhc2hDb21tYW5kRHJvcGRvd24iLCJTa2lsbHNEcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJ1c2VTa2lsbHNDYXRhbG9nIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJ1c2VVc2VyIiwicmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSIsInVzZVQiLCJNYWlhSW5wdXRBZGRJY29uIiwiTWFpYUlucHV0QXR0YWNoSWNvbiIsIk1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24iLCJNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiIsIkNvckFjY2Vzc0ljb24iLCJNYWlhSW5wdXRNZW50aW9uSWNvbiIsIk1haWFJbnB1dFJvYm90SWNvbiIsIk1haWFJbnB1dFNlbmRJY29uIiwiTWFpYUlucHV0U2xhc2hJY29uIiwiU2tpbGxJY29uIiwiTWFpYUlucHV0V2ViU2VhcmNoSWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSIsIk1BSUFfQ0hBVF9JTlBVVF9VSSIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJnZXRNYXhBdHRhY2htZW50U2l6ZU1iIiwiTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMiLCJBUFBDVUVTX0VWRU5UUyIsInRyYWNrQXBwY3Vlc0V2ZW50IiwiQ2hpcCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwidXNlQ2FyZXRQb3NpdGlvbiIsImRhdGFUcmFuc2Zlckhhc0ZpbGVzIiwiZmlsZXNGcm9tRGF0YVRyYW5zZmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCIsIlNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFgiLCJTTEFTSF9EUk9QRE9XTl9HQVBfQUJPVkVfSU5QVVRfUFgiLCJTTEFTSF9EUk9QRE9XTl9WSUVXUE9SVF9FREdFX1BYIiwiU0tJTExTX0RST1BET1dOX1dJRFRIX1BYIiwiU0xBU0hfRFJPUERPV05fR0FQX1BYIiwiU0xBU0hfRFJPUERPV05fVklFV1BPUlRfUEFEX1BYIiwiTUFJQUlucHV0IiwiX3JlZiIsIl9hZ2VudCRlbnRpdHkiLCJfY29udGV4dENoaXAkaXRlbXMiLCJfY29udGV4dENoaXAkaXRlbXMyIiwiX2FnZW50JGNvbm5lY3RvcnMiLCJfYWdlbnQkbW9kZWxfZGlzcGxheV8iLCJfY29udGV4dENoaXAkaXRlbXMzIiwib25TZW5kTWVzc2FnZSIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwiaXNTdHJlYW1pbmciLCJpc1dyaXRpbmciLCJvblN0b3BHZW5lcmF0aW9uIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJ0b29sdGlwWkluZGV4IiwiZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmIiwicG9wb3ZlckFuY2hvclJlZiIsImxheW91dE1vZGUiLCJjb250ZXh0Q2hpcCIsIl91c2VUIiwidCIsImVkaXRvclJlZiIsImZpbGVJbnB1dFJlZiIsImNoaXBzUm93UmVmIiwidG9vbGJhclJvd1JlZiIsImludGVybmFsV3JhcHBlclJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNUeXBpbmdQcmVzZW5jZSIsInNldEhhc1R5cGluZ1ByZXNlbmNlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjaGlwc1Jvd0hlaWdodCIsInNldENoaXBzUm93SGVpZ2h0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b29sYmFyUm93SGVpZ2h0Iiwic2V0VG9vbGJhclJvd0hlaWdodCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImluaXRpYWxEcmFmdCIsImRlZXBMaW5rU2VuZFBlbmRpbmdSZWYiLCJwbHVzTWVudVpJbmRleCIsImluaXRpYWxEcmFmdEFwcGxpZWRSZWYiLCJfdXNlTWVudGlvblBvcG92ZXIiLCJwb3BvdmVyT3BlbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImhhbmRsZVRyaWdnZXIiLCJoYW5kbGVQb3BvdmVyS2V5RG93biIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNGaWxlRHJhZ0FjdGl2ZSIsInNldElzRmlsZURyYWdBY3RpdmUiLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsImZpbGVEcmFnQ291bnRlclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwicHJldmlvdXNMYXlvdXRNb2RlUmVmIiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsIl91c2VTbGFzaENvbW1hbmRzIiwiaWQiLCJzbGFzaENvbW1hbmRzIiwiY29tbWFuZHMiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2Iiwic2hvd1NsYXNoRHJvcGRvd24iLCJzZXRTaG93U2xhc2hEcm9wZG93biIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJzbGFzaFF1ZXJ5Iiwic2V0U2xhc2hRdWVyeSIsInNsYXNoTWVudVdhc09wZW5SZWYiLCJzbGFzaERyb3Bkb3duWkluZGV4IiwiZ2V0Q2FyZXRSZWN0IiwiX3VzZVN0YXRlMTkiLCJib3R0b20iLCJsZWZ0IiwibWF4SGVpZ2h0IiwiX3VzZVN0YXRlMjAiLCJzbGFzaERyb3Bkb3duUG9zIiwic2V0U2xhc2hEcm9wZG93blBvcyIsInVzZXIiLCJzaG93U2tpbGxzQnV0dG9uIiwic2tpbGxzQnV0dG9uUmVmIiwic2tpbGxzTWVudVdhc09wZW5SZWYiLCJfdXNlU2tpbGxzQ2F0YWxvZyIsInNraWxscyIsInNraWxsc0xvYWRpbmciLCJsb2FkaW5nIiwic2tpbGxzRXJyb3IiLCJlcnJvciIsImZldGNoU2tpbGxzIiwiX3VzZVN0YXRlMjEiLCJfdXNlU3RhdGUyMiIsInNob3dTa2lsbHNEcm9wZG93biIsInNldFNob3dTa2lsbHNEcm9wZG93biIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJza2lsbHNRdWVyeSIsInNldFNraWxsc1F1ZXJ5IiwiX3VzZVN0YXRlMjUiLCJyaWdodCIsIl91c2VTdGF0ZTI2Iiwic2tpbGxzRHJvcGRvd25Qb3MiLCJzZXRTa2lsbHNEcm9wZG93blBvcyIsInBvc2l0aW9uU2xhc2hEcm9wZG93biIsIl93cmFwcGVyUmVmJGN1cnJlbnQiLCJfY2FyZXQkdG9wIiwiX2NhcmV0JGxlZnQiLCJ3cmFwcGVyUmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjYXJldCIsInRvcFNvdXJjZSIsInRvcCIsIndpZHRoIiwibGVmdFNvdXJjZSIsInZpZXdwb3J0SCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwidmlld3BvcnRXIiwiaW5uZXJXaWR0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJhdmFpbGFibGVIZWlnaHRQeCIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBvc2l0aW9uU2tpbGxzRHJvcGRvd24iLCJfd3JhcHBlclJlZiRjdXJyZW50MiIsInJlY3QiLCJzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50IiwiZm9jdXMiLCJjbG9zZVBsdXNNZW51IiwiY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCIsImNsZWFyVGltZW91dCIsImhhbmRsZVBsdXNCdXR0b25Nb3VzZURvd24iLCJlIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiYWlDaGF0UGx1c09wZW4iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImhhbmRsZU1lbnRpb25CdXR0b25DbGljayIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJpbnNlcnRNZW50aW9uVHJpZ2dlciIsImhhbmRsZVBsdXNNZW51QXR0YWNoIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiYWlDaGF0VG9vbHMiLCJvcHRpb24iLCJsZW5ndGgiLCJjbGljayIsImJlZ2luVG9vbENoaXBFeGl0Iiwid2FzV2ViIiwid2FzRGVlcCIsIl9zZWFyY2hNb2RlQWN0aXZlUmVmJCIsImhhbmRsZVBsdXNNZW51V2ViU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVRdWlja0FjdGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwiaW5zZXJ0U2xhc2hUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50NCIsIl9lZGl0b3JSZWYkY3VycmVudDUiLCJkcmFmdCIsInRyaW0iLCJzZXRQbGFpblRleHQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ2Iiwic2VuZERpc2FibGVkIiwiYWdlbnRDaGFuZ2VkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJfZWRpdG9yUmVmJGN1cnJlbnQ3IiwicHJldmlvdXNMYXlvdXRNb2RlIiwidGltZW91dElkIiwiX2VkaXRvclJlZiRjdXJyZW50OCIsImlzU3BlY2lhbGlzdEFnZW50Iiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIl9yZWYyIiwiX3JlZjMiLCJlbnRyeSIsImlzSW50ZXJzZWN0aW5nIiwibWFpYUNvbnRleHRNZW50aW9uSW5pdCIsImRpc2Nvbm5lY3QiLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwiaGFuZGxlU2Vzc2lvbkNoYW5nZSIsIl9lZGl0b3JSZWYkY3VycmVudDkiLCJjbGVhciIsImRvY3VtZW50IiwiaGFuZGxlUmVmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudDAiLCJoYW5kbGVJbnNlcnRTa2lsbE1lbnRpb24iLCJldmVudCIsIl9lZGl0b3JSZWYkY3VycmVudDEiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMCIsIl9yZWY0IiwiZGV0YWlsIiwic2tpbGwiLCJub3JtYWxpemVkTmFtZSIsIm5hbWUiLCJyZXBsYWNlIiwiYXBwZW5kTWVudGlvbkF0RW5kIiwibGFiZWwiLCJjb25jYXQiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMSIsImhhbmRsZVNlbmRNZXNzYWdlIiwiX2VkaXRvclJlZiRjdXJyZW50MTIiLCJfc3RhdGUkdGV4dCIsIl9zdGF0ZSRtZW50aW9ucyIsIl9lZGl0b3JSZWYkY3VycmVudDEzIiwic3RhdGUiLCJzZXJpYWxpemUiLCJ0ZXh0IiwibWVudGlvbnMiLCJoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiX2VkaXRvclJlZiRjdXJyZW50MTQiLCJfc3RhdGUkdGV4dDIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxNiIsImFpQ2hhdFF1aWNrQWN0aW9uU2VsZWN0IiwidHlwZV9xdWlja19hY3Rpb24iLCJvcmlnaW5fcXVpY2tfYWN0aW9uIiwidHJpZ2dlclBhcnQiLCJiZWZvcmVUcmlnZ2VyIiwiZW5kc1dpdGgiLCJzbGljZSIsImlzRW1wdHlCZWZvcmVUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50MTUiLCJ0aXRsZSIsImluc2VydFNsYXNoQ29tbWFuZCIsImhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biIsImhhbmRsZUNsb3NlU2tpbGxzRHJvcGRvd24iLCJoYW5kbGVTa2lsbHNCdXR0b25DbGljayIsIl9lZGl0b3JSZWYkY3VycmVudDE3IiwiaW5zZXJ0U2tpbGxUcmlnZ2VyIiwiaGFuZGxlU2VsZWN0U2tpbGwiLCJfZWRpdG9yUmVmJGN1cnJlbnQxOCIsImluc2VydFNraWxsTWVudGlvbiIsImhhbmRsZUNyZWF0ZVNraWxsIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50Iiwic2tpbGxWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJpbnRlbnQiLCJoYW5kbGVFZGl0b3JJbnB1dCIsIl9yZWY1IiwidHJpZ2dlciIsInNsYXNoVHJpZ2dlciIsImhhc2hUcmlnZ2VyIiwiYWN0aXZlIiwiYWlDaGF0UXVpY2tBY3Rpb25PcGVuIiwicXVlcnkiLCJrZXkiLCJzaGlmdEtleSIsImFkZEZpbGVzIiwiaW5jb21pbmciLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpbmNsdWRlcyIsImlzT2xkRm9ybWF0IiwiaXNBdWRpb0Zvcm1hdCIsImV4Y2VlZHNNYXhTaXplIiwic2l6ZSIsImZvckVhY2giLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsInNwbGl0IiwiZmlsZUV4dGVuc2lvbiIsInBvcCIsInRvTG93ZXJDYXNlIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJ0YXJnZXQiLCJBcnJheSIsImZyb20iLCJ2YWx1ZSIsInJlc2V0RmlsZURyYWciLCJoYW5kbGVEcmFnRW50ZXIiLCJkYXRhVHJhbnNmZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImRyb3BFZmZlY3QiLCJoYW5kbGVEcm9wIiwiaGFuZGxlUGFzdGVGaWxlcyIsImhhbmRsZVdyYXBwZXJQYXN0ZSIsIl93cmFwcGVyUmVmJGN1cnJlbnQzIiwiZWRpdG9yRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbnMiLCJjbGlwYm9hcmREYXRhIiwiaGFuZGxlRGVsZXRlQXR0YWNobWVudCIsImZpbGVJZCIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiYWlDaGF0U3RvcFJlc3BvbnNlIiwic2hvd0NoaXBzUm93IiwiaXRlbXMiLCJjaGlwc0VsIiwidG9vbGJhckVsIiwidXBkYXRlSGVpZ2h0cyIsIm5leHRDaGlwcyIsImNlaWwiLCJoZWlnaHQiLCJuZXh0VG9vbGJhciIsInByZXYiLCJSZXNpemVPYnNlcnZlciIsImVkaXRvck1heEhlaWdodCIsImNoaXBzUm93SGVpZ2h0UHgiLCJ0b29sYmFyUm93SGVpZ2h0UHgiLCJ0b29sYmFySWNvbkNvbG9yIiwicGx1c01lbnVJY29uQ29sb3IiLCJtZW51SWNvbiIsImlzQ3VzdG9tQWdlbnQiLCJoYXNDb3JBY2Nlc3MiLCJjb25uZWN0b3JzIiwic29tZSIsImNvbm5lY3RvciIsImdyb3VwIiwic2x1Z3MiLCJzbHVnIiwiYWdlbnRNb2RlbE5hbWUiLCJtb2RlbF9kaXNwbGF5X25hbWUiLCJzaG93Q3VzdG9tTWV0YUluZGljYXRvcnMiLCJzaG93TWVudGlvbkJ1dHRvbiIsImFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24iLCJjb2xvciIsImNoaXBDbG9zZUljb24iLCJjaGlsZHJlbiIsInJlZiIsImhhc0F0dGFjaG1lbnRzIiwiJGZpbGVEcmFnQWN0aXZlIiwib25QYXN0ZSIsIm9uRHJhZ0VudGVyIiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25Ecm9wIiwibGVhZGluZ0ljb24iLCJtYXAiLCJhdHRhY2htZW50IiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZSIsInN0YXJ0c1dpdGgiLCJ0ZXN0IiwiY2hpcEljb24iLCJ6SW5kZXgiLCJkZWZhdWx0VmFsdWUiLCJvbkNsaWNrIiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uUGFzdGVGaWxlcyIsIiRtZW51T3BlbiIsIm9uTW91c2VEb3duIiwib3BlbiIsImFuY2hvckVsIiwib25DbG9zZSIsImRpc2FibGVBdXRvRm9jdXMiLCJkaXNhYmxlRW5mb3JjZUZvY3VzIiwiZGlzYWJsZVJlc3RvcmVGb2N1cyIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsInN4Iiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJvdmVyZmxvdyIsImJvcmRlclJhZGl1cyIsImJveFNoYWRvdyIsImJhY2tncm91bmRDb2xvciIsIm1hcmdpblRvcCIsIiRob3ZlcmVkIiwiJGV4aXRpbmciLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCIkY2xvc2VTaG93biIsIm1vZGVsIiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImhhc1ZhbHVlcyIsIm11bHRpcGxlIiwiYWNjZXB0IiwiYm9keSIsIm9uU2VsZWN0IiwiYW5jaG9yUmVmIiwiY2FuQ3JlYXRlIiwib25DcmVhdGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQge1xuICBDaGFuZ2VFdmVudCxcbiAgQ2xpcGJvYXJkRXZlbnQsXG4gIERyYWdFdmVudCxcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCxcbiAgUmVhY3ROb2RlLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUG9wb3ZlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBDaGVjayB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZWNrJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHtcbiAgQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uLFxuICBBY3RpdmVUb29sQ2hpcExhYmVsLFxuICBBY3RpdmVUb29sQ2hpcFJvb3QsXG4gIFBsdXNNZW51RGl2aWRlcixcbiAgUGx1c01lbnVJbm5lckNvbHVtbixcbiAgUGx1c01lbnVJdGVtQnV0dG9uLFxuICBQbHVzTWVudUl0ZW1MYWJlbCxcbiAgUGx1c01lbnVQYXBlcixcbiAgUGx1c01lbnVUb29sc1JvdyxcbiAgUGx1c1RvZ2dsZUJ1dHRvbixcbiAgU2tpbGxzVG9nZ2xlQnV0dG9uLFxuICBTQ0lucHV0Q2hpcHNSb3csXG4gIFNDSW5wdXRNZXRhSWNvbkJ1dHRvbixcbiAgU0NJbnB1dE1ldGFJbmRpY2F0b3JzLFxuICBTQ01JQXR0YWNobWVudCxcbiAgU0NNSUF0dGFjaG1lbnREZWxldGVJY29uLFxuICBTQ01JQXR0YWNobWVudEZpbGVJY29uLFxuICBTQ01JQXR0YWNobWVudEljb24sXG4gIFNDTUlBdHRhY2htZW50TmFtZSxcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQsXG4gIFNDSW5wdXRFZGl0b3JDZWxsLFxuICBTQ0lucHV0VG9vbGJhclJvdyxcbiAgU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCxcbiAgU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCxcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbiAgU3R5bGVkTUFJQURyb3BPdmVybGF5LFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCwgTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFggfSBmcm9tICcuL21haWFJbnB1dExheW91dCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuLi9TbGFzaENvbW1hbmREcm9wZG93bidcbmltcG9ydCB7IFNraWxsc0Ryb3Bkb3duIH0gZnJvbSAnLi4vU2tpbGxzRHJvcGRvd24nXG5pbXBvcnQgeyB1c2VTbGFzaENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU2xhc2hDb21tYW5kcydcbmltcG9ydCB7IHVzZVNraWxsc0NhdGFsb2cgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTa2lsbHNDYXRhbG9nJ1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9Ta2lsbHMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB0eXBlIHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IHJlc29sdmVRdWlja0FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ob3Vyc1BsYW5uZXJRdWlja0FjdGlvblR5cGUnXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0FjdGlvbidcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgTWFpYUlucHV0QWRkSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dEFkZEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRBdHRhY2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0QXR0YWNoSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRBdHRhY2htZW50SW1hZ2VJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0RGVlcFNlYXJjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXREZWVwU2VhcmNoSWNvbidcbmltcG9ydCB7IENvckFjY2Vzc0ljb24gfSBmcm9tICcuLi9pY29ucy9Db3JBY2Nlc3NJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0TWVudGlvbkljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRNZW50aW9uSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFJvYm90SWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFJvYm90SWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFNlbmRJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0U2VuZEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRTbGFzaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRTbGFzaEljb24nXG5pbXBvcnQgeyBTa2lsbEljb24gfSBmcm9tICcuLi9pY29ucy9Ta2lsbEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRXZWJTZWFyY2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0V2ViU2VhcmNoSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldENoYXRUb29sc01lbnVBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgTUFJQV9DSEFUX0lOUFVUX1VJIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7XG4gIGFsbG93ZWRGaWxlVHlwZXMsXG4gIGZpbGVUeXBlcyxcbiAgZ2V0TWF4QXR0YWNobWVudFNpemVNYixcbiAgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMsXG59IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9mb3JtYXRFeHRlbnNpb25zJ1xuaW1wb3J0IHsgQVBQQ1VFU19FVkVOVFMsIHRyYWNrQXBwY3Vlc0V2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwY3VlcydcbmltcG9ydCB7IENoaXAgfSBmcm9tICcuLi9DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3IsIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZU1lbnRpb25Qb3BvdmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VDYXJldFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2FyZXRQb3NpdGlvbidcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZGF0YVRyYW5zZmVySGFzRmlsZXMsIGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuXG5jb25zdCBUT09MX0NISVBfRVhJVF9NUyA9IDIyMFxuY29uc3QgU0xBU0hfRFJPUERPV05fV0lEVEhfUFggPSAzNDBcbmNvbnN0IFNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFggPSA0MTZcbmNvbnN0IFNMQVNIX0RST1BET1dOX0dBUF9BQk9WRV9JTlBVVF9QWCA9IDRcbmNvbnN0IFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX0VER0VfUFggPSA4XG5jb25zdCBTS0lMTFNfRFJPUERPV05fV0lEVEhfUFggPSAzMzlcbmNvbnN0IFNMQVNIX0RST1BET1dOX0dBUF9QWCA9IDRcbmNvbnN0IFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX1BBRF9QWCA9IDhcblxudHlwZSBBdHRhY2htZW50RmlsZSA9IHtcbiAgZmlsZTogRmlsZVxuICBvcmlnaW5hbEZpbGU/OiBGaWxlXG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpemU6IG51bWJlclxuICB0eXBlOiBzdHJpbmdcbiAgaWNvbj86IFJlYWN0Tm9kZVxufVxuXG50eXBlIE1BSUFJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2VuZE1lc3NhZ2U6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICBmYXFJZD86IHN0cmluZyxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICBmdWFJZD86IHN0cmluZyxcbiAgICBzY0lkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCgpID0+IHZvaWQpIHwgbnVsbFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG4gIHRvb2x0aXBaSW5kZXg/OiBudW1iZXJcbiAgLyoqIEV4cG9uZSBlbCB3cmFwcGVyIGRlbCBpbnB1dCBwYXJhIGFuY2xhciBwb3BvdmVycyAobWVuY2lvbmVzLCBwaW4gZGUgY29udGV4dG8pLiAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogTXV0YWJsZVJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+XG4gIGxheW91dE1vZGU/OiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnXG4gIC8qKiBDaGlwIGRlIGNvbnRleHRvICh0YXJlYS9wcm95ZWN0by9jbGllbnRlL2dsb2JhbCkgbW9zdHJhZG8gZW4gbGEgdG9vbGJhciBkZWwgaW5wdXQuICovXG4gIGNvbnRleHRDaGlwPzoge1xuICAgIGl0ZW1zOiBzdHJpbmdbXVxuICAgIHR5cGU/OiBDb250ZXh0RW50aXR5VHlwZVxuICAgIGxlYWRpbmdJY29uPzogUmVhY3ROb2RlXG4gIH0gfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIG9uRm9jdXMsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG4gIHRvb2x0aXBaSW5kZXgsXG4gIHBvcG92ZXJBbmNob3JSZWY6IGV4dGVybmFsUG9wb3ZlckFuY2hvclJlZixcbiAgbGF5b3V0TW9kZSxcbiAgY29udGV4dENoaXAsXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGlwc1Jvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdG9vbGJhclJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW50ZXJuYWxXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmID8/IGludGVybmFsV3JhcHBlclJlZlxuICBjb25zdCBbaGFzVHlwaW5nUHJlc2VuY2UsIHNldEhhc1R5cGluZ1ByZXNlbmNlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY2hpcHNSb3dIZWlnaHQsIHNldENoaXBzUm93SGVpZ2h0XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFt0b29sYmFyUm93SGVpZ2h0LCBzZXRUb29sYmFyUm93SGVpZ2h0XSA9IHVzZVN0YXRlKE1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7XG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZURlZXBTZWFyY2gsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGFnZW50LFxuICAgIGluaXRpYWxEcmFmdCxcbiAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHBsdXNNZW51WkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMzAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGluaXRpYWxEcmFmdEFwcGxpZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyxcbiAgICBoYW5kbGVUcmlnZ2VyLFxuICAgIGhhbmRsZUtleURvd246IGhhbmRsZVBvcG92ZXJLZXlEb3duLFxuICAgIHBvcG92ZXJOb2RlLFxuICB9ID0gdXNlTWVudGlvblBvcG92ZXIoe1xuICAgIGVkaXRvclJlZixcbiAgICBwb3BvdmVyQW5jaG9yUmVmOiB3cmFwcGVyUmVmLFxuICB9KVxuXG4gIGNvbnN0IFtwbHVzTWVudUFuY2hvciwgc2V0UGx1c01lbnVBbmNob3JdID0gdXNlU3RhdGU8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWN0aXZlVG9vbENoaXBIb3ZlcmVkLCBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sQ2hpcEV4aXRpbmcsIHNldFRvb2xDaGlwRXhpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRmlsZURyYWdBY3RpdmUsIHNldElzRmlsZURyYWdBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZmlsZURyYWdDb3VudGVyUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2xhc2hEcm9wZG93blpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTIwMCwgJ292ZXJsYXknKVxuICBjb25zdCBnZXRDYXJldFJlY3QgPSB1c2VDYXJldFBvc2l0aW9uKClcbiAgY29uc3QgW3NsYXNoRHJvcGRvd25Qb3MsIHNldFNsYXNoRHJvcGRvd25Qb3NdID0gdXNlU3RhdGUoe1xuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIG1heEhlaWdodDogU0xBU0hfRFJPUERPV05fTUFYX0hFSUdIVF9QWCxcbiAgfSlcblxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHNob3dTa2lsbHNCdXR0b24gPSBjYW5BY2Nlc3NUb1NraWxscyh1c2VyKVxuICBjb25zdCBza2lsbHNCdXR0b25SZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBza2lsbHNNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgeyBza2lsbHMsIGxvYWRpbmc6IHNraWxsc0xvYWRpbmcsIGVycm9yOiBza2lsbHNFcnJvciwgZmV0Y2hTa2lsbHMgfSA9IHVzZVNraWxsc0NhdGFsb2coKVxuICBjb25zdCBbc2hvd1NraWxsc0Ryb3Bkb3duLCBzZXRTaG93U2tpbGxzRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtza2lsbHNRdWVyeSwgc2V0U2tpbGxzUXVlcnldID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtza2lsbHNEcm9wZG93blBvcywgc2V0U2tpbGxzRHJvcGRvd25Qb3NdID0gdXNlU3RhdGUoe1xuICAgIGJvdHRvbTogMCxcbiAgICByaWdodDogMCxcbiAgICBtYXhIZWlnaHQ6IFNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFgsXG4gIH0pXG5cbiAgY29uc3QgcG9zaXRpb25TbGFzaERyb3Bkb3duID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gd3JhcHBlclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGNhcmV0ID0gZ2V0Q2FyZXRSZWN0KCcvJylcbiAgICBjb25zdCB0b3BTb3VyY2UgPSBjYXJldD8udG9wID8/ICh3cmFwcGVyUmVjdCAmJiB3cmFwcGVyUmVjdC53aWR0aCA+IDAgPyB3cmFwcGVyUmVjdC50b3AgOiBudWxsKVxuICAgIGNvbnN0IGxlZnRTb3VyY2UgPSBjYXJldD8ubGVmdCA/PyAod3JhcHBlclJlY3QgJiYgd3JhcHBlclJlY3Qud2lkdGggPiAwID8gd3JhcHBlclJlY3QubGVmdCA6IG51bGwpXG4gICAgaWYgKHRvcFNvdXJjZSA9PSBudWxsIHx8IGxlZnRTb3VyY2UgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heChcbiAgICAgIFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX1BBRF9QWCxcbiAgICAgIE1hdGgubWluKHZpZXdwb3J0VyAtIFNMQVNIX0RST1BET1dOX1dJRFRIX1BYIC0gU0xBU0hfRFJPUERPV05fVklFV1BPUlRfUEFEX1BYLCBsZWZ0U291cmNlKVxuICAgIClcbiAgICBjb25zdCBhdmFpbGFibGVIZWlnaHRQeCA9IHRvcFNvdXJjZSAtIFNMQVNIX0RST1BET1dOX0dBUF9QWCAtIFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX1BBRF9QWFxuICAgIGNvbnN0IG1heEhlaWdodCA9IE1hdGgubWluKFNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFgsIE1hdGgubWF4KDAsIGF2YWlsYWJsZUhlaWdodFB4KSlcblxuICAgIHNldFNsYXNoRHJvcGRvd25Qb3Moe1xuICAgICAgbGVmdCxcbiAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gdG9wU291cmNlICsgU0xBU0hfRFJPUERPV05fR0FQX1BYLFxuICAgICAgbWF4SGVpZ2h0LFxuICAgIH0pXG4gIH0sIFt3cmFwcGVyUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93U2xhc2hEcm9wZG93bikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcG9zaXRpb25TbGFzaERyb3Bkb3duKClcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblNsYXNoRHJvcGRvd24oKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbc2hvd1NsYXNoRHJvcGRvd24sIHNsYXNoUXVlcnksIHBvc2l0aW9uU2xhc2hEcm9wZG93bl0pXG5cbiAgLyoqIEVsIHBvcG92ZXIgZGUgc2tpbGxzIHNlIGFuY2xhIGFsIGJvcmRlIGRlcmVjaG8gZGVsIGlucHV0IChhIGRpZmVyZW5jaWEgZGVsIGRlIHNsYXNoKS4gKi9cbiAgY29uc3QgcG9zaXRpb25Ta2lsbHNEcm9wZG93biA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZWN0ID0gd3JhcHBlclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGlmICghcmVjdCB8fCByZWN0LndpZHRoIDw9IDApIHJldHVyblxuXG4gICAgY29uc3Qgdmlld3BvcnRIID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCByaWdodCA9IE1hdGgubWF4KFxuICAgICAgU0xBU0hfRFJPUERPV05fVklFV1BPUlRfRURHRV9QWCxcbiAgICAgIE1hdGgubWluKHZpZXdwb3J0VyAtIFNLSUxMU19EUk9QRE9XTl9XSURUSF9QWCAtIFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX0VER0VfUFgsIHZpZXdwb3J0VyAtIHJlY3QucmlnaHQpXG4gICAgKVxuICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodFB4ID0gcmVjdC50b3AgLSBTTEFTSF9EUk9QRE9XTl9HQVBfQUJPVkVfSU5QVVRfUFggLSBTTEFTSF9EUk9QRE9XTl9WSUVXUE9SVF9FREdFX1BYXG5cbiAgICBzZXRTa2lsbHNEcm9wZG93blBvcyh7XG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gcmVjdC50b3AgKyBTTEFTSF9EUk9QRE9XTl9HQVBfQUJPVkVfSU5QVVRfUFgsXG4gICAgICBtYXhIZWlnaHQ6IE1hdGgubWluKFNMQVNIX0RST1BET1dOX01BWF9IRUlHSFRfUFgsIE1hdGgubWF4KDAsIGF2YWlsYWJsZUhlaWdodFB4KSksXG4gICAgfSlcbiAgfSwgW3dyYXBwZXJSZWZdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93U2tpbGxzRHJvcGRvd24pIHJldHVybiB1bmRlZmluZWRcblxuICAgIHBvc2l0aW9uU2tpbGxzRHJvcGRvd24oKVxuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHBvc2l0aW9uU2tpbGxzRHJvcGRvd24oKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbc2hvd1NraWxsc0Ryb3Bkb3duLCBwb3NpdGlvblNraWxsc0Ryb3Bkb3duXSlcblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gIH1cblxuICBjb25zdCBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0ID0gKCkgPT4ge1xuICAgIGlmICh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNCdXR0b25Nb3VzZURvd24gPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAvLyBFdml0YSBxdWUgZWwgYm90w7NuIHJvYmUgZWwgZm9jbyBkZWwgaW5wdXQgYWwgYWJyaXIgZWwgbWVuw7ouXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvblRyaWdnZXIoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVBdHRhY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdmaWxlcycsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID49IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSByZXR1cm5cbiAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICB9XG5cbiAgY29uc3QgYmVnaW5Ub29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB3YXNXZWIgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGNvbnN0IHdhc0RlZXAgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpZiAoIXdhc1dlYiAmJiAhd2FzRGVlcCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFRvb2xDaGlwRXhpdGluZyh0cnVlKVxuICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBjb25zdCB7IHdlYiwgZGVlcCB9ID0gc2VhcmNoTW9kZUFjdGl2ZVJlZi5jdXJyZW50XG4gICAgICBpZiAod2FzV2ViICYmIHdlYikge1xuICAgICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgfSBlbHNlIGlmICh3YXNEZWVwICYmIGRlZXApIHtcbiAgICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgICB9XG4gICAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gICAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICAgIH0sIFRPT0xfQ0hJUF9FWElUX01TKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVXZWJTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdzZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgIH1cbiAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2RlZXBfc2VhcmNoJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVF1aWNrQWN0aW9ucyA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydFNsYXNoVHJpZ2dlcigpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaW5pdGlhbERyYWZ0QXBwbGllZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW2luaXRpYWxEcmFmdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgfSwgW3Jlc2V0TWVudGlvbk9wZW5UcmFja2luZywgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgLy8gTWFudGVuZXIgZm9jbyBhbCBzZWxlY2Npb25hciB1biBjb250ZXh0byByZWNpZW50ZSAoZWwgY2xpY2sgZW4gZWwgcGlsbCBsbyByb2JhIGFsIGlucHV0KS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZvY3VzID0gKCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVJbnNlcnRTa2lsbE1lbnRpb24gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsIH0gPSAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8eyBza2lsbDogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIXNraWxsIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBza2lsbC5uYW1lLnJlcGxhY2UoL14oQFxcL3wjKS8sICcnKVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5hcHBlbmRNZW50aW9uQXRFbmQoe1xuICAgICAgICBpZDogc2tpbGwuaWQsXG4gICAgICAgIHR5cGU6ICdza2lsbCcsXG4gICAgICAgIGxhYmVsOiBgIyR7bm9ybWFsaXplZE5hbWV9YCxcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWluc2VydC1za2lsbC1tZW50aW9uJywgaGFuZGxlSW5zZXJ0U2tpbGxNZW50aW9uKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWluc2VydC1za2lsbC1tZW50aW9uJywgaGFuZGxlSW5zZXJ0U2tpbGxNZW50aW9uKVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIG1lbnRpb25zKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICBzZXRTaG93U2tpbGxzRHJvcGRvd24oZmFsc2UpXG4gICAgc2V0U2tpbGxzUXVlcnkoJycpXG4gICAgc2tpbGxzTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgfSwgW2F0dGFjaG1lbnRzLCBvblNlbmRNZXNzYWdlLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmddKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBBY3Rpb24pID0+IHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRRdWlja0FjdGlvblNlbGVjdCwge1xuICAgICAgICB0eXBlX3F1aWNrX2FjdGlvbjogcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZShjb21tYW5kKSxcbiAgICAgICAgb3JpZ2luX3F1aWNrX2FjdGlvbjogJ3NsYXNoX21lbnUnLFxuICAgICAgfSlcblxuICAgICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICAgIGNvbnN0IHRleHQgPSBzdGF0ZT8udGV4dCA/PyAnJ1xuICAgICAgY29uc3QgdHJpZ2dlclBhcnQgPSBgLyR7c2xhc2hRdWVyeX1gXG4gICAgICBjb25zdCBiZWZvcmVUcmlnZ2VyID0gdGV4dC5lbmRzV2l0aCh0cmlnZ2VyUGFydCkgPyB0ZXh0LnNsaWNlKDAsIC10cmlnZ2VyUGFydC5sZW5ndGgpIDogdGV4dFxuICAgICAgY29uc3QgaXNFbXB0eUJlZm9yZVRyaWdnZXIgPSBiZWZvcmVUcmlnZ2VyLnRyaW0oKSA9PT0gJydcblxuICAgICAgaWYgKGlzRW1wdHlCZWZvcmVUcmlnZ2VyKSB7XG4gICAgICAgIG9uU2VuZE1lc3NhZ2UoY29tbWFuZC50aXRsZSwgYXR0YWNobWVudHMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29tbWFuZC5pZClcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydFNsYXNoQ29tbWFuZCh7IGlkOiBjb21tYW5kLmlkLCBsYWJlbDogY29tbWFuZC50aXRsZSB9KVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLCBzbGFzaFF1ZXJ5LCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biA9ICgpID0+IHtcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VTa2lsbHNEcm9wZG93biA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93U2tpbGxzRHJvcGRvd24oZmFsc2UpXG4gICAgc2V0U2tpbGxzUXVlcnkoJycpXG4gICAgc2tpbGxzTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIC8qKiBBYnJlIGVsIGxpc3RhZG8gZGVzZGUgZWwgYm90w7NuOiBpbnNlcnRhIGAjYCBlbiBlbCBlZGl0b3IgcGFyYSBxdWUgZWwgdHJpZ2dlciBxdWVkZSBhY3Rpdm8uICovXG4gIGNvbnN0IGhhbmRsZVNraWxsc0J1dHRvbkNsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgaWYgKHNob3dTa2lsbHNEcm9wZG93bikge1xuICAgICAgaGFuZGxlQ2xvc2VTa2lsbHNEcm9wZG93bigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydFNraWxsVHJpZ2dlcigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWxlY3RTa2lsbCA9IHVzZUNhbGxiYWNrKChza2lsbDogU2tpbGwpID0+IHtcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0U2tpbGxNZW50aW9uKHsgaWQ6IHNraWxsLmlkLCB0eXBlOiAnc2tpbGwnLCBsYWJlbDogYCMke3NraWxsLm5hbWV9YCB9KVxuICAgIHNldFNob3dTa2lsbHNEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTa2lsbHNRdWVyeSgnJylcbiAgICBza2lsbHNNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRlU2tpbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd1NraWxsc0Ryb3Bkb3duKGZhbHNlKVxuICAgIHNldFNraWxsc1F1ZXJ5KCcnKVxuICAgIHNraWxsc01lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHsgc2tpbGxWYWx1ZXM6IHsgdmFsdWVzOiB7IGlzRWRpdGluZzogZmFsc2UsIGludGVudDogJ3dyaXRlJyB9LCBpc09wZW46IHRydWUgfSB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgICAgaGFzaFRyaWdnZXIsXG4gICAgfToge1xuICAgICAgdGV4dDogc3RyaW5nXG4gICAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfVxuICAgICAgc2xhc2hUcmlnZ2VyPzogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfVxuICAgICAgaGFzaFRyaWdnZXI/OiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZyB9XG4gICAgfSkgPT4ge1xuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UodGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgIG9uQ2hhbmdlPy4oKVxuICAgICAgaGFuZGxlVHJpZ2dlcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoc2xhc2hUcmlnZ2VyPy5hY3RpdmUgJiYgc2xhc2hDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFF1aWNrQWN0aW9uT3BlbilcbiAgICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24odHJ1ZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeShzbGFzaFRyaWdnZXIucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc2hUcmlnZ2VyPy5hY3RpdmUgJiYgc2hvd1NraWxsc0J1dHRvbikge1xuICAgICAgICAvLyBGZXRjaCBvbi1vcGVuOiB1bmEgc29sYSBsbGFtYWRhIHBvciBhcGVydHVyYSBkZWwgbGlzdGFkby5cbiAgICAgICAgaWYgKCFza2lsbHNNZW51V2FzT3BlblJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgc2tpbGxzTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICB2b2lkIGZldGNoU2tpbGxzKClcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2tpbGxzRHJvcGRvd24odHJ1ZSlcbiAgICAgICAgc2V0U2tpbGxzUXVlcnkoaGFzaFRyaWdnZXIucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBza2lsbHNNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgc2V0U2hvd1NraWxsc0Ryb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTa2lsbHNRdWVyeSgnJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgaGFuZGxlVHJpZ2dlciwgc2xhc2hDb21tYW5kcywgZXZlbnRBbXBsaXR1ZGUsIHNob3dTa2lsbHNCdXR0b24sIGZldGNoU2tpbGxzXVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGhhbmRsZVBvcG92ZXJLZXlEb3duKGUpKSByZXR1cm5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSAmJiAhcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICghc2VuZERpc2FibGVkICYmICFkaXNhYmxlZCkgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVBvcG92ZXJLZXlEb3duLCBwb3BvdmVyT3Blbiwgc2VuZERpc2FibGVkLCBkaXNhYmxlZCwgaGFuZGxlU2VuZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBhZGRGaWxlcyA9IChpbmNvbWluZzogRmlsZVtdKSA9PiB7XG4gICAgaWYgKCFpbmNvbWluZy5sZW5ndGggfHwgZGlzYWJsZWQpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBmaWxlU2l6ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fVxuICAgIGxldCBmaWxlc0luc2VydGVkID0gYXR0YWNobWVudHMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnLCAnLnBwdCcsICcucHB0eCddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc0F1ZGlvRm9ybWF0ID0gKGV4dGVuc2lvbjogc3RyaW5nKSA9PlxuICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLmluY2x1ZGVzKGV4dGVuc2lvbilcblxuICAgIGNvbnN0IGV4Y2VlZHNNYXhTaXplID0gKGV4dGVuc2lvbjogc3RyaW5nLCBzaXplOiBudW1iZXIpID0+IHNpemUgPiBnZXRNYXhBdHRhY2htZW50U2l6ZU1iKGV4dGVuc2lvbikgKiAxMDI0ICogMTAyNFxuXG4gICAgaW5jb21pbmcuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIGlmIChpc05ld0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZXhjZWVkc01heFNpemUoZmlsZUV4dGVuc2lvbiwgZmlsZS5zaXplKSkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZXhjZWVkc01heFNpemUoZmlsZUV4dGVuc2lvbiwgZmlsZS5zaXplKSkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0F1ZGlvRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGlmIChleGNlZWRzTWF4U2l6ZShmaWxlRXh0ZW5zaW9uLCBmaWxlLnNpemUpKSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGFkZEZpbGVzKEFycmF5LmZyb20oZmlsZXMpKVxuICAgIH1cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNldEZpbGVEcmFnID0gKCkgPT4ge1xuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gMFxuICAgIHNldElzRmlsZURyYWdBY3RpdmUoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCArPSAxXG4gICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZSh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzRmlsZURyYWdBY3RpdmUgJiYgIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gTWF0aC5tYXgoMCwgZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgLSAxKVxuICAgIGlmIChmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9PT0gMCkge1xuICAgICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZShmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFkYXRhVHJhbnNmZXJIYXNGaWxlcyhlLmRhdGFUcmFuc2ZlcikpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSdcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSB7XG4gICAgICByZXNldEZpbGVEcmFnKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmVzZXRGaWxlRHJhZygpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBhZGRGaWxlcyhmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5kYXRhVHJhbnNmZXIpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGVGaWxlcyA9IChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyUGFzdGUgPSAoZTogQ2xpcGJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZWRpdG9yRWwgPSB3cmFwcGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJylcbiAgICBpZiAoZWRpdG9yRWwgJiYgZWRpdG9yRWwuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tRGF0YVRyYW5zZmVyKGUuY2xpcGJvYXJkRGF0YSlcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3Qgc2hvd0NoaXBzUm93ID0gQm9vbGVhbihjb250ZXh0Q2hpcD8uaXRlbXM/Lmxlbmd0aCB8fCBhdHRhY2htZW50cy5sZW5ndGgpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGlwc0VsID0gY2hpcHNSb3dSZWYuY3VycmVudFxuICAgIGNvbnN0IHRvb2xiYXJFbCA9IHRvb2xiYXJSb3dSZWYuY3VycmVudFxuXG4gICAgY29uc3QgdXBkYXRlSGVpZ2h0cyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5leHRDaGlwcyA9IHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsID8gTWF0aC5jZWlsKGNoaXBzRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSA6IDBcbiAgICAgIGNvbnN0IG5leHRUb29sYmFyID0gdG9vbGJhckVsXG4gICAgICAgID8gTWF0aC5jZWlsKHRvb2xiYXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXG4gICAgICAgIDogTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFhcblxuICAgICAgc2V0Q2hpcHNSb3dIZWlnaHQocHJldiA9PiAocHJldiA9PT0gbmV4dENoaXBzID8gcHJldiA6IG5leHRDaGlwcykpXG4gICAgICBzZXRUb29sYmFyUm93SGVpZ2h0KHByZXYgPT4gKHByZXYgPT09IG5leHRUb29sYmFyID8gcHJldiA6IG5leHRUb29sYmFyKSlcbiAgICB9XG5cbiAgICB1cGRhdGVIZWlnaHRzKClcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZUhlaWdodHMpXG4gICAgaWYgKHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsKSBvYnNlcnZlci5vYnNlcnZlKGNoaXBzRWwpXG4gICAgaWYgKHRvb2xiYXJFbCkgb2JzZXJ2ZXIub2JzZXJ2ZSh0b29sYmFyRWwpXG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFtzaG93Q2hpcHNSb3csIGNvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoLCBhdHRhY2htZW50cy5sZW5ndGhdKVxuXG4gIGNvbnN0IGVkaXRvck1heEhlaWdodCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCh7XG4gICAgICAgIGNoaXBzUm93SGVpZ2h0UHg6IGNoaXBzUm93SGVpZ2h0LFxuICAgICAgICB0b29sYmFyUm93SGVpZ2h0UHg6IHRvb2xiYXJSb3dIZWlnaHQsXG4gICAgICB9KSxcbiAgICBbY2hpcHNSb3dIZWlnaHQsIHRvb2xiYXJSb3dIZWlnaHRdXG4gIClcblxuICBjb25zdCB0b29sYmFySWNvbkNvbG9yID0gJyM4MDgwODAnXG4gIGNvbnN0IHBsdXNNZW51SWNvbkNvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLm1lbnVJY29uXG4gIGNvbnN0IGlzQ3VzdG9tQWdlbnQgPSBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbSdcbiAgY29uc3QgaGFzQ29yQWNjZXNzID0gQm9vbGVhbihcbiAgICBpc0N1c3RvbUFnZW50ICYmXG4gICAgYWdlbnQ/LmNvbm5lY3RvcnM/LnNvbWUoXG4gICAgICBjb25uZWN0b3IgPT5cbiAgICAgICAgY29ubmVjdG9yLmdyb3VwID09PSAnQ09SJyAmJiBjb25uZWN0b3Iuc2x1Z3Muc29tZShzbHVnID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKVxuICAgIClcbiAgKVxuICBjb25zdCBhZ2VudE1vZGVsTmFtZSA9IGlzQ3VzdG9tQWdlbnQgPyBhZ2VudD8ubW9kZWxfZGlzcGxheV9uYW1lPy50cmltKCkgfHwgbnVsbCA6IG51bGxcbiAgY29uc3Qgc2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzID0gaGFzQ29yQWNjZXNzIHx8IEJvb2xlYW4oYWdlbnRNb2RlbE5hbWUpXG4gIGNvbnN0IHNob3dNZW50aW9uQnV0dG9uID0gYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InIHx8IGhhc0NvckFjY2Vzc1xuXG4gIGxldCBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uOiBSZWFjdE5vZGVcbiAgaWYgKGFjdGl2ZVRvb2xDaGlwSG92ZXJlZCkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8Q3Jvc3MgY29sb3I9e01BSUFfQ0hBVF9JTlBVVF9VSS5jaGlwQ2xvc2VJY29ufSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPE1haWFJbnB1dFdlYlNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICAkZmlsZURyYWdBY3RpdmU9e2lzRmlsZURyYWdBY3RpdmV9XG4gICAgICAgIGRhdGEtYXBwY3Vlcz1cIm1haWFfY2hhdF9pbnB1dFwiXG4gICAgICAgIGRhdGEtbWFpYS1zdHJlYW1pbmc9e2lzU3RyZWFtaW5nID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgb25QYXN0ZT17aGFuZGxlV3JhcHBlclBhc3RlfVxuICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxuICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxuICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgPlxuICAgICAgICB7c2hvd0NoaXBzUm93ICYmIChcbiAgICAgICAgICA8U0NJbnB1dENoaXBzUm93IHJlZj17Y2hpcHNSb3dSZWZ9PlxuICAgICAgICAgICAge2NvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8Q2hpcFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtjb250ZXh0Q2hpcC5pdGVtc31cbiAgICAgICAgICAgICAgICB0eXBlPXtjb250ZXh0Q2hpcC50eXBlfVxuICAgICAgICAgICAgICAgIGxlYWRpbmdJY29uPXtjb250ZXh0Q2hpcC5sZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QoYXR0YWNobWVudC5uYW1lIHx8ICcnKVxuICAgICAgICAgICAgICBjb25zdCBjaGlwSWNvbiA9IGlzSW1hZ2UgPyAoXG4gICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBdHRhY2hJY29uIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsxM30gaGVpZ2h0PXsxM30gLz5cbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2luZGV4fWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RmlsZUljb24+e2NoaXBJY29ufTwvU0NNSUF0dGFjaG1lbnRGaWxlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQXR0YWNobWVudEFyaWEnLCB7IGRlZmF1bHRWYWx1ZTogJ1F1aXRhciBhcmNoaXZvJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiIzY2NjY2NlwiIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudE5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDTUlBdHRhY2htZW50TmFtZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDSW5wdXRDaGlwc1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgICAgPFNDSW5wdXRFZGl0b3JDZWxsPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXtlZGl0b3JNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUVkaXRvcklucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICAgIG9uUGFzdGVGaWxlcz17aGFuZGxlUGFzdGVGaWxlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0lucHV0RWRpdG9yQ2VsbD5cbiAgICAgICAgICA8U0NJbnB1dFRvb2xiYXJSb3cgcmVmPXt0b29sYmFyUm93UmVmfT5cbiAgICAgICAgICAgIDxTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXtoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3dufVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEFkZEljb24gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAge3Nob3dNZW50aW9uQnV0dG9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkbWVudU9wZW49e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuTWVudGlvbkFyaWEnKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dE1lbnRpb25JY29uIGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7c2hvd1NraWxsc0J1dHRvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8U2tpbGxzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHJlZj17c2tpbGxzQnV0dG9uUmVmfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2hhbmRsZVBsdXNCdXR0b25Nb3VzZURvd259XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNraWxsc0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17c2hvd1NraWxsc0Ryb3Bkb3dufVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2tpbGxJY29uIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5kcm9wZG93bkJ1dHRvbicpfVxuICAgICAgICAgICAgICAgICAgPC9Ta2lsbHNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgICAgYW5jaG9yRWw9e3BsdXNNZW51QW5jaG9yfVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgICBzeD17eyB6SW5kZXg6IHBsdXNNZW51WkluZGV4IH19XG4gICAgICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICctNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjF9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudURpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0V2ViU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVRdWlja0FjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNsYXNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudVF1aWNrQWN0aW9ucycpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICAgICAgeyhpc1dlYlNlYXJjaEFjdGl2ZSB8fCBpc0RlZXBTZWFyY2hBY3RpdmUpICYmIChcbiAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgJGV4aXRpbmc9e3Rvb2xDaGlwRXhpdGluZ31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICRjbG9zZVNob3duPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcFJvb3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgPC9TdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgICAgIHtzaG93Q3VzdG9tTWV0YUluZGljYXRvcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICAgICB7aGFzQ29yQWNjZXNzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzVG9vbHRpcCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUljb25CdXR0b24gYXJpYS1sYWJlbD17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzTGFiZWwnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29yQWNjZXNzSWNvbiB3aWR0aD17MTV9IGhlaWdodD17MTR9IGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NJbnB1dE1ldGFJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2FnZW50TW9kZWxOYW1lICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hpcExsbS50b29sdGlwJywgeyBtb2RlbDogYWdlbnRNb2RlbE5hbWUgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDSW5wdXRNZXRhSWNvbkJ1dHRvbiBhcmlhLWxhYmVsPXthZ2VudE1vZGVsTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0Um9ib3RJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU3RvcEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc2VuZCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZW5kRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWVzPXtoYXNUeXBpbmdQcmVzZW5jZSB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNlbmRJY29uIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1N0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgPC9TQ0lucHV0VG9vbGJhclJvdz5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBwdCwucHB0eCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgICAge2lzRmlsZURyYWdBY3RpdmUgJiYgPFN0eWxlZE1BSUFEcm9wT3ZlcmxheT57dCgnY2hhdC5kcm9wRmlsZXNIZXJlJyl9PC9TdHlsZWRNQUlBRHJvcE92ZXJsYXk+fVxuICAgICAgPC9TdHlsZWRNQUlBSW5wdXRXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiBmYWxzZSwgZXhjbHVkZWRGaWxlczogW10sIGV4Y2VlZGVkRmlsZXM6IFtdLCBmaWxlU2l6ZXM6IHt9IH0pfVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgZmlsZVNpemVzPXttb2RhbFByb3BzLmZpbGVTaXplc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cG9wb3Zlck5vZGUgJiYgY3JlYXRlUG9ydGFsKHBvcG92ZXJOb2RlLCBkb2N1bWVudC5ib2R5KX1cbiAgICAgIHtzaG93U2xhc2hEcm9wZG93biAmJlxuICAgICAgICBjcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgICAgICBjb21tYW5kcz17c2xhc2hDb21tYW5kc31cbiAgICAgICAgICAgIHF1ZXJ5PXtzbGFzaFF1ZXJ5fVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2xhc2hEcm9wZG93bn1cbiAgICAgICAgICAgIGJvdHRvbT17c2xhc2hEcm9wZG93blBvcy5ib3R0b219XG4gICAgICAgICAgICBsZWZ0PXtzbGFzaERyb3Bkb3duUG9zLmxlZnR9XG4gICAgICAgICAgICBtYXhIZWlnaHQ9e3NsYXNoRHJvcGRvd25Qb3MubWF4SGVpZ2h0fVxuICAgICAgICAgICAgekluZGV4PXtzbGFzaERyb3Bkb3duWkluZGV4fVxuICAgICAgICAgICAgYW5jaG9yUmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICAgKX1cbiAgICAgIHtzaG93U2tpbGxzRHJvcGRvd24gJiZcbiAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgIDxTa2lsbHNEcm9wZG93blxuICAgICAgICAgICAgc2tpbGxzPXtza2lsbHN9XG4gICAgICAgICAgICBxdWVyeT17c2tpbGxzUXVlcnl9XG4gICAgICAgICAgICBsb2FkaW5nPXtza2lsbHNMb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e3NraWxsc0Vycm9yfVxuICAgICAgICAgICAgY2FuQ3JlYXRlPXtzaG93U2tpbGxzQnV0dG9ufVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNraWxsfVxuICAgICAgICAgICAgb25DcmVhdGU9e2hhbmRsZUNyZWF0ZVNraWxsfVxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTa2lsbHNEcm9wZG93bn1cbiAgICAgICAgICAgIGJvdHRvbT17c2tpbGxzRHJvcGRvd25Qb3MuYm90dG9tfVxuICAgICAgICAgICAgcmlnaHQ9e3NraWxsc0Ryb3Bkb3duUG9zLnJpZ2h0fVxuICAgICAgICAgICAgbWF4SGVpZ2h0PXtza2lsbHNEcm9wZG93blBvcy5tYXhIZWlnaHR9XG4gICAgICAgICAgICB6SW5kZXg9e3NsYXNoRHJvcGRvd25aSW5kZXh9XG4gICAgICAgICAgICBhbmNob3JSZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgICAgLz4sXG4gICAgICAgICAgZG9jdW1lbnQuYm9keVxuICAgICAgICApfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQVFFQSxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsZUFBZSxFQUNmQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsUUFBUSxRQUNILE9BQU87QUFDZCxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0RSxTQUNFQyx3QkFBd0IsRUFDeEJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLHFCQUFxQixFQUNyQkMsY0FBYyxFQUNkQyx3QkFBd0IsRUFDeEJDLHNCQUFzQixFQUN0QkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLEVBQ3BCQyx5QkFBeUIsRUFDekJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyx5QkFBeUIsRUFDekJDLHlCQUF5QixFQUN6QkMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLHFCQUFxQixRQUNoQixVQUFVO0FBQ2pCLFNBQVNDLDJCQUEyQixFQUFFQyxnQ0FBZ0MsUUFBUSxtQkFBbUI7QUFDakcsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLGdCQUFnQixRQUFRLGtD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
|