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