@projectcor/maia-components 2.11.96-1 → 2.11.97
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/CHANGELOG.md +7 -0
- package/lib/components/atoms/Chip/Chip.js +5 -12
- package/lib/components/atoms/Chip/styles.js +6 -6
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +40 -123
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +2 -6
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +5 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.js +347 -403
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -5
- package/lib/components/atoms/MAIAInput/styles.js +90 -99
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +41 -54
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +12 -25
- package/lib/components/atoms/icons/index.js +1 -10
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +7 -18
- package/lib/components/molecules/ChatAIHome/styles.js +38 -54
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +36 -11
- package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -10
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +2 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +8 -1
- package/lib/components/molecules/ChatFooter/ChatFooter.js +62 -23
- package/lib/components/molecules/Sidebar/Sidebar.js +3 -14
- package/lib/hooks/useMentionPopover.js +2 -4
- package/lib/lang/br/index.js +4 -6
- package/lib/lang/en/index.js +4 -6
- package/lib/lang/es/index.js +4 -6
- package/lib/lang/fr/index.js +3 -8
- package/lib/styles/config.js +2 -2
- package/lib/utils/chatInputFiles.js +52 -0
- package/package.json +1 -1
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -23
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
|
@@ -11,46 +11,40 @@ 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,
|
|
14
|
+
import { useCallback, useEffect, 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';
|
|
17
22
|
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
18
23
|
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
19
24
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
25
|
+
import colors from '@projectcor/theme/lib/base/colors';
|
|
26
|
+
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon, StyledMAIADropOverlay } from './styles';
|
|
22
27
|
import { useGlobalContext } from '../../../context/global-context';
|
|
23
28
|
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
24
29
|
import { SlashCommandDropdown } from '../SlashCommandDropdown';
|
|
25
30
|
import { useSlashCommands } from '../../../hooks/useSlashCommands';
|
|
26
31
|
import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
|
|
27
32
|
import { useT } from '../../../hooks/useT';
|
|
28
|
-
import {
|
|
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';
|
|
33
|
+
import { TelescopeIcon } from '../icons/TelescopeIcon';
|
|
38
34
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
39
35
|
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
40
36
|
import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
|
|
41
37
|
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';
|
|
42
38
|
import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
|
|
43
|
-
import { Chip } from '../Chip';
|
|
44
39
|
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
45
40
|
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
46
41
|
// eslint-disable-next-line import/no-cycle
|
|
47
42
|
import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
43
|
+
import { dataTransferHasFiles, filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
48
44
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
49
45
|
var TOOL_CHIP_EXIT_MS = 220;
|
|
50
|
-
var SLASH_DROPDOWN_WIDTH_PX = 340;
|
|
51
|
-
var SLASH_DROPDOWN_LEFT_OFFSET_PX = 24;
|
|
52
46
|
export var MAIAInput = function MAIAInput(_ref) {
|
|
53
|
-
var _agent$entity
|
|
47
|
+
var _agent$entity;
|
|
54
48
|
var onSendMessage = _ref.onSendMessage,
|
|
55
49
|
className = _ref.className,
|
|
56
50
|
disabled = _ref.disabled,
|
|
@@ -69,28 +63,25 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
69
63
|
newChatKey = _ref.newChatKey,
|
|
70
64
|
tooltipZIndex = _ref.tooltipZIndex,
|
|
71
65
|
externalPopoverAnchorRef = _ref.popoverAnchorRef,
|
|
72
|
-
layoutMode = _ref.layoutMode
|
|
73
|
-
contextChip = _ref.contextChip;
|
|
66
|
+
layoutMode = _ref.layoutMode;
|
|
74
67
|
var _useT = useT(),
|
|
75
68
|
t = _useT.t;
|
|
76
69
|
var editorRef = useRef(null);
|
|
77
70
|
var fileInputRef = useRef(null);
|
|
78
|
-
var chipsRowRef = useRef(null);
|
|
79
|
-
var toolbarRowRef = useRef(null);
|
|
80
71
|
var internalWrapperRef = useRef(null);
|
|
81
72
|
var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
|
|
82
73
|
var _useState = useState(false),
|
|
83
74
|
_useState2 = _slicedToArray(_useState, 2),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var _useState3 = useState(
|
|
75
|
+
hasWrappedToSecondLine = _useState2[0],
|
|
76
|
+
setHasWrappedToSecondLine = _useState2[1];
|
|
77
|
+
var _useState3 = useState(false),
|
|
87
78
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
var _useState5 = useState(
|
|
79
|
+
hasTypingPresence = _useState4[0],
|
|
80
|
+
setHasTypingPresence = _useState4[1];
|
|
81
|
+
var _useState5 = useState(false),
|
|
91
82
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
92
|
-
|
|
93
|
-
|
|
83
|
+
isFocused = _useState6[0],
|
|
84
|
+
setIsFocused = _useState6[1];
|
|
94
85
|
var _useState7 = useState({
|
|
95
86
|
isOpen: false,
|
|
96
87
|
excludedFiles: [],
|
|
@@ -132,7 +123,12 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
132
123
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
133
124
|
toolChipExiting = _useState12[0],
|
|
134
125
|
setToolChipExiting = _useState12[1];
|
|
126
|
+
var _useState13 = useState(false),
|
|
127
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
128
|
+
isFileDragActive = _useState14[0],
|
|
129
|
+
setIsFileDragActive = _useState14[1];
|
|
135
130
|
var toolChipExitTimerRef = useRef(null);
|
|
131
|
+
var fileDragCounterRef = useRef(0);
|
|
136
132
|
var searchModeActiveRef = useRef({
|
|
137
133
|
web: false,
|
|
138
134
|
deep: false
|
|
@@ -153,48 +149,15 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
153
149
|
// Los custom y los clone global/maiaker no los tienen habilitados.
|
|
154
150
|
var _useSlashCommands = useSlashCommands((agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global' || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'global' ? agent === null || agent === void 0 ? void 0 : agent.id : undefined),
|
|
155
151
|
slashCommands = _useSlashCommands.commands;
|
|
156
|
-
var
|
|
157
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
158
|
-
showSlashDropdown = _useState14[0],
|
|
159
|
-
setShowSlashDropdown = _useState14[1];
|
|
160
|
-
var _useState15 = useState(''),
|
|
152
|
+
var _useState15 = useState(false),
|
|
161
153
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
var
|
|
165
|
-
var slashDropdownZIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
166
|
-
var _useState17 = useState({
|
|
167
|
-
bottom: 0,
|
|
168
|
-
left: 0
|
|
169
|
-
}),
|
|
154
|
+
showSlashDropdown = _useState16[0],
|
|
155
|
+
setShowSlashDropdown = _useState16[1];
|
|
156
|
+
var _useState17 = useState(''),
|
|
170
157
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
var
|
|
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]);
|
|
158
|
+
slashQuery = _useState18[0],
|
|
159
|
+
setSlashQuery = _useState18[1];
|
|
160
|
+
var slashMenuWasOpenRef = useRef(false);
|
|
198
161
|
|
|
199
162
|
/** Tras elegir o quitar búsqueda web/profunda: volver al textarea (Popover/menu puede robar foco). */
|
|
200
163
|
var scheduleInputFocusAfterToolAction = function scheduleInputFocusAfterToolAction() {
|
|
@@ -210,7 +173,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
210
173
|
};
|
|
211
174
|
var closePlusMenu = function closePlusMenu() {
|
|
212
175
|
setPlusMenuAnchor(null);
|
|
213
|
-
scheduleInputFocusAfterToolAction();
|
|
214
176
|
};
|
|
215
177
|
var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
|
|
216
178
|
if (toolChipExitTimerRef.current !== null) {
|
|
@@ -219,10 +181,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
219
181
|
}
|
|
220
182
|
setToolChipExiting(false);
|
|
221
183
|
};
|
|
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
|
-
};
|
|
226
184
|
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
227
185
|
e.stopPropagation();
|
|
228
186
|
if (plusMenuAnchor) {
|
|
@@ -234,13 +192,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
234
192
|
agent_type: analyticsAgentType
|
|
235
193
|
}, analyticsCloneEntityPayload));
|
|
236
194
|
};
|
|
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
|
-
};
|
|
244
195
|
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
245
196
|
var _fileInputRef$current;
|
|
246
197
|
closePlusMenu();
|
|
@@ -309,20 +260,14 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
309
260
|
}, analyticsCloneEntityPayload));
|
|
310
261
|
scheduleInputFocusAfterToolAction();
|
|
311
262
|
};
|
|
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
|
-
};
|
|
318
263
|
useEffect(function () {
|
|
319
264
|
if (!disabled) {
|
|
320
|
-
var _editorRef$
|
|
321
|
-
(_editorRef$
|
|
265
|
+
var _editorRef$current2;
|
|
266
|
+
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.focus();
|
|
322
267
|
}
|
|
323
268
|
}, [disabled]);
|
|
324
269
|
useEffect(function () {
|
|
325
|
-
var _editorRef$
|
|
270
|
+
var _editorRef$current3;
|
|
326
271
|
var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
|
|
327
272
|
if (!draft || initialDraftAppliedRef.current || disabled) {
|
|
328
273
|
return;
|
|
@@ -331,13 +276,16 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
331
276
|
if (deepLinkSendPendingRef) {
|
|
332
277
|
deepLinkSendPendingRef.current = true;
|
|
333
278
|
}
|
|
334
|
-
(_editorRef$
|
|
279
|
+
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.setPlainText(draft);
|
|
335
280
|
setHasTypingPresence(true);
|
|
336
281
|
if (!disabled) {
|
|
337
|
-
var _editorRef$
|
|
338
|
-
(_editorRef$
|
|
282
|
+
var _editorRef$current4;
|
|
283
|
+
(_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
|
|
339
284
|
}
|
|
340
285
|
}, [initialDraft, disabled, deepLinkSendPendingRef]);
|
|
286
|
+
var compactSingleRowToolbar = useMemo(function () {
|
|
287
|
+
return attachments.length === 0 && !isWebSearchActive && !isDeepSearchActive && !hasWrappedToSecondLine;
|
|
288
|
+
}, [attachments.length, isWebSearchActive, isDeepSearchActive, hasWrappedToSecondLine]);
|
|
341
289
|
var sendDisabled = useMemo(function () {
|
|
342
290
|
return !hasTypingPresence && attachments.length === 0;
|
|
343
291
|
}, [hasTypingPresence, attachments.length]);
|
|
@@ -372,8 +320,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
372
320
|
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
373
321
|
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
374
322
|
setTimeout(function () {
|
|
375
|
-
var _editorRef$
|
|
376
|
-
if (!disabled) (_editorRef$
|
|
323
|
+
var _editorRef$current5;
|
|
324
|
+
if (!disabled) (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.focus();
|
|
377
325
|
}, delay);
|
|
378
326
|
}
|
|
379
327
|
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
@@ -393,8 +341,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
393
341
|
}
|
|
394
342
|
var timeoutId = window.setTimeout(function () {
|
|
395
343
|
if (!disabled) {
|
|
396
|
-
var _editorRef$
|
|
397
|
-
(_editorRef$
|
|
344
|
+
var _editorRef$current6;
|
|
345
|
+
(_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
|
|
398
346
|
}
|
|
399
347
|
}, 200);
|
|
400
348
|
return function () {
|
|
@@ -425,12 +373,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
425
373
|
// Clear input when session changes (user switches to a different chat)
|
|
426
374
|
useEffect(function () {
|
|
427
375
|
var handleSessionChange = function handleSessionChange() {
|
|
428
|
-
var _editorRef$
|
|
376
|
+
var _editorRef$current7;
|
|
429
377
|
if (deepLinkSendPendingRef) {
|
|
430
378
|
deepLinkSendPendingRef.current = false;
|
|
431
379
|
}
|
|
432
|
-
(_editorRef$
|
|
380
|
+
(_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.clear();
|
|
433
381
|
setHasTypingPresence(false);
|
|
382
|
+
setHasWrappedToSecondLine(false);
|
|
434
383
|
setShowSlashDropdown(false);
|
|
435
384
|
setSlashQuery('');
|
|
436
385
|
resetMentionOpenTracking();
|
|
@@ -446,8 +395,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
446
395
|
var handleRefocus = function handleRefocus() {
|
|
447
396
|
if (disabled) return;
|
|
448
397
|
requestAnimationFrame(function () {
|
|
449
|
-
var _editorRef$
|
|
450
|
-
(_editorRef$
|
|
398
|
+
var _editorRef$current8;
|
|
399
|
+
(_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
|
|
451
400
|
});
|
|
452
401
|
};
|
|
453
402
|
document.addEventListener('maia-input-refocus', handleRefocus);
|
|
@@ -456,41 +405,43 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
456
405
|
};
|
|
457
406
|
}, [disabled]);
|
|
458
407
|
var handleSendMessage = useCallback(function () {
|
|
459
|
-
var _editorRef$
|
|
460
|
-
var state = (_editorRef$
|
|
408
|
+
var _editorRef$current9, _state$text, _state$mentions, _editorRef$current0;
|
|
409
|
+
var state = (_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 ? void 0 : _editorRef$current9.serialize();
|
|
461
410
|
var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
|
|
462
411
|
if (!text.trim() && !attachments.length) return;
|
|
463
412
|
var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
|
|
464
413
|
onSendMessage(text, attachments, mentions);
|
|
465
|
-
(_editorRef$
|
|
414
|
+
(_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.clear();
|
|
466
415
|
setHasTypingPresence(false);
|
|
416
|
+
setHasWrappedToSecondLine(false);
|
|
467
417
|
setShowSlashDropdown(false);
|
|
468
418
|
setSlashQuery('');
|
|
469
419
|
resetMentionOpenTracking();
|
|
470
420
|
}, [attachments, onSendMessage, resetMentionOpenTracking]);
|
|
471
421
|
var handleSelectSlashCommand = useCallback(function (command) {
|
|
472
|
-
var _editorRef$
|
|
422
|
+
var _editorRef$current1, _state$text2, _editorRef$current11;
|
|
473
423
|
eventAmplitude(EVENTS.aiChatQuickActionSelect, {
|
|
474
424
|
type_quick_action: resolveQuickActionType(command),
|
|
475
425
|
origin_quick_action: 'slash_menu'
|
|
476
426
|
});
|
|
477
|
-
var state = (_editorRef$
|
|
427
|
+
var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
|
|
478
428
|
var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
|
|
479
429
|
var triggerPart = "/".concat(slashQuery);
|
|
480
430
|
var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
|
|
481
431
|
var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
|
|
482
432
|
if (isEmptyBeforeTrigger) {
|
|
483
|
-
var _editorRef$
|
|
433
|
+
var _editorRef$current10;
|
|
484
434
|
onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
|
|
485
|
-
(_editorRef$
|
|
435
|
+
(_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
|
|
486
436
|
setHasTypingPresence(false);
|
|
437
|
+
setHasWrappedToSecondLine(false);
|
|
487
438
|
setShowSlashDropdown(false);
|
|
488
439
|
setSlashQuery('');
|
|
489
440
|
slashMenuWasOpenRef.current = false;
|
|
490
441
|
resetMentionOpenTracking();
|
|
491
442
|
return;
|
|
492
443
|
}
|
|
493
|
-
(_editorRef$
|
|
444
|
+
(_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 || _editorRef$current11.insertSlashCommand({
|
|
494
445
|
id: command.id,
|
|
495
446
|
label: command.title
|
|
496
447
|
});
|
|
@@ -503,10 +454,27 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
503
454
|
slashMenuWasOpenRef.current = false;
|
|
504
455
|
};
|
|
505
456
|
var handleEditorInput = useCallback(function (_ref4) {
|
|
457
|
+
var _editorRef$current12;
|
|
506
458
|
var text = _ref4.text,
|
|
507
459
|
trigger = _ref4.trigger,
|
|
508
460
|
slashTrigger = _ref4.slashTrigger;
|
|
509
|
-
|
|
461
|
+
var visualMultiline = !!((_editorRef$current12 = editorRef.current) !== null && _editorRef$current12 !== void 0 && _editorRef$current12.hasVisualMultiline());
|
|
462
|
+
var explicitMultiline = text.includes('\n');
|
|
463
|
+
var isLikelyFirstCharMeasurementGlitch = text.length <= 1 && !explicitMultiline && visualMultiline;
|
|
464
|
+
var stableVisualMultiline = isLikelyFirstCharMeasurementGlitch ? false : visualMultiline;
|
|
465
|
+
var nextIsMultiline = explicitMultiline || stableVisualMultiline;
|
|
466
|
+
var nextHasTypingPresence = text.trim().length > 0;
|
|
467
|
+
var nextTypingPresence = text.trim().length > 0;
|
|
468
|
+
setHasTypingPresence(nextTypingPresence);
|
|
469
|
+
setHasWrappedToSecondLine(function (prev) {
|
|
470
|
+
var next = prev;
|
|
471
|
+
if (!nextHasTypingPresence) {
|
|
472
|
+
next = false;
|
|
473
|
+
} else if (nextIsMultiline) {
|
|
474
|
+
next = true;
|
|
475
|
+
}
|
|
476
|
+
return next;
|
|
477
|
+
});
|
|
510
478
|
onChange === null || onChange === void 0 || onChange();
|
|
511
479
|
handleTrigger(trigger);
|
|
512
480
|
if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
|
|
@@ -529,15 +497,12 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
529
497
|
if (!sendDisabled && !disabled) handleSendMessage();
|
|
530
498
|
}
|
|
531
499
|
}, [handlePopoverKeyDown, popoverOpen, sendDisabled, disabled, handleSendMessage]);
|
|
532
|
-
var
|
|
533
|
-
|
|
534
|
-
if (!files) return;
|
|
500
|
+
var addFiles = function addFiles(incoming) {
|
|
501
|
+
if (!incoming.length || disabled) return;
|
|
535
502
|
var exceededFiles = [];
|
|
536
503
|
var excludedFiles = [];
|
|
537
504
|
var fileSizes = {};
|
|
538
505
|
var filesInserted = attachments.length;
|
|
539
|
-
|
|
540
|
-
// Definir límites para diferentes tipos de archivos
|
|
541
506
|
var isNewFormat = function isNewFormat(extension) {
|
|
542
507
|
return ['.png', '.jpg', '.jpeg', '.pdf'].includes(extension);
|
|
543
508
|
};
|
|
@@ -547,7 +512,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
547
512
|
var isAudioFormat = function isAudioFormat(extension) {
|
|
548
513
|
return ['.flac', '.m4a', '.mp3', '.mp4', '.oga', '.ogg', '.wav', '.webm'].includes(extension);
|
|
549
514
|
};
|
|
550
|
-
|
|
515
|
+
incoming.forEach(function (file) {
|
|
551
516
|
var _fileNameParts$pop;
|
|
552
517
|
var excludedFile = false;
|
|
553
518
|
var fileNameParts = file.name.split('.');
|
|
@@ -556,10 +521,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
556
521
|
return;
|
|
557
522
|
}
|
|
558
523
|
fileSizes[file.name] = file.size;
|
|
559
|
-
|
|
560
|
-
// Validaciones específicas según el tipo de archivo
|
|
561
524
|
if (isNewFormat(fileExtension)) {
|
|
562
|
-
// Para nuevos formatos: hasta 4.99MB por archivo, hasta MAX_CHAT_INPUT_ATTACHMENTS archivos
|
|
563
525
|
if (file.size > MAX_FILE_SIZE_MB_MAIA_VISION * 1024 * 1024) {
|
|
564
526
|
exceededFiles.push(file.name);
|
|
565
527
|
excludedFile = true;
|
|
@@ -569,7 +531,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
569
531
|
excludedFile = true;
|
|
570
532
|
}
|
|
571
533
|
} else if (isOldFormat(fileExtension)) {
|
|
572
|
-
// Para formatos anteriores: hasta 1MB por archivo, hasta MAX_CHAT_INPUT_ATTACHMENTS archivos
|
|
573
534
|
if (file.size > MAX_FILE_SIZE_MB_OLD * 1024 * 1024) {
|
|
574
535
|
exceededFiles.push(file.name);
|
|
575
536
|
excludedFile = true;
|
|
@@ -579,7 +540,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
579
540
|
excludedFile = true;
|
|
580
541
|
}
|
|
581
542
|
} else if (isAudioFormat(fileExtension)) {
|
|
582
|
-
// Para archivos de audio: hasta 10MB por archivo, hasta MAX_CHAT_INPUT_ATTACHMENTS archivos
|
|
583
543
|
if (file.size > MAX_FILE_SIZE_MB_AUDIO * 1024 * 1024) {
|
|
584
544
|
exceededFiles.push(file.name);
|
|
585
545
|
excludedFile = true;
|
|
@@ -606,56 +566,88 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
606
566
|
fileSizes: fileSizes
|
|
607
567
|
});
|
|
608
568
|
}
|
|
569
|
+
};
|
|
570
|
+
var handleFileSelect = function handleFileSelect(e) {
|
|
571
|
+
var files = e.target.files;
|
|
572
|
+
if (files) {
|
|
573
|
+
addFiles(Array.from(files));
|
|
574
|
+
}
|
|
609
575
|
if (fileInputRef.current) {
|
|
610
576
|
fileInputRef.current.value = '';
|
|
611
577
|
}
|
|
612
578
|
};
|
|
579
|
+
var resetFileDrag = function resetFileDrag() {
|
|
580
|
+
fileDragCounterRef.current = 0;
|
|
581
|
+
setIsFileDragActive(false);
|
|
582
|
+
};
|
|
583
|
+
var handleDragEnter = function handleDragEnter(e) {
|
|
584
|
+
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
585
|
+
e.preventDefault();
|
|
586
|
+
e.stopPropagation();
|
|
587
|
+
if (disabled) return;
|
|
588
|
+
fileDragCounterRef.current += 1;
|
|
589
|
+
setIsFileDragActive(true);
|
|
590
|
+
};
|
|
591
|
+
var handleDragLeave = function handleDragLeave(e) {
|
|
592
|
+
if (!isFileDragActive && !dataTransferHasFiles(e.dataTransfer)) return;
|
|
593
|
+
e.preventDefault();
|
|
594
|
+
e.stopPropagation();
|
|
595
|
+
fileDragCounterRef.current = Math.max(0, fileDragCounterRef.current - 1);
|
|
596
|
+
if (fileDragCounterRef.current === 0) {
|
|
597
|
+
setIsFileDragActive(false);
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
var handleDragOver = function handleDragOver(e) {
|
|
601
|
+
if (!dataTransferHasFiles(e.dataTransfer)) return;
|
|
602
|
+
e.preventDefault();
|
|
603
|
+
e.stopPropagation();
|
|
604
|
+
if (disabled) return;
|
|
605
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
606
|
+
};
|
|
607
|
+
var handleDrop = function handleDrop(e) {
|
|
608
|
+
if (!dataTransferHasFiles(e.dataTransfer)) {
|
|
609
|
+
resetFileDrag();
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
e.preventDefault();
|
|
613
|
+
e.stopPropagation();
|
|
614
|
+
resetFileDrag();
|
|
615
|
+
if (disabled) return;
|
|
616
|
+
addFiles(filesFromDataTransfer(e.dataTransfer));
|
|
617
|
+
};
|
|
618
|
+
var handlePasteFiles = function handlePasteFiles(files) {
|
|
619
|
+
addFiles(files);
|
|
620
|
+
};
|
|
621
|
+
var handleWrapperPaste = function handleWrapperPaste(e) {
|
|
622
|
+
var _wrapperRef$current;
|
|
623
|
+
var editorEl = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.querySelector('[contenteditable="true"]');
|
|
624
|
+
if (editorEl && editorEl.contains(e.target)) return;
|
|
625
|
+
var files = filesFromDataTransfer(e.clipboardData);
|
|
626
|
+
if (!files.length) return;
|
|
627
|
+
e.preventDefault();
|
|
628
|
+
addFiles(files);
|
|
629
|
+
};
|
|
613
630
|
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
614
631
|
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
615
632
|
};
|
|
633
|
+
var handleWrapperFocus = function handleWrapperFocus() {
|
|
634
|
+
return setIsFocused(true);
|
|
635
|
+
};
|
|
636
|
+
var handleWrapperBlur = function handleWrapperBlur() {
|
|
637
|
+
setTimeout(function () {
|
|
638
|
+
var _wrapperRef$current2;
|
|
639
|
+
if (!((_wrapperRef$current2 = wrapperRef.current) !== null && _wrapperRef$current2 !== void 0 && _wrapperRef$current2.contains(document.activeElement))) {
|
|
640
|
+
setIsFocused(false);
|
|
641
|
+
}
|
|
642
|
+
}, 0);
|
|
643
|
+
};
|
|
616
644
|
var handleStopGeneration = function handleStopGeneration() {
|
|
617
645
|
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
618
646
|
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
619
647
|
};
|
|
620
|
-
var
|
|
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';
|
|
648
|
+
var plusIconColor = isFocused ? colors.text.secondary : colors.text.mediumGray;
|
|
649
649
|
var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
|
|
650
|
-
var
|
|
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;
|
|
650
|
+
var plusMenuSelectedColor = MAIA_CHAT_INPUT_UI.textBrandBold;
|
|
659
651
|
var activeToolChipLeadingIcon;
|
|
660
652
|
if (activeToolChipHovered) {
|
|
661
653
|
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
@@ -664,13 +656,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
664
656
|
height: 18
|
|
665
657
|
});
|
|
666
658
|
} else if (isWebSearchActive) {
|
|
667
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
659
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Globe, {
|
|
668
660
|
color: plusMenuIconColor,
|
|
669
661
|
width: 18,
|
|
670
662
|
height: 18
|
|
671
663
|
});
|
|
672
664
|
} else {
|
|
673
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
665
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(TelescopeIcon, {
|
|
674
666
|
color: plusMenuIconColor,
|
|
675
667
|
width: 18,
|
|
676
668
|
height: 18
|
|
@@ -682,260 +674,219 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
682
674
|
disabled: false,
|
|
683
675
|
alignButtons: alignButtons,
|
|
684
676
|
hasAttachments: !!attachments.length,
|
|
677
|
+
compactSingleRowToolbar: compactSingleRowToolbar,
|
|
678
|
+
$fileDragActive: isFileDragActive,
|
|
685
679
|
"data-appcues": "maia_chat_input",
|
|
686
680
|
"data-maia-streaming": isStreaming ? 'true' : 'false',
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
681
|
+
onFocus: handleWrapperFocus,
|
|
682
|
+
onBlur: handleWrapperBlur,
|
|
683
|
+
onPaste: handleWrapperPaste,
|
|
684
|
+
onDragEnter: handleDragEnter,
|
|
685
|
+
onDragLeave: handleDragLeave,
|
|
686
|
+
onDragOver: handleDragOver,
|
|
687
|
+
onDrop: handleDrop,
|
|
688
|
+
children: [showSlashDropdown && /*#__PURE__*/_jsx(SlashCommandDropdown, {
|
|
689
|
+
commands: slashCommands,
|
|
690
|
+
query: slashQuery,
|
|
691
|
+
onSelect: handleSelectSlashCommand,
|
|
692
|
+
onClose: handleCloseSlashDropdown
|
|
693
|
+
}), !!attachments.length && /*#__PURE__*/_jsx("div", {
|
|
694
|
+
style: {
|
|
695
|
+
display: 'flex',
|
|
696
|
+
gap: '12px',
|
|
697
|
+
alignItems: 'center'
|
|
698
|
+
},
|
|
699
|
+
children: attachments.map(function (attachment, index) {
|
|
700
|
+
var _fileNameParts$pop2, _attachment$type;
|
|
701
|
+
var fileNameParts = attachment.name.split('.');
|
|
702
|
+
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop2 = fileNameParts.pop()) === null || _fileNameParts$pop2 === void 0 ? void 0 : _fileNameParts$pop2.toLowerCase()) : '';
|
|
703
|
+
var isImageByExtension = ['.png', '.jpg', '.jpeg'].includes(fileExtension);
|
|
704
|
+
var isImageByMime = (_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/');
|
|
705
|
+
var isImage = isImageByMime && isImageByExtension;
|
|
706
706
|
return /*#__PURE__*/_jsx(Tooltip, {
|
|
707
707
|
title: attachment.name,
|
|
708
708
|
zIndex: tooltipZIndex,
|
|
709
709
|
children: /*#__PURE__*/_jsxs(SCMIAttachment, {
|
|
710
|
-
|
|
711
|
-
|
|
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
|
-
}),
|
|
710
|
+
isImage: isImage,
|
|
711
|
+
children: [attachment.icon, /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
|
|
721
712
|
onClick: function onClick() {
|
|
722
713
|
return handleDeleteAttachment(attachment.id);
|
|
723
714
|
},
|
|
724
|
-
children: /*#__PURE__*/_jsx(
|
|
725
|
-
color: "
|
|
726
|
-
width:
|
|
727
|
-
height:
|
|
715
|
+
children: /*#__PURE__*/_jsx(Trash, {
|
|
716
|
+
color: "rgba(191, 191, 191, 1)",
|
|
717
|
+
width: 18,
|
|
718
|
+
height: 18
|
|
728
719
|
})
|
|
729
720
|
})]
|
|
730
721
|
})
|
|
731
|
-
}, "".concat(
|
|
732
|
-
})
|
|
722
|
+
}, "".concat(index, "-").concat(attachment.name));
|
|
723
|
+
})
|
|
733
724
|
}), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
|
|
734
|
-
|
|
725
|
+
$compactRow: compactSingleRowToolbar,
|
|
726
|
+
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
727
|
+
$compactRow: compactSingleRowToolbar,
|
|
728
|
+
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
729
|
+
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
730
|
+
type: "button",
|
|
731
|
+
$menuOpen: plusMenuOpen,
|
|
732
|
+
onClick: handlePlusButtonClick,
|
|
733
|
+
"aria-label": t('chat.openPlusMenuAria'),
|
|
734
|
+
"aria-haspopup": "true",
|
|
735
|
+
"aria-expanded": plusMenuOpen,
|
|
736
|
+
children: /*#__PURE__*/_jsx(Plus, {
|
|
737
|
+
color: plusIconColor,
|
|
738
|
+
width: 20,
|
|
739
|
+
height: 20
|
|
740
|
+
})
|
|
741
|
+
}), /*#__PURE__*/_jsx(Popover, {
|
|
742
|
+
open: plusMenuOpen,
|
|
743
|
+
anchorEl: plusMenuAnchor,
|
|
744
|
+
onClose: closePlusMenu,
|
|
745
|
+
anchorOrigin: {
|
|
746
|
+
vertical: 'top',
|
|
747
|
+
horizontal: 'left'
|
|
748
|
+
},
|
|
749
|
+
transformOrigin: {
|
|
750
|
+
vertical: 'bottom',
|
|
751
|
+
horizontal: 'left'
|
|
752
|
+
},
|
|
753
|
+
sx: {
|
|
754
|
+
zIndex: plusMenuZIndex
|
|
755
|
+
},
|
|
756
|
+
slotProps: {
|
|
757
|
+
paper: {
|
|
758
|
+
elevation: 0,
|
|
759
|
+
sx: {
|
|
760
|
+
overflow: 'visible',
|
|
761
|
+
borderRadius: '4px',
|
|
762
|
+
boxShadow: 'none',
|
|
763
|
+
backgroundColor: 'transparent',
|
|
764
|
+
marginTop: '-4px'
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
},
|
|
768
|
+
children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
|
|
769
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
770
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
771
|
+
type: "button",
|
|
772
|
+
onClick: handlePlusMenuAttach,
|
|
773
|
+
children: [/*#__PURE__*/_jsx(Attach, {
|
|
774
|
+
color: plusMenuIconColor,
|
|
775
|
+
width: 20,
|
|
776
|
+
height: 20
|
|
777
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
778
|
+
$selected: false,
|
|
779
|
+
children: t('chat.plusMenuAttach')
|
|
780
|
+
})]
|
|
781
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
782
|
+
type: "button",
|
|
783
|
+
onClick: handlePlusMenuWebSearch,
|
|
784
|
+
children: [/*#__PURE__*/_jsx(Globe, {
|
|
785
|
+
color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
786
|
+
width: 20,
|
|
787
|
+
height: 20
|
|
788
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
789
|
+
$selected: !!isWebSearchActive,
|
|
790
|
+
children: t('chat.searchWeb')
|
|
791
|
+
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
792
|
+
color: plusMenuSelectedColor,
|
|
793
|
+
width: 16,
|
|
794
|
+
height: 16
|
|
795
|
+
}) : null]
|
|
796
|
+
})]
|
|
797
|
+
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
798
|
+
type: "button",
|
|
799
|
+
onClick: handlePlusMenuDeepSearch,
|
|
800
|
+
children: [/*#__PURE__*/_jsx(TelescopeIcon, {
|
|
801
|
+
color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
802
|
+
width: 20,
|
|
803
|
+
height: 20
|
|
804
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
805
|
+
$selected: !!isDeepSearchActive,
|
|
806
|
+
children: t('chat.plusMenuDeepInvestigation')
|
|
807
|
+
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
808
|
+
color: plusMenuSelectedColor,
|
|
809
|
+
width: 16,
|
|
810
|
+
height: 16
|
|
811
|
+
}) : null]
|
|
812
|
+
})]
|
|
813
|
+
})
|
|
814
|
+
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
815
|
+
$hovered: activeToolChipHovered,
|
|
816
|
+
$exiting: toolChipExiting,
|
|
817
|
+
onMouseEnter: function onMouseEnter() {
|
|
818
|
+
return setActiveToolChipHovered(true);
|
|
819
|
+
},
|
|
820
|
+
onMouseLeave: function onMouseLeave() {
|
|
821
|
+
return setActiveToolChipHovered(false);
|
|
822
|
+
},
|
|
823
|
+
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
824
|
+
type: "button",
|
|
825
|
+
$closeShown: activeToolChipHovered,
|
|
826
|
+
"aria-label": t('chat.removeActiveToolAria'),
|
|
827
|
+
onClick: function onClick(e) {
|
|
828
|
+
e.stopPropagation();
|
|
829
|
+
beginToolChipExit();
|
|
830
|
+
},
|
|
831
|
+
children: activeToolChipLeadingIcon
|
|
832
|
+
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
833
|
+
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
834
|
+
})]
|
|
835
|
+
})]
|
|
836
|
+
})
|
|
837
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
838
|
+
style: compactSingleRowToolbar ? {
|
|
839
|
+
gridColumn: 2,
|
|
840
|
+
gridRow: 1,
|
|
841
|
+
minWidth: 0,
|
|
842
|
+
alignSelf: 'center'
|
|
843
|
+
} : {
|
|
844
|
+
gridColumn: '1 / -1',
|
|
845
|
+
gridRow: 1,
|
|
846
|
+
minWidth: 0
|
|
847
|
+
},
|
|
735
848
|
children: /*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
736
849
|
ref: editorRef,
|
|
737
850
|
disabled: disabled,
|
|
738
851
|
placeholder: placeholder,
|
|
739
|
-
maxHeight: editorMaxHeight,
|
|
740
852
|
onInput: handleEditorInput,
|
|
741
|
-
onKeyDown: handleKeyDown
|
|
853
|
+
onKeyDown: handleKeyDown,
|
|
854
|
+
onFocus: handleWrapperFocus,
|
|
855
|
+
onBlur: handleWrapperBlur,
|
|
856
|
+
onPasteFiles: handlePasteFiles
|
|
742
857
|
})
|
|
743
|
-
}), /*#__PURE__*/
|
|
744
|
-
|
|
745
|
-
children:
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
"aria-haspopup": "true",
|
|
754
|
-
"aria-expanded": plusMenuOpen,
|
|
755
|
-
children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
|
|
756
|
-
color: toolbarIconColor,
|
|
757
|
-
width: 18,
|
|
758
|
-
height: 18
|
|
759
|
-
})
|
|
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
|
-
})]
|
|
858
|
+
}), /*#__PURE__*/_jsx(StyledMAIASendToolbarCell, {
|
|
859
|
+
$compactRow: compactSingleRowToolbar,
|
|
860
|
+
children: isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
861
|
+
title: t('chat.stop'),
|
|
862
|
+
zIndex: tooltipZIndex,
|
|
863
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
864
|
+
disabled: false,
|
|
865
|
+
onClick: handleStopGeneration,
|
|
866
|
+
className: className,
|
|
867
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
|
|
876
868
|
})
|
|
877
|
-
})
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
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,
|
|
869
|
+
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
870
|
+
title: t('chat.send'),
|
|
871
|
+
zIndex: tooltipZIndex,
|
|
872
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
873
|
+
style: {
|
|
874
|
+
display: 'inline-flex',
|
|
875
|
+
alignItems: 'center'
|
|
876
|
+
},
|
|
877
|
+
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
878
|
+
onClick: handleSendMessage,
|
|
914
879
|
className: className,
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
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
|
-
})
|
|
880
|
+
disabled: sendDisabled || disabled,
|
|
881
|
+
hasValues: hasTypingPresence || attachments.length > 0,
|
|
882
|
+
children: /*#__PURE__*/_jsx(PaperPlane, {
|
|
883
|
+
color: "#BFBFBF",
|
|
884
|
+
width: 18,
|
|
885
|
+
height: 18
|
|
935
886
|
})
|
|
936
887
|
})
|
|
937
|
-
})
|
|
938
|
-
})
|
|
888
|
+
})
|
|
889
|
+
})
|
|
939
890
|
})]
|
|
940
891
|
}), /*#__PURE__*/_jsx("input", {
|
|
941
892
|
ref: fileInputRef,
|
|
@@ -946,6 +897,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
946
897
|
style: {
|
|
947
898
|
display: 'none'
|
|
948
899
|
}
|
|
900
|
+
}), isFileDragActive && /*#__PURE__*/_jsx(StyledMAIADropOverlay, {
|
|
901
|
+
children: t('chat.dropFilesHere')
|
|
949
902
|
})]
|
|
950
903
|
}), modalProps.isOpen && /*#__PURE__*/_jsx(ModalFileExceeds, {
|
|
951
904
|
onClose: function onClose() {
|
|
@@ -959,16 +912,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
959
912
|
excludedFiles: modalProps.excludedFiles,
|
|
960
913
|
exceededFiles: modalProps.exceededFiles,
|
|
961
914
|
fileSizes: modalProps.fileSizes
|
|
962
|
-
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)
|
|
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)]
|
|
915
|
+
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)]
|
|
972
916
|
});
|
|
973
917
|
};
|
|
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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
|
|
918
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTdG9wQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BJY29uIiwiU3R5bGVkTUFJQURyb3BPdmVybGF5IiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJNQUlBX0NIQVRfSU5QVVRfVUkiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsIk1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIiwiQVBQQ1VFU19FVkVOVFMiLCJ0cmFja0FwcGN1ZXNFdmVudCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiZGF0YVRyYW5zZmVySGFzRmlsZXMiLCJmaWxlc0Zyb21EYXRhVHJhbnNmZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJUT09MX0NISVBfRVhJVF9NUyIsIk1BSUFJbnB1dCIsIl9yZWYiLCJfYWdlbnQkZW50aXR5Iiwib25TZW5kTWVzc2FnZSIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwiaXNTdHJlYW1pbmciLCJpc1dyaXRpbmciLCJvblN0b3BHZW5lcmF0aW9uIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9yZWYkYWxpZ25CdXR0b25zIiwiYWxpZ25CdXR0b25zIiwib25GaWxlQXR0YWNoIiwib25EZWxldGVBdHRhY2htZW50IiwiX3JlZiRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiY2hhdElkIiwibmV3Q2hhdEtleSIsInRvb2x0aXBaSW5kZXgiLCJleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwibGF5b3V0TW9kZSIsIl91c2VUIiwidCIsImVkaXRvclJlZiIsImZpbGVJbnB1dFJlZiIsImludGVybmFsV3JhcHBlclJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNXcmFwcGVkVG9TZWNvbmRMaW5lIiwic2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaGFzVHlwaW5nUHJlc2VuY2UiLCJzZXRIYXNUeXBpbmdQcmVzZW5jZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiaW5pdGlhbERyYWZ0IiwiZGVlcExpbmtTZW5kUGVuZGluZ1JlZiIsInBsdXNNZW51WkluZGV4IiwiaW5pdGlhbERyYWZ0QXBwbGllZFJlZiIsIl91c2VNZW50aW9uUG9wb3ZlciIsInBvcG92ZXJPcGVuIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiaGFuZGxlVHJpZ2dlciIsImhhbmRsZVBvcG92ZXJLZXlEb3duIiwiaGFuZGxlS2V5RG93biIsInBvcG92ZXJOb2RlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJwbHVzTWVudUFuY2hvciIsInNldFBsdXNNZW51QW5jaG9yIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiYWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwic2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInRvb2xDaGlwRXhpdGluZyIsInNldFRvb2xDaGlwRXhpdGluZyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc0ZpbGVEcmFnQWN0aXZlIiwic2V0SXNGaWxlRHJhZ0FjdGl2ZSIsInRvb2xDaGlwRXhpdFRpbWVyUmVmIiwiZmlsZURyYWdDb3VudGVyUmVmIiwic2VhcmNoTW9kZUFjdGl2ZVJlZiIsIndlYiIsImRlZXAiLCJwbHVzTWVudU9wZW4iLCJCb29sZWFuIiwicHJldmlvdXNBZ2VudElkUmVmIiwidW5kZWZpbmVkIiwicHJldmlvdXNDaGF0SWRSZWYiLCJwcmV2aW91c05ld0NoYXRLZXlSZWYiLCJwcmV2aW91c0xheW91dE1vZGVSZWYiLCJhbmFseXRpY3NBZ2VudFR5cGUiLCJhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQiLCJ0eXBlIiwiZW50aXR5IiwiX3VzZVNsYXNoQ29tbWFuZHMiLCJpZCIsInNsYXNoQ29tbWFuZHMiLCJjb21tYW5kcyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzaG93U2xhc2hEcm9wZG93biIsInNldFNob3dTbGFzaERyb3Bkb3duIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInNsYXNoUXVlcnkiLCJzZXRTbGFzaFF1ZXJ5Iiwic2xhc2hNZW51V2FzT3BlblJlZiIsInNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJjdXJyZW50IiwiZm9jdXMiLCJjbG9zZVBsdXNNZW51IiwiY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCIsImNsZWFyVGltZW91dCIsImhhbmRsZVBsdXNCdXR0b25DbGljayIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiYWlDaGF0UGx1c09wZW4iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImhhbmRsZVBsdXNNZW51QXR0YWNoIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiYWlDaGF0VG9vbHMiLCJvcHRpb24iLCJsZW5ndGgiLCJjbGljayIsImJlZ2luVG9vbENoaXBFeGl0Iiwid2FzV2ViIiwid2FzRGVlcCIsIl9zZWFyY2hNb2RlQWN0aXZlUmVmJCIsImhhbmRsZVBsdXNNZW51V2ViU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoIiwiX2VkaXRvclJlZiRjdXJyZW50MiIsIl9lZGl0b3JSZWYkY3VycmVudDMiLCJkcmFmdCIsInRyaW0iLCJzZXRQbGFpblRleHQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ0IiwiY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIiLCJzZW5kRGlzYWJsZWQiLCJhZ2VudENoYW5nZWQiLCJwcmV2aW91c0NoYXRJZCIsImN1cnJlbnRDaGF0SWQiLCJjaGF0Q2hhbmdlZCIsImNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCIsIm5ld0NoYXRTdGFydGVkIiwiaXNJbml0aWFsTW91bnQiLCJkZWxheSIsIl9lZGl0b3JSZWYkY3VycmVudDUiLCJwcmV2aW91c0xheW91dE1vZGUiLCJ0aW1lb3V0SWQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ2IiwiaXNTcGVjaWFsaXN0QWdlbnQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiX3JlZjIiLCJfcmVmMyIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJtYWlhQ29udGV4dE1lbnRpb25Jbml0IiwiZGlzY29ubmVjdCIsInRocmVzaG9sZCIsIm9ic2VydmUiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50NyIsImNsZWFyIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQ4IiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ5IiwiX3N0YXRlJHRleHQiLCJfc3RhdGUkbWVudGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQwIiwic3RhdGUiLCJzZXJpYWxpemUiLCJ0ZXh0IiwibWVudGlvbnMiLCJoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiX2VkaXRvclJlZiRjdXJyZW50MSIsIl9zdGF0ZSR0ZXh0MiIsIl9lZGl0b3JSZWYkY3VycmVudDExIiwiYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QiLCJ0eXBlX3F1aWNrX2FjdGlvbiIsIm9yaWdpbl9xdWlja19hY3Rpb24iLCJ0cmlnZ2VyUGFydCIsImNvbmNhdCIsImJlZm9yZVRyaWdnZXIiLCJlbmRzV2l0aCIsInNsaWNlIiwiaXNFbXB0eUJlZm9yZVRyaWdnZXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMCIsInRpdGxlIiwiaW5zZXJ0U2xhc2hDb21tYW5kIiwibGFiZWwiLCJoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24iLCJoYW5kbGVFZGl0b3JJbnB1dCIsIl9yZWY0IiwiX2VkaXRvclJlZiRjdXJyZW50MTIiLCJ0cmlnZ2VyIiwic2xhc2hUcmlnZ2VyIiwidmlzdWFsTXVsdGlsaW5lIiwiaGFzVmlzdWFsTXVsdGlsaW5lIiwiZXhwbGljaXRNdWx0aWxpbmUiLCJpbmNsdWRlcyIsImlzTGlrZWx5Rmlyc3RDaGFyTWVhc3VyZW1lbnRHbGl0Y2giLCJzdGFibGVWaXN1YWxNdWx0aWxpbmUiLCJuZXh0SXNNdWx0aWxpbmUiLCJuZXh0SGFzVHlwaW5nUHJlc2VuY2UiLCJuZXh0VHlwaW5nUHJlc2VuY2UiLCJwcmV2IiwibmV4dCIsImFjdGl2ZSIsImFpQ2hhdFF1aWNrQWN0aW9uT3BlbiIsInF1ZXJ5Iiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImFkZEZpbGVzIiwiaW5jb21pbmciLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwic3BsaXQiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJ0YXJnZXQiLCJBcnJheSIsImZyb20iLCJ2YWx1ZSIsInJlc2V0RmlsZURyYWciLCJoYW5kbGVEcmFnRW50ZXIiLCJkYXRhVHJhbnNmZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJNYXRoIiwibWF4IiwiaGFuZGxlRHJhZ092ZXIiLCJkcm9wRWZmZWN0IiwiaGFuZGxlRHJvcCIsImhhbmRsZVBhc3RlRmlsZXMiLCJoYW5kbGVXcmFwcGVyUGFzdGUiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiZWRpdG9yRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbnMiLCJjbGlwYm9hcmREYXRhIiwiaGFuZGxlRGVsZXRlQXR0YWNobWVudCIsImZpbGVJZCIsImhhbmRsZVdyYXBwZXJGb2N1cyIsImhhbmRsZVdyYXBwZXJCbHVyIiwiX3dyYXBwZXJSZWYkY3VycmVudDIiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJwbHVzSWNvbkNvbG9yIiwic2Vjb25kYXJ5IiwibWVkaXVtR3JheSIsInBsdXNNZW51SWNvbkNvbG9yIiwibWVudUljb24iLCJwbHVzTWVudVNlbGVjdGVkQ29sb3IiLCJ0ZXh0QnJhbmRCb2xkIiwiYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiIsImNvbG9yIiwiY2hpcENsb3NlSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsIiRmaWxlRHJhZ0FjdGl2ZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblBhc3RlIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvblNlbGVjdCIsIm9uQ2xvc2UiLCJzdHlsZSIsImRpc3BsYXkiLCJnYXAiLCJhbGlnbkl0ZW1zIiwibWFwIiwiYXR0YWNobWVudCIsImluZGV4IiwiX2ZpbGVOYW1lUGFydHMkcG9wMiIsIl9hdHRhY2htZW50JHR5cGUiLCJpc0ltYWdlQnlFeHRlbnNpb24iLCJpc0ltYWdlQnlNaW1lIiwic3RhcnRzV2l0aCIsImlzSW1hZ2UiLCJ6SW5kZXgiLCJpY29uIiwib25DbGljayIsIiRjb21wYWN0Um93IiwiJG1lbnVPcGVuIiwib3BlbiIsImFuY2hvckVsIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic3giLCJzbG90UHJvcHMiLCJwYXBlciIsImVsZXZhdGlvbiIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJHNlbGVjdGVkIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwiZ3JpZENvbHVtbiIsImdyaWRSb3ciLCJtaW5XaWR0aCIsImFsaWduU2VsZiIsIm9uSW5wdXQiLCJvbktleURvd24iLCJvblBhc3RlRmlsZXMiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsImJvZHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQge1xuICBDaGFuZ2VFdmVudCxcbiAgQ2xpcGJvYXJkRXZlbnQsXG4gIERyYWdFdmVudCxcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCxcbiAgUmVhY3ROb2RlLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgY29sb3JzIGZyb20gJ0Bwcm9qZWN0Y29yL3RoZW1lL2xpYi9iYXNlL2NvbG9ycydcblxuaW1wb3J0IHtcbiAgQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uLFxuICBBY3RpdmVUb29sQ2hpcExhYmVsLFxuICBBY3RpdmVUb29sQ2hpcFJvb3QsXG4gIFBsdXNNZW51RGl2aWRlcixcbiAgUGx1c01lbnVJbm5lckNvbHVtbixcbiAgUGx1c01lbnVJdGVtQnV0dG9uLFxuICBQbHVzTWVudUl0ZW1MYWJlbCxcbiAgUGx1c01lbnVQYXBlcixcbiAgUGx1c01lbnVUb29sc1JvdyxcbiAgUGx1c1RvZ2dsZUJ1dHRvbixcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQsXG4gIFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG4gIFN0eWxlZE1BSUFEcm9wT3ZlcmxheSxcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IFNsYXNoQ29tbWFuZERyb3Bkb3duIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kRHJvcGRvd24nXG5pbXBvcnQgeyB1c2VTbGFzaENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU2xhc2hDb21tYW5kcydcbmltcG9ydCB7IHJlc29sdmVRdWlja0FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ob3Vyc1BsYW5uZXJRdWlja0FjdGlvblR5cGUnXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0FjdGlvbidcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IE1BSUFfQ0hBVF9JTlBVVF9VSSB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxuICBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyxcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5pbXBvcnQgeyBBUFBDVUVTX0VWRU5UUywgdHJhY2tBcHBjdWVzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBjdWVzJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3IsIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZU1lbnRpb25Qb3BvdmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZGF0YVRyYW5zZmVySGFzRmlsZXMsIGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuXG5jb25zdCBUT09MX0NISVBfRVhJVF9NUyA9IDIyMFxuXG50eXBlIEF0dGFjaG1lbnRGaWxlID0ge1xuICBmaWxlOiBGaWxlXG4gIG9yaWdpbmFsRmlsZT86IEZpbGVcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIHR5cGU6IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgTUFJQUlucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TZW5kTWVzc2FnZTogKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgIGZhcUlkPzogc3RyaW5nLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIG9uU3RvcEdlbmVyYXRpb24/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc1dyaXRpbmc/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIG9uQ2hhbmdlPzogKCkgPT4gdm9pZFxuICBhbGlnbkJ1dHRvbnM/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG4gIG9uRmlsZUF0dGFjaD86IChmaWxlOiBGaWxlKSA9PiB2b2lkXG4gIG9uRGVsZXRlQXR0YWNobWVudD86IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICAvKiogRXhwb25lIGVsIHdyYXBwZXIgZGVsIGlucHV0IHBhcmEgYW5jbGFyIHBvcG92ZXJzIChtZW5jaW9uZXMsIHBpbiBkZSBjb250ZXh0bykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbiAgbGF5b3V0TW9kZT86ICdzaWRlYmFyJyB8ICdmdWxsc2NyZWVuJyB8ICdmbG9hdGluZydcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFJbnB1dCA9ICh7XG4gIG9uU2VuZE1lc3NhZ2UsXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzU3RyZWFtaW5nLFxuICBpc1dyaXRpbmcsXG4gIG9uU3RvcEdlbmVyYXRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNoYW5nZSxcbiAgYWxpZ25CdXR0b25zID0gJ3ZlcnRpY2FsJyxcbiAgb25GaWxlQXR0YWNoLFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQsXG4gIGF0dGFjaG1lbnRzID0gW10sXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgdG9vbHRpcFpJbmRleCxcbiAgcG9wb3ZlckFuY2hvclJlZjogZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmLFxuICBsYXlvdXRNb2RlLFxufTogTUFJQUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW50ZXJuYWxXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmID8/IGludGVybmFsV3JhcHBlclJlZlxuICBjb25zdCBbaGFzV3JhcHBlZFRvU2Vjb25kTGluZSwgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc1R5cGluZ1ByZXNlbmNlLCBzZXRIYXNUeXBpbmdQcmVzZW5jZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7XG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZURlZXBTZWFyY2gsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGFnZW50LFxuICAgIGluaXRpYWxEcmFmdCxcbiAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHBsdXNNZW51WkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMzAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGluaXRpYWxEcmFmdEFwcGxpZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyxcbiAgICBoYW5kbGVUcmlnZ2VyLFxuICAgIGhhbmRsZUtleURvd246IGhhbmRsZVBvcG92ZXJLZXlEb3duLFxuICAgIHBvcG92ZXJOb2RlLFxuICB9ID0gdXNlTWVudGlvblBvcG92ZXIoe1xuICAgIGVkaXRvclJlZixcbiAgICBwb3BvdmVyQW5jaG9yUmVmOiB3cmFwcGVyUmVmLFxuICB9KVxuXG4gIGNvbnN0IFtwbHVzTWVudUFuY2hvciwgc2V0UGx1c01lbnVBbmNob3JdID0gdXNlU3RhdGU8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWN0aXZlVG9vbENoaXBIb3ZlcmVkLCBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sQ2hpcEV4aXRpbmcsIHNldFRvb2xDaGlwRXhpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRmlsZURyYWdBY3RpdmUsIHNldElzRmlsZURyYWdBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZmlsZURyYWdDb3VudGVyUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/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+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgYWRkRmlsZXMgPSAoaW5jb21pbmc6IEZpbGVbXSkgPT4ge1xuICAgIGlmICghaW5jb21pbmcubGVuZ3RoIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgaW5jb21pbmcuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIGlmIChpc05ld0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2xkRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX09MRCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQXVkaW9Gb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfQVVESU8gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4Y2x1ZGVkRmlsZSkge1xuICAgICAgICBmaWxlc0luc2VydGVkICs9IDFcbiAgICAgICAgY29uc3QgdHlwZUZpbGUgPSBmaWxlLnR5cGUgfHwgZmlsZVR5cGVzW2ZpbGVFeHRlbnNpb25dXG4gICAgICAgIGNvbnN0IHBhcnNlZEZpbGUgPSBuZXcgRmlsZShbZmlsZV0sIGZpbGUubmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuICAgICAgICBvbkZpbGVBdHRhY2g/LihwYXJzZWRGaWxlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoZXhjbHVkZWRGaWxlcy5sZW5ndGggfHwgZXhjZWVkZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXMsIGV4Y2VlZGVkRmlsZXMsIGZpbGVTaXplcyB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBhZGRGaWxlcyhBcnJheS5mcm9tKGZpbGVzKSlcbiAgICB9XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzZXRGaWxlRHJhZyA9ICgpID0+IHtcbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9IDBcbiAgICBzZXRJc0ZpbGVEcmFnQWN0aXZlKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VudGVyID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgKz0gMVxuICAgIHNldElzRmlsZURyYWdBY3RpdmUodHJ1ZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFpc0ZpbGVEcmFnQWN0aXZlICYmICFkYXRhVHJhbnNmZXJIYXNGaWxlcyhlLmRhdGFUcmFuc2ZlcikpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9IE1hdGgubWF4KDAsIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50IC0gMSlcbiAgICBpZiAoZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgPT09IDApIHtcbiAgICAgIHNldElzRmlsZURyYWdBY3RpdmUoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcm9wID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkge1xuICAgICAgcmVzZXRGaWxlRHJhZygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJlc2V0RmlsZURyYWcoKVxuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgYWRkRmlsZXMoZmlsZXNGcm9tRGF0YVRyYW5zZmVyKGUuZGF0YVRyYW5zZmVyKSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBhc3RlRmlsZXMgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xuICAgIGFkZEZpbGVzKGZpbGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlclBhc3RlID0gKGU6IENsaXBib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGVkaXRvckVsID0gd3JhcHBlclJlZi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yKCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpXG4gICAgaWYgKGVkaXRvckVsICYmIGVkaXRvckVsLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSByZXR1cm5cbiAgICBjb25zdCBmaWxlcyA9IGZpbGVzRnJvbURhdGFUcmFuc2ZlcihlLmNsaXBib2FyZERhdGEpXG4gICAgaWYgKCFmaWxlcy5sZW5ndGgpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGFkZEZpbGVzKGZpbGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJGb2N1cyA9ICgpID0+IHNldElzRm9jdXNlZCh0cnVlKVxuICBjb25zdCBoYW5kbGVXcmFwcGVyQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpXG4gICAgICB9XG4gICAgfSwgMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN0b3BHZW5lcmF0aW9uID0gKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTdG9wUmVzcG9uc2UpXG4gICAgb25TdG9wR2VuZXJhdGlvbj8uKClcbiAgfVxuXG4gIGNvbnN0IHBsdXNJY29uQ29sb3IgPSBpc0ZvY3VzZWQgPyBjb2xvcnMudGV4dC5zZWNvbmRhcnkgOiBjb2xvcnMudGV4dC5tZWRpdW1HcmF5XG4gIGNvbnN0IHBsdXNNZW51SWNvbkNvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLm1lbnVJY29uXG4gIGNvbnN0IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA9IE1BSUFfQ0hBVF9JTlBVVF9VSS50ZXh0QnJhbmRCb2xkXG5cbiAgbGV0IGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb246IFJlYWN0Tm9kZVxuICBpZiAoYWN0aXZlVG9vbENoaXBIb3ZlcmVkKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxDcm9zcyBjb2xvcj17TUFJQV9DSEFUX0lOUFVUX1VJLmNoaXBDbG9zZUljb259IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8R2xvYmUgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxUZWxlc2NvcGVJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0eWxlZE1BSUFJbnB1dFdyYXBwZXJcbiAgICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICBoYXNBdHRhY2htZW50cz17ISFhdHRhY2htZW50cy5sZW5ndGh9XG4gICAgICAgIGNvbXBhY3RTaW5nbGVSb3dUb29sYmFyPXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn1cbiAgICAgICAgJGZpbGVEcmFnQWN0aXZlPXtpc0ZpbGVEcmFnQWN0aXZlfVxuICAgICAgICBkYXRhLWFwcGN1ZXM9XCJtYWlhX2NoYXRfaW5wdXRcIlxuICAgICAgICBkYXRhLW1haWEtc3RyZWFtaW5nPXtpc1N0cmVhbWluZyA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgb25CbHVyPXtoYW5kbGVXcmFwcGVyQmx1cn1cbiAgICAgICAgb25QYXN0ZT17aGFuZGxlV3JhcHBlclBhc3RlfVxuICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxuICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxuICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgPlxuICAgICAgICB7c2hvd1NsYXNoRHJvcGRvd24gJiYgKFxuICAgICAgICAgIDxTbGFzaENvbW1hbmREcm9wZG93blxuICAgICAgICAgICAgY29tbWFuZHM9e3NsYXNoQ29tbWFuZHN9XG4gICAgICAgICAgICBxdWVyeT17c2xhc2hRdWVyeX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmR9XG4gICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd259XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyEhYXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTJweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGF0dGFjaG1lbnQubmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5RXh0ZW5zaW9uID0gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlNaW1lID0gYXR0YWNobWVudC50eXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID0gaXNJbWFnZUJ5TWltZSAmJiBpc0ltYWdlQnlFeHRlbnNpb25cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudC5uYW1lfSBrZXk9e2Ake2luZGV4fS0ke2F0dGFjaG1lbnQubmFtZX1gfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50IGlzSW1hZ2U9e2lzSW1hZ2V9PlxuICAgICAgICAgICAgICAgICAgICB7YXR0YWNobWVudC5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cInJnYmEoMTkxLCAxOTEsIDE5MSwgMSlcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnREZWxldGVJY29uPlxuICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudD5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8U3R5bGVkTUFJQU1haW5Ub29sYmFyR3JpZCAkY29tcGFjdFJvdz17Y29tcGFjdFNpbmdsZVJvd1Rvb2xiYXJ9PlxuICAgICAgICAgIDxTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsICRjb21wYWN0Um93PXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn0+XG4gICAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgICAgPFBsdXNUb2dnbGVCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQbHVzQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyl9XG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzIGNvbG9yPXtwbHVzSWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgIDwvUGx1c1RvZ2dsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e3BsdXNNZW51QW5jaG9yfVxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlUGx1c01lbnV9XG4gICAgICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgc3g9e3sgekluZGV4OiBwbHVzTWVudVpJbmRleCB9fVxuICAgICAgICAgICAgICAgIHNsb3RQcm9wcz17e1xuICAgICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTRweCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudUF0dGFjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgPEF0dGFjaCBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXtmYWxzZX0+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgPEdsb2JlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNXZWJTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzV2ViU2VhcmNoQWN0aXZlfT57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVTZWxlY3RlZENvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudURlZXBTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICA8VGVsZXNjb3BlSWNvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0RlZXBTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ISFpc0RlZXBTZWFyY2hBY3RpdmV9PlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge2lzRGVlcFNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVTZWxlY3RlZENvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgICAgICB7KGlzV2ViU2VhcmNoQWN0aXZlIHx8IGlzRGVlcFNlYXJjaEFjdGl2ZSkgJiYgKFxuICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAgICRob3ZlcmVkPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAkZXhpdGluZz17dG9vbENoaXBFeGl0aW5nfVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZChmYWxzZSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJGNsb3NlU2hvd249e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwUm9vdD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICA8L1N0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICBjb21wYWN0U2luZ2xlUm93VG9vbGJhclxuICAgICAgICAgICAgICAgID8geyBncmlkQ29sdW1uOiAyLCBncmlkUm93OiAxLCBtaW5XaWR0aDogMCwgYWxpZ25TZWxmOiAnY2VudGVyJyB9XG4gICAgICAgICAgICAgICAgOiB7IGdyaWRDb2x1bW46ICcxIC8gLTEnLCBncmlkUm93OiAxLCBtaW5XaWR0aDogMCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlRWRpdG9ySW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlV3JhcHBlckZvY3VzfVxuICAgICAgICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgICAgICAgICBvblBhc3RlRmlsZXM9e2hhbmRsZVBhc3RlRmlsZXN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsICRjb21wYWN0Um93PXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn0+XG4gICAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zdG9wJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEljb24gLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZW5kJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VuZERpc2FibGVkIHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9e2hhc1R5cGluZ1ByZXNlbmNlIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQYXBlclBsYW5lIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbD5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICAgIHtpc0ZpbGVEcmFnQWN0aXZlICYmIDxTdHlsZWRNQUlBRHJvcE92ZXJsYXk+e3QoJ2NoYXQuZHJvcEZpbGVzSGVyZScpfTwvU3R5bGVkTUFJQURyb3BPdmVybGF5Pn1cbiAgICAgIDwvU3R5bGVkTUFJQUlucHV0V3JhcHBlcj5cbiAgICAgIHttb2RhbFByb3BzLmlzT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbEZpbGVFeGNlZWRzXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogZmFsc2UsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzOiBbXSwgZmlsZVNpemVzOiB7fSB9KX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGZpbGVTaXplcz17bW9kYWxQcm9wcy5maWxlU2l6ZXN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge3BvcG92ZXJOb2RlICYmIGNyZWF0ZVBvcnRhbChwb3BvdmVyTm9kZSwgZG9jdW1lbnQuYm9keSl9XG4gICAgPC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBUUVBLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsUUFBUSxRQUNILE9BQU87QUFDZCxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsT0FBT0MsTUFBTSxNQUFNLG1DQUFtQztBQUV0RCxTQUNFQyx3QkFBd0IsRUFDeEJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLGNBQWMsRUFDZEMsd0JBQXdCLEVBQ3hCQyxzQkFBc0IsRUFDdEJD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
|