@projectcor/maia-components 2.11.69-2 → 2.11.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/Chip/Chip.js +15 -50
- package/lib/components/atoms/Chip/styles.js +5 -9
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +6 -38
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +13 -21
- package/lib/components/atoms/MAIAInput/MAIAInput.js +14 -32
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +34 -27
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +2 -5
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +46 -297
- package/lib/components/molecules/ChatAIHome/styles.js +26 -63
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +148 -54
- package/lib/components/molecules/ChatAIMessages/newStyles.js +9 -19
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +42 -220
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -4
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +1 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +25 -20
- package/lib/components/molecules/ChatFooter/ChatFooter.js +18 -75
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +7 -22
- package/lib/components/molecules/ChatFooter/styles.js +2 -11
- package/lib/components/molecules/Sidebar/Sidebar.js +7 -11
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/maiaTaskPanelAccess.js +5 -7
- package/lib/constants/taskUrls.js +2 -9
- package/lib/context/global-context.js +1 -8
- package/lib/hooks/index.js +1 -2
- package/lib/hooks/useChatManager/useChatManager.js +125 -149
- package/lib/hooks/useChatMessages/useChatMessages.js +2 -33
- package/lib/hooks/useEntitySearch.js +129 -74
- package/lib/hooks/useEvent.js +1 -2
- package/lib/hooks/useFrequentlyAskedQuestions.js +10 -12
- package/lib/hooks/useFrequentlyUsedActions.js +3 -5
- package/lib/hooks/useMentionAllowedTypes.js +1 -11
- package/lib/hooks/useMentionPopover.js +2 -3
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +18 -27
- package/lib/hooks/useProjectSearch.js +28 -4
- package/lib/hooks/useProjectSummaryConfig.js +4 -74
- package/lib/hooks/useRecentClientsSearch.js +34 -4
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +16 -24
- package/lib/lang/br/index.js +2 -28
- package/lib/lang/en/index.js +2 -28
- package/lib/lang/es/index.js +2 -28
- package/lib/lang/fr/index.js +2 -28
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +3 -6
- package/lib/services/maia/Agents/getAgents.js +175 -225
- package/lib/services/maia/Chats/getChatMessages.js +3 -13
- package/lib/services/maia/Chats/getChatsByUserId.js +2 -10
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -6
- package/lib/services/maia/Orchestrator/orchestrator.js +5 -21
- package/lib/services/maia/index.js +2 -4
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/agent.js +1 -1
- package/lib/utils/agentDisplayName.js +1 -9
- package/lib/utils/hitlAnalytics.js +3 -3
- package/lib/utils/renderContextMentions.js +1 -3
- package/package.json +1 -1
- package/lib/hooks/useContextPinPopover.js +0 -235
- package/lib/hooks/useRecentContexts.js +0 -86
- package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -54
- package/lib/services/maia/RecentContexts/index.js +0 -6
- package/lib/utils/entityLinkRender.js +0 -135
|
@@ -3,7 +3,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
3
3
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
4
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
5
5
|
var _excluded = ["isCurrentUser", "children"],
|
|
6
|
-
_excluded2 = ["isCurrentUser"]
|
|
6
|
+
_excluded2 = ["isCurrentUser"],
|
|
7
|
+
_excluded3 = ["href", "children"];
|
|
7
8
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
9
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
10
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -28,11 +29,12 @@ import { AttachmentPreviewModal } from '../../atoms/AttachmentPreviewModal';
|
|
|
28
29
|
import { AttachmentCardAudio } from '../../atoms/AttachmentCard/AttachmentCardAudio';
|
|
29
30
|
import { ChatHistoryRole } from '../../../types/Chat';
|
|
30
31
|
import { MAIA_STREAMDOWN_REHYPE_PLUGINS } from '../../../utils/maiaStreamdownRehypePlugins';
|
|
31
|
-
import { renderTextWithMentions, hasInlineMarkers } from '../../../utils/renderContextMentions';
|
|
32
|
-
import { isMaiakerAgent } from '../../../utils/agentDisplayName';
|
|
32
|
+
import { renderTextWithMentions, renderMentionLink, hasInlineMarkers } from '../../../utils/renderContextMentions';
|
|
33
|
+
import { getAgentDisplayName, isMaiakerAgent } from '../../../utils/agentDisplayName';
|
|
33
34
|
import { useUser } from '../../../context/cor-user';
|
|
34
35
|
import { useT } from '../../../hooks/useT';
|
|
35
36
|
import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
37
|
+
import { useTaskPanel } from '../../../hooks/useTaskPanel';
|
|
36
38
|
import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
|
|
37
39
|
import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
|
|
38
40
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
@@ -42,11 +44,11 @@ import { Loader } from '../../atoms/Loader';
|
|
|
42
44
|
import { Fade } from '../../atoms/Fade';
|
|
43
45
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
44
46
|
import { MessageFeedback } from '../MessageFeedback';
|
|
45
|
-
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCLoadingMessagesColumn, SCOptionsList, SCOptionItem, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
|
|
47
|
+
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCLoadingMessagesColumn, SCOptionsList, SCOptionItem, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCTaskLink, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
|
|
46
48
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
47
49
|
import { useGlobalContext } from '../../../context/global-context';
|
|
48
50
|
import { MAIAIcon } from '../../atoms/icons';
|
|
49
|
-
import {
|
|
51
|
+
import { TASK_URL_REGEX_PATTERN } from '../../../constants/taskUrls';
|
|
50
52
|
import { ChatAISuggestions } from './ChatAISuggestions';
|
|
51
53
|
import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
52
54
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
@@ -59,7 +61,7 @@ var AssistantAvatarInner = function AssistantAvatarInner() {
|
|
|
59
61
|
var _useGlobalContext = useGlobalContext(),
|
|
60
62
|
agent = _useGlobalContext.agent;
|
|
61
63
|
return /*#__PURE__*/_jsx(SCAssistantAvatar, {
|
|
62
|
-
children: (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone'
|
|
64
|
+
children: (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
|
|
63
65
|
width: 18,
|
|
64
66
|
height: 18
|
|
65
67
|
}) : agent === null || agent === void 0 ? void 0 : agent.emoji
|
|
@@ -107,19 +109,120 @@ function MessageOptions(_ref3) {
|
|
|
107
109
|
});
|
|
108
110
|
}
|
|
109
111
|
var AssistantMessageHeader = function AssistantMessageHeader() {
|
|
112
|
+
var _useState3 = useState(null),
|
|
113
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
114
|
+
localAgent = _useState4[0],
|
|
115
|
+
setLocalAgent = _useState4[1];
|
|
110
116
|
var _useGlobalContext2 = useGlobalContext(),
|
|
111
117
|
agent = _useGlobalContext2.agent;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
var displayName = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' || (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' ? 'MAIA' : agent === null || agent === void 0 ? void 0 : agent.name;
|
|
118
|
+
useEffect(function () {
|
|
119
|
+
setLocalAgent(agent);
|
|
120
|
+
}, [agent]);
|
|
116
121
|
return /*#__PURE__*/_jsxs(SCAssistantMessageHeader, {
|
|
117
|
-
children: [/*#__PURE__*/_jsx(AssistantAvatar, {}),
|
|
118
|
-
children:
|
|
122
|
+
children: [/*#__PURE__*/_jsx(AssistantAvatar, {}), (localAgent === null || localAgent === void 0 ? void 0 : localAgent.name) && /*#__PURE__*/_jsx(SCAssistantName, {
|
|
123
|
+
children: getAgentDisplayName(localAgent === null || localAgent === void 0 ? void 0 : localAgent.type, localAgent === null || localAgent === void 0 ? void 0 : localAgent.name)
|
|
119
124
|
})]
|
|
120
125
|
});
|
|
121
126
|
};
|
|
122
127
|
|
|
128
|
+
// Extrae el segmento de tab (detail|message|messages|files|history|hours) del href para abrir el modal con el tab correcto
|
|
129
|
+
var getTabSegmentFromHref = function getTabSegmentFromHref(href) {
|
|
130
|
+
var match = href.match(/\/tasks\/\d+\/([^/?]+)/);
|
|
131
|
+
return match && /^(detail|message|messages|files|history|hours)$/.test(match[1]) ? match[1] : 'detail';
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/** Extrae las tareas enlazadas en el texto (URLs que coinciden con TASK_URL_REGEX_PATTERN). */
|
|
135
|
+
var extractTasksFromMessage = function extractTasksFromMessage(message) {
|
|
136
|
+
if (!message) return [];
|
|
137
|
+
var taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
|
|
138
|
+
var tasks = [];
|
|
139
|
+
var seenIds = new Set();
|
|
140
|
+
var match = null;
|
|
141
|
+
// eslint-disable-next-line no-cond-assign
|
|
142
|
+
while ((match = taskUrlRegex.exec(message)) !== null) {
|
|
143
|
+
var taskId = match[1];
|
|
144
|
+
var url = match[0];
|
|
145
|
+
if (!seenIds.has(taskId)) {
|
|
146
|
+
seenIds.add(taskId);
|
|
147
|
+
var escapedUrl = url.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
148
|
+
var markdownLinkRegex = new RegExp("\\[([^\\]]+)\\]\\(".concat(escapedUrl, "\\)"));
|
|
149
|
+
var linkMatch = message.match(markdownLinkRegex);
|
|
150
|
+
var title = linkMatch ? linkMatch[1] : "Tarea #".concat(taskId);
|
|
151
|
+
tasks.push({
|
|
152
|
+
id: taskId,
|
|
153
|
+
title: title,
|
|
154
|
+
url: url
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return tasks;
|
|
159
|
+
};
|
|
160
|
+
var hasTaskLinks = function hasTaskLinks(text) {
|
|
161
|
+
return extractTasksFromMessage(text).length > 0;
|
|
162
|
+
};
|
|
163
|
+
var TASK_MENTION_MARKER_RE = /\[\[mention:task:/i;
|
|
164
|
+
var MAIA_TASK_MENTION_HREF_RE = /maia-mention:\/\/task\//i;
|
|
165
|
+
|
|
166
|
+
/** URLs de tarea en markdown + marcadores [[mention:task:…]] + links maia-mention (mismo aspecto que enlaces del agente). */
|
|
167
|
+
var hasTaskLinksOrTaskMentions = function hasTaskLinksOrTaskMentions(text) {
|
|
168
|
+
return hasTaskLinks(text) || TASK_MENTION_MARKER_RE.test(text) || MAIA_TASK_MENTION_HREF_RE.test(text);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// Component for task links that uses the useTaskPanel hook
|
|
172
|
+
var TaskLink = function TaskLink(_ref4) {
|
|
173
|
+
var href = _ref4.href,
|
|
174
|
+
taskId = _ref4.taskId,
|
|
175
|
+
children = _ref4.children;
|
|
176
|
+
var tabSegment = getTabSegmentFromHref(href);
|
|
177
|
+
var _useTaskPanel = useTaskPanel(taskId, tabSegment),
|
|
178
|
+
buildOpenTask = _useTaskPanel.buildOpenTask;
|
|
179
|
+
var openTask = buildOpenTask();
|
|
180
|
+
var handleClick = function handleClick(e) {
|
|
181
|
+
// Si es Cmd/Ctrl + click, dejar que se abra en nueva pestaña (comportamiento por defecto)
|
|
182
|
+
if (e.metaKey || e.ctrlKey) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
e.preventDefault();
|
|
186
|
+
openTask();
|
|
187
|
+
};
|
|
188
|
+
return /*#__PURE__*/_jsx(SCTaskLink, {
|
|
189
|
+
href: href,
|
|
190
|
+
onClick: handleClick,
|
|
191
|
+
children: children
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// Custom link component for Streamdown: task URLs open the task panel, other links render normally
|
|
196
|
+
|
|
197
|
+
var CustomLink = function CustomLink(_ref5) {
|
|
198
|
+
var href = _ref5.href,
|
|
199
|
+
children = _ref5.children,
|
|
200
|
+
rest = _objectWithoutProperties(_ref5, _excluded3);
|
|
201
|
+
if (!href || typeof href !== 'string') {
|
|
202
|
+
return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
|
|
203
|
+
href: href
|
|
204
|
+
}, rest), {}, {
|
|
205
|
+
children: children
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
208
|
+
var mentionNode = renderMentionLink(href, children);
|
|
209
|
+
if (mentionNode) return mentionNode;
|
|
210
|
+
var taskMatch = href.match(new RegExp(TASK_URL_REGEX_PATTERN));
|
|
211
|
+
if (taskMatch) {
|
|
212
|
+
var taskId = taskMatch[1];
|
|
213
|
+
return /*#__PURE__*/_jsx(TaskLink, {
|
|
214
|
+
href: href,
|
|
215
|
+
taskId: taskId,
|
|
216
|
+
children: children
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
|
|
220
|
+
href: href
|
|
221
|
+
}, rest), {}, {
|
|
222
|
+
children: children
|
|
223
|
+
}));
|
|
224
|
+
};
|
|
225
|
+
|
|
123
226
|
/** Solo este componente re-renderiza cuando cambia el texto en streaming (lee del context). */
|
|
124
227
|
var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
125
228
|
var _props$createAgentFol;
|
|
@@ -163,7 +266,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
|
163
266
|
children: [/*#__PURE__*/_jsx(SCCAIMessageWrapper, {
|
|
164
267
|
isCurrentUser: props.isCurrentUser,
|
|
165
268
|
isFrontendCancelled: props.isFrontendCancelled,
|
|
166
|
-
className:
|
|
269
|
+
className: hasTaskLinksOrTaskMentions(displayText) ? 'has-task-links' : '',
|
|
167
270
|
children: hasMentions && mentionNodes ?
|
|
168
271
|
/*#__PURE__*/
|
|
169
272
|
// Si hay mentions, renderizar directamente (sin markdown en el mismo párrafo)
|
|
@@ -181,7 +284,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
|
181
284
|
},
|
|
182
285
|
rehypePlugins: MAIA_STREAMDOWN_REHYPE_PLUGINS,
|
|
183
286
|
components: {
|
|
184
|
-
a:
|
|
287
|
+
a: CustomLink
|
|
185
288
|
},
|
|
186
289
|
linkSafety: {
|
|
187
290
|
enabled: false
|
|
@@ -237,18 +340,16 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
237
340
|
createAgentFollowUp = props.createAgentFollowUp,
|
|
238
341
|
hasSelectedSuggestion = props.hasSelectedSuggestion,
|
|
239
342
|
isLastMessage = props.isLastMessage;
|
|
240
|
-
var
|
|
241
|
-
|
|
242
|
-
previewAttachment =
|
|
243
|
-
setPreviewAttachment =
|
|
343
|
+
var _useState5 = useState(null),
|
|
344
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
345
|
+
previewAttachment = _useState6[0],
|
|
346
|
+
setPreviewAttachment = _useState6[1];
|
|
244
347
|
var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
|
|
245
348
|
var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
|
|
246
349
|
// Mientras el agente "piensa" (streaming sin texto aún) ocultamos el header.
|
|
247
350
|
// En cuanto empieza a escribir, el avatar y el nombre vuelven a mostrarse.
|
|
248
|
-
var
|
|
249
|
-
var
|
|
250
|
-
var isActiveStreaming = !!isStreaming || isStreamingPlaceholder;
|
|
251
|
-
var isThinking = isActiveStreaming && !streamingText;
|
|
351
|
+
var streamingText = useStreamingMessage(isStreaming ? id : null);
|
|
352
|
+
var isThinking = !!isStreaming && !streamingText;
|
|
252
353
|
var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
|
|
253
354
|
var handleAttachmentClick = function handleAttachmentClick(attachment) {
|
|
254
355
|
// Permitir previsualización si tiene archivo local o URLs del backend
|
|
@@ -260,7 +361,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
260
361
|
setPreviewAttachment(null);
|
|
261
362
|
};
|
|
262
363
|
var handleAttachmentDownload = /*#__PURE__*/function () {
|
|
263
|
-
var
|
|
364
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(attachment) {
|
|
264
365
|
var extension, fileName, fileUrl, blobUrl, downloadedFile, link, _t;
|
|
265
366
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
266
367
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -315,7 +416,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
315
416
|
}, _callee, null, [[1, 6]]);
|
|
316
417
|
}));
|
|
317
418
|
return function handleAttachmentDownload(_x) {
|
|
318
|
-
return
|
|
419
|
+
return _ref6.apply(this, arguments);
|
|
319
420
|
};
|
|
320
421
|
}();
|
|
321
422
|
if (isChangeProject && options) {
|
|
@@ -373,9 +474,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
373
474
|
}
|
|
374
475
|
}, "".concat(attachment.id, "-").concat(attachment.name));
|
|
375
476
|
})
|
|
376
|
-
}), (!!message ||
|
|
477
|
+
}), (!!message || isStreaming) && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
|
|
377
478
|
message: message !== null && message !== void 0 ? message : '',
|
|
378
|
-
isStreaming:
|
|
479
|
+
isStreaming: !!isStreaming,
|
|
379
480
|
isCurrentUser: isCurrentUser,
|
|
380
481
|
isAssistant: isAssistant,
|
|
381
482
|
isFrontendCancelled: props.isFrontendCancelled,
|
|
@@ -387,7 +488,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
387
488
|
handleFeedbackClick: handleFeedbackClick,
|
|
388
489
|
disableFeedback: disableFeedback !== null && disableFeedback !== void 0 ? disableFeedback : null,
|
|
389
490
|
handleSuggestionClick: handleSuggestionClick,
|
|
390
|
-
suggestionsDisabled:
|
|
491
|
+
suggestionsDisabled: !!props.isStreaming || !!hasSelectedSuggestion,
|
|
391
492
|
messageId: id,
|
|
392
493
|
isLastMessage: isLastMessage
|
|
393
494
|
}), approval && approval.pending_actions && /*#__PURE__*/_jsx(SCApprovalActionsColumn, {
|
|
@@ -414,15 +515,15 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
414
515
|
})]
|
|
415
516
|
});
|
|
416
517
|
});
|
|
417
|
-
var ChatAIMessagesInner = function ChatAIMessagesInner(
|
|
418
|
-
var userInitialMessage =
|
|
419
|
-
initialChatId =
|
|
420
|
-
onError =
|
|
421
|
-
onSendMessageReady =
|
|
422
|
-
onScrollToBottom =
|
|
423
|
-
attachments =
|
|
424
|
-
agents =
|
|
425
|
-
expanded =
|
|
518
|
+
var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
519
|
+
var userInitialMessage = _ref7.userInitialMessage,
|
|
520
|
+
initialChatId = _ref7.initialChatId,
|
|
521
|
+
onError = _ref7.onError,
|
|
522
|
+
onSendMessageReady = _ref7.onSendMessageReady,
|
|
523
|
+
onScrollToBottom = _ref7.onScrollToBottom,
|
|
524
|
+
attachments = _ref7.attachments,
|
|
525
|
+
agents = _ref7.agents,
|
|
526
|
+
expanded = _ref7.expanded;
|
|
426
527
|
var _useT = useT(),
|
|
427
528
|
t = _useT.t;
|
|
428
529
|
var _useGlobalContext3 = useGlobalContext(),
|
|
@@ -439,14 +540,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
439
540
|
var lastScrollTopRef = useRef(0);
|
|
440
541
|
var showScrollToBottomRef = useRef(false);
|
|
441
542
|
var scrollRafRef = useRef(null);
|
|
442
|
-
var
|
|
443
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
444
|
-
showScrollToBottom = _useState6[0],
|
|
445
|
-
setShowScrollToBottom = _useState6[1];
|
|
446
|
-
var _useState7 = useState({}),
|
|
543
|
+
var _useState7 = useState(false),
|
|
447
544
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
448
|
-
|
|
449
|
-
|
|
545
|
+
showScrollToBottom = _useState8[0],
|
|
546
|
+
setShowScrollToBottom = _useState8[1];
|
|
547
|
+
var _useState9 = useState({}),
|
|
548
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
549
|
+
selectedSuggestionMessageIds = _useState0[0],
|
|
550
|
+
setSelectedSuggestionMessageIds = _useState0[1];
|
|
450
551
|
var _useChatManager = useChatManager({
|
|
451
552
|
chatId: initialChatId || undefined,
|
|
452
553
|
userInitialMessage: userInitialMessage,
|
|
@@ -580,12 +681,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
580
681
|
var sendMessageRef = useRef(sendMessage);
|
|
581
682
|
var stopGenerationRef = useRef(stopGeneration);
|
|
582
683
|
var onSendMessageReadyRef = useRef(onSendMessageReady);
|
|
583
|
-
var sendMessageProxyRef = useRef(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
584
|
-
return sendMessageRef.current(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
585
|
-
});
|
|
586
|
-
var stopGenerationProxyRef = useRef(function () {
|
|
587
|
-
return stopGenerationRef.current();
|
|
588
|
-
});
|
|
589
684
|
|
|
590
685
|
// update refs when functions change
|
|
591
686
|
sendMessageRef.current = sendMessage;
|
|
@@ -593,7 +688,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
593
688
|
onSendMessageReadyRef.current = onSendMessageReady;
|
|
594
689
|
useEffect(function () {
|
|
595
690
|
if (onSendMessageReadyRef.current) {
|
|
596
|
-
onSendMessageReadyRef.current(
|
|
691
|
+
onSendMessageReadyRef.current(sendMessageRef.current, stopGenerationRef.current, waitingResponse, isWriting);
|
|
597
692
|
}
|
|
598
693
|
}, [waitingResponse, isWriting]);
|
|
599
694
|
useEffect(function () {
|
|
@@ -764,12 +859,11 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
764
859
|
var _message$attachments, _message$sources, _message$project, _message$id;
|
|
765
860
|
var isAssistantMessage = message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
|
|
766
861
|
var isLastMessage = index === messages.length - 1;
|
|
767
|
-
var
|
|
768
|
-
var isStreaming = isStreamingPlaceholder && (waitingResponse || isWriting);
|
|
862
|
+
var isStreaming = isAssistantMessage && isLastMessage && (waitingResponse || isWriting) && isStreamingPlaceholderMessageId(message.id);
|
|
769
863
|
|
|
770
864
|
// No filtrar el placeholder del mensaje en streaming: su texto vive
|
|
771
865
|
// en el streamingStore y `message.message` es '' hasta el complete.
|
|
772
|
-
if (!
|
|
866
|
+
if (!isStreaming && !((_message$attachments = message.attachments) !== null && _message$attachments !== void 0 && _message$attachments.length || (_message$sources = message.sources) !== null && _message$sources !== void 0 && _message$sources.length) && !message.message && !((_message$project = message.project) !== null && _message$project !== void 0 && _message$project.name) && !message.approval) return null;
|
|
773
867
|
var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
|
|
774
868
|
|
|
775
869
|
// Key estable: solo message.id para evitar remount durante streaming (message.date puede cambiar)
|
|
@@ -822,4 +916,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
822
916
|
});
|
|
823
917
|
};
|
|
824
918
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
825
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsIk1BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOUyIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiTG9hZGVyIiwiRmFkZSIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0Iiwid2lkdGgiLCJoZWlnaHQiLCJlbW9qaSIsIkFzc2lzdGFudEF2YXRhciIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZGlzcGxheU5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInBsdWdpbnMiLCJyZWh5cGVQbHVnaW5zIiwiY29tcG9uZW50cyIsImEiLCJsaW5rU2FmZXR5IiwiaXNBbmltYXRpbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiTWVzc2FnZUl0ZW0iLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJpc1RoaW5raW5nIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJjb25jYXQiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjUiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDMiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ0cmltIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWdlbnRfdHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkc2tpcElmVXNlclNjcm9sIiwic2tpcElmVXNlclNjcm9sbGluZyIsIl9vcHRzJGRlbGF5TXMiLCJkZWxheU1zIiwicnVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvIiwidG9wIiwiYmVoYXZpb3IiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbCIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJyYWZJZCIsImxhc3RIZWlnaHQiLCJ0aWNrIiwiY3VycmVudEhlaWdodCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJhdHRhY2htZW50c0NvdW50Iiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJoYXNBdHRhY2htZW50cyIsIkJvb2xlYW4iLCJpc1Njcm9sbE9uUGFyZW50IiwiZXhwYW5kZWRSZWYiLCJzYXZlZFNjcm9sbFRvcCIsImZpbGwiLCJtZXNzYWdlc0NvbnRlbnQiLCJ0ZXh0IiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkcHJvamVjdCIsIl9tZXNzYWdlJGlkIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwicHJvamVjdCIsIm1lc3NhZ2VGZWVkYmFjayIsIndhc0hlbHBmdWwiLCJUSFVNQlNfVVAiLCJUSFVNQlNfRE9XTiIsIm1lc3NhZ2VLZXkiLCJrZXkiLCJhY3Rpdml0eSIsIiRzY3JvbGxPblBhcmVudCIsInJlZiIsIm9uU2Nyb2xsIiwiJGlzTWFya2V0cGxhY2VHbG9iYWwiLCJjb2xvciIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RyZWFtZG93biB9IGZyb20gJ3N0cmVhbWRvd24nXG5pbXBvcnQgeyBjcmVhdGVDb2RlUGx1Z2luIH0gZnJvbSAnQHN0cmVhbWRvd24vY29kZSdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhU3RyZWFtZG93blJlaHlwZVBsdWdpbnMnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEZhZGUgfSBmcm9tICcuLi8uLi9hdG9tcy9GYWRlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIsXG4gIFNDQXNzaXN0YW50TmFtZSxcbiAgU0NBc3Npc3RhbnRBdmF0YXIsXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBFbnRpdHlMaW5rQ3VzdG9tTGluaywgZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnRpdHlMaW5rUmVuZGVyJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG5jb25zdCBjb2RlID0gY3JlYXRlQ29kZVBsdWdpbih7IHRoZW1lczogWydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J10gfSlcblxuY29uc3QgQXNzaXN0YW50QXZhdGFySW5uZXI6IEZDID0gKCkgPT4ge1xuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgcmV0dXJuIChcbiAgICA8U0NBc3Npc3RhbnRBdmF0YXI+XG4gICAgICB7YWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgfHwgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InIHx8IGFnZW50Py5pc19sZWdhY3lfY29udGV4dCA/IChcbiAgICAgICAgPE1BSUFJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIGFnZW50Py5lbW9qaVxuICAgICAgKX1cbiAgICA8L1NDQXNzaXN0YW50QXZhdGFyPlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhciA9IG1lbW8oQXNzaXN0YW50QXZhdGFySW5uZXIpXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIC8vIFNpZW1wcmUgJ01BSUEnIHBhcmEgY2xvbmUvb3JjaGVzdHJhdG9yIChudW5jYSBlbCBub21icmUgZGVsIHN1YmFnZW50ZSBxdWVcbiAgLy8gcmVzcG9uZGnDsyk7IHBhcmEgY3VzdG9tLCBlbCBub21icmUgZGVsIGFnZW50ZS5cbiAgY29uc3QgZGlzcGxheU5hbWUgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyB8fCBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgPyAnTUFJQScgOiBhZ2VudD8ubmFtZVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtkaXNwbGF5TmFtZSAmJiA8U0NBc3Npc3RhbnROYW1lPntkaXNwbGF5TmFtZX08L1NDQXNzaXN0YW50TmFtZT59XG4gICAgPC9TQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbUxhZ01zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dChyYXdUZXh0LCB7XG4gICAgICBlbmFibGVkOiAhIXByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1BZGFwdCAhPSBudWxsICYmIHsgYWRhcHRUb0JhY2tlbmRSYXRlOiB3aW5GbGFncy5zdHJlYW1BZGFwdCB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyAhPSBudWxsICYmIHsgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zIH0pLFxuICAgIH0pXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcblxuICAgIGlmICghZGlzcGxheVRleHQgJiYgIXByb3BzLmlzU3RyZWFtaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGhhc01lbnRpb25zID0gaGFzSW5saW5lTWFya2VycyhkaXNwbGF5VGV4dClcbiAgICBjb25zdCBtZW50aW9uTm9kZXMgPSBoYXNNZW50aW9ucyA/IHJlbmRlclRleHRXaXRoTWVudGlvbnMoZGlzcGxheVRleHQpIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNZW50aW9ucyAmJiBtZW50aW9uTm9kZXMgPyAoXG4gICAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgICA8U3RyZWFtZG93blxuICAgICAgICAgICAgICBwbHVnaW5zPXt7IGNvZGUgfX1cbiAgICAgICAgICAgICAgcmVoeXBlUGx1Z2lucz17TUFJQV9TVFJFQU1ET1dOX1JFSFlQRV9QTFVHSU5TfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgbGlua1NhZmV0eT17eyBlbmFibGVkOiBmYWxzZSB9fVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgLy8gTWllbnRyYXMgZWwgYWdlbnRlIFwicGllbnNhXCIgKHN0cmVhbWluZyBzaW4gdGV4dG8gYcO6bikgb2N1bHRhbW9zIGVsIGhlYWRlci5cbiAgLy8gRW4gY3VhbnRvIGVtcGllemEgYSBlc2NyaWJpciwgZWwgYXZhdGFyIHkgZWwgbm9tYnJlIHZ1ZWx2ZW4gYSBtb3N0cmFyc2UuXG4gIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGlkKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gaWQgOiBudWxsKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9ICEhaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuICBjb25zdCBpc1RoaW5raW5nID0gaXNBY3RpdmVTdHJlYW1pbmcgJiYgIXN0cmVhbWluZ1RleHRcbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmICFpc1RoaW5raW5nICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNUaGlua2luZyAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IGlzQWN0aXZlU3RyZWFtaW5nKSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc0FjdGl2ZVN0cmVhbWluZ31cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG4gICAgICBzZW5kTWVzc2FnZShzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlLCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBldmVudCwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/Lm5hbWUsIGFnZW50Py50eXBlXVxuICApXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBlc3RhZG8gZGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiBjb21wYXJhbmRvIGxhIHBvc2ljacOzblxuICAgKiBhY3R1YWwgZGVsIHNjcm9sbCBjb24gZWwgZm9uZG8uIFVzYSB1biByZWYgcGFyYSBldml0YXIgYHNldFN0YXRlYCBjdWFuZG9cbiAgICogZWwgdmFsb3Igbm8gY2FtYmlhLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBSZXNwZXRhIGBza2lwSWZVc2VyU2Nyb2xsaW5nYCBwYXJhXG4gICAqIG5vIHNvYnJlc2NyaWJpciBlbCBzY3JvbGwgbWFudWFsIGRlbCB1c3VhcmlvIGR1cmFudGUgZWwgc3RyZWFtaW5nLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBza2lwSWZVc2VyU2Nyb2xsaW5nPzogYm9vbGVhbjsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpcElmVXNlclNjcm9sbGluZyA9IGZhbHNlLCBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGlmIChza2lwSWZVc2VyU2Nyb2xsaW5nICYmIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUbyh7XG4gICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pXG4gICAgLy8gRGFyIHRpZW1wbyBhbCBzbW9vdGgtc2Nyb2xsIGFudGVzIGRlIHJlY2FsY3VsYXIgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi5cbiAgICBzZXRUaW1lb3V0KHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHksIDUwMClcbiAgfSwgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGRlY2lkaXIgZW4gZWwgQXBwcm92YWxCb3g6IGVsIGJveCBjb2xhcHNhIChib3RvbmVzIC0+IGJhZGdlKSB5IGVsIHN0cmVhbVxuICAvLyBjb250aW7DumEgYWJham8uIFJlYWN0aXZhciBlbCBhdXRvLXNjcm9sbCB5IHNlZ3VpciBlbCBmb25kbyBwYXJhIHF1ZSBsYSB2aXN0YVxuICAvLyBubyBxdWVkZSBhdHLDoXMgKGV2aXRhIHF1ZSBhcGFyZXpjYSBsYSBmbGVjaGEgZGUgc2Nyb2xsLXRvLWJvdHRvbSkuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24+KSA9PiB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiguLi5hcmdzKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICB9LFxuICAgIFtoYW5kbGVBcHByb3ZhbERlY2lzaW9uLCBzY3JvbGxUb0JvdHRvbVJhZl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgbGFzdEhlaWdodCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ICE9PSBsYXN0SGVpZ2h0KSB7XG4gICAgICAgIGxhc3RIZWlnaHQgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIGlmICghdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gY3VycmVudEhlaWdodFxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGNvbWVuemFyIGEgZXNwZXJhciBsYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQsIHNjcm9sbCBpbmljaWFsIGFsIGZvbmRvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBza2lwSWZVc2VyU2Nyb2xsaW5nOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBBcHByb3ZhbDogc2VjdWVuY2lhIGRlIHNjcm9sbHMgY29uIGRlbGF5IHBvcnF1ZSBlbCBBcHByb3ZhbEJveCBuZWNlc2l0YVxuICAgIC8vIHVuIHRpY2sgcGFyYSBtZWRpcnNlLiBTY3JvbGxlYSBhdW5xdWUgZWwgdXN1YXJpbyBubyBlc3TDqSBhbCBmb25kbyBzaSBub1xuICAgIC8vIGVzdMOhIHNjcm9sbGVhbmRvIG1hbnVhbG1lbnRlLlxuICAgIGlmIChpc0FwcHJvdmFsICYmIChpc0F0Qm90dG9tIHx8ICF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZiwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGx9XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7c3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9ICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lclxuICAgICAgICAgIHJlZj17bWVzc2FnZXNSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICAgICRzY3JvbGxPblBhcmVudD17ZmFsc2V9XG4gICAgICAgICAgJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFF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
|
|
919
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsIk1BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOUyIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJyZW5kZXJNZW50aW9uTGluayIsImhhc0lubGluZU1hcmtlcnMiLCJnZXRBZ2VudERpc3BsYXlOYW1lIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlVGFza1BhbmVsIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiTG9hZGVyIiwiRmFkZSIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ1Rhc2tMaW5rIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJNQUlBSWNvbiIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImNvZGUiLCJ0aGVtZXMiLCJBc3Npc3RhbnRBdmF0YXJJbm5lciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJjaGlsZHJlbiIsInR5cGUiLCJ3aWR0aCIsImhlaWdodCIsImVtb2ppIiwiQXNzaXN0YW50QXZhdGFyIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIkFzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvY2FsQWdlbnQiLCJzZXRMb2NhbEFnZW50IiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZ2V0VGFiU2VnbWVudEZyb21IcmVmIiwiaHJlZiIsIm1hdGNoIiwidGVzdCIsImV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlIiwibWVzc2FnZSIsInRhc2tVcmxSZWdleCIsIlJlZ0V4cCIsInRhc2tzIiwic2VlbklkcyIsIlNldCIsImV4ZWMiLCJ0YXNrSWQiLCJ1cmwiLCJoYXMiLCJhZGQiLCJlc2NhcGVkVXJsIiwicmVwbGFjZSIsIm1hcmtkb3duTGlua1JlZ2V4IiwiY29uY2F0IiwibGlua01hdGNoIiwidGl0bGUiLCJwdXNoIiwiaGFzVGFza0xpbmtzIiwidGV4dCIsImxlbmd0aCIsIlRBU0tfTUVOVElPTl9NQVJLRVJfUkUiLCJNQUlBX1RBU0tfTUVOVElPTl9IUkVGX1JFIiwiaGFzVGFza0xpbmtzT3JUYXNrTWVudGlvbnMiLCJUYXNrTGluayIsIl9yZWY0IiwidGFiU2VnbWVudCIsIl91c2VUYXNrUGFuZWwiLCJidWlsZE9wZW5UYXNrIiwib3BlblRhc2siLCJoYW5kbGVDbGljayIsImUiLCJtZXRhS2V5IiwiY3RybEtleSIsInByZXZlbnREZWZhdWx0IiwiQ3VzdG9tTGluayIsIl9yZWY1IiwicmVzdCIsIl9leGNsdWRlZDMiLCJtZW50aW9uTm9kZSIsInRhc2tNYXRjaCIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJwbHVnaW5zIiwicmVoeXBlUGx1Z2lucyIsImNvbXBvbmVudHMiLCJhIiwibGlua1NhZmV0eSIsImlzQW5pbWF0aW5nIiwic2hpa2lUaGVtZSIsImNvbnRyb2xzIiwidGFibGUiLCJpc0Fzc2lzdGFudCIsImlzRXJyb3IiLCJhcHByb3ZhbCIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNUaGlua2luZyIsIm1lc3NhZ2VBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZUF0dGFjaG1lbnRDbGljayIsImF0dGFjaG1lbnQiLCJmaWxlIiwiRmlsZSIsIm9yaWdpbmFsRmlsZSIsInVybF90aHVtYm5haWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxfZmlsZSIsImhhbmRsZUNsb3NlUHJldmlldyIsImhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCIsIl9yZWY2IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJleHRlbnNpb24iLCJmaWxlTmFtZSIsImZpbGVVcmwiLCJibG9iVXJsIiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImluY2x1ZGVzIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjciLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDMiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ0cmltIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWdlbnRfdHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkc2tpcElmVXNlclNjcm9sIiwic2tpcElmVXNlclNjcm9sbGluZyIsIl9vcHRzJGRlbGF5TXMiLCJkZWxheU1zIiwicnVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvIiwidG9wIiwiYmVoYXZpb3IiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbCIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJyYWZJZCIsImxhc3RIZWlnaHQiLCJ0aWNrIiwiY3VycmVudEhlaWdodCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJhdHRhY2htZW50c0NvdW50Iiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJoYXNBdHRhY2htZW50cyIsIkJvb2xlYW4iLCJpc1Njcm9sbE9uUGFyZW50IiwiZXhwYW5kZWRSZWYiLCJzYXZlZFNjcm9sbFRvcCIsImZpbGwiLCJtZXNzYWdlc0NvbnRlbnQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsImtleSIsImFjdGl2aXR5IiwiJHNjcm9sbE9uUGFyZW50IiwicmVmIiwib25TY3JvbGwiLCIkaXNNYXJrZXRwbGFjZUdsb2JhbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTdHJlYW1kb3duIH0gZnJvbSAnc3RyZWFtZG93bidcbmltcG9ydCB7IGNyZWF0ZUNvZGVQbHVnaW4gfSBmcm9tICdAc3RyZWFtZG93bi9jb2RlJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlLCBUYXNrSW5mbyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhU3RyZWFtZG93blJlaHlwZVBsdWdpbnMnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCByZW5kZXJNZW50aW9uTGluaywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgZ2V0QWdlbnREaXNwbGF5TmFtZSwgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBNQUlBSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxuY29uc3QgY29kZSA9IGNyZWF0ZUNvZGVQbHVnaW4oeyB0aGVtZXM6IFsnZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddIH0pXG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhcklubmVyOiBGQyA9ICgpID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50QXZhdGFyPlxuICAgICAge2FnZW50Py50eXBlID09PSAnY2xvbmUnID8gPE1BSUFJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz4gOiBhZ2VudD8uZW1vaml9XG4gICAgPC9TQ0Fzc2lzdGFudEF2YXRhcj5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXIgPSBtZW1vKEFzc2lzdGFudEF2YXRhcklubmVyKVxuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICB9XG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGxcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBvblNlbmRNZXNzYWdlUmVhZHk/OiAoXG4gICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHZvaWQsXG4gICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgaXNXcml0aW5nOiBib29sZWFuXG4gICkgPT4gdm9pZFxuICBpc0Rpc2FibGVkPzogYm9vbGVhblxuICBvblNjcm9sbFRvQm90dG9tPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRNZXNzYWdlSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCBbbG9jYWxBZ2VudCwgc2V0TG9jYWxBZ2VudF0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxBZ2VudChhZ2VudClcbiAgfSwgW2FnZW50XSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgICB7bG9jYWxBZ2VudD8ubmFtZSAmJiA8U0NBc3Npc3RhbnROYW1lPntnZXRBZ2VudERpc3BsYXlOYW1lKGxvY2FsQWdlbnQ/LnR5cGUsIGxvY2FsQWdlbnQ/Lm5hbWUpfTwvU0NBc3Npc3RhbnROYW1lPn1cbiAgICA8L1NDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgKVxufVxuXG4vLyBFeHRyYWUgZWwgc2VnbWVudG8gZGUgdGFiIChkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSBkZWwgaHJlZiBwYXJhIGFicmlyIGVsIG1vZGFsIGNvbiBlbCB0YWIgY29ycmVjdG9cbmNvbnN0IGdldFRhYlNlZ21lbnRGcm9tSHJlZiA9IChocmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBtYXRjaCA9IGhyZWYubWF0Y2goL1xcL3Rhc2tzXFwvXFxkK1xcLyhbXi8/XSspLylcbiAgcmV0dXJuIG1hdGNoICYmIC9eKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpJC8udGVzdChtYXRjaFsxXSkgPyBtYXRjaFsxXSA6ICdkZXRhaWwnXG59XG5cbi8qKiBFeHRyYWUgbGFzIHRhcmVhcyBlbmxhemFkYXMgZW4gZWwgdGV4dG8gKFVSTHMgcXVlIGNvaW5jaWRlbiBjb24gVEFTS19VUkxfUkVHRVhfUEFUVEVSTikuICovXG5jb25zdCBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBUYXNrSW5mb1tdID0+IHtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4gW11cbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIGNvbnN0IHRhc2tzOiBUYXNrSW5mb1tdID0gW11cbiAgY29uc3Qgc2VlbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IG51bGxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gIHdoaWxlICgobWF0Y2ggPSB0YXNrVXJsUmVnZXguZXhlYyhtZXNzYWdlKSkgIT09IG51bGwpIHtcbiAgICBjb25zdCB0YXNrSWQgPSBtYXRjaFsxXVxuICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdXG4gICAgaWYgKCFzZWVuSWRzLmhhcyh0YXNrSWQpKSB7XG4gICAgICBzZWVuSWRzLmFkZCh0YXNrSWQpXG4gICAgICBjb25zdCBlc2NhcGVkVXJsID0gdXJsLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbiAgICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXFsoW15cXFxcXV0rKVxcXFxdXFxcXCgke2VzY2FwZWRVcmx9XFxcXClgKVxuICAgICAgY29uc3QgbGlua01hdGNoID0gbWVzc2FnZS5tYXRjaChtYXJrZG93bkxpbmtSZWdleClcbiAgICAgIGNvbnN0IHRpdGxlID0gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogYFRhcmVhICMke3Rhc2tJZH1gXG4gICAgICB0YXNrcy5wdXNoKHsgaWQ6IHRhc2tJZCwgdGl0bGUsIHVybCB9KVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFza3Ncbn1cblxuY29uc3QgaGFzVGFza0xpbmtzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UodGV4dCkubGVuZ3RoID4gMFxuXG5jb25zdCBUQVNLX01FTlRJT05fTUFSS0VSX1JFID0gL1xcW1xcW21lbnRpb246dGFzazovaVxuY29uc3QgTUFJQV9UQVNLX01FTlRJT05fSFJFRl9SRSA9IC9tYWlhLW1lbnRpb246XFwvXFwvdGFza1xcLy9pXG5cbi8qKiBVUkxzIGRlIHRhcmVhIGVuIG1hcmtkb3duICsgbWFyY2Fkb3JlcyBbW21lbnRpb246dGFzazrigKZdXSArIGxpbmtzIG1haWEtbWVudGlvbiAobWlzbW8gYXNwZWN0byBxdWUgZW5sYWNlcyBkZWwgYWdlbnRlKS4gKi9cbmNvbnN0IGhhc1Rhc2tMaW5rc09yVGFza01lbnRpb25zID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgaGFzVGFza0xpbmtzKHRleHQpIHx8IFRBU0tfTUVOVElPTl9NQVJLRVJfUkUudGVzdCh0ZXh0KSB8fCBNQUlBX1RBU0tfTUVOVElPTl9IUkVGX1JFLnRlc3QodGV4dClcblxuLy8gQ29tcG9uZW50IGZvciB0YXNrIGxpbmtzIHRoYXQgdXNlcyB0aGUgdXNlVGFza1BhbmVsIGhvb2tcbmNvbnN0IFRhc2tMaW5rOiBGQzx7IGhyZWY6IHN0cmluZzsgdGFza0lkOiBzdHJpbmc7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfT4gPSAoeyBocmVmLCB0YXNrSWQsIGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgdGFiU2VnbWVudCA9IGdldFRhYlNlZ21lbnRGcm9tSHJlZihocmVmKVxuICBjb25zdCB7IGJ1aWxkT3BlblRhc2sgfSA9IHVzZVRhc2tQYW5lbCh0YXNrSWQsIHRhYlNlZ21lbnQpXG4gIGNvbnN0IG9wZW5UYXNrID0gYnVpbGRPcGVuVGFzaygpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQW5jaG9yRWxlbWVudD4pID0+IHtcbiAgICAvLyBTaSBlcyBDbWQvQ3RybCArIGNsaWNrLCBkZWphciBxdWUgc2UgYWJyYSBlbiBudWV2YSBwZXN0YcOxYSAoY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8pXG4gICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrKClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDVGFza0xpbmsgaHJlZj17aHJlZn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU0NUYXNrTGluaz5cbiAgKVxufVxuXG4vLyBDdXN0b20gbGluayBjb21wb25lbnQgZm9yIFN0cmVhbWRvd246IHRhc2sgVVJMcyBvcGVuIHRoZSB0YXNrIHBhbmVsLCBvdGhlciBsaW5rcyByZW5kZXIgbm9ybWFsbHlcbnR5cGUgQ3VzdG9tTGlua1Byb3BzID0gUmVhY3QuQW5jaG9ySFRNTEF0dHJpYnV0ZXM8SFRNTEFuY2hvckVsZW1lbnQ+ICYgeyBub2RlPzogdW5rbm93biB9XG5jb25zdCBDdXN0b21MaW5rOiBGQzxDdXN0b21MaW5rUHJvcHM+ID0gKHsgaHJlZiwgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICBpZiAoIWhyZWYgfHwgdHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxhIGhyZWY9e2hyZWZ9IHsuLi5yZXN0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9hPlxuICAgIClcbiAgfVxuICBjb25zdCBtZW50aW9uTm9kZSA9IHJlbmRlck1lbnRpb25MaW5rKGhyZWYsIGNoaWxkcmVuKVxuICBpZiAobWVudGlvbk5vZGUpIHJldHVybiBtZW50aW9uTm9kZSBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblxuICBjb25zdCB0YXNrTWF0Y2ggPSBocmVmLm1hdGNoKG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTikpXG4gIGlmICh0YXNrTWF0Y2gpIHtcbiAgICBjb25zdCB0YXNrSWQgPSB0YXNrTWF0Y2hbMV1cbiAgICByZXR1cm4gKFxuICAgICAgPFRhc2tMaW5rIGhyZWY9e2hyZWZ9IHRhc2tJZD17dGFza0lkfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9UYXNrTGluaz5cbiAgICApXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9hPlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtoYXNUYXNrTGlua3NPclRhc2tNZW50aW9ucyhkaXNwbGF5VGV4dCkgPyAnaGFzLXRhc2stbGlua3MnIDogJyd9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgICAgcGx1Z2lucz17eyBjb2RlIH19XG4gICAgICAgICAgICAgIHJlaHlwZVBsdWdpbnM9e01BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOU31cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgbGlua1NhZmV0eT17eyBlbmFibGVkOiBmYWxzZSB9fVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgLy8gTWllbnRyYXMgZWwgYWdlbnRlIFwicGllbnNhXCIgKHN0cmVhbWluZyBzaW4gdGV4dG8gYcO6bikgb2N1bHRhbW9zIGVsIGhlYWRlci5cbiAgLy8gRW4gY3VhbnRvIGVtcGllemEgYSBlc2NyaWJpciwgZWwgYXZhdGFyIHkgZWwgbm9tYnJlIHZ1ZWx2ZW4gYSBtb3N0cmFyc2UuXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nID8gaWQgOiBudWxsKVxuICBjb25zdCBpc1RoaW5raW5nID0gISFpc1N0cmVhbWluZyAmJiAhc3RyZWFtaW5nVGV4dFxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICB7aXNBc3Npc3RhbnQgJiYgIWlzVGhpbmtpbmcgJiYgPEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgLz59XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAge2lzQXNzaXN0YW50ICYmICFpc1RoaW5raW5nICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNTdHJlYW1pbmcpICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9eyEhaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG4gICAgICBzZW5kTWVzc2FnZShzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlLCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBldmVudCwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/Lm5hbWUsIGFnZW50Py50eXBlXVxuICApXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBlc3RhZG8gZGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiBjb21wYXJhbmRvIGxhIHBvc2ljacOzblxuICAgKiBhY3R1YWwgZGVsIHNjcm9sbCBjb24gZWwgZm9uZG8uIFVzYSB1biByZWYgcGFyYSBldml0YXIgYHNldFN0YXRlYCBjdWFuZG9cbiAgICogZWwgdmFsb3Igbm8gY2FtYmlhLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBSZXNwZXRhIGBza2lwSWZVc2VyU2Nyb2xsaW5nYCBwYXJhXG4gICAqIG5vIHNvYnJlc2NyaWJpciBlbCBzY3JvbGwgbWFudWFsIGRlbCB1c3VhcmlvIGR1cmFudGUgZWwgc3RyZWFtaW5nLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBza2lwSWZVc2VyU2Nyb2xsaW5nPzogYm9vbGVhbjsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpcElmVXNlclNjcm9sbGluZyA9IGZhbHNlLCBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGlmIChza2lwSWZVc2VyU2Nyb2xsaW5nICYmIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUbyh7XG4gICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pXG4gICAgLy8gRGFyIHRpZW1wbyBhbCBzbW9vdGgtc2Nyb2xsIGFudGVzIGRlIHJlY2FsY3VsYXIgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi5cbiAgICBzZXRUaW1lb3V0KHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHksIDUwMClcbiAgfSwgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGRlY2lkaXIgZW4gZWwgQXBwcm92YWxCb3g6IGVsIGJveCBjb2xhcHNhIChib3RvbmVzIC0+IGJhZGdlKSB5IGVsIHN0cmVhbVxuICAvLyBjb250aW7DumEgYWJham8uIFJlYWN0aXZhciBlbCBhdXRvLXNjcm9sbCB5IHNlZ3VpciBlbCBmb25kbyBwYXJhIHF1ZSBsYSB2aXN0YVxuICAvLyBubyBxdWVkZSBhdHLDoXMgKGV2aXRhIHF1ZSBhcGFyZXpjYSBsYSBmbGVjaGEgZGUgc2Nyb2xsLXRvLWJvdHRvbSkuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24+KSA9PiB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiguLi5hcmdzKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICB9LFxuICAgIFtoYW5kbGVBcHByb3ZhbERlY2lzaW9uLCBzY3JvbGxUb0JvdHRvbVJhZl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQsIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgIGxldCBsYXN0SGVpZ2h0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgY29tZW56YXIgYSBlc3BlcmFyIGxhIHJlc3B1ZXN0YSBkZWwgYmFja2VuZCwgc2Nyb2xsIGluaWNpYWwgYWwgZm9uZG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IHNraXBJZlVzZXJTY3JvbGxpbmc6IHRydWUgfSlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gbGFzdElkICE9PSBwcmV2SWQgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSBwcmV2TGVuXG4gICAgaWYgKCFpc05ld01lc3NhZ2UpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIEFwcHJvdmFsOiBzZWN1ZW5jaWEgZGUgc2Nyb2xscyBjb24gZGVsYXkgcG9ycXVlIGVsIEFwcHJvdmFsQm94IG5lY2VzaXRhXG4gICAgLy8gdW4gdGljayBwYXJhIG1lZGlyc2UuIFNjcm9sbGVhIGF1bnF1ZSBlbCB1c3VhcmlvIG5vIGVzdMOpIGFsIGZvbmRvIHNpIG5vXG4gICAgLy8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUuXG4gICAgaWYgKGlzQXBwcm92YWwgJiYgKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBFc3RhZG8gaW5pY2lhbCBkZWwgYm90w7NuIHNjcm9sbC10by1ib3R0b20gYWwgdGVybWluYXIgbG9hZGluZ01lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA6IDApIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDApXG5cbiAgY29uc3Qgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkoe1xuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzOiBhY3RpdmVMb2FkaW5ncyB8fCB7fSxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzQ291bnQpLFxuICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgdCxcbiAgfSlcblxuICBjb25zdCBpc1Njcm9sbE9uUGFyZW50ID0gISFleHBhbmRlZFxuICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcblxuICAvLyBBbCBleHBhbmRpci9jb250cmFlciBlbCBtb2RhbCBlbCByZWYgcGFzYSBhIG90cm8gY29udGVuZWRvciAoc2Nyb2xsVG9wIHNlIHJlc2V0ZWEgYSAwKS5cbiAgLy8gUmVzdGF1cmFyIGxhIHBvc2ljacOzbiBkZSBzY3JvbGwgYW50ZXMgZGVsIHBhaW50IHBhcmEgZXZpdGFyIHF1ZSBsYSBjb252ZXJzYWNpw7NuIHNhbHRlIGFycmliYS5cbiAgY29uc3QgZXhwYW5kZWRSZWYgPSB1c2VSZWYoZXhwYW5kZWQpXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV4cGFuZGVkUmVmLmN1cnJlbnQgIT09IGV4cGFuZGVkICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfVxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiZcbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2UgJiZcbiAgICAgICAgICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSAmJlxuICAgICAgICAgICAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtZXNzYWdlLmlkKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbH1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHtzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH0+XG4gICAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyXG4gICAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgICBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219XG4gICAgICAgICAgJHNjcm9sbE9uUGFyZW50PXtmYWxzZX1cbiAgICAgICAgICAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fVxuICAgICAgICA+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFDN0csU0FBU0MsVUFBVSxRQUFRLFlBQVk7QUFDdkMsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ25ELFNBQVNDLGNBQWMsUUFBUSxpREFBaUQ7QUFFaEYsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFFcEYsU0FBc0JDLGVBQWUsUUFBa0IscUJBQXFCO0FBQzVFLFNBQVNDLDhCQUE4QixRQUFRLDRDQUE0QztBQUMzRixTQUFTQyxzQkFBc0IsRUFBRUMsaUJBQWlCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUVsSCxTQUFTQyxtQkFBbUIsRUFBRUMsY0FBYyxRQUFRLGlDQUFpQztBQUNyRixTQUFrQkMsT0FBTyxRQUFRLDJCQUEyQjtBQUU1RCxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGNBQWMsUUFBUSw4Q0FBOEM7QUFDN0UsU0FBU0MsWUFBWSxRQUFRLDZCQUE2QjtBQUMxRCxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsU0FBU0MsbUJBQW1C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
|