@projectcor/maia-components 2.11.96-0 → 2.11.96-1
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/components/atoms/Chip/Chip.js +12 -5
- package/lib/components/atoms/Chip/styles.js +6 -6
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +121 -28
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -2
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +88 -25
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +33 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.js +385 -270
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +5 -8
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +23 -0
- package/lib/components/atoms/MAIAInput/styles.js +99 -83
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +54 -41
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +25 -12
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +42 -0
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +33 -0
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +35 -0
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +44 -0
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +35 -0
- package/lib/components/atoms/icons/index.js +10 -2
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +18 -7
- package/lib/components/molecules/ChatAIHome/styles.js +54 -38
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +17 -81
- package/lib/components/molecules/ChatAIMessages/newStyles.js +10 -26
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +62 -196
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +18 -28
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +2 -12
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +3 -22
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +1 -5
- package/lib/components/molecules/ChatFooter/ChatFooter.js +24 -65
- package/lib/components/molecules/Sidebar/Sidebar.js +73 -109
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +1 -16
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +29 -34
- package/lib/components/organisms/ChatAI/ChatAI.js +2 -6
- package/lib/hooks/useChatManager/useChatManager.js +438 -530
- package/lib/hooks/useChatMessages/useChatMessages.js +236 -414
- package/lib/hooks/useChats/useChats.js +4 -21
- package/lib/hooks/useMentionPopover.js +4 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +521 -139
- package/lib/hooks/useStreamingMessage/index.js +3 -2
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +17 -13
- package/lib/lang/br/index.js +6 -13
- package/lib/lang/en/index.js +6 -13
- package/lib/lang/es/index.js +6 -13
- package/lib/lang/fr/index.js +9 -14
- package/lib/services/maia/Chats/getChatsByUserId.js +4 -6
- package/lib/services/maia/Chats/index.js +1 -3
- package/lib/store/chatsStore.types.js +1 -1
- package/lib/store/useChatsStore.js +12 -149
- package/lib/styles/config.js +2 -2
- package/lib/types/Chat.js +1 -1
- package/package.json +1 -1
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +0 -17
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +0 -15
- package/lib/components/atoms/SessionGeneratingDot/index.js +0 -2
- package/lib/components/atoms/icons/MaiaSparkleIcon.js +0 -75
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +0 -55
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +0 -46
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +0 -2
- package/lib/services/maia/Chats/markSessionAsRead.js +0 -32
- package/lib/store/chatsSidebarOptimistic.js +0 -92
- package/lib/store/maiaMinimizedPersistence.js +0 -49
- package/lib/store/sessions/activeView.js +0 -22
- package/lib/store/sessions/index.js +0 -9
- package/lib/store/sessions/sessionHitlContext.js +0 -15
- package/lib/store/sessions/sessionNotificationSound.js +0 -57
- package/lib/store/sessions/sessionNotifications.js +0 -110
- package/lib/store/sessions/sessionNotifications.types.js +0 -2
- package/lib/store/sessions/sessionStreamManager.js +0 -576
- package/lib/store/sessions/sessionStreamingText.js +0 -80
- package/lib/store/sessions/sessions.types.js +0 -35
- package/lib/store/sessions/useSessionMeta.js +0 -39
- package/lib/store/sessions/useSessionStreamingText.js +0 -18
- package/lib/store/sessions/useSessionsStore.js +0 -197
- package/lib/utils/formatUnreadCount.js +0 -6
|
@@ -11,39 +11,46 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
11
11
|
/* eslint-disable prefer-destructuring */
|
|
12
12
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
13
13
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
14
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
14
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
15
15
|
import { createPortal } from 'react-dom';
|
|
16
16
|
import { Popover } from '@mui/material';
|
|
17
|
-
import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
|
|
18
|
-
import { Attach } from '@projectcor/icons/lib/components/Attach';
|
|
19
|
-
import { Globe } from '@projectcor/icons/lib/components/Globe';
|
|
20
|
-
import { Trash } from '@projectcor/icons/lib/components/Trash';
|
|
21
|
-
import { Plus } from '@projectcor/icons/lib/components/Plus';
|
|
22
17
|
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
23
18
|
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
24
19
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
25
|
-
import
|
|
26
|
-
import {
|
|
20
|
+
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCInputChipsRow, SCInputMetaIconButton, SCInputMetaIndicators, SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIAttachmentDeleteOverlay, SCMIAttachmentIcon, SCMIAttachmentName, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, SCInputEditorCell, SCInputToolbarRow, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
|
|
21
|
+
import { getMaiaInputEditorMaxHeight, MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX } from './maiaInputLayout';
|
|
27
22
|
import { useGlobalContext } from '../../../context/global-context';
|
|
28
23
|
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
29
24
|
import { SlashCommandDropdown } from '../SlashCommandDropdown';
|
|
30
25
|
import { useSlashCommands } from '../../../hooks/useSlashCommands';
|
|
31
26
|
import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
|
|
32
27
|
import { useT } from '../../../hooks/useT';
|
|
33
|
-
import {
|
|
28
|
+
import { MaiaInputAddIcon } from '../icons/MaiaInputAddIcon';
|
|
29
|
+
import { MaiaInputAttachIcon } from '../icons/MaiaInputAttachIcon';
|
|
30
|
+
import { MaiaInputAttachmentImageIcon } from '../icons/MaiaInputAttachmentImageIcon';
|
|
31
|
+
import { MaiaInputDeepSearchIcon } from '../icons/MaiaInputDeepSearchIcon';
|
|
32
|
+
import { CorAccessIcon } from '../icons/CorAccessIcon';
|
|
33
|
+
import { MaiaInputMentionIcon } from '../icons/MaiaInputMentionIcon';
|
|
34
|
+
import { MaiaInputRobotIcon } from '../icons/MaiaInputRobotIcon';
|
|
35
|
+
import { MaiaInputSendIcon } from '../icons/MaiaInputSendIcon';
|
|
36
|
+
import { MaiaInputSlashIcon } from '../icons/MaiaInputSlashIcon';
|
|
37
|
+
import { MaiaInputWebSearchIcon } from '../icons/MaiaInputWebSearchIcon';
|
|
34
38
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
35
39
|
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
36
40
|
import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
|
|
37
41
|
import { allowedFileTypes, fileTypes, MAX_FILE_SIZE_MB_MAIA_VISION, MAX_FILE_SIZE_MB_OLD, MAX_FILE_SIZE_MB_AUDIO, MAX_CHAT_INPUT_ATTACHMENTS } from '../../../constants/formatExtensions';
|
|
38
42
|
import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
|
|
43
|
+
import { Chip } from '../Chip';
|
|
39
44
|
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
40
45
|
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
41
46
|
// eslint-disable-next-line import/no-cycle
|
|
42
47
|
import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
43
48
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
44
49
|
var TOOL_CHIP_EXIT_MS = 220;
|
|
50
|
+
var SLASH_DROPDOWN_WIDTH_PX = 340;
|
|
51
|
+
var SLASH_DROPDOWN_LEFT_OFFSET_PX = 24;
|
|
45
52
|
export var MAIAInput = function MAIAInput(_ref) {
|
|
46
|
-
var _agent$entity;
|
|
53
|
+
var _agent$entity, _contextChip$items, _contextChip$items2, _agent$connectors, _agent$model_display_, _contextChip$items3;
|
|
47
54
|
var onSendMessage = _ref.onSendMessage,
|
|
48
55
|
className = _ref.className,
|
|
49
56
|
disabled = _ref.disabled,
|
|
@@ -52,7 +59,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
52
59
|
onStopGeneration = _ref.onStopGeneration,
|
|
53
60
|
placeholder = _ref.placeholder,
|
|
54
61
|
onChange = _ref.onChange,
|
|
55
|
-
onFocus = _ref.onFocus,
|
|
56
62
|
_ref$alignButtons = _ref.alignButtons,
|
|
57
63
|
alignButtons = _ref$alignButtons === void 0 ? 'vertical' : _ref$alignButtons,
|
|
58
64
|
onFileAttach = _ref.onFileAttach,
|
|
@@ -63,25 +69,28 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
63
69
|
newChatKey = _ref.newChatKey,
|
|
64
70
|
tooltipZIndex = _ref.tooltipZIndex,
|
|
65
71
|
externalPopoverAnchorRef = _ref.popoverAnchorRef,
|
|
66
|
-
layoutMode = _ref.layoutMode
|
|
72
|
+
layoutMode = _ref.layoutMode,
|
|
73
|
+
contextChip = _ref.contextChip;
|
|
67
74
|
var _useT = useT(),
|
|
68
75
|
t = _useT.t;
|
|
69
76
|
var editorRef = useRef(null);
|
|
70
77
|
var fileInputRef = useRef(null);
|
|
78
|
+
var chipsRowRef = useRef(null);
|
|
79
|
+
var toolbarRowRef = useRef(null);
|
|
71
80
|
var internalWrapperRef = useRef(null);
|
|
72
81
|
var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
|
|
73
82
|
var _useState = useState(false),
|
|
74
83
|
_useState2 = _slicedToArray(_useState, 2),
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
var _useState3 = useState(
|
|
84
|
+
hasTypingPresence = _useState2[0],
|
|
85
|
+
setHasTypingPresence = _useState2[1];
|
|
86
|
+
var _useState3 = useState(0),
|
|
78
87
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var _useState5 = useState(
|
|
88
|
+
chipsRowHeight = _useState4[0],
|
|
89
|
+
setChipsRowHeight = _useState4[1];
|
|
90
|
+
var _useState5 = useState(MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX),
|
|
82
91
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
toolbarRowHeight = _useState6[0],
|
|
93
|
+
setToolbarRowHeight = _useState6[1];
|
|
85
94
|
var _useState7 = useState({
|
|
86
95
|
isOpen: false,
|
|
87
96
|
excludedFiles: [],
|
|
@@ -153,6 +162,39 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
153
162
|
slashQuery = _useState16[0],
|
|
154
163
|
setSlashQuery = _useState16[1];
|
|
155
164
|
var slashMenuWasOpenRef = useRef(false);
|
|
165
|
+
var slashDropdownZIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
166
|
+
var _useState17 = useState({
|
|
167
|
+
bottom: 0,
|
|
168
|
+
left: 0
|
|
169
|
+
}),
|
|
170
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
171
|
+
slashDropdownPos = _useState18[0],
|
|
172
|
+
setSlashDropdownPos = _useState18[1];
|
|
173
|
+
var positionSlashDropdown = useCallback(function () {
|
|
174
|
+
var _wrapperRef$current;
|
|
175
|
+
var rect = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.getBoundingClientRect();
|
|
176
|
+
if (!rect || rect.width <= 0) return;
|
|
177
|
+
var viewportH = window.innerHeight;
|
|
178
|
+
var viewportW = window.innerWidth;
|
|
179
|
+
var left = Math.max(8, Math.min(viewportW - SLASH_DROPDOWN_WIDTH_PX - 8, rect.left + SLASH_DROPDOWN_LEFT_OFFSET_PX));
|
|
180
|
+
setSlashDropdownPos({
|
|
181
|
+
left: left,
|
|
182
|
+
bottom: viewportH - rect.top + 4
|
|
183
|
+
});
|
|
184
|
+
}, [wrapperRef]);
|
|
185
|
+
useLayoutEffect(function () {
|
|
186
|
+
if (!showSlashDropdown) return undefined;
|
|
187
|
+
positionSlashDropdown();
|
|
188
|
+
var handler = function handler() {
|
|
189
|
+
return positionSlashDropdown();
|
|
190
|
+
};
|
|
191
|
+
window.addEventListener('scroll', handler, true);
|
|
192
|
+
window.addEventListener('resize', handler);
|
|
193
|
+
return function () {
|
|
194
|
+
window.removeEventListener('scroll', handler, true);
|
|
195
|
+
window.removeEventListener('resize', handler);
|
|
196
|
+
};
|
|
197
|
+
}, [showSlashDropdown, positionSlashDropdown]);
|
|
156
198
|
|
|
157
199
|
/** Tras elegir o quitar búsqueda web/profunda: volver al textarea (Popover/menu puede robar foco). */
|
|
158
200
|
var scheduleInputFocusAfterToolAction = function scheduleInputFocusAfterToolAction() {
|
|
@@ -168,6 +210,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
168
210
|
};
|
|
169
211
|
var closePlusMenu = function closePlusMenu() {
|
|
170
212
|
setPlusMenuAnchor(null);
|
|
213
|
+
scheduleInputFocusAfterToolAction();
|
|
171
214
|
};
|
|
172
215
|
var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
|
|
173
216
|
if (toolChipExitTimerRef.current !== null) {
|
|
@@ -176,6 +219,10 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
176
219
|
}
|
|
177
220
|
setToolChipExiting(false);
|
|
178
221
|
};
|
|
222
|
+
var handlePlusButtonMouseDown = function handlePlusButtonMouseDown(e) {
|
|
223
|
+
// Evita que el botón robe el foco del input al abrir el menú.
|
|
224
|
+
e.preventDefault();
|
|
225
|
+
};
|
|
179
226
|
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
180
227
|
e.stopPropagation();
|
|
181
228
|
if (plusMenuAnchor) {
|
|
@@ -187,6 +234,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
187
234
|
agent_type: analyticsAgentType
|
|
188
235
|
}, analyticsCloneEntityPayload));
|
|
189
236
|
};
|
|
237
|
+
var handleMentionButtonClick = function handleMentionButtonClick(e) {
|
|
238
|
+
var _editorRef$current2;
|
|
239
|
+
e.stopPropagation();
|
|
240
|
+
if (disabled) return;
|
|
241
|
+
closePlusMenu();
|
|
242
|
+
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMentionTrigger();
|
|
243
|
+
};
|
|
190
244
|
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
191
245
|
var _fileInputRef$current;
|
|
192
246
|
closePlusMenu();
|
|
@@ -255,14 +309,20 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
255
309
|
}, analyticsCloneEntityPayload));
|
|
256
310
|
scheduleInputFocusAfterToolAction();
|
|
257
311
|
};
|
|
312
|
+
var handlePlusMenuQuickActions = function handlePlusMenuQuickActions() {
|
|
313
|
+
var _editorRef$current3;
|
|
314
|
+
setPlusMenuAnchor(null);
|
|
315
|
+
if (disabled) return;
|
|
316
|
+
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.insertSlashTrigger();
|
|
317
|
+
};
|
|
258
318
|
useEffect(function () {
|
|
259
319
|
if (!disabled) {
|
|
260
|
-
var _editorRef$
|
|
261
|
-
(_editorRef$
|
|
320
|
+
var _editorRef$current4;
|
|
321
|
+
(_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
|
|
262
322
|
}
|
|
263
323
|
}, [disabled]);
|
|
264
324
|
useEffect(function () {
|
|
265
|
-
var _editorRef$
|
|
325
|
+
var _editorRef$current5;
|
|
266
326
|
var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
|
|
267
327
|
if (!draft || initialDraftAppliedRef.current || disabled) {
|
|
268
328
|
return;
|
|
@@ -271,16 +331,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
271
331
|
if (deepLinkSendPendingRef) {
|
|
272
332
|
deepLinkSendPendingRef.current = true;
|
|
273
333
|
}
|
|
274
|
-
(_editorRef$
|
|
334
|
+
(_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.setPlainText(draft);
|
|
275
335
|
setHasTypingPresence(true);
|
|
276
336
|
if (!disabled) {
|
|
277
|
-
var _editorRef$
|
|
278
|
-
(_editorRef$
|
|
337
|
+
var _editorRef$current6;
|
|
338
|
+
(_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
|
|
279
339
|
}
|
|
280
340
|
}, [initialDraft, disabled, deepLinkSendPendingRef]);
|
|
281
|
-
var compactSingleRowToolbar = useMemo(function () {
|
|
282
|
-
return attachments.length === 0 && !isWebSearchActive && !isDeepSearchActive && !hasWrappedToSecondLine;
|
|
283
|
-
}, [attachments.length, isWebSearchActive, isDeepSearchActive, hasWrappedToSecondLine]);
|
|
284
341
|
var sendDisabled = useMemo(function () {
|
|
285
342
|
return !hasTypingPresence && attachments.length === 0;
|
|
286
343
|
}, [hasTypingPresence, attachments.length]);
|
|
@@ -315,8 +372,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
315
372
|
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
316
373
|
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
317
374
|
setTimeout(function () {
|
|
318
|
-
var _editorRef$
|
|
319
|
-
if (!disabled) (_editorRef$
|
|
375
|
+
var _editorRef$current7;
|
|
376
|
+
if (!disabled) (_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.focus();
|
|
320
377
|
}, delay);
|
|
321
378
|
}
|
|
322
379
|
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
@@ -336,8 +393,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
336
393
|
}
|
|
337
394
|
var timeoutId = window.setTimeout(function () {
|
|
338
395
|
if (!disabled) {
|
|
339
|
-
var _editorRef$
|
|
340
|
-
(_editorRef$
|
|
396
|
+
var _editorRef$current8;
|
|
397
|
+
(_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
|
|
341
398
|
}
|
|
342
399
|
}, 200);
|
|
343
400
|
return function () {
|
|
@@ -368,13 +425,12 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
368
425
|
// Clear input when session changes (user switches to a different chat)
|
|
369
426
|
useEffect(function () {
|
|
370
427
|
var handleSessionChange = function handleSessionChange() {
|
|
371
|
-
var _editorRef$
|
|
428
|
+
var _editorRef$current9;
|
|
372
429
|
if (deepLinkSendPendingRef) {
|
|
373
430
|
deepLinkSendPendingRef.current = false;
|
|
374
431
|
}
|
|
375
|
-
(_editorRef$
|
|
432
|
+
(_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 || _editorRef$current9.clear();
|
|
376
433
|
setHasTypingPresence(false);
|
|
377
|
-
setHasWrappedToSecondLine(false);
|
|
378
434
|
setShowSlashDropdown(false);
|
|
379
435
|
setSlashQuery('');
|
|
380
436
|
resetMentionOpenTracking();
|
|
@@ -390,8 +446,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
390
446
|
var handleRefocus = function handleRefocus() {
|
|
391
447
|
if (disabled) return;
|
|
392
448
|
requestAnimationFrame(function () {
|
|
393
|
-
var _editorRef$
|
|
394
|
-
(_editorRef$
|
|
449
|
+
var _editorRef$current0;
|
|
450
|
+
(_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.focus();
|
|
395
451
|
});
|
|
396
452
|
};
|
|
397
453
|
document.addEventListener('maia-input-refocus', handleRefocus);
|
|
@@ -400,43 +456,41 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
400
456
|
};
|
|
401
457
|
}, [disabled]);
|
|
402
458
|
var handleSendMessage = useCallback(function () {
|
|
403
|
-
var _editorRef$
|
|
404
|
-
var state = (_editorRef$
|
|
459
|
+
var _editorRef$current1, _state$text, _state$mentions, _editorRef$current10;
|
|
460
|
+
var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
|
|
405
461
|
var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
|
|
406
462
|
if (!text.trim() && !attachments.length) return;
|
|
407
463
|
var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
|
|
408
464
|
onSendMessage(text, attachments, mentions);
|
|
409
|
-
(_editorRef$
|
|
465
|
+
(_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
|
|
410
466
|
setHasTypingPresence(false);
|
|
411
|
-
setHasWrappedToSecondLine(false);
|
|
412
467
|
setShowSlashDropdown(false);
|
|
413
468
|
setSlashQuery('');
|
|
414
469
|
resetMentionOpenTracking();
|
|
415
470
|
}, [attachments, onSendMessage, resetMentionOpenTracking]);
|
|
416
471
|
var handleSelectSlashCommand = useCallback(function (command) {
|
|
417
|
-
var _editorRef$
|
|
472
|
+
var _editorRef$current11, _state$text2, _editorRef$current13;
|
|
418
473
|
eventAmplitude(EVENTS.aiChatQuickActionSelect, {
|
|
419
474
|
type_quick_action: resolveQuickActionType(command),
|
|
420
475
|
origin_quick_action: 'slash_menu'
|
|
421
476
|
});
|
|
422
|
-
var state = (_editorRef$
|
|
477
|
+
var state = (_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 ? void 0 : _editorRef$current11.serialize();
|
|
423
478
|
var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
|
|
424
479
|
var triggerPart = "/".concat(slashQuery);
|
|
425
480
|
var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
|
|
426
481
|
var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
|
|
427
482
|
if (isEmptyBeforeTrigger) {
|
|
428
|
-
var _editorRef$
|
|
483
|
+
var _editorRef$current12;
|
|
429
484
|
onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
|
|
430
|
-
(_editorRef$
|
|
485
|
+
(_editorRef$current12 = editorRef.current) === null || _editorRef$current12 === void 0 || _editorRef$current12.clear();
|
|
431
486
|
setHasTypingPresence(false);
|
|
432
|
-
setHasWrappedToSecondLine(false);
|
|
433
487
|
setShowSlashDropdown(false);
|
|
434
488
|
setSlashQuery('');
|
|
435
489
|
slashMenuWasOpenRef.current = false;
|
|
436
490
|
resetMentionOpenTracking();
|
|
437
491
|
return;
|
|
438
492
|
}
|
|
439
|
-
(_editorRef$
|
|
493
|
+
(_editorRef$current13 = editorRef.current) === null || _editorRef$current13 === void 0 || _editorRef$current13.insertSlashCommand({
|
|
440
494
|
id: command.id,
|
|
441
495
|
label: command.title
|
|
442
496
|
});
|
|
@@ -449,27 +503,10 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
449
503
|
slashMenuWasOpenRef.current = false;
|
|
450
504
|
};
|
|
451
505
|
var handleEditorInput = useCallback(function (_ref4) {
|
|
452
|
-
var _editorRef$current12;
|
|
453
506
|
var text = _ref4.text,
|
|
454
507
|
trigger = _ref4.trigger,
|
|
455
508
|
slashTrigger = _ref4.slashTrigger;
|
|
456
|
-
|
|
457
|
-
var explicitMultiline = text.includes('\n');
|
|
458
|
-
var isLikelyFirstCharMeasurementGlitch = text.length <= 1 && !explicitMultiline && visualMultiline;
|
|
459
|
-
var stableVisualMultiline = isLikelyFirstCharMeasurementGlitch ? false : visualMultiline;
|
|
460
|
-
var nextIsMultiline = explicitMultiline || stableVisualMultiline;
|
|
461
|
-
var nextHasTypingPresence = text.trim().length > 0;
|
|
462
|
-
var nextTypingPresence = text.trim().length > 0;
|
|
463
|
-
setHasTypingPresence(nextTypingPresence);
|
|
464
|
-
setHasWrappedToSecondLine(function (prev) {
|
|
465
|
-
var next = prev;
|
|
466
|
-
if (!nextHasTypingPresence) {
|
|
467
|
-
next = false;
|
|
468
|
-
} else if (nextIsMultiline) {
|
|
469
|
-
next = true;
|
|
470
|
-
}
|
|
471
|
-
return next;
|
|
472
|
-
});
|
|
509
|
+
setHasTypingPresence(text.trim().length > 0);
|
|
473
510
|
onChange === null || onChange === void 0 || onChange();
|
|
474
511
|
handleTrigger(trigger);
|
|
475
512
|
if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
|
|
@@ -576,25 +613,49 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
576
613
|
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
577
614
|
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
578
615
|
};
|
|
579
|
-
var handleWrapperFocus = function handleWrapperFocus() {
|
|
580
|
-
setIsFocused(true);
|
|
581
|
-
onFocus === null || onFocus === void 0 || onFocus();
|
|
582
|
-
};
|
|
583
|
-
var handleWrapperBlur = function handleWrapperBlur() {
|
|
584
|
-
setTimeout(function () {
|
|
585
|
-
var _wrapperRef$current;
|
|
586
|
-
if (!((_wrapperRef$current = wrapperRef.current) !== null && _wrapperRef$current !== void 0 && _wrapperRef$current.contains(document.activeElement))) {
|
|
587
|
-
setIsFocused(false);
|
|
588
|
-
}
|
|
589
|
-
}, 0);
|
|
590
|
-
};
|
|
591
616
|
var handleStopGeneration = function handleStopGeneration() {
|
|
592
617
|
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
593
618
|
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
594
619
|
};
|
|
595
|
-
var
|
|
620
|
+
var showChipsRow = Boolean((contextChip === null || contextChip === void 0 || (_contextChip$items = contextChip.items) === null || _contextChip$items === void 0 ? void 0 : _contextChip$items.length) || attachments.length);
|
|
621
|
+
useLayoutEffect(function () {
|
|
622
|
+
var chipsEl = chipsRowRef.current;
|
|
623
|
+
var toolbarEl = toolbarRowRef.current;
|
|
624
|
+
var updateHeights = function updateHeights() {
|
|
625
|
+
var nextChips = showChipsRow && chipsEl ? Math.ceil(chipsEl.getBoundingClientRect().height) : 0;
|
|
626
|
+
var nextToolbar = toolbarEl ? Math.ceil(toolbarEl.getBoundingClientRect().height) : MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX;
|
|
627
|
+
setChipsRowHeight(function (prev) {
|
|
628
|
+
return prev === nextChips ? prev : nextChips;
|
|
629
|
+
});
|
|
630
|
+
setToolbarRowHeight(function (prev) {
|
|
631
|
+
return prev === nextToolbar ? prev : nextToolbar;
|
|
632
|
+
});
|
|
633
|
+
};
|
|
634
|
+
updateHeights();
|
|
635
|
+
var observer = new ResizeObserver(updateHeights);
|
|
636
|
+
if (showChipsRow && chipsEl) observer.observe(chipsEl);
|
|
637
|
+
if (toolbarEl) observer.observe(toolbarEl);
|
|
638
|
+
return function () {
|
|
639
|
+
return observer.disconnect();
|
|
640
|
+
};
|
|
641
|
+
}, [showChipsRow, contextChip === null || contextChip === void 0 || (_contextChip$items2 = contextChip.items) === null || _contextChip$items2 === void 0 ? void 0 : _contextChip$items2.length, attachments.length]);
|
|
642
|
+
var editorMaxHeight = useMemo(function () {
|
|
643
|
+
return getMaiaInputEditorMaxHeight({
|
|
644
|
+
chipsRowHeightPx: chipsRowHeight,
|
|
645
|
+
toolbarRowHeightPx: toolbarRowHeight
|
|
646
|
+
});
|
|
647
|
+
}, [chipsRowHeight, toolbarRowHeight]);
|
|
648
|
+
var toolbarIconColor = '#808080';
|
|
596
649
|
var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
|
|
597
|
-
var
|
|
650
|
+
var isCustomAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom';
|
|
651
|
+
var hasCorAccess = Boolean(isCustomAgent && (agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.some(function (connector) {
|
|
652
|
+
return connector.group === 'COR' && connector.slugs.some(function (slug) {
|
|
653
|
+
return typeof slug === 'string' && slug.trim().length > 0;
|
|
654
|
+
});
|
|
655
|
+
})));
|
|
656
|
+
var agentModelName = isCustomAgent ? (agent === null || agent === void 0 || (_agent$model_display_ = agent.model_display_name) === null || _agent$model_display_ === void 0 ? void 0 : _agent$model_display_.trim()) || null : null;
|
|
657
|
+
var showCustomMetaIndicators = hasCorAccess || Boolean(agentModelName);
|
|
658
|
+
var showMentionButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' || hasCorAccess;
|
|
598
659
|
var activeToolChipLeadingIcon;
|
|
599
660
|
if (activeToolChipHovered) {
|
|
600
661
|
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
@@ -603,13 +664,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
603
664
|
height: 18
|
|
604
665
|
});
|
|
605
666
|
} else if (isWebSearchActive) {
|
|
606
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
667
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
607
668
|
color: plusMenuIconColor,
|
|
608
669
|
width: 18,
|
|
609
670
|
height: 18
|
|
610
671
|
});
|
|
611
672
|
} else {
|
|
612
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
673
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
613
674
|
color: plusMenuIconColor,
|
|
614
675
|
width: 18,
|
|
615
676
|
height: 18
|
|
@@ -621,215 +682,260 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
621
682
|
disabled: false,
|
|
622
683
|
alignButtons: alignButtons,
|
|
623
684
|
hasAttachments: !!attachments.length,
|
|
624
|
-
compactSingleRowToolbar: compactSingleRowToolbar,
|
|
625
685
|
"data-appcues": "maia_chat_input",
|
|
626
686
|
"data-maia-streaming": isStreaming ? 'true' : 'false',
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop2 = fileNameParts.pop()) === null || _fileNameParts$pop2 === void 0 ? void 0 : _fileNameParts$pop2.toLowerCase()) : '';
|
|
647
|
-
var isImageByExtension = ['.png', '.jpg', '.jpeg'].includes(fileExtension);
|
|
648
|
-
var isImageByMime = (_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/');
|
|
649
|
-
var isImage = isImageByMime && isImageByExtension;
|
|
687
|
+
children: [showChipsRow && /*#__PURE__*/_jsxs(SCInputChipsRow, {
|
|
688
|
+
ref: chipsRowRef,
|
|
689
|
+
children: [contextChip !== null && contextChip !== void 0 && (_contextChip$items3 = contextChip.items) !== null && _contextChip$items3 !== void 0 && _contextChip$items3.length ? /*#__PURE__*/_jsx(Chip, {
|
|
690
|
+
items: contextChip.items,
|
|
691
|
+
type: contextChip.type,
|
|
692
|
+
leadingIcon: contextChip.leadingIcon,
|
|
693
|
+
tooltipZIndex: tooltipZIndex
|
|
694
|
+
}) : null, attachments.map(function (attachment, index) {
|
|
695
|
+
var _attachment$type;
|
|
696
|
+
var isImage = ((_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/')) || /\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name || '');
|
|
697
|
+
var chipIcon = isImage ? /*#__PURE__*/_jsx(MaiaInputAttachmentImageIcon, {
|
|
698
|
+
color: "#808080",
|
|
699
|
+
width: 12,
|
|
700
|
+
height: 12
|
|
701
|
+
}) : /*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
702
|
+
color: "#808080",
|
|
703
|
+
width: 13,
|
|
704
|
+
height: 13
|
|
705
|
+
});
|
|
650
706
|
return /*#__PURE__*/_jsx(Tooltip, {
|
|
651
707
|
title: attachment.name,
|
|
652
708
|
zIndex: tooltipZIndex,
|
|
653
709
|
children: /*#__PURE__*/_jsxs(SCMIAttachment, {
|
|
654
|
-
|
|
655
|
-
|
|
710
|
+
children: [/*#__PURE__*/_jsx(SCMIAttachmentIcon, {
|
|
711
|
+
children: chipIcon
|
|
712
|
+
}), /*#__PURE__*/_jsx(SCMIAttachmentName, {
|
|
713
|
+
children: attachment.name
|
|
714
|
+
}), /*#__PURE__*/_jsx(SCMIAttachmentDeleteOverlay, {
|
|
715
|
+
"aria-hidden": true
|
|
716
|
+
}), /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
|
|
717
|
+
type: "button",
|
|
718
|
+
"aria-label": t('chat.removeAttachmentAria', {
|
|
719
|
+
defaultValue: 'Quitar archivo'
|
|
720
|
+
}),
|
|
656
721
|
onClick: function onClick() {
|
|
657
722
|
return handleDeleteAttachment(attachment.id);
|
|
658
723
|
},
|
|
659
|
-
children: /*#__PURE__*/_jsx(
|
|
660
|
-
color: "
|
|
661
|
-
width:
|
|
662
|
-
height:
|
|
724
|
+
children: /*#__PURE__*/_jsx(Cross, {
|
|
725
|
+
color: "#666666",
|
|
726
|
+
width: 14,
|
|
727
|
+
height: 14
|
|
663
728
|
})
|
|
664
729
|
})]
|
|
665
730
|
})
|
|
666
|
-
}, "".concat(
|
|
667
|
-
})
|
|
731
|
+
}, "".concat(attachment.id, "-").concat(index));
|
|
732
|
+
})]
|
|
668
733
|
}), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
|
|
669
|
-
|
|
670
|
-
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
671
|
-
$compactRow: compactSingleRowToolbar,
|
|
672
|
-
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
673
|
-
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
674
|
-
type: "button",
|
|
675
|
-
$menuOpen: plusMenuOpen,
|
|
676
|
-
onClick: handlePlusButtonClick,
|
|
677
|
-
"aria-label": t('chat.openPlusMenuAria'),
|
|
678
|
-
"aria-haspopup": "true",
|
|
679
|
-
"aria-expanded": plusMenuOpen,
|
|
680
|
-
children: /*#__PURE__*/_jsx(Plus, {
|
|
681
|
-
color: plusIconColor,
|
|
682
|
-
width: 20,
|
|
683
|
-
height: 20
|
|
684
|
-
})
|
|
685
|
-
}), /*#__PURE__*/_jsx(Popover, {
|
|
686
|
-
open: plusMenuOpen,
|
|
687
|
-
anchorEl: plusMenuAnchor,
|
|
688
|
-
onClose: closePlusMenu,
|
|
689
|
-
anchorOrigin: {
|
|
690
|
-
vertical: 'top',
|
|
691
|
-
horizontal: 'left'
|
|
692
|
-
},
|
|
693
|
-
transformOrigin: {
|
|
694
|
-
vertical: 'bottom',
|
|
695
|
-
horizontal: 'left'
|
|
696
|
-
},
|
|
697
|
-
sx: {
|
|
698
|
-
zIndex: plusMenuZIndex
|
|
699
|
-
},
|
|
700
|
-
slotProps: {
|
|
701
|
-
paper: {
|
|
702
|
-
elevation: 0,
|
|
703
|
-
sx: {
|
|
704
|
-
overflow: 'visible',
|
|
705
|
-
borderRadius: '4px',
|
|
706
|
-
boxShadow: 'none',
|
|
707
|
-
backgroundColor: 'transparent',
|
|
708
|
-
marginTop: '-4px'
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
},
|
|
712
|
-
children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
|
|
713
|
-
children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
714
|
-
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
715
|
-
type: "button",
|
|
716
|
-
onClick: handlePlusMenuAttach,
|
|
717
|
-
children: [/*#__PURE__*/_jsx(Attach, {
|
|
718
|
-
color: plusMenuIconColor,
|
|
719
|
-
width: 20,
|
|
720
|
-
height: 20
|
|
721
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
722
|
-
$selected: false,
|
|
723
|
-
children: t('chat.plusMenuAttach')
|
|
724
|
-
})]
|
|
725
|
-
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
726
|
-
type: "button",
|
|
727
|
-
onClick: handlePlusMenuWebSearch,
|
|
728
|
-
children: [/*#__PURE__*/_jsx(Globe, {
|
|
729
|
-
color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
730
|
-
width: 20,
|
|
731
|
-
height: 20
|
|
732
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
733
|
-
$selected: !!isWebSearchActive,
|
|
734
|
-
children: t('chat.searchWeb')
|
|
735
|
-
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
736
|
-
color: plusMenuSelectedColor,
|
|
737
|
-
width: 16,
|
|
738
|
-
height: 16
|
|
739
|
-
}) : null]
|
|
740
|
-
})]
|
|
741
|
-
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
742
|
-
type: "button",
|
|
743
|
-
onClick: handlePlusMenuDeepSearch,
|
|
744
|
-
children: [/*#__PURE__*/_jsx(TelescopeIcon, {
|
|
745
|
-
color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
746
|
-
width: 20,
|
|
747
|
-
height: 20
|
|
748
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
749
|
-
$selected: !!isDeepSearchActive,
|
|
750
|
-
children: t('chat.plusMenuDeepInvestigation')
|
|
751
|
-
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
752
|
-
color: plusMenuSelectedColor,
|
|
753
|
-
width: 16,
|
|
754
|
-
height: 16
|
|
755
|
-
}) : null]
|
|
756
|
-
})]
|
|
757
|
-
})
|
|
758
|
-
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
759
|
-
$hovered: activeToolChipHovered,
|
|
760
|
-
$exiting: toolChipExiting,
|
|
761
|
-
onMouseEnter: function onMouseEnter() {
|
|
762
|
-
return setActiveToolChipHovered(true);
|
|
763
|
-
},
|
|
764
|
-
onMouseLeave: function onMouseLeave() {
|
|
765
|
-
return setActiveToolChipHovered(false);
|
|
766
|
-
},
|
|
767
|
-
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
768
|
-
type: "button",
|
|
769
|
-
$closeShown: activeToolChipHovered,
|
|
770
|
-
"aria-label": t('chat.removeActiveToolAria'),
|
|
771
|
-
onClick: function onClick(e) {
|
|
772
|
-
e.stopPropagation();
|
|
773
|
-
beginToolChipExit();
|
|
774
|
-
},
|
|
775
|
-
children: activeToolChipLeadingIcon
|
|
776
|
-
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
777
|
-
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
778
|
-
})]
|
|
779
|
-
})]
|
|
780
|
-
})
|
|
781
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
782
|
-
style: compactSingleRowToolbar ? {
|
|
783
|
-
gridColumn: 2,
|
|
784
|
-
gridRow: 1,
|
|
785
|
-
minWidth: 0,
|
|
786
|
-
alignSelf: 'center'
|
|
787
|
-
} : {
|
|
788
|
-
gridColumn: '1 / -1',
|
|
789
|
-
gridRow: 1,
|
|
790
|
-
minWidth: 0
|
|
791
|
-
},
|
|
734
|
+
children: [/*#__PURE__*/_jsx(SCInputEditorCell, {
|
|
792
735
|
children: /*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
793
736
|
ref: editorRef,
|
|
794
737
|
disabled: disabled,
|
|
795
738
|
placeholder: placeholder,
|
|
739
|
+
maxHeight: editorMaxHeight,
|
|
796
740
|
onInput: handleEditorInput,
|
|
797
|
-
onKeyDown: handleKeyDown
|
|
798
|
-
onFocus: handleWrapperFocus,
|
|
799
|
-
onBlur: handleWrapperBlur
|
|
741
|
+
onKeyDown: handleKeyDown
|
|
800
742
|
})
|
|
801
|
-
}), /*#__PURE__*/
|
|
802
|
-
|
|
803
|
-
children:
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
children: /*#__PURE__*/_jsx("span", {
|
|
816
|
-
style: {
|
|
817
|
-
display: 'inline-flex',
|
|
818
|
-
alignItems: 'center'
|
|
819
|
-
},
|
|
820
|
-
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
821
|
-
onClick: handleSendMessage,
|
|
822
|
-
className: className,
|
|
823
|
-
disabled: sendDisabled || disabled,
|
|
824
|
-
hasValues: hasTypingPresence || attachments.length > 0,
|
|
825
|
-
children: /*#__PURE__*/_jsx(PaperPlane, {
|
|
826
|
-
color: "#BFBFBF",
|
|
743
|
+
}), /*#__PURE__*/_jsxs(SCInputToolbarRow, {
|
|
744
|
+
ref: toolbarRowRef,
|
|
745
|
+
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
746
|
+
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
747
|
+
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
748
|
+
type: "button",
|
|
749
|
+
$menuOpen: plusMenuOpen,
|
|
750
|
+
onMouseDown: handlePlusButtonMouseDown,
|
|
751
|
+
onClick: handlePlusButtonClick,
|
|
752
|
+
"aria-label": t('chat.openPlusMenuAria'),
|
|
753
|
+
"aria-haspopup": "true",
|
|
754
|
+
"aria-expanded": plusMenuOpen,
|
|
755
|
+
children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
|
|
756
|
+
color: toolbarIconColor,
|
|
827
757
|
width: 18,
|
|
828
758
|
height: 18
|
|
829
759
|
})
|
|
830
|
-
})
|
|
760
|
+
}), showMentionButton && /*#__PURE__*/_jsx(PlusToggleButton, {
|
|
761
|
+
type: "button",
|
|
762
|
+
$menuOpen: false,
|
|
763
|
+
onClick: handleMentionButtonClick,
|
|
764
|
+
disabled: disabled,
|
|
765
|
+
"aria-label": t('chat.openMentionAria'),
|
|
766
|
+
children: /*#__PURE__*/_jsx(MaiaInputMentionIcon, {
|
|
767
|
+
color: toolbarIconColor,
|
|
768
|
+
width: 18,
|
|
769
|
+
height: 18
|
|
770
|
+
})
|
|
771
|
+
}), /*#__PURE__*/_jsx(Popover, {
|
|
772
|
+
open: plusMenuOpen,
|
|
773
|
+
anchorEl: plusMenuAnchor,
|
|
774
|
+
onClose: closePlusMenu,
|
|
775
|
+
disableAutoFocus: true,
|
|
776
|
+
disableEnforceFocus: true,
|
|
777
|
+
disableRestoreFocus: true,
|
|
778
|
+
anchorOrigin: {
|
|
779
|
+
vertical: 'top',
|
|
780
|
+
horizontal: 'left'
|
|
781
|
+
},
|
|
782
|
+
transformOrigin: {
|
|
783
|
+
vertical: 'bottom',
|
|
784
|
+
horizontal: 'left'
|
|
785
|
+
},
|
|
786
|
+
sx: {
|
|
787
|
+
zIndex: plusMenuZIndex
|
|
788
|
+
},
|
|
789
|
+
slotProps: {
|
|
790
|
+
paper: {
|
|
791
|
+
elevation: 0,
|
|
792
|
+
sx: {
|
|
793
|
+
overflow: 'visible',
|
|
794
|
+
borderRadius: '4px',
|
|
795
|
+
boxShadow: 'none',
|
|
796
|
+
backgroundColor: 'transparent',
|
|
797
|
+
marginTop: '-4px'
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
children: /*#__PURE__*/_jsx(PlusMenuPaper, {
|
|
802
|
+
children: /*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
803
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
804
|
+
type: "button",
|
|
805
|
+
onClick: handlePlusMenuAttach,
|
|
806
|
+
children: [/*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
807
|
+
color: plusMenuIconColor,
|
|
808
|
+
width: 21,
|
|
809
|
+
height: 20
|
|
810
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
811
|
+
children: t('chat.plusMenuAttach')
|
|
812
|
+
})]
|
|
813
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
814
|
+
type: "button",
|
|
815
|
+
onClick: handlePlusMenuWebSearch,
|
|
816
|
+
children: [/*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
817
|
+
color: plusMenuIconColor,
|
|
818
|
+
width: 20,
|
|
819
|
+
height: 20
|
|
820
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
821
|
+
children: t('chat.searchWeb')
|
|
822
|
+
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
823
|
+
color: plusMenuIconColor,
|
|
824
|
+
width: 16,
|
|
825
|
+
height: 16
|
|
826
|
+
}) : null]
|
|
827
|
+
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
828
|
+
type: "button",
|
|
829
|
+
onClick: handlePlusMenuDeepSearch,
|
|
830
|
+
children: [/*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
831
|
+
color: plusMenuIconColor,
|
|
832
|
+
width: 20,
|
|
833
|
+
height: 20
|
|
834
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
835
|
+
children: t('chat.plusMenuDeepInvestigation')
|
|
836
|
+
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
837
|
+
color: plusMenuIconColor,
|
|
838
|
+
width: 16,
|
|
839
|
+
height: 16
|
|
840
|
+
}) : null]
|
|
841
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
842
|
+
type: "button",
|
|
843
|
+
onClick: handlePlusMenuQuickActions,
|
|
844
|
+
children: [/*#__PURE__*/_jsx(MaiaInputSlashIcon, {
|
|
845
|
+
color: plusMenuIconColor,
|
|
846
|
+
width: 20,
|
|
847
|
+
height: 20
|
|
848
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
849
|
+
children: t('chat.plusMenuQuickActions')
|
|
850
|
+
})]
|
|
851
|
+
})]
|
|
852
|
+
})
|
|
853
|
+
})
|
|
854
|
+
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
855
|
+
$hovered: activeToolChipHovered,
|
|
856
|
+
$exiting: toolChipExiting,
|
|
857
|
+
onMouseEnter: function onMouseEnter() {
|
|
858
|
+
return setActiveToolChipHovered(true);
|
|
859
|
+
},
|
|
860
|
+
onMouseLeave: function onMouseLeave() {
|
|
861
|
+
return setActiveToolChipHovered(false);
|
|
862
|
+
},
|
|
863
|
+
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
864
|
+
type: "button",
|
|
865
|
+
$closeShown: activeToolChipHovered,
|
|
866
|
+
"aria-label": t('chat.removeActiveToolAria'),
|
|
867
|
+
onClick: function onClick(e) {
|
|
868
|
+
e.stopPropagation();
|
|
869
|
+
beginToolChipExit();
|
|
870
|
+
},
|
|
871
|
+
children: activeToolChipLeadingIcon
|
|
872
|
+
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
873
|
+
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
874
|
+
})]
|
|
875
|
+
})]
|
|
831
876
|
})
|
|
832
|
-
})
|
|
877
|
+
}), /*#__PURE__*/_jsxs(StyledMAIASendToolbarCell, {
|
|
878
|
+
children: [showCustomMetaIndicators && /*#__PURE__*/_jsxs(SCInputMetaIndicators, {
|
|
879
|
+
children: [hasCorAccess && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
880
|
+
title: t('chat.footer.corAccessTooltip')
|
|
881
|
+
}, tooltipZIndex != null ? {
|
|
882
|
+
zIndex: tooltipZIndex
|
|
883
|
+
} : {}), {}, {
|
|
884
|
+
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
885
|
+
"aria-label": t('chat.footer.corAccessLabel'),
|
|
886
|
+
children: /*#__PURE__*/_jsx(CorAccessIcon, {
|
|
887
|
+
width: 15,
|
|
888
|
+
height: 14,
|
|
889
|
+
color: toolbarIconColor
|
|
890
|
+
})
|
|
891
|
+
})
|
|
892
|
+
})), agentModelName && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
893
|
+
title: t('chipLlm.tooltip', {
|
|
894
|
+
model: agentModelName
|
|
895
|
+
})
|
|
896
|
+
}, tooltipZIndex != null ? {
|
|
897
|
+
zIndex: tooltipZIndex
|
|
898
|
+
} : {}), {}, {
|
|
899
|
+
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
900
|
+
"aria-label": agentModelName,
|
|
901
|
+
children: /*#__PURE__*/_jsx(MaiaInputRobotIcon, {
|
|
902
|
+
width: 18,
|
|
903
|
+
height: 18,
|
|
904
|
+
color: toolbarIconColor
|
|
905
|
+
})
|
|
906
|
+
})
|
|
907
|
+
}))]
|
|
908
|
+
}), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
909
|
+
title: t('chat.stop'),
|
|
910
|
+
zIndex: tooltipZIndex,
|
|
911
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
912
|
+
disabled: false,
|
|
913
|
+
onClick: handleStopGeneration,
|
|
914
|
+
className: className,
|
|
915
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
|
|
916
|
+
})
|
|
917
|
+
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
918
|
+
title: t('chat.send'),
|
|
919
|
+
zIndex: tooltipZIndex,
|
|
920
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
921
|
+
style: {
|
|
922
|
+
display: 'inline-flex',
|
|
923
|
+
alignItems: 'center'
|
|
924
|
+
},
|
|
925
|
+
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
926
|
+
onClick: handleSendMessage,
|
|
927
|
+
className: className,
|
|
928
|
+
disabled: sendDisabled || disabled,
|
|
929
|
+
hasValues: hasTypingPresence || attachments.length > 0,
|
|
930
|
+
children: /*#__PURE__*/_jsx(MaiaInputSendIcon, {
|
|
931
|
+
color: "#BFBFBF",
|
|
932
|
+
width: 16,
|
|
933
|
+
height: 16
|
|
934
|
+
})
|
|
935
|
+
})
|
|
936
|
+
})
|
|
937
|
+
})]
|
|
938
|
+
})]
|
|
833
939
|
})]
|
|
834
940
|
}), /*#__PURE__*/_jsx("input", {
|
|
835
941
|
ref: fileInputRef,
|
|
@@ -853,7 +959,16 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
853
959
|
excludedFiles: modalProps.excludedFiles,
|
|
854
960
|
exceededFiles: modalProps.exceededFiles,
|
|
855
961
|
fileSizes: modalProps.fileSizes
|
|
856
|
-
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)
|
|
962
|
+
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body), showSlashDropdown && /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(SlashCommandDropdown, {
|
|
963
|
+
commands: slashCommands,
|
|
964
|
+
query: slashQuery,
|
|
965
|
+
onSelect: handleSelectSlashCommand,
|
|
966
|
+
onClose: handleCloseSlashDropdown,
|
|
967
|
+
bottom: slashDropdownPos.bottom,
|
|
968
|
+
left: slashDropdownPos.left,
|
|
969
|
+
zIndex: slashDropdownZIndex,
|
|
970
|
+
anchorRef: wrapperRef
|
|
971
|
+
}), document.body)]
|
|
857
972
|
});
|
|
858
973
|
};
|
|
859
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTdG9wQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BJY29uIiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJNQUlBX0NIQVRfSU5QVVRfVUkiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsIk1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIiwiQVBQQ1VFU19FVkVOVFMiLCJ0cmFja0FwcGN1ZXNFdmVudCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwiX3JlZiRhbGlnbkJ1dHRvbnMiLCJhbGlnbkJ1dHRvbnMiLCJvbkZpbGVBdHRhY2giLCJvbkRlbGV0ZUF0dGFjaG1lbnQiLCJfcmVmJGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwidG9vbHRpcFpJbmRleCIsImV4dGVybmFsUG9wb3ZlckFuY2hvclJlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJsYXlvdXRNb2RlIiwiX3VzZVQiLCJ0IiwiZWRpdG9yUmVmIiwiZmlsZUlucHV0UmVmIiwiaW50ZXJuYWxXcmFwcGVyUmVmIiwid3JhcHBlclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImhhc1dyYXBwZWRUb1NlY29uZExpbmUiLCJzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJoYXNUeXBpbmdQcmVzZW5jZSIsInNldEhhc1R5cGluZ1ByZXNlbmNlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0ZvY3VzZWQiLCJzZXRJc0ZvY3VzZWQiLCJfdXNlU3RhdGU3IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJmaWxlU2l6ZXMiLCJfdXNlU3RhdGU4IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJ0b2dnbGVEZWVwU2VhcmNoIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJpbml0aWFsRHJhZnQiLCJkZWVwTGlua1NlbmRQZW5kaW5nUmVmIiwicGx1c01lbnVaSW5kZXgiLCJpbml0aWFsRHJhZnRBcHBsaWVkUmVmIiwiX3VzZU1lbnRpb25Qb3BvdmVyIiwicG9wb3Zlck9wZW4iLCJyZXNldE1lbnRpb25PcGVuVHJhY2tpbmciLCJoYW5kbGVUcmlnZ2VyIiwiaGFuZGxlUG9wb3ZlcktleURvd24iLCJoYW5kbGVLZXlEb3duIiwicG9wb3Zlck5vZGUiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInBsdXNNZW51QW5jaG9yIiwic2V0UGx1c01lbnVBbmNob3IiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwidG9vbENoaXBFeGl0aW5nIiwic2V0VG9vbENoaXBFeGl0aW5nIiwidG9vbENoaXBFeGl0VGltZXJSZWYiLCJzZWFyY2hNb2RlQWN0aXZlUmVmIiwid2ViIiwiZGVlcCIsInBsdXNNZW51T3BlbiIsIkJvb2xlYW4iLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsInByZXZpb3VzTGF5b3V0TW9kZVJlZiIsImFuYWx5dGljc0FnZW50VHlwZSIsImFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCIsInR5cGUiLCJlbnRpdHkiLCJfdXNlU2xhc2hDb21tYW5kcyIsImlkIiwic2xhc2hDb21tYW5kcyIsImNvbW1hbmRzIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInNob3dTbGFzaERyb3Bkb3duIiwic2V0U2hvd1NsYXNoRHJvcGRvd24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2Iiwic2xhc2hRdWVyeSIsInNldFNsYXNoUXVlcnkiLCJzbGFzaE1lbnVXYXNPcGVuUmVmIiwic2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwid2luZG93Iiwic2V0VGltZW91dCIsIl9lZGl0b3JSZWYkY3VycmVudCIsImN1cnJlbnQiLCJmb2N1cyIsImNsb3NlUGx1c01lbnUiLCJjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0IiwiY2xlYXJUaW1lb3V0IiwiaGFuZGxlUGx1c0J1dHRvbkNsaWNrIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnRUYXJnZXQiLCJhaUNoYXRQbHVzT3BlbiIsIl9vYmplY3RTcHJlYWQiLCJhZ2VudF90eXBlIiwiaGFuZGxlUGx1c01lbnVBdHRhY2giLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJhaUNoYXRUb29scyIsIm9wdGlvbiIsImxlbmd0aCIsImNsaWNrIiwiYmVnaW5Ub29sQ2hpcEV4aXQiLCJ3YXNXZWIiLCJ3YXNEZWVwIiwiX3NlYXJjaE1vZGVBY3RpdmVSZWYkIiwiaGFuZGxlUGx1c01lbnVXZWJTZWFyY2giLCJoYW5kbGVQbHVzTWVudURlZXBTZWFyY2giLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsImRyYWZ0IiwidHJpbSIsInNldFBsYWluVGV4dCIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJjb21wYWN0U2luZ2xlUm93VG9vbGJhciIsInNlbmREaXNhYmxlZCIsImFnZW50Q2hhbmdlZCIsInByZXZpb3VzQ2hhdElkIiwiY3VycmVudENoYXRJZCIsImNoYXRDaGFuZ2VkIiwiY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IiwibmV3Q2hhdFN0YXJ0ZWQiLCJpc0luaXRpYWxNb3VudCIsImRlbGF5IiwiX2VkaXRvclJlZiRjdXJyZW50NSIsInByZXZpb3VzTGF5b3V0TW9kZSIsInRpbWVvdXRJZCIsIl9lZGl0b3JSZWYkY3VycmVudDYiLCJpc1NwZWNpYWxpc3RBZ2VudCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfcmVmMiIsIl9yZWYzIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsIm1haWFDb250ZXh0TWVudGlvbkluaXQiLCJkaXNjb25uZWN0IiwidGhyZXNob2xkIiwib2JzZXJ2ZSIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ3IiwiY2xlYXIiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUmVmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudDgiLCJoYW5kbGVTZW5kTWVzc2FnZSIsIl9lZGl0b3JSZWYkY3VycmVudDkiLCJfc3RhdGUkdGV4dCIsIl9zdGF0ZSRtZW50aW9ucyIsIl9lZGl0b3JSZWYkY3VycmVudDAiLCJzdGF0ZSIsInNlcmlhbGl6ZSIsInRleHQiLCJtZW50aW9ucyIsImhhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZCIsImNvbW1hbmQiLCJfZWRpdG9yUmVmJGN1cnJlbnQxIiwiX3N0YXRlJHRleHQyIiwiX2VkaXRvclJlZiRjdXJyZW50MTEiLCJhaUNoYXRRdWlja0FjdGlvblNlbGVjdCIsInR5cGVfcXVpY2tfYWN0aW9uIiwib3JpZ2luX3F1aWNrX2FjdGlvbiIsInRyaWdnZXJQYXJ0IiwiY29uY2F0IiwiYmVmb3JlVHJpZ2dlciIsImVuZHNXaXRoIiwic2xpY2UiLCJpc0VtcHR5QmVmb3JlVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDEwIiwidGl0bGUiLCJpbnNlcnRTbGFzaENvbW1hbmQiLCJsYWJlbCIsImhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biIsImhhbmRsZUVkaXRvcklucHV0IiwiX3JlZjQiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMiIsInRyaWdnZXIiLCJzbGFzaFRyaWdnZXIiLCJ2aXN1YWxNdWx0aWxpbmUiLCJoYXNWaXN1YWxNdWx0aWxpbmUiLCJleHBsaWNpdE11bHRpbGluZSIsImluY2x1ZGVzIiwiaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCIsInN0YWJsZVZpc3VhbE11bHRpbGluZSIsIm5leHRJc011bHRpbGluZSIsIm5leHRIYXNUeXBpbmdQcmVzZW5jZSIsIm5leHRUeXBpbmdQcmVzZW5jZSIsInByZXYiLCJuZXh0IiwiYWN0aXZlIiwiYWlDaGF0UXVpY2tBY3Rpb25PcGVuIiwicXVlcnkiLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlRmlsZVNlbGVjdCIsImZpbGVzIiwidGFyZ2V0IiwiZmlsZXNJbnNlcnRlZCIsImlzTmV3Rm9ybWF0IiwiZXh0ZW5zaW9uIiwiaXNPbGRGb3JtYXQiLCJpc0F1ZGlvRm9ybWF0IiwiQXJyYXkiLCJmcm9tIiwiZm9yRWFjaCIsImZpbGUiLCJfZmlsZU5hbWVQYXJ0cyRwb3AiLCJleGNsdWRlZEZpbGUiLCJmaWxlTmFtZVBhcnRzIiwibmFtZSIsInNwbGl0IiwiZmlsZUV4dGVuc2lvbiIsInBvcCIsInRvTG93ZXJDYXNlIiwic2l6ZSIsInB1c2giLCJ0eXBlRmlsZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwidmFsdWUiLCJoYW5kbGVEZWxldGVBdHRhY2htZW50IiwiZmlsZUlkIiwiaGFuZGxlV3JhcHBlckZvY3VzIiwiaGFuZGxlV3JhcHBlckJsdXIiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJwbHVzSWNvbkNvbG9yIiwic2Vjb25kYXJ5IiwibWVkaXVtR3JheSIsInBsdXNNZW51SWNvbkNvbG9yIiwibWVudUljb24iLCJwbHVzTWVudVNlbGVjdGVkQ29sb3IiLCJ0ZXh0QnJhbmRCb2xkIiwiYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiIsImNvbG9yIiwiY2hpcENsb3NlSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsIm9uQmx1ciIsInN0eWxlIiwicG9zaXRpb24iLCJvblNlbGVjdCIsIm9uQ2xvc2UiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwiekluZGV4IiwiaWNvbiIsIm9uQ2xpY2siLCIkY29tcGFjdFJvdyIsIiRtZW51T3BlbiIsIm9wZW4iLCJhbmNob3JFbCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsInN4Iiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJvdmVyZmxvdyIsImJvcmRlclJhZGl1cyIsImJveFNoYWRvdyIsImJhY2tncm91bmRDb2xvciIsIm1hcmdpblRvcCIsIiRzZWxlY3RlZCIsIiRob3ZlcmVkIiwiJGV4aXRpbmciLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCIkY2xvc2VTaG93biIsImdyaWRDb2x1bW4iLCJncmlkUm93IiwibWluV2lkdGgiLCJhbGlnblNlbGYiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbiAgTXV0YWJsZVJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFBhcGVyUGxhbmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QYXBlclBsYW5lJ1xuaW1wb3J0IHsgQXR0YWNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXR0YWNoJ1xuaW1wb3J0IHsgR2xvYmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9HbG9iZSdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IENoZWNrIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2snXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IGNvbG9ycyBmcm9tICdAcHJvamVjdGNvci90aGVtZS9saWIvYmFzZS9jb2xvcnMnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFN0eWxlZE1BSUFJbnB1dFdyYXBwZXIsXG4gIFN0eWxlZE1BSUFTZW5kQnV0dG9uLFxuICBTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkLFxuICBTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU3RvcEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BJY29uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuLi9TbGFzaENvbW1hbmREcm9wZG93bidcbmltcG9ydCB7IHVzZVNsYXNoQ29tbWFuZHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbGFzaENvbW1hbmRzJ1xuaW1wb3J0IHsgcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hvdXJzUGxhbm5lclF1aWNrQWN0aW9uVHlwZSdcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQWN0aW9uJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBUZWxlc2NvcGVJY29uIH0gZnJvbSAnLi4vaWNvbnMvVGVsZXNjb3BlSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldENoYXRUb29sc01lbnVBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgTUFJQV9DSEFUX0lOUFVUX1VJIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7XG4gIGFsbG93ZWRGaWxlVHlwZXMsXG4gIGZpbGVUeXBlcyxcbiAgTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTixcbiAgTUFYX0ZJTEVfU0laRV9NQl9PTEQsXG4gIE1BWF9GSUxFX1NJWkVfTUJfQVVESU8sXG4gIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IEFQUENVRVNfRVZFTlRTLCB0cmFja0FwcGN1ZXNFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcGN1ZXMnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvciwgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgc2NJZD86IHN0cmluZ1xuICApID0+IHZvaWRcbiAgb25TdG9wR2VuZXJhdGlvbj86ICgoKSA9PiB2b2lkKSB8IG51bGxcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzV3JpdGluZz86IGJvb2xlYW5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgb25DaGFuZ2U/OiAoKSA9PiB2b2lkXG4gIG9uRm9jdXM/OiAoKSA9PiB2b2lkXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgb25GaWxlQXR0YWNoPzogKGZpbGU6IEZpbGUpID0+IHZvaWRcbiAgb25EZWxldGVBdHRhY2htZW50PzogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBjaGF0SWQ/OiBzdHJpbmdcbiAgbmV3Q2hhdEtleT86IG51bWJlclxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG4gIC8qKiBFeHBvbmUgZWwgd3JhcHBlciBkZWwgaW5wdXQgcGFyYSBhbmNsYXIgcG9wb3ZlcnMgKG1lbmNpb25lcywgcGluIGRlIGNvbnRleHRvKS4gKi9cbiAgcG9wb3ZlckFuY2hvclJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuICBsYXlvdXRNb2RlPzogJ3NpZGViYXInIHwgJ2Z1bGxzY3JlZW4nIHwgJ2Zsb2F0aW5nJ1xufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0ID0gKHtcbiAgb25TZW5kTWVzc2FnZSxcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbiAgaXNTdHJlYW1pbmcsXG4gIGlzV3JpdGluZyxcbiAgb25TdG9wR2VuZXJhdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2hhbmdlLFxuICBvbkZvY3VzLFxuICBhbGlnbkJ1dHRvbnMgPSAndmVydGljYWwnLFxuICBvbkZpbGVBdHRhY2gsXG4gIG9uRGVsZXRlQXR0YWNobWVudCxcbiAgYXR0YWNobWVudHMgPSBbXSxcbiAgY2hhdElkLFxuICBuZXdDaGF0S2V5LFxuICB0b29sdGlwWkluZGV4LFxuICBwb3BvdmVyQW5jaG9yUmVmOiBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYsXG4gIGxheW91dE1vZGUsXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnRlcm5hbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYgPz8gaW50ZXJuYWxXcmFwcGVyUmVmXG4gIGNvbnN0IFtoYXNXcmFwcGVkVG9TZWNvbmRMaW5lLCBzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzVHlwaW5nUHJlc2VuY2UsIHNldEhhc1R5cGluZ1ByZXNlbmNlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGZpbGVTaXplczoge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgfSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHtcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlRGVlcFNlYXJjaCxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYWdlbnQsXG4gICAgaW5pdGlhbERyYWZ0LFxuICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgcGx1c01lbnVaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEzMDAsICdvdmVybGF5JylcbiAgY29uc3QgaW5pdGlhbERyYWZ0QXBwbGllZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLFxuICAgIGhhbmRsZVRyaWdnZXIsXG4gICAgaGFuZGxlS2V5RG93bjogaGFuZGxlUG9wb3ZlcktleURvd24sXG4gICAgcG9wb3Zlck5vZGUsXG4gIH0gPSB1c2VNZW50aW9uUG9wb3Zlcih7XG4gICAgZWRpdG9yUmVmLFxuICAgIHBvcG92ZXJBbmNob3JSZWY6IHdyYXBwZXJSZWYsXG4gIH0pXG5cbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0b29sQ2hpcEV4aXRUaW1lclJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICB9XG5cbiAgY29uc3QgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3QgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIgPSB1c2VNZW1vKFxuICAgICgpID0+IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCAmJiAhaXNXZWJTZWFyY2hBY3RpdmUgJiYgIWlzRGVlcFNlYXJjaEFjdGl2ZSAmJiAhaGFzV3JhcHBlZFRvU2Vjb25kTGluZSxcbiAgICBbYXR0YWNobWVudHMubGVuZ3RoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBoYXNXcmFwcGVkVG9TZWNvbmRMaW5lXVxuICApXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtyZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWZdKVxuXG4gIC8vIE1hbnRlbmVyIGZvY28gYWwgc2VsZWNjaW9uYXIgdW4gY29udGV4dG8gcmVjaWVudGUgKGVsIGNsaWNrIGVuIGVsIHBpbGwgbG8gcm9iYSBhbCBpbnB1dCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIG1lbnRpb25zKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZDogQWN0aW9uKSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QsIHtcbiAgICAgICAgdHlwZV9xdWlja19hY3Rpb246IHJlc29sdmVRdWlja0FjdGlvblR5cGUoY29tbWFuZCksXG4gICAgICAgIG9yaWdpbl9xdWlja19hY3Rpb246ICdzbGFzaF9tZW51JyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICAgIGNvbnN0IHRyaWdnZXJQYXJ0ID0gYC8ke3NsYXNoUXVlcnl9YFxuICAgICAgY29uc3QgYmVmb3JlVHJpZ2dlciA9IHRleHQuZW5kc1dpdGgodHJpZ2dlclBhcnQpID8gdGV4dC5zbGljZSgwLCAtdHJpZ2dlclBhcnQubGVuZ3RoKSA6IHRleHRcbiAgICAgIGNvbnN0IGlzRW1wdHlCZWZvcmVUcmlnZ2VyID0gYmVmb3JlVHJpZ2dlci50cmltKCkgPT09ICcnXG5cbiAgICAgIGlmIChpc0VtcHR5QmVmb3JlVHJpZ2dlcikge1xuICAgICAgICBvblNlbmRNZXNzYWdlKGNvbW1hbmQudGl0bGUsIGF0dGFjaG1lbnRzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbW1hbmQuaWQpXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgICBzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lKGZhbHNlKVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRTbGFzaENvbW1hbmQoeyBpZDogY29tbWFuZC5pZCwgbGFiZWw6IGNvbW1hbmQudGl0bGUgfSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgc2xhc2hRdWVyeSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgIH06IHtcbiAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICAgIHNsYXNoVHJpZ2dlcj86IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCB2aXN1YWxNdWx0aWxpbmUgPSAhIWVkaXRvclJlZi5jdXJyZW50Py5oYXNWaXN1YWxNdWx0aWxpbmUoKVxuICAgICAgY29uc3QgZXhwbGljaXRNdWx0aWxpbmUgPSB0ZXh0LmluY2x1ZGVzKCdcXG4nKVxuICAgICAgY29uc3QgaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA9IHRleHQubGVuZ3RoIDw9IDEgJiYgIWV4cGxpY2l0TXVsdGlsaW5lICYmIHZpc3VhbE11bHRpbGluZVxuICAgICAgY29uc3Qgc3RhYmxlVmlzdWFsTXVsdGlsaW5lID0gaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA/IGZhbHNlIDogdmlzdWFsTXVsdGlsaW5lXG4gICAgICBjb25zdCBuZXh0SXNNdWx0aWxpbmUgPSBleHBsaWNpdE11bHRpbGluZSB8fCBzdGFibGVWaXN1YWxNdWx0aWxpbmVcbiAgICAgIGNvbnN0IG5leHRIYXNUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG5leHRUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcblxuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UobmV4dFR5cGluZ1ByZXNlbmNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShwcmV2ID0+IHtcbiAgICAgICAgbGV0IG5leHQgPSBwcmV2XG4gICAgICAgIGlmICghbmV4dEhhc1R5cGluZ1ByZXNlbmNlKSB7XG4gICAgICAgICAgbmV4dCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dElzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgbmV4dCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0XG4gICAgICB9KVxuICAgICAgb25DaGFuZ2U/LigpXG4gICAgICBoYW5kbGVUcmlnZ2VyKHRyaWdnZXIpXG5cbiAgICAgIGlmIChzbGFzaFRyaWdnZXI/LmFjdGl2ZSAmJiBzbGFzaENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25PcGVuKVxuICAgICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bih0cnVlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KHNsYXNoVHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyLCBzbGFzaENvbW1hbmRzLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGZvcm1hdG9zIGFudGVyaW9yZXM6IGhhc3RhIDFNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJGb2N1cyA9ICgpID0+IHtcbiAgICBzZXRJc0ZvY3VzZWQodHJ1ZSlcbiAgICBvbkZvY3VzPy4oKVxuICB9XG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy50ZXh0LnNlY29uZGFyeSA6IGNvbG9ycy50ZXh0Lm1lZGl1bUdyYXlcbiAgY29uc3QgcGx1c01lbnVJY29uQ29sb3IgPSBNQUlBX0NIQVRfSU5QVVRfVUkubWVudUljb25cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLnRleHRCcmFuZEJvbGRcblxuICBsZXQgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbjogUmVhY3ROb2RlXG4gIGlmIChhY3RpdmVUb29sQ2hpcEhvdmVyZWQpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPENyb3NzIGNvbG9yPXtNQUlBX0NIQVRfSU5QVVRfVUkuY2hpcENsb3NlSWNvbn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2UgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxHbG9iZSBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPFRlbGVzY29wZUljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXI9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfVxuICAgICAgICBkYXRhLWFwcGN1ZXM9XCJtYWlhX2NoYXRfaW5wdXRcIlxuICAgICAgICBkYXRhLW1haWEtc3RyZWFtaW5nPXtpc1N0cmVhbWluZyA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgb25CbHVyPXtoYW5kbGVXcmFwcGVyQmx1cn1cbiAgICAgICAgc3R5bGU9e3sgcG9zaXRpb246ICdyZWxhdGl2ZScgfX1cbiAgICAgID5cbiAgICAgICAge3Nob3dTbGFzaERyb3Bkb3duICYmIChcbiAgICAgICAgICA8U2xhc2hDb21tYW5kRHJvcGRvd25cbiAgICAgICAgICAgIGNvbW1hbmRzPXtzbGFzaENvbW1hbmRzfVxuICAgICAgICAgICAgcXVlcnk9e3NsYXNoUXVlcnl9XG4gICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kfVxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3dufVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshIWF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEycHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBhdHRhY2htZW50Lm5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeUV4dGVuc2lvbiA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5TWltZSA9IGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZSA9IGlzSW1hZ2VCeU1pbWUgJiYgaXNJbWFnZUJ5RXh0ZW5zaW9uXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHtpbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YH0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudCBpc0ltYWdlPXtpc0ltYWdlfT5cbiAgICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggY29sb3I9XCJyZ2JhKDE5MSwgMTkxLCAxOTEsIDEpXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICA8U3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCAkY29tcGFjdFJvdz17Y29tcGFjdFNpbmdsZVJvd1Rvb2xiYXJ9PlxuICAgICAgICAgICAgPFBsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgJG1lbnVPcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQub3BlblBsdXNNZW51QXJpYScpfVxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1cyBjb2xvcj17cGx1c0ljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgIDxQb3BvdmVyXG4gICAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgIGFuY2hvckVsPXtwbHVzTWVudUFuY2hvcn1cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZVBsdXNNZW51fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17eyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgIHN4PXt7IHpJbmRleDogcGx1c01lbnVaSW5kZXggfX1cbiAgICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgIHBhcGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJy00cHgnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBsdXNNZW51UGFwZXI+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICAgIDxBdHRhY2ggY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ZmFsc2V9Pnt0KCdjaGF0LnBsdXNNZW51QXR0YWNoJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudURpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVXZWJTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICAgIDxHbG9iZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzV2ViU2VhcmNoQWN0aXZlID8gcGx1c01lbnVTZWxlY3RlZENvbG9yIDogcGx1c01lbnVJY29uQ29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ISFpc1dlYlNlYXJjaEFjdGl2ZX0+e3QoJ2NoYXQuc2VhcmNoV2ViJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgPFRlbGVzY29wZUljb25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNEZWVwU2VhcmNoQWN0aXZlID8gcGx1c01lbnVTZWxlY3RlZENvbG9yIDogcGx1c01lbnVJY29uQ29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9eyEhaXNEZWVwU2VhcmNoQWN0aXZlfT5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1BsdXNNZW51UGFwZXI+XG4gICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgICAgeyhpc1dlYlNlYXJjaEFjdGl2ZSB8fCBpc0RlZXBTZWFyY2hBY3RpdmUpICYmIChcbiAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBSb290XG4gICAgICAgICAgICAgICAgICAkaG92ZXJlZD17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgJGV4aXRpbmc9e3Rvb2xDaGlwRXhpdGluZ31cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKHRydWUpfVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICRjbG9zZVNob3duPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQWN0aXZlVG9vbEFyaWEnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb259XG4gICAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyB0KCdjaGF0LnNlYXJjaFdlYicpIDogdCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9XG4gICAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcFJvb3Q+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1BsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgPC9TdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXJcbiAgICAgICAgICAgICAgICA/IHsgZ3JpZENvbHVtbjogMiwgZ3JpZFJvdzogMSwgbWluV2lkdGg6IDAsIGFsaWduU2VsZjogJ2NlbnRlcicgfVxuICAgICAgICAgICAgICAgIDogeyBncmlkQ29sdW1uOiAnMSAvIC0xJywgZ3JpZFJvdzogMSwgbWluV2lkdGg6IDAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDb250ZXh0TWVudGlvbkVkaXRvclxuICAgICAgICAgICAgICByZWY9e2VkaXRvclJlZn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUVkaXRvcklucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVXcmFwcGVyQmx1cn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BCdXR0b24gZGlzYWJsZWQ9e2ZhbHNlfSBvbkNsaWNrPXtoYW5kbGVTdG9wR2VuZXJhdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnNlbmQnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZW5kRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlcz17aGFzVHlwaW5nUHJlc2VuY2UgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyUGxhbmUgY29sb3I9XCIjQkZCRkJGXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsPlxuICAgICAgICA8L1N0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkTUFJQUlucHV0V3JhcHBlcj5cbiAgICAgIHttb2RhbFByb3BzLmlzT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbEZpbGVFeGNlZWRzXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogZmFsc2UsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzOiBbXSwgZmlsZVNpemVzOiB7fSB9KX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGZpbGVTaXplcz17bW9kYWxQcm9wcy5maWxlU2l6ZXN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge3BvcG92ZXJOb2RlICYmIGNyZWF0ZVBvcnRhbChwb3BvdmVyTm9kZSwgZG9jdW1lbnQuYm9keSl9XG4gICAgPC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBTUVBLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsUUFBUSxRQUNILE9BQU87QUFDZCxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFT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
|
|
974
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ0lucHV0Q2hpcHNSb3ciLCJTQ0lucHV0TWV0YUljb25CdXR0b24iLCJTQ0lucHV0TWV0YUluZGljYXRvcnMiLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlNDTUlBdHRhY2htZW50RGVsZXRlT3ZlcmxheSIsIlNDTUlBdHRhY2htZW50SWNvbiIsIlNDTUlBdHRhY2htZW50TmFtZSIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTQ0lucHV0RWRpdG9yQ2VsbCIsIlNDSW5wdXRUb29sYmFyUm93IiwiU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwiLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsImdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCIsIk1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIk1haWFJbnB1dEFkZEljb24iLCJNYWlhSW5wdXRBdHRhY2hJY29uIiwiTWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbiIsIk1haWFJbnB1dERlZXBTZWFyY2hJY29uIiwiQ29yQWNjZXNzSWNvbiIsIk1haWFJbnB1dE1lbnRpb25JY29uIiwiTWFpYUlucHV0Um9ib3RJY29uIiwiTWFpYUlucHV0U2VuZEljb24iLCJNYWlhSW5wdXRTbGFzaEljb24iLCJNYWlhSW5wdXRXZWJTZWFyY2hJY29uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIiwiTUFJQV9DSEFUX0lOUFVUX1VJIiwiYWxsb3dlZEZpbGVUeXBlcyIsImZpbGVUeXBlcyIsIk1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04iLCJNQVhfRklMRV9TSVpFX01CX09MRCIsIk1BWF9GSUxFX1NJWkVfTUJfQVVESU8iLCJNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyIsIkFQUENVRVNfRVZFTlRTIiwidHJhY2tBcHBjdWVzRXZlbnQiLCJDaGlwIiwiQ29udGV4dE1lbnRpb25FZGl0b3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwidXNlTWVudGlvblBvcG92ZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJUT09MX0NISVBfRVhJVF9NUyIsIlNMQVNIX0RST1BET1dOX1dJRFRIX1BYIiwiU0xBU0hfRFJPUERPV05fTEVGVF9PRkZTRVRfUFgiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIl9jb250ZXh0Q2hpcCRpdGVtcyIsIl9jb250ZXh0Q2hpcCRpdGVtczIiLCJfYWdlbnQkY29ubmVjdG9ycyIsIl9hZ2VudCRtb2RlbF9kaXNwbGF5XyIsIl9jb250ZXh0Q2hpcCRpdGVtczMiLCJvblNlbmRNZXNzYWdlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJpc1N0cmVhbWluZyIsImlzV3JpdGluZyIsIm9uU3RvcEdlbmVyYXRpb24iLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiX3JlZiRhbGlnbkJ1dHRvbnMiLCJhbGlnbkJ1dHRvbnMiLCJvbkZpbGVBdHRhY2giLCJvbkRlbGV0ZUF0dGFjaG1lbnQiLCJfcmVmJGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwidG9vbHRpcFpJbmRleCIsImV4dGVybmFsUG9wb3ZlckFuY2hvclJlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJsYXlvdXRNb2RlIiwiY29udGV4dENoaXAiLCJfdXNlVCIsInQiLCJlZGl0b3JSZWYiLCJmaWxlSW5wdXRSZWYiLCJjaGlwc1Jvd1JlZiIsInRvb2xiYXJSb3dSZWYiLCJpbnRlcm5hbFdyYXBwZXJSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaGFzVHlwaW5nUHJlc2VuY2UiLCJzZXRIYXNUeXBpbmdQcmVzZW5jZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY2hpcHNSb3dIZWlnaHQiLCJzZXRDaGlwc1Jvd0hlaWdodCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwidG9vbGJhclJvd0hlaWdodCIsInNldFRvb2xiYXJSb3dIZWlnaHQiLCJfdXNlU3RhdGU3IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJmaWxlU2l6ZXMiLCJfdXNlU3RhdGU4IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJ0b2dnbGVEZWVwU2VhcmNoIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJpbml0aWFsRHJhZnQiLCJkZWVwTGlua1NlbmRQZW5kaW5nUmVmIiwicGx1c01lbnVaSW5kZXgiLCJpbml0aWFsRHJhZnRBcHBsaWVkUmVmIiwiX3VzZU1lbnRpb25Qb3BvdmVyIiwicG9wb3Zlck9wZW4iLCJyZXNldE1lbnRpb25PcGVuVHJhY2tpbmciLCJoYW5kbGVUcmlnZ2VyIiwiaGFuZGxlUG9wb3ZlcktleURvd24iLCJoYW5kbGVLZXlEb3duIiwicG9wb3Zlck5vZGUiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInBsdXNNZW51QW5jaG9yIiwic2V0UGx1c01lbnVBbmNob3IiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwidG9vbENoaXBFeGl0aW5nIiwic2V0VG9vbENoaXBFeGl0aW5nIiwidG9vbENoaXBFeGl0VGltZXJSZWYiLCJzZWFyY2hNb2RlQWN0aXZlUmVmIiwid2ViIiwiZGVlcCIsInBsdXNNZW51T3BlbiIsIkJvb2xlYW4iLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsInByZXZpb3VzTGF5b3V0TW9kZVJlZiIsImFuYWx5dGljc0FnZW50VHlwZSIsImFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCIsInR5cGUiLCJlbnRpdHkiLCJfdXNlU2xhc2hDb21tYW5kcyIsImlkIiwic2xhc2hDb21tYW5kcyIsImNvbW1hbmRzIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInNob3dTbGFzaERyb3Bkb3duIiwic2V0U2hvd1NsYXNoRHJvcGRvd24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2Iiwic2xhc2hRdWVyeSIsInNldFNsYXNoUXVlcnkiLCJzbGFzaE1lbnVXYXNPcGVuUmVmIiwic2xhc2hEcm9wZG93blpJbmRleCIsIl91c2VTdGF0ZTE3IiwiYm90dG9tIiwibGVmdCIsIl91c2VTdGF0ZTE4Iiwic2xhc2hEcm9wZG93blBvcyIsInNldFNsYXNoRHJvcGRvd25Qb3MiLCJwb3NpdGlvblNsYXNoRHJvcGRvd24iLCJfd3JhcHBlclJlZiRjdXJyZW50IiwicmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInZpZXdwb3J0SCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwidmlld3BvcnRXIiwiaW5uZXJXaWR0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJ0b3AiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50IiwiZm9jdXMiLCJjbG9zZVBsdXNNZW51IiwiY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCIsImNsZWFyVGltZW91dCIsImhhbmRsZVBsdXNCdXR0b25Nb3VzZURvd24iLCJlIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiYWlDaGF0UGx1c09wZW4iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImhhbmRsZU1lbnRpb25CdXR0b25DbGljayIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJpbnNlcnRNZW50aW9uVHJpZ2dlciIsImhhbmRsZVBsdXNNZW51QXR0YWNoIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiYWlDaGF0VG9vbHMiLCJvcHRpb24iLCJsZW5ndGgiLCJjbGljayIsImJlZ2luVG9vbENoaXBFeGl0Iiwid2FzV2ViIiwid2FzRGVlcCIsIl9zZWFyY2hNb2RlQWN0aXZlUmVmJCIsImhhbmRsZVBsdXNNZW51V2ViU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVRdWlja0FjdGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwiaW5zZXJ0U2xhc2hUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50NCIsIl9lZGl0b3JSZWYkY3VycmVudDUiLCJkcmFmdCIsInRyaW0iLCJzZXRQbGFpblRleHQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ2Iiwic2VuZERpc2FibGVkIiwiYWdlbnRDaGFuZ2VkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJfZWRpdG9yUmVmJGN1cnJlbnQ3IiwicHJldmlvdXNMYXlvdXRNb2RlIiwidGltZW91dElkIiwiX2VkaXRvclJlZiRjdXJyZW50OCIsImlzU3BlY2lhbGlzdEFnZW50Iiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIl9yZWYyIiwiX3JlZjMiLCJlbnRyeSIsImlzSW50ZXJzZWN0aW5nIiwibWFpYUNvbnRleHRNZW50aW9uSW5pdCIsImRpc2Nvbm5lY3QiLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwiaGFuZGxlU2Vzc2lvbkNoYW5nZSIsIl9lZGl0b3JSZWYkY3VycmVudDkiLCJjbGVhciIsImRvY3VtZW50IiwiaGFuZGxlUmVmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudDAiLCJoYW5kbGVTZW5kTWVzc2FnZSIsIl9lZGl0b3JSZWYkY3VycmVudDEiLCJfc3RhdGUkdGV4dCIsIl9zdGF0ZSRtZW50aW9ucyIsIl9lZGl0b3JSZWYkY3VycmVudDEwIiwic3RhdGUiLCJzZXJpYWxpemUiLCJ0ZXh0IiwibWVudGlvbnMiLCJoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiX2VkaXRvclJlZiRjdXJyZW50MTEiLCJfc3RhdGUkdGV4dDIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMyIsImFpQ2hhdFF1aWNrQWN0aW9uU2VsZWN0IiwidHlwZV9xdWlja19hY3Rpb24iLCJvcmlnaW5fcXVpY2tfYWN0aW9uIiwidHJpZ2dlclBhcnQiLCJjb25jYXQiLCJiZWZvcmVUcmlnZ2VyIiwiZW5kc1dpdGgiLCJzbGljZSIsImlzRW1wdHlCZWZvcmVUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50MTIiLCJ0aXRsZSIsImluc2VydFNsYXNoQ29tbWFuZCIsImxhYmVsIiwiaGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3duIiwiaGFuZGxlRWRpdG9ySW5wdXQiLCJfcmVmNCIsInRyaWdnZXIiLCJzbGFzaFRyaWdnZXIiLCJhY3RpdmUiLCJhaUNoYXRRdWlja0FjdGlvbk9wZW4iLCJxdWVyeSIsImtleSIsInNoaWZ0S2V5IiwiaGFuZGxlRmlsZVNlbGVjdCIsImZpbGVzIiwidGFyZ2V0IiwiZmlsZXNJbnNlcnRlZCIsImlzTmV3Rm9ybWF0IiwiZXh0ZW5zaW9uIiwiaW5jbHVkZXMiLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwic3BsaXQiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJ2YWx1ZSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsInNob3dDaGlwc1JvdyIsIml0ZW1zIiwiY2hpcHNFbCIsInRvb2xiYXJFbCIsInVwZGF0ZUhlaWdodHMiLCJuZXh0Q2hpcHMiLCJjZWlsIiwiaGVpZ2h0IiwibmV4dFRvb2xiYXIiLCJwcmV2IiwiUmVzaXplT2JzZXJ2ZXIiLCJlZGl0b3JNYXhIZWlnaHQiLCJjaGlwc1Jvd0hlaWdodFB4IiwidG9vbGJhclJvd0hlaWdodFB4IiwidG9vbGJhckljb25Db2xvciIsInBsdXNNZW51SWNvbkNvbG9yIiwibWVudUljb24iLCJpc0N1c3RvbUFnZW50IiwiaGFzQ29yQWNjZXNzIiwiY29ubmVjdG9ycyIsInNvbWUiLCJjb25uZWN0b3IiLCJncm91cCIsInNsdWdzIiwic2x1ZyIsImFnZW50TW9kZWxOYW1lIiwibW9kZWxfZGlzcGxheV9uYW1lIiwic2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzIiwic2hvd01lbnRpb25CdXR0b24iLCJhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uIiwiY29sb3IiLCJjaGlwQ2xvc2VJY29uIiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsImxlYWRpbmdJY29uIiwibWFwIiwiYXR0YWNobWVudCIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsImlzSW1hZ2UiLCJzdGFydHNXaXRoIiwidGVzdCIsImNoaXBJY29uIiwiekluZGV4IiwiZGVmYXVsdFZhbHVlIiwib25DbGljayIsIm1heEhlaWdodCIsIm9uSW5wdXQiLCJvbktleURvd24iLCIkbWVudU9wZW4iLCJvbk1vdXNlRG93biIsIm9wZW4iLCJhbmNob3JFbCIsIm9uQ2xvc2UiLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJhbmNob3JPcmlnaW4iLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJzeCIsInNsb3RQcm9wcyIsInBhcGVyIiwiZWxldmF0aW9uIiwib3ZlcmZsb3ciLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW5Ub3AiLCIkaG92ZXJlZCIsIiRleGl0aW5nIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwiJGNsb3NlU2hvd24iLCJtb2RlbCIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsImJvZHkiLCJvblNlbGVjdCIsImFuY2hvclJlZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL01BSUFJbnB1dC9NQUlBSW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdm9pZCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1sb25lbHktaWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7XG4gIENoYW5nZUV2ZW50LFxuICBLZXlib2FyZEV2ZW50LFxuICBNb3VzZUV2ZW50LFxuICBSZWFjdE5vZGUsXG4gIE11dGFibGVSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IENoZWNrIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2snXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuXG5pbXBvcnQge1xuICBBY3RpdmVUb29sQ2hpcEljb25CdXR0b24sXG4gIEFjdGl2ZVRvb2xDaGlwTGFiZWwsXG4gIEFjdGl2ZVRvb2xDaGlwUm9vdCxcbiAgUGx1c01lbnVEaXZpZGVyLFxuICBQbHVzTWVudUlubmVyQ29sdW1uLFxuICBQbHVzTWVudUl0ZW1CdXR0b24sXG4gIFBsdXNNZW51SXRlbUxhYmVsLFxuICBQbHVzTWVudVBhcGVyLFxuICBQbHVzTWVudVRvb2xzUm93LFxuICBQbHVzVG9nZ2xlQnV0dG9uLFxuICBTQ0lucHV0Q2hpcHNSb3csXG4gIFNDSW5wdXRNZXRhSWNvbkJ1dHRvbixcbiAgU0NJbnB1dE1ldGFJbmRpY2F0b3JzLFxuICBTQ01JQXR0YWNobWVudCxcbiAgU0NNSUF0dGFjaG1lbnREZWxldGVJY29uLFxuICBTQ01JQXR0YWNobWVudERlbGV0ZU92ZXJsYXksXG4gIFNDTUlBdHRhY2htZW50SWNvbixcbiAgU0NNSUF0dGFjaG1lbnROYW1lLFxuICBTdHlsZWRNQUlBSW5wdXRXcmFwcGVyLFxuICBTdHlsZWRNQUlBU2VuZEJ1dHRvbixcbiAgU3R5bGVkTUFJQU1haW5Ub29sYmFyR3JpZCxcbiAgU0NJbnB1dEVkaXRvckNlbGwsXG4gIFNDSW5wdXRUb29sYmFyUm93LFxuICBTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU3RvcEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BJY29uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCwgTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFggfSBmcm9tICcuL21haWFJbnB1dExheW91dCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuLi9TbGFzaENvbW1hbmREcm9wZG93bidcbmltcG9ydCB7IHVzZVNsYXNoQ29tbWFuZHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbGFzaENvbW1hbmRzJ1xuaW1wb3J0IHsgcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hvdXJzUGxhbm5lclF1aWNrQWN0aW9uVHlwZSdcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQWN0aW9uJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBNYWlhSW5wdXRBZGRJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0QWRkSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dEF0dGFjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRBdHRhY2hJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dERlZXBTZWFyY2hJY29uJ1xuaW1wb3J0IHsgQ29yQWNjZXNzSWNvbiB9IGZyb20gJy4uL2ljb25zL0NvckFjY2Vzc0ljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRNZW50aW9uSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dE1lbnRpb25JY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0Um9ib3RJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0Um9ib3RJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0U2VuZEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRTZW5kSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFNsYXNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFNsYXNoSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFdlYlNlYXJjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRXZWJTZWFyY2hJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBNQUlBX0NIQVRfSU5QVVRfVUkgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvY29uZmlnJ1xuaW1wb3J0IHtcbiAgYWxsb3dlZEZpbGVUeXBlcyxcbiAgZmlsZVR5cGVzLFxuICBNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OLFxuICBNQVhfRklMRV9TSVpFX01CX09MRCxcbiAgTUFYX0ZJTEVfU0laRV9NQl9BVURJTyxcbiAgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMsXG59IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9mb3JtYXRFeHRlbnNpb25zJ1xuaW1wb3J0IHsgQVBQQ1VFU19FVkVOVFMsIHRyYWNrQXBwY3Vlc0V2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwY3VlcydcbmltcG9ydCB7IENoaXAgfSBmcm9tICcuLi9DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3IsIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZU1lbnRpb25Qb3BvdmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcblxuY29uc3QgVE9PTF9DSElQX0VYSVRfTVMgPSAyMjBcbmNvbnN0IFNMQVNIX0RST1BET1dOX1dJRFRIX1BYID0gMzQwXG5jb25zdCBTTEFTSF9EUk9QRE9XTl9MRUZUX09GRlNFVF9QWCA9IDI0XG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgc2NJZD86IHN0cmluZ1xuICApID0+IHZvaWRcbiAgb25TdG9wR2VuZXJhdGlvbj86ICgoKSA9PiB2b2lkKSB8IG51bGxcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzV3JpdGluZz86IGJvb2xlYW5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgb25DaGFuZ2U/OiAoKSA9PiB2b2lkXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgb25GaWxlQXR0YWNoPzogKGZpbGU6IEZpbGUpID0+IHZvaWRcbiAgb25EZWxldGVBdHRhY2htZW50PzogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBjaGF0SWQ/OiBzdHJpbmdcbiAgbmV3Q2hhdEtleT86IG51bWJlclxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG4gIC8qKiBFeHBvbmUgZWwgd3JhcHBlciBkZWwgaW5wdXQgcGFyYSBhbmNsYXIgcG9wb3ZlcnMgKG1lbmNpb25lcywgcGluIGRlIGNvbnRleHRvKS4gKi9cbiAgcG9wb3ZlckFuY2hvclJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuICBsYXlvdXRNb2RlPzogJ3NpZGViYXInIHwgJ2Z1bGxzY3JlZW4nIHwgJ2Zsb2F0aW5nJ1xuICAvKiogQ2hpcCBkZSBjb250ZXh0byAodGFyZWEvcHJveWVjdG8vY2xpZW50ZS9nbG9iYWwpIG1vc3RyYWRvIGVuIGxhIHRvb2xiYXIgZGVsIGlucHV0LiAqL1xuICBjb250ZXh0Q2hpcD86IHtcbiAgICBpdGVtczogc3RyaW5nW11cbiAgICB0eXBlPzogQ29udGV4dEVudGl0eVR5cGVcbiAgICBsZWFkaW5nSWNvbj86IFJlYWN0Tm9kZVxuICB9IHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0ID0gKHtcbiAgb25TZW5kTWVzc2FnZSxcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbiAgaXNTdHJlYW1pbmcsXG4gIGlzV3JpdGluZyxcbiAgb25TdG9wR2VuZXJhdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2hhbmdlLFxuICBhbGlnbkJ1dHRvbnMgPSAndmVydGljYWwnLFxuICBvbkZpbGVBdHRhY2gsXG4gIG9uRGVsZXRlQXR0YWNobWVudCxcbiAgYXR0YWNobWVudHMgPSBbXSxcbiAgY2hhdElkLFxuICBuZXdDaGF0S2V5LFxuICB0b29sdGlwWkluZGV4LFxuICBwb3BvdmVyQW5jaG9yUmVmOiBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYsXG4gIGxheW91dE1vZGUsXG4gIGNvbnRleHRDaGlwLFxufTogTUFJQUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hpcHNSb3dSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHRvb2xiYXJSb3dSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGludGVybmFsV3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3Qgd3JhcHBlclJlZiA9IGV4dGVybmFsUG9wb3ZlckFuY2hvclJlZiA/PyBpbnRlcm5hbFdyYXBwZXJSZWZcbiAgY29uc3QgW2hhc1R5cGluZ1ByZXNlbmNlLCBzZXRIYXNUeXBpbmdQcmVzZW5jZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2NoaXBzUm93SGVpZ2h0LCBzZXRDaGlwc1Jvd0hlaWdodF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbdG9vbGJhclJvd0hlaWdodCwgc2V0VG9vbGJhclJvd0hlaWdodF0gPSB1c2VTdGF0ZShNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWClcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3Qge1xuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVEZWVwU2VhcmNoLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBhZ2VudCxcbiAgICBpbml0aWFsRHJhZnQsXG4gICAgZGVlcExpbmtTZW5kUGVuZGluZ1JlZixcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBwbHVzTWVudVpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTMwMCwgJ292ZXJsYXknKVxuICBjb25zdCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IHtcbiAgICBwb3BvdmVyT3BlbixcbiAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsXG4gICAgaGFuZGxlVHJpZ2dlcixcbiAgICBoYW5kbGVLZXlEb3duOiBoYW5kbGVQb3BvdmVyS2V5RG93bixcbiAgICBwb3BvdmVyTm9kZSxcbiAgfSA9IHVzZU1lbnRpb25Qb3BvdmVyKHtcbiAgICBlZGl0b3JSZWYsXG4gICAgcG9wb3ZlckFuY2hvclJlZjogd3JhcHBlclJlZixcbiAgfSlcblxuICBjb25zdCBbcGx1c01lbnVBbmNob3IsIHNldFBsdXNNZW51QW5jaG9yXSA9IHVzZVN0YXRlPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2FjdGl2ZVRvb2xDaGlwSG92ZXJlZCwgc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdG9vbENoaXBFeGl0aW5nLCBzZXRUb29sQ2hpcEV4aXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2VhcmNoTW9kZUFjdGl2ZVJlZiA9IHVzZVJlZih7IHdlYjogZmFsc2UsIGRlZXA6IGZhbHNlIH0pXG4gIGNvbnN0IHBsdXNNZW51T3BlbiA9IEJvb2xlYW4ocGx1c01lbnVBbmNob3IpXG5cbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlUmVmID0gdXNlUmVmPE1BSUFJbnB1dFByb3BzWydsYXlvdXRNb2RlJ10+KHVuZGVmaW5lZClcblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICAvLyBTbGFzaCBjb21tYW5kcyBhcGxpY2FuIGEgY2xvbmVzIGVzcGVjaWFsaXN0YXMgeSBhbCBvcmNoZXN0cmF0b3IgZ2xvYmFsIChlc3RlIGFncmVnYSBsb3MgZGUgc3VzIHN1YmFnZW50ZXMpLlxuICAvLyBMb3MgY3VzdG9tIHkgbG9zIGNsb25lIGdsb2JhbC9tYWlha2VyIG5vIGxvcyB0aWVuZW4gaGFiaWxpdGFkb3MuXG4gIGNvbnN0IHsgY29tbWFuZHM6IHNsYXNoQ29tbWFuZHMgfSA9IHVzZVNsYXNoQ29tbWFuZHMoXG4gICAgKGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJykgfHxcbiAgICAgIChhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiBhZ2VudD8uZW50aXR5ICE9PSAnZ2xvYmFsJylcbiAgICAgID8gYWdlbnQ/LmlkXG4gICAgICA6IHVuZGVmaW5lZFxuICApXG4gIGNvbnN0IFtzaG93U2xhc2hEcm9wZG93biwgc2V0U2hvd1NsYXNoRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzbGFzaFF1ZXJ5LCBzZXRTbGFzaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBzbGFzaE1lbnVXYXNPcGVuUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzbGFzaERyb3Bkb3duWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IFtzbGFzaERyb3Bkb3duUG9zLCBzZXRTbGFzaERyb3Bkb3duUG9zXSA9IHVzZVN0YXRlKHsgYm90dG9tOiAwLCBsZWZ0OiAwIH0pXG5cbiAgY29uc3QgcG9zaXRpb25TbGFzaERyb3Bkb3duID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB3cmFwcGVyUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKCFyZWN0IHx8IHJlY3Qud2lkdGggPD0gMCkgcmV0dXJuXG5cbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heChcbiAgICAgIDgsXG4gICAgICBNYXRoLm1pbih2aWV3cG9ydFcgLSBTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCAtIDgsIHJlY3QubGVmdCArIFNMQVNIX0RST1BET1dOX0xFRlRfT0ZGU0VUX1BYKVxuICAgIClcblxuICAgIHNldFNsYXNoRHJvcGRvd25Qb3Moe1xuICAgICAgbGVmdCxcbiAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gcmVjdC50b3AgKyA0LFxuICAgIH0pXG4gIH0sIFt3cmFwcGVyUmVmXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1NsYXNoRHJvcGRvd24pIHJldHVybiB1bmRlZmluZWRcblxuICAgIHBvc2l0aW9uU2xhc2hEcm9wZG93bigpXG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gcG9zaXRpb25TbGFzaERyb3Bkb3duKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3Nob3dTbGFzaERyb3Bkb3duLCBwb3NpdGlvblNsYXNoRHJvcGRvd25dKVxuXG4gIC8qKiBUcmFzIGVsZWdpciBvIHF1aXRhciBiw7pzcXVlZGEgd2ViL3Byb2Z1bmRhOiB2b2x2ZXIgYWwgdGV4dGFyZWEgKFBvcG92ZXIvbWVudSBwdWVkZSByb2JhciBmb2NvKS4gKi9cbiAgY29uc3Qgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCAwKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjbG9zZVBsdXNNZW51ID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50KVxuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c0J1dHRvbk1vdXNlRG93biA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIC8vIEV2aXRhIHF1ZSBlbCBib3TDs24gcm9iZSBlbCBmb2NvIGRlbCBpbnB1dCBhbCBhYnJpciBlbCBtZW7Dui5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNCdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAocGx1c01lbnVBbmNob3IpIHtcbiAgICAgIGNsb3NlUGx1c01lbnUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFBsdXNNZW51QW5jaG9yKGUuY3VycmVudFRhcmdldClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UGx1c09wZW4sIHsgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLCAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU1lbnRpb25CdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uVHJpZ2dlcigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0U2xhc2hUcmlnZ2VyKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgfSwgW3Jlc2V0TWVudGlvbk9wZW5UcmFja2luZywgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgLy8gTWFudGVuZXIgZm9jbyBhbCBzZWxlY2Npb25hciB1biBjb250ZXh0byByZWNpZW50ZSAoZWwgY2xpY2sgZW4gZWwgcGlsbCBsbyByb2JhIGFsIGlucHV0KS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZvY3VzID0gKCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICBpZiAoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IG1lbnRpb25zID0gc3RhdGU/Lm1lbnRpb25zID8/IFtdXG4gICAgb25TZW5kTWVzc2FnZSh0ZXh0LCBhdHRhY2htZW50cywgbWVudGlvbnMpXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZShmYWxzZSlcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZDogQWN0aW9uKSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QsIHtcbiAgICAgICAgdHlwZV9xdWlja19hY3Rpb246IHJlc29sdmVRdWlja0FjdGlvblR5cGUoY29tbWFuZCksXG4gICAgICAgIG9yaWdpbl9xdWlja19hY3Rpb246ICdzbGFzaF9tZW51JyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICAgIGNvbnN0IHRyaWdnZXJQYXJ0ID0gYC8ke3NsYXNoUXVlcnl9YFxuICAgICAgY29uc3QgYmVmb3JlVHJpZ2dlciA9IHRleHQuZW5kc1dpdGgodHJpZ2dlclBhcnQpID8gdGV4dC5zbGljZSgwLCAtdHJpZ2dlclBhcnQubGVuZ3RoKSA6IHRleHRcbiAgICAgIGNvbnN0IGlzRW1wdHlCZWZvcmVUcmlnZ2VyID0gYmVmb3JlVHJpZ2dlci50cmltKCkgPT09ICcnXG5cbiAgICAgIGlmIChpc0VtcHR5QmVmb3JlVHJpZ2dlcikge1xuICAgICAgICBvblNlbmRNZXNzYWdlKGNvbW1hbmQudGl0bGUsIGF0dGFjaG1lbnRzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbW1hbmQuaWQpXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRTbGFzaENvbW1hbmQoeyBpZDogY29tbWFuZC5pZCwgbGFiZWw6IGNvbW1hbmQudGl0bGUgfSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgc2xhc2hRdWVyeSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgIH06IHtcbiAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICAgIHNsYXNoVHJpZ2dlcj86IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICB9KSA9PiB7XG4gICAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgb25DaGFuZ2U/LigpXG4gICAgICBoYW5kbGVUcmlnZ2VyKHRyaWdnZXIpXG5cbiAgICAgIGlmIChzbGFzaFRyaWdnZXI/LmFjdGl2ZSAmJiBzbGFzaENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25PcGVuKVxuICAgICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bih0cnVlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KHNsYXNoVHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyLCBzbGFzaENvbW1hbmRzLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGZvcm1hdG9zIGFudGVyaW9yZXM6IGhhc3RhIDFNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN0b3BHZW5lcmF0aW9uID0gKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTdG9wUmVzcG9uc2UpXG4gICAgb25TdG9wR2VuZXJhdGlvbj8uKClcbiAgfVxuXG4gIGNvbnN0IHNob3dDaGlwc1JvdyA9IEJvb2xlYW4oY29udGV4dENoaXA/Lml0ZW1zPy5sZW5ndGggfHwgYXR0YWNobWVudHMubGVuZ3RoKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2hpcHNFbCA9IGNoaXBzUm93UmVmLmN1cnJlbnRcbiAgICBjb25zdCB0b29sYmFyRWwgPSB0b29sYmFyUm93UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IHVwZGF0ZUhlaWdodHMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBuZXh0Q2hpcHMgPSBzaG93Q2hpcHNSb3cgJiYgY2hpcHNFbCA/IE1hdGguY2VpbChjaGlwc0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgOiAwXG4gICAgICBjb25zdCBuZXh0VG9vbGJhciA9IHRvb2xiYXJFbFxuICAgICAgICA/IE1hdGguY2VpbCh0b29sYmFyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KVxuICAgICAgICA6IE1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYXG5cbiAgICAgIHNldENoaXBzUm93SGVpZ2h0KHByZXYgPT4gKHByZXYgPT09IG5leHRDaGlwcyA/IHByZXYgOiBuZXh0Q2hpcHMpKVxuICAgICAgc2V0VG9vbGJhclJvd0hlaWdodChwcmV2ID0+IChwcmV2ID09PSBuZXh0VG9vbGJhciA/IHByZXYgOiBuZXh0VG9vbGJhcikpXG4gICAgfVxuXG4gICAgdXBkYXRlSGVpZ2h0cygpXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih1cGRhdGVIZWlnaHRzKVxuICAgIGlmIChzaG93Q2hpcHNSb3cgJiYgY2hpcHNFbCkgb2JzZXJ2ZXIub2JzZXJ2ZShjaGlwc0VsKVxuICAgIGlmICh0b29sYmFyRWwpIG9ic2VydmVyLm9ic2VydmUodG9vbGJhckVsKVxuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICB9LCBbc2hvd0NoaXBzUm93LCBjb250ZXh0Q2hpcD8uaXRlbXM/Lmxlbmd0aCwgYXR0YWNobWVudHMubGVuZ3RoXSlcblxuICBjb25zdCBlZGl0b3JNYXhIZWlnaHQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBnZXRNYWlhSW5wdXRFZGl0b3JNYXhIZWlnaHQoe1xuICAgICAgICBjaGlwc1Jvd0hlaWdodFB4OiBjaGlwc1Jvd0hlaWdodCxcbiAgICAgICAgdG9vbGJhclJvd0hlaWdodFB4OiB0b29sYmFyUm93SGVpZ2h0LFxuICAgICAgfSksXG4gICAgW2NoaXBzUm93SGVpZ2h0LCB0b29sYmFyUm93SGVpZ2h0XVxuICApXG5cbiAgY29uc3QgdG9vbGJhckljb25Db2xvciA9ICcjODA4MDgwJ1xuICBjb25zdCBwbHVzTWVudUljb25Db2xvciA9IE1BSUFfQ0hBVF9JTlBVVF9VSS5tZW51SWNvblxuICBjb25zdCBpc0N1c3RvbUFnZW50ID0gYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nXG4gIGNvbnN0IGhhc0NvckFjY2VzcyA9IEJvb2xlYW4oXG4gICAgaXNDdXN0b21BZ2VudCAmJlxuICAgIGFnZW50Py5jb25uZWN0b3JzPy5zb21lKFxuICAgICAgY29ubmVjdG9yID0+XG4gICAgICAgIGNvbm5lY3Rvci5ncm91cCA9PT0gJ0NPUicgJiYgY29ubmVjdG9yLnNsdWdzLnNvbWUoc2x1ZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycgJiYgc2x1Zy50cmltKCkubGVuZ3RoID4gMClcbiAgICApXG4gIClcbiAgY29uc3QgYWdlbnRNb2RlbE5hbWUgPSBpc0N1c3RvbUFnZW50ID8gYWdlbnQ/Lm1vZGVsX2Rpc3BsYXlfbmFtZT8udHJpbSgpIHx8IG51bGwgOiBudWxsXG4gIGNvbnN0IHNob3dDdXN0b21NZXRhSW5kaWNhdG9ycyA9IGhhc0NvckFjY2VzcyB8fCBCb29sZWFuKGFnZW50TW9kZWxOYW1lKVxuICBjb25zdCBzaG93TWVudGlvbkJ1dHRvbiA9IGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyB8fCBoYXNDb3JBY2Nlc3NcblxuICBsZXQgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbjogUmVhY3ROb2RlXG4gIGlmIChhY3RpdmVUb29sQ2hpcEhvdmVyZWQpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPENyb3NzIGNvbG9yPXtNQUlBX0NIQVRfSU5QVVRfVUkuY2hpcENsb3NlSWNvbn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2UgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxNYWlhSW5wdXRXZWJTZWFyY2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8TWFpYUlucHV0RGVlcFNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgZGF0YS1hcHBjdWVzPVwibWFpYV9jaGF0X2lucHV0XCJcbiAgICAgICAgZGF0YS1tYWlhLXN0cmVhbWluZz17aXNTdHJlYW1pbmcgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgPlxuICAgICAgICB7c2hvd0NoaXBzUm93ICYmIChcbiAgICAgICAgICA8U0NJbnB1dENoaXBzUm93IHJlZj17Y2hpcHNSb3dSZWZ9PlxuICAgICAgICAgICAge2NvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8Q2hpcFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtjb250ZXh0Q2hpcC5pdGVtc31cbiAgICAgICAgICAgICAgICB0eXBlPXtjb250ZXh0Q2hpcC50eXBlfVxuICAgICAgICAgICAgICAgIGxlYWRpbmdJY29uPXtjb250ZXh0Q2hpcC5sZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QoYXR0YWNobWVudC5uYW1lIHx8ICcnKVxuICAgICAgICAgICAgICBjb25zdCBjaGlwSWNvbiA9IGlzSW1hZ2UgPyAoXG4gICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBdHRhY2hJY29uIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsxM30gaGVpZ2h0PXsxM30gLz5cbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2luZGV4fWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudEljb24+e2NoaXBJY29ufTwvU0NNSUF0dGFjaG1lbnRJY29uPlxuICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnROYW1lPnthdHRhY2htZW50Lm5hbWV9PC9TQ01JQXR0YWNobWVudE5hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZU92ZXJsYXkgYXJpYS1oaWRkZW4gLz5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlSWNvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQXR0YWNobWVudEFyaWEnLCB7IGRlZmF1bHRWYWx1ZTogJ1F1aXRhciBhcmNoaXZvJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiIzY2NjY2NlwiIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0lucHV0Q2hpcHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICAgIDxTQ0lucHV0RWRpdG9yQ2VsbD5cbiAgICAgICAgICAgIDxDb250ZXh0TWVudGlvbkVkaXRvclxuICAgICAgICAgICAgICByZWY9e2VkaXRvclJlZn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIG1heEhlaWdodD17ZWRpdG9yTWF4SGVpZ2h0fVxuICAgICAgICAgICAgICBvbklucHV0PXtoYW5kbGVFZGl0b3JJbnB1dH1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDSW5wdXRFZGl0b3JDZWxsPlxuICAgICAgICAgIDxTQ0lucHV0VG9vbGJhclJvdyByZWY9e3Rvb2xiYXJSb3dSZWZ9PlxuICAgICAgICAgICAgPFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGw+XG4gICAgICAgICAgICAgIDxQbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICRtZW51T3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2hhbmRsZVBsdXNCdXR0b25Nb3VzZURvd259XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQbHVzQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5QbHVzTWVudUFyaWEnKX1cbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8TWFpYUlucHV0QWRkSWNvbiBjb2xvcj17dG9vbGJhckljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgIDwvUGx1c1RvZ2dsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICB7c2hvd01lbnRpb25CdXR0b24gJiYgKFxuICAgICAgICAgICAgICAgICAgPFBsdXNUb2dnbGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICRtZW51T3Blbj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnRpb25CdXR0b25DbGlja31cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5NZW50aW9uQXJpYScpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0TWVudGlvbkljb24gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c1RvZ2dsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXG4gICAgICAgICAgICAgICAgICBvcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgICBhbmNob3JFbD17cGx1c01lbnVBbmNob3J9XG4gICAgICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZVBsdXNNZW51fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1c1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1c1xuICAgICAgICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICAgIHN4PXt7IHpJbmRleDogcGx1c01lbnVaSW5kZXggfX1cbiAgICAgICAgICAgICAgICAgIHNsb3RQcm9wcz17e1xuICAgICAgICAgICAgICAgICAgICBwYXBlcjoge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJy00cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudUF0dGFjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0QXR0YWNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMX0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudUF0dGFjaCcpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51V2ViU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRXZWJTZWFyY2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsPnt0KCdjaGF0LnNlYXJjaFdlYicpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudURlZXBTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dERlZXBTZWFyY2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsPnt0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzRGVlcFNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudURpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVF1aWNrQWN0aW9uc30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0U2xhc2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsPnt0KCdjaGF0LnBsdXNNZW51UXVpY2tBY3Rpb25zJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgICAgICB7KGlzV2ViU2VhcmNoQWN0aXZlIHx8IGlzRGVlcFNlYXJjaEFjdGl2ZSkgJiYgKFxuICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwUm9vdFxuICAgICAgICAgICAgICAgICAgICAkaG92ZXJlZD17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgICAkZXhpdGluZz17dG9vbENoaXBFeGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgJGNsb3NlU2hvd249e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0LnJlbW92ZUFjdGl2ZVRvb2xBcmlhJyl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHthY3RpdmVUb29sQ2hpcExlYWRpbmdJY29ufVxuICAgICAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gdCgnY2hhdC5zZWFyY2hXZWInKSA6IHQoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwUm9vdD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1BsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgICA8L1N0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGw+XG4gICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbD5cbiAgICAgICAgICAgICAge3Nob3dDdXN0b21NZXRhSW5kaWNhdG9ycyAmJiAoXG4gICAgICAgICAgICAgICAgPFNDSW5wdXRNZXRhSW5kaWNhdG9ycz5cbiAgICAgICAgICAgICAgICAgIHtoYXNDb3JBY2Nlc3MgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdjaGF0LmZvb3Rlci5jb3JBY2Nlc3NUb29sdGlwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDSW5wdXRNZXRhSWNvbkJ1dHRvbiBhcmlhLWxhYmVsPXt0KCdjaGF0LmZvb3Rlci5jb3JBY2Nlc3NMYWJlbCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JBY2Nlc3NJY29uIHdpZHRoPXsxNX0gaGVpZ2h0PXsxNH0gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7YWdlbnRNb2RlbE5hbWUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdjaGlwTGxtLnRvb2x0aXAnLCB7IG1vZGVsOiBhZ2VudE1vZGVsTmFtZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgICB7Li4uKHRvb2x0aXBaSW5kZXggIT0gbnVsbCA/IHsgekluZGV4OiB0b29sdGlwWkluZGV4IH0gOiB7fSl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NJbnB1dE1ldGFJY29uQnV0dG9uIGFyaWEtbGFiZWw9e2FnZW50TW9kZWxOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRSb2JvdEljb24gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSBjb2xvcj17dG9vbGJhckljb25Db2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDSW5wdXRNZXRhSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1NDSW5wdXRNZXRhSW5kaWNhdG9ycz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzV3JpdGluZyA/IChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zdG9wJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BCdXR0b24gZGlzYWJsZWQ9e2ZhbHNlfSBvbkNsaWNrPXtoYW5kbGVTdG9wR2VuZXJhdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZW5kJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbmREaXNhYmxlZCB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9e2hhc1R5cGluZ1ByZXNlbmNlIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0U2VuZEljb24gY29sb3I9XCIjQkZCRkJGXCIgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTZW5kQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbD5cbiAgICAgICAgICA8L1NDSW5wdXRUb29sYmFyUm93PlxuICAgICAgICA8L1N0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkTUFJQUlucHV0V3JhcHBlcj5cbiAgICAgIHttb2RhbFByb3BzLmlzT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbEZpbGVFeGNlZWRzXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogZmFsc2UsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzOiBbXSwgZmlsZVNpemVzOiB7fSB9KX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGZpbGVTaXplcz17bW9kYWxQcm9wcy5maWxlU2l6ZXN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge3BvcG92ZXJOb2RlICYmIGNyZWF0ZVBvcnRhbChwb3BvdmVyTm9kZSwgZG9jdW1lbnQuYm9keSl9XG4gICAgICB7c2hvd1NsYXNoRHJvcGRvd24gJiZcbiAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgIDxTbGFzaENvbW1hbmREcm9wZG93blxuICAgICAgICAgICAgY29tbWFuZHM9e3NsYXNoQ29tbWFuZHN9XG4gICAgICAgICAgICBxdWVyeT17c2xhc2hRdWVyeX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmR9XG4gICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd259XG4gICAgICAgICAgICBib3R0b209e3NsYXNoRHJvcGRvd25Qb3MuYm90dG9tfVxuICAgICAgICAgICAgbGVmdD17c2xhc2hEcm9wZG93blBvcy5sZWZ0fVxuICAgICAgICAgICAgekluZGV4PXtzbGFzaERyb3Bkb3duWkluZGV4fVxuICAgICAgICAgICAgYW5jaG9yUmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FNRUEsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLGVBQWUsRUFDZkMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FDRUMsd0JBQXdCLEVBQ3hCQyxt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
|