@projectcor/maia-components 2.52.0 → 2.52.1-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/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +66 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +123 -99
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +25 -10
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +780 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +967 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +646 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1395 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1434 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.spec.js +102 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.spec.js +49 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +548 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +526 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +217 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +291 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +343 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.spec.js +15 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +8 -7
- package/lib/hooks/useChatManager/useChatManager.spec.js +2467 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +61 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useLatestRef.spec.js +50 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +485 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/appcues.spec.js +37 -0
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +121 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/services/maia/Agents/connectors.spec.js +496 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +181 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +261 -0
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.multipleChoice.spec.js +87 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +51 -55
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.js +4 -3
- package/lib/store/useChatsStore.spec.js +690 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/store/useMultipleChoiceStore.spec.js +44 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +44 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +116 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +43 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.helpers.js +5 -4
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +32 -20
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -673,7 +673,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
673
673
|
});
|
|
674
674
|
var currentProject = project;
|
|
675
675
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
676
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
676
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
|
|
677
677
|
var _useMultipleChoiceSto, _options$projectChang, _contextRef$current$p;
|
|
678
678
|
var multipleChoiceAnswer, willStartNewStream, sendGate, _normalizeSendMessage, attachments, options, payloadFields, contextMessage, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, sessionId, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, streamingPlaceholderId, finalMessage, history, lastMessageProjectId, projectToRequest, projects, payloadData;
|
|
679
679
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
@@ -715,7 +715,8 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
715
715
|
agentSuggestionId: agentSuggestionId,
|
|
716
716
|
mentions: mentions,
|
|
717
717
|
fuaId: fuaId,
|
|
718
|
-
scId: scId
|
|
718
|
+
scId: scId,
|
|
719
|
+
contextData: contextData
|
|
719
720
|
});
|
|
720
721
|
contextMessage = buildContextMessage(payloadFields.mentions);
|
|
721
722
|
displayMessage = formatQuickActionMessageForDisplay(message, {
|
|
@@ -821,7 +822,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
821
822
|
}
|
|
822
823
|
}, _callee2);
|
|
823
824
|
}));
|
|
824
|
-
return function (_x1, _x10, _x11, _x12, _x13, _x14, _x15) {
|
|
825
|
+
return function (_x1, _x10, _x11, _x12, _x13, _x14, _x15, _x16) {
|
|
825
826
|
return _ref3.apply(this, arguments);
|
|
826
827
|
};
|
|
827
828
|
}(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
|
|
@@ -1067,7 +1068,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1067
1068
|
}
|
|
1068
1069
|
}, _callee4);
|
|
1069
1070
|
}));
|
|
1070
|
-
return function (
|
|
1071
|
+
return function (_x17) {
|
|
1071
1072
|
return _ref4.apply(this, arguments);
|
|
1072
1073
|
};
|
|
1073
1074
|
}(), [waitingResponse, loadingMessages, replaceMessages, retryCompletion, askMaia, fetchProjects, authUser, agent, t, setActiveChatId]);
|
|
@@ -1097,7 +1098,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1097
1098
|
}
|
|
1098
1099
|
}, _callee5);
|
|
1099
1100
|
}));
|
|
1100
|
-
return function (
|
|
1101
|
+
return function (_x18, _x19) {
|
|
1101
1102
|
return _ref6.apply(this, arguments);
|
|
1102
1103
|
};
|
|
1103
1104
|
}(), []);
|
|
@@ -1244,7 +1245,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1244
1245
|
}
|
|
1245
1246
|
}, _callee6);
|
|
1246
1247
|
}));
|
|
1247
|
-
return function (
|
|
1248
|
+
return function (_x20, _x21, _x22, _x23) {
|
|
1248
1249
|
return _ref7.apply(this, arguments);
|
|
1249
1250
|
};
|
|
1250
1251
|
}(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
|
|
@@ -1394,4 +1395,4 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1394
1395
|
isDisabled: waitingResponse || loadingMessages
|
|
1395
1396
|
};
|
|
1396
1397
|
};
|
|
1397
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUluc2VydGlvbkVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImZsdXNoU3luYyIsInY0IiwidXVpZHY0IiwidXNlQ2hhdE1lc3NhZ2VzIiwidXNlT3JjaGVzdHJhdG9yU3RyZWFtIiwidXNlVCIsInVzZUxhdGVzdFJlZiIsImZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMiLCJyZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyIsInJlc29sdmVDb250aW51ZVN0cmVhbURlY2lzaW9uIiwibWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlciIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiY29tcGFjdGlvbkZvciIsInJlYXNvbmluZ1RyYWNlRm9yIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJyZXNvbHZlUHJvamVjdFRvUmVxdWVzdCIsInJlc29sdmVTdHJlYW1FcnJvck1lc3NhZ2VLZXkiLCJhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiIsInNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsIiwicmVzb2x2ZVNlbmRNZXNzYWdlR2F0ZSIsInJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMiLCJidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzIiwicmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZCIsInJlc29sdmVBZ2VudElkRm9yU3RyZWFtIiwicmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCIsImJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlIiwicmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlIiwiYnVpbGRTdHJlYW1FcnJvckFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lIiwiYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSIsInNob3VsZFByZXNlcnZlUmVhc29uaW5nT25TdHJlYW1TdG9wIiwiYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2UiLCJidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlIiwicmVzb2x2ZVJldHJ5QmxvY2tSZWFzb24iLCJyZXNvbHZlUmV0cnlFbGlnaWJpbGl0eSIsInJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyIsInNob3VsZFVwZGF0ZVByb2plY3RPbkNoYW5nZSIsInNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZSIsInJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyIsInJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZSIsInJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlIiwicmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0IiwicmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwiLCJyZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlIiwicmVzb2x2ZUNyZWF0ZUFnZW50SGl0bEFuYWx5dGljc0V2ZW50cyIsImJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXkiLCJzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24iLCJzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZSIsInNob3VsZFN3aXRjaFRvSW5pdGlhbENoYXRTZXNzaW9uIiwiYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlIiwicmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaCIsInNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCIsInVzZVVzZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwiRVZFTlRTIiwidXNlRXZlbnQiLCJtYWlhIiwiRmVlZGJhY2siLCJDaGF0SGlzdG9yeVJvbGUiLCJidWlsZENvbnRleHRNZXNzYWdlIiwiZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsIm5vcm1hbGl6ZUhpdGxUb29sTmFtZSIsInRyYWNrTWFudWFsSGl0bEV2ZW50cyIsInNlc3Npb25TdHJlYW1pbmdUZXh0IiwidXNlTXVsdGlwbGVDaG9pY2VTdG9yZSIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFzb25pbmdTdG9yZSIsIm1hcFJlYXNvbmluZ1RyYWNlIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJfbWFwQXV0aFVzZXJUb0NoYXRNZXMiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJjdXJyZW50VXNlciIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZiIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJvbkVycm9yIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwidGFzayIsInNldFRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInNldEFjdGl2ZUNoYXRJZCIsInN0YXRlIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwidHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmIiwiU2V0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJyZXRyeVNuYXBzaG90UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsImN1cnJlbnQiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJzdGF0dXMiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJCb29sZWFuIiwic2hvdyIsInNldmVyaXR5IiwiX3Jlc29sdmVTdHJlYW1FcnJvck1lIiwibWVzc2FnZUtleSIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJyZXRyeUxhYmVsIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInNvbWUiLCJtc2ciLCJzdGFydCIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsInN1Z2dlc3Rpb25zIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJtdWx0aXBsZUNob2ljZSIsIl9yZWFzb25pbmdUcmFjZUZvciIsIl93aW5kb3ckdGFza1BhbmVsIiwidGVtcE1lc3NhZ2VJZCIsImF0dGFjaG1lbnRzIiwiZmluYWxNZXNzYWdlSWQiLCJjb21wYWN0aW9uIiwiZmluYWxUcmFjZSIsInRhc2tVcmxSZWdleCIsIm1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzIiwibWFudWFsQXBwcm92YWwiLCJfeWllbGQkcmVzb2x2ZUFjdGl2ZVMiLCJjb250ZW50VG9BZGQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJob3Vyc0NoYXJnZVRvb2xzIiwiYWZmZWN0ZWRUYXNrSWRzIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsInBlbmRpbmdBY3Rpb25zIiwib3BlblRhc2tQYW5lbElkIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwibWFya0NoYXRBc1JlYWQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInJlbmFtZSIsImFicnVwdCIsIlJlZ0V4cCIsInByb2plY3RJZCIsInBhdGhuYW1lIiwid2luZG93IiwibG9jYXRpb24iLCJtdWx0aUFnZW50c0FjY2VzcyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhcHBseURhc2hib2FyZE11dGF0aW9uIiwibXV0YXRpb24iLCJ0YXNrSWRzIiwibmV3UHJvamVjdERhc2hib2FyZCIsInNlbnQiLCJtYW51YWxBcHByb3ZhbFRvb2xOYW1lIiwidG9vbE5hbWUiLCJhZ2VudFR5cGUiLCJub3JtYWxpemVUb29sTmFtZSIsImJ1aWxkQWN0aW9uVHlwZUxpc3QiLCJmb3JFYWNoIiwicGF5bG9hZCIsImFpQ2hhdEhpdGxPcHRpb24iLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJsZW5ndGgiLCJzb3VyY2UiLCJ0b29scyIsInJlZmV0Y2hUYXNrIiwiY2FsbCIsImFnZW50SWQiLCJ0aGVuIiwiY2hhdEFnZW50IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiX3gwIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTdHJlYW1TdG9wIiwicGFydGlhbFRleHQiLCJfcmVzb2x2ZVN0cmVhbVN0b3BNZXMiLCJjYW5jZWxsZWRNZXNzYWdlSWQiLCJzdG9wcGVkVHJhY2UiLCJmaW5pc2giLCJyZW1vdmUiLCJjYW5jZWxsZWRMYWJlbCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhcHByb3ZhbCIsImFjY3VtdWxhdGVkQ29udGVudCIsIl9tYXBSZWFzb25pbmdUcmFjZSIsImhpdGxDb250ZXh0IiwiaGl0bE91dGNvbWUiLCJ0eXBlIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJvcHRpb24iLCJza2lwcGVkTWFudWFsQXBwcm92YWwiLCJhcHByb3ZhbE1lc3NhZ2VJZCIsImFwcHJvdmFsVHJhY2UiLCJfdXNlT3JjaGVzdHJhdG9yU3RyZWEiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdG9wIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiYXNrTWFpYSIsInJldHJ5Q29tcGxldGlvbiIsIndhaXRpbmdSZXNwb25zZSIsImlzTG9hZGluZyIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjMiLCJfY2FsbGVlMiIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX3VzZU11bHRpcGxlQ2hvaWNlU3RvIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiX2NvbnRleHRSZWYkY3VycmVudCRwIiwibXVsdGlwbGVDaG9pY2VBbnN3ZXIiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJzZW5kR2F0ZSIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm9wdGlvbnMiLCJwYXlsb2FkRmllbGRzIiwiY29udGV4dE1lc3NhZ2UiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4UHJvamVjdCIsImN0eENsaWVudCIsImN0eFRhc2siLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJ0YWtlQW5zd2VyIiwiaXNQcm9jZXNzaW5nIiwiYWN0aXZlU3RyZWFtQ291bnQiLCJnZXRBY3RpdmVDb3VudCIsIm1heENvbmN1cnJlbnQiLCJwbUFpVHlwZWRUZXh0IiwiZmlsdGVyIiwiYXQiLCJ0aXRsZSIsIl9vYmplY3RTcHJlYWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwidG9TdHJpbmciLCJhZ2VudE5hbWUiLCJwcm9qZWN0TmFtZSIsImFnZW50RW50aXR5IiwiZW50aXR5IiwiYWdlbnRFbW9qaSIsImVtb2ppIiwiY29udGV4dERhdGEiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJjaGFuZ2VQcm9qZWN0IiwicmV0cnlNZXNzYWdlIiwiX3JlZjQiLCJfY2FsbGVlNCIsIl90cnVuY2F0ZWQkYXQiLCJyZXRyeUJsb2NrIiwicHJldmlvdXNNZXNzYWdlcyIsInVzZXJNZXNzYWdlIiwicmV0cnlFbGlnaWJpbGl0eSIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwidHJ1bmNhdGVkIiwicGxhY2Vob2xkZXIiLCJuZXh0TWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50MiIsInJlcGxheVZpYU9yY2hlc3RyYXRvciIsInJlc3VsdCIsIl9jb250ZXh0NCIsImlzU2Vzc2lvblN0cmVhbUFjdGl2ZSIsImVsaWdpYmxlIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX3JlZjUiLCJfY2FsbGVlMyIsIl91c2VyTWVzc2FnZSRtdWx0aXBsZSIsIl90IiwiX2NvbnRleHQzIiwic3RhcnRlZCIsInJlYXNvbiIsImxhbmciLCJTdHJpbmciLCJOdW1iZXIiLCJfeDE2IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNiIsIl9jYWxsZWU1IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQ1IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIm1hcCIsIndhc0hlbHBmdWwiLCJfeDE3IiwiX3gxOCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmNyIsIl9jYWxsZWU2IiwidGhyZWFkSWRzIiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWV0YWRhdGEiLCJmb3VuZCIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJmb3VuZFNlc3Npb25JZCIsIm5ld1N0YXR1cyIsImlzQWN0aXZlU2Vzc2lvbiIsInN0cmVhbU1lc3NhZ2VJZCIsImhpdGxDdHgiLCJyZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyIsIl9jb250ZXh0NiIsImdldCIsInNlc3Npb25faWQiLCJtZXNzYWdlVGV4dCIsInBlbmRpbmdfYWN0aW9ucyIsImFwcHJvdmFsU3RhdHVzIiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTkiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU3IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3JlZjkiLCJfcmVzb2x2ZVByb2plY3RUb1JlcXUiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDMiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDciLCJ0cmltIiwiaGlzdG9yeU1lc3NhZ2UiLCJ1c2VySWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJmZWVJZCIsInRhc2tOYW1lIiwicmVzZXRDaGF0IiwicHJldmlvdXNTZXNzaW9uSWQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlSW5zZXJ0aW9uRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuLy8gZmx1c2hTeW5jIGludGVuY2lvbmFsOiBldml0YSBlbCBmbGlja2VyIGRlIGZpbiBkZSBzdHJlYW0gKHZlciBoYW5kbGVTdHJlYW1GaW5pc2gpXG4vLyByZWFjdC1kb2N0b3ItZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtZG9jdG9yL25vLWZsdXNoLXN5bmNcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IHVzZUxhdGVzdFJlZiB9IGZyb20gJy4uL3VzZUxhdGVzdFJlZidcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyxcbiAgcmVzb2x2ZUFwcHJvdmFsRGVjaXNpb25TdGF0dXMsXG4gIHJlc29sdmVDb250aW51ZVN0cmVhbURlY2lzaW9uLFxuICBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyLFxuICBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyxcbiAgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzLFxuICBjb21wYWN0aW9uRm9yLFxuICByZWFzb25pbmdUcmFjZUZvcixcbiAgcmVzb2x2ZUNsaWVudFBheWxvYWQsXG4gIHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0LFxuICByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5LFxuICBhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbixcbiAgc2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwsXG4gIHJlc29sdmVTZW5kTWVzc2FnZUdhdGUsXG4gIHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMsXG4gIGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMsXG4gIHJlc29sdmVMYXN0TWVzc2FnZUFnZW50SWQsXG4gIHJlc29sdmVBZ2VudElkRm9yU3RyZWFtLFxuICByZXNvbHZlVXNlclF1ZXN0aW9uTWVzc2FnZUlkLFxuICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCxcbiAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlLFxuICByZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUsXG4gIGJ1aWxkU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lLFxuICBidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlLFxuICBzaG91bGRQcmVzZXJ2ZVJlYXNvbmluZ09uU3RyZWFtU3RvcCxcbiAgYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2UsXG4gIGJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2UsXG4gIHJlc29sdmVSZXRyeUJsb2NrUmVhc29uLFxuICByZXNvbHZlUmV0cnlFbGlnaWJpbGl0eSxcbiAgcmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzLFxuICBzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2UsXG4gIHNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZSxcbiAgcmVzb2x2ZVN0cmVhbUZpbmlzaEZpbmFsTWVzc2FnZUlkLFxuICByZXNvbHZlU3RyZWFtU3RvcE1lc3NhZ2VJZHMsXG4gIHJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZSxcbiAgcmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UsXG4gIHJlc29sdmVIaXRsRXhlY3V0aW9uQ29udGV4dCxcbiAgcmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwsXG4gIHJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UsXG4gIHJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMsXG4gIGJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXksXG4gIHNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbixcbiAgc2hvdWxkUm90YXRlU2Vzc2lvbkZvck5ld0hvbWUsXG4gIHNob3VsZFN3aXRjaFRvSW5pdGlhbENoYXRTZXNzaW9uLFxuICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UsXG4gIHJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nLFxuICBzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaCxcbiAgc2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoLFxufSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmhlbHBlcnMnXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlLCBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUsXG4gIG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgdHJhY2tNYW51YWxIaXRsRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlTXVsdGlwbGVDaG9pY2VTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZU11bHRpcGxlQ2hvaWNlU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IHVzZVNlc3Npb25NZXRhIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbk1ldGEnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtTWFuYWdlciwgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyJ1xuaW1wb3J0IHsgYWN0aXZlVmlldyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL2FjdGl2ZVZpZXcnXG5pbXBvcnQgeyBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZSwgZW5zdXJlU2Vzc2lvbkluU2lkZWJhciB9IGZyb20gJy4uLy4uL3N0b3JlL2NoYXRzU2lkZWJhck9wdGltaXN0aWMnXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSwgbWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4gfSBmcm9tICcuLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUNvbnRleHQgfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgbWFwUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi91dGlscy9yZWFzb25pbmdNYXBwZXJzJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCB7IGlkLCBuYW1lLCBhdmF0YXIgfSA9IG1hcEF1dGhVc2VyVG9DaGF0TWVzc2FnZVVzZXIoYXV0aFVzZXIpXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlTWVtbzxDaGF0TWVzc2FnZVVzZXI+KCgpID0+ICh7IGlkLCBuYW1lLCBhdmF0YXIgfSksIFtpZCwgbmFtZSwgYXZhdGFyXSlcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcixcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIHNldFRhc2ssXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCBzZXRBY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldEFjdGl2ZUNoYXRJZClcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIC8qKlxuICAgKiBHdWFyZGEgaW5mbyBkZWwgw7psdGltbyBhcHByb3ZhbCBtYW51YWwgKGN1YW5kbyBlbCB1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIgZW4gbHVnYXJcbiAgICogZGUgY2xpY2tlYXIgZWwgYm90w7NuKS4gRW4gbWFudWFsIGFwcHJvdmFsLCBgaGFuZGxlQXBwcm92YWxSZXF1aXJlZGAgcmV0b3JuYSBlYXJseVxuICAgKiBzaW4gYWdyZWdhciB1biBtZW5zYWplIGNvbiBgYXBwcm92YWxgLCBhc8OtIHF1ZSBsYSBsw7NnaWNhIGRlIHJlZmV0Y2ggZW4gYG9uU3RyZWFtRmluaXNoYFxuICAgKiBubyBsbyBkZXRlY3RhIHbDrWEgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbGAuIExvIGd1YXJkYW1vcyBhY8OhIHBhcmEgY29uc3VtaXJsbyBkZXNwdcOpcy5cbiAgICovXG4gIGNvbnN0IGxhc3RNYW51YWxBcHByb3ZhbFJlZiA9IHVzZVJlZjx7XG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICAgIHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgfSB8IG51bGw+KG51bGwpXG4gIC8qKiBFdml0YSBkdXBsaWNhciBBSV9DSEFUX0hJVEwgLyBBSV9DSEFUX0hJVExfT1BUSU9OIGVuIHByZWFwcm9iYWNpb25lcyAobWFudWFsIG8gYXV0bykgcG9yIGxvdGUuICovXG4gIGNvbnN0IHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiA9IHVzZVJlZjxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuICAvKiogQ29udGV4dG8gZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gcHJldmlvIGFsIGVqZWN1dGFyIGNvbnRpbnVlLXRocmVhZC4gKi9cbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYgPSB1c2VSZWY8SGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsPihudWxsKVxuICAvKiogTWVuc2FqZXMgYSByZXN0YXVyYXIgc2kgYHJldHJ5X2NvbXBsZXRpb25gIGZhbGxhIGFudGVzIGRlIHBlcnNpc3RpciBlbCByZWVtcGxhem8uICovXG4gIGNvbnN0IHJldHJ5U25hcHNob3RSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG4gIC8qKlxuICAgKiBTZXNpw7NuIGFjdHVhbG1lbnRlIHZpc2libGUuIFNlIG1hbnRpZW5lIGVuIHN0YXRlIChubyBzb2xvIGVuIHJlZikgcGFyYSBxdWVcbiAgICogZWwgbW90b3IgZGUgc3RyZWFtaW5nIHB1ZWRhIGxlZXIgcmVhY3RpdmFtZW50ZSBsb3MgZmxhZ3MgZGUgRVNUQSBzZXNpw7NuXG4gICAqIGRlc2RlIGVsIHN0b3JlLCBtaWVudHJhcyBvdHJhcyBzaWd1ZW4gZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAqL1xuICBjb25zdCBbYWN0aXZlU2Vzc2lvbklkLCBzZXRBY3RpdmVTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gIC8qKiBUcnVlIG1pZW50cmFzIGVzdGEgaW5zdGFuY2lhIGVzdMOpIG1vbnRhZGEgKGV2aXRhIHNldFN0YXRlIHRyYXMgZGVzbW9udGFyKS4gKi9cbiAgY29uc3QgaXNNb3VudGVkUmVmID0gdXNlUmVmKHRydWUpXG4gIC8qKiBFdml0YSByZWNvbmNpbGlhciBkb3MgdmVjZXMgZWwgbWlzbW8gZXN0YWRvIHRlcm1pbmFsIGRlIHVuYSBzZXNpw7NuLiAqL1xuICBjb25zdCBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYgPSB1c2VSZWYoaXNBdXRvQXBwcm92ZUFjdGl2ZSlcbiAgLyoqIEV2aXRhIGNsb3N1cmVzIG9ic29sZXRhcyBjdWFuZG8gZWwgZm9vdGVyIGNvbnNlcnZhIHNlbmRNZXNzYWdlIGVudHJlIHJlbmRlcnMuICovXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VMYXRlc3RSZWYoeyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0F1dG9BcHByb3ZlQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBpc0F1dG9BcHByb3ZlQWN0aXZlXSlcblxuICBjb25zdCB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgYWRkTWVzc2FnZSxcbiAgICByZW1vdmVNZXNzYWdlLFxuICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICBoYW5kbGVTY3JvbGwsXG4gIH0gPSB1c2VDaGF0TWVzc2FnZXMoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudFVzZXIsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIHVzZUluc2VydGlvbkVmZmVjdCgoKSA9PiB7XG4gICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIH0pXG5cbiAgLyoqXG4gICAqIEVzY3JpYmUgdW4gbWVuc2FqZSBlbiBlbCBzdG9yZSBwb3Itc2VzacOzbiB5LCBzaSBsYSBzZXNpw7NuIGVzIGxhIGFjdGl2YSxcbiAgICogdGFtYmnDqW4gZW4gbGEgdmlzdGEgbG9jYWwuIFBlcm1pdGUgcXVlIHNlc2lvbmVzIGVuIGJhY2tncm91bmQgYWN1bXVsZW4gc3VcbiAgICogcmVzdWx0YWRvIHNpbiBwaXNhciBlbCBjaGF0IHF1ZSBlbCB1c3VhcmlvIGVzdMOhIG1pcmFuZG8uXG4gICAqL1xuICBjb25zdCBjb21taXRUb1Nlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuYWRkTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2UpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgZHJvcEZyb21TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJlbW92ZU1lc3NhZ2UobWVzc2FnZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlbW92ZU1lc3NhZ2VdXG4gIClcblxuICAvKiogTGltcGlhIGVsIHRhaWwgZW4gdnVlbG8gZGUgdW5hIHNlc2nDs24gKHRyYXMgdGVybWluYXI7IGVsIGJhY2tlbmQgcGFzYSBhIHNlciBmdWVudGUpLiAqL1xuICBjb25zdCBjbGVhclNlc3Npb25UYWlsID0gdXNlQ2FsbGJhY2soKHNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnNldE1lc3NhZ2VzKHNlc3Npb25JZCwgW10pXG4gIH0sIFtdKVxuXG4gIC8vIFJlZ2lzdHJhciBsYSBzZXNpw7NuIHZpc2libGUgZW4gZWwgdHJhY2tlciBnbG9iYWwgcGFyYSBxdWUgbG9zIGNhbGxiYWNrcyBkZWxcbiAgLy8gbW90b3IgKHF1ZSBwdWVkZW4gcGVydGVuZWNlciBhIHVuYSBpbnN0YW5jaWEgeWEgZGVzbW9udGFkYSkgc2VwYW4gY3XDoWwgZXMgbGFcbiAgLy8gc2VzacOzbiBhY3RpdmEgYWN0dWFsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFjdGl2ZVZpZXcuc2V0KGFjdGl2ZVNlc3Npb25JZClcbiAgfSwgW2FjdGl2ZVNlc3Npb25JZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoY3VycmVudENoYXRJZC5jdXJyZW50KSkge1xuICAgICAgICBhY3RpdmVWaWV3LnNldChudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gUmVjb25jaWxpYWNpw7NuOiBzaSBsYSBzZXNpw7NuIGFjdGl2YSB0ZXJtaW5hIChjb21wbGV0ZS9lcnJvcikgcGVybyBlbCBzdG9yZVxuICAvLyBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICAvLyBgY2FuY2VsbGVkYCBxdWVkYSBhZnVlcmE6IGVsIHN0b3AgeWEgcmVjb25jaWxpYSBsb2NhbCAocGFyY2lhbCArIGJ1cmJ1amEgZGVcbiAgLy8gY2FuY2VsYWRvKSB5IHJlY2FyZ2FyIGFjw6EgbW9zdHJhYmEgbGEgcGFudGFsbGEgZGUgY2FyZ2EgZGVsIGNoYXQgZW50ZXJvLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGtleSA9IGJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXkoYWN0aXZlU2Vzc2lvbklkLCBzdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0KVxuICAgIGlmIChsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPT09IGtleSkgcmV0dXJuXG4gICAgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID0ga2V5XG5cbiAgICBjb25zdCB0YWlsID0gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmdldE1lc3NhZ2VzKGFjdGl2ZVNlc3Npb25JZClcbiAgICBpZiAoc2hvdWxkRm9yY2VSZWxvYWRNZXNzYWdlc09uVGVybWluYWxTZXNzaW9uKHN0YXR1cywgdGFpbCwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCkpIHtcbiAgICAgIGxvYWRNZXNzYWdlcyh7IGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1cywgYWN0aXZlU2Vzc2lvbk1ldGE/LmZpbmlzaGVkQXQsIGFjdGl2ZVNlc3Npb25JZCwgbG9hZE1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihpbml0aWFsQ2hhdElkKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkID0gcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIC8vIENoYXQgbnVldm8gLyBob21lOiBpbml0aWFsQ2hhdElkIHBhc2EgYSBudWxsLCBhc8OtIHF1ZSBsYSByYW1hIGRlIGFiYWpvIG5vXG4gICAgLy8gYXBsaWNhLiBIYXkgcXVlIHJvdGFyIGEgdW5hIHNlc2nDs24gbnVldmEgaWd1YWw6IHNpIHNlZ3VpbW9zIGFwdW50YW5kbyBhIGxhXG4gICAgLy8gYW50ZXJpb3IsIGBhY3RpdmVWaWV3YCBsYSBzaWd1ZSBtYXJjYW5kbyBjb21vIGFjdGl2YSB5IGN1YW5kbyB0ZXJtaW5hIG5vIHNlXG4gICAgLy8gbm90aWZpY2EgKHkgc3UgcmVzcHVlc3RhIHNlIGNvbW1pdGVhIHNvYnJlIGxhIHZpc3RhIG51ZXZhKS4gRWwgw6FyYm9sIG5vXG4gICAgLy8gcmVtb250YSBlbiBlc3RlIGZsdWpvIChubyBoYXkgYGtleWApIHkgbmFkaWUgY29uc3VtZSBgcmVzZXRDaGF0YC5cbiAgICBpZiAoc2hvdWxkUm90YXRlU2Vzc2lvbkZvck5ld0hvbWUoaW5pdGlhbENoYXRJZCwgcHJldmlvdXNJbml0aWFsQ2hhdElkKSkge1xuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFN3aXRjaFRvSW5pdGlhbENoYXRTZXNzaW9uKGluaXRpYWxDaGF0SWQsIGN1cnJlbnRDaGF0SWQuY3VycmVudCkgJiYgaW5pdGlhbENoYXRJZCkge1xuICAgICAgLy8gTk8gYWJvcnRhbW9zIGVsIHN0cmVhbSBhbnRlcmlvcjogcHVlZGUgc2VndWlyIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgLy8gU29sbyBjYW1iaWFtb3MgZGUgc2VzacOzbiBhY3RpdmE7IGVsIG1vdG9yIHJ1dGVhIGNhZGEgc3RyZWFtIHBvciBzdVxuICAgICAgLy8gc2Vzc2lvbklkLCBhc8OtIHF1ZSBsb3MgdG9rZW5zIGRlIGxhIHNlc2nDs24gcHJldmlhIHNpZ3VlbiBhcGxpY8OhbmRvc2UgYVxuICAgICAgLy8gRVNBIHNlc2nDs24gKHN0b3JlKSwgbm8gYSBsYSBudWV2YS5cblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChpbml0aWFsQ2hhdElkKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICAvLyBpc1Byb2Nlc3NpbmdSZWYgcmVmbGVqYSBzaSBsYSBzZXNpw7NuIEFDVElWQSBlc3TDoSBvY3VwYWRhLiBTaSBsYSBzZXNpw7NuXG4gICAgICAvLyBhIGxhIHF1ZSBlbnRyYW1vcyBzaWd1ZSBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZCwgcXVlZGEgYmxvcXVlYWRhOyBzaSBubyxcbiAgICAgIC8vIHNlIGhhYmlsaXRhIGVsIGVudsOtbyBhdW5xdWUgb3RyYXMgc2VzaW9uZXMgc2lnYW4gZ2VuZXJhbmRvLlxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShpbml0aWFsQ2hhdElkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIGxvYWRNZXNzYWdlcyBsbyBkaXNwYXJhIHVzZUNoYXRNZXNzYWdlcyBhbCBjYW1iaWFyIGNoYXRJZCAoY29uIGNhY2hlIGVuIG1lbW9yaWEpLlxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEFjdGl2ZUNoYXRJZChpbml0aWFsQ2hhdElkIHx8IG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgZXJyb3JNZXNzYWdlPzogc3RyaW5nLCBlcnJvclJhd01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBtZXNzYWdlSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3QgcmV0cnlTbmFwc2hvdCA9IHJldHJ5U25hcHNob3RSZWYuY3VycmVudFxuICAgICAgaWYgKHJlc29sdmVTdHJlYW1FcnJvckhhbmRsaW5nTW9kZShCb29sZWFuKHJldHJ5U25hcHNob3QpKSA9PT0gJ3JldHJ5LXJlc3RvcmUnICYmIHJldHJ5U25hcHNob3QpIHtcbiAgICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcmV0cnlTbmFwc2hvdFxuICAgICAgICByZXBsYWNlTWVzc2FnZXMocmV0cnlTbmFwc2hvdClcbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2Vycm9yJywgbWVzc2FnZTogdCgnY2hhdC5lcnJvcicpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlS2V5LCB0b2tlbnNVc2VkLCBzaG93UmV0cnkgfSA9IHJlc29sdmVTdHJlYW1FcnJvck1lc3NhZ2VLZXkoZXJyb3JNZXNzYWdlLCBlcnJvclJhd01lc3NhZ2UpXG4gICAgICBjb25zdCBtZXNzYWdlID0gcmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UobWVzc2FnZUtleSwgdCwgdG9rZW5zVXNlZClcblxuICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGJ1aWxkU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBzaG93UmV0cnksXG4gICAgICAgICAgcmV0cnlMYWJlbDogdCgnY2hhdC5yZXRyeScpLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHJlcGxhY2VNZXNzYWdlcywgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuXG4gICAgICAvLyBBc2VndXJhbW9zIGVsIHBsYWNlaG9sZGVyIHVuYSDDum5pY2EgdmV6IHBvciBzdHJlYW0sIHRhbnRvIGVuIGVsIHN0b3JlXG4gICAgICAvLyBkZSBsYSBzZXNpw7NuIGNvbW8gZW4gbGEgdmlzdGEgc2kgZXMgbGEgYWN0aXZhLiBFbCB0ZXh0byBlbiB2aXZvIHZpYWphXG4gICAgICAvLyBwb3Igc2Vzc2lvblN0cmVhbWluZ1RleHQgKGV4dGVybm8pLCBzaW4gcmUtcmVuZGVyIGRlbCDDoXJib2wgY29tcGxldG8uXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckV4aXN0cyA9IHVzZVNlc3Npb25zU3RvcmVcbiAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgLmdldE1lc3NhZ2VzKHNlc3Npb25JZClcbiAgICAgICAgLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKCFwbGFjZWhvbGRlckV4aXN0cykge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogcGxhY2Vob2xkZXJJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gcGxhY2Vob2xkZXJJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjdHg6IFN0cmVhbUNvbnRleHQsXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbCxcbiAgICAgIC8qKiBQb3NpY2lvbmFsOiBtYXN0ZXIgbm8gbG8gY29uc3VtZSwgcGVybyBgcmVhc29uaW5nYCB2aWVuZSBkZXNwdcOpcy4gKi9cbiAgICAgIF9yZXNvbHZlZENvbnRleHQ/OiBhbnksXG4gICAgICByZWFzb25pbmc/OiBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsLFxuICAgICAgbXVsdGlwbGVDaG9pY2U/OiBpbXBvcnQoJy4uLy4uL3R5cGVzL0NoYXQnKS5NdWx0aXBsZUNob2ljZSB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAvLyBFbCBwbGFjZWhvbGRlciBzYWxlIGRlbCBzdG9yZSBwb3Itc2VzacOzbiB5YTogZWwgZWZlY3RvIGRlIHJlY29uY2lsaWFjacOzblxuICAgICAgLy8gbG8gdXNhIHBhcmEgZGV0ZWN0YXIgcmVzcHVlc3RhcyBodcOpcmZhbmFzIHkgZGUgYWPDoSBhbCBjb21taXQgcHVlZGUgaGFiZXJcbiAgICAgIC8vIHVuIGF3YWl0LiBMYSB2aXN0YSBsb2NhbCBsbyBzdWVsdGEgbcOhcyBhYmFqbywganVudG8gYWwgY29tbWl0LlxuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gRWwgdHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gZXN0w6Ega2V5ZWQgcG9yIGVsIHBsYWNlaG9sZGVyOyBsbyBtb3ZlbW9zIGFsXG4gICAgICAvLyBpZCBkZWZpbml0aXZvIHBhcmEgcXVlIGVsIGJsb3F1ZSBkZSByYXpvbmFtaWVudG8gc29icmV2aXZhIGFsIHN3YXAuXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZChtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAvLyBQcmVmZXJpciBlbCBzbmFwc2hvdCBlbiB2aXZvIChuYXJyYWNpw7NuIGFuY2xhZGEgYWwgaW5pY2lvKSBzb2JyZSBlbFxuICAgICAgLy8gYGNvbXBsZXRlYCBkZWwgYmFjaywgcXVlIHN1ZWxlIG1hbmRhciBlc2EgbmFycmFjacOzbiBhbCBmaW5hbC5cbiAgICAgIGNvbnN0IGNvbXBhY3Rpb24gPSBjb21wYWN0aW9uRm9yKHRlbXBNZXNzYWdlSWQsIHJlYXNvbmluZylcbiAgICAgIGNvbnN0IGZpbmFsVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKSA/PyBtYXBSZWFzb25pbmdUcmFjZShyZWFzb25pbmcpXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUodGVtcE1lc3NhZ2VJZCwgZmluYWxNZXNzYWdlSWQpXG5cbiAgICAgIC8vIFNlc2nDs24gZW4gYmFja2dyb3VuZDogY2VycmFtb3MgbGVhbi4gRWwgYmFja2VuZCB5YSBwZXJzaXN0acOzIGxhXG4gICAgICAvLyByZXNwdWVzdGEsIGFzw60gcXVlIGFsIHZvbHZlciBhIGxhIHNlc2nDs24gc2UgY2FyZ2EgZGVzZGUgYWjDrS4gQXZpc2Ftb3NcbiAgICAgIC8vIHF1ZSB0ZXJtaW7DsyAodW5yZWFkICsgZXZlbnRvIHBhcmEgdG9hc3Qvc29uaWRvKS5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICBtdWx0aXBsZUNob2ljZSxcbiAgICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29udGVudFRvQWRkLFxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCxcbiAgICAgICAgaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgYWZmZWN0ZWRUYXNrSWRzLFxuICAgICAgICBtYW51YWxXYXNUYXNrRWRpdCxcbiAgICAgICAgbWFudWFsV2FzVGFza0RlbGV0ZSxcbiAgICAgICAgd2FzVGFza0VkaXQsXG4gICAgICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgICAgfSA9IGF3YWl0IHJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nKHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVmLmN1cnJlbnQsXG4gICAgICAgIHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIHRhc2tVcmxSZWdleCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZ2V0VGFiVGFza0RlZmF1bHQsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgbWFudWFsQXBwcm92YWwsXG4gICAgICAgIGFwcGx5RGFzaGJvYXJkTXV0YXRpb246IChtdXRhdGlvbiwgdGFza0lkcykgPT4ge1xuICAgICAgICAgIGFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uKG11dGF0aW9uLCB0YXNrSWRzLCB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZClcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMoe1xuICAgICAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgICAgbWFudWFsQXBwcm92YWxUb29sTmFtZTogbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3M/LnRvb2xOYW1lLFxuICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICBhZ2VudFR5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICBub3JtYWxpemVUb29sTmFtZTogbm9ybWFsaXplSGl0bFRvb2xOYW1lLFxuICAgICAgICBidWlsZEFjdGlvblR5cGVMaXN0OiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCxcbiAgICAgIH0pLmZvckVhY2gocGF5bG9hZCA9PiB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCBwYXlsb2FkKVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgb3BlblRhc2tQYW5lbElkID0gd2luZG93LnRhc2tQYW5lbD8udGFza0lkXG5cbiAgICAgIGlmIChob3Vyc0NoYXJnZVRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkKHtcbiAgICAgICAgICBzb3VyY2U6ICdtYWlhJyxcbiAgICAgICAgICB0b29sczogaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRSZWZldGNoT3BlblRhc2tQYW5lbChcbiAgICAgICAgICBvcGVuVGFza1BhbmVsSWQsXG4gICAgICAgICAgeyB3YXNUYXNrRWRpdCwgd2FzVGFza0RlbGV0ZSB9LFxuICAgICAgICAgIHsgbWFudWFsV2FzVGFza0VkaXQsIG1hbnVhbFdhc1Rhc2tEZWxldGUgfSxcbiAgICAgICAgICBhZmZlY3RlZFRhc2tJZHNcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHdpbmRvdy50YXNrUGFuZWw/LnJlZmV0Y2hUYXNrPy4oKVxuICAgICAgfVxuXG4gICAgICAvLyBTd2FwIHBsYWNlaG9sZGVyIOKGkiBtZW5zYWplIGZpbmFsLiBWYSBlbiBgZmx1c2hTeW5jYCBwb3JxdWUgZWwgbW90b3IgeWFcbiAgICAgIC8vIGRlasOzIGVuY29sYWRhcyBsYXMgZXNjcml0dXJhcyBkZSBmaW4gZGUgc3RyZWFtIChpc1dyaXRpbmcsIGFjdGl2aXR5LFxuICAgICAgLy8gc3RhdHVzKSwgeSBlc2FzIHZpYWphbiBlbiBTeW5jTGFuZSBwb3Igc2VyIGRlIHVuIHN0b3JlIGV4dGVybm8gbWllbnRyYXNcbiAgICAgIC8vIHF1ZSBlc3RvcyBzZXRTdGF0ZSB2aWFqYW4gZW4gRGVmYXVsdExhbmUuIFNpbiBmb3J6YXJsbywgUmVhY3QgcGludGFcbiAgICAgIC8vIHByaW1lcm8gZWwgcGxhY2Vob2xkZXIgeWEgc2luIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHR1cm5vIDQxcHggbcOhc1xuICAgICAgLy8gYmFqbykgeSByZWNpw6luIH4yNW1zIGRlc3B1w6lzIGVsIG1lbnNhamUgZGVmaW5pdGl2bzogZXNlIHNhbHRvIGRlIGlkYSB5XG4gICAgICAvLyB2dWVsdGEgZXJhIGVsIGZsaWNrZXIgZGUgZmluIGRlIHN0cmVhbS4gQ29uIGVsIGZsdXNoLCB0b2RvIGVsIGZpbiBkZVxuICAgICAgLy8gc3RyZWFtIGVudHJhIGVuIHVuIMO6bmljbyBjb21taXQuXG4gICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgbXVsdGlwbGVDaG9pY2UsXG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgICAgICAgICAgcmVhc29uaW5nOiBmaW5hbFRyYWNlLFxuICAgICAgICAgICAgY29tcGFjdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgY29uc3QgeyBpc0NoYXRWaWV3VmlzaWJsZSwgbWFya0NoYXRBc1JlYWQgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgICBpZiAoc2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2goaXNBY3RpdmUsIGlzQ2hhdFZpZXdWaXNpYmxlKSkge1xuICAgICAgICBhd2FpdCBtYXJrQ2hhdEFzUmVhZChzZXNzaW9uSWQsIHsgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaChmaXJzdFRpbWVSZWYuY3VycmVudCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICAvLyBgcGFydGlhbFRleHRgIGxvIHJlc2NhdGEgYHN0b3BTdHJlYW1gIGFudGVzIGRlIGxpbXBpYXIgZWwgc3RvcmUgZXh0ZXJubzogZWwgdGV4dG8gZW4gdml2b1xuICAvLyBubyB2aXZlIGVuIGBtZXNzYWdlc2AsIGFzw60gcXVlIHNpbiBlc3RvIGxhIHJlc3B1ZXN0YSBhIG1lZGlhcyBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGF1bnF1ZVxuICAvLyBlbCBiYWNrZW5kIHPDrSBsYSBoYXlhIHBlcnNpc3RpZG8uXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjayhcbiAgICAocGFydGlhbFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgLy8gRWwgc3RvcCBzaWVtcHJlIGFwbGljYSBhIGxhIHNlc2nDs24gYWN0aXZhIChib3TDs24gZGVsIGlucHV0IHZpc2libGUpLlxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IHsgZmluYWxNZXNzYWdlSWQsIGNhbmNlbGxlZE1lc3NhZ2VJZCB9ID0gcmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IHN0b3BwZWRUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpXG4gICAgICBjb25zdCBjb21wYWN0aW9uID0gY29tcGFjdGlvbkZvcih0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGlmIChzaG91bGRQcmVzZXJ2ZVJlYXNvbmluZ09uU3RyZWFtU3RvcChzdG9wcGVkVHJhY2UsIGNvbXBhY3Rpb24pKSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaCh0ZW1wTWVzc2FnZUlkLCBudWxsKVxuICAgICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUodGVtcE1lc3NhZ2VJZCwgZmluYWxNZXNzYWdlSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5yZW1vdmUodGVtcE1lc3NhZ2VJZClcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnRpYWxUZXh0KSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBwYXJ0aWFsVGV4dCxcbiAgICAgICAgICAgIHN0b3BwZWRUcmFjZSxcbiAgICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRTdHJlYW1TdG9wQ2FuY2VsbGVkQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgY2FuY2VsbGVkTWVzc2FnZUlkLFxuICAgICAgICAgIGNhbmNlbGxlZExhYmVsOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHJlc29sdmVIaXRsRXhlY3V0aW9uQ29udGV4dChhcHByb3ZhbCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsT3V0Y29tZSA9IHJlc29sdmVIaXRsQXBwcm92YWxSZXF1aXJlZE91dGNvbWUoYXBwcm92YWwpXG5cbiAgICAgIC8vIFByZWFwcm9iYWRvOiBwb3IgZGV0ZWNjacOzbiBtYW51YWwgbyBwb3IgYXV0by1hcHByb3ZlLiBFbiBhbWJvcyBjYXNvcyBlbFxuICAgICAgLy8gc3RyZWFtIGNvbnRpbsO6YSB5IG5vIGhheSBxdWUgcGludGFyIGxhIGNhamEgZGUgYXByb2JhY2nDs24uXG4gICAgICBpZiAoaGl0bE91dGNvbWUudHlwZSA9PT0gJ3NraXAtdWknKSB7XG4gICAgICAgIHRyYWNrTWFudWFsSGl0bEV2ZW50cyhcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB7IGltcHJlc3Npb246IEVWRU5UUy5haUNoYXRIaXRsLCBvcHRpb246IEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uIH0sXG4gICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgYXBwcm92YWwsXG4gICAgICAgICAgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmLmN1cnJlbnQsXG4gICAgICAgICAgcmVzb2x2ZUhpdGxTa2lwUmVzb2x1dGlvblNvdXJjZShhcHByb3ZhbClcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IHNraXBwZWRNYW51YWxBcHByb3ZhbCA9IHJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsKGFwcHJvdmFsKVxuICAgICAgICBpZiAoc2tpcHBlZE1hbnVhbEFwcHJvdmFsICYmIGlzQWN0aXZlKSB7XG4gICAgICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBza2lwcGVkTWFudWFsQXBwcm92YWxcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWxNZXNzYWdlSWQgfSA9IGhpdGxPdXRjb21lXG4gICAgICBjb25zdCBjb21wYWN0aW9uID0gY29tcGFjdGlvbkZvcihwbGFjZWhvbGRlcklkLCBhcHByb3ZhbC5yZWFzb25pbmcpXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUocGxhY2Vob2xkZXJJZCwgYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhcHByb3ZhbFRyYWNlID0gbWFwUmVhc29uaW5nVHJhY2UoYXBwcm92YWwucmVhc29uaW5nKSA/PyByZWFzb25pbmdUcmFjZUZvcihhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlKHtcbiAgICAgICAgICBhcHByb3ZhbE1lc3NhZ2VJZCxcbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQsXG4gICAgICAgICAgYXBwcm92YWwsXG4gICAgICAgICAgcmVhc29uaW5nOiBhcHByb3ZhbFRyYWNlLFxuICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdhcHByb3ZhbF9yZXF1aXJlZCcpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQsIGNvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBldmVudF1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgYWN0aXZlU2Vzc2lvbklkLFxuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLFxuICB9KVxuXG4gIHVzZUluc2VydGlvbkVmZmVjdCgoKSA9PiB7XG4gICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHt9KVxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICAvLyBTZSB0b21hIGFudGVzIGRlIGN1YWxxdWllciBlYXJseSByZXR1cm46IHNpIGVzdGUgZW52w61vIG5vIHNhbGUsIGxhIHJlc3B1ZXN0YSBubyBkZWJlIGNvbGdhcnNlIGRlbCBwcsOzeGltby5cbiAgICAgIGNvbnN0IG11bHRpcGxlQ2hvaWNlQW5zd2VyID0gdXNlTXVsdGlwbGVDaG9pY2VTdG9yZS5nZXRTdGF0ZSgpLnRha2VBbnN3ZXIoKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHdpbGxTdGFydE5ld1N0cmVhbSA9ICFzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBzZW5kR2F0ZSA9IHJlc29sdmVTZW5kTWVzc2FnZUdhdGUoe1xuICAgICAgICBpc1Byb2Nlc3Npbmc6IGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgd2lsbFN0YXJ0TmV3U3RyZWFtLFxuICAgICAgICBhY3RpdmVTdHJlYW1Db3VudDogc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSxcbiAgICAgICAgbWF4Q29uY3VycmVudDogTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyxcbiAgICAgIH0pXG4gICAgICBpZiAoc2VuZEdhdGUgPT09ICdjb25jdXJyZW5jeScpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlbmRHYXRlID09PSAnYnVzeScpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGaWVsZHMgPSByZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzKG9wdGlvbnMsIHtcbiAgICAgICAgZmFxSWQsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgZnVhSWQsXG4gICAgICAgIHNjSWQsXG4gICAgICB9KVxuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShwYXlsb2FkRmllbGRzLm1lbnRpb25zKVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGaWVsZHMuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRGaWVsZHMuc2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0QWN0aXZlQ2hhdElkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gcmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZChtZXNzYWdlc1JlZi5jdXJyZW50KVxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuXG4gICAgICBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGRpc3BsYXlNZXNzYWdlKSxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHJlc29sdmVVc2VyUXVlc3Rpb25NZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KSxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKG11bHRpcGxlQ2hvaWNlQW5zd2VyID8geyBtdWx0aXBsZUNob2ljZUFuc3dlciB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBmaW5hbE1lc3NhZ2UgPSByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpLFxuICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKG1lc3NhZ2VzUmVmLmN1cnJlbnQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCh7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiByZXNvbHZlQWdlbnRJZEZvclN0cmVhbShjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMsIGFnZW50Py5pZCksXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGN0eFByb2plY3QsXG4gICAgICAgIGN0eENsaWVudCxcbiAgICAgICAgY3R4VGFzayxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3RzPy5sZW5ndGggPyBwcm9qZWN0c1swXS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgZmFxSWQ6IHBheWxvYWRGaWVsZHMuZmFxSWQsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkRmllbGRzLmFnZW50U3VnZ2VzdGlvbklkLFxuICAgICAgICBmdWFJZDogcGF5bG9hZEZpZWxkcy5mdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZEZpZWxkcy5zY0lkLFxuICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgYWdlbnRFbW9qaTogYWdlbnQ/LmVtb2ppLFxuICAgICAgICBjb250ZXh0TWVzc2FnZSxcbiAgICAgICAgY29udGV4dERhdGE6IHBheWxvYWRGaWVsZHMuY29udGV4dERhdGEsXG4gICAgICAgIG11bHRpcGxlQ2hvaWNlQW5zd2VyLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKHNob3VsZFVwZGF0ZVByb2plY3RPbkNoYW5nZShvcHRpb24uaWQsIHByb2plY3Q/LmlkKSkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZShjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsIHByb2plY3QpKSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKG1lc3NhZ2VzUmVmLmN1cnJlbnQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgYXNrTWFpYShcbiAgICAgICAgICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZEZvclByb2plY3RDaGFuZ2Uoe1xuICAgICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICAgIHByb2plY3Q6IG9wdGlvbixcbiAgICAgICAgICAgIGF1dGhVc2VyLFxuICAgICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgICAgIGFnZW50VHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCByZXRyeU1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3QgcmV0cnlCbG9jayA9IHJlc29sdmVSZXRyeUJsb2NrUmVhc29uKHtcbiAgICAgICAgaXNQcm9jZXNzaW5nOiBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGlzU2Vzc2lvblN0cmVhbUFjdGl2ZTogc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ291bnQ6IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCksXG4gICAgICAgIG1heENvbmN1cnJlbnQ6IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMsXG4gICAgICB9KVxuICAgICAgaWYgKHJldHJ5QmxvY2sgPT09ICdjb25jdXJyZW5jeScpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHJldHJ5QmxvY2sgIT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICBjb25zdCByZXRyeUVsaWdpYmlsaXR5ID0gcmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHkocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSwgdXNlck1lc3NhZ2UpXG4gICAgICBpZiAoIXJldHJ5RWxpZ2liaWxpdHkuZWxpZ2libGUgfHwgIXVzZXJNZXNzYWdlKSByZXR1cm5cblxuICAgICAgY29uc3QgeyB0dXJuSWQsIHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIH0gPSByZXRyeUVsaWdpYmlsaXR5XG5cbiAgICAgIGNvbnN0IHRydW5jYXRlZCA9IG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuKHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgc2V0QWN0aXZlQ2hhdElkKHNlc3Npb25JZClcblxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gdXNlck1lc3NhZ2UubWVzc2FnZVxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtuZXdNZXNzYWdlSWR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRNZXNzYWdlcyA9IFsuLi50cnVuY2F0ZWQsIHBsYWNlaG9sZGVyXVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG5leHRNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKG5leHRNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gdHJ1bmNhdGVkLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWQpXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSB0cnVuY2F0ZWQuYXQoLTEpPy5hZ2VudElkIHx8IG1lc3NhZ2UuYWdlbnRJZFxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSByZXNvbHZlUmV0cnlVc2VyQXR0YWNobWVudHModXNlck1lc3NhZ2UpXG5cbiAgICAgIGNvbnN0IHJlcGxheVZpYU9yY2hlc3RyYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXModHJ1bmNhdGVkLCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RUb1JlcXVlc3QgPyBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSkgOiBudWxsXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXNrTWFpYShcbiAgICAgICAgICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgICAgIGF1dGhVc2VyLFxuICAgICAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZ2VudElkOiByZXNvbHZlQWdlbnRJZEZvclN0cmVhbShjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMsIGFnZW50Py5pZCksXG4gICAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBjdHhQcm9qZWN0LFxuICAgICAgICAgICAgY3R4Q2xpZW50LFxuICAgICAgICAgICAgY3R4VGFzayxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0cz8ubGVuZ3RoID8gcHJvamVjdHNbMF0ubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgYWdlbnRFbnRpdHk6IGFnZW50Py5lbnRpdHksXG4gICAgICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICAgICAgYWdlbnRFbW9qaTogYWdlbnQ/LmVtb2ppLFxuICAgICAgICAgICAgY29udGV4dE1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlLFxuICAgICAgICAgICAgbXVsdGlwbGVDaG9pY2VBbnN3ZXI6IHVzZXJNZXNzYWdlLm11bHRpcGxlQ2hvaWNlQW5zd2VyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLm11bHRpcGxlQ2hvaWNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzdGO0FBQ0E7QUFDQSxTQUFTQyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBQzlCLFNBQVNDLFlBQVksUUFBUSxpQkFBaUI7QUFFOUMsU0FDRUMsa0NBQWtDLEVBQ2xDQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixFQUM3QkMsNEJBQTRCLEVBQzVCQyw2QkFBNkIsRUFDN0JDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyw0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
|
|
1398
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUluc2VydGlvbkVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImZsdXNoU3luYyIsInY0IiwidXVpZHY0IiwidXNlQ2hhdE1lc3NhZ2VzIiwidXNlT3JjaGVzdHJhdG9yU3RyZWFtIiwidXNlVCIsInVzZUxhdGVzdFJlZiIsImZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMiLCJyZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyIsInJlc29sdmVDb250aW51ZVN0cmVhbURlY2lzaW9uIiwibWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlciIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiY29tcGFjdGlvbkZvciIsInJlYXNvbmluZ1RyYWNlRm9yIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJyZXNvbHZlUHJvamVjdFRvUmVxdWVzdCIsInJlc29sdmVTdHJlYW1FcnJvck1lc3NhZ2VLZXkiLCJhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiIsInNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsIiwicmVzb2x2ZVNlbmRNZXNzYWdlR2F0ZSIsInJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMiLCJidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzIiwicmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZCIsInJlc29sdmVBZ2VudElkRm9yU3RyZWFtIiwicmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCIsImJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlIiwicmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlIiwiYnVpbGRTdHJlYW1FcnJvckFzc2lzdGFudE1lc3NhZ2UiLCJyZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lIiwiYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSIsInNob3VsZFByZXNlcnZlUmVhc29uaW5nT25TdHJlYW1TdG9wIiwiYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2UiLCJidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlIiwicmVzb2x2ZVJldHJ5QmxvY2tSZWFzb24iLCJyZXNvbHZlUmV0cnlFbGlnaWJpbGl0eSIsInJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyIsInNob3VsZFVwZGF0ZVByb2plY3RPbkNoYW5nZSIsInNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZSIsInJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyIsInJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZSIsInJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlIiwicmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0IiwicmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwiLCJyZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlIiwicmVzb2x2ZUNyZWF0ZUFnZW50SGl0bEFuYWx5dGljc0V2ZW50cyIsImJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXkiLCJzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24iLCJzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZSIsInNob3VsZFN3aXRjaFRvSW5pdGlhbENoYXRTZXNzaW9uIiwiYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlIiwicmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaCIsInNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCIsInVzZVVzZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwiRVZFTlRTIiwidXNlRXZlbnQiLCJtYWlhIiwiRmVlZGJhY2siLCJDaGF0SGlzdG9yeVJvbGUiLCJidWlsZENvbnRleHRNZXNzYWdlIiwiZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsIm5vcm1hbGl6ZUhpdGxUb29sTmFtZSIsInRyYWNrTWFudWFsSGl0bEV2ZW50cyIsInNlc3Npb25TdHJlYW1pbmdUZXh0IiwidXNlTXVsdGlwbGVDaG9pY2VTdG9yZSIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFzb25pbmdTdG9yZSIsIm1hcFJlYXNvbmluZ1RyYWNlIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJfbWFwQXV0aFVzZXJUb0NoYXRNZXMiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJjdXJyZW50VXNlciIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZiIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJvbkVycm9yIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwidGFzayIsInNldFRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInNldEFjdGl2ZUNoYXRJZCIsInN0YXRlIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwidHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmIiwiU2V0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJyZXRyeVNuYXBzaG90UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsImN1cnJlbnQiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJzdGF0dXMiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJCb29sZWFuIiwic2hvdyIsInNldmVyaXR5IiwiX3Jlc29sdmVTdHJlYW1FcnJvck1lIiwibWVzc2FnZUtleSIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJyZXRyeUxhYmVsIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInNvbWUiLCJtc2ciLCJzdGFydCIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsInN1Z2dlc3Rpb25zIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJtdWx0aXBsZUNob2ljZSIsIl9yZWFzb25pbmdUcmFjZUZvciIsIl93aW5kb3ckdGFza1BhbmVsIiwidGVtcE1lc3NhZ2VJZCIsImF0dGFjaG1lbnRzIiwiZmluYWxNZXNzYWdlSWQiLCJjb21wYWN0aW9uIiwiZmluYWxUcmFjZSIsInRhc2tVcmxSZWdleCIsIm1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzIiwibWFudWFsQXBwcm92YWwiLCJfeWllbGQkcmVzb2x2ZUFjdGl2ZVMiLCJjb250ZW50VG9BZGQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJob3Vyc0NoYXJnZVRvb2xzIiwiYWZmZWN0ZWRUYXNrSWRzIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsInBlbmRpbmdBY3Rpb25zIiwib3BlblRhc2tQYW5lbElkIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwibWFya0NoYXRBc1JlYWQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInJlbmFtZSIsImFicnVwdCIsIlJlZ0V4cCIsInByb2plY3RJZCIsInBhdGhuYW1lIiwid2luZG93IiwibG9jYXRpb24iLCJtdWx0aUFnZW50c0FjY2VzcyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhcHBseURhc2hib2FyZE11dGF0aW9uIiwibXV0YXRpb24iLCJ0YXNrSWRzIiwibmV3UHJvamVjdERhc2hib2FyZCIsInNlbnQiLCJtYW51YWxBcHByb3ZhbFRvb2xOYW1lIiwidG9vbE5hbWUiLCJhZ2VudFR5cGUiLCJub3JtYWxpemVUb29sTmFtZSIsImJ1aWxkQWN0aW9uVHlwZUxpc3QiLCJmb3JFYWNoIiwicGF5bG9hZCIsImFpQ2hhdEhpdGxPcHRpb24iLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJsZW5ndGgiLCJzb3VyY2UiLCJ0b29scyIsInJlZmV0Y2hUYXNrIiwiY2FsbCIsImFnZW50SWQiLCJ0aGVuIiwiY2hhdEFnZW50IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiX3gwIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTdHJlYW1TdG9wIiwicGFydGlhbFRleHQiLCJfcmVzb2x2ZVN0cmVhbVN0b3BNZXMiLCJjYW5jZWxsZWRNZXNzYWdlSWQiLCJzdG9wcGVkVHJhY2UiLCJmaW5pc2giLCJyZW1vdmUiLCJjYW5jZWxsZWRMYWJlbCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhcHByb3ZhbCIsImFjY3VtdWxhdGVkQ29udGVudCIsIl9tYXBSZWFzb25pbmdUcmFjZSIsImhpdGxDb250ZXh0IiwiaGl0bE91dGNvbWUiLCJ0eXBlIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJvcHRpb24iLCJza2lwcGVkTWFudWFsQXBwcm92YWwiLCJhcHByb3ZhbE1lc3NhZ2VJZCIsImFwcHJvdmFsVHJhY2UiLCJfdXNlT3JjaGVzdHJhdG9yU3RyZWEiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdG9wIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiYXNrTWFpYSIsInJldHJ5Q29tcGxldGlvbiIsIndhaXRpbmdSZXNwb25zZSIsImlzTG9hZGluZyIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjMiLCJfY2FsbGVlMiIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJfdXNlTXVsdGlwbGVDaG9pY2VTdG8iLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJtdWx0aXBsZUNob2ljZUFuc3dlciIsIndpbGxTdGFydE5ld1N0cmVhbSIsInNlbmRHYXRlIiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwib3B0aW9ucyIsInBheWxvYWRGaWVsZHMiLCJjb250ZXh0TWVzc2FnZSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhQcm9qZWN0IiwiY3R4Q2xpZW50IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MiIsInRha2VBbnN3ZXIiLCJpc1Byb2Nlc3NpbmciLCJhY3RpdmVTdHJlYW1Db3VudCIsImdldEFjdGl2ZUNvdW50IiwibWF4Q29uY3VycmVudCIsInBtQWlUeXBlZFRleHQiLCJmaWx0ZXIiLCJhdCIsInRpdGxlIiwiX29iamVjdFNwcmVhZCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJ0b1N0cmluZyIsImFnZW50TmFtZSIsInByb2plY3ROYW1lIiwiYWdlbnRFbnRpdHkiLCJlbnRpdHkiLCJhZ2VudEVtb2ppIiwiZW1vamkiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfeDE2IiwiY2hhbmdlUHJvamVjdCIsInJldHJ5TWVzc2FnZSIsIl9yZWY0IiwiX2NhbGxlZTQiLCJfdHJ1bmNhdGVkJGF0IiwicmV0cnlCbG9jayIsInByZXZpb3VzTWVzc2FnZXMiLCJ1c2VyTWVzc2FnZSIsInJldHJ5RWxpZ2liaWxpdHkiLCJ0dXJuSWQiLCJ1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayIsInRydW5jYXRlZCIsInBsYWNlaG9sZGVyIiwibmV4dE1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJyZXBsYXlWaWFPcmNoZXN0cmF0b3IiLCJyZXN1bHQiLCJfY29udGV4dDQiLCJpc1Nlc3Npb25TdHJlYW1BY3RpdmUiLCJlbGlnaWJsZSIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdXNlck1lc3NhZ2UkbXVsdGlwbGUiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJsYW5nIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3gxNyIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjYiLCJfY2FsbGVlNSIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJtYXAiLCJ3YXNIZWxwZnVsIiwiX3gxOCIsIl94MTkiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjciLCJfY2FsbGVlNiIsInRocmVhZElkcyIsImRlY2lzaW9uIiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwiZm91bmQiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJnZXQiLCJzZXNzaW9uX2lkIiwibWVzc2FnZVRleHQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhcHByb3ZhbFN0YXR1cyIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsImNhbGxiYWNrcyIsImZpbmlzaFBheWxvYWQiLCJyZXNvbHZlZENvbnRleHQiLCJhcHByb3ZhbFBheWxvYWQiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNyIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWY5IiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQzIiwiaW5pdGlhbERpc3BsYXlNZXNzYWdlIiwiX2NvbnRleHQ3IiwidHJpbSIsImhpc3RvcnlNZXNzYWdlIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiZmVlSWQiLCJ0YXNrTmFtZSIsInJlc2V0Q2hhdCIsInByZXZpb3VzU2Vzc2lvbklkIiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUluc2VydGlvbkVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbi8vIGZsdXNoU3luYyBpbnRlbmNpb25hbDogZXZpdGEgZWwgZmxpY2tlciBkZSBmaW4gZGUgc3RyZWFtICh2ZXIgaGFuZGxlU3RyZWFtRmluaXNoKVxuLy8gcmVhY3QtZG9jdG9yLWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWRvY3Rvci9uby1mbHVzaC1zeW5jXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyB1c2VMYXRlc3RSZWYgfSBmcm9tICcuLi91c2VMYXRlc3RSZWYnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMsXG4gIHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzLFxuICByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbixcbiAgbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcixcbiAgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMsXG4gIG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyxcbiAgY29tcGFjdGlvbkZvcixcbiAgcmVhc29uaW5nVHJhY2VGb3IsXG4gIHJlc29sdmVDbGllbnRQYXlsb2FkLFxuICByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCxcbiAgcmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleSxcbiAgYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24sXG4gIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzLFxuICBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzLFxuICByZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkLFxuICByZXNvbHZlQWdlbnRJZEZvclN0cmVhbSxcbiAgcmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCxcbiAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQsXG4gIGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSxcbiAgcmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlLFxuICBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSxcbiAgcmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZSxcbiAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSxcbiAgc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AsXG4gIGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlLFxuICBidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbixcbiAgcmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHksXG4gIHJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyxcbiAgc2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlLFxuICBzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UsXG4gIHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCxcbiAgcmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzLFxuICByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UsXG4gIHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlLFxuICByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQsXG4gIHJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsLFxuICByZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzLFxuICBidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5LFxuICBzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24sXG4gIHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lLFxuICBzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbixcbiAgYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyxcbiAgc2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2gsXG4gIHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCxcbn0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5oZWxwZXJzJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7XG4gIGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LFxuICBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBub3JtYWxpemVIaXRsVG9vbE5hbWUsXG4gIHRyYWNrTWFudWFsSGl0bEV2ZW50cyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZU11bHRpcGxlQ2hvaWNlU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VNdWx0aXBsZUNob2ljZVN0b3JlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIsIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IGFjdGl2ZVZpZXcgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9hY3RpdmVWaWV3J1xuaW1wb3J0IHsgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUsIGVuc3VyZVNlc3Npb25JblNpZGViYXIgfSBmcm9tICcuLi8uLi9zdG9yZS9jaGF0c1NpZGViYXJPcHRpbWlzdGljJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnksIG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Db250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB7IG1hcFJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVhc29uaW5nTWFwcGVycydcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgeyBpZCwgbmFtZSwgYXZhdGFyIH0gPSBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyKGF1dGhVc2VyKVxuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZU1lbW88Q2hhdE1lc3NhZ2VVc2VyPigoKSA9PiAoeyBpZCwgbmFtZSwgYXZhdGFyIH0pLCBbaWQsIG5hbWUsIGF2YXRhcl0pXG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXIsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3Qgc2V0QWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRBY3RpdmVDaGF0SWQpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogRXZpdGEgZHVwbGljYXIgQUlfQ0hBVF9ISVRMIC8gQUlfQ0hBVF9ISVRMX09QVElPTiBlbiBwcmVhcHJvYmFjaW9uZXMgKG1hbnVhbCBvIGF1dG8pIHBvciBsb3RlLiAqL1xuICBjb25zdCB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYgPSB1c2VSZWY8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSlcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgLyoqIE1lbnNhamVzIGEgcmVzdGF1cmFyIHNpIGByZXRyeV9jb21wbGV0aW9uYCBmYWxsYSBhbnRlcyBkZSBwZXJzaXN0aXIgZWwgcmVlbXBsYXpvLiAqL1xuICBjb25zdCByZXRyeVNuYXBzaG90UmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10gfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmID0gdXNlUmVmKGlzQXV0b0FwcHJvdmVBY3RpdmUpXG4gIC8qKiBFdml0YSBjbG9zdXJlcyBvYnNvbGV0YXMgY3VhbmRvIGVsIGZvb3RlciBjb25zZXJ2YSBzZW5kTWVzc2FnZSBlbnRyZSByZW5kZXJzLiAqL1xuICBjb25zdCBjb250ZXh0UmVmID0gdXNlTGF0ZXN0UmVmKHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50ID0gaXNBdXRvQXBwcm92ZUFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgaXNBdXRvQXBwcm92ZUFjdGl2ZV0pXG5cbiAgY29uc3Qge1xuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgbG9hZE1lc3NhZ2VzLFxuICAgIGFkZE1lc3NhZ2UsXG4gICAgcmVtb3ZlTWVzc2FnZSxcbiAgICByZXBsYWNlTWVzc2FnZXMsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICB9ID0gdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICB1c2VJbnNlcnRpb25FZmZlY3QoKCkgPT4ge1xuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuICB9KVxuXG4gIC8qKlxuICAgKiBFc2NyaWJlIHVuIG1lbnNhamUgZW4gZWwgc3RvcmUgcG9yLXNlc2nDs24geSwgc2kgbGEgc2VzacOzbiBlcyBsYSBhY3RpdmEsXG4gICAqIHRhbWJpw6luIGVuIGxhIHZpc3RhIGxvY2FsLiBQZXJtaXRlIHF1ZSBzZXNpb25lcyBlbiBiYWNrZ3JvdW5kIGFjdW11bGVuIHN1XG4gICAqIHJlc3VsdGFkbyBzaW4gcGlzYXIgZWwgY2hhdCBxdWUgZWwgdXN1YXJpbyBlc3TDoSBtaXJhbmRvLlxuICAgKi9cbiAgY29uc3QgY29tbWl0VG9TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmFkZE1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGRyb3BGcm9tU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgLyoqIExpbXBpYSBlbCB0YWlsIGVuIHZ1ZWxvIGRlIHVuYSBzZXNpw7NuICh0cmFzIHRlcm1pbmFyOyBlbCBiYWNrZW5kIHBhc2EgYSBzZXIgZnVlbnRlKS4gKi9cbiAgY29uc3QgY2xlYXJTZXNzaW9uVGFpbCA9IHVzZUNhbGxiYWNrKChzZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5zZXRNZXNzYWdlcyhzZXNzaW9uSWQsIFtdKVxuICB9LCBbXSlcblxuICAvLyBSZWdpc3RyYXIgbGEgc2VzacOzbiB2aXNpYmxlIGVuIGVsIHRyYWNrZXIgZ2xvYmFsIHBhcmEgcXVlIGxvcyBjYWxsYmFja3MgZGVsXG4gIC8vIG1vdG9yIChxdWUgcHVlZGVuIHBlcnRlbmVjZXIgYSB1bmEgaW5zdGFuY2lhIHlhIGRlc21vbnRhZGEpIHNlcGFuIGN1w6FsIGVzIGxhXG4gIC8vIHNlc2nDs24gYWN0aXZhIGFjdHVhbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVWaWV3LnNldChhY3RpdmVTZXNzaW9uSWQpXG4gIH0sIFthY3RpdmVTZXNzaW9uSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKGN1cnJlbnRDaGF0SWQuY3VycmVudCkpIHtcbiAgICAgICAgYWN0aXZlVmlldy5zZXQobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFJlY29uY2lsaWFjacOzbjogc2kgbGEgc2VzacOzbiBhY3RpdmEgdGVybWluYSAoY29tcGxldGUvZXJyb3IpIHBlcm8gZWwgc3RvcmVcbiAgLy8gcG9yLXNlc2nDs24gdG9kYXbDrWEgdGllbmUgdW4gcGxhY2Vob2xkZXIgZGUgc3RyZWFtaW5nLCByZWZyZXNjYW1vcyBkZXNkZVxuICAvLyBlbCBiYWNrZW5kLiBVc2Ftb3MgZWwgc3RvcmUgKG5vIG1lc3NhZ2VzUmVmKTogaGFuZGxlU3RyZWFtRmluaXNoIGxpbXBpYSBlbFxuICAvLyBwbGFjZWhvbGRlciBhaMOtIGRlIGZvcm1hIHPDrW5jcm9uYTsgbWVzc2FnZXNSZWYgcHVlZGUgcXVlZGFyIHN0YWxlIHVuIHJlbmRlclxuICAvLyBwb3JxdWUgc2V0U3RhdHVzIChadXN0YW5kKSB5IHJlbW92ZU1lc3NhZ2UgKFJlYWN0KSBubyBiYXRjaGFuIGp1bnRvcy5cbiAgLy8gYGNhbmNlbGxlZGAgcXVlZGEgYWZ1ZXJhOiBlbCBzdG9wIHlhIHJlY29uY2lsaWEgbG9jYWwgKHBhcmNpYWwgKyBidXJidWphIGRlXG4gIC8vIGNhbmNlbGFkbykgeSByZWNhcmdhciBhY8OhIG1vc3RyYWJhIGxhIHBhbnRhbGxhIGRlIGNhcmdhIGRlbCBjaGF0IGVudGVyby5cbiAgY29uc3QgYWN0aXZlU2Vzc2lvbk1ldGEgPSB1c2VTZXNzaW9uTWV0YShhY3RpdmVTZXNzaW9uSWQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1c1xuICAgIGlmICghc3RhdHVzKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5KGFjdGl2ZVNlc3Npb25JZCwgc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdClcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgaWYgKHNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbihzdGF0dXMsIHRhaWwsIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQpKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lKGluaXRpYWxDaGF0SWQsIHByZXZpb3VzSW5pdGlhbENoYXRJZCkpIHtcbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbihpbml0aWFsQ2hhdElkLCBjdXJyZW50Q2hhdElkLmN1cnJlbnQpICYmIGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIC8vIE5PIGFib3J0YW1vcyBlbCBzdHJlYW0gYW50ZXJpb3I6IHB1ZWRlIHNlZ3VpciBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIC8vIFNvbG8gY2FtYmlhbW9zIGRlIHNlc2nDs24gYWN0aXZhOyBlbCBtb3RvciBydXRlYSBjYWRhIHN0cmVhbSBwb3Igc3VcbiAgICAgIC8vIHNlc3Npb25JZCwgYXPDrSBxdWUgbG9zIHRva2VucyBkZSBsYSBzZXNpw7NuIHByZXZpYSBzaWd1ZW4gYXBsaWPDoW5kb3NlIGFcbiAgICAgIC8vIEVTQSBzZXNpw7NuIChzdG9yZSksIG5vIGEgbGEgbnVldmEuXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoaW5pdGlhbENoYXRJZClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgLy8gaXNQcm9jZXNzaW5nUmVmIHJlZmxlamEgc2kgbGEgc2VzacOzbiBBQ1RJVkEgZXN0w6Egb2N1cGFkYS4gU2kgbGEgc2VzacOzblxuICAgICAgLy8gYSBsYSBxdWUgZW50cmFtb3Mgc2lndWUgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQsIHF1ZWRhIGJsb3F1ZWFkYTsgc2kgbm8sXG4gICAgICAvLyBzZSBoYWJpbGl0YSBlbCBlbnbDrW8gYXVucXVlIG90cmFzIHNlc2lvbmVzIHNpZ2FuIGdlbmVyYW5kby5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoaW5pdGlhbENoYXRJZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBsb2FkTWVzc2FnZXMgbG8gZGlzcGFyYSB1c2VDaGF0TWVzc2FnZXMgYWwgY2FtYmlhciBjaGF0SWQgKGNvbiBjYWNoZSBlbiBtZW1vcmlhKS5cbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0VGFza10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRBY3RpdmVDaGF0SWQoaW5pdGlhbENoYXRJZCB8fCBudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZCwgc2V0QWN0aXZlQ2hhdElkXSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHJldHJ5U25hcHNob3QgPSByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnRcbiAgICAgIGlmIChyZXNvbHZlU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUoQm9vbGVhbihyZXRyeVNuYXBzaG90KSkgPT09ICdyZXRyeS1yZXN0b3JlJyAmJiByZXRyeVNuYXBzaG90KSB7XG4gICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHJldHJ5U25hcHNob3RcbiAgICAgICAgcmVwbGFjZU1lc3NhZ2VzKHJldHJ5U25hcHNob3QpXG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdlcnJvcicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXJyb3InKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZUtleSwgdG9rZW5zVXNlZCwgc2hvd1JldHJ5IH0gPSByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5KGVycm9yTWVzc2FnZSwgZXJyb3JSYXdNZXNzYWdlKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlKG1lc3NhZ2VLZXksIHQsIHRva2Vuc1VzZWQpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgc2hvd1JldHJ5LFxuICAgICAgICAgIHJldHJ5TGFiZWw6IHQoJ2NoYXQucmV0cnknKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCByZXBsYWNlTWVzc2FnZXMsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcblxuICAgICAgLy8gQXNlZ3VyYW1vcyBlbCBwbGFjZWhvbGRlciB1bmEgw7puaWNhIHZleiBwb3Igc3RyZWFtLCB0YW50byBlbiBlbCBzdG9yZVxuICAgICAgLy8gZGUgbGEgc2VzacOzbiBjb21vIGVuIGxhIHZpc3RhIHNpIGVzIGxhIGFjdGl2YS4gRWwgdGV4dG8gZW4gdml2byB2aWFqYVxuICAgICAgLy8gcG9yIHNlc3Npb25TdHJlYW1pbmdUZXh0IChleHRlcm5vKSwgc2luIHJlLXJlbmRlciBkZWwgw6FyYm9sIGNvbXBsZXRvLlxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJFeGlzdHMgPSB1c2VTZXNzaW9uc1N0b3JlXG4gICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgIC5nZXRNZXNzYWdlcyhzZXNzaW9uSWQpXG4gICAgICAgIC5zb21lKG1zZyA9PiBtc2cuaWQgPT09IHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmICghcGxhY2Vob2xkZXJFeGlzdHMpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IHBsYWNlaG9sZGVySWQsXG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHBsYWNlaG9sZGVySWRcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIH1cblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY3R4OiBTdHJlYW1Db250ZXh0LFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGwsXG4gICAgICAvKiogUG9zaWNpb25hbDogbWFzdGVyIG5vIGxvIGNvbnN1bWUsIHBlcm8gYHJlYXNvbmluZ2AgdmllbmUgZGVzcHXDqXMuICovXG4gICAgICBfcmVzb2x2ZWRDb250ZXh0PzogYW55LFxuICAgICAgcmVhc29uaW5nPzogUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCxcbiAgICAgIG11bHRpcGxlQ2hvaWNlPzogaW1wb3J0KCcuLi8uLi90eXBlcy9DaGF0JykuTXVsdGlwbGVDaG9pY2UgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gcGxhY2Vob2xkZXJJZFxuICAgICAgLy8gRWwgcGxhY2Vob2xkZXIgc2FsZSBkZWwgc3RvcmUgcG9yLXNlc2nDs24geWE6IGVsIGVmZWN0byBkZSByZWNvbmNpbGlhY2nDs25cbiAgICAgIC8vIGxvIHVzYSBwYXJhIGRldGVjdGFyIHJlc3B1ZXN0YXMgaHXDqXJmYW5hcyB5IGRlIGFjw6EgYWwgY29tbWl0IHB1ZWRlIGhhYmVyXG4gICAgICAvLyB1biBhd2FpdC4gTGEgdmlzdGEgbG9jYWwgbG8gc3VlbHRhIG3DoXMgYWJham8sIGp1bnRvIGFsIGNvbW1pdC5cbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIEVsIHRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIGVzdMOhIGtleWVkIHBvciBlbCBwbGFjZWhvbGRlcjsgbG8gbW92ZW1vcyBhbFxuICAgICAgLy8gaWQgZGVmaW5pdGl2byBwYXJhIHF1ZSBlbCBibG9xdWUgZGUgcmF6b25hbWllbnRvIHNvYnJldml2YSBhbCBzd2FwLlxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSByZXNvbHZlU3RyZWFtRmluaXNoRmluYWxNZXNzYWdlSWQobWVtb3J5U2Vzc2lvbklkKVxuICAgICAgLy8gUHJlZmVyaXIgZWwgc25hcHNob3QgZW4gdml2byAobmFycmFjacOzbiBhbmNsYWRhIGFsIGluaWNpbykgc29icmUgZWxcbiAgICAgIC8vIGBjb21wbGV0ZWAgZGVsIGJhY2ssIHF1ZSBzdWVsZSBtYW5kYXIgZXNhIG5hcnJhY2nDs24gYWwgZmluYWwuXG4gICAgICBjb25zdCBjb21wYWN0aW9uID0gY29tcGFjdGlvbkZvcih0ZW1wTWVzc2FnZUlkLCByZWFzb25pbmcpXG4gICAgICBjb25zdCBmaW5hbFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZCkgPz8gbWFwUmVhc29uaW5nVHJhY2UocmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuXG4gICAgICAvLyBTZXNpw7NuIGVuIGJhY2tncm91bmQ6IGNlcnJhbW9zIGxlYW4uIEVsIGJhY2tlbmQgeWEgcGVyc2lzdGnDsyBsYVxuICAgICAgLy8gcmVzcHVlc3RhLCBhc8OtIHF1ZSBhbCB2b2x2ZXIgYSBsYSBzZXNpw7NuIHNlIGNhcmdhIGRlc2RlIGFow60uIEF2aXNhbW9zXG4gICAgICAvLyBxdWUgdGVybWluw7MgKHVucmVhZCArIGV2ZW50byBwYXJhIHRvYXN0L3NvbmlkbykuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICAgIGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgbXVsdGlwbGVDaG9pY2UsXG4gICAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRlbnRUb0FkZCxcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAsXG4gICAgICAgIGhvdXJzQ2hhcmdlVG9vbHMsXG4gICAgICAgIGFmZmVjdGVkVGFza0lkcyxcbiAgICAgICAgbWFudWFsV2FzVGFza0VkaXQsXG4gICAgICAgIG1hbnVhbFdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc1Rhc2tFZGl0LFxuICAgICAgICB3YXNUYXNrRGVsZXRlLFxuICAgICAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgIH0gPSBhd2FpdCByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1JlZi5jdXJyZW50LFxuICAgICAgICB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICB0YXNrVXJsUmVnZXgsXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgICAgIHBhdGhuYW1lOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIGdldFRhYlRhc2tEZWZhdWx0LFxuICAgICAgICBtdWx0aUFnZW50c0FjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgIG1hbnVhbEFwcHJvdmFsLFxuICAgICAgICBhcHBseURhc2hib2FyZE11dGF0aW9uOiAobXV0YXRpb24sIHRhc2tJZHMpID0+IHtcbiAgICAgICAgICBhcHBseVByb2plY3REYXNoYm9hcmRNdXRhdGlvbihtdXRhdGlvbiwgdGFza0lkcywgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQpXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzKHtcbiAgICAgICAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMsXG4gICAgICAgIG1hbnVhbEFwcHJvdmFsVG9vbE5hbWU6IG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzPy50b29sTmFtZSxcbiAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgYWdlbnRUeXBlOiBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KSxcbiAgICAgICAgbm9ybWFsaXplVG9vbE5hbWU6IG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgICAgICAgYnVpbGRBY3Rpb25UeXBlTGlzdDogYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gICAgICB9KS5mb3JFYWNoKHBheWxvYWQgPT4ge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwgcGF5bG9hZClcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuXG4gICAgICBpZiAoaG91cnNDaGFyZ2VUb29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCh7XG4gICAgICAgICAgc291cmNlOiAnbWFpYScsXG4gICAgICAgICAgdG9vbHM6IGhvdXJzQ2hhcmdlVG9vbHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwoXG4gICAgICAgICAgb3BlblRhc2tQYW5lbElkLFxuICAgICAgICAgIHsgd2FzVGFza0VkaXQsIHdhc1Rhc2tEZWxldGUgfSxcbiAgICAgICAgICB7IG1hbnVhbFdhc1Rhc2tFZGl0LCBtYW51YWxXYXNUYXNrRGVsZXRlIH0sXG4gICAgICAgICAgYWZmZWN0ZWRUYXNrSWRzXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB3aW5kb3cudGFza1BhbmVsPy5yZWZldGNoVGFzaz8uKClcbiAgICAgIH1cblxuICAgICAgLy8gU3dhcCBwbGFjZWhvbGRlciDihpIgbWVuc2FqZSBmaW5hbC4gVmEgZW4gYGZsdXNoU3luY2AgcG9ycXVlIGVsIG1vdG9yIHlhXG4gICAgICAvLyBkZWrDsyBlbmNvbGFkYXMgbGFzIGVzY3JpdHVyYXMgZGUgZmluIGRlIHN0cmVhbSAoaXNXcml0aW5nLCBhY3Rpdml0eSxcbiAgICAgIC8vIHN0YXR1cyksIHkgZXNhcyB2aWFqYW4gZW4gU3luY0xhbmUgcG9yIHNlciBkZSB1biBzdG9yZSBleHRlcm5vIG1pZW50cmFzXG4gICAgICAvLyBxdWUgZXN0b3Mgc2V0U3RhdGUgdmlhamFuIGVuIERlZmF1bHRMYW5lLiBTaW4gZm9yemFybG8sIFJlYWN0IHBpbnRhXG4gICAgICAvLyBwcmltZXJvIGVsIHBsYWNlaG9sZGVyIHlhIHNpbiBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkICh0dXJubyA0MXB4IG3DoXNcbiAgICAgIC8vIGJham8pIHkgcmVjacOpbiB+MjVtcyBkZXNwdcOpcyBlbCBtZW5zYWplIGRlZmluaXRpdm86IGVzZSBzYWx0byBkZSBpZGEgeVxuICAgICAgLy8gdnVlbHRhIGVyYSBlbCBmbGlja2VyIGRlIGZpbiBkZSBzdHJlYW0uIENvbiBlbCBmbHVzaCwgdG9kbyBlbCBmaW4gZGVcbiAgICAgIC8vIHN0cmVhbSBlbnRyYSBlbiB1biDDum5pY28gY29tbWl0LlxuICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50VG9BZGQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIG11bHRpcGxlQ2hvaWNlLFxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHsgaXNDaGF0Vmlld1Zpc2libGUsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgaWYgKHNob3VsZE1hcmtDaGF0UmVhZEFmdGVyU3RyZWFtRmluaXNoKGlzQWN0aXZlLCBpc0NoYXRWaWV3VmlzaWJsZSkpIHtcbiAgICAgICAgYXdhaXQgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkLCB7IGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGREaXNwYXRjaEZpcnN0U2Vzc2lvblJlZmV0Y2goZmlyc3RUaW1lUmVmLmN1cnJlbnQpKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgLy8gYHBhcnRpYWxUZXh0YCBsbyByZXNjYXRhIGBzdG9wU3RyZWFtYCBhbnRlcyBkZSBsaW1waWFyIGVsIHN0b3JlIGV4dGVybm86IGVsIHRleHRvIGVuIHZpdm9cbiAgLy8gbm8gdml2ZSBlbiBgbWVzc2FnZXNgLCBhc8OtIHF1ZSBzaW4gZXN0byBsYSByZXNwdWVzdGEgYSBtZWRpYXMgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBhdW5xdWVcbiAgLy8gZWwgYmFja2VuZCBzw60gbGEgaGF5YSBwZXJzaXN0aWRvLlxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIEVsIHN0b3Agc2llbXByZSBhcGxpY2EgYSBsYSBzZXNpw7NuIGFjdGl2YSAoYm90w7NuIGRlbCBpbnB1dCB2aXNpYmxlKS5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCB7IGZpbmFsTWVzc2FnZUlkLCBjYW5jZWxsZWRNZXNzYWdlSWQgfSA9IHJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyhjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCBzdG9wcGVkVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IodGVtcE1lc3NhZ2VJZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3Aoc3RvcHBlZFRyYWNlLCBjb21wYWN0aW9uKSkge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2godGVtcE1lc3NhZ2VJZCwgbnVsbClcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVtb3ZlKHRlbXBNZXNzYWdlSWQpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0aWFsVGV4dCkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICAgIGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgICAgcGFydGlhbFRleHQsXG4gICAgICAgICAgICBzdG9wcGVkVHJhY2UsXG4gICAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgIGNhbmNlbGxlZE1lc3NhZ2VJZCxcbiAgICAgICAgICBjYW5jZWxsZWRMYWJlbDogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQoYXBwcm92YWwsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bE91dGNvbWUgPSByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lKGFwcHJvdmFsKVxuXG4gICAgICAvLyBQcmVhcHJvYmFkbzogcG9yIGRldGVjY2nDs24gbWFudWFsIG8gcG9yIGF1dG8tYXBwcm92ZS4gRW4gYW1ib3MgY2Fzb3MgZWxcbiAgICAgIC8vIHN0cmVhbSBjb250aW7DumEgeSBubyBoYXkgcXVlIHBpbnRhciBsYSBjYWphIGRlIGFwcm9iYWNpw7NuLlxuICAgICAgaWYgKGhpdGxPdXRjb21lLnR5cGUgPT09ICdza2lwLXVpJykge1xuICAgICAgICB0cmFja01hbnVhbEhpdGxFdmVudHMoXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgeyBpbXByZXNzaW9uOiBFVkVOVFMuYWlDaGF0SGl0bCwgb3B0aW9uOiBFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiB9LFxuICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZi5jdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UoYXBwcm92YWwpXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBza2lwcGVkTWFudWFsQXBwcm92YWwgPSByZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbChhcHByb3ZhbClcbiAgICAgICAgaWYgKHNraXBwZWRNYW51YWxBcHByb3ZhbCAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gc2tpcHBlZE1hbnVhbEFwcHJvdmFsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsTWVzc2FnZUlkIH0gPSBoaXRsT3V0Y29tZVxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IocGxhY2Vob2xkZXJJZCwgYXBwcm92YWwucmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHBsYWNlaG9sZGVySWQsIGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXBwcm92YWxUcmFjZSA9IG1hcFJlYXNvbmluZ1RyYWNlKGFwcHJvdmFsLnJlYXNvbmluZykgPz8gcmVhc29uaW5nVHJhY2VGb3IoYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSh7XG4gICAgICAgICAgYXBwcm92YWxNZXNzYWdlSWQsXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHJlYXNvbmluZzogYXBwcm92YWxUcmFjZSxcbiAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnYXBwcm92YWxfcmVxdWlyZWQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50LCBjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgZXZlbnRdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICB1c2VJbnNlcnRpb25FZmZlY3QoKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCA9ICgpID0+IHtcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIC8vIFNlIHRvbWEgYW50ZXMgZGUgY3VhbHF1aWVyIGVhcmx5IHJldHVybjogc2kgZXN0ZSBlbnbDrW8gbm8gc2FsZSwgbGEgcmVzcHVlc3RhIG5vIGRlYmUgY29sZ2Fyc2UgZGVsIHByw7N4aW1vLlxuICAgICAgY29uc3QgbXVsdGlwbGVDaG9pY2VBbnN3ZXIgPSB1c2VNdWx0aXBsZUNob2ljZVN0b3JlLmdldFN0YXRlKCkudGFrZUFuc3dlcigpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3Qgd2lsbFN0YXJ0TmV3U3RyZWFtID0gIXNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IHNlbmRHYXRlID0gcmVzb2x2ZVNlbmRNZXNzYWdlR2F0ZSh7XG4gICAgICAgIGlzUHJvY2Vzc2luZzogaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICB3aWxsU3RhcnROZXdTdHJlYW0sXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNvdW50OiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpLFxuICAgICAgICBtYXhDb25jdXJyZW50OiBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLFxuICAgICAgfSlcbiAgICAgIGlmIChzZW5kR2F0ZSA9PT0gJ2NvbmN1cnJlbmN5Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc2VuZEdhdGUgPT09ICdidXN5Jykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZpZWxkcyA9IHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMob3B0aW9ucywge1xuICAgICAgICBmYXFJZCxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgICAgIG1lbnRpb25zLFxuICAgICAgICBmdWFJZCxcbiAgICAgICAgc2NJZCxcbiAgICAgICAgY29udGV4dERhdGEsXG4gICAgICB9KVxuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShwYXlsb2FkRmllbGRzLm1lbnRpb25zKVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGaWVsZHMuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRGaWVsZHMuc2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0QWN0aXZlQ2hhdElkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gcmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZChtZXNzYWdlc1JlZi5jdXJyZW50KVxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuXG4gICAgICBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGRpc3BsYXlNZXNzYWdlKSxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHJlc29sdmVVc2VyUXVlc3Rpb25NZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KSxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKG11bHRpcGxlQ2hvaWNlQW5zd2VyID8geyBtdWx0aXBsZUNob2ljZUFuc3dlciB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBmaW5hbE1lc3NhZ2UgPSByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpLFxuICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKG1lc3NhZ2VzUmVmLmN1cnJlbnQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCh7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiByZXNvbHZlQWdlbnRJZEZvclN0cmVhbShjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMsIGFnZW50Py5pZCksXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGN0eFByb2plY3QsXG4gICAgICAgIGN0eENsaWVudCxcbiAgICAgICAgY3R4VGFzayxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3RzPy5sZW5ndGggPyBwcm9qZWN0c1swXS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgZmFxSWQ6IHBheWxvYWRGaWVsZHMuZmFxSWQsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkRmllbGRzLmFnZW50U3VnZ2VzdGlvbklkLFxuICAgICAgICBmdWFJZDogcGF5bG9hZEZpZWxkcy5mdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZEZpZWxkcy5zY0lkLFxuICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgYWdlbnRFbW9qaTogYWdlbnQ/LmVtb2ppLFxuICAgICAgICBjb250ZXh0TWVzc2FnZSxcbiAgICAgICAgY29udGV4dERhdGE6IHBheWxvYWRGaWVsZHMuY29udGV4dERhdGEsXG4gICAgICAgIG11bHRpcGxlQ2hvaWNlQW5zd2VyLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKHNob3VsZFVwZGF0ZVByb2plY3RPbkNoYW5nZShvcHRpb24uaWQsIHByb2plY3Q/LmlkKSkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZShjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsIHByb2plY3QpKSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKG1lc3NhZ2VzUmVmLmN1cnJlbnQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgYXNrTWFpYShcbiAgICAgICAgICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZEZvclByb2plY3RDaGFuZ2Uoe1xuICAgICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICAgIHByb2plY3Q6IG9wdGlvbixcbiAgICAgICAgICAgIGF1dGhVc2VyLFxuICAgICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgICAgIGFnZW50VHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCByZXRyeU1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3QgcmV0cnlCbG9jayA9IHJlc29sdmVSZXRyeUJsb2NrUmVhc29uKHtcbiAgICAgICAgaXNQcm9jZXNzaW5nOiBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGlzU2Vzc2lvblN0cmVhbUFjdGl2ZTogc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ291bnQ6IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCksXG4gICAgICAgIG1heENvbmN1cnJlbnQ6IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMsXG4gICAgICB9KVxuICAgICAgaWYgKHJldHJ5QmxvY2sgPT09ICdjb25jdXJyZW5jeScpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHJldHJ5QmxvY2sgIT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICBjb25zdCByZXRyeUVsaWdpYmlsaXR5ID0gcmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHkocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSwgdXNlck1lc3NhZ2UpXG4gICAgICBpZiAoIXJldHJ5RWxpZ2liaWxpdHkuZWxpZ2libGUgfHwgIXVzZXJNZXNzYWdlKSByZXR1cm5cblxuICAgICAgY29uc3QgeyB0dXJuSWQsIHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIH0gPSByZXRyeUVsaWdpYmlsaXR5XG5cbiAgICAgIGNvbnN0IHRydW5jYXRlZCA9IG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuKHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgc2V0QWN0aXZlQ2hhdElkKHNlc3Npb25JZClcblxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gdXNlck1lc3NhZ2UubWVzc2FnZVxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtuZXdNZXNzYWdlSWR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRNZXNzYWdlcyA9IFsuLi50cnVuY2F0ZWQsIHBsYWNlaG9sZGVyXVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG5leHRNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKG5leHRNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gdHJ1bmNhdGVkLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWQpXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSB0cnVuY2F0ZWQuYXQoLTEpPy5hZ2VudElkIHx8IG1lc3NhZ2UuYWdlbnRJZFxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSByZXNvbHZlUmV0cnlVc2VyQXR0YWNobWVudHModXNlck1lc3NhZ2UpXG5cbiAgICAgIGNvbnN0IHJlcGxheVZpYU9yY2hlc3RyYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXModHJ1bmNhdGVkLCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RUb1JlcXVlc3QgPyBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSkgOiBudWxsXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXNrTWFpYShcbiAgICAgICAgICBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgICAgIGF1dGhVc2VyLFxuICAgICAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICBhZ2VudElkOiByZXNvbHZlQWdlbnRJZEZvclN0cmVhbShjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMsIGFnZW50Py5pZCksXG4gICAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogQm9vbGVhbihpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgICAgICBjdHhQcm9qZWN0LFxuICAgICAgICAgICAgY3R4Q2xpZW50LFxuICAgICAgICAgICAgY3R4VGFzayxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0cz8ubGVuZ3RoID8gcHJvamVjdHNbMF0ubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgYWdlbnRFbnRpdHk6IGFnZW50Py5lbnRpdHksXG4gICAgICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgICAgICAgYWdlbnRFbW9qaTogYWdlbnQ/LmVtb2ppLFxuICAgICAgICAgICAgY29udGV4dE1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlLFxuICAgICAgICAgICAgbXVsdGlwbGVDaG9pY2VBbnN3ZXI6IHVzZXJNZXNzYWdlLm11bHRpcGxlQ2hvaWNlQW5zd2VyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLm11bHRpcGxlQ2hvaWNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzdGO0FBQ0E7QUFDQSxTQUFTQyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBQzlCLFNBQVNDLFlBQVksUUFBUSxpQkFBaUI7QUFFOUMsU0FDRUMsa0NBQWtDLEVBQ2xDQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixFQUM3QkMsNEJBQTRCLEVBQzVCQyw2QkFBNkIs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
|