@projectcor/maia-components 2.11.9-5 → 2.11.9-6
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/ApprovalBox/ApprovalBox.js +2 -5
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +12 -15
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +5 -20
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +69 -0
- package/lib/components/atoms/ChatClientSelector/index.js +2 -0
- package/lib/components/atoms/Chip/Chip.js +4 -3
- package/lib/components/atoms/Chip/styles.js +2 -2
- package/lib/components/atoms/EntitySelector/EntitySelector.js +181 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +57 -0
- package/lib/components/atoms/EntitySelector/index.js +2 -0
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +5 -3
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -3
- package/lib/components/atoms/MAIAInput/MAIAInput.js +12 -35
- package/lib/components/atoms/MAIAInput/styles.js +39 -38
- package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +1 -1
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +6 -23
- package/lib/components/atoms/ProjectSelector/ProjectSelector.js +56 -193
- package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +2 -2
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +56 -0
- package/lib/components/molecules/ChatAIClientSelector/index.js +2 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +10 -3
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +2 -3
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +2 -3
- package/lib/components/molecules/ChatAIHome/styles.js +6 -6
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +239 -176
- package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -118
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +18 -6
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +6 -4
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +4 -4
- package/lib/components/molecules/ChatAIModal/constants.js +6 -2
- package/lib/components/molecules/ChatFooter/ChatFooter.js +7 -4
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +2 -3
- package/lib/components/molecules/Sidebar/Sidebar.js +3 -4
- package/lib/components/organisms/ChatAI/ChatAI.js +11 -5
- package/lib/components/organisms/ClientAIButton/ClientAIButton.js +26 -0
- package/lib/components/organisms/ClientAIButton/index.js +2 -0
- package/lib/constants/config.js +3 -2
- package/lib/context/global-context.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +49 -19
- package/lib/hooks/useChatMessages/useChatMessages.js +72 -38
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/hooks/useProjectSummaryConfig.js +35 -7
- package/lib/hooks/useRecentClientsSearch.js +176 -0
- package/lib/index.css +15 -297
- package/lib/lang/br/index.js +25 -2
- package/lib/lang/en/index.js +25 -2
- package/lib/lang/es/index.js +25 -2
- package/lib/lang/fr/index.js +21 -2
- package/lib/services/maia/Agents/getAgents.js +6 -4
- package/lib/services/maia/Chats/getChatMessages.js +27 -14
- package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
- package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
- package/lib/services/maia/RecentClients/getRecentClients.js +43 -0
- package/lib/services/maia/RecentClients/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/mapChatMessages.js +12 -4
- package/lib/store/chatsStore.types.js +1 -1
- package/lib/types/Chat.js +1 -1
- package/lib/types/Client.js +2 -0
- package/lib/types/agent.js +1 -1
- package/package.json +16 -24
- package/lib/hooks/useStreamdownStyles.js +0 -20
- package/lib/streamdownStyles.js +0 -6
|
@@ -3,10 +3,9 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
|
|
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
4
|
var _excluded = ["isCurrentUser", "children"],
|
|
5
5
|
_excluded2 = ["isCurrentUser"],
|
|
6
|
-
_excluded3 = ["
|
|
6
|
+
_excluded3 = ["src", "alt"];
|
|
7
7
|
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; }
|
|
8
8
|
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; }
|
|
9
|
-
/* eslint-disable import/no-extraneous-dependencies */
|
|
10
9
|
/* eslint-disable @typescript-eslint/indent */
|
|
11
10
|
/* eslint-disable react/no-unstable-nested-components */
|
|
12
11
|
/* eslint-disable @typescript-eslint/no-shadow */
|
|
@@ -18,10 +17,9 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
18
17
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
19
18
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
20
19
|
import React, { memo, useEffect, useRef, useState, useCallback, createElement as _createElement } from 'react';
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import '
|
|
24
|
-
import { createCodePlugin } from '@streamdown/code';
|
|
20
|
+
import Markdown from 'react-markdown';
|
|
21
|
+
import remarkGfm from 'remark-gfm';
|
|
22
|
+
import { UserAvatar } from '@projectcor/user-avatar/lib';
|
|
25
23
|
import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
|
|
26
24
|
import { AttachmentCard } from '../../atoms/AttachmentCard/AttachmentCard';
|
|
27
25
|
import { ApprovalBox } from '../../atoms/ApprovalBox/ApprovalBox';
|
|
@@ -34,20 +32,15 @@ import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
|
34
32
|
import { useTaskPanel } from '../../../hooks/useTaskPanel';
|
|
35
33
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
36
34
|
import { Loader } from '../../atoms/Loader';
|
|
35
|
+
import { GLOBAL_COLORS } from '../../../styles/config';
|
|
37
36
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
38
37
|
import { MessageFeedback } from '../MessageFeedback';
|
|
39
|
-
import { SCCAIMessageWrapper, ScrollToBottomButton
|
|
38
|
+
import { SCCAIMessageWrapper, ScrollToBottomButton } from './newStyles';
|
|
40
39
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
41
40
|
import { useGlobalContext } from '../../../context/global-context';
|
|
42
41
|
import { MAIAIsologo } from '../../atoms/icons';
|
|
43
42
|
import { TASK_URL_REGEX_PATTERN } from '../../../constants/taskUrls';
|
|
44
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
45
|
-
var math = createMathPlugin({
|
|
46
|
-
singleDollarTextMath: true
|
|
47
|
-
});
|
|
48
|
-
var code = createCodePlugin({
|
|
49
|
-
themes: ['github-light', 'github-light']
|
|
50
|
-
});
|
|
43
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
51
44
|
var AssistantAvatar = function AssistantAvatar() {
|
|
52
45
|
var _useState = useState(null),
|
|
53
46
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -58,10 +51,19 @@ var AssistantAvatar = function AssistantAvatar() {
|
|
|
58
51
|
useEffect(function () {
|
|
59
52
|
setLocalAgent(agent);
|
|
60
53
|
}, [agent]);
|
|
61
|
-
return /*#__PURE__*/_jsx(
|
|
54
|
+
return /*#__PURE__*/_jsx("div", {
|
|
55
|
+
style: {
|
|
56
|
+
width: '40px',
|
|
57
|
+
height: '40px',
|
|
58
|
+
fontSize: '36px',
|
|
59
|
+
display: 'flex',
|
|
60
|
+
alignItems: 'center',
|
|
61
|
+
justifyContent: 'center',
|
|
62
|
+
cursor: 'default'
|
|
63
|
+
},
|
|
62
64
|
children: (localAgent === null || localAgent === void 0 ? void 0 : localAgent.type) === 'clone' ? /*#__PURE__*/_jsx(MAIAIsologo, {
|
|
63
|
-
width:
|
|
64
|
-
height:
|
|
65
|
+
width: 38,
|
|
66
|
+
height: 38
|
|
65
67
|
}) : localAgent === null || localAgent === void 0 ? void 0 : localAgent.emoji
|
|
66
68
|
});
|
|
67
69
|
};
|
|
@@ -92,11 +94,21 @@ function MessageOptions(_ref3) {
|
|
|
92
94
|
setSelectedOption(option);
|
|
93
95
|
handleSelectOption(option);
|
|
94
96
|
};
|
|
95
|
-
return /*#__PURE__*/_jsx(
|
|
97
|
+
return /*#__PURE__*/_jsx("div", {
|
|
98
|
+
style: {
|
|
99
|
+
display: 'flex',
|
|
100
|
+
gap: '12px',
|
|
101
|
+
flexDirection: 'column'
|
|
102
|
+
},
|
|
96
103
|
children: (options || []).map(function (option) {
|
|
97
|
-
return /*#__PURE__*/_jsx(
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
return /*#__PURE__*/_jsx("div", {
|
|
105
|
+
style: {
|
|
106
|
+
color: GLOBAL_COLORS.dark,
|
|
107
|
+
fontSize: '14px',
|
|
108
|
+
lineHeight: '140%',
|
|
109
|
+
cursor: "".concat(selectedOption ? 'not-allowed' : 'pointer'),
|
|
110
|
+
opacity: "".concat(selectedOption && (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.id) !== option.id ? 0.5 : 1)
|
|
111
|
+
},
|
|
100
112
|
onClick: function onClick() {
|
|
101
113
|
return handleSelect(option);
|
|
102
114
|
},
|
|
@@ -105,34 +117,32 @@ function MessageOptions(_ref3) {
|
|
|
105
117
|
})
|
|
106
118
|
});
|
|
107
119
|
}
|
|
108
|
-
var
|
|
109
|
-
var
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
.replace(/\\\(([\s\S]*?)\\\)/g, function (_match, p1) {
|
|
135
|
-
return "$".concat(p1, "$");
|
|
120
|
+
var AvatarByUserType = function AvatarByUserType(_ref4) {
|
|
121
|
+
var type = _ref4.type,
|
|
122
|
+
data = _ref4.data,
|
|
123
|
+
authUser = _ref4.authUser;
|
|
124
|
+
if (type === 'user') {
|
|
125
|
+
if (data.avatarIcon) {
|
|
126
|
+
return data.avatarIcon;
|
|
127
|
+
}
|
|
128
|
+
return /*#__PURE__*/_jsx(UserAvatar, {
|
|
129
|
+
withUserCapacity: false,
|
|
130
|
+
picture: authUser === null || authUser === void 0 ? void 0 : authUser.picture,
|
|
131
|
+
showTootltip: true,
|
|
132
|
+
place: "top",
|
|
133
|
+
firstName: authUser === null || authUser === void 0 ? void 0 : authUser.firstName,
|
|
134
|
+
lastName: authUser === null || authUser === void 0 ? void 0 : authUser.lastName,
|
|
135
|
+
withCapacity: false,
|
|
136
|
+
size: "large"
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return /*#__PURE__*/_jsx("div", {
|
|
140
|
+
style: {
|
|
141
|
+
position: 'sticky',
|
|
142
|
+
top: 0,
|
|
143
|
+
height: 'fit-content'
|
|
144
|
+
},
|
|
145
|
+
children: /*#__PURE__*/_jsx(AssistantAvatar, {})
|
|
136
146
|
});
|
|
137
147
|
};
|
|
138
148
|
|
|
@@ -143,10 +153,10 @@ var getTabSegmentFromHref = function getTabSegmentFromHref(href) {
|
|
|
143
153
|
};
|
|
144
154
|
|
|
145
155
|
// Component for task links that uses the useTaskPanel hook
|
|
146
|
-
var TaskLink = function TaskLink(
|
|
147
|
-
var href =
|
|
148
|
-
taskId =
|
|
149
|
-
children =
|
|
156
|
+
var TaskLink = function TaskLink(_ref5) {
|
|
157
|
+
var href = _ref5.href,
|
|
158
|
+
taskId = _ref5.taskId,
|
|
159
|
+
children = _ref5.children;
|
|
150
160
|
var tabSegment = getTabSegmentFromHref(href);
|
|
151
161
|
var _useTaskPanel = useTaskPanel(taskId, tabSegment),
|
|
152
162
|
buildOpenTask = _useTaskPanel.buildOpenTask;
|
|
@@ -159,41 +169,17 @@ var TaskLink = function TaskLink(_ref4) {
|
|
|
159
169
|
e.preventDefault();
|
|
160
170
|
openTask();
|
|
161
171
|
};
|
|
162
|
-
return /*#__PURE__*/_jsx(
|
|
172
|
+
return /*#__PURE__*/_jsx("a", {
|
|
163
173
|
href: href,
|
|
164
174
|
onClick: handleClick,
|
|
175
|
+
style: {
|
|
176
|
+
textDecoration: 'underline !important',
|
|
177
|
+
color: '#337ab7 !important',
|
|
178
|
+
cursor: 'pointer'
|
|
179
|
+
},
|
|
165
180
|
children: children
|
|
166
181
|
});
|
|
167
182
|
};
|
|
168
|
-
|
|
169
|
-
// Custom link component for Streamdown: task URLs open the task panel, other links render normally
|
|
170
|
-
|
|
171
|
-
var CustomLink = function CustomLink(_ref5) {
|
|
172
|
-
var href = _ref5.href,
|
|
173
|
-
children = _ref5.children,
|
|
174
|
-
rest = _objectWithoutProperties(_ref5, _excluded3);
|
|
175
|
-
if (!href || typeof href !== 'string') {
|
|
176
|
-
return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
|
|
177
|
-
href: href
|
|
178
|
-
}, rest), {}, {
|
|
179
|
-
children: children
|
|
180
|
-
}));
|
|
181
|
-
}
|
|
182
|
-
var taskMatch = href.match(new RegExp(TASK_URL_REGEX_PATTERN));
|
|
183
|
-
if (taskMatch) {
|
|
184
|
-
var taskId = taskMatch[1];
|
|
185
|
-
return /*#__PURE__*/_jsx(TaskLink, {
|
|
186
|
-
href: href,
|
|
187
|
-
taskId: taskId,
|
|
188
|
-
children: children
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
|
|
192
|
-
href: href
|
|
193
|
-
}, rest), {}, {
|
|
194
|
-
children: children
|
|
195
|
-
}));
|
|
196
|
-
};
|
|
197
183
|
var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
198
184
|
var _ref6, _ref7;
|
|
199
185
|
var id = props.id,
|
|
@@ -240,10 +226,18 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
240
226
|
}
|
|
241
227
|
return tasks;
|
|
242
228
|
};
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
229
|
+
|
|
230
|
+
// Helper function to extract taskId from a URL
|
|
231
|
+
var extractTaskIdFromUrl = function extractTaskIdFromUrl(url) {
|
|
232
|
+
if (!url) return null;
|
|
233
|
+
var taskUrlRegex = /\/tasks\/(\d+)\/(detail|message|messages|files|history|hours)/;
|
|
234
|
+
var match = url.match(taskUrlRegex);
|
|
235
|
+
return match ? match[1] : null;
|
|
236
|
+
};
|
|
237
|
+
var _useState5 = useState(null),
|
|
238
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
239
|
+
previewAttachment = _useState6[0],
|
|
240
|
+
setPreviewAttachment = _useState6[1];
|
|
247
241
|
var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
|
|
248
242
|
var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
|
|
249
243
|
var handleAttachmentClick = function handleAttachmentClick(attachment) {
|
|
@@ -260,9 +254,20 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
260
254
|
isCurrentUser: isCurrentUser,
|
|
261
255
|
"data-message-id": id,
|
|
262
256
|
hasFeedback: false,
|
|
263
|
-
children: /*#__PURE__*/_jsxs(
|
|
264
|
-
|
|
265
|
-
|
|
257
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
258
|
+
style: _objectSpread({
|
|
259
|
+
display: 'flex',
|
|
260
|
+
position: 'relative',
|
|
261
|
+
gap: '8px',
|
|
262
|
+
flexDirection: isCurrentUser ? 'row-reverse' : 'row'
|
|
263
|
+
}, isAssistant && {
|
|
264
|
+
justifyContent: 'start'
|
|
265
|
+
}),
|
|
266
|
+
children: [/*#__PURE__*/_jsx(AvatarByUserType, {
|
|
267
|
+
type: isAssistant ? 'assistant' : 'user',
|
|
268
|
+
data: user,
|
|
269
|
+
authUser: authUser
|
|
270
|
+
}), /*#__PURE__*/_jsx(MessageContentWrapper, {
|
|
266
271
|
isChangeProject: isChangeProject,
|
|
267
272
|
message: message,
|
|
268
273
|
isCurrentUser: isCurrentUser,
|
|
@@ -281,10 +286,32 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
281
286
|
}).join('-');
|
|
282
287
|
handleFeedback === null || handleFeedback === void 0 || handleFeedback(feedback, sessionId);
|
|
283
288
|
};
|
|
284
|
-
return /*#__PURE__*/_jsxs(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
289
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
290
|
+
style: _objectSpread({
|
|
291
|
+
position: 'relative',
|
|
292
|
+
display: 'flex',
|
|
293
|
+
gap: '8px',
|
|
294
|
+
flexDirection: isCurrentUser ? 'row-reverse' : 'row'
|
|
295
|
+
}, isAssistant && {
|
|
296
|
+
justifyContent: 'start'
|
|
297
|
+
}),
|
|
298
|
+
children: [/*#__PURE__*/_jsx(AvatarByUserType, {
|
|
299
|
+
type: isAssistant ? 'assistant' : 'user',
|
|
300
|
+
data: user,
|
|
301
|
+
authUser: authUser
|
|
302
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
303
|
+
style: {
|
|
304
|
+
display: 'flex',
|
|
305
|
+
flexDirection: 'column',
|
|
306
|
+
gap: '8px'
|
|
307
|
+
},
|
|
308
|
+
children: [!!((_ref6 = attachments || sources) !== null && _ref6 !== void 0 && _ref6.length) && !isAssistant && /*#__PURE__*/_jsx("div", {
|
|
309
|
+
style: {
|
|
310
|
+
display: 'flex',
|
|
311
|
+
justifyContent: 'flex-end',
|
|
312
|
+
gap: '12px',
|
|
313
|
+
flexWrap: 'wrap'
|
|
314
|
+
},
|
|
288
315
|
children: (_ref7 = attachments || sources) === null || _ref7 === void 0 ? void 0 : _ref7.map(function (attachment, index) {
|
|
289
316
|
var _attachment$type, _attachment$name;
|
|
290
317
|
// Detectar si es un archivo de audio
|
|
@@ -306,7 +333,12 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
306
333
|
}
|
|
307
334
|
}, "".concat(attachment.id, "-").concat(attachment.name));
|
|
308
335
|
})
|
|
309
|
-
}), approval && approval.pending_actions && /*#__PURE__*/_jsx(
|
|
336
|
+
}), approval && approval.pending_actions && /*#__PURE__*/_jsx("div", {
|
|
337
|
+
style: {
|
|
338
|
+
display: 'flex',
|
|
339
|
+
flexDirection: 'column',
|
|
340
|
+
gap: '12px'
|
|
341
|
+
},
|
|
310
342
|
children: approval.pending_actions.map(function (action) {
|
|
311
343
|
var _props$projectMetadat;
|
|
312
344
|
return /*#__PURE__*/_jsx(ApprovalBox, {
|
|
@@ -318,8 +350,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
318
350
|
onReject: function onReject(threadId) {
|
|
319
351
|
return handleApprovalDecision(threadId, 'reject');
|
|
320
352
|
},
|
|
321
|
-
isProjectDeleted: ((_props$projectMetadat = props.projectMetadata) === null || _props$projectMetadat === void 0 ? void 0 : _props$projectMetadat.is_deleted) === true
|
|
322
|
-
isExpanded: props.expanded
|
|
353
|
+
isProjectDeleted: ((_props$projectMetadat = props.projectMetadata) === null || _props$projectMetadat === void 0 ? void 0 : _props$projectMetadat.is_deleted) === true
|
|
323
354
|
}, "".concat(action.thread_id, "-").concat(action.tool_call_id));
|
|
324
355
|
})
|
|
325
356
|
}), !!message &&
|
|
@@ -329,24 +360,55 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
329
360
|
isCurrentUser: isCurrentUser,
|
|
330
361
|
isFrontendCancelled: props.isFrontendCancelled,
|
|
331
362
|
className: isAssistant && extractTasksFromMessage(message).length > 0 ? 'has-task-links' : '',
|
|
332
|
-
children: /*#__PURE__*/_jsx(
|
|
333
|
-
|
|
334
|
-
math: math,
|
|
335
|
-
code: code
|
|
336
|
-
},
|
|
363
|
+
children: /*#__PURE__*/_jsx(Markdown, {
|
|
364
|
+
remarkPlugins: [remarkGfm],
|
|
337
365
|
components: {
|
|
338
|
-
a:
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
366
|
+
a: function a(_ref8) {
|
|
367
|
+
var href = _ref8.href,
|
|
368
|
+
children = _ref8.children;
|
|
369
|
+
var taskId = extractTaskIdFromUrl(href || '');
|
|
370
|
+
var isTaskLink = taskId !== null;
|
|
371
|
+
|
|
372
|
+
// Si es un enlace de tarea, usar el componente TaskLink que maneja el hook
|
|
373
|
+
if (isTaskLink && taskId) {
|
|
374
|
+
return /*#__PURE__*/_jsx(TaskLink, {
|
|
375
|
+
href: href || '',
|
|
376
|
+
taskId: taskId,
|
|
377
|
+
children: children
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Para enlaces normales, comportamiento estándar
|
|
382
|
+
return /*#__PURE__*/_jsx("a", {
|
|
383
|
+
href: href,
|
|
384
|
+
target: "_blank",
|
|
385
|
+
rel: "noopener noreferrer",
|
|
386
|
+
style: {
|
|
387
|
+
textDecoration: 'underline !important',
|
|
388
|
+
color: '#337ab7 !important'
|
|
389
|
+
},
|
|
390
|
+
children: children
|
|
391
|
+
});
|
|
392
|
+
},
|
|
393
|
+
img: function img(_ref9) {
|
|
394
|
+
var src = _ref9.src,
|
|
395
|
+
alt = _ref9.alt,
|
|
396
|
+
props = _objectWithoutProperties(_ref9, _excluded3);
|
|
397
|
+
return /*#__PURE__*/_jsx("img", _objectSpread(_objectSpread({
|
|
398
|
+
src: src,
|
|
399
|
+
alt: alt
|
|
400
|
+
}, props), {}, {
|
|
401
|
+
style: {
|
|
402
|
+
maxWidth: '280px',
|
|
403
|
+
height: 'auto',
|
|
404
|
+
display: 'block',
|
|
405
|
+
margin: '8px 0',
|
|
406
|
+
borderRadius: '4px'
|
|
407
|
+
}
|
|
408
|
+
}));
|
|
409
|
+
}
|
|
348
410
|
},
|
|
349
|
-
children:
|
|
411
|
+
children: message
|
|
350
412
|
})
|
|
351
413
|
}), isAssistant && !isError && !props.isFrontendCancelled && !approval && /*#__PURE__*/_jsx(MessageFeedback, {
|
|
352
414
|
content: message,
|
|
@@ -361,20 +423,19 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
361
423
|
})]
|
|
362
424
|
});
|
|
363
425
|
});
|
|
364
|
-
var ChatAIMessagesInner = function ChatAIMessagesInner(
|
|
365
|
-
var userInitialMessage =
|
|
366
|
-
initialChatId =
|
|
367
|
-
onError =
|
|
368
|
-
onSendMessageReady =
|
|
369
|
-
onScrollToBottom =
|
|
370
|
-
attachments =
|
|
371
|
-
agents =
|
|
372
|
-
expanded = _ref8.expanded;
|
|
426
|
+
var ChatAIMessagesInner = function ChatAIMessagesInner(_ref0) {
|
|
427
|
+
var userInitialMessage = _ref0.userInitialMessage,
|
|
428
|
+
initialChatId = _ref0.initialChatId,
|
|
429
|
+
onError = _ref0.onError,
|
|
430
|
+
onSendMessageReady = _ref0.onSendMessageReady,
|
|
431
|
+
onScrollToBottom = _ref0.onScrollToBottom,
|
|
432
|
+
attachments = _ref0.attachments,
|
|
433
|
+
agents = _ref0.agents;
|
|
373
434
|
var _useT = useT(),
|
|
374
435
|
t = _useT.t;
|
|
375
|
-
var
|
|
376
|
-
isWebSearchActive =
|
|
377
|
-
isDeepSearchActive =
|
|
436
|
+
var _useGlobalContext2 = useGlobalContext(),
|
|
437
|
+
isWebSearchActive = _useGlobalContext2.isWebSearchActive,
|
|
438
|
+
isDeepSearchActive = _useGlobalContext2.isDeepSearchActive;
|
|
378
439
|
var authUser = useUser();
|
|
379
440
|
var messagesRef = useRef(null);
|
|
380
441
|
var chatInitializedRef = useRef(false);
|
|
@@ -384,10 +445,10 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
|
|
|
384
445
|
var lastScrollTopRef = useRef(0);
|
|
385
446
|
var showScrollToBottomRef = useRef(false);
|
|
386
447
|
var scrollRafRef = useRef(null);
|
|
387
|
-
var
|
|
388
|
-
|
|
389
|
-
showScrollToBottom =
|
|
390
|
-
setShowScrollToBottom =
|
|
448
|
+
var _useState7 = useState(false),
|
|
449
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
450
|
+
showScrollToBottom = _useState8[0],
|
|
451
|
+
setShowScrollToBottom = _useState8[1];
|
|
391
452
|
var _useChatManager = useChatManager({
|
|
392
453
|
chatId: initialChatId || undefined,
|
|
393
454
|
userInitialMessage: userInitialMessage,
|
|
@@ -623,54 +684,56 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
|
|
|
623
684
|
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
624
685
|
}).at(-1);
|
|
625
686
|
var hasAttachments = Array.isArray(lastUserMessage === null || lastUserMessage === void 0 ? void 0 : lastUserMessage.attachments) && lastUserMessage.attachments.length || Array.isArray(lastUserMessage === null || lastUserMessage === void 0 ? void 0 : lastUserMessage.sources) && lastUserMessage.sources.length;
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
var isLastMessage = index === messages.length - 1;
|
|
636
|
-
var isStreaming = isAssistantMessage && isLastMessage && (waitingResponse || isWriting);
|
|
637
|
-
return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
|
|
638
|
-
key: message.id != null ? "".concat(message.id, "-").concat(message.date) : "msg-".concat(index),
|
|
639
|
-
authUser: authUser,
|
|
640
|
-
handleSelectOption: handleSelectOption,
|
|
641
|
-
handleFeedback: handleFeedback,
|
|
642
|
-
handleApprovalDecision: handleApprovalDecision,
|
|
643
|
-
disableFeedback: messageFeedback,
|
|
644
|
-
isStreaming: isStreaming,
|
|
645
|
-
expanded: expanded
|
|
646
|
-
}));
|
|
647
|
-
}), (waitingResponse || loadingMessage || Object.keys(activeLoadings || {}).length > 0) && /*#__PURE__*/_jsxs(SCLoadingMessagesColumn, {
|
|
648
|
-
children: [(waitingResponse || loadingMessage) && /*#__PURE__*/_jsx(LoadingText, {
|
|
649
|
-
text: loadingMessage || (isWebSearchActive ? 'Buscando en la web' : isDeepSearchActive ? t('chat.generatingDeepSearch') : hasAttachments ? t('chat.generatingAttachment') : t('chat.generating'))
|
|
650
|
-
}), Object.entries(activeLoadings || {}).map(function (_ref9) {
|
|
651
|
-
var _ref0 = _slicedToArray(_ref9, 2),
|
|
652
|
-
threadId = _ref0[0],
|
|
653
|
-
message = _ref0[1];
|
|
654
|
-
return /*#__PURE__*/_jsx(LoadingText, {
|
|
655
|
-
text: message
|
|
656
|
-
}, "loading-".concat(threadId));
|
|
657
|
-
})]
|
|
658
|
-
})]
|
|
659
|
-
});
|
|
660
|
-
return /*#__PURE__*/_jsxs(SCMessagesOuter, {
|
|
661
|
-
$scrollOnParent: isScrollOnParent,
|
|
662
|
-
children: [isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
|
|
687
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
688
|
+
style: {
|
|
689
|
+
display: 'flex',
|
|
690
|
+
flexGrow: 1,
|
|
691
|
+
justifyContent: 'center',
|
|
692
|
+
overflow: 'auto',
|
|
693
|
+
position: 'relative'
|
|
694
|
+
},
|
|
695
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
663
696
|
ref: messagesRef,
|
|
664
697
|
onScroll: handleScrollToBottom,
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
698
|
+
style: {
|
|
699
|
+
flexGrow: 1,
|
|
700
|
+
overflowY: 'auto',
|
|
701
|
+
display: 'flex',
|
|
702
|
+
flexDirection: 'column',
|
|
703
|
+
gap: '36px',
|
|
704
|
+
padding: '0px 16px',
|
|
705
|
+
maxWidth: '864px'
|
|
706
|
+
},
|
|
707
|
+
children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
|
|
708
|
+
text: t('chat.loadingMore')
|
|
709
|
+
}), messages.map(function (message, index) {
|
|
710
|
+
var _message$attachments, _message$sources, _message$project;
|
|
711
|
+
if (!((_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;
|
|
712
|
+
var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
|
|
713
|
+
return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
|
|
714
|
+
key: message.id != null ? "".concat(message.id, "-").concat(message.date) : "msg-".concat(index),
|
|
715
|
+
authUser: authUser,
|
|
716
|
+
handleSelectOption: handleSelectOption,
|
|
717
|
+
handleFeedback: handleFeedback,
|
|
718
|
+
handleApprovalDecision: handleApprovalDecision,
|
|
719
|
+
disableFeedback: messageFeedback
|
|
720
|
+
}));
|
|
721
|
+
}), (waitingResponse || loadingMessage || Object.keys(activeLoadings || {}).length > 0) && /*#__PURE__*/_jsxs("div", {
|
|
722
|
+
style: {
|
|
723
|
+
display: 'flex',
|
|
724
|
+
flexDirection: 'column'
|
|
725
|
+
},
|
|
726
|
+
children: [(waitingResponse || loadingMessage) && /*#__PURE__*/_jsx(LoadingText, {
|
|
727
|
+
text: loadingMessage || (isWebSearchActive ? 'Buscando en la web' : isDeepSearchActive ? t('chat.generatingDeepSearch') : hasAttachments ? t('chat.generatingAttachment') : t('chat.generating'))
|
|
728
|
+
}), Object.entries(activeLoadings || {}).map(function (_ref1) {
|
|
729
|
+
var _ref10 = _slicedToArray(_ref1, 2),
|
|
730
|
+
threadId = _ref10[0],
|
|
731
|
+
message = _ref10[1];
|
|
732
|
+
return /*#__PURE__*/_jsx(LoadingText, {
|
|
733
|
+
text: message
|
|
734
|
+
}, "loading-".concat(threadId));
|
|
735
|
+
})]
|
|
736
|
+
})]
|
|
674
737
|
}), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
|
|
675
738
|
type: "button",
|
|
676
739
|
onClick: handleClickScrollToBottom,
|
|
@@ -683,4 +746,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
|
|
|
683
746
|
});
|
|
684
747
|
};
|
|
685
748
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
686
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZU1hdGhQbHVnaW4iLCJjcmVhdGVDb2RlUGx1Z2luIiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJDaGF0SGlzdG9yeVJvbGUiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlVGFza1BhbmVsIiwiTG9hZGluZ1RleHQiLCJMb2FkZXIiLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NNZXNzYWdlc091dGVyIiwiU0NNZXNzYWdlc1Njcm9sbCIsIlNDTWVzc2FnZXNJbm5lciIsIlNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDQXNzaXN0YW50TWVzc2FnZUhlYWRlciIsIlNDQXNzaXN0YW50TmFtZSIsIlNDQXNzaXN0YW50QXZhdGFyIiwiU0NUYXNrTGluayIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiRmVlZGJhY2siLCJ1c2VHbG9iYWxDb250ZXh0IiwiTUFJQUlzb2xvZ28iLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwibWF0aCIsInNpbmdsZURvbGxhclRleHRNYXRoIiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImxvY2FsQWdlbnQiLCJzZXRMb2NhbEFnZW50IiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiZW1vamkiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJjb252ZXJ0TGF0ZXhUb1N0cmVhbWRvd24iLCJ0ZXh0IiwicmVwbGFjZSIsIl9tYXRjaCIsInAxIiwiY29uY2F0IiwiZ2V0VGFiU2VnbWVudEZyb21IcmVmIiwiaHJlZiIsIm1hdGNoIiwidGVzdCIsIlRhc2tMaW5rIiwiX3JlZjQiLCJ0YXNrSWQiLCJ0YWJTZWdtZW50IiwiX3VzZVRhc2tQYW5lbCIsImJ1aWxkT3BlblRhc2siLCJvcGVuVGFzayIsImhhbmRsZUNsaWNrIiwiZSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwicHJldmVudERlZmF1bHQiLCJDdXN0b21MaW5rIiwiX3JlZjUiLCJyZXN0IiwiX2V4Y2x1ZGVkMyIsInRhc2tNYXRjaCIsIlJlZ0V4cCIsIk1lc3NhZ2VJdGVtIiwiX3JlZjYiLCJfcmVmNyIsInVzZXIiLCJtZXNzYWdlIiwiaXNFcnJvciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiZGlzYWJsZUZlZWRiYWNrIiwicm9sZSIsInNvdXJjZXMiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsIiwiYXBwcm92YWxTdGF0dXMiLCJleHRyYWN0VGFza3NGcm9tTWVzc2FnZSIsInRhc2tVcmxSZWdleCIsInRhc2tzIiwic2VlbklkcyIsIlNldCIsImV4ZWMiLCJ1cmwiLCJoYXMiLCJhZGQiLCJtYXJrZG93bkxpbmtSZWdleCIsImxpbmtNYXRjaCIsInRpdGxlIiwicHVzaCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIlVTRVIiLCJ0b1N0cmluZyIsImlzQXNzaXN0YW50IiwiQVNTSVNUQU5UIiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImZlZWRiYWNrIiwic2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsImxlbmd0aCIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsIl9hdHRhY2htZW50JG5hbWUiLCJhdHRhY2htZW50VHlwZSIsInRvTG93ZXJDYXNlIiwiYXR0YWNobWVudE5hbWUiLCJpc0F1ZGlvRmlsZSIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb24iLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZCIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJ0aHJlYWRfaWQiLCJ0b29sX2NhbGxfaWQiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwicGx1Z2lucyIsImNvbXBvbmVudHMiLCJhIiwibGlua1NhZmV0eSIsImVuYWJsZWQiLCJpc0FuaW1hdGluZyIsImlzU3RyZWFtaW5nIiwic2hpa2lUaGVtZSIsImNvbnRyb2xzIiwidGFibGUiLCJjb250ZW50IiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmOCIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0MyIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiY3VycmVudCIsInNjcm9sbFRvIiwidG9wIiwic2Nyb2xsSGVpZ2h0IiwiYmVoYXZpb3IiLCJzZXRUaW1lb3V0IiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwiZGlkU2V0U3RhdGUiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwibGFzdE1lc3NhZ2UiLCJoYXNBcHByb3ZhbCIsImlzQXRCb3R0b20iLCJzY3JvbGxUb0JvdHRvbSIsIl9tZXNzYWdlc1JlZiRjdXJyZW50MiIsImlzTmV3QW5zd2VyTWVzc2FnZSIsImlzTmV3VXNlck1lc3NhZ2UiLCJpc05ld0FwcHJvdmFsTWVzc2FnZSIsImhhc01lc3NhZ2VzIiwiaXNOb3RJbml0aWFsTWVzc2FnZSIsIm1zZyIsInNjcm9sbERlbGF5IiwiZG9TY3JvbGwiLCJfbWVzc2FnZXNSZWYkY3VycmVudDMiLCJfbWVzc2FnZXNSZWYkY3VycmVudDQiLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsImhhc0F0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTY3JvbGxPblBhcmVudCIsIm1lc3NhZ2VzQ29udGVudCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwiaXNMYXN0TWVzc2FnZSIsImtleSIsImRhdGUiLCJPYmplY3QiLCJrZXlzIiwiZW50cmllcyIsIl9yZWY5IiwiX3JlZjAiLCIkc2Nyb2xsT25QYXJlbnQiLCJyZWYiLCJvblNjcm9sbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RyZWFtZG93biB9IGZyb20gJ3N0cmVhbWRvd24nXG5pbXBvcnQgeyBjcmVhdGVNYXRoUGx1Z2luIH0gZnJvbSAnQHN0cmVhbWRvd24vbWF0aCdcbmltcG9ydCAna2F0ZXgvZGlzdC9rYXRleC5taW4uY3NzJ1xuaW1wb3J0IHsgY3JlYXRlQ29kZVBsdWdpbiB9IGZyb20gJ0BzdHJlYW1kb3duL2NvZGUnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IE1BSUFJc29sb2dvIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuXG5jb25zdCBtYXRoID0gY3JlYXRlTWF0aFBsdWdpbih7IHNpbmdsZURvbGxhclRleHRNYXRoOiB0cnVlIH0pXG5jb25zdCBjb2RlID0gY3JlYXRlQ29kZVBsdWdpbih7IHRoZW1lczogWydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J10gfSlcblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gKCkgPT4ge1xuICBjb25zdCBbbG9jYWxBZ2VudCwgc2V0TG9jYWxBZ2VudF0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxBZ2VudChhZ2VudClcbiAgfSwgW2FnZW50XSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHtsb2NhbEFnZW50Py50eXBlID09PSAnY2xvbmUnID8gPE1BSUFJc29sb2dvIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz4gOiBsb2NhbEFnZW50Py5lbW9qaX1cbiAgICA8L1NDQXNzaXN0YW50QXZhdGFyPlxuICApXG59XG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7IG1lc3NhZ2U6IHN0cmluZzsgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW107IGZhcUlkPzogc3RyaW5nIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkOiBzdHJpbmcsIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50TWVzc2FnZUhlYWRlciA9ICgpID0+IHtcbiAgY29uc3QgW2xvY2FsQWdlbnQsIHNldExvY2FsQWdlbnRdID0gdXNlU3RhdGU8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvY2FsQWdlbnQoYWdlbnQpXG4gIH0sIFthZ2VudF0pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICAgICAgPEFzc2lzdGFudEF2YXRhciAvPlxuICAgICAge2xvY2FsQWdlbnQ/Lm5hbWUgJiYgKFxuICAgICAgICA8U0NBc3Npc3RhbnROYW1lPntsb2NhbEFnZW50Py50eXBlID09PSAnY2xvbmUnID8gJ01BSUEnIDogbG9jYWxBZ2VudD8ubmFtZX08L1NDQXNzaXN0YW50TmFtZT5cbiAgICAgICl9XG4gICAgPC9TQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gIClcbn1cblxuLy8gQ29udmllcnRlIHNpbnRheGlzIExhVGVYIGVzdMOhbmRhciBhIHNpbnRheGlzIFN0cmVhbWRvd25cbmNvbnN0IGNvbnZlcnRMYXRleFRvU3RyZWFtZG93biA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiB0ZXh0XG4gIHJldHVybiAoXG4gICAgdGV4dFxuICAgICAgLy8gQmxvY2sgbWF0aDogXFxbIC4uLiBcXF0gLT4gJCQgLi4uICQkXG4gICAgICAucmVwbGFjZSgvXFxcXFxcWyhbXFxzXFxTXSo/KVxcXFxcXF0vZywgKF9tYXRjaCwgcDEpID0+IGAkJCR7cDF9JCRgKVxuICAgICAgLy8gSW5saW5lIG1hdGg6IFxcKCAuLi4gXFwpIC0+ICQgLi4uICQgKHNpbmdsZSBkb2xsYXIgZm9yIGlubGluZSlcbiAgICAgIC5yZXBsYWNlKC9cXFxcXFwoKFtcXHNcXFNdKj8pXFxcXFxcKS9nLCAoX21hdGNoLCBwMSkgPT4gYCQke3AxfSRgKVxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLy8gQ29tcG9uZW50IGZvciB0YXNrIGxpbmtzIHRoYXQgdXNlcyB0aGUgdXNlVGFza1BhbmVsIGhvb2tcbmNvbnN0IFRhc2tMaW5rOiBGQzx7IGhyZWY6IHN0cmluZzsgdGFza0lkOiBzdHJpbmc7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfT4gPSAoeyBocmVmLCB0YXNrSWQsIGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgdGFiU2VnbWVudCA9IGdldFRhYlNlZ21lbnRGcm9tSHJlZihocmVmKVxuICBjb25zdCB7IGJ1aWxkT3BlblRhc2sgfSA9IHVzZVRhc2tQYW5lbCh0YXNrSWQsIHRhYlNlZ21lbnQpXG4gIGNvbnN0IG9wZW5UYXNrID0gYnVpbGRPcGVuVGFzaygpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQW5jaG9yRWxlbWVudD4pID0+IHtcbiAgICAvLyBTaSBlcyBDbWQvQ3RybCArIGNsaWNrLCBkZWphciBxdWUgc2UgYWJyYSBlbiBudWV2YSBwZXN0YcOxYSAoY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8pXG4gICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrKClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDVGFza0xpbmsgaHJlZj17aHJlZn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU0NUYXNrTGluaz5cbiAgKVxufVxuXG4vLyBDdXN0b20gbGluayBjb21wb25lbnQgZm9yIFN0cmVhbWRvd246IHRhc2sgVVJMcyBvcGVuIHRoZSB0YXNrIHBhbmVsLCBvdGhlciBsaW5rcyByZW5kZXIgbm9ybWFsbHlcbnR5cGUgQ3VzdG9tTGlua1Byb3BzID0gUmVhY3QuQW5jaG9ySFRNTEF0dHJpYnV0ZXM8SFRNTEFuY2hvckVsZW1lbnQ+ICYgeyBub2RlPzogdW5rbm93biB9XG5jb25zdCBDdXN0b21MaW5rOiBGQzxDdXN0b21MaW5rUHJvcHM+ID0gKHsgaHJlZiwgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICBpZiAoIWhyZWYgfHwgdHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxhIGhyZWY9e2hyZWZ9IHsuLi5yZXN0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9hPlxuICAgIClcbiAgfVxuICBjb25zdCB0YXNrTWF0Y2ggPSBocmVmLm1hdGNoKG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTikpXG4gIGlmICh0YXNrTWF0Y2gpIHtcbiAgICBjb25zdCB0YXNrSWQgPSB0YXNrTWF0Y2hbMV1cbiAgICByZXR1cm4gKFxuICAgICAgPFRhc2tMaW5rIGhyZWY9e2hyZWZ9IHRhc2tJZD17dGFza0lkfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9UYXNrTGluaz5cbiAgICApXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9hPlxuICApXG59XG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICAgIGlmICghbWVzc2FnZSkgcmV0dXJuIFtdXG5cbiAgICAvLyBNYXRjaCBVUkxzIGxpa2U6IC4uLi90YXNrcy8xMjM0NTYvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICAgIGNvbnN0IHNlZW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICAgIHdoaWxlICgobWF0Y2ggPSB0YXNrVXJsUmVnZXguZXhlYyhtZXNzYWdlKSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgICBjb25zdCB1cmwgPSBtYXRjaFswXVxuXG4gICAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgICAgc2Vlbklkcy5hZGQodGFza0lkKVxuXG4gICAgICAgIC8vIFRyeSB0byBleHRyYWN0IHRoZSB0YXNrIHRpdGxlIGZyb20gbWFya2Rvd24gbGluayBbdGl0bGVdKHVybClcbiAgICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7dXJsLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9XFxcXClgKVxuICAgICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgICBjb25zdCB0aXRsZSA9IGxpbmtNYXRjaCA/IGxpbmtNYXRjaFsxXSA6IGBUYXJlYSAjJHt0YXNrSWR9YFxuXG4gICAgICAgIHRhc2tzLnB1c2goe1xuICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgdXJsLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXNrc1xuICB9XG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIShhdHRhY2htZW50cyB8fCBzb3VyY2VzKT8ubGVuZ3RoICYmICFpc0Fzc2lzdGFudCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICAgICB7KGF0dGFjaG1lbnRzIHx8IHNvdXJjZXMpPy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIHthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMubWFwKGFjdGlvbiA9PiAoXG4gICAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICAgIGtleT17YCR7YWN0aW9uLnRocmVhZF9pZH0tJHthY3Rpb24udG9vbF9jYWxsX2lkfWB9XG4gICAgICAgICAgICAgICAgYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgICBvbkFwcHJvdmU9e3RocmVhZElkID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWQsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWQsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgICB7ISFtZXNzYWdlICYmXG4gICAgICAgICAgLy8gU2kgaGF5IGFwcHJvdmFsIChkaXN0aW50byBkZSBudWxsKSwgbm8gcmVuZGVyaXphciBlbCBhbnN3ZXIgZW4gZXN0ZSBtZW5zYWplXG4gICAgICAgICAgLy8gRWwgbWVuc2FqZSBkZSByZWNoYXpvIHNlIHJlbmRlcml6YSBjb21vIG1lbnNhamUgc2VwYXJhZG9cbiAgICAgICAgICAhYXBwcm92YWwgJiYgKFxuICAgICAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpc0Fzc2lzdGFudCAmJiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZShtZXNzYWdlKS5sZW5ndGggPiAwID8gJ2hhcy10YXNrLWxpbmtzJyA6ICcnfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7LyogbGlua1NhZmV0eSBtb2RhbCBkZXNoYWJpbGl0YWRvIHBvciBlbCBtb21lbnRvOiBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IHRydWUgfX0gKi99XG4gICAgICAgICAgICAgIDxTdHJlYW1kb3duXG4gICAgICAgICAgICAgICAgcGx1Z2lucz17eyBtYXRoLCBjb2RlIH19XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICAgICAgY29udHJvbHM9e3sgdGFibGU6IGZhbHNlLCBjb2RlOiBmYWxzZSB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NvbnZlcnRMYXRleFRvU3RyZWFtZG93bihtZXNzYWdlKX1cbiAgICAgICAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICAgICl9XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhYXBwcm92YWwgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e21lc3NhZ2V9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KVxuICAgICAgLy8gQWN0dWFsaXphciBlc3RhZG8gZGVzcHXDqXMgZGUgdW4gYnJldmUgZGVsYXkgcGFyYSBwZXJtaXRpciBxdWUgZWwgc2Nyb2xsIHNlIGNvbXBsZXRlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSwgNTAwKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgIGNvbnN0IGRpZFNldFN0YXRlID0gc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3dcbiAgICAgICAgaWYgKGRpZFNldFN0YXRlKSB7XG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbF1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoc2VuZE1lc3NhZ2VSZWYuY3VycmVudCwgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBkZSBhcHJvYmFjacOzbiAoQXBwcm92YWxCb3gpLiBTaW4gUmVzaXplT2JzZXJ2ZXIgZW4gZWxcbiAgLy8gY29udGVuZWRvcjogb2JzZXJ2YXJsbyBkaXNwYXJhYmEgY2FsbGJhY2tzIGFsIGNhbWJpYXIgZWwgbGF5b3V0L3Njcm9sbGJhciB5IGNhZGEgdW5vXG4gIC8vIGxsYW1hYmEgc2Nyb2xsVG9Cb3R0b20oKSwgcHJvdm9jYW5kbyB0aXJvbmVzIGFsIHNjcm9sbGVhci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBoYXNBcHByb3ZhbCA9IGxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuXG4gICAgaWYgKCFoYXNBcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuXG4gICAgaWYgKCEoaXNBdEJvdHRvbSB8fCAhdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKCkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY3VlbmNpYSBpbmljaWFsIGRlIHNjcm9sbCBwYXJhIGN1YW5kbyBlbCBBcHByb3ZhbEJveCBhY2FiYSBkZSByZW5kZXJpemFyc2VcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRvQm90dG9tLCAxMDApXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2kgZWwgdXN1YXJpbyBlc3TDoSBzY3JvbGxlYW5kbyBtYW51YWxtZW50ZSwgbm8gaGFjZXIgYXV0byBzY3JvbGxcbiAgICBpZiAodXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ICYmIHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuXG4gICAgY29uc3QgaXNOZXdBbnN3ZXJNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpXG4gICAgY29uc3QgaXNOZXdVc2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpXG4gICAgY29uc3QgaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc01lc3NhZ2VzID0gISFtZXNzYWdlcy5sZW5ndGhcbiAgICBjb25zdCBpc05vdEluaXRpYWxNZXNzYWdlID0gIW1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcblxuICAgIGlmICgoaXNOZXdBbnN3ZXJNZXNzYWdlIHx8IGlzTmV3VXNlck1lc3NhZ2UgfHwgaXNOZXdBcHByb3ZhbE1lc3NhZ2UpICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIC8vIFBhcmEgbWVuc2FqZXMgZGUgYXByb2JhY2nDs24sIHVzYXIgdW4gcGVxdWXDsW8gZGVsYXkgcGFyYSBhc2VndXJhciBxdWUgZWwgQXBwcm92YWxCb3ggc2UgaGF5YSByZW5kZXJpemFkb1xuICAgICAgY29uc3Qgc2Nyb2xsRGVsYXkgPSBpc05ld0FwcHJvdmFsTWVzc2FnZSA/IDEwMCA6IDBcbiAgICAgIGNvbnN0IGRvU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxEZWxheSA+IDApIHtcbiAgICAgICAgc2V0VGltZW91dChkb1Njcm9sbCwgc2Nyb2xsRGVsYXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1Njcm9sbCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGhhc01lc3NhZ2VzICYmXG4gICAgICBpc05vdEluaXRpYWxNZXNzYWdlICYmXG4gICAgICAhaXNOZXdBbnN3ZXJNZXNzYWdlICYmXG4gICAgICAhaXNOZXdVc2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QXBwcm92YWxNZXNzYWdlXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHdhaXRpbmdSZXNwb25zZV0pXG5cbiAgLy8gVmVyaWZpY2FyIGVsIGVzdGFkbyBpbmljaWFsIGRlbCBzY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBoYXNBdHRhY2htZW50cyA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgJiYgbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpICYmIGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aClcblxuICBjb25zdCBpc1Njcm9sbE9uUGFyZW50ID0gISFleHBhbmRlZFxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCkgJiZcbiAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgIGNvbnN0IGlzTGFzdE1lc3NhZ2UgPSBpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgIGtleT17bWVzc2FnZS5pZCAhPSBudWxsID8gYCR7bWVzc2FnZS5pZH0tJHttZXNzYWdlLmRhdGV9YCA6IGBtc2ctJHtpbmRleH1gfVxuICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgICB7KHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZSB8fCBPYmplY3Qua2V5cyhhY3RpdmVMb2FkaW5ncyB8fCB7fSkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICB0ZXh0PXtcbiAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgIChpc1dlYlNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgPyAnQnVzY2FuZG8gZW4gbGEgd2ViJ1xuICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgPyB0KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJylcbiAgICAgICAgICAgICAgICAgICAgOiBoYXNBdHRhY2htZW50c1xuICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgOiB0KCdjaGF0LmdlbmVyYXRpbmcnKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtPYmplY3QuZW50cmllcyhhY3RpdmVMb2FkaW5ncyB8fCB7fSkubWFwKChbdGhyZWFkSWQsIG1lc3NhZ2VdKSA9PiAoXG4gICAgICAgICAgICA8TG9hZGluZ1RleHQga2V5PXtgbG9hZGluZy0ke3RocmVhZElkfWB9IHRleHQ9e21lc3NhZ2V9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cblxuICAgICAge2xvYWRpbmdNZXNzYWdlcyAmJiA8TG9hZGVyIC8+fVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0Es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
|
|
749
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiTWFya2Rvd24iLCJyZW1hcmtHZm0iLCJVc2VyQXZhdGFyIiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJDaGF0SGlzdG9yeVJvbGUiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlVGFza1BhbmVsIiwiTG9hZGluZ1RleHQiLCJMb2FkZXIiLCJHTE9CQUxfQ09MT1JTIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJc29sb2dvIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBc3Npc3RhbnRBdmF0YXIiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJsb2NhbEFnZW50Iiwic2V0TG9jYWxBZ2VudCIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzdHlsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiY3Vyc29yIiwiY2hpbGRyZW4iLCJ0eXBlIiwiZW1vamkiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJnYXAiLCJmbGV4RGlyZWN0aW9uIiwibWFwIiwiY29sb3IiLCJkYXJrIiwibGluZUhlaWdodCIsImNvbmNhdCIsIm9wYWNpdHkiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXZhdGFyQnlVc2VyVHlwZSIsIl9yZWY0IiwiZGF0YSIsImF1dGhVc2VyIiwiYXZhdGFySWNvbiIsIndpdGhVc2VyQ2FwYWNpdHkiLCJwaWN0dXJlIiwic2hvd1Rvb3RsdGlwIiwicGxhY2UiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsIndpdGhDYXBhY2l0eSIsInNpemUiLCJwb3NpdGlvbiIsInRvcCIsImdldFRhYlNlZ21lbnRGcm9tSHJlZiIsImhyZWYiLCJtYXRjaCIsInRlc3QiLCJUYXNrTGluayIsIl9yZWY1IiwidGFza0lkIiwidGFiU2VnbWVudCIsIl91c2VUYXNrUGFuZWwiLCJidWlsZE9wZW5UYXNrIiwib3BlblRhc2siLCJoYW5kbGVDbGljayIsImUiLCJtZXRhS2V5IiwiY3RybEtleSIsInByZXZlbnREZWZhdWx0IiwidGV4dERlY29yYXRpb24iLCJNZXNzYWdlSXRlbSIsIl9yZWY2IiwiX3JlZjciLCJ1c2VyIiwibWVzc2FnZSIsImlzRXJyb3IiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJkaXNhYmxlRmVlZGJhY2siLCJyb2xlIiwic291cmNlcyIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWwiLCJhcHByb3ZhbFN0YXR1cyIsImV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInVybCIsImhhcyIsImFkZCIsIm1hcmtkb3duTGlua1JlZ2V4IiwicmVwbGFjZSIsImxpbmtNYXRjaCIsInRpdGxlIiwicHVzaCIsImV4dHJhY3RUYXNrSWRGcm9tVXJsIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiaXNBc3Npc3RhbnQiLCJBU1NJU1RBTlQiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYXNGZWVkYmFjayIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwibGVuZ3RoIiwiZmxleFdyYXAiLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJzb21lIiwiZXh0IiwiZW5kc1dpdGgiLCJwb3NpdGlvbkluZGV4IiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9uIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0Iiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWQiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwidGhyZWFkX2lkIiwidG9vbF9jYWxsX2lkIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInJlbWFya1BsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsIl9yZWY4IiwiaXNUYXNrTGluayIsInRhcmdldCIsInJlbCIsImltZyIsIl9yZWY5Iiwic3JjIiwiYWx0IiwiX2V4Y2x1ZGVkMyIsIm1heFdpZHRoIiwibWFyZ2luIiwiYm9yZGVyUmFkaXVzIiwiY29udGVudCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjAiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInNjcm9sbEhlaWdodCIsImJlaGF2aW9yIiwic2V0VGltZW91dCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsImRpZFNldFN0YXRlIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsImxhc3RNZXNzYWdlIiwiaGFzQXBwcm92YWwiLCJpc0F0Qm90dG9tIiwic2Nyb2xsVG9Cb3R0b20iLCJfbWVzc2FnZXNSZWYkY3VycmVudDIiLCJpc05ld0Fuc3dlck1lc3NhZ2UiLCJpc05ld1VzZXJNZXNzYWdlIiwiaXNOZXdBcHByb3ZhbE1lc3NhZ2UiLCJoYXNNZXNzYWdlcyIsImlzTm90SW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJzY3JvbGxEZWxheSIsImRvU2Nyb2xsIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQzIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQ0IiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJoYXNBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImZsZXhHcm93Iiwib3ZlcmZsb3ciLCJyZWYiLCJvblNjcm9sbCIsIm92ZXJmbG93WSIsInBhZGRpbmciLCJ0ZXh0IiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkcHJvamVjdCIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJrZXkiLCJkYXRlIiwiT2JqZWN0Iiwia2V5cyIsImVudHJpZXMiLCJfcmVmMSIsIl9yZWYxMCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgTWFya2Rvd24gZnJvbSAncmVhY3QtbWFya2Rvd24nXG5pbXBvcnQgcmVtYXJrR2ZtIGZyb20gJ3JlbWFyay1nZm0nXG5pbXBvcnQgeyBVc2VyQXZhdGFyIH0gZnJvbSAnQHByb2plY3Rjb3IvdXNlci1hdmF0YXIvbGliJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlLCBDaGF0TWVzc2FnZVVzZXIsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBHTE9CQUxfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgU0NDQUlNZXNzYWdlV3JhcHBlciwgU2Nyb2xsVG9Cb3R0b21CdXR0b24gfSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhciA9ICgpID0+IHtcbiAgY29uc3QgW2xvY2FsQWdlbnQsIHNldExvY2FsQWdlbnRdID0gdXNlU3RhdGU8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvY2FsQWdlbnQoYWdlbnQpXG4gIH0sIFthZ2VudF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogJzQwcHgnLFxuICAgICAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICAgICAgZm9udFNpemU6ICczNnB4JyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2xvY2FsQWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyA8TUFJQUlzb2xvZ28gd2lkdGg9ezM4fSBoZWlnaHQ9ezM4fSAvPiA6IGxvY2FsQWdlbnQ/LmVtb2ppfVxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7IG1lc3NhZ2U6IHN0cmluZzsgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW107IGZhcUlkPzogc3RyaW5nIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWQ6IHN0cmluZywgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMnB4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGNvbG9yOiBHTE9CQUxfQ09MT1JTLmRhcmssXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxNDAlJyxcbiAgICAgICAgICAgICAgY3Vyc29yOiBgJHtzZWxlY3RlZE9wdGlvbiA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcid9YCxcbiAgICAgICAgICAgICAgb3BhY2l0eTogYCR7c2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWQgPyAwLjUgOiAxfWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IEF2YXRhckJ5VXNlclR5cGUgPSAoe1xuICB0eXBlLFxuICBkYXRhLFxuICBhdXRoVXNlcixcbn06IHtcbiAgdHlwZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCdcbiAgZGF0YTogQ2hhdE1lc3NhZ2VVc2VyXG4gIGF1dGhVc2VyOiBDT1JVc2VyXG59KSA9PiB7XG4gIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICBpZiAoZGF0YS5hdmF0YXJJY29uKSB7XG4gICAgICByZXR1cm4gZGF0YS5hdmF0YXJJY29uXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8VXNlckF2YXRhclxuICAgICAgICB3aXRoVXNlckNhcGFjaXR5PXtmYWxzZX1cbiAgICAgICAgcGljdHVyZT17YXV0aFVzZXI/LnBpY3R1cmV9XG4gICAgICAgIHNob3dUb290bHRpcFxuICAgICAgICBwbGFjZT1cInRvcFwiXG4gICAgICAgIGZpcnN0TmFtZT17YXV0aFVzZXI/LmZpcnN0TmFtZX1cbiAgICAgICAgbGFzdE5hbWU9e2F1dGhVc2VyPy5sYXN0TmFtZX1cbiAgICAgICAgd2l0aENhcGFjaXR5PXtmYWxzZX1cbiAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiAnc3RpY2t5JywgdG9wOiAwLCBoZWlnaHQ6ICdmaXQtY29udGVudCcgfX0+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuLy8gRXh0cmFlIGVsIHNlZ21lbnRvIGRlIHRhYiAoZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykgZGVsIGhyZWYgcGFyYSBhYnJpciBlbCBtb2RhbCBjb24gZWwgdGFiIGNvcnJlY3RvXG5jb25zdCBnZXRUYWJTZWdtZW50RnJvbUhyZWYgPSAoaHJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBocmVmLm1hdGNoKC9cXC90YXNrc1xcL1xcZCtcXC8oW14vP10rKS8pXG4gIHJldHVybiBtYXRjaCAmJiAvXihkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSQvLnRlc3QobWF0Y2hbMV0pID8gbWF0Y2hbMV0gOiAnZGV0YWlsJ1xufVxuXG4vLyBDb21wb25lbnQgZm9yIHRhc2sgbGlua3MgdGhhdCB1c2VzIHRoZSB1c2VUYXNrUGFuZWwgaG9va1xuY29uc3QgVGFza0xpbms6IEZDPHsgaHJlZjogc3RyaW5nOyB0YXNrSWQ6IHN0cmluZzsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9PiA9ICh7IGhyZWYsIHRhc2tJZCwgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB0YWJTZWdtZW50ID0gZ2V0VGFiU2VnbWVudEZyb21IcmVmKGhyZWYpXG4gIGNvbnN0IHsgYnVpbGRPcGVuVGFzayB9ID0gdXNlVGFza1BhbmVsKHRhc2tJZCwgdGFiU2VnbWVudClcbiAgY29uc3Qgb3BlblRhc2sgPSBidWlsZE9wZW5UYXNrKClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIC8vIFNpIGVzIENtZC9DdHJsICsgY2xpY2ssIGRlamFyIHF1ZSBzZSBhYnJhIGVuIG51ZXZhIHBlc3Rhw7FhIChjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0bylcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgb3BlblRhc2soKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUgIWltcG9ydGFudCcsXG4gICAgICAgIGNvbG9yOiAnIzMzN2FiNyAhaW1wb3J0YW50JyxcbiAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gIClcbn1cblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKTogVGFza0luZm9bXSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlKSByZXR1cm4gW11cblxuICAgIC8vIE1hdGNoIFVSTHMgbGlrZTogLi4uL3Rhc2tzLzEyMzQ1Ni8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICBjb25zdCB0YXNrczogVGFza0luZm9bXSA9IFtdXG4gICAgY29uc3Qgc2VlbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBudWxsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gICAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFza0lkID0gbWF0Y2hbMV1cbiAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdXG5cbiAgICAgIGlmICghc2Vlbklkcy5oYXModGFza0lkKSkge1xuICAgICAgICBzZWVuSWRzLmFkZCh0YXNrSWQpXG5cbiAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgdGhlIHRhc2sgdGl0bGUgZnJvbSBtYXJrZG93biBsaW5rIFt0aXRsZV0odXJsKVxuICAgICAgICBjb25zdCBtYXJrZG93bkxpbmtSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxbKFteXFxcXF1dKylcXFxcXVxcXFwoJHt1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKX1cXFxcKWApXG4gICAgICAgIGNvbnN0IGxpbmtNYXRjaCA9IG1lc3NhZ2UubWF0Y2gobWFya2Rvd25MaW5rUmVnZXgpXG4gICAgICAgIGNvbnN0IHRpdGxlID0gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogYFRhcmVhICMke3Rhc2tJZH1gXG5cbiAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhc2tzXG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0YXNrSWQgZnJvbSBhIFVSTFxuICBjb25zdCBleHRyYWN0VGFza0lkRnJvbVVybCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghdXJsKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IC9cXC90YXNrc1xcLyhcXGQrKVxcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKS9cbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCh0YXNrVXJsUmVnZXgpXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsXG4gIH1cblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogaXNDdXJyZW50VXNlciA/ICdyb3ctcmV2ZXJzZScgOiAncm93JyxcbiAgICAgICAgICAgIC4uLihpc0Fzc2lzdGFudCAmJiB7XG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3RhcnQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxBdmF0YXJCeVVzZXJUeXBlIHR5cGU9e2lzQXNzaXN0YW50ID8gJ2Fzc2lzdGFudCcgOiAndXNlcid9IGRhdGE9e3VzZXJ9IGF1dGhVc2VyPXthdXRoVXNlcn0gLz5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgZmxleERpcmVjdGlvbjogaXNDdXJyZW50VXNlciA/ICdyb3ctcmV2ZXJzZScgOiAncm93JyxcbiAgICAgICAgLi4uKGlzQXNzaXN0YW50ICYmIHtcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3N0YXJ0JyxcbiAgICAgICAgfSksXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxBdmF0YXJCeVVzZXJUeXBlIHR5cGU9e2lzQXNzaXN0YW50ID8gJ2Fzc2lzdGFudCcgOiAndXNlcid9IGRhdGE9e3VzZXJ9IGF1dGhVc2VyPXthdXRoVXNlcn0gLz5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgeyEhKGF0dGFjaG1lbnRzIHx8IHNvdXJjZXMpPy5sZW5ndGggJiYgIWlzQXNzaXN0YW50ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeyhhdHRhY2htZW50cyB8fCBzb3VyY2VzKT8ubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMTJweCcgfX0+XG4gICAgICAgICAgICB7YXBwcm92YWwucGVuZGluZ19hY3Rpb25zLm1hcChhY3Rpb24gPT4gKFxuICAgICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2FjdGlvbi50aHJlYWRfaWR9LSR7YWN0aW9uLnRvb2xfY2FsbF9pZH1gfVxuICAgICAgICAgICAgICAgIGFjdGlvbj17YWN0aW9ufVxuICAgICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHshIW1lc3NhZ2UgJiZcbiAgICAgICAgICAvLyBTaSBoYXkgYXBwcm92YWwgKGRpc3RpbnRvIGRlIG51bGwpLCBubyByZW5kZXJpemFyIGVsIGFuc3dlciBlbiBlc3RlIG1lbnNhamVcbiAgICAgICAgICAvLyBFbCBtZW5zYWplIGRlIHJlY2hhem8gc2UgcmVuZGVyaXphIGNvbW8gbWVuc2FqZSBzZXBhcmFkb1xuICAgICAgICAgICFhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2lzQXNzaXN0YW50ICYmIGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlKG1lc3NhZ2UpLmxlbmd0aCA+IDAgPyAnaGFzLXRhc2stbGlua3MnIDogJyd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICAgIHJlbWFya1BsdWdpbnM9e1tyZW1hcmtHZm1dfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgIGE6ICh7IGhyZWYsIGNoaWxkcmVuIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0lkID0gZXh0cmFjdFRhc2tJZEZyb21VcmwoaHJlZiB8fCAnJylcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNUYXNrTGluayA9IHRhc2tJZCAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIGVzIHVuIGVubGFjZSBkZSB0YXJlYSwgdXNhciBlbCBjb21wb25lbnRlIFRhc2tMaW5rIHF1ZSBtYW5lamEgZWwgaG9va1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUYXNrTGluayAmJiB0YXNrSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhc2tMaW5rIGhyZWY9e2hyZWYgfHwgJyd9IHRhc2tJZD17dGFza0lkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYXNrTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJhIGVubGFjZXMgbm9ybWFsZXMsIGNvbXBvcnRhbWllbnRvIGVzdMOhbmRhclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtocmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUgIWltcG9ydGFudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzN2FiNyAhaW1wb3J0YW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGltZzogKHsgc3JjLCBhbHQsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD17YWx0fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyODBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICc4cHggMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgICA8L01hcmtkb3duPlxuICAgICAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICAgICl9XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhYXBwcm92YWwgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e21lc3NhZ2V9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KVxuICAgICAgLy8gQWN0dWFsaXphciBlc3RhZG8gZGVzcHXDqXMgZGUgdW4gYnJldmUgZGVsYXkgcGFyYSBwZXJtaXRpciBxdWUgZWwgc2Nyb2xsIHNlIGNvbXBsZXRlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSwgNTAwKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgIGNvbnN0IGRpZFNldFN0YXRlID0gc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3dcbiAgICAgICAgaWYgKGRpZFNldFN0YXRlKSB7XG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbF1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoc2VuZE1lc3NhZ2VSZWYuY3VycmVudCwgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBkZSBhcHJvYmFjacOzbiAoQXBwcm92YWxCb3gpLiBTaW4gUmVzaXplT2JzZXJ2ZXIgZW4gZWxcbiAgLy8gY29udGVuZWRvcjogb2JzZXJ2YXJsbyBkaXNwYXJhYmEgY2FsbGJhY2tzIGFsIGNhbWJpYXIgZWwgbGF5b3V0L3Njcm9sbGJhciB5IGNhZGEgdW5vXG4gIC8vIGxsYW1hYmEgc2Nyb2xsVG9Cb3R0b20oKSwgcHJvdm9jYW5kbyB0aXJvbmVzIGFsIHNjcm9sbGVhci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBoYXNBcHByb3ZhbCA9IGxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuXG4gICAgaWYgKCFoYXNBcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuXG4gICAgaWYgKCEoaXNBdEJvdHRvbSB8fCAhdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKCkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY3VlbmNpYSBpbmljaWFsIGRlIHNjcm9sbCBwYXJhIGN1YW5kbyBlbCBBcHByb3ZhbEJveCBhY2FiYSBkZSByZW5kZXJpemFyc2VcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRvQm90dG9tLCAxMDApXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2kgZWwgdXN1YXJpbyBlc3TDoSBzY3JvbGxlYW5kbyBtYW51YWxtZW50ZSwgbm8gaGFjZXIgYXV0byBzY3JvbGxcbiAgICBpZiAodXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ICYmIHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuXG4gICAgY29uc3QgaXNOZXdBbnN3ZXJNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpXG4gICAgY29uc3QgaXNOZXdVc2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpXG4gICAgY29uc3QgaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc01lc3NhZ2VzID0gISFtZXNzYWdlcy5sZW5ndGhcbiAgICBjb25zdCBpc05vdEluaXRpYWxNZXNzYWdlID0gIW1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcblxuICAgIGlmICgoaXNOZXdBbnN3ZXJNZXNzYWdlIHx8IGlzTmV3VXNlck1lc3NhZ2UgfHwgaXNOZXdBcHByb3ZhbE1lc3NhZ2UpICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIC8vIFBhcmEgbWVuc2FqZXMgZGUgYXByb2JhY2nDs24sIHVzYXIgdW4gcGVxdWXDsW8gZGVsYXkgcGFyYSBhc2VndXJhciBxdWUgZWwgQXBwcm92YWxCb3ggc2UgaGF5YSByZW5kZXJpemFkb1xuICAgICAgY29uc3Qgc2Nyb2xsRGVsYXkgPSBpc05ld0FwcHJvdmFsTWVzc2FnZSA/IDEwMCA6IDBcbiAgICAgIGNvbnN0IGRvU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxEZWxheSA+IDApIHtcbiAgICAgICAgc2V0VGltZW91dChkb1Njcm9sbCwgc2Nyb2xsRGVsYXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1Njcm9sbCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGhhc01lc3NhZ2VzICYmXG4gICAgICBpc05vdEluaXRpYWxNZXNzYWdlICYmXG4gICAgICAhaXNOZXdBbnN3ZXJNZXNzYWdlICYmXG4gICAgICAhaXNOZXdVc2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QXBwcm92YWxNZXNzYWdlXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHdhaXRpbmdSZXNwb25zZV0pXG5cbiAgLy8gVmVyaWZpY2FyIGVsIGVzdGFkbyBpbmljaWFsIGRlbCBzY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBoYXNBdHRhY2htZW50cyA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgJiYgbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpICYmIGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4R3JvdzogMSwganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBvdmVyZmxvdzogJ2F1dG8nLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICBnYXA6ICczNnB4JyxcbiAgICAgICAgICBwYWRkaW5nOiAnMHB4IDE2cHgnLFxuICAgICAgICAgIG1heFdpZHRoOiAnODY0cHgnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlLmlkICE9IG51bGwgPyBgJHttZXNzYWdlLmlkfS0ke21lc3NhZ2UuZGF0ZX1gIDogYG1zZy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgICAgdGV4dD17XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gJ0J1c2NhbmRvIGVuIGxhIHdlYidcbiAgICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICAgIDogaGFzQXR0YWNobWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7T2JqZWN0LmVudHJpZXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLm1hcCgoW3RocmVhZElkLCBtZXNzYWdlXSkgPT4gKFxuICAgICAgICAgICAgICA8TG9hZGluZ1RleHQga2V5PXtgbG9hZGluZy0ke3RocmVhZElkfWB9IHRleHQ9e21lc3NhZ2V9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuXG4gICAgICB7bG9hZGluZ01lc3NhZ2VzICYmIDxMb2FkZXIgLz59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM1RixPQUFPQyxRQUFRLE1BQU0sZ0JBQWdCO0FB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QUFDO01BRU4sQ0FBQyxDQUFDLEVBQ0QsQ0FBQzlELGVBQWUsSUFBSUUsY0FBYyxJQUFJa0UsTUFBTSxDQUFDQyxJQUFJLENBQUNsRSxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2pGLE1BQU0sR0FBRyxDQUFDLGtCQUNqRjlJLEtBQUE7UUFBS1MsS0FBSyxFQUFFO1VBQUVJLE9BQU8sRUFBRSxNQUFNO1VBQUU4QixhQUFhLEVBQUU7UUFBUyxDQUFFO1FBQUExQixRQUFBLEdBQ3RELENBQUMyTSxlQUFlLElBQUlFLGNBQWMsa0JBQ2pDaE8sSUFBQSxDQUFDZixXQUFXO1VBQ1ZzUyxJQUFJLEVBQ0Z2RCxjQUFjLEtBQ2J0QixpQkFBaUIsR0FDZCxvQkFBb0IsR0FDcEJDLGtCQUFrQixHQUNoQkgsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCc0UsY0FBYyxHQUNadEUsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCQSxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsQ0FDRixDQUNGLEVBQ0EwRixNQUFNLENBQUNFLE9BQU8sQ0FBQ25FLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDbkwsR0FBRyxDQUFDLFVBQUF1UCxLQUFBO1VBQUEsSUFBQUMsTUFBQSxHQUFBaFMsY0FBQSxDQUFBK1IsS0FBQTtZQUFFakksUUFBUSxHQUFBa0ksTUFBQTtZQUFFM00sT0FBTyxHQUFBMk0sTUFBQTtVQUFBLG9CQUMzRHRTLElBQUEsQ0FBQ2YsV0FBVztZQUE2QnNTLElBQUksRUFBRTVMO1VBQVEsY0FBQXpDLE1BQUEsQ0FBMUJrSCxRQUFRLENBQW9CLENBQUM7UUFBQSxDQUMzRCxDQUFDO01BQUEsQ0FDQyxDQUNOO0lBQUEsQ0FDRSxDQUFDLEVBRUxrRCxrQkFBa0IsaUJBQ2pCdE4sSUFBQSxDQUFDTixvQkFBb0I7TUFBQzBCLElBQUksRUFBQyxRQUFRO01BQUNpQyxPQUFPLEVBQUVrTCx5QkFBMEI7TUFBQXBOLFFBQUEsZUFDckVuQixJQUFBLENBQUN6QixjQUFjO1FBQUN3RSxLQUFLLEVBQUMsTUFBTTtRQUFDbkMsS0FBSyxFQUFDLE1BQU07UUFBQ0MsTUFBTSxFQUFDO01BQU0sQ0FBRTtJQUFDLENBQ3RDLENBQ3ZCLEVBRUErTSxlQUFlLGlCQUFJNU4sSUFBQSxDQUFDZCxNQUFNLElBQUUsQ0FBQztFQUFBLENBQzNCLENBQUM7QUFFVixDQUFDO0FBRUQsT0FBTyxJQUFNcVQsY0FBYyxnQkFBRzNVLEtBQUssQ0FBQ0MsSUFBSSxDQUFDa08sbUJBQW1CLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|