@projectcor/maia-components 2.11.100-3 → 2.11.100-5

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.
Files changed (63) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +212 -14
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +99 -9
  4. package/lib/components/atoms/Chip/Chip.js +5 -12
  5. package/lib/components/atoms/Chip/styles.js +6 -6
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +28 -121
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +2 -6
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +5 -12
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +270 -390
  10. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -5
  11. package/lib/components/atoms/MAIAInput/styles.js +86 -102
  12. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +41 -54
  13. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +12 -25
  14. package/lib/components/atoms/icons/index.js +1 -10
  15. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  16. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +7 -18
  17. package/lib/components/molecules/ChatAIHome/styles.js +38 -54
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +191 -44
  19. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -10
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +2 -1
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -1
  22. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +8 -1
  23. package/lib/components/molecules/ChatFooter/ChatFooter.js +62 -23
  24. package/lib/components/molecules/Sidebar/Sidebar.js +3 -14
  25. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +91 -0
  26. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
  27. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
  28. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  29. package/lib/dev/DevStreamTimelineDemo.js +614 -0
  30. package/lib/dev/mockStreamTimelineDemo.js +417 -0
  31. package/lib/dev/mockStreamTimelineRunner.js +298 -0
  32. package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
  33. package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
  34. package/lib/hooks/useChatManager/useChatManager.js +132 -46
  35. package/lib/hooks/useEvent.js +2 -1
  36. package/lib/hooks/useMentionPopover.js +2 -4
  37. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +183 -23
  38. package/lib/hooks/useStreamTimeline/index.js +7 -0
  39. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
  40. package/lib/lang/br/index.js +16 -7
  41. package/lib/lang/en/index.js +16 -7
  42. package/lib/lang/es/index.js +16 -7
  43. package/lib/lang/fr/index.js +15 -9
  44. package/lib/services/maia/Agents/connectors.js +124 -0
  45. package/lib/styles/config.js +2 -2
  46. package/lib/types/agentModal.js +1 -1
  47. package/lib/types/streamActivity.js +1 -1
  48. package/lib/types/streamTimeline.js +2 -0
  49. package/lib/utils/normalizeAgentConnectors.js +28 -3
  50. package/lib/utils/streamDebugLog.js +170 -0
  51. package/lib/utils/streamExecutionSteps.js +136 -0
  52. package/lib/utils/streamTimeline.js +177 -0
  53. package/package.json +1 -1
  54. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
  55. package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
  56. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
  57. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
  58. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
  59. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
  60. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
  61. package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
  62. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
  63. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
@@ -0,0 +1,614 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
+ import { Streamdown } from 'streamdown';
10
+ import { createCodePlugin } from '@streamdown/code';
11
+ import { GlobalContext, DEFAULT_AGENT } from '../context/global-context';
12
+ import { useT } from '../hooks/useT';
13
+ import { useStreamTimeline } from '../hooks/useStreamTimeline';
14
+ import { useSmoothStreamText } from '../hooks/useSmoothStreamText';
15
+ import { StreamAssistantTurnTimeline } from '../components/molecules/StreamAssistantTurnTimeline';
16
+ import { ApprovalBox } from '../components/atoms/ApprovalBox/ApprovalBox';
17
+ import { MAIA_STREAMDOWN_REHYPE_PLUGINS } from '../utils/maiaStreamdownRehypePlugins';
18
+ import { EntityLinkCustomLink, getEntityLinkWrapperClassName } from '../utils/entityLinkRender';
19
+ import { MAIAIcon } from '../components/atoms/icons';
20
+ import { SCMessagesInner, SCMessageItemWrapper, SCMessageItemInner, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCCAIMessageWrapper, SCApprovalActionsColumn } from '../components/molecules/ChatAIMessages/newStyles';
21
+ import { MessageFromUser, MessageContentFromUser } from '../components/molecules/ChatAIMessages/styles';
22
+ import { MOCK_SCENARIOS, getScenarioById } from './mockStreamTimelineDemo';
23
+ import { beginMockHitlContinue, beginMockTurn, resetMockRunnerState, runMockEventList } from './mockStreamTimelineRunner';
24
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
+ var code = createCodePlugin({
26
+ themes: ['github-light', 'github-light']
27
+ });
28
+ var mockContextValue = {
29
+ section: 'header',
30
+ agent: _objectSpread(_objectSpread({}, DEFAULT_AGENT), {}, {
31
+ type: 'orchestrator',
32
+ entity: 'global'
33
+ }),
34
+ selectAgent: function selectAgent() {},
35
+ clearAgent: function clearAgent() {},
36
+ project: null,
37
+ setProject: function setProject() {},
38
+ client: null,
39
+ setClient: function setClient() {},
40
+ isWebSearchActive: false,
41
+ toggleWebSearch: function toggleWebSearch() {},
42
+ isDeepSearchActive: false,
43
+ toggleDeepSearch: function toggleDeepSearch() {},
44
+ chipsProject: null,
45
+ setChipsProject: function setChipsProject() {},
46
+ configureSettingsItems: {
47
+ current: []
48
+ },
49
+ restoreConfigureSettings: function restoreConfigureSettings() {},
50
+ task: null,
51
+ setTask: function setTask() {},
52
+ entityValues: {
53
+ projectId: null,
54
+ clientId: null
55
+ },
56
+ setEntityValues: function setEntityValues() {}
57
+ };
58
+ var DemoTimelineContent = /*#__PURE__*/memo(function (_ref) {
59
+ var text = _ref.text,
60
+ isStreaming = _ref.isStreaming,
61
+ showAssistantHeader = _ref.showAssistantHeader;
62
+ var displayText = useSmoothStreamText(text, {
63
+ enabled: isStreaming,
64
+ maxCharsPerFrame: 24,
65
+ snapToWordBoundary: true
66
+ });
67
+ if (!displayText && !isStreaming) return null;
68
+ return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
69
+ $isAssistant: true,
70
+ children: [showAssistantHeader && /*#__PURE__*/_jsxs(SCAssistantMessageHeader, {
71
+ children: [/*#__PURE__*/_jsx(SCAssistantAvatar, {
72
+ children: /*#__PURE__*/_jsx(MAIAIcon, {
73
+ width: 18,
74
+ height: 18
75
+ })
76
+ }), /*#__PURE__*/_jsx(SCAssistantName, {
77
+ children: "MAIA"
78
+ })]
79
+ }), /*#__PURE__*/_jsx(SCMessageItemInner, {
80
+ children: /*#__PURE__*/_jsx(SCCAIMessageWrapper, {
81
+ isCurrentUser: false,
82
+ className: getEntityLinkWrapperClassName(displayText),
83
+ children: /*#__PURE__*/_jsx(Streamdown, {
84
+ plugins: {
85
+ code: code
86
+ },
87
+ rehypePlugins: MAIA_STREAMDOWN_REHYPE_PLUGINS,
88
+ components: {
89
+ a: EntityLinkCustomLink
90
+ },
91
+ linkSafety: {
92
+ enabled: false
93
+ },
94
+ isAnimating: isStreaming,
95
+ shikiTheme: ['github-light', 'github-light'],
96
+ controls: {
97
+ table: false,
98
+ code: false
99
+ },
100
+ children: displayText
101
+ })
102
+ })
103
+ })]
104
+ });
105
+ });
106
+ DemoTimelineContent.displayName = 'DemoTimelineContent';
107
+ var DemoStaticAssistantMessage = /*#__PURE__*/memo(function (_ref2) {
108
+ var text = _ref2.text,
109
+ _ref2$showHeader = _ref2.showHeader,
110
+ showHeader = _ref2$showHeader === void 0 ? true : _ref2$showHeader;
111
+ return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
112
+ $isAssistant: true,
113
+ children: [showHeader && /*#__PURE__*/_jsxs(SCAssistantMessageHeader, {
114
+ children: [/*#__PURE__*/_jsx(SCAssistantAvatar, {
115
+ children: /*#__PURE__*/_jsx(MAIAIcon, {
116
+ width: 18,
117
+ height: 18
118
+ })
119
+ }), /*#__PURE__*/_jsx(SCAssistantName, {
120
+ children: "MAIA"
121
+ })]
122
+ }), /*#__PURE__*/_jsx(SCMessageItemInner, {
123
+ children: /*#__PURE__*/_jsx(SCCAIMessageWrapper, {
124
+ isCurrentUser: false,
125
+ className: getEntityLinkWrapperClassName(text),
126
+ children: /*#__PURE__*/_jsx(Streamdown, {
127
+ plugins: {
128
+ code: code
129
+ },
130
+ rehypePlugins: MAIA_STREAMDOWN_REHYPE_PLUGINS,
131
+ components: {
132
+ a: EntityLinkCustomLink
133
+ },
134
+ linkSafety: {
135
+ enabled: false
136
+ },
137
+ shikiTheme: ['github-light', 'github-light'],
138
+ controls: {
139
+ table: false,
140
+ code: false
141
+ },
142
+ children: text
143
+ })
144
+ })
145
+ })]
146
+ });
147
+ });
148
+ DemoStaticAssistantMessage.displayName = 'DemoStaticAssistantMessage';
149
+ var INITIAL_UI = {
150
+ waitingResponse: false,
151
+ isWriting: false,
152
+ initialActivity: null,
153
+ phase: 'idle'
154
+ };
155
+ export function DevStreamTimelineDemo() {
156
+ var _useT = useT(),
157
+ t = _useT.t;
158
+ var streamTimeline = useStreamTimeline();
159
+ var _useState = useState('hitl_button'),
160
+ _useState2 = _slicedToArray(_useState, 2),
161
+ scenarioId = _useState2[0],
162
+ setScenarioId = _useState2[1];
163
+ var _useState3 = useState(INITIAL_UI),
164
+ _useState4 = _slicedToArray(_useState3, 2),
165
+ ui = _useState4[0],
166
+ setUi = _useState4[1];
167
+ var _useState5 = useState(null),
168
+ _useState6 = _slicedToArray(_useState5, 2),
169
+ approvalUi = _useState6[0],
170
+ setApprovalUi = _useState6[1];
171
+ var _useState7 = useState([]),
172
+ _useState8 = _slicedToArray(_useState7, 2),
173
+ eventLog = _useState8[0],
174
+ setEventLog = _useState8[1];
175
+ var _useState9 = useState(false),
176
+ _useState0 = _slicedToArray(_useState9, 2),
177
+ keepTimelineOnComplete = _useState0[0],
178
+ setKeepTimelineOnComplete = _useState0[1];
179
+ var _useState1 = useState(true),
180
+ _useState10 = _slicedToArray(_useState1, 2),
181
+ showProdCompleteBehavior = _useState10[0],
182
+ setShowProdCompleteBehavior = _useState10[1];
183
+ var scenario = useMemo(function () {
184
+ return getScenarioById(scenarioId);
185
+ }, [scenarioId]);
186
+ var accumulatedRef = useRef('');
187
+ var hitlContextRef = useRef(null);
188
+ var runIdRef = useRef(0);
189
+ var continueQueueRef = useRef([]);
190
+ var pushLog = useCallback(function (line) {
191
+ setEventLog(function (prev) {
192
+ return [].concat(_toConsumableArray(prev.slice(-22)), [line]);
193
+ });
194
+ }, []);
195
+ var runnerCallbacks = useMemo(function () {
196
+ return {
197
+ onUiPatch: function onUiPatch(patch) {
198
+ return setUi(function (prev) {
199
+ return _objectSpread(_objectSpread({}, prev), patch);
200
+ });
201
+ },
202
+ onApprovalUi: setApprovalUi,
203
+ onHitlContext: function onHitlContext(ctx) {
204
+ hitlContextRef.current = ctx;
205
+ },
206
+ onLog: pushLog,
207
+ getRunId: function getRunId() {
208
+ return runIdRef.current;
209
+ },
210
+ isRunActive: function isRunActive(runId) {
211
+ return runId === runIdRef.current;
212
+ },
213
+ showProdCompleteBehavior: showProdCompleteBehavior,
214
+ keepTimelineOnComplete: keepTimelineOnComplete
215
+ };
216
+ }, [keepTimelineOnComplete, pushLog, showProdCompleteBehavior]);
217
+ var resetDemo = useCallback(function () {
218
+ runIdRef.current += 1;
219
+ accumulatedRef.current = '';
220
+ hitlContextRef.current = null;
221
+ continueQueueRef.current = [];
222
+ resetMockRunnerState(runnerCallbacks);
223
+ setEventLog([]);
224
+ }, [runnerCallbacks]);
225
+ useEffect(function () {
226
+ resetDemo();
227
+ }, [scenarioId, resetDemo]);
228
+ var runEventList = useCallback(/*#__PURE__*/function () {
229
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(events, runId) {
230
+ return _regeneratorRuntime.wrap(function (_context) {
231
+ while (1) switch (_context.prev = _context.next) {
232
+ case 0:
233
+ return _context.abrupt("return", runMockEventList(events, runId, t, accumulatedRef, hitlContextRef, runnerCallbacks));
234
+ case 1:
235
+ case "end":
236
+ return _context.stop();
237
+ }
238
+ }, _callee);
239
+ }));
240
+ return function (_x, _x2) {
241
+ return _ref3.apply(this, arguments);
242
+ };
243
+ }(), [runnerCallbacks, t]);
244
+ var runContinueQueue = useCallback(/*#__PURE__*/function () {
245
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(runId) {
246
+ var nextScript, result;
247
+ return _regeneratorRuntime.wrap(function (_context2) {
248
+ while (1) switch (_context2.prev = _context2.next) {
249
+ case 0:
250
+ nextScript = continueQueueRef.current.shift();
251
+ if (!(!(nextScript !== null && nextScript !== void 0 && nextScript.length) || !hitlContextRef.current)) {
252
+ _context2.next = 1;
253
+ break;
254
+ }
255
+ return _context2.abrupt("return");
256
+ case 1:
257
+ accumulatedRef.current = '';
258
+ beginMockHitlContinue(t, hitlContextRef.current, runnerCallbacks);
259
+ pushLog('--- continue-thread ---');
260
+ _context2.next = 2;
261
+ return runEventList(nextScript, runId);
262
+ case 2:
263
+ result = _context2.sent;
264
+ if (result === 'paused' && continueQueueRef.current.length > 0) {
265
+ pushLog('→ segundo HITL: aprobá de nuevo');
266
+ }
267
+ case 3:
268
+ case "end":
269
+ return _context2.stop();
270
+ }
271
+ }, _callee2);
272
+ }));
273
+ return function (_x3) {
274
+ return _ref4.apply(this, arguments);
275
+ };
276
+ }(), [pushLog, runEventList, runnerCallbacks, t]);
277
+ var handleApprove = useCallback(/*#__PURE__*/function () {
278
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(threadIds) {
279
+ return _regeneratorRuntime.wrap(function (_context3) {
280
+ while (1) switch (_context3.prev = _context3.next) {
281
+ case 0:
282
+ if (!(!approvalUi || !hitlContextRef.current)) {
283
+ _context3.next = 1;
284
+ break;
285
+ }
286
+ return _context3.abrupt("return");
287
+ case 1:
288
+ setApprovalUi(function (prev) {
289
+ return prev ? _objectSpread(_objectSpread({}, prev), {}, {
290
+ status: 'approved'
291
+ }) : prev;
292
+ });
293
+ pushLog("UI: approve [".concat(threadIds.join(', '), "]"));
294
+ _context3.next = 2;
295
+ return runContinueQueue(runIdRef.current);
296
+ case 2:
297
+ case "end":
298
+ return _context3.stop();
299
+ }
300
+ }, _callee3);
301
+ }));
302
+ return function (_x4) {
303
+ return _ref5.apply(this, arguments);
304
+ };
305
+ }(), [approvalUi, pushLog, runContinueQueue]);
306
+ var handleReject = useCallback(function (threadIds) {
307
+ setApprovalUi(function (prev) {
308
+ return prev ? _objectSpread(_objectSpread({}, prev), {}, {
309
+ status: 'rejected'
310
+ }) : prev;
311
+ });
312
+ pushLog("UI: reject [".concat(threadIds.join(', '), "]"));
313
+ continueQueueRef.current = [];
314
+ setUi(function (prev) {
315
+ return _objectSpread(_objectSpread({}, prev), {}, {
316
+ phase: 'done',
317
+ waitingResponse: false,
318
+ isWriting: false
319
+ });
320
+ });
321
+ }, [pushLog]);
322
+ var runDemo = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
323
+ var runId, result;
324
+ return _regeneratorRuntime.wrap(function (_context4) {
325
+ while (1) switch (_context4.prev = _context4.next) {
326
+ case 0:
327
+ resetDemo();
328
+ runId = runIdRef.current;
329
+ continueQueueRef.current = [scenario.continueEvents, scenario.continueEventsSecond].filter(function (script) {
330
+ return Boolean(script === null || script === void 0 ? void 0 : script.length);
331
+ });
332
+ beginMockTurn(runnerCallbacks);
333
+ pushLog("Escenario: ".concat(scenario.title));
334
+ pushLog('--- askMaia / SSE ---');
335
+ _context4.next = 1;
336
+ return runEventList(scenario.streamEvents, runId);
337
+ case 1:
338
+ result = _context4.sent;
339
+ if (result === 'paused') {
340
+ pushLog('→ esperando ApprovalBox (como prod)');
341
+ }
342
+ case 2:
343
+ case "end":
344
+ return _context4.stop();
345
+ }
346
+ }, _callee4);
347
+ })), [pushLog, resetDemo, runEventList, runnerCallbacks, scenario]);
348
+ var renderTimelineContentBlock = useCallback(function (_ref7) {
349
+ var text = _ref7.text,
350
+ isStreaming = _ref7.isStreaming,
351
+ showAssistantHeader = _ref7.showAssistantHeader;
352
+ return /*#__PURE__*/_jsx(DemoTimelineContent, {
353
+ text: text,
354
+ isStreaming: isStreaming,
355
+ showAssistantHeader: showAssistantHeader
356
+ });
357
+ }, []);
358
+ var isRunning = ui.phase === 'running' || ui.phase === 'running_continue';
359
+ var showLiveTimeline = streamTimeline.turnId != null && (isRunning || keepTimelineOnComplete || ui.phase === 'done' && !showProdCompleteBehavior);
360
+ var showFinalOnly = ui.phase === 'done' && showProdCompleteBehavior && !keepTimelineOnComplete && streamTimeline.turnId == null;
361
+ return /*#__PURE__*/_jsx(GlobalContext.Provider, {
362
+ value: mockContextValue,
363
+ children: /*#__PURE__*/_jsxs("div", {
364
+ style: {
365
+ fontFamily: 'Work Sans, sans-serif',
366
+ padding: 16
367
+ },
368
+ children: [/*#__PURE__*/_jsxs("div", {
369
+ style: {
370
+ maxWidth: 960,
371
+ margin: '0 auto 16px'
372
+ },
373
+ children: [/*#__PURE__*/_jsx("h2", {
374
+ style: {
375
+ margin: '0 0 8px',
376
+ fontSize: 20
377
+ },
378
+ children: "Stream Timeline + HITL"
379
+ }), /*#__PURE__*/_jsxs("p", {
380
+ style: {
381
+ margin: 0,
382
+ color: '#666',
383
+ fontSize: 14,
384
+ lineHeight: 1.5
385
+ },
386
+ children: ["Mock fiel al front/back: ", /*#__PURE__*/_jsx("code", {
387
+ children: "approval_required"
388
+ }), " (bot\xF3n vs manual), ", /*#__PURE__*/_jsx("code", {
389
+ children: "continue-thread"
390
+ }), " con", ' ', /*#__PURE__*/_jsx("code", {
391
+ children: "resuming"
392
+ }), ", mensajes gen\xE9ricos reemplazados por i18n, y ", /*#__PURE__*/_jsx("code", {
393
+ children: "content"
394
+ }), " de una en lugar de tokens."]
395
+ })]
396
+ }), /*#__PURE__*/_jsx("div", {
397
+ style: {
398
+ maxWidth: 960,
399
+ margin: '0 auto 12px',
400
+ display: 'flex',
401
+ flexWrap: 'wrap',
402
+ gap: 8
403
+ },
404
+ children: MOCK_SCENARIOS.map(function (item) {
405
+ return /*#__PURE__*/_jsx("button", {
406
+ type: "button",
407
+ onClick: function onClick() {
408
+ return setScenarioId(item.id);
409
+ },
410
+ style: {
411
+ padding: '6px 12px',
412
+ borderRadius: 6,
413
+ border: '1px solid #ddd',
414
+ background: scenarioId === item.id ? '#4d3569' : '#fff',
415
+ color: scenarioId === item.id ? '#fff' : '#333',
416
+ cursor: 'pointer',
417
+ fontSize: 13
418
+ },
419
+ children: item.title
420
+ }, item.id);
421
+ })
422
+ }), /*#__PURE__*/_jsx("p", {
423
+ style: {
424
+ maxWidth: 960,
425
+ margin: '0 auto 12px',
426
+ color: '#555',
427
+ fontSize: 13
428
+ },
429
+ children: scenario.description
430
+ }), /*#__PURE__*/_jsxs("div", {
431
+ style: {
432
+ maxWidth: 960,
433
+ margin: '0 auto 16px',
434
+ display: 'flex',
435
+ flexWrap: 'wrap',
436
+ gap: 8,
437
+ alignItems: 'center'
438
+ },
439
+ children: [/*#__PURE__*/_jsx("button", {
440
+ type: "button",
441
+ onClick: runDemo,
442
+ disabled: isRunning,
443
+ style: {
444
+ padding: '8px 16px',
445
+ background: isRunning ? '#ccc' : '#4d3569',
446
+ color: '#fff',
447
+ border: 'none',
448
+ borderRadius: 6,
449
+ cursor: isRunning ? 'not-allowed' : 'pointer',
450
+ fontWeight: 600
451
+ },
452
+ children: isRunning ? 'Reproduciendo…' : 'Reproducir escenario'
453
+ }), /*#__PURE__*/_jsx("button", {
454
+ type: "button",
455
+ onClick: resetDemo,
456
+ style: {
457
+ padding: '8px 16px',
458
+ background: '#eee',
459
+ border: '1px solid #ddd',
460
+ borderRadius: 6
461
+ },
462
+ children: "Reiniciar"
463
+ }), /*#__PURE__*/_jsxs("label", {
464
+ style: {
465
+ display: 'flex',
466
+ alignItems: 'center',
467
+ gap: 6,
468
+ fontSize: 13
469
+ },
470
+ children: [/*#__PURE__*/_jsx("input", {
471
+ type: "checkbox",
472
+ checked: showProdCompleteBehavior,
473
+ onChange: function onChange(e) {
474
+ return setShowProdCompleteBehavior(e.target.checked);
475
+ }
476
+ }), "Al complete: limpiar timeline (prod)"]
477
+ }), /*#__PURE__*/_jsxs("label", {
478
+ style: {
479
+ display: 'flex',
480
+ alignItems: 'center',
481
+ gap: 6,
482
+ fontSize: 13
483
+ },
484
+ children: [/*#__PURE__*/_jsx("input", {
485
+ type: "checkbox",
486
+ checked: keepTimelineOnComplete,
487
+ onChange: function onChange(e) {
488
+ return setKeepTimelineOnComplete(e.target.checked);
489
+ },
490
+ disabled: !showProdCompleteBehavior
491
+ }), "Mantener timeline (preview)"]
492
+ })]
493
+ }), /*#__PURE__*/_jsxs("div", {
494
+ style: {
495
+ display: 'flex',
496
+ gap: 16,
497
+ maxWidth: 1140,
498
+ margin: '0 auto',
499
+ alignItems: 'flex-start'
500
+ },
501
+ children: [/*#__PURE__*/_jsx("div", {
502
+ style: {
503
+ flex: 1,
504
+ minWidth: 0,
505
+ background: '#fafafa',
506
+ borderRadius: 12,
507
+ border: '1px solid #e8e8e8',
508
+ overflow: 'hidden'
509
+ },
510
+ children: /*#__PURE__*/_jsxs(SCMessagesInner, {
511
+ $scrollOnParent: false,
512
+ $isMarketplaceGlobal: false,
513
+ style: {
514
+ minHeight: 520
515
+ },
516
+ children: [/*#__PURE__*/_jsx(MessageFromUser, {
517
+ "data-message-id": "demo-user",
518
+ children: /*#__PURE__*/_jsx(MessageContentFromUser, {
519
+ message: scenario.userQuestion
520
+ })
521
+ }), approvalUi && /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
522
+ $isAssistant: true,
523
+ children: [/*#__PURE__*/_jsxs(SCAssistantMessageHeader, {
524
+ children: [/*#__PURE__*/_jsx(SCAssistantAvatar, {
525
+ children: /*#__PURE__*/_jsx(MAIAIcon, {
526
+ width: 18,
527
+ height: 18
528
+ })
529
+ }), /*#__PURE__*/_jsx(SCAssistantName, {
530
+ children: "MAIA"
531
+ })]
532
+ }), /*#__PURE__*/_jsxs(SCMessageItemInner, {
533
+ children: [!!approvalUi.message && /*#__PURE__*/_jsx(SCCAIMessageWrapper, {
534
+ isCurrentUser: false,
535
+ className: getEntityLinkWrapperClassName(approvalUi.message),
536
+ children: /*#__PURE__*/_jsx(Streamdown, {
537
+ plugins: {
538
+ code: code
539
+ },
540
+ rehypePlugins: MAIA_STREAMDOWN_REHYPE_PLUGINS,
541
+ components: {
542
+ a: EntityLinkCustomLink
543
+ },
544
+ linkSafety: {
545
+ enabled: false
546
+ },
547
+ shikiTheme: ['github-light', 'github-light'],
548
+ controls: {
549
+ table: false,
550
+ code: false
551
+ },
552
+ children: approvalUi.message
553
+ })
554
+ }), /*#__PURE__*/_jsx(SCApprovalActionsColumn, {
555
+ children: /*#__PURE__*/_jsx(ApprovalBox, {
556
+ actions: approvalUi.approval.pending_actions,
557
+ status: approvalUi.status,
558
+ onApprove: handleApprove,
559
+ onReject: handleReject,
560
+ isExpanded: true,
561
+ hitlInstanceId: approvalUi.approval.original_thread_id,
562
+ warningMessage: approvalUi.approval.warning_message,
563
+ manualApprovalDetected: approvalUi.approval.manual_approval_detected
564
+ })
565
+ })]
566
+ })]
567
+ }), showLiveTimeline && /*#__PURE__*/_jsx(StreamAssistantTurnTimeline, {
568
+ segments: streamTimeline.segments,
569
+ initialActivity: ui.initialActivity,
570
+ waitingResponse: ui.waitingResponse,
571
+ isWriting: ui.isWriting,
572
+ renderContentBlock: renderTimelineContentBlock
573
+ }), showFinalOnly && /*#__PURE__*/_jsx(DemoStaticAssistantMessage, {
574
+ text: scenario.finalAnswer
575
+ })]
576
+ })
577
+ }), /*#__PURE__*/_jsxs("div", {
578
+ style: {
579
+ width: 300,
580
+ flexShrink: 0,
581
+ background: '#1e1e1e',
582
+ color: '#d4d4d4',
583
+ borderRadius: 8,
584
+ padding: 12,
585
+ fontSize: 11,
586
+ fontFamily: 'ui-monospace, monospace',
587
+ maxHeight: 560,
588
+ overflowY: 'auto'
589
+ },
590
+ children: [/*#__PURE__*/_jsx("div", {
591
+ style: {
592
+ color: '#888',
593
+ marginBottom: 8
594
+ },
595
+ children: "Event log"
596
+ }), eventLog.length === 0 ? /*#__PURE__*/_jsx("span", {
597
+ style: {
598
+ color: '#666'
599
+ },
600
+ children: "Eleg\xED escenario y puls\xE1 Reproducir\u2026"
601
+ }) : eventLog.map(function (line, index) {
602
+ return /*#__PURE__*/_jsx("div", {
603
+ style: {
604
+ marginBottom: 4
605
+ },
606
+ children: line
607
+ }, "".concat(line, "-").concat(index));
608
+ })]
609
+ })]
610
+ })]
611
+ })
612
+ });
613
+ }
614
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJTdHJlYW1kb3duIiwiY3JlYXRlQ29kZVBsdWdpbiIsIkdsb2JhbENvbnRleHQiLCJERUZBVUxUX0FHRU5UIiwidXNlVCIsInVzZVN0cmVhbVRpbWVsaW5lIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsIlN0cmVhbUFzc2lzdGFudFR1cm5UaW1lbGluZSIsIkFwcHJvdmFsQm94IiwiTUFJQV9TVFJFQU1ET1dOX1JFSFlQRV9QTFVHSU5TIiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIk1BSUFJY29uIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJTQ0Fzc2lzdGFudE5hbWUiLCJTQ0Fzc2lzdGFudEF2YXRhciIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNT0NLX1NDRU5BUklPUyIsImdldFNjZW5hcmlvQnlJZCIsImJlZ2luTW9ja0hpdGxDb250aW51ZSIsImJlZ2luTW9ja1R1cm4iLCJyZXNldE1vY2tSdW5uZXJTdGF0ZSIsInJ1bk1vY2tFdmVudExpc3QiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiY29kZSIsInRoZW1lcyIsIm1vY2tDb250ZXh0VmFsdWUiLCJzZWN0aW9uIiwiYWdlbnQiLCJfb2JqZWN0U3ByZWFkIiwidHlwZSIsImVudGl0eSIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJ0b2dnbGVEZWVwU2VhcmNoIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiY29uZmlndXJlU2V0dGluZ3NJdGVtcyIsImN1cnJlbnQiLCJyZXN0b3JlQ29uZmlndXJlU2V0dGluZ3MiLCJ0YXNrIiwic2V0VGFzayIsImVudGl0eVZhbHVlcyIsInByb2plY3RJZCIsImNsaWVudElkIiwic2V0RW50aXR5VmFsdWVzIiwiRGVtb1RpbWVsaW5lQ29udGVudCIsIl9yZWYiLCJ0ZXh0IiwiaXNTdHJlYW1pbmciLCJzaG93QXNzaXN0YW50SGVhZGVyIiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsIiRpc0Fzc2lzdGFudCIsImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJpc0N1cnJlbnRVc2VyIiwiY2xhc3NOYW1lIiwicGx1Z2lucyIsInJlaHlwZVBsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsImxpbmtTYWZldHkiLCJpc0FuaW1hdGluZyIsInNoaWtpVGhlbWUiLCJjb250cm9scyIsInRhYmxlIiwiZGlzcGxheU5hbWUiLCJEZW1vU3RhdGljQXNzaXN0YW50TWVzc2FnZSIsIl9yZWYyIiwiX3JlZjIkc2hvd0hlYWRlciIsInNob3dIZWFkZXIiLCJJTklUSUFMX1VJIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwiaW5pdGlhbEFjdGl2aXR5IiwicGhhc2UiLCJEZXZTdHJlYW1UaW1lbGluZURlbW8iLCJfdXNlVCIsInQiLCJzdHJlYW1UaW1lbGluZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNjZW5hcmlvSWQiLCJzZXRTY2VuYXJpb0lkIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ1aSIsInNldFVpIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJhcHByb3ZhbFVpIiwic2V0QXBwcm92YWxVaSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZXZlbnRMb2ciLCJzZXRFdmVudExvZyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwia2VlcFRpbWVsaW5lT25Db21wbGV0ZSIsInNldEtlZXBUaW1lbGluZU9uQ29tcGxldGUiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzaG93UHJvZENvbXBsZXRlQmVoYXZpb3IiLCJzZXRTaG93UHJvZENvbXBsZXRlQmVoYXZpb3IiLCJzY2VuYXJpbyIsImFjY3VtdWxhdGVkUmVmIiwiaGl0bENvbnRleHRSZWYiLCJydW5JZFJlZiIsImNvbnRpbnVlUXVldWVSZWYiLCJwdXNoTG9nIiwibGluZSIsInByZXYiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzbGljZSIsInJ1bm5lckNhbGxiYWNrcyIsIm9uVWlQYXRjaCIsInBhdGNoIiwib25BcHByb3ZhbFVpIiwib25IaXRsQ29udGV4dCIsImN0eCIsIm9uTG9nIiwiZ2V0UnVuSWQiLCJpc1J1bkFjdGl2ZSIsInJ1bklkIiwicmVzZXREZW1vIiwicnVuRXZlbnRMaXN0IiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV2ZW50cyIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJhYnJ1cHQiLCJzdG9wIiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyIsInJ1bkNvbnRpbnVlUXVldWUiLCJfcmVmNCIsIl9jYWxsZWUyIiwibmV4dFNjcmlwdCIsInJlc3VsdCIsIl9jb250ZXh0MiIsInNoaWZ0IiwibGVuZ3RoIiwic2VudCIsIl94MyIsImhhbmRsZUFwcHJvdmUiLCJfcmVmNSIsIl9jYWxsZWUzIiwidGhyZWFkSWRzIiwiX2NvbnRleHQzIiwic3RhdHVzIiwiam9pbiIsIl94NCIsImhhbmRsZVJlamVjdCIsInJ1bkRlbW8iLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImNvbnRpbnVlRXZlbnRzIiwiY29udGludWVFdmVudHNTZWNvbmQiLCJmaWx0ZXIiLCJzY3JpcHQiLCJCb29sZWFuIiwidGl0bGUiLCJzdHJlYW1FdmVudHMiLCJyZW5kZXJUaW1lbGluZUNvbnRlbnRCbG9jayIsIl9yZWY3IiwiaXNSdW5uaW5nIiwic2hvd0xpdmVUaW1lbGluZSIsInR1cm5JZCIsInNob3dGaW5hbE9ubHkiLCJQcm92aWRlciIsInZhbHVlIiwic3R5bGUiLCJmb250RmFtaWx5IiwicGFkZGluZyIsIm1heFdpZHRoIiwibWFyZ2luIiwiZm9udFNpemUiLCJjb2xvciIsImxpbmVIZWlnaHQiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJnYXAiLCJtYXAiLCJpdGVtIiwib25DbGljayIsImlkIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyIiwiYmFja2dyb3VuZCIsImN1cnNvciIsImRlc2NyaXB0aW9uIiwiYWxpZ25JdGVtcyIsImRpc2FibGVkIiwiZm9udFdlaWdodCIsImNoZWNrZWQiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJmbGV4IiwibWluV2lkdGgiLCJvdmVyZmxvdyIsIiRzY3JvbGxPblBhcmVudCIsIiRpc01hcmtldHBsYWNlR2xvYmFsIiwibWluSGVpZ2h0IiwibWVzc2FnZSIsInVzZXJRdWVzdGlvbiIsImFjdGlvbnMiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsIm9uQXBwcm92ZSIsIm9uUmVqZWN0IiwiaXNFeHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwic2VnbWVudHMiLCJyZW5kZXJDb250ZW50QmxvY2siLCJmaW5hbEFuc3dlciIsImZsZXhTaHJpbmsiLCJtYXhIZWlnaHQiLCJvdmVyZmxvd1kiLCJtYXJnaW5Cb3R0b20iLCJpbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXYvRGV2U3RyZWFtVGltZWxpbmVEZW1vLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTdHJlYW1kb3duIH0gZnJvbSAnc3RyZWFtZG93bidcbmltcG9ydCB7IGNyZWF0ZUNvZGVQbHVnaW4gfSBmcm9tICdAc3RyZWFtZG93bi9jb2RlJ1xuXG5pbXBvcnQgeyBHbG9iYWxDb250ZXh0LCBERUZBVUxUX0FHRU5UIH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlU3RyZWFtVGltZWxpbmUgfSBmcm9tICcuLi9ob29rcy91c2VTdHJlYW1UaW1lbGluZSdcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgU3RyZWFtQXNzaXN0YW50VHVyblRpbWVsaW5lIH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvU3RyZWFtQXNzaXN0YW50VHVyblRpbWVsaW5lJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHR5cGUgeyBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlMgfSBmcm9tICcuLi91dGlscy9tYWlhU3RyZWFtZG93blJlaHlwZVBsdWdpbnMnXG5pbXBvcnQgeyBFbnRpdHlMaW5rQ3VzdG9tTGluaywgZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUgfSBmcm9tICcuLi91dGlscy9lbnRpdHlMaW5rUmVuZGVyJ1xuaW1wb3J0IHsgTUFJQUljb24gfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL2ljb25zJ1xuaW1wb3J0IHtcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIsXG4gIFNDQXNzaXN0YW50TmFtZSxcbiAgU0NBc3Npc3RhbnRBdmF0YXIsXG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9uZXdTdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9zdHlsZXMnXG5pbXBvcnQge1xuICBNT0NLX1NDRU5BUklPUyxcbiAgZ2V0U2NlbmFyaW9CeUlkLFxuICB0eXBlIE1vY2tTY2VuYXJpb0lkLFxuICB0eXBlIE1vY2tTdHJlYW1UaW1lbGluZUV2ZW50LFxufSBmcm9tICcuL21vY2tTdHJlYW1UaW1lbGluZURlbW8nXG5pbXBvcnQge1xuICBiZWdpbk1vY2tIaXRsQ29udGludWUsXG4gIGJlZ2luTW9ja1R1cm4sXG4gIHJlc2V0TW9ja1J1bm5lclN0YXRlLFxuICBydW5Nb2NrRXZlbnRMaXN0LFxuICB0eXBlIE1vY2tBcHByb3ZhbFVpU3RhdGUsXG4gIHR5cGUgTW9ja1J1bm5lclVpU3RhdGUsXG59IGZyb20gJy4vbW9ja1N0cmVhbVRpbWVsaW5lUnVubmVyJ1xuXG5jb25zdCBjb2RlID0gY3JlYXRlQ29kZVBsdWdpbih7IHRoZW1lczogWydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J10gfSlcblxuY29uc3QgbW9ja0NvbnRleHRWYWx1ZSA9IHtcbiAgc2VjdGlvbjogJ2hlYWRlcicgYXMgY29uc3QsXG4gIGFnZW50OiB7IC4uLkRFRkFVTFRfQUdFTlQsIHR5cGU6ICdvcmNoZXN0cmF0b3InIGFzIGNvbnN0LCBlbnRpdHk6ICdnbG9iYWwnIGFzIGNvbnN0IH0sXG4gIHNlbGVjdEFnZW50OiAoKSA9PiB7fSxcbiAgY2xlYXJBZ2VudDogKCkgPT4ge30sXG4gIHByb2plY3Q6IG51bGwsXG4gIHNldFByb2plY3Q6ICgpID0+IHt9LFxuICBjbGllbnQ6IG51bGwsXG4gIHNldENsaWVudDogKCkgPT4ge30sXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBmYWxzZSxcbiAgdG9nZ2xlV2ViU2VhcmNoOiAoKSA9PiB7fSxcbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBmYWxzZSxcbiAgdG9nZ2xlRGVlcFNlYXJjaDogKCkgPT4ge30sXG4gIGNoaXBzUHJvamVjdDogbnVsbCxcbiAgc2V0Q2hpcHNQcm9qZWN0OiAoKSA9PiB7fSxcbiAgY29uZmlndXJlU2V0dGluZ3NJdGVtczogeyBjdXJyZW50OiBbXSB9LFxuICByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3M6ICgpID0+IHt9LFxuICB0YXNrOiBudWxsLFxuICBzZXRUYXNrOiAoKSA9PiB7fSxcbiAgZW50aXR5VmFsdWVzOiB7IHByb2plY3RJZDogbnVsbCwgY2xpZW50SWQ6IG51bGwgfSxcbiAgc2V0RW50aXR5VmFsdWVzOiAoKSA9PiB7fSxcbn1cblxuY29uc3QgRGVtb1RpbWVsaW5lQ29udGVudCA9IG1lbW8oXG4gICh7XG4gICAgdGV4dCxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBzaG93QXNzaXN0YW50SGVhZGVyLFxuICB9OiB7XG4gICAgdGV4dDogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBzaG93QXNzaXN0YW50SGVhZGVyOiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQodGV4dCwge1xuICAgICAgZW5hYmxlZDogaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICB9KVxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD5cbiAgICAgICAge3Nob3dBc3Npc3RhbnRIZWFkZXIgJiYgKFxuICAgICAgICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICAgICAgICA8U0NBc3Npc3RhbnRBdmF0YXI+XG4gICAgICAgICAgICAgIDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICA8L1NDQXNzaXN0YW50QXZhdGFyPlxuICAgICAgICAgICAgPFNDQXNzaXN0YW50TmFtZT5NQUlBPC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICAgICAgPC9TQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICAgICl9XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXIgaXNDdXJyZW50VXNlcj17ZmFsc2V9IGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfT5cbiAgICAgICAgICAgIDxTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlN9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBTdHJlYW1kb3duPlswXVsnY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgIClcbiAgfVxuKVxuXG5EZW1vVGltZWxpbmVDb250ZW50LmRpc3BsYXlOYW1lID0gJ0RlbW9UaW1lbGluZUNvbnRlbnQnXG5cbmNvbnN0IERlbW9TdGF0aWNBc3Npc3RhbnRNZXNzYWdlID0gbWVtbygoeyB0ZXh0LCBzaG93SGVhZGVyID0gdHJ1ZSB9OiB7IHRleHQ6IHN0cmluZzsgc2hvd0hlYWRlcj86IGJvb2xlYW4gfSkgPT4gKFxuICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PlxuICAgIHtzaG93SGVhZGVyICYmIChcbiAgICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICA8L1NDQXNzaXN0YW50QXZhdGFyPlxuICAgICAgICA8U0NBc3Npc3RhbnROYW1lPk1BSUE8L1NDQXNzaXN0YW50TmFtZT5cbiAgICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICAgICl9XG4gICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyIGlzQ3VycmVudFVzZXI9e2ZhbHNlfSBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKHRleHQpfT5cbiAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICBwbHVnaW5zPXt7IGNvZGUgfX1cbiAgICAgICAgICByZWh5cGVQbHVnaW5zPXtNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlN9XG4gICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIFN0cmVhbWRvd24+WzBdWydjb21wb25lbnRzJ119XG4gICAgICAgICAgbGlua1NhZmV0eT17eyBlbmFibGVkOiBmYWxzZSB9fVxuICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0ZXh0fVxuICAgICAgICA8L1N0cmVhbWRvd24+XG4gICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4pKVxuXG5EZW1vU3RhdGljQXNzaXN0YW50TWVzc2FnZS5kaXNwbGF5TmFtZSA9ICdEZW1vU3RhdGljQXNzaXN0YW50TWVzc2FnZSdcblxuY29uc3QgSU5JVElBTF9VSTogTW9ja1J1bm5lclVpU3RhdGUgPSB7XG4gIHdhaXRpbmdSZXNwb25zZTogZmFsc2UsXG4gIGlzV3JpdGluZzogZmFsc2UsXG4gIGluaXRpYWxBY3Rpdml0eTogbnVsbCxcbiAgcGhhc2U6ICdpZGxlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERldlN0cmVhbVRpbWVsaW5lRGVtbygpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3Qgc3RyZWFtVGltZWxpbmUgPSB1c2VTdHJlYW1UaW1lbGluZSgpXG4gIGNvbnN0IFtzY2VuYXJpb0lkLCBzZXRTY2VuYXJpb0lkXSA9IHVzZVN0YXRlPE1vY2tTY2VuYXJpb0lkPignaGl0bF9idXR0b24nKVxuICBjb25zdCBbdWksIHNldFVpXSA9IHVzZVN0YXRlPE1vY2tSdW5uZXJVaVN0YXRlPihJTklUSUFMX1VJKVxuICBjb25zdCBbYXBwcm92YWxVaSwgc2V0QXBwcm92YWxVaV0gPSB1c2VTdGF0ZTxNb2NrQXBwcm92YWxVaVN0YXRlPihudWxsKVxuICBjb25zdCBbZXZlbnRMb2csIHNldEV2ZW50TG9nXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSlcbiAgY29uc3QgW2tlZXBUaW1lbGluZU9uQ29tcGxldGUsIHNldEtlZXBUaW1lbGluZU9uQ29tcGxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJvZENvbXBsZXRlQmVoYXZpb3IsIHNldFNob3dQcm9kQ29tcGxldGVCZWhhdmlvcl0gPSB1c2VTdGF0ZSh0cnVlKVxuXG4gIGNvbnN0IHNjZW5hcmlvID0gdXNlTWVtbygoKSA9PiBnZXRTY2VuYXJpb0J5SWQoc2NlbmFyaW9JZCksIFtzY2VuYXJpb0lkXSlcbiAgY29uc3QgYWNjdW11bGF0ZWRSZWYgPSB1c2VSZWYoJycpXG4gIGNvbnN0IGhpdGxDb250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgY29uc3QgcnVuSWRSZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgY29udGludWVRdWV1ZVJlZiA9IHVzZVJlZjxNb2NrU3RyZWFtVGltZWxpbmVFdmVudFtdW10+KFtdKVxuXG4gIGNvbnN0IHB1c2hMb2cgPSB1c2VDYWxsYmFjaygobGluZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0RXZlbnRMb2cocHJldiA9PiBbLi4ucHJldi5zbGljZSgtMjIpLCBsaW5lXSlcbiAgfSwgW10pXG5cbiAgY29uc3QgcnVubmVyQ2FsbGJhY2tzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgb25VaVBhdGNoOiAocGF0Y2g6IFBhcnRpYWw8TW9ja1J1bm5lclVpU3RhdGU+KSA9PiBzZXRVaShwcmV2ID0+ICh7IC4uLnByZXYsIC4uLnBhdGNoIH0pKSxcbiAgICAgIG9uQXBwcm92YWxVaTogc2V0QXBwcm92YWxVaSxcbiAgICAgIG9uSGl0bENvbnRleHQ6IChjdHg6IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCkgPT4ge1xuICAgICAgICBoaXRsQ29udGV4dFJlZi5jdXJyZW50ID0gY3R4XG4gICAgICB9LFxuICAgICAgb25Mb2c6IHB1c2hMb2csXG4gICAgICBnZXRSdW5JZDogKCkgPT4gcnVuSWRSZWYuY3VycmVudCxcbiAgICAgIGlzUnVuQWN0aXZlOiAocnVuSWQ6IG51bWJlcikgPT4gcnVuSWQgPT09IHJ1bklkUmVmLmN1cnJlbnQsXG4gICAgICBzaG93UHJvZENvbXBsZXRlQmVoYXZpb3IsXG4gICAgICBrZWVwVGltZWxpbmVPbkNvbXBsZXRlLFxuICAgIH0pLFxuICAgIFtrZWVwVGltZWxpbmVPbkNvbXBsZXRlLCBwdXNoTG9nLCBzaG93UHJvZENvbXBsZXRlQmVoYXZpb3JdXG4gIClcblxuICBjb25zdCByZXNldERlbW8gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcnVuSWRSZWYuY3VycmVudCArPSAxXG4gICAgYWNjdW11bGF0ZWRSZWYuY3VycmVudCA9ICcnXG4gICAgaGl0bENvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICBjb250aW51ZVF1ZXVlUmVmLmN1cnJlbnQgPSBbXVxuICAgIHJlc2V0TW9ja1J1bm5lclN0YXRlKHJ1bm5lckNhbGxiYWNrcylcbiAgICBzZXRFdmVudExvZyhbXSlcbiAgfSwgW3J1bm5lckNhbGxiYWNrc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXNldERlbW8oKVxuICB9LCBbc2NlbmFyaW9JZCwgcmVzZXREZW1vXSlcblxuICBjb25zdCBydW5FdmVudExpc3QgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZXZlbnRzOiBNb2NrU3RyZWFtVGltZWxpbmVFdmVudFtdLCBydW5JZDogbnVtYmVyKSA9PlxuICAgICAgcnVuTW9ja0V2ZW50TGlzdChldmVudHMsIHJ1bklkLCB0LCBhY2N1bXVsYXRlZFJlZiwgaGl0bENvbnRleHRSZWYsIHJ1bm5lckNhbGxiYWNrcyksXG4gICAgW3J1bm5lckNhbGxiYWNrcywgdF1cbiAgKVxuXG4gIGNvbnN0IHJ1bkNvbnRpbnVlUXVldWUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocnVuSWQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbmV4dFNjcmlwdCA9IGNvbnRpbnVlUXVldWVSZWYuY3VycmVudC5zaGlmdCgpXG4gICAgICBpZiAoIW5leHRTY3JpcHQ/Lmxlbmd0aCB8fCAhaGl0bENvbnRleHRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGFjY3VtdWxhdGVkUmVmLmN1cnJlbnQgPSAnJ1xuICAgICAgYmVnaW5Nb2NrSGl0bENvbnRpbnVlKHQsIGhpdGxDb250ZXh0UmVmLmN1cnJlbnQsIHJ1bm5lckNhbGxiYWNrcylcbiAgICAgIHB1c2hMb2coJy0tLSBjb250aW51ZS10aHJlYWQgLS0tJylcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXZlbnRMaXN0KG5leHRTY3JpcHQsIHJ1bklkKVxuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3BhdXNlZCcgJiYgY29udGludWVRdWV1ZVJlZi5jdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHVzaExvZygn4oaSIHNlZ3VuZG8gSElUTDogYXByb2LDoSBkZSBudWV2bycpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHVzaExvZywgcnVuRXZlbnRMaXN0LCBydW5uZXJDYWxsYmFja3MsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVBcHByb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHRocmVhZElkczogc3RyaW5nW10pID0+IHtcbiAgICAgIGlmICghYXBwcm92YWxVaSB8fCAhaGl0bENvbnRleHRSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICBzZXRBcHByb3ZhbFVpKHByZXYgPT4gKHByZXYgPyB7IC4uLnByZXYsIHN0YXR1czogJ2FwcHJvdmVkJyB9IDogcHJldikpXG4gICAgICBwdXNoTG9nKGBVSTogYXBwcm92ZSBbJHt0aHJlYWRJZHMuam9pbignLCAnKX1dYClcbiAgICAgIGF3YWl0IHJ1bkNvbnRpbnVlUXVldWUocnVuSWRSZWYuY3VycmVudClcbiAgICB9LFxuICAgIFthcHByb3ZhbFVpLCBwdXNoTG9nLCBydW5Db250aW51ZVF1ZXVlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlUmVqZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHRocmVhZElkczogc3RyaW5nW10pID0+IHtcbiAgICAgIHNldEFwcHJvdmFsVWkocHJldiA9PiAocHJldiA/IHsgLi4ucHJldiwgc3RhdHVzOiAncmVqZWN0ZWQnIH0gOiBwcmV2KSlcbiAgICAgIHB1c2hMb2coYFVJOiByZWplY3QgWyR7dGhyZWFkSWRzLmpvaW4oJywgJyl9XWApXG4gICAgICBjb250aW51ZVF1ZXVlUmVmLmN1cnJlbnQgPSBbXVxuICAgICAgc2V0VWkocHJldiA9PiAoeyAuLi5wcmV2LCBwaGFzZTogJ2RvbmUnLCB3YWl0aW5nUmVzcG9uc2U6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pKVxuICAgIH0sXG4gICAgW3B1c2hMb2ddXG4gIClcblxuICBjb25zdCBydW5EZW1vID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHJlc2V0RGVtbygpXG4gICAgY29uc3QgcnVuSWQgPSBydW5JZFJlZi5jdXJyZW50XG4gICAgY29udGludWVRdWV1ZVJlZi5jdXJyZW50ID0gW3NjZW5hcmlvLmNvbnRpbnVlRXZlbnRzLCBzY2VuYXJpby5jb250aW51ZUV2ZW50c1NlY29uZF0uZmlsdGVyKFxuICAgICAgKHNjcmlwdCk6IHNjcmlwdCBpcyBNb2NrU3RyZWFtVGltZWxpbmVFdmVudFtdID0+IEJvb2xlYW4oc2NyaXB0Py5sZW5ndGgpXG4gICAgKVxuXG4gICAgYmVnaW5Nb2NrVHVybihydW5uZXJDYWxsYmFja3MpXG4gICAgcHVzaExvZyhgRXNjZW5hcmlvOiAke3NjZW5hcmlvLnRpdGxlfWApXG4gICAgcHVzaExvZygnLS0tIGFza01haWEgLyBTU0UgLS0tJylcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkV2ZW50TGlzdChzY2VuYXJpby5zdHJlYW1FdmVudHMsIHJ1bklkKVxuICAgIGlmIChyZXN1bHQgPT09ICdwYXVzZWQnKSB7XG4gICAgICBwdXNoTG9nKCfihpIgZXNwZXJhbmRvIEFwcHJvdmFsQm94IChjb21vIHByb2QpJylcbiAgICB9XG4gIH0sIFtwdXNoTG9nLCByZXNldERlbW8sIHJ1bkV2ZW50TGlzdCwgcnVubmVyQ2FsbGJhY2tzLCBzY2VuYXJpb10pXG5cbiAgY29uc3QgcmVuZGVyVGltZWxpbmVDb250ZW50QmxvY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdGV4dCxcbiAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgc2hvd0Fzc2lzdGFudEhlYWRlcixcbiAgICB9OiB7XG4gICAgICBzZWdtZW50SWQ6IHN0cmluZ1xuICAgICAgdGV4dDogc3RyaW5nXG4gICAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgICAgc2hvd0Fzc2lzdGFudEhlYWRlcjogYm9vbGVhblxuICAgIH0pID0+IDxEZW1vVGltZWxpbmVDb250ZW50IHRleHQ9e3RleHR9IGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ30gc2hvd0Fzc2lzdGFudEhlYWRlcj17c2hvd0Fzc2lzdGFudEhlYWRlcn0gLz4sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGlzUnVubmluZyA9IHVpLnBoYXNlID09PSAncnVubmluZycgfHwgdWkucGhhc2UgPT09ICdydW5uaW5nX2NvbnRpbnVlJ1xuICBjb25zdCBzaG93TGl2ZVRpbWVsaW5lID1cbiAgICBzdHJlYW1UaW1lbGluZS50dXJuSWQgIT0gbnVsbCAmJlxuICAgIChpc1J1bm5pbmcgfHwga2VlcFRpbWVsaW5lT25Db21wbGV0ZSB8fCAodWkucGhhc2UgPT09ICdkb25lJyAmJiAhc2hvd1Byb2RDb21wbGV0ZUJlaGF2aW9yKSlcblxuICBjb25zdCBzaG93RmluYWxPbmx5ID1cbiAgICB1aS5waGFzZSA9PT0gJ2RvbmUnICYmIHNob3dQcm9kQ29tcGxldGVCZWhhdmlvciAmJiAha2VlcFRpbWVsaW5lT25Db21wbGV0ZSAmJiBzdHJlYW1UaW1lbGluZS50dXJuSWQgPT0gbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPEdsb2JhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21vY2tDb250ZXh0VmFsdWV9PlxuICAgICAgPGRpdiBzdHlsZT17eyBmb250RmFtaWx5OiAnV29yayBTYW5zLCBzYW5zLXNlcmlmJywgcGFkZGluZzogMTYgfX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6IDk2MCwgbWFyZ2luOiAnMCBhdXRvIDE2cHgnIH19PlxuICAgICAgICAgIDxoMiBzdHlsZT17eyBtYXJnaW46ICcwIDAgOHB4JywgZm9udFNpemU6IDIwIH19PlN0cmVhbSBUaW1lbGluZSArIEhJVEw8L2gyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgY29sb3I6ICcjNjY2JywgZm9udFNpemU6IDE0LCBsaW5lSGVpZ2h0OiAxLjUgfX0+XG4gICAgICAgICAgICBNb2NrIGZpZWwgYWwgZnJvbnQvYmFjazogPGNvZGU+YXBwcm92YWxfcmVxdWlyZWQ8L2NvZGU+IChib3TDs24gdnMgbWFudWFsKSwgPGNvZGU+Y29udGludWUtdGhyZWFkPC9jb2RlPiBjb257JyAnfVxuICAgICAgICAgICAgPGNvZGU+cmVzdW1pbmc8L2NvZGU+LCBtZW5zYWplcyBnZW7DqXJpY29zIHJlZW1wbGF6YWRvcyBwb3IgaTE4biwgeSA8Y29kZT5jb250ZW50PC9jb2RlPiBkZSB1bmEgZW4gbHVnYXIgZGVcbiAgICAgICAgICAgIHRva2Vucy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6IDk2MCwgbWFyZ2luOiAnMCBhdXRvIDEycHgnLCBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogOCB9fT5cbiAgICAgICAgICB7TU9DS19TQ0VOQVJJT1MubWFwKGl0ZW0gPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTY2VuYXJpb0lkKGl0ZW0uaWQpfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc2cHggMTJweCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZGRkJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBzY2VuYXJpb0lkID09PSBpdGVtLmlkID8gJyM0ZDM1NjknIDogJyNmZmYnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBzY2VuYXJpb0lkID09PSBpdGVtLmlkID8gJyNmZmYnIDogJyMzMzMnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW0udGl0bGV9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWF4V2lkdGg6IDk2MCwgbWFyZ2luOiAnMCBhdXRvIDEycHgnLCBjb2xvcjogJyM1NTUnLCBmb250U2l6ZTogMTMgfX0+e3NjZW5hcmlvLmRlc2NyaXB0aW9ufTwvcD5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1heFdpZHRoOiA5NjAsXG4gICAgICAgICAgICBtYXJnaW46ICcwIGF1dG8gMTZweCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICAgICAgZ2FwOiA4LFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17cnVuRGVtb31cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc1J1bm5pbmd9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpc1J1bm5pbmcgPyAnI2NjYycgOiAnIzRkMzU2OScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgICAgIGN1cnNvcjogaXNSdW5uaW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aXNSdW5uaW5nID8gJ1JlcHJvZHVjaWVuZG/igKYnIDogJ1JlcHJvZHVjaXIgZXNjZW5hcmlvJ31cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3Jlc2V0RGVtb31cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmc6ICc4cHggMTZweCcsIGJhY2tncm91bmQ6ICcjZWVlJywgYm9yZGVyOiAnMXB4IHNvbGlkICNkZGQnLCBib3JkZXJSYWRpdXM6IDYgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBSZWluaWNpYXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA2LCBmb250U2l6ZTogMTMgfX0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgY2hlY2tlZD17c2hvd1Byb2RDb21wbGV0ZUJlaGF2aW9yfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXRTaG93UHJvZENvbXBsZXRlQmVoYXZpb3IoZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQWwgY29tcGxldGU6IGxpbXBpYXIgdGltZWxpbmUgKHByb2QpXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA2LCBmb250U2l6ZTogMTMgfX0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgY2hlY2tlZD17a2VlcFRpbWVsaW5lT25Db21wbGV0ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0S2VlcFRpbWVsaW5lT25Db21wbGV0ZShlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFzaG93UHJvZENvbXBsZXRlQmVoYXZpb3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgTWFudGVuZXIgdGltZWxpbmUgKHByZXZpZXcpXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTYsIG1heFdpZHRoOiAxMTQwLCBtYXJnaW46ICcwIGF1dG8nLCBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjZmFmYWZhJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlOGU4ZTgnLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtmYWxzZX0gJGlzTWFya2V0cGxhY2VHbG9iYWw9e2ZhbHNlfSBzdHlsZT17eyBtaW5IZWlnaHQ6IDUyMCB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2VGcm9tVXNlciBkYXRhLW1lc3NhZ2UtaWQ9XCJkZW1vLXVzZXJcIj5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRGcm9tVXNlciBtZXNzYWdlPXtzY2VuYXJpby51c2VyUXVlc3Rpb259IC8+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZUZyb21Vc2VyPlxuXG4gICAgICAgICAgICAgIHthcHByb3ZhbFVpICYmIChcbiAgICAgICAgICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PlxuICAgICAgICAgICAgICAgICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDQXNzaXN0YW50QXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgIDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0Fzc2lzdGFudE5hbWU+TUFJQTwvU0NBc3Npc3RhbnROYW1lPlxuICAgICAgICAgICAgICAgICAgPC9TQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8U0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgICAgICAgICAgICAgICB7ISFhcHByb3ZhbFVpLm1lc3NhZ2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoYXBwcm92YWxVaS5tZXNzYWdlKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RyZWFtZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zPXt7IGNvZGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVoeXBlUGx1Z2lucz17TUFJQV9TVFJFQU1ET1dOX1JFSFlQRV9QTFVHSU5TfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1NhZmV0eT17eyBlbmFibGVkOiBmYWxzZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlraVRoZW1lPXtbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbHM9e3sgdGFibGU6IGZhbHNlLCBjb2RlOiBmYWxzZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YXBwcm92YWxVaS5tZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWxVaS5hcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsVWkuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25BcHByb3ZlPXtoYW5kbGVBcHByb3ZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWplY3Q9e2hhbmRsZVJlamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbFVpLmFwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbFVpLmFwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsVWkuYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHtzaG93TGl2ZVRpbWVsaW5lICYmIChcbiAgICAgICAgICAgICAgICA8U3RyZWFtQXNzaXN0YW50VHVyblRpbWVsaW5lXG4gICAgICAgICAgICAgICAgICBzZWdtZW50cz17c3RyZWFtVGltZWxpbmUuc2VnbWVudHN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsQWN0aXZpdHk9e3VpLmluaXRpYWxBY3Rpdml0eX1cbiAgICAgICAgICAgICAgICAgIHdhaXRpbmdSZXNwb25zZT17dWkud2FpdGluZ1Jlc3BvbnNlfVxuICAgICAgICAgICAgICAgICAgaXNXcml0aW5nPXt1aS5pc1dyaXRpbmd9XG4gICAgICAgICAgICAgICAgICByZW5kZXJDb250ZW50QmxvY2s9e3JlbmRlclRpbWVsaW5lQ29udGVudEJsb2NrfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAge3Nob3dGaW5hbE9ubHkgJiYgPERlbW9TdGF0aWNBc3Npc3RhbnRNZXNzYWdlIHRleHQ9e3NjZW5hcmlvLmZpbmFsQW5zd2VyfSAvPn1cbiAgICAgICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyMxZTFlMWUnLFxuICAgICAgICAgICAgICBjb2xvcjogJyNkNGQ0ZDQnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmc6IDEyLFxuICAgICAgICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICd1aS1tb25vc3BhY2UsIG1vbm9zcGFjZScsXG4gICAgICAgICAgICAgIG1heEhlaWdodDogNTYwLFxuICAgICAgICAgICAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBtYXJnaW5Cb3R0b206IDggfX0+RXZlbnQgbG9nPC9kaXY+XG4gICAgICAgICAgICB7ZXZlbnRMb2cubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PkVsZWfDrSBlc2NlbmFyaW8geSBwdWxzw6EgUmVwcm9kdWNpcuKApjwvc3Bhbj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIGV2ZW50TG9nLm1hcCgobGluZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17YCR7bGluZX0tJHtpbmRleH1gfSBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDQgfX0+XG4gICAgICAgICAgICAgICAgICB7bGluZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9HbG9iYWxDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxTQUFTQSxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDL0UsU0FBU0MsVUFBVSxRQUFRLFlBQVk7QUFDdkMsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBRW5ELFNBQVNDLGFBQWEsRUFBRUMsYUFBYSxRQUFRLDJCQUEyQjtBQUN4RSxTQUFTQyxJQUFJLFFBQVEsZUFBZTtBQUNwQyxTQUFTQyxpQkFBaUIsUUFBUSw0QkFBNEI7QUFDOUQsU0FBU0MsbUJBQW1CLFFBQVEsOEJBQThCO0FBQ2xFLFNBQVNDLDJCQUEyQixRQUFRLHFEQUFxRDtBQUNqRyxTQUFTQyxXQUFXLFFBQVEsNkNBQTZDO0FBRXpFLFNBQVNDLDhCQUE4QixRQUFRLHNDQUFzQztBQUNyRixTQUFTQyxvQkFBb0IsRUFBRUMs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