@projectcor/maia-components 2.11.100-1 → 2.11.100-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +4 -2
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +4 -1
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +30 -22
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +157 -35
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +90 -0
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
- package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
- package/lib/dev/DevStreamTimelineDemo.js +614 -0
- package/lib/dev/mockStreamTimelineDemo.js +417 -0
- package/lib/dev/mockStreamTimelineRunner.js +298 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
- package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
- package/lib/hooks/useChatManager/useChatManager.js +118 -40
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +151 -20
- package/lib/hooks/useStreamTimeline/index.js +7 -0
- package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
- package/lib/lang/br/index.js +8 -1
- package/lib/lang/en/index.js +8 -1
- package/lib/lang/es/index.js +8 -1
- package/lib/lang/fr/index.js +8 -1
- package/lib/services/maia/Agents/connectors.js +124 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/streamTimeline.js +2 -0
- package/lib/utils/normalizeAgentConnectors.js +28 -3
- package/lib/utils/streamDebugLog.js +169 -0
- package/lib/utils/streamExecutionSteps.js +19 -2
- package/lib/utils/streamTimeline.js +161 -0
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
4
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
6
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -20,8 +21,11 @@ import { useTranslation } from 'react-i18next';
|
|
|
20
21
|
import maia from '../../services/maia';
|
|
21
22
|
import { SECTIONS } from '../../constants/config';
|
|
22
23
|
import { ACTIVITY_MESSAGE_ROTATE_MS, advanceStreamActivityMessage, canAdvanceStreamActivityMessage, canRotateStreamActivityPhase, getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
|
|
23
|
-
import {
|
|
24
|
+
import { completeAllExecutionSteps, getActiveExecutionStep, mergeActivityWithExecutionSteps, resetExecutionStepCounter } from '../../utils/streamExecutionSteps';
|
|
25
|
+
import { appendContentToStreamTimeline, appendNodeToStreamTimeline, finalizeStreamTimeline, startStreamTimelineTurn } from '../../utils/streamTimeline';
|
|
26
|
+
import { streamTimelineStore } from '../useStreamTimeline/streamTimelineStore';
|
|
24
27
|
import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
|
|
28
|
+
import { streamDebugActivity, streamDebugApproval, streamDebugLog, streamDebugLogHitlUiOverlap, streamDebugNode, streamDebugSse, summarizeHitlContext, summarizeTimelineSnapshot } from '../../utils/streamDebugLog';
|
|
25
29
|
export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
26
30
|
var onStreamUpdate = _ref.onStreamUpdate,
|
|
27
31
|
onFinishStream = _ref.onFinishStream,
|
|
@@ -57,6 +61,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
57
61
|
var activityMessageIndexRef = useRef(0);
|
|
58
62
|
var streamActivityRef = useRef(null);
|
|
59
63
|
var executionStepsRef = useRef([]);
|
|
64
|
+
var accumulatedContentRef = useRef('');
|
|
60
65
|
var onStreamUpdateRef = useRef(onStreamUpdate);
|
|
61
66
|
var onFinishStreamRef = useRef(onFinishStream);
|
|
62
67
|
var onStartWritingRef = useRef(onStartWriting);
|
|
@@ -70,13 +75,32 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
70
75
|
onErrorRef.current = onError;
|
|
71
76
|
onApprovalRequiredRef.current = onApprovalRequired;
|
|
72
77
|
var clearStreamLoadingState = useCallback(function () {
|
|
78
|
+
streamDebugLog('orchestrator', 'clearStreamLoadingState', {
|
|
79
|
+
previousTurnId: streamTimelineStore.getSnapshot().turnId,
|
|
80
|
+
executionStepCount: executionStepsRef.current.length
|
|
81
|
+
});
|
|
73
82
|
activityMessageIndexRef.current = 0;
|
|
74
83
|
streamActivityRef.current = null;
|
|
75
84
|
executionStepsRef.current = [];
|
|
85
|
+
accumulatedContentRef.current = '';
|
|
76
86
|
resetExecutionStepCounter();
|
|
87
|
+
streamTimelineStore.clear();
|
|
77
88
|
setStreamActivity(null);
|
|
78
89
|
setLoadingMessage(null);
|
|
79
90
|
}, []);
|
|
91
|
+
var beginStreamTimelineTurn = useCallback(function (turnId) {
|
|
92
|
+
streamDebugLog('orchestrator', 'beginStreamTimelineTurn', {
|
|
93
|
+
turnId: turnId
|
|
94
|
+
});
|
|
95
|
+
accumulatedContentRef.current = '';
|
|
96
|
+
executionStepsRef.current = [];
|
|
97
|
+
resetExecutionStepCounter();
|
|
98
|
+
streamTimelineStore.replace(startStreamTimelineTurn(turnId));
|
|
99
|
+
}, []);
|
|
100
|
+
var syncStreamTimelineContent = useCallback(function (accumulatedText) {
|
|
101
|
+
var next = appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedText);
|
|
102
|
+
streamTimelineStore.replace(next);
|
|
103
|
+
}, []);
|
|
80
104
|
var applyStreamActivity = useCallback(function (activity) {
|
|
81
105
|
var prev = streamActivityRef.current;
|
|
82
106
|
if ((prev === null || prev === void 0 ? void 0 : prev.phase) === activity.phase && canRotateStreamActivityPhase(activity.phase)) {
|
|
@@ -88,30 +112,89 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
88
112
|
streamActivityRef.current = activity;
|
|
89
113
|
setStreamActivity(activity);
|
|
90
114
|
setLoadingMessage(activity.message);
|
|
115
|
+
streamDebugActivity('orchestrator', 'applyStreamActivity', activity, {
|
|
116
|
+
preservedSteps: executionStepsRef.current.length
|
|
117
|
+
});
|
|
91
118
|
}, []);
|
|
92
|
-
var
|
|
119
|
+
var applyStreamActivityPreservingSteps = useCallback(function (activity) {
|
|
120
|
+
var steps = executionStepsRef.current;
|
|
121
|
+
if (steps.length > 0) {
|
|
122
|
+
applyStreamActivity(mergeActivityWithExecutionSteps(activity, steps));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
applyStreamActivity(activity);
|
|
126
|
+
}, [applyStreamActivity]);
|
|
127
|
+
var resetStreamExecutionTrace = useCallback(function () {
|
|
128
|
+
executionStepsRef.current = [];
|
|
129
|
+
resetExecutionStepCounter();
|
|
130
|
+
}, []);
|
|
131
|
+
|
|
132
|
+
/** Marca el rastro como completado y lo mantiene visible (no limpia hasta el próximo turno). */
|
|
133
|
+
var finalizeStreamExecutionTrace = useCallback(function () {
|
|
134
|
+
var _activeStep$message;
|
|
135
|
+
var completedSteps = completeAllExecutionSteps(executionStepsRef.current);
|
|
136
|
+
executionStepsRef.current = completedSteps;
|
|
137
|
+
if (completedSteps.length === 0) {
|
|
138
|
+
clearStreamLoadingState();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
var activeStep = getActiveExecutionStep(completedSteps);
|
|
142
|
+
var activity = mergeActivityWithExecutionSteps({
|
|
143
|
+
phase: 'writing',
|
|
144
|
+
message: (_activeStep$message = activeStep === null || activeStep === void 0 ? void 0 : activeStep.message) !== null && _activeStep$message !== void 0 ? _activeStep$message : getWritingStreamActivity(t).message
|
|
145
|
+
}, completedSteps);
|
|
146
|
+
streamActivityRef.current = activity;
|
|
147
|
+
setStreamActivity(activity);
|
|
148
|
+
setLoadingMessage(null);
|
|
149
|
+
}, [clearStreamLoadingState, t]);
|
|
150
|
+
var handleStreamNodeEvent = useCallback(function (payload, accumulatedText) {
|
|
93
151
|
if (payload.node === 'agent_transfer') {
|
|
152
|
+
streamDebugNode('orchestrator', payload, {
|
|
153
|
+
skipped: 'agent_transfer'
|
|
154
|
+
});
|
|
94
155
|
setLoading(true);
|
|
95
156
|
return;
|
|
96
157
|
}
|
|
97
158
|
if (!payload.message || typeof payload.message !== 'string') {
|
|
159
|
+
streamDebugNode('orchestrator', payload, {
|
|
160
|
+
skipped: 'missing_message'
|
|
161
|
+
});
|
|
98
162
|
return;
|
|
99
163
|
}
|
|
100
164
|
setLoading(true);
|
|
101
165
|
var threadId = typeof payload.thread_id === 'string' ? payload.thread_id : undefined;
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
166
|
+
var hitlContext = hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current;
|
|
167
|
+
streamDebugNode('orchestrator', payload, {
|
|
168
|
+
threadId: threadId,
|
|
169
|
+
hitlContext: hitlContext ? summarizeHitlContext(hitlContext) : null
|
|
170
|
+
});
|
|
171
|
+
var timelineNext = appendNodeToStreamTimeline(streamTimelineStore.getSnapshot(), payload, accumulatedText !== null && accumulatedText !== void 0 ? accumulatedText : accumulatedContentRef.current, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, threadId);
|
|
172
|
+
streamTimelineStore.replace(timelineNext);
|
|
173
|
+
var lastExecution = _toConsumableArray(timelineNext.segments).reverse().find(function (segment) {
|
|
174
|
+
return segment.type === 'execution';
|
|
175
|
+
});
|
|
176
|
+
if ((lastExecution === null || lastExecution === void 0 ? void 0 : lastExecution.type) === 'execution') {
|
|
177
|
+
executionStepsRef.current = lastExecution.steps;
|
|
178
|
+
var activity = resolveHitlNodeStreamActivity(payload.message, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, threadId, payload.node === 'resuming' ? {
|
|
179
|
+
useResumingFallback: true
|
|
180
|
+
} : undefined);
|
|
181
|
+
applyStreamActivity(mergeActivityWithExecutionSteps(activity, lastExecution.steps));
|
|
182
|
+
streamDebugActivity('orchestrator', 'node:activity', activity, {
|
|
183
|
+
executionStepCount: lastExecution.steps.length
|
|
184
|
+
});
|
|
185
|
+
streamDebugLogHitlUiOverlap({
|
|
186
|
+
scope: 'orchestrator',
|
|
187
|
+
source: 'node',
|
|
188
|
+
nodePayload: payload,
|
|
189
|
+
activityMessage: activity.message,
|
|
190
|
+
hitlContext: hitlContext,
|
|
191
|
+
uiSurfaces: ['streamActivity', 'streamTimeline']
|
|
192
|
+
});
|
|
193
|
+
}
|
|
108
194
|
}, [applyStreamActivity, hitlExecutionContextRef, t]);
|
|
109
195
|
var handleStreamWritingStarted = useCallback(function () {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
executionStepsRef.current = steps;
|
|
113
|
-
applyStreamActivity(mergeActivityWithExecutionSteps(writingActivity, steps));
|
|
114
|
-
}, [applyStreamActivity, t]);
|
|
196
|
+
syncStreamTimelineContent(accumulatedContentRef.current);
|
|
197
|
+
}, [syncStreamTimelineContent]);
|
|
115
198
|
useEffect(function () {
|
|
116
199
|
streamActivityRef.current = streamActivity;
|
|
117
200
|
}, [streamActivity]);
|
|
@@ -150,7 +233,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
150
233
|
var handleSSEStream = useCallback(/*#__PURE__*/function () {
|
|
151
234
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
|
|
152
235
|
var _onErrorRef$current, _data$error, _data$error2;
|
|
153
|
-
var pendingContent, throttleTimer, streamSettled, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, _onErrorRef$current2, _t, _t2, _t3, _t4;
|
|
236
|
+
var pendingContent, throttleTimer, streamSettled, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, manualActivity, _onErrorRef$current2, _t, _t2, _t3, _t4;
|
|
154
237
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
155
238
|
while (1) switch (_context.prev = _context.next) {
|
|
156
239
|
case 0:
|
|
@@ -207,6 +290,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
207
290
|
var _onStartWritingRef$cu;
|
|
208
291
|
if (hasStartedWriting) return;
|
|
209
292
|
hasStartedWriting = true;
|
|
293
|
+
streamDebugSse('askMaia', 'writing:started', {
|
|
294
|
+
accumulatedLength: accumulatedContent.length
|
|
295
|
+
});
|
|
210
296
|
setIsWriting(true);
|
|
211
297
|
handleStreamWritingStarted();
|
|
212
298
|
(_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
|
|
@@ -214,6 +300,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
214
300
|
applyStreamChunk = function applyStreamChunk(chunk) {
|
|
215
301
|
if (!chunk) return;
|
|
216
302
|
accumulatedContent = mergeStreamChunk(accumulatedContent, chunk);
|
|
303
|
+
accumulatedContentRef.current = accumulatedContent;
|
|
304
|
+
syncStreamTimelineContent(accumulatedContent);
|
|
217
305
|
emitThrottled(accumulatedContent);
|
|
218
306
|
};
|
|
219
307
|
applyStreamComplete = function applyStreamComplete(payload) {
|
|
@@ -221,6 +309,13 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
221
309
|
if (streamSettled) return;
|
|
222
310
|
streamSettled = true;
|
|
223
311
|
var finalContent = payload.content || accumulatedContent;
|
|
312
|
+
streamDebugSse('askMaia', 'complete', {
|
|
313
|
+
finalContentLength: finalContent.length,
|
|
314
|
+
timeline: summarizeTimelineSnapshot(streamTimelineStore.getSnapshot())
|
|
315
|
+
});
|
|
316
|
+
accumulatedContentRef.current = finalContent;
|
|
317
|
+
syncStreamTimelineContent(finalContent);
|
|
318
|
+
streamTimelineStore.replace(finalizeStreamTimeline(streamTimelineStore.getSnapshot()));
|
|
224
319
|
var sources = payload.sources || null;
|
|
225
320
|
var memorySessionId = payload.memory_session_id || '';
|
|
226
321
|
var attachments = Array.isArray(payload.attachments) ? payload.attachments : null;
|
|
@@ -238,7 +333,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
238
333
|
setData(finalContent);
|
|
239
334
|
setLoading(false);
|
|
240
335
|
setIsWriting(false);
|
|
241
|
-
|
|
336
|
+
setStreamActivity(null);
|
|
337
|
+
setLoadingMessage(null);
|
|
242
338
|
(_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId, resolvedContext);
|
|
243
339
|
};
|
|
244
340
|
case 3:
|
|
@@ -309,13 +405,26 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
309
405
|
}
|
|
310
406
|
return _context.abrupt("continue", 24);
|
|
311
407
|
case 13:
|
|
408
|
+
streamDebugSse('askMaia', eventType, _objectSpread(_objectSpread({
|
|
409
|
+
hasStartedWriting: hasStartedWriting,
|
|
410
|
+
accumulatedLength: accumulatedContent.length
|
|
411
|
+
}, eventType === 'node' ? {
|
|
412
|
+
node: _data.node,
|
|
413
|
+
tool_name: _data.tool_name,
|
|
414
|
+
messagePreview: typeof _data.message === 'string' ? _data.message.slice(0, 80) : undefined
|
|
415
|
+
} : {}), eventType === 'approval_required' ? {
|
|
416
|
+
manualApprovalDetected: _data.manual_approval_detected === true,
|
|
417
|
+
pendingTools: Array.isArray(_data.pending_actions) ? _data.pending_actions.map(function (a) {
|
|
418
|
+
return a.tool_name;
|
|
419
|
+
}) : undefined
|
|
420
|
+
} : {}));
|
|
312
421
|
_t = eventType;
|
|
313
422
|
_context.next = _t === 'thinking' ? 14 : _t === 'token' ? 15 : _t === 'content' ? 16 : _t === 'node' ? 17 : _t === 'complete' ? 18 : _t === 'approval_required' ? 19 : _t === 'error' ? 20 : 21;
|
|
314
423
|
break;
|
|
315
424
|
case 14:
|
|
316
425
|
if (!hasStartedWriting) {
|
|
317
426
|
setLoading(true);
|
|
318
|
-
|
|
427
|
+
applyStreamActivityPreservingSteps({
|
|
319
428
|
phase: 'thinking',
|
|
320
429
|
message: getThinkingLoadingMessage(0, t)
|
|
321
430
|
});
|
|
@@ -347,6 +456,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
347
456
|
flushPending();
|
|
348
457
|
setIsWriting(false);
|
|
349
458
|
isManualApproval = _data.manual_approval_detected === true;
|
|
459
|
+
streamDebugApproval('orchestrator', 'approval_required', _data, {
|
|
460
|
+
isManualApproval: isManualApproval,
|
|
461
|
+
willClearLoadingState: !isManualApproval
|
|
462
|
+
});
|
|
350
463
|
if (!isManualApproval) {
|
|
351
464
|
streamSettled = true;
|
|
352
465
|
setLoading(false);
|
|
@@ -355,7 +468,15 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
355
468
|
(_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
|
|
356
469
|
if (isManualApproval && Array.isArray(_data.pending_actions) && _data.pending_actions.length > 0) {
|
|
357
470
|
setLoading(true);
|
|
358
|
-
|
|
471
|
+
manualActivity = resolveInitialHitlStreamActivity(t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current);
|
|
472
|
+
applyStreamActivity(manualActivity);
|
|
473
|
+
streamDebugLogHitlUiOverlap({
|
|
474
|
+
scope: 'orchestrator',
|
|
475
|
+
source: 'initialActivity',
|
|
476
|
+
activityMessage: manualActivity.message,
|
|
477
|
+
hitlContext: hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current,
|
|
478
|
+
uiSurfaces: ['streamActivity', 'approvalBox']
|
|
479
|
+
});
|
|
359
480
|
}
|
|
360
481
|
return _context.abrupt("continue", 22);
|
|
361
482
|
case 20:
|
|
@@ -426,7 +547,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
426
547
|
return function (_x) {
|
|
427
548
|
return _ref2.apply(this, arguments);
|
|
428
549
|
};
|
|
429
|
-
}(), [
|
|
550
|
+
}(), [applyStreamActivityPreservingSteps, clearStreamLoadingState, handleStreamNodeEvent, handleStreamWritingStarted, syncStreamTimelineContent, t]);
|
|
430
551
|
var askMaia = /*#__PURE__*/function () {
|
|
431
552
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
|
|
432
553
|
var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, taskId, taskName, faqId, agentSuggestionId, fuaId, scId, agentEntity, agentType, contextMessage, contextData, _attachments$length, _abortControllerRef$c, initialActivity, response, _onErrorRef$current3, _t5;
|
|
@@ -439,6 +560,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
439
560
|
setIsWriting(false);
|
|
440
561
|
setData(null);
|
|
441
562
|
activityMessageIndexRef.current = 0;
|
|
563
|
+
clearStreamLoadingState();
|
|
564
|
+
beginStreamTimelineTurn(messageId);
|
|
442
565
|
initialActivity = getInitialStreamActivity(t, {
|
|
443
566
|
isWebSearchActive: isWebSearchActive,
|
|
444
567
|
isDeepSearchActive: isDeepSearchActive,
|
|
@@ -448,6 +571,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
448
571
|
applyStreamActivity(initialActivity);
|
|
449
572
|
isStoppedRef.current = false; // Resetear flag al iniciar nueva petición
|
|
450
573
|
|
|
574
|
+
streamDebugLog('orchestrator', 'askMaia:start', {
|
|
575
|
+
messageId: messageId,
|
|
576
|
+
chatId: chatId
|
|
577
|
+
});
|
|
451
578
|
abortControllerRef.current = new AbortController();
|
|
452
579
|
_context2.next = 2;
|
|
453
580
|
return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
@@ -596,7 +723,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
596
723
|
handleSSEStream: handleSSEStream,
|
|
597
724
|
// Exponer para poder usarlo en continue-thread
|
|
598
725
|
handleStreamNodeEvent: handleStreamNodeEvent,
|
|
599
|
-
handleStreamWritingStarted: handleStreamWritingStarted
|
|
726
|
+
handleStreamWritingStarted: handleStreamWritingStarted,
|
|
727
|
+
beginStreamTimelineTurn: beginStreamTimelineTurn,
|
|
728
|
+
syncStreamTimelineContent: syncStreamTimelineContent,
|
|
729
|
+
finalizeStreamExecutionTrace: finalizeStreamExecutionTrace,
|
|
730
|
+
resetStreamExecutionTrace: resetStreamExecutionTrace
|
|
600
731
|
};
|
|
601
732
|
};
|
|
602
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiZmluYWxpemVFeGVjdXRpb25TdGVwc0ZvcldyaXRpbmciLCJtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzIiwicHVzaEV4ZWN1dGlvblN0ZXBGcm9tTm9kZSIsInJlc2V0RXhlY3V0aW9uU3RlcENvdW50ZXIiLCJpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQiLCJtZXJnZVN0cmVhbUNodW5rIiwidXNlT3JjaGVzdHJhdG9yU3RyZWFtIiwiX3JlZiIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0YXJ0V3JpdGluZyIsIm9uU3RvcCIsIm9uRXJyb3IiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzdHJlYW1BY3Rpdml0eSIsInNldFN0cmVhbUFjdGl2aXR5IiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwiYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYiLCJzdHJlYW1BY3Rpdml0eVJlZiIsImV4ZWN1dGlvblN0ZXBzUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSIsImFwcGx5U3RyZWFtQWN0aXZpdHkiLCJhY3Rpdml0eSIsInByZXYiLCJwaGFzZSIsIm1lc3NhZ2UiLCJoYW5kbGVTdHJlYW1Ob2RlRXZlbnQiLCJwYXlsb2FkIiwibm9kZSIsInRocmVhZElkIiwidGhyZWFkX2lkIiwidW5kZWZpbmVkIiwic3RlcHMiLCJ1c2VSZXN1bWluZ0ZhbGxiYWNrIiwiaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQiLCJ3cml0aW5nQWN0aXZpdHkiLCJpbnRlcnZhbElkIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJfcHJldiRleGVjdXRpb25TdGVwcyIsImFkdmFuY2VkIiwibmV4dEluZGV4IiwibWVyZ2VkQWN0aXZpdHkiLCJfb2JqZWN0U3ByZWFkIiwiZXhlY3V0aW9uU3RlcHMiLCJsZW5ndGgiLCJjbGVhckludGVydmFsIiwiaGFuZGxlU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwiX29uRXJyb3JSZWYkY3VycmVudCIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwic3RyZWFtU2V0dGxlZCIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsImVuc3VyZVdyaXRpbmdTdGFydGVkIiwiYXBwbHlTdHJlYW1DaHVuayIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiX2RhdGEiLCJjaHVuayIsIl9jaHVuayIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsImlzTWFudWFsQXBwcm92YWwiLCJfb25FcnJvclJlZiRjdXJyZW50MiIsIl90IiwiX3QyIiwiX3QzIiwiX3Q0Iiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsImNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiX29uU3RyZWFtVXBkYXRlUmVmJGN1IiwidG9FbWl0IiwiY2FsbCIsImNsZWFyVGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdTIiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsIl9vblN0YXJ0V3JpdGluZ1JlZiRjdSIsIl9wYXlsb2FkJGFnZW50X2lkIiwiX3N1YmFnZW50UmF3JHJlc29sdmVkIiwiX29uRmluaXNoU3RyZWFtUmVmJGN1IiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwiYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiY29tcGxldGVkQWdlbnRJZCIsIlN0cmluZyIsInRyaW0iLCJzdWJhZ2VudFJhdyIsInN1YmFnZW50IiwicmVzb2x2ZWRDb250ZXh0IiwicmVzb2x2ZWRfY29udGV4dCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdfYWN0aW9ucyIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsImlucHV0Iiwic2lnbmFsIiwiX3gyIiwic3RvcFN0cmVhbWluZyIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5IiwicmVzZXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcywgUmVzb2x2ZWRDb250ZXh0IH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtRXhlY3V0aW9uU3RlcCwgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHtcbiAgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMsXG4gIGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UsXG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQge1xuICBmaW5hbGl6ZUV4ZWN1dGlvblN0ZXBzRm9yV3JpdGluZyxcbiAgbWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyxcbiAgcHVzaEV4ZWN1dGlvblN0ZXBGcm9tTm9kZSxcbiAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtRXhlY3V0aW9uU3RlcHMnXG5pbXBvcnQgeyBpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQsIG1lcmdlU3RyZWFtQ2h1bmsgfSBmcm9tICcuLi8uLi91dGlscy9zc2VTdHJlYW1Db250ZW50J1xuXG50eXBlIFN1YmFnZW50UmF3ID0geyBuYW1lPzogc3RyaW5nOyByZXNvbHZlZF9jb250ZXh0PzogUmVzb2x2ZWRDb250ZXh0IHwgbnVsbCB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgdXNlT3JjaGVzdHJhdG9yU3RyZWFtID0gKHtcbiAgb25TdHJlYW1VcGRhdGUsXG4gIG9uRmluaXNoU3RyZWFtLFxuICBvblN0YXJ0V3JpdGluZyxcbiAgb25TdG9wLFxuICBvbkVycm9yLFxuICBvbkFwcHJvdmFsUmVxdWlyZWQsXG4gIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLFxufTogVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01lc3NhZ2UsIHNldExvYWRpbmdNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzdHJlYW1BY3Rpdml0eSwgc2V0U3RyZWFtQWN0aXZpdHldID0gdXNlU3RhdGU8U3RyZWFtQWN0aXZpdHkgfCBudWxsPihudWxsKVxuICBjb25zdCBhYm9ydENvbnRyb2xsZXJSZWYgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNTdG9wcGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzdHJlYW1BY3Rpdml0eVJlZiA9IHVzZVJlZjxTdHJlYW1BY3Rpdml0eSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGV4ZWN1dGlvblN0ZXBzUmVmID0gdXNlUmVmPFN0cmVhbUV4ZWN1dGlvblN0ZXBbXT4oW10pXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCA9IFtdXG4gICAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcigpXG4gICAgc2V0U3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBhcHBseVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSkgPT4ge1xuICAgIGNvbnN0IHByZXYgPSBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50XG4gICAgaWYgKHByZXY/LnBoYXNlID09PSBhY3Rpdml0eS5waGFzZSAmJiBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKGFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwcmV2Py5waGFzZSAhPT0gYWN0aXZpdHkucGhhc2UpIHtcbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgfVxuICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBhY3Rpdml0eVxuICAgIHNldFN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIHNldExvYWRpbmdNZXNzYWdlKGFjdGl2aXR5Lm1lc3NhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbU5vZGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkKSA9PiB7XG4gICAgICBpZiAocGF5bG9hZC5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoIXBheWxvYWQubWVzc2FnZSB8fCB0eXBlb2YgcGF5bG9hZC5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgY29uc3QgdGhyZWFkSWQgPSB0eXBlb2YgcGF5bG9hZC50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gcGF5bG9hZC50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHN0ZXBzID0gcHVzaEV4ZWN1dGlvblN0ZXBGcm9tTm9kZShcbiAgICAgICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgdCxcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQsXG4gICAgICAgIHRocmVhZElkXG4gICAgICApXG4gICAgICBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50ID0gc3RlcHNcblxuICAgICAgY29uc3QgYWN0aXZpdHkgPSByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgcGF5bG9hZC5tZXNzYWdlLFxuICAgICAgICB0LFxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudCxcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIHBheWxvYWQubm9kZSA9PT0gJ3Jlc3VtaW5nJyA/IHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9IDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KG1lcmdlQWN0aXZpdHlXaXRoRXhlY3V0aW9uU3RlcHMoYWN0aXZpdHksIHN0ZXBzKSlcbiAgICB9LFxuICAgIFthcHBseVN0cmVhbUFjdGl2aXR5LCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVdyaXRpbmdTdGFydGVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHdyaXRpbmdBY3Rpdml0eSA9IGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KVxuICAgIGNvbnN0IHN0ZXBzID0gZmluYWxpemVFeGVjdXRpb25TdGVwc0ZvcldyaXRpbmcoZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCwgd3JpdGluZ0FjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCA9IHN0ZXBzXG4gICAgYXBwbHlTdHJlYW1BY3Rpdml0eShtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzKHdyaXRpbmdBY3Rpdml0eSwgc3RlcHMpKVxuICB9LCBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gc3RyZWFtQWN0aXZpdHlcbiAgfSwgW3N0cmVhbUFjdGl2aXR5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNMb2FkaW5nIHx8IGlzV3JpdGluZyB8fCAhc3RyZWFtQWN0aXZpdHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKCFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHN0cmVhbUFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcHJldiA9IHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnRcbiAgICAgIGlmICghcHJldiB8fCAhY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShwcmV2LnBoYXNlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICghY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShwcmV2LnBoYXNlLCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFkdmFuY2VkID0gYWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShwcmV2LCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50LCB0KVxuICAgICAgaWYgKCFhZHZhbmNlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSBhZHZhbmNlZC5uZXh0SW5kZXhcbiAgICAgIGNvbnN0IG1lcmdlZEFjdGl2aXR5ID0ge1xuICAgICAgICAuLi5hZHZhbmNlZC5hY3Rpdml0eSxcbiAgICAgICAgLi4uKHByZXYuZXhlY3V0aW9uU3RlcHM/Lmxlbmd0aCA/IHsgZXhlY3V0aW9uU3RlcHM6IHByZXYuZXhlY3V0aW9uU3RlcHMgfSA6IHt9KSxcbiAgICAgIH1cbiAgICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBtZXJnZWRBY3Rpdml0eVxuICAgICAgc2V0U3RyZWFtQWN0aXZpdHkobWVyZ2VkQWN0aXZpdHkpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShtZXJnZWRBY3Rpdml0eS5tZXNzYWdlKVxuICAgIH0sIEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpXG4gIH0sIFtpc0xvYWRpbmcsIGlzV3JpdGluZywgc3RyZWFtQWN0aXZpdHk/LnBoYXNlLCB0XSlcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBUaW1lLXRocm90dGxlOiBldml0YSBlbWl0aXIgb25TdHJlYW1VcGRhdGUgbcOhcyBkZSB1bmEgdmV6IGNhZGEgfjE2bXMuXG4gICAgICAvLyBVc2Ftb3MgdGltZXIgcGFyYSBxdWUgZWwgc3RyZWFtIHNpZ2EgcGludGFuZG8gYXVucXVlIHJBRiBlc3TDqSB0aHJvdHRsZWFkby5cbiAgICAgIC8vIE5vdGE6IG5vIHRvY2Ftb3MgZWwgc3RhdGUgYGRhdGFgIGVuIGVsIGhvdCBwYXRoIChzb2xvIHNlIGFjdHVhbGl6YSBlblxuICAgICAgLy8gYGNvbXBsZXRlYC9yZXNldHMpIHBhcmEgbm8gcmUtcmVuZGVyaXphciBhIGxvcyBjb25zdW1pZG9yZXMgZGVsIGhvb2tcbiAgICAgIC8vIGVuIGNhZGEgZnJhbWU7IGVsIHRleHRvIGVuIHZpdm8gdmlhamEgcG9yIGVsIHN0cmVhbWluZ1N0b3JlLlxuICAgICAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgICAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyZWFtU2V0dGxlZCA9IGZhbHNlXG4gICAgICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgICAgICBpZiAoc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTYpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50Py4odG9FbWl0LCBudWxsLCAnJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICAgICAgc2V0SXNXcml0aW5nKHRydWUpXG4gICAgICAgICAgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgICAgICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgaWYgKHN0cmVhbVNldHRsZWQpIHJldHVyblxuICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG5cbiAgICAgICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAocGF5bG9hZC5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICAgICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgICAgY29uc3Qgc3ViYWdlbnRSYXcgPSBwYXlsb2FkLnN1YmFnZW50IGFzIFN1YmFnZW50UmF3XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZXh0ID0gc3ViYWdlbnRSYXc/LnJlc29sdmVkX2NvbnRleHQgPz8gbnVsbFxuICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgc2V0RGF0YShmaW5hbENvbnRlbnQpXG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICAgIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQ/LihcbiAgICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgaWYgKHN0cmVhbVNldHRsZWQgJiYgZXZlbnRUeXBlICE9PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOlxuICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOiAndGhpbmtpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UoMCwgdCksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAndG9rZW4nOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdHJlYW1Ob2RlRXZlbnQoZGF0YSBhcyBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdhcHByb3ZhbF9yZXF1aXJlZCc6IHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbCBhcHByb3ZhbDogZWwgU1NFIHNpZ3VlIGNvbiBub2RlL3Rva2VuL2NvbXBsZXRlICh5IHB1ZWRlXG4gICAgICAgICAgICAgICAgICAvLyBlbmNhZGVuYXIgbcOhcyBhcHByb3ZhbF9yZXF1aXJlZCkuIFNvbG8gZWwgYXBwcm92YWwgXCJwYXVzYWRvXCJcbiAgICAgICAgICAgICAgICAgIC8vIChib3TDs24pIGVzIHRlcm1pbmFsIHBhcmEgZXN0ZSBzdHJlYW0uXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYW51YWxBcHByb3ZhbCA9IGRhdGEubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICBpZiAoIWlzTWFudWFsQXBwcm92YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQ/LihkYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBpZiAoaXNNYW51YWxBcHByb3ZhbCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShyZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudCkpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBoYXkgZXJyb3JcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKGRhdGEuZXJyb3I/LnR5cGUsIGRhdGEuZXJyb3I/Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBTU0UgZXZlbnQgdHlwZTonLCBldmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcblxuICAgICAgICAvLyBTb2xvIGVqZWN1dGFyIG9uRXJyb3Igc2kgbm8gZnVlIHVuIHN0b3AgaW50ZW5jaW9uYWxcbiAgICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgaWYgKCFzdHJlYW1TZXR0bGVkKSB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUsIGhhbmRsZVN0cmVhbU5vZGVFdmVudCwgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQsIHRdXG4gIClcblxuICBjb25zdCBhc2tNYWlhID0gYXN5bmMgKHtcbiAgICBtZXNzYWdlLFxuICAgIGhpc3RvcnksXG4gICAgcHJvamVjdElkLFxuICAgIGxhbmcsXG4gICAgdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBjb21wYW55SWQsXG4gICAgY2hhdElkLFxuICAgIG1lc3NhZ2VJZCxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICAgIGZlZUlkLFxuICAgIGFnZW50TmFtZSxcbiAgICBhZ2VudElkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9qZWN0TmFtZSxcbiAgICB0YXNrSWQsXG4gICAgdGFza05hbWUsXG4gICAgZmFxSWQsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgZnVhSWQsXG4gICAgc2NJZCxcbiAgICBhZ2VudEVudGl0eSxcbiAgICBhZ2VudFR5cGUsXG4gICAgY29udGV4dE1lc3NhZ2UsXG4gICAgY29udGV4dERhdGEsXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gICAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gICAgbGFuZzogc3RyaW5nXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmdcbiAgICBsYXN0TmFtZT86IHN0cmluZ1xuICAgIGNvbXBhbnlJZDogc3RyaW5nXG4gICAgY2hhdElkOiBzdHJpbmdcbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGNsaWVudElkPzogbnVtYmVyXG4gICAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAgIGZlZUlkPzogbnVtYmVyXG4gICAgYWdlbnROYW1lOiBzdHJpbmdcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgICB0YXNrSWQ/OiBudW1iZXJcbiAgICB0YXNrTmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gICAgYWdlbnRUeXBlPzogQWdlbnRUeXBlXG4gICAgY29udGV4dE1lc3NhZ2U/OiBDb250ZXh0TWVzc2FnZVxuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXREYXRhKG51bGwpXG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgICAgY29uc3QgaW5pdGlhbEFjdGl2aXR5ID0gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIHtcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHM/Lmxlbmd0aCksXG4gICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IGF0dGFjaG1lbnRzPy5sZW5ndGggPz8gMCxcbiAgICAgIH0pXG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIC4uLihmZWVJZCAhPSBudWxsID8geyBmZWVJZCB9IDoge30pLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRhc2tJZCAhPSBudWxsID8geyB0YXNrSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza05hbWUgPyB7IHRhc2tOYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZnVhSWQgPyB7IGZ1YUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRUeXBlICE9IG51bGwgPyB7IGFnZW50VHlwZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50Py5zaWduYWxcbiAgICAgIClcblxuICAgICAgYXdhaXQgaGFuZGxlU1NFU3RyZWFtKHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaSBmdWUgdW4gYWJvcnQgaW50ZW5jaW9uYWwgKHN0b3AgbWFudWFsIG8gY2FtYmlvIGRlIGNoYXQpLCBubyBkaXNwYXJhciBvbkVycm9yXG4gICAgICAvLyBwb3JxdWUgZXNvIGluc2VydGEgdW4gXCJtZW5zYWplIGRlIGVycm9yXCIgZW4gZWwgY2hhdCBhbCBxdWUgYWNhYmFtb3MgZGUgbmF2ZWdhci5cbiAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgfVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdG9wU3RyZWFtaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZV0pXG5cbiAgLyoqXG4gICAqIEFib3J0YSBlbCBzdHJlYW0gZW4gY3Vyc28gKHNpIGV4aXN0ZSkgc2luIGRpc3BhcmFyIGBvblN0b3BgLlxuICAgKiDDmnNlbG8gZW4gY2Fzb3MgZG9uZGUgbm8gcXVlcmVtb3MgYWdyZWdhciBlbCBtZW5zYWplIGRlIFwiY2FuY2VsYWRvXCJcbiAgICogKHBvciBlamVtcGxvLCBhbCBjYW1iaWFyIGRlIGNoYXQpLlxuICAgKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvLyBDbGVhbnVwIGFsIGRlc21vbnRhcjogc2kgcXVlZGEgdW4gc3RyZWFtIGFjdGl2bywgYWJvcnRhcmxvIHBhcmEgZXZpdGFyXG4gIC8vIHF1ZSBpbnRlbnRlIGFjdHVhbGl6YXIgZXN0YWRvIGVuIHVuIGNvbXBvbmVudGUgeWEgZGVzbW9udGFkbyAoZnVnYXMgZGVcbiAgLy8gbWVtb3JpYSB5IHdhcm5pbmdzKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKFxuICAgIChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIWFjdGl2aXR5KSB7XG4gICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXVxuICApXG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0RGF0YShudWxsKVxuICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFza01haWEsXG4gICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICByZXNldCxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICAgIGFib3J0U3RyZWFtU2lsZW50bHksXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCxcbiAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsUUFBUSxFQUFFQyxXQUFXLEVBQUVD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
|
|
733
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiY29tcGxldGVBbGxFeGVjdXRpb25TdGVwcyIsImdldEFjdGl2ZUV4ZWN1dGlvblN0ZXAiLCJtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzIiwicmVzZXRFeGVjdXRpb25TdGVwQ291bnRlciIsImFwcGVuZENvbnRlbnRUb1N0cmVhbVRpbWVsaW5lIiwiYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUiLCJmaW5hbGl6ZVN0cmVhbVRpbWVsaW5lIiwic3RhcnRTdHJlYW1UaW1lbGluZVR1cm4iLCJzdHJlYW1UaW1lbGluZVN0b3JlIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInN0cmVhbURlYnVnQWN0aXZpdHkiLCJzdHJlYW1EZWJ1Z0FwcHJvdmFsIiwic3RyZWFtRGVidWdMb2ciLCJzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAiLCJzdHJlYW1EZWJ1Z05vZGUiLCJzdHJlYW1EZWJ1Z1NzZSIsInN1bW1hcml6ZUhpdGxDb250ZXh0Iiwic3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdCIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwic3RyZWFtQWN0aXZpdHlSZWYiLCJleGVjdXRpb25TdGVwc1JlZiIsImFjY3VtdWxhdGVkQ29udGVudFJlZiIsIm9uU3RyZWFtVXBkYXRlUmVmIiwib25GaW5pc2hTdHJlYW1SZWYiLCJvblN0YXJ0V3JpdGluZ1JlZiIsIm9uU3RvcFJlZiIsIm9uRXJyb3JSZWYiLCJvbkFwcHJvdmFsUmVxdWlyZWRSZWYiLCJjdXJyZW50IiwiY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUiLCJwcmV2aW91c1R1cm5JZCIsImdldFNuYXBzaG90IiwidHVybklkIiwiZXhlY3V0aW9uU3RlcENvdW50IiwibGVuZ3RoIiwiY2xlYXIiLCJiZWdpblN0cmVhbVRpbWVsaW5lVHVybiIsInJlcGxhY2UiLCJzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50IiwiYWNjdW11bGF0ZWRUZXh0IiwibmV4dCIsImFwcGx5U3RyZWFtQWN0aXZpdHkiLCJhY3Rpdml0eSIsInByZXYiLCJwaGFzZSIsIm1lc3NhZ2UiLCJwcmVzZXJ2ZWRTdGVwcyIsImFwcGx5U3RyZWFtQWN0aXZpdHlQcmVzZXJ2aW5nU3RlcHMiLCJzdGVwcyIsInJlc2V0U3RyZWFtRXhlY3V0aW9uVHJhY2UiLCJmaW5hbGl6ZVN0cmVhbUV4ZWN1dGlvblRyYWNlIiwiX2FjdGl2ZVN0ZXAkbWVzc2FnZSIsImNvbXBsZXRlZFN0ZXBzIiwiYWN0aXZlU3RlcCIsImhhbmRsZVN0cmVhbU5vZGVFdmVudCIsInBheWxvYWQiLCJub2RlIiwic2tpcHBlZCIsInRocmVhZElkIiwidGhyZWFkX2lkIiwidW5kZWZpbmVkIiwiaGl0bENvbnRleHQiLCJ0aW1lbGluZU5leHQiLCJsYXN0RXhlY3V0aW9uIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwic2VnbWVudHMiLCJyZXZlcnNlIiwiZmluZCIsInNlZ21lbnQiLCJ0eXBlIiwidXNlUmVzdW1pbmdGYWxsYmFjayIsInNjb3BlIiwic291cmNlIiwibm9kZVBheWxvYWQiLCJhY3Rpdml0eU1lc3NhZ2UiLCJ1aVN1cmZhY2VzIiwiaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQiLCJpbnRlcnZhbElkIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJfcHJldiRleGVjdXRpb25TdGVwcyIsImFkdmFuY2VkIiwibmV4dEluZGV4IiwibWVyZ2VkQWN0aXZpdHkiLCJfb2JqZWN0U3ByZWFkIiwiZXhlY3V0aW9uU3RlcHMiLCJjbGVhckludGVydmFsIiwiaGFuZGxlU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwiX29uRXJyb3JSZWYkY3VycmVudCIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwic3RyZWFtU2V0dGxlZCIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsImVuc3VyZVdyaXRpbmdTdGFydGVkIiwiYXBwbHlTdHJlYW1DaHVuayIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiX2RhdGEiLCJjaHVuayIsIl9jaHVuayIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsImlzTWFudWFsQXBwcm92YWwiLCJtYW51YWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJjb250ZW50Iiwic2V0VGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UyIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJhY2N1bXVsYXRlZExlbmd0aCIsIl9wYXlsb2FkJGFnZW50X2lkIiwiX3N1YmFnZW50UmF3JHJlc29sdmVkIiwiX29uRmluaXNoU3RyZWFtUmVmJGN1IiwiZmluYWxDb250ZW50IiwiZmluYWxDb250ZW50TGVuZ3RoIiwidGltZWxpbmUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJKU09OIiwicGFyc2UiLCJ0b29sX25hbWUiLCJtZXNzYWdlUHJldmlldyIsInNsaWNlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdUb29scyIsInBlbmRpbmdfYWN0aW9ucyIsIm1hcCIsImEiLCJ3aWxsQ2xlYXJMb2FkaW5nU3RhdGUiLCJjb25zb2xlIiwiZXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsImlucHV0Iiwic2lnbmFsIiwiX3gyIiwic3RvcFN0cmVhbWluZyIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5IiwicmVzZXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcywgUmVzb2x2ZWRDb250ZXh0IH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtRXhlY3V0aW9uU3RlcCwgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHtcbiAgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMsXG4gIGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UsXG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQge1xuICBjb21wbGV0ZUFsbEV4ZWN1dGlvblN0ZXBzLFxuICBmaW5hbGl6ZUV4ZWN1dGlvblN0ZXBzRm9yV3JpdGluZyxcbiAgZ2V0QWN0aXZlRXhlY3V0aW9uU3RlcCxcbiAgbWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyxcbiAgcHVzaEV4ZWN1dGlvblN0ZXBGcm9tTm9kZSxcbiAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtRXhlY3V0aW9uU3RlcHMnXG5pbXBvcnQge1xuICBhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZSxcbiAgYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUsXG4gIGZpbmFsaXplU3RyZWFtVGltZWxpbmUsXG4gIHN0YXJ0U3RyZWFtVGltZWxpbmVUdXJuLFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1UaW1lbGluZSdcbmltcG9ydCB7IHN0cmVhbVRpbWVsaW5lU3RvcmUgfSBmcm9tICcuLi91c2VTdHJlYW1UaW1lbGluZS9zdHJlYW1UaW1lbGluZVN0b3JlJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7XG4gIHN0cmVhbURlYnVnQWN0aXZpdHksXG4gIHN0cmVhbURlYnVnQXBwcm92YWwsXG4gIHN0cmVhbURlYnVnTG9nLFxuICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAsXG4gIHN0cmVhbURlYnVnTm9kZSxcbiAgc3RyZWFtRGVidWdTc2UsXG4gIHN1bW1hcml6ZUhpdGxDb250ZXh0LFxuICBzdW1tYXJpemVUaW1lbGluZVNuYXBzaG90LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1EZWJ1Z0xvZydcblxudHlwZSBTdWJhZ2VudFJhdyA9IHsgbmFtZT86IHN0cmluZzsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfSB8IG51bGwgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxuICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3RyZWFtQWN0aXZpdHksIHNldFN0cmVhbUFjdGl2aXR5XSA9IHVzZVN0YXRlPFN0cmVhbUFjdGl2aXR5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc3RyZWFtQWN0aXZpdHlSZWYgPSB1c2VSZWY8U3RyZWFtQWN0aXZpdHkgfCBudWxsPihudWxsKVxuICBjb25zdCBleGVjdXRpb25TdGVwc1JlZiA9IHVzZVJlZjxTdHJlYW1FeGVjdXRpb25TdGVwW10+KFtdKVxuICBjb25zdCBhY2N1bXVsYXRlZENvbnRlbnRSZWYgPSB1c2VSZWYoJycpXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdHJlYW1EZWJ1Z0xvZygnb3JjaGVzdHJhdG9yJywgJ2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlJywge1xuICAgICAgcHJldmlvdXNUdXJuSWQ6IHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKS50dXJuSWQsXG4gICAgICBleGVjdXRpb25TdGVwQ291bnQ6IGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQubGVuZ3RoLFxuICAgIH0pXG4gICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQgPSBbXVxuICAgIGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50ID0gJydcbiAgICByZXNldEV4ZWN1dGlvblN0ZXBDb3VudGVyKClcbiAgICBzdHJlYW1UaW1lbGluZVN0b3JlLmNsZWFyKClcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGJlZ2luU3RyZWFtVGltZWxpbmVUdXJuID0gdXNlQ2FsbGJhY2soKHR1cm5JZDogc3RyaW5nKSA9PiB7XG4gICAgc3RyZWFtRGVidWdMb2coJ29yY2hlc3RyYXRvcicsICdiZWdpblN0cmVhbVRpbWVsaW5lVHVybicsIHsgdHVybklkIH0pXG4gICAgYWNjdW11bGF0ZWRDb250ZW50UmVmLmN1cnJlbnQgPSAnJ1xuICAgIGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQgPSBbXVxuICAgIHJlc2V0RXhlY3V0aW9uU3RlcENvdW50ZXIoKVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShzdGFydFN0cmVhbVRpbWVsaW5lVHVybih0dXJuSWQpKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50ID0gdXNlQ2FsbGJhY2soKGFjY3VtdWxhdGVkVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGFwcGVuZENvbnRlbnRUb1N0cmVhbVRpbWVsaW5lKHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSwgYWNjdW11bGF0ZWRUZXh0KVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShuZXh0KVxuICB9LCBbXSlcblxuICBjb25zdCBhcHBseVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSkgPT4ge1xuICAgIGNvbnN0IHByZXYgPSBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50XG4gICAgaWYgKHByZXY/LnBoYXNlID09PSBhY3Rpdml0eS5waGFzZSAmJiBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKGFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwcmV2Py5waGFzZSAhPT0gYWN0aXZpdHkucGhhc2UpIHtcbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgfVxuICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBhY3Rpdml0eVxuICAgIHNldFN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIHNldExvYWRpbmdNZXNzYWdlKGFjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgc3RyZWFtRGVidWdBY3Rpdml0eSgnb3JjaGVzdHJhdG9yJywgJ2FwcGx5U3RyZWFtQWN0aXZpdHknLCBhY3Rpdml0eSwge1xuICAgICAgcHJlc2VydmVkU3RlcHM6IGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQubGVuZ3RoLFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQWN0aXZpdHlQcmVzZXJ2aW5nU3RlcHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5KSA9PiB7XG4gICAgICBjb25zdCBzdGVwcyA9IGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnRcbiAgICAgIGlmIChzdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkobWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyhhY3Rpdml0eSwgc3RlcHMpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eV1cbiAgKVxuXG4gIGNvbnN0IHJlc2V0U3RyZWFtRXhlY3V0aW9uVHJhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCA9IFtdXG4gICAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcigpXG4gIH0sIFtdKVxuXG4gIC8qKiBNYXJjYSBlbCByYXN0cm8gY29tbyBjb21wbGV0YWRvIHkgbG8gbWFudGllbmUgdmlzaWJsZSAobm8gbGltcGlhIGhhc3RhIGVsIHByw7N4aW1vIHR1cm5vKS4gKi9cbiAgY29uc3QgZmluYWxpemVTdHJlYW1FeGVjdXRpb25UcmFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjb21wbGV0ZWRTdGVwcyA9IGNvbXBsZXRlQWxsRXhlY3V0aW9uU3RlcHMoZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudClcbiAgICBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50ID0gY29tcGxldGVkU3RlcHNcblxuICAgIGlmIChjb21wbGV0ZWRTdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZVN0ZXAgPSBnZXRBY3RpdmVFeGVjdXRpb25TdGVwKGNvbXBsZXRlZFN0ZXBzKVxuICAgIGNvbnN0IGFjdGl2aXR5ID0gbWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyhcbiAgICAgIHtcbiAgICAgICAgcGhhc2U6ICd3cml0aW5nJyxcbiAgICAgICAgbWVzc2FnZTogYWN0aXZlU3RlcD8ubWVzc2FnZSA/PyBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZWRTdGVwc1xuICAgIClcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gYWN0aXZpdHlcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICB9LCBbY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbU5vZGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLCBhY2N1bXVsYXRlZFRleHQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChwYXlsb2FkLm5vZGUgPT09ICdhZ2VudF90cmFuc2ZlcicpIHtcbiAgICAgICAgc3RyZWFtRGVidWdOb2RlKCdvcmNoZXN0cmF0b3InLCBwYXlsb2FkLCB7IHNraXBwZWQ6ICdhZ2VudF90cmFuc2ZlcicgfSlcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICghcGF5bG9hZC5tZXNzYWdlIHx8IHR5cGVvZiBwYXlsb2FkLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmVhbURlYnVnTm9kZSgnb3JjaGVzdHJhdG9yJywgcGF5bG9hZCwgeyBza2lwcGVkOiAnbWlzc2luZ19tZXNzYWdlJyB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgY29uc3QgdGhyZWFkSWQgPSB0eXBlb2YgcGF5bG9hZC50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gcGF5bG9hZC50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0ID0gaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnRcbiAgICAgIHN0cmVhbURlYnVnTm9kZSgnb3JjaGVzdHJhdG9yJywgcGF5bG9hZCwge1xuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgaGl0bENvbnRleHQ6IGhpdGxDb250ZXh0ID8gc3VtbWFyaXplSGl0bENvbnRleHQoaGl0bENvbnRleHQpIDogbnVsbCxcbiAgICAgIH0pXG4gICAgICBjb25zdCB0aW1lbGluZU5leHQgPSBhcHBlbmROb2RlVG9TdHJlYW1UaW1lbGluZShcbiAgICAgICAgc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICBhY2N1bXVsYXRlZFRleHQgPz8gYWNjdW11bGF0ZWRDb250ZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50LFxuICAgICAgICB0aHJlYWRJZFxuICAgICAgKVxuICAgICAgc3RyZWFtVGltZWxpbmVTdG9yZS5yZXBsYWNlKHRpbWVsaW5lTmV4dClcblxuICAgICAgY29uc3QgbGFzdEV4ZWN1dGlvbiA9IFsuLi50aW1lbGluZU5leHQuc2VnbWVudHNdLnJldmVyc2UoKS5maW5kKHNlZ21lbnQgPT4gc2VnbWVudC50eXBlID09PSAnZXhlY3V0aW9uJylcbiAgICAgIGlmIChsYXN0RXhlY3V0aW9uPy50eXBlID09PSAnZXhlY3V0aW9uJykge1xuICAgICAgICBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50ID0gbGFzdEV4ZWN1dGlvbi5zdGVwc1xuICAgICAgICBjb25zdCBhY3Rpdml0eSA9IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgIHBheWxvYWQubWVzc2FnZSxcbiAgICAgICAgICB0LFxuICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50LFxuICAgICAgICAgIHRocmVhZElkLFxuICAgICAgICAgIHBheWxvYWQubm9kZSA9PT0gJ3Jlc3VtaW5nJyA/IHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9IDogdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzKGFjdGl2aXR5LCBsYXN0RXhlY3V0aW9uLnN0ZXBzKSlcbiAgICAgICAgc3RyZWFtRGVidWdBY3Rpdml0eSgnb3JjaGVzdHJhdG9yJywgJ25vZGU6YWN0aXZpdHknLCBhY3Rpdml0eSwge1xuICAgICAgICAgIGV4ZWN1dGlvblN0ZXBDb3VudDogbGFzdEV4ZWN1dGlvbi5zdGVwcy5sZW5ndGgsXG4gICAgICAgIH0pXG4gICAgICAgIHN0cmVhbURlYnVnTG9nSGl0bFVpT3ZlcmxhcCh7XG4gICAgICAgICAgc2NvcGU6ICdvcmNoZXN0cmF0b3InLFxuICAgICAgICAgIHNvdXJjZTogJ25vZGUnLFxuICAgICAgICAgIG5vZGVQYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgIGFjdGl2aXR5TWVzc2FnZTogYWN0aXZpdHkubWVzc2FnZSxcbiAgICAgICAgICBoaXRsQ29udGV4dCxcbiAgICAgICAgICB1aVN1cmZhY2VzOiBbJ3N0cmVhbUFjdGl2aXR5JywgJ3N0cmVhbVRpbWVsaW5lJ10sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50KGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50KVxuICB9LCBbc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gc3RyZWFtQWN0aXZpdHlcbiAgfSwgW3N0cmVhbUFjdGl2aXR5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNMb2FkaW5nIHx8IGlzV3JpdGluZyB8fCAhc3RyZWFtQWN0aXZpdHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKCFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHN0cmVhbUFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcHJldiA9IHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnRcbiAgICAgIGlmICghcHJldiB8fCAhY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShwcmV2LnBoYXNlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICghY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShwcmV2LnBoYXNlLCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFkdmFuY2VkID0gYWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShwcmV2LCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50LCB0KVxuICAgICAgaWYgKCFhZHZhbmNlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSBhZHZhbmNlZC5uZXh0SW5kZXhcbiAgICAgIGNvbnN0IG1lcmdlZEFjdGl2aXR5ID0ge1xuICAgICAgICAuLi5hZHZhbmNlZC5hY3Rpdml0eSxcbiAgICAgICAgLi4uKHByZXYuZXhlY3V0aW9uU3RlcHM/Lmxlbmd0aCA/IHsgZXhlY3V0aW9uU3RlcHM6IHByZXYuZXhlY3V0aW9uU3RlcHMgfSA6IHt9KSxcbiAgICAgIH1cbiAgICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBtZXJnZWRBY3Rpdml0eVxuICAgICAgc2V0U3RyZWFtQWN0aXZpdHkobWVyZ2VkQWN0aXZpdHkpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShtZXJnZWRBY3Rpdml0eS5tZXNzYWdlKVxuICAgIH0sIEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpXG4gIH0sIFtpc0xvYWRpbmcsIGlzV3JpdGluZywgc3RyZWFtQWN0aXZpdHk/LnBoYXNlLCB0XSlcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBUaW1lLXRocm90dGxlOiBldml0YSBlbWl0aXIgb25TdHJlYW1VcGRhdGUgbcOhcyBkZSB1bmEgdmV6IGNhZGEgfjE2bXMuXG4gICAgICAvLyBVc2Ftb3MgdGltZXIgcGFyYSBxdWUgZWwgc3RyZWFtIHNpZ2EgcGludGFuZG8gYXVucXVlIHJBRiBlc3TDqSB0aHJvdHRsZWFkby5cbiAgICAgIC8vIE5vdGE6IG5vIHRvY2Ftb3MgZWwgc3RhdGUgYGRhdGFgIGVuIGVsIGhvdCBwYXRoIChzb2xvIHNlIGFjdHVhbGl6YSBlblxuICAgICAgLy8gYGNvbXBsZXRlYC9yZXNldHMpIHBhcmEgbm8gcmUtcmVuZGVyaXphciBhIGxvcyBjb25zdW1pZG9yZXMgZGVsIGhvb2tcbiAgICAgIC8vIGVuIGNhZGEgZnJhbWU7IGVsIHRleHRvIGVuIHZpdm8gdmlhamEgcG9yIGVsIHN0cmVhbWluZ1N0b3JlLlxuICAgICAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgICAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyZWFtU2V0dGxlZCA9IGZhbHNlXG4gICAgICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgICAgICBpZiAoc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTYpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50Py4odG9FbWl0LCBudWxsLCAnJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICAgICAgc3RyZWFtRGVidWdTc2UoJ2Fza01haWEnLCAnd3JpdGluZzpzdGFydGVkJywge1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRMZW5ndGg6IGFjY3VtdWxhdGVkQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudD8uKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICghY2h1bmspIHJldHVyblxuICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnRSZWYuY3VycmVudCA9IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgIHN5bmNTdHJlYW1UaW1lbGluZUNvbnRlbnQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkKSByZXR1cm5cbiAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuXG4gICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgIHN0cmVhbURlYnVnU3NlKCdhc2tNYWlhJywgJ2NvbXBsZXRlJywge1xuICAgICAgICAgICAgZmluYWxDb250ZW50TGVuZ3RoOiBmaW5hbENvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgdGltZWxpbmU6IHN1bW1hcml6ZVRpbWVsaW5lU25hcHNob3Qoc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50ID0gZmluYWxDb250ZW50XG4gICAgICAgICAgc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudChmaW5hbENvbnRlbnQpXG4gICAgICAgICAgc3RyZWFtVGltZWxpbmVTdG9yZS5yZXBsYWNlKGZpbmFsaXplU3RyZWFtVGltZWxpbmUoc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpKSlcbiAgICAgICAgICBjb25zdCBzb3VyY2VzID0gcGF5bG9hZC5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAocGF5bG9hZC5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuYXR0YWNobWVudHMpID8gcGF5bG9hZC5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGxcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXVxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBwYXlsb2FkLmFnZW50X2lkID8/IHBheWxvYWQuYWdlbnRJZFxuICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgICAgYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgICAgICBjb25zdCBzdWJhZ2VudFJhdyA9IHBheWxvYWQuc3ViYWdlbnQgYXMgU3ViYWdlbnRSYXdcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbnRleHQgPSBzdWJhZ2VudFJhdz8ucmVzb2x2ZWRfY29udGV4dCA/PyBudWxsXG4gICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICBzZXREYXRhKGZpbmFsQ29udGVudClcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICBzZXRTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudD8uKFxuICAgICAgICAgICAgZmluYWxDb250ZW50LFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICAgICAgcmVzb2x2ZWRDb250ZXh0XG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgICAgICBpZiAoc3RyZWFtU2V0dGxlZCAmJiBldmVudFR5cGUgIT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RyZWFtRGVidWdTc2UoJ2Fza01haWEnLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgICAgICBoYXNTdGFydGVkV3JpdGluZyxcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZExlbmd0aDogYWNjdW11bGF0ZWRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAuLi4oZXZlbnRUeXBlID09PSAnbm9kZSdcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IGRhdGEubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICB0b29sX25hbWU6IGRhdGEudG9vbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VQcmV2aWV3OiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyA/IGRhdGEubWVzc2FnZS5zbGljZSgwLCA4MCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgIC4uLihldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCdcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ6IGRhdGEubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdUb29sczogQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YS5wZW5kaW5nX2FjdGlvbnMubWFwKChhOiB7IHRvb2xfbmFtZT86IHN0cmluZyB9KSA9PiBhLnRvb2xfbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5UHJlc2VydmluZ1N0ZXBzKHtcbiAgICAgICAgICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgaGFuZGxlU3RyZWFtTm9kZUV2ZW50KGRhdGEgYXMgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWwgYXBwcm92YWw6IGVsIFNTRSBzaWd1ZSBjb24gbm9kZS90b2tlbi9jb21wbGV0ZSAoeSBwdWVkZVxuICAgICAgICAgICAgICAgICAgLy8gZW5jYWRlbmFyIG3DoXMgYXBwcm92YWxfcmVxdWlyZWQpLiBTb2xvIGVsIGFwcHJvdmFsIFwicGF1c2Fkb1wiXG4gICAgICAgICAgICAgICAgICAvLyAoYm90w7NuKSBlcyB0ZXJtaW5hbCBwYXJhIGVzdGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWFudWFsQXBwcm92YWwgPSBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgc3RyZWFtRGVidWdBcHByb3ZhbCgnb3JjaGVzdHJhdG9yJywgJ2FwcHJvdmFsX3JlcXVpcmVkJywgZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICBpc01hbnVhbEFwcHJvdmFsLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2xlYXJMb2FkaW5nU3RhdGU6ICFpc01hbnVhbEFwcHJvdmFsLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGlmIChpc01hbnVhbEFwcHJvdmFsICYmIEFycmF5LmlzQXJyYXkoZGF0YS5wZW5kaW5nX2FjdGlvbnMpICYmIGRhdGEucGVuZGluZ19hY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYW51YWxBY3Rpdml0eSA9IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50KVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KG1hbnVhbEFjdGl2aXR5KVxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAoe1xuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlOiAnb3JjaGVzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICdpbml0aWFsQWN0aXZpdHknLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5TWVzc2FnZTogbWFudWFsQWN0aXZpdHkubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICBoaXRsQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdWlTdXJmYWNlczogWydzdHJlYW1BY3Rpdml0eScsICdhcHByb3ZhbEJveCddLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIGlmICghc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eVByZXNlcnZpbmdTdGVwcyxcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLFxuICAgICAgaGFuZGxlU3RyZWFtTm9kZUV2ZW50LFxuICAgICAgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQsXG4gICAgICBzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50LFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBhc2tNYWlhID0gYXN5bmMgKHtcbiAgICBtZXNzYWdlLFxuICAgIGhpc3RvcnksXG4gICAgcHJvamVjdElkLFxuICAgIGxhbmcsXG4gICAgdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBjb21wYW55SWQsXG4gICAgY2hhdElkLFxuICAgIG1lc3NhZ2VJZCxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICAgIGZlZUlkLFxuICAgIGFnZW50TmFtZSxcbiAgICBhZ2VudElkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9qZWN0TmFtZSxcbiAgICB0YXNrSWQsXG4gICAgdGFza05hbWUsXG4gICAgZmFxSWQsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgZnVhSWQsXG4gICAgc2NJZCxcbiAgICBhZ2VudEVudGl0eSxcbiAgICBhZ2VudFR5cGUsXG4gICAgY29udGV4dE1lc3NhZ2UsXG4gICAgY29udGV4dERhdGEsXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gICAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gICAgbGFuZzogc3RyaW5nXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmdcbiAgICBsYXN0TmFtZT86IHN0cmluZ1xuICAgIGNvbXBhbnlJZDogc3RyaW5nXG4gICAgY2hhdElkOiBzdHJpbmdcbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGNsaWVudElkPzogbnVtYmVyXG4gICAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAgIGZlZUlkPzogbnVtYmVyXG4gICAgYWdlbnROYW1lOiBzdHJpbmdcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgICB0YXNrSWQ/OiBudW1iZXJcbiAgICB0YXNrTmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gICAgYWdlbnRUeXBlPzogQWdlbnRUeXBlXG4gICAgY29udGV4dE1lc3NhZ2U/OiBDb250ZXh0TWVzc2FnZVxuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXREYXRhKG51bGwpXG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgYmVnaW5TdHJlYW1UaW1lbGluZVR1cm4obWVzc2FnZUlkKVxuICAgICAgY29uc3QgaW5pdGlhbEFjdGl2aXR5ID0gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIHtcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHM/Lmxlbmd0aCksXG4gICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IGF0dGFjaG1lbnRzPy5sZW5ndGggPz8gMCxcbiAgICAgIH0pXG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBzdHJlYW1EZWJ1Z0xvZygnb3JjaGVzdHJhdG9yJywgJ2Fza01haWE6c3RhcnQnLCB7IG1lc3NhZ2VJZCwgY2hhdElkIH0pXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIC4uLihmZWVJZCAhPSBudWxsID8geyBmZWVJZCB9IDoge30pLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRhc2tJZCAhPSBudWxsID8geyB0YXNrSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza05hbWUgPyB7IHRhc2tOYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZnVhSWQgPyB7IGZ1YUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRUeXBlICE9IG51bGwgPyB7IGFnZW50VHlwZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50Py5zaWduYWxcbiAgICAgIClcblxuICAgICAgYXdhaXQgaGFuZGxlU1NFU3RyZWFtKHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaSBmdWUgdW4gYWJvcnQgaW50ZW5jaW9uYWwgKHN0b3AgbWFudWFsIG8gY2FtYmlvIGRlIGNoYXQpLCBubyBkaXNwYXJhciBvbkVycm9yXG4gICAgICAvLyBwb3JxdWUgZXNvIGluc2VydGEgdW4gXCJtZW5zYWplIGRlIGVycm9yXCIgZW4gZWwgY2hhdCBhbCBxdWUgYWNhYmFtb3MgZGUgbmF2ZWdhci5cbiAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgfVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdG9wU3RyZWFtaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZV0pXG5cbiAgLyoqXG4gICAqIEFib3J0YSBlbCBzdHJlYW0gZW4gY3Vyc28gKHNpIGV4aXN0ZSkgc2luIGRpc3BhcmFyIGBvblN0b3BgLlxuICAgKiDDmnNlbG8gZW4gY2Fzb3MgZG9uZGUgbm8gcXVlcmVtb3MgYWdyZWdhciBlbCBtZW5zYWplIGRlIFwiY2FuY2VsYWRvXCJcbiAgICogKHBvciBlamVtcGxvLCBhbCBjYW1iaWFyIGRlIGNoYXQpLlxuICAgKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvLyBDbGVhbnVwIGFsIGRlc21vbnRhcjogc2kgcXVlZGEgdW4gc3RyZWFtIGFjdGl2bywgYWJvcnRhcmxvIHBhcmEgZXZpdGFyXG4gIC8vIHF1ZSBpbnRlbnRlIGFjdHVhbGl6YXIgZXN0YWRvIGVuIHVuIGNvbXBvbmVudGUgeWEgZGVzbW9udGFkbyAoZnVnYXMgZGVcbiAgLy8gbWVtb3JpYSB5IHdhcm5pbmdzKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKFxuICAgIChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIWFjdGl2aXR5KSB7XG4gICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXVxuICApXG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0RGF0YShudWxsKVxuICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFza01haWEsXG4gICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICByZXNldCxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICAgIGFib3J0U3RyZWFtU2lsZW50bHksXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCxcbiAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCxcbiAgICBiZWdpblN0cmVhbVRpbWVsaW5lVHVybixcbiAgICBzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50LFxuICAgIGZpbmFsaXplU3RyZWFtRXhlY3V0aW9uVHJhY2UsXG4gICAgcmVzZXRTdHJlYW1FeGVjdXRpb25UcmFjZSxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFLdEMsU0FBU0MsUUFBUSxRQUFRLHdCQUF3QjtBQUVqRCxTQUNFQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsK0JBQStCLEVBQy9CQyw0QkFBNEIsRUFDNUJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLFFBQzNCLG9DQUFvQztBQUMzQyxTQUNFQyx5QkFBeUIsRUFFekJDLHNCQUFzQixFQUN0QkMsK0JBQStCLEVBRS9CQyx5QkFBeUIsUUFDcEIsa0NBQWtDO0FBQ3pDLFNBQ0VDLDZCQUE2QixFQUM3QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLHVCQUF1QixRQUNsQiw0QkFBNEI7QUFDbkMsU0FBU0MsbUJBQW1CLFFBQVEsMENBQTBDO0FBQzlFLFNBQVNDLHdCQUF3QixFQUFFQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDekYsU0FDRUMsbUJBQW1CLEVBQ25CQyxtQkFBbUIsRUFDbkJDLGNBQWMsRUFDZEMsMkJBQTJCLEVBQzNCQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsb0JBQW9CLEVBQ3BCQyx5QkFBeUIsUUFDcEIsNEJBQTRCO0FBSW5DLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQVFBO0VBQUEsSUFQaENDLGNBQWMsR0FBQUQsSUFB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LEVBQUUsQ0FBQ0EsdUJBQXVCLENBQUMsQ0FBQzs7RUFFN0I7RUFDQTtFQUNBO0VBQ0E5RSxTQUFTLENBQUMsWUFBTTtJQUNkLE9BQU8sWUFBTTtNQUNYLElBQUlpRSxrQkFBa0IsQ0FBQ1ksT0FBTyxFQUFFO1FBQzlCWixrQkFBa0IsQ0FBQ1ksT0FBTyxDQUFDa08sS0FBSyxDQUFDLENBQUM7UUFDbEM5TyxrQkFBa0IsQ0FBQ1ksT0FBTyxHQUFHLElBQUk7TUFDbkM7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1vTyxvQkFBb0IsR0FBR25ULFdBQVcsQ0FDdEMsVUFBQzZGLFFBQStCLEVBQUs7SUFDbkMsSUFBSSxDQUFDQSxRQUFRLEVBQUU7TUFDYmIsdUJBQXVCLENBQUMsQ0FBQztNQUN6QjtJQUNGO0lBQ0FZLG1CQUFtQixDQUFDQyxRQUFRLENBQUM7RUFDL0IsQ0FBQyxFQUNELENBQUNELG1CQUFtQixFQUFFWix1QkFBdUIsQ0FDL0MsQ0FBQztFQUVELElBQU1vTyxLQUFLLEdBQUcsU0FBUkEsS0FBS0EsQ0FBQSxFQUFTO0lBQ2xCbFEsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNiSSxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ2pCSSxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25Cc0IsdUJBQXVCLENBQUMsQ0FBQztJQUN6QlosWUFBWSxDQUFDVyxPQUFPLEdBQUcsS0FBSztFQUM5QixDQUFDO0VBRUQsT0FBTztJQUNMbUwsT0FBTyxFQUFQQSxPQUFPO0lBQ1BsSCxRQUFRLEVBQUUvRixJQUFJO0lBQ2RJLFNBQVMsRUFBVEEsU0FBUztJQUNUSSxTQUFTLEVBQVRBLFNBQVM7SUFDVEksY0FBYyxFQUFkQSxjQUFjO0lBQ2RJLGNBQWMsRUFBZEEsY0FBYztJQUNka1Asb0JBQW9CLEVBQXBCQSxvQkFBb0I7SUFDcEJDLEtBQUssRUFBTEEsS0FBSztJQUNMTCxhQUFhLEVBQWJBLGFBQWE7SUFDYkcsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFDbkJ4SyxlQUFlLEVBQWZBLGVBQWU7SUFBRTtJQUNqQmpDLHFCQUFxQixFQUFyQkEscUJBQXFCO0lBQ3JCc0IsMEJBQTBCLEVBQTFCQSwwQkFBMEI7SUFDMUJ4Qyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtJQUN2QkUseUJBQXlCLEVBQXpCQSx5QkFBeUI7SUFDekJZLDRCQUE0QixFQUE1QkEsNEJBQTRCO0lBQzVCRCx5QkFBeUIsRUFBekJBO0VBQ0YsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|