@projectcor/maia-components 2.11.100-6 → 2.11.100-7

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 (37) hide show
  1. package/lib/App.js +2 -4
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +14 -212
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +9 -99
  4. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +4 -91
  5. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +61 -264
  6. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +4 -1
  7. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +5 -34
  8. package/lib/hooks/useAgentModel/useCreateAgent.js +14 -40
  9. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -37
  10. package/lib/hooks/useChatManager/useChatManager.js +66 -167
  11. package/lib/hooks/useEvent.js +1 -2
  12. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +23 -183
  13. package/lib/lang/br/index.js +2 -14
  14. package/lib/lang/en/index.js +2 -14
  15. package/lib/lang/es/index.js +2 -14
  16. package/lib/lang/fr/index.js +2 -14
  17. package/lib/services/maia/Agents/getAgents.js +54 -30
  18. package/lib/services/maia/bootstrap/agentsPrefetchSession.js +124 -0
  19. package/lib/services/maia/bootstrap/fetchAgentsList.js +267 -0
  20. package/lib/services/maia/bootstrap/prefetchMaiaAgents.js +110 -0
  21. package/lib/types/agentModal.js +1 -1
  22. package/lib/types/streamActivity.js +1 -1
  23. package/lib/utils/normalizeAgentConnectors.js +3 -28
  24. package/package.json +1 -1
  25. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +0 -91
  26. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +0 -19
  27. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +0 -2
  28. package/lib/dev/DevStreamTimelineDemo.js +0 -614
  29. package/lib/dev/mockStreamTimelineDemo.js +0 -417
  30. package/lib/dev/mockStreamTimelineRunner.js +0 -298
  31. package/lib/hooks/useStreamTimeline/index.js +0 -7
  32. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +0 -37
  33. package/lib/services/maia/Agents/connectors.js +0 -124
  34. package/lib/types/streamTimeline.js +0 -2
  35. package/lib/utils/streamDebugLog.js +0 -170
  36. package/lib/utils/streamExecutionSteps.js +0 -136
  37. package/lib/utils/streamTimeline.js +0 -177
@@ -1,417 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- 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; }
4
- 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; }
5
- export var DEMO_TURN_ID = 'demo-stream-timeline-turn';
6
- export var MOCK_THREAD_ID = 'thread-demo-hitl-1';
7
- export var MOCK_THREAD_ID_SECOND = 'thread-demo-hitl-2';
8
- export var MOCK_CHECKPOINT_ID = 'checkpoint-demo-hitl';
9
- export var MOCK_SESSION_ID = 'session-demo-hitl';
10
- export var MOCK_CREATE_TASK_APPROVAL = {
11
- type: 'approval_required',
12
- pending_actions: [{
13
- tool_name: 'create_task',
14
- tool_call_id: 'call_demo_create_task',
15
- tool_args: {
16
- title: 'Demo',
17
- project_id: 1234
18
- },
19
- thread_id: MOCK_THREAD_ID
20
- }],
21
- total_actions: 1,
22
- original_thread_id: MOCK_CHECKPOINT_ID,
23
- session_id: MOCK_SESSION_ID,
24
- metadata: {
25
- project_id: '1234',
26
- lang: 'es'
27
- }
28
- };
29
- export var MOCK_TASK_ASSIGN_APPROVAL = {
30
- type: 'approval_required',
31
- pending_actions: [{
32
- tool_name: 'task_assign',
33
- tool_call_id: 'call_demo_task_assign',
34
- tool_args: {
35
- task_id: 640429,
36
- user_id: 99
37
- },
38
- thread_id: MOCK_THREAD_ID_SECOND
39
- }],
40
- total_actions: 1,
41
- original_thread_id: MOCK_CHECKPOINT_ID,
42
- session_id: MOCK_SESSION_ID,
43
- metadata: {
44
- project_id: '1234',
45
- lang: 'es'
46
- }
47
- };
48
- export var MOCK_CONTENT_PART_1 = 'Encontré la tarea **#640429 Demo** en el proyecto *Demo Project*. El estado actual es *En proceso*.';
49
- export var MOCK_CONTENT_PART_2 = '\n\nLa asigné a **Juan Pérez**. ¿Querés que le envíe un mensaje en la tarea?';
50
- export var MOCK_HITL_PROPOSAL = 'Voy a crear la tarea **Demo** en el proyecto *Demo Project* con prioridad media. ¿Confirmás la acción?';
51
- export var MOCK_HITL_RESUME_TOKENS = 'Listo, creé la tarea **[Demo](/tasks/640429/detail)**. Podés editarla desde el tablero del proyecto.';
52
- export var MOCK_HITL_CONTENT_BLOB = 'Listo, creé la tarea **[Demo](/tasks/640429/detail)** con la configuración solicitada. Ya está visible en el tablero del proyecto.';
53
- export var MOCK_HITL_CHAINED_PARTIAL = 'Creé la tarea. Ahora voy a asignarla a Juan…';
54
- export var MOCK_FINAL_NORMAL = "".concat(MOCK_CONTENT_PART_1).concat(MOCK_CONTENT_PART_2);
55
- var RESUME_CONTINUE_EVENTS = [{
56
- kind: 'wait',
57
- ms: 400,
58
- label: 'POST continue-thread'
59
- }, {
60
- kind: 'node',
61
- label: 'node · resuming (genérico backend)',
62
- payload: {
63
- node: 'resuming',
64
- message: 'Ejecutando acción aprobada…',
65
- thread_id: MOCK_THREAD_ID
66
- }
67
- }, {
68
- kind: 'wait',
69
- ms: 700,
70
- label: 'Tool arrancando'
71
- }, {
72
- kind: 'node',
73
- label: 'node · create_task',
74
- payload: {
75
- node: 'create_task',
76
- tool_name: 'create_task',
77
- message: "Creando tarea 'Demo'…",
78
- thread_id: MOCK_THREAD_ID
79
- }
80
- }, {
81
- kind: 'writing',
82
- label: 'writing_started'
83
- }, {
84
- kind: 'tokens',
85
- label: 'token · respuesta final',
86
- text: MOCK_HITL_RESUME_TOKENS,
87
- charDelayMs: 14
88
- }, {
89
- kind: 'wait',
90
- ms: 400,
91
- label: 'Cerrando stream'
92
- }, {
93
- kind: 'complete',
94
- label: 'complete'
95
- }];
96
- var RESUME_CONTENT_BLOB_EVENTS = [{
97
- kind: 'wait',
98
- ms: 400,
99
- label: 'POST continue-thread'
100
- }, {
101
- kind: 'node',
102
- label: 'node · resuming',
103
- payload: {
104
- node: 'resuming',
105
- message: 'Executing approved action…',
106
- thread_id: MOCK_THREAD_ID
107
- }
108
- }, {
109
- kind: 'node',
110
- label: 'node · create_task (nombre crudo backend)',
111
- payload: {
112
- node: 'create_task',
113
- tool_name: 'create_task',
114
- message: 'create_task',
115
- thread_id: MOCK_THREAD_ID
116
- }
117
- }, {
118
- kind: 'writing',
119
- label: 'writing_started'
120
- }, {
121
- kind: 'content',
122
- label: 'content · texto completo de una',
123
- text: MOCK_HITL_CONTENT_BLOB
124
- }, {
125
- kind: 'complete',
126
- label: 'complete'
127
- }];
128
- var MANUAL_STREAM_TAIL = [{
129
- kind: 'wait',
130
- ms: 300,
131
- label: 'Stream sigue (manual_approval_detected)'
132
- }, {
133
- kind: 'node',
134
- label: 'node · resuming',
135
- payload: {
136
- node: 'resuming',
137
- message: 'Ejecutando acción aprobada…',
138
- thread_id: MOCK_THREAD_ID
139
- }
140
- }, {
141
- kind: 'node',
142
- label: 'node · create_task',
143
- payload: {
144
- node: 'create_task',
145
- tool_name: 'create_task',
146
- message: "Creando tarea 'Demo'…",
147
- thread_id: MOCK_THREAD_ID
148
- }
149
- }, {
150
- kind: 'writing',
151
- label: 'writing_started'
152
- }, {
153
- kind: 'content',
154
- label: 'content · blob final (sin tokens)',
155
- text: MOCK_HITL_CONTENT_BLOB
156
- }, {
157
- kind: 'complete',
158
- label: 'complete'
159
- }];
160
- export var MOCK_SCENARIOS = [{
161
- id: 'normal',
162
- title: 'Flujo normal',
163
- description: 'Tools en vivo + tokens intercalados (sin HITL).',
164
- userQuestion: '¿Podés buscar la tarea Demo y asignarla a Juan?',
165
- finalAnswer: MOCK_FINAL_NORMAL,
166
- streamEvents: [{
167
- kind: 'wait',
168
- ms: 400,
169
- label: 'SSE conectado'
170
- }, {
171
- kind: 'thinking',
172
- label: 'thinking'
173
- }, {
174
- kind: 'wait',
175
- ms: 900,
176
- label: 'Agente analizando'
177
- }, {
178
- kind: 'node',
179
- label: 'node · get_task',
180
- payload: {
181
- node: 'get_task',
182
- tool_name: 'get_task',
183
- message: 'Buscando la tarea en el proyecto…'
184
- }
185
- }, {
186
- kind: 'wait',
187
- ms: 600,
188
- label: 'Tool en ejecución'
189
- }, {
190
- kind: 'node',
191
- label: 'node · get_task (ok)',
192
- payload: {
193
- node: 'get_task',
194
- tool_name: 'get_task',
195
- message: 'Tarea encontrada'
196
- }
197
- }, {
198
- kind: 'writing',
199
- label: 'writing_started'
200
- }, {
201
- kind: 'tokens',
202
- label: 'token · parte 1',
203
- text: MOCK_CONTENT_PART_1,
204
- charDelayMs: 16
205
- }, {
206
- kind: 'wait',
207
- ms: 350,
208
- label: 'Pausa'
209
- }, {
210
- kind: 'node',
211
- label: 'node · task_assign',
212
- payload: {
213
- node: 'task_assign',
214
- tool_name: 'task_assign',
215
- message: 'Asignando usuario a la tarea…'
216
- }
217
- }, {
218
- kind: 'wait',
219
- ms: 700,
220
- label: 'Tool en ejecución'
221
- }, {
222
- kind: 'node',
223
- label: 'node · task_assign (ok)',
224
- payload: {
225
- node: 'task_assign',
226
- tool_name: 'task_assign',
227
- message: 'Usuario asignado'
228
- }
229
- }, {
230
- kind: 'tokens',
231
- label: 'token · parte 2',
232
- text: MOCK_CONTENT_PART_2,
233
- charDelayMs: 14
234
- }, {
235
- kind: 'complete',
236
- label: 'complete'
237
- }]
238
- }, {
239
- id: 'hitl_button',
240
- title: 'HITL · ApprovalBox',
241
- description: 'token → approval_required (stream termina) → ApprovalBox → continue-thread con resuming + tool + tokens.',
242
- userQuestion: 'Creá una tarea Demo en el proyecto.',
243
- finalAnswer: MOCK_HITL_RESUME_TOKENS,
244
- streamEvents: [{
245
- kind: 'wait',
246
- ms: 400,
247
- label: 'SSE conectado'
248
- }, {
249
- kind: 'thinking',
250
- label: 'thinking'
251
- }, {
252
- kind: 'wait',
253
- ms: 800,
254
- label: 'Agente planificando'
255
- }, {
256
- kind: 'writing',
257
- label: 'writing_started'
258
- }, {
259
- kind: 'tokens',
260
- label: 'token · propuesta',
261
- text: MOCK_HITL_PROPOSAL,
262
- charDelayMs: 12
263
- }, {
264
- kind: 'wait',
265
- ms: 500,
266
- label: 'Grafo en human_approval'
267
- }, {
268
- kind: 'approval_required',
269
- label: 'approval_required (botón — stream settled)',
270
- approval: MOCK_CREATE_TASK_APPROVAL
271
- }],
272
- continueEvents: RESUME_CONTINUE_EVENTS
273
- }, {
274
- id: 'hitl_manual',
275
- title: 'HITL · Manual ("Sí, confirmo")',
276
- description: 'approval_required con manual_approval_detected: sin ApprovalBox, el stream sigue con resuming + content blob.',
277
- userQuestion: 'Sí, confirmo. Creá la tarea Demo.',
278
- finalAnswer: MOCK_HITL_CONTENT_BLOB,
279
- streamEvents: [{
280
- kind: 'wait',
281
- ms: 400,
282
- label: 'SSE conectado'
283
- }, {
284
- kind: 'thinking',
285
- label: 'thinking'
286
- }, {
287
- kind: 'wait',
288
- ms: 600,
289
- label: 'Detectando manual approval'
290
- }, {
291
- kind: 'writing',
292
- label: 'writing_started'
293
- }, {
294
- kind: 'tokens',
295
- label: 'token · ack',
296
- text: 'Perfecto, procedo con la creación…',
297
- charDelayMs: 14
298
- }, {
299
- kind: 'wait',
300
- ms: 400,
301
- label: 'human_approval + manual detectado'
302
- }, {
303
- kind: 'approval_required',
304
- label: 'approval_required (manual — stream NO termina)',
305
- approval: _objectSpread(_objectSpread({}, MOCK_CREATE_TASK_APPROVAL), {}, {
306
- manual_approval_detected: true,
307
- warning_message: 'Confirmaste la acción por mensaje de texto.'
308
- })
309
- }].concat(MANUAL_STREAM_TAIL)
310
- }, {
311
- id: 'hitl_content_blob',
312
- title: 'HITL · Content de una (post-resume)',
313
- description: 'Tras aprobar: resuming genérico, node con nombre crudo de tool, respuesta en un solo evento content.',
314
- userQuestion: 'Creá la tarea Demo.',
315
- finalAnswer: MOCK_HITL_CONTENT_BLOB,
316
- streamEvents: [{
317
- kind: 'thinking',
318
- label: 'thinking'
319
- }, {
320
- kind: 'writing',
321
- label: 'writing_started'
322
- }, {
323
- kind: 'tokens',
324
- label: 'token · propuesta',
325
- text: MOCK_HITL_PROPOSAL,
326
- charDelayMs: 12
327
- }, {
328
- kind: 'approval_required',
329
- label: 'approval_required (botón)',
330
- approval: MOCK_CREATE_TASK_APPROVAL
331
- }],
332
- continueEvents: RESUME_CONTENT_BLOB_EVENTS
333
- }, {
334
- id: 'hitl_chained',
335
- title: 'HITL · Encadenado (2 approvals)',
336
- description: 'Primer continue OK → agente pide otra tool → segundo ApprovalBox → segundo continue.',
337
- userQuestion: 'Creá la tarea Demo y asignala a Juan.',
338
- finalAnswer: "".concat(MOCK_HITL_RESUME_TOKENS, "\n\nTambi\xE9n asign\xE9 la tarea a **Juan P\xE9rez**."),
339
- streamEvents: [{
340
- kind: 'thinking',
341
- label: 'thinking'
342
- }, {
343
- kind: 'writing',
344
- label: 'writing_started'
345
- }, {
346
- kind: 'tokens',
347
- label: 'token · propuesta create',
348
- text: MOCK_HITL_PROPOSAL,
349
- charDelayMs: 12
350
- }, {
351
- kind: 'approval_required',
352
- label: 'approval_required #1 · create_task',
353
- approval: MOCK_CREATE_TASK_APPROVAL
354
- }],
355
- continueEvents: [].concat(_toConsumableArray(RESUME_CONTINUE_EVENTS.slice(0, -1)), [{
356
- kind: 'wait',
357
- ms: 500,
358
- label: 'Agente pide segunda tool'
359
- }, {
360
- kind: 'writing',
361
- label: 'writing_started'
362
- }, {
363
- kind: 'tokens',
364
- label: 'token · transición',
365
- text: MOCK_HITL_CHAINED_PARTIAL,
366
- charDelayMs: 12
367
- }, {
368
- kind: 'approval_required',
369
- label: 'approval_required #2 · task_assign',
370
- approval: MOCK_TASK_ASSIGN_APPROVAL
371
- }]),
372
- continueEventsSecond: [{
373
- kind: 'wait',
374
- ms: 400,
375
- label: 'POST continue-thread #2'
376
- }, {
377
- kind: 'node',
378
- label: 'node · resuming',
379
- payload: {
380
- node: 'resuming',
381
- message: 'Ejecutando acción aprobada…',
382
- thread_id: MOCK_THREAD_ID_SECOND
383
- }
384
- }, {
385
- kind: 'node',
386
- label: 'node · task_assign',
387
- payload: {
388
- node: 'task_assign',
389
- tool_name: 'task_assign',
390
- message: 'Asignando usuario a la tarea…',
391
- thread_id: MOCK_THREAD_ID_SECOND
392
- }
393
- }, {
394
- kind: 'writing',
395
- label: 'writing_started'
396
- }, {
397
- kind: 'tokens',
398
- label: 'token · cierre',
399
- text: '\n\nTambién asigné la tarea a **Juan Pérez**.',
400
- charDelayMs: 12
401
- }, {
402
- kind: 'complete',
403
- label: 'complete'
404
- }]
405
- }];
406
- export var getScenarioById = function getScenarioById(id) {
407
- var _MOCK_SCENARIOS$find;
408
- return (_MOCK_SCENARIOS$find = MOCK_SCENARIOS.find(function (s) {
409
- return s.id === id;
410
- })) !== null && _MOCK_SCENARIOS$find !== void 0 ? _MOCK_SCENARIOS$find : MOCK_SCENARIOS[0];
411
- };
412
- export var sleep = function sleep(ms) {
413
- return new Promise(function (resolve) {
414
- window.setTimeout(resolve, ms);
415
- });
416
- };
417
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERU1PX1RVUk5fSUQiLCJNT0NLX1RIUkVBRF9JRCIsIk1PQ0tfVEhSRUFEX0lEX1NFQ09ORCIsIk1PQ0tfQ0hFQ0tQT0lOVF9JRCIsIk1PQ0tfU0VTU0lPTl9JRCIsIk1PQ0tfQ1JFQVRFX1RBU0tfQVBQUk9WQUwiLCJ0eXBlIiwicGVuZGluZ19hY3Rpb25zIiwidG9vbF9uYW1lIiwidG9vbF9jYWxsX2lkIiwidG9vbF9hcmdzIiwidGl0bGUiLCJwcm9qZWN0X2lkIiwidGhyZWFkX2lkIiwidG90YWxfYWN0aW9ucyIsIm9yaWdpbmFsX3RocmVhZF9pZCIsInNlc3Npb25faWQiLCJtZXRhZGF0YSIsImxhbmciLCJNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMIiwidGFza19pZCIsInVzZXJfaWQiLCJNT0NLX0NPTlRFTlRfUEFSVF8xIiwiTU9DS19DT05URU5UX1BBUlRfMiIsIk1PQ0tfSElUTF9QUk9QT1NBTCIsIk1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TIiwiTU9DS19ISVRMX0NPTlRFTlRfQkxPQiIsIk1PQ0tfSElUTF9DSEFJTkVEX1BBUlRJQUwiLCJNT0NLX0ZJTkFMX05PUk1BTCIsImNvbmNhdCIsIlJFU1VNRV9DT05USU5VRV9FVkVOVFMiLCJraW5kIiwibXMiLCJsYWJlbCIsInBheWxvYWQiLCJub2RlIiwibWVzc2FnZSIsInRleHQiLCJjaGFyRGVsYXlNcyIsIlJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTIiwiTUFOVUFMX1NUUkVBTV9UQUlMIiwiTU9DS19TQ0VOQVJJT1MiLCJpZCIsImRlc2NyaXB0aW9uIiwidXNlclF1ZXN0aW9uIiwiZmluYWxBbnN3ZXIiLCJzdHJlYW1FdmVudHMiLCJhcHByb3ZhbCIsImNvbnRpbnVlRXZlbnRzIiwiX29iamVjdFNwcmVhZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsIndhcm5pbmdfbWVzc2FnZSIsIl90b0NvbnN1bWFibGVBcnJheSIsInNsaWNlIiwiY29udGludWVFdmVudHNTZWNvbmQiLCJnZXRTY2VuYXJpb0J5SWQiLCJfTU9DS19TQ0VOQVJJT1MkZmluZCIsImZpbmQiLCJzIiwic2xlZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndpbmRvdyIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGV2L21vY2tTdHJlYW1UaW1lbGluZURlbW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9DaGF0J1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5cbmV4cG9ydCB0eXBlIE1vY2tTdHJlYW1UaW1lbGluZUV2ZW50ID1cbiAgfCB7IGtpbmQ6ICd3YWl0JzsgbXM6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAndGhpbmtpbmcnOyBsYWJlbD86IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnd3JpdGluZyc7IGxhYmVsPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdub2RlJzsgcGF5bG9hZDogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZDsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAndG9rZW5zJzsgdGV4dDogc3RyaW5nOyBjaGFyRGVsYXlNcz86IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9XG4gIC8qKiBCYWNrZW5kIGVudsOtYSBgY29udGVudGAgZGUgdW5hIChzaW4gdG9rZW5pemFyKSDigJQgdMOtcGljbyBwb3N0LXJlc3VtZSBvIHJlc3B1ZXN0YXMgY29ydGFzICovXG4gIHwgeyBraW5kOiAnY29udGVudCc7IHRleHQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnOyBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0OyBsYWJlbDogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdjb21wbGV0ZSc7IGxhYmVsOiBzdHJpbmcgfVxuXG5leHBvcnQgdHlwZSBNb2NrU2NlbmFyaW9JZCA9ICdub3JtYWwnIHwgJ2hpdGxfYnV0dG9uJyB8ICdoaXRsX21hbnVhbCcgfCAnaGl0bF9jb250ZW50X2Jsb2InIHwgJ2hpdGxfY2hhaW5lZCdcblxuZXhwb3J0IHR5cGUgTW9ja1NjZW5hcmlvID0ge1xuICBpZDogTW9ja1NjZW5hcmlvSWRcbiAgdGl0bGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHVzZXJRdWVzdGlvbjogc3RyaW5nXG4gIGZpbmFsQW5zd2VyOiBzdHJpbmdcbiAgLyoqIFN0cmVhbSBpbmljaWFsIChhc2tNYWlhIG8gaGFzdGEgYXBwcm92YWwpICovXG4gIHN0cmVhbUV2ZW50czogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxuICAvKiogY29udGludWUtdGhyZWFkIHRyYXMgYXByb2JhciBlbiBVSSAoc29sbyBISVRMIGJvdMOzbiAvIGVuY2FkZW5hZG8pICovXG4gIGNvbnRpbnVlRXZlbnRzPzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxuICAvKiogU2VndW5kbyBjb250aW51ZSBzaSBoYXkgSElUTCBlbmNhZGVuYWRvICovXG4gIGNvbnRpbnVlRXZlbnRzU2Vjb25kPzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgREVNT19UVVJOX0lEID0gJ2RlbW8tc3RyZWFtLXRpbWVsaW5lLXR1cm4nXG5cbmV4cG9ydCBjb25zdCBNT0NLX1RIUkVBRF9JRCA9ICd0aHJlYWQtZGVtby1oaXRsLTEnXG5leHBvcnQgY29uc3QgTU9DS19USFJFQURfSURfU0VDT05EID0gJ3RocmVhZC1kZW1vLWhpdGwtMidcbmV4cG9ydCBjb25zdCBNT0NLX0NIRUNLUE9JTlRfSUQgPSAnY2hlY2twb2ludC1kZW1vLWhpdGwnXG5leHBvcnQgY29uc3QgTU9DS19TRVNTSU9OX0lEID0gJ3Nlc3Npb24tZGVtby1oaXRsJ1xuXG5leHBvcnQgY29uc3QgTU9DS19DUkVBVEVfVEFTS19BUFBST1ZBTDogQXBwcm92YWxSZXF1ZXN0ID0ge1xuICB0eXBlOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICBwZW5kaW5nX2FjdGlvbnM6IFtcbiAgICB7XG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX2NhbGxfaWQ6ICdjYWxsX2RlbW9fY3JlYXRlX3Rhc2snLFxuICAgICAgdG9vbF9hcmdzOiB7IHRpdGxlOiAnRGVtbycsIHByb2plY3RfaWQ6IDEyMzQgfSxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgXSxcbiAgdG90YWxfYWN0aW9uczogMSxcbiAgb3JpZ2luYWxfdGhyZWFkX2lkOiBNT0NLX0NIRUNLUE9JTlRfSUQsXG4gIHNlc3Npb25faWQ6IE1PQ0tfU0VTU0lPTl9JRCxcbiAgbWV0YWRhdGE6IHsgcHJvamVjdF9pZDogJzEyMzQnLCBsYW5nOiAnZXMnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMOiBBcHByb3ZhbFJlcXVlc3QgPSB7XG4gIHR5cGU6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gIHBlbmRpbmdfYWN0aW9uczogW1xuICAgIHtcbiAgICAgIHRvb2xfbmFtZTogJ3Rhc2tfYXNzaWduJyxcbiAgICAgIHRvb2xfY2FsbF9pZDogJ2NhbGxfZGVtb190YXNrX2Fzc2lnbicsXG4gICAgICB0b29sX2FyZ3M6IHsgdGFza19pZDogNjQwNDI5LCB1c2VyX2lkOiA5OSB9LFxuICAgICAgdGhyZWFkX2lkOiBNT0NLX1RIUkVBRF9JRF9TRUNPTkQsXG4gICAgfSxcbiAgXSxcbiAgdG90YWxfYWN0aW9uczogMSxcbiAgb3JpZ2luYWxfdGhyZWFkX2lkOiBNT0NLX0NIRUNLUE9JTlRfSUQsXG4gIHNlc3Npb25faWQ6IE1PQ0tfU0VTU0lPTl9JRCxcbiAgbWV0YWRhdGE6IHsgcHJvamVjdF9pZDogJzEyMzQnLCBsYW5nOiAnZXMnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBNT0NLX0NPTlRFTlRfUEFSVF8xID1cbiAgJ0VuY29udHLDqSBsYSB0YXJlYSAqKiM2NDA0MjkgRGVtbyoqIGVuIGVsIHByb3llY3RvICpEZW1vIFByb2plY3QqLiBFbCBlc3RhZG8gYWN0dWFsIGVzICpFbiBwcm9jZXNvKi4nXG5cbmV4cG9ydCBjb25zdCBNT0NLX0NPTlRFTlRfUEFSVF8yID0gJ1xcblxcbkxhIGFzaWduw6kgYSAqKkp1YW4gUMOpcmV6KiouIMK/UXVlcsOpcyBxdWUgbGUgZW52w61lIHVuIG1lbnNhamUgZW4gbGEgdGFyZWE/J1xuXG5leHBvcnQgY29uc3QgTU9DS19ISVRMX1BST1BPU0FMID1cbiAgJ1ZveSBhIGNyZWFyIGxhIHRhcmVhICoqRGVtbyoqIGVuIGVsIHByb3llY3RvICpEZW1vIFByb2plY3QqIGNvbiBwcmlvcmlkYWQgbWVkaWEuIMK/Q29uZmlybcOhcyBsYSBhY2Npw7NuPydcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TID1cbiAgJ0xpc3RvLCBjcmXDqSBsYSB0YXJlYSAqKltEZW1vXSgvdGFza3MvNjQwNDI5L2RldGFpbCkqKi4gUG9kw6lzIGVkaXRhcmxhIGRlc2RlIGVsIHRhYmxlcm8gZGVsIHByb3llY3RvLidcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9DT05URU5UX0JMT0IgPVxuICAnTGlzdG8sIGNyZcOpIGxhIHRhcmVhICoqW0RlbW9dKC90YXNrcy82NDA0MjkvZGV0YWlsKSoqIGNvbiBsYSBjb25maWd1cmFjacOzbiBzb2xpY2l0YWRhLiBZYSBlc3TDoSB2aXNpYmxlIGVuIGVsIHRhYmxlcm8gZGVsIHByb3llY3RvLidcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9DSEFJTkVEX1BBUlRJQUwgPSAnQ3Jlw6kgbGEgdGFyZWEuIEFob3JhIHZveSBhIGFzaWduYXJsYSBhIEp1YW7igKYnXG5cbmV4cG9ydCBjb25zdCBNT0NLX0ZJTkFMX05PUk1BTCA9IGAke01PQ0tfQ09OVEVOVF9QQVJUXzF9JHtNT0NLX0NPTlRFTlRfUEFSVF8yfWBcblxuY29uc3QgUkVTVU1FX0NPTlRJTlVFX0VWRU5UUzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXSA9IFtcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnUE9TVCBjb250aW51ZS10aHJlYWQnIH0sXG4gIHtcbiAgICBraW5kOiAnbm9kZScsXG4gICAgbGFiZWw6ICdub2RlIMK3IHJlc3VtaW5nIChnZW7DqXJpY28gYmFja2VuZCknLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA3MDAsIGxhYmVsOiAnVG9vbCBhcnJhbmNhbmRvJyB9LFxuICB7XG4gICAga2luZDogJ25vZGUnLFxuICAgIGxhYmVsOiAnbm9kZSDCtyBjcmVhdGVfdGFzaycsXG4gICAgcGF5bG9hZDoge1xuICAgICAgbm9kZTogJ2NyZWF0ZV90YXNrJyxcbiAgICAgIHRvb2xfbmFtZTogJ2NyZWF0ZV90YXNrJyxcbiAgICAgIG1lc3NhZ2U6IFwiQ3JlYW5kbyB0YXJlYSAnRGVtbyfigKZcIixcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAgeyBraW5kOiAnd3JpdGluZycsIGxhYmVsOiAnd3JpdGluZ19zdGFydGVkJyB9LFxuICB7XG4gICAga2luZDogJ3Rva2VucycsXG4gICAgbGFiZWw6ICd0b2tlbiDCtyByZXNwdWVzdGEgZmluYWwnLFxuICAgIHRleHQ6IE1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TLFxuICAgIGNoYXJEZWxheU1zOiAxNCxcbiAgfSxcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnQ2VycmFuZG8gc3RyZWFtJyB9LFxuICB7IGtpbmQ6ICdjb21wbGV0ZScsIGxhYmVsOiAnY29tcGxldGUnIH0sXG5dXG5cbmNvbnN0IFJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTOiBNb2NrU3RyZWFtVGltZWxpbmVFdmVudFtdID0gW1xuICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdQT1NUIGNvbnRpbnVlLXRocmVhZCcgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRXhlY3V0aW5nIGFwcHJvdmVkIGFjdGlvbuKApicsXG4gICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lELFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBraW5kOiAnbm9kZScsXG4gICAgbGFiZWw6ICdub2RlIMK3IGNyZWF0ZV90YXNrIChub21icmUgY3J1ZG8gYmFja2VuZCknLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICBtZXNzYWdlOiAnY3JlYXRlX3Rhc2snLFxuICAgICAgdGhyZWFkX2lkOiBNT0NLX1RIUkVBRF9JRCxcbiAgICB9LFxuICB9LFxuICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gIHtcbiAgICBraW5kOiAnY29udGVudCcsXG4gICAgbGFiZWw6ICdjb250ZW50IMK3IHRleHRvIGNvbXBsZXRvIGRlIHVuYScsXG4gICAgdGV4dDogTU9DS19ISVRMX0NPTlRFTlRfQkxPQixcbiAgfSxcbiAgeyBraW5kOiAnY29tcGxldGUnLCBsYWJlbDogJ2NvbXBsZXRlJyB9LFxuXVxuXG5jb25zdCBNQU5VQUxfU1RSRUFNX1RBSUw6IE1vY2tTdHJlYW1UaW1lbGluZUV2ZW50W10gPSBbXG4gIHsga2luZDogJ3dhaXQnLCBtczogMzAwLCBsYWJlbDogJ1N0cmVhbSBzaWd1ZSAobWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKScgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgY3JlYXRlX3Rhc2snLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICBtZXNzYWdlOiBcIkNyZWFuZG8gdGFyZWEgJ0RlbW8n4oCmXCIsXG4gICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lELFxuICAgIH0sXG4gIH0sXG4gIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAge1xuICAgIGtpbmQ6ICdjb250ZW50JyxcbiAgICBsYWJlbDogJ2NvbnRlbnQgwrcgYmxvYiBmaW5hbCAoc2luIHRva2VucyknLFxuICAgIHRleHQ6IE1PQ0tfSElUTF9DT05URU5UX0JMT0IsXG4gIH0sXG4gIHsga2luZDogJ2NvbXBsZXRlJywgbGFiZWw6ICdjb21wbGV0ZScgfSxcbl1cblxuZXhwb3J0IGNvbnN0IE1PQ0tfU0NFTkFSSU9TOiBNb2NrU2NlbmFyaW9bXSA9IFtcbiAge1xuICAgIGlkOiAnbm9ybWFsJyxcbiAgICB0aXRsZTogJ0ZsdWpvIG5vcm1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdUb29scyBlbiB2aXZvICsgdG9rZW5zIGludGVyY2FsYWRvcyAoc2luIEhJVEwpLicsXG4gICAgdXNlclF1ZXN0aW9uOiAnwr9Qb2TDqXMgYnVzY2FyIGxhIHRhcmVhIERlbW8geSBhc2lnbmFybGEgYSBKdWFuPycsXG4gICAgZmluYWxBbnN3ZXI6IE1PQ0tfRklOQUxfTk9STUFMLFxuICAgIHN0cmVhbUV2ZW50czogW1xuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnU1NFIGNvbmVjdGFkbycgfSxcbiAgICAgIHsga2luZDogJ3RoaW5raW5nJywgbGFiZWw6ICd0aGlua2luZycgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogOTAwLCBsYWJlbDogJ0FnZW50ZSBhbmFsaXphbmRvJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnbm9kZScsXG4gICAgICAgIGxhYmVsOiAnbm9kZSDCtyBnZXRfdGFzaycsXG4gICAgICAgIHBheWxvYWQ6IHsgbm9kZTogJ2dldF90YXNrJywgdG9vbF9uYW1lOiAnZ2V0X3Rhc2snLCBtZXNzYWdlOiAnQnVzY2FuZG8gbGEgdGFyZWEgZW4gZWwgcHJveWVjdG/igKYnIH0sXG4gICAgICB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA2MDAsIGxhYmVsOiAnVG9vbCBlbiBlamVjdWNpw7NuJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnbm9kZScsXG4gICAgICAgIGxhYmVsOiAnbm9kZSDCtyBnZXRfdGFzayAob2spJyxcbiAgICAgICAgcGF5bG9hZDogeyBub2RlOiAnZ2V0X3Rhc2snLCB0b29sX25hbWU6ICdnZXRfdGFzaycsIG1lc3NhZ2U6ICdUYXJlYSBlbmNvbnRyYWRhJyB9LFxuICAgICAgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcGFydGUgMScsIHRleHQ6IE1PQ0tfQ09OVEVOVF9QQVJUXzEsIGNoYXJEZWxheU1zOiAxNiB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiAzNTAsIGxhYmVsOiAnUGF1c2EnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdub2RlJyxcbiAgICAgICAgbGFiZWw6ICdub2RlIMK3IHRhc2tfYXNzaWduJyxcbiAgICAgICAgcGF5bG9hZDogeyBub2RlOiAndGFza19hc3NpZ24nLCB0b29sX25hbWU6ICd0YXNrX2Fzc2lnbicsIG1lc3NhZ2U6ICdBc2lnbmFuZG8gdXN1YXJpbyBhIGxhIHRhcmVh4oCmJyB9LFxuICAgICAgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogNzAwLCBsYWJlbDogJ1Rvb2wgZW4gZWplY3VjacOzbicgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ25vZGUnLFxuICAgICAgICBsYWJlbDogJ25vZGUgwrcgdGFza19hc3NpZ24gKG9rKScsXG4gICAgICAgIHBheWxvYWQ6IHsgbm9kZTogJ3Rhc2tfYXNzaWduJywgdG9vbF9uYW1lOiAndGFza19hc3NpZ24nLCBtZXNzYWdlOiAnVXN1YXJpbyBhc2lnbmFkbycgfSxcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICd0b2tlbnMnLCBsYWJlbDogJ3Rva2VuIMK3IHBhcnRlIDInLCB0ZXh0OiBNT0NLX0NPTlRFTlRfUEFSVF8yLCBjaGFyRGVsYXlNczogMTQgfSxcbiAgICAgIHsga2luZDogJ2NvbXBsZXRlJywgbGFiZWw6ICdjb21wbGV0ZScgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX2J1dHRvbicsXG4gICAgdGl0bGU6ICdISVRMIMK3IEFwcHJvdmFsQm94JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICd0b2tlbiDihpIgYXBwcm92YWxfcmVxdWlyZWQgKHN0cmVhbSB0ZXJtaW5hKSDihpIgQXBwcm92YWxCb3gg4oaSIGNvbnRpbnVlLXRocmVhZCBjb24gcmVzdW1pbmcgKyB0b29sICsgdG9rZW5zLicsXG4gICAgdXNlclF1ZXN0aW9uOiAnQ3Jlw6EgdW5hIHRhcmVhIERlbW8gZW4gZWwgcHJveWVjdG8uJyxcbiAgICBmaW5hbEFuc3dlcjogTU9DS19ISVRMX1JFU1VNRV9UT0tFTlMsXG4gICAgc3RyZWFtRXZlbnRzOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdTU0UgY29uZWN0YWRvJyB9LFxuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA4MDAsIGxhYmVsOiAnQWdlbnRlIHBsYW5pZmljYW5kbycgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcHJvcHVlc3RhJywgdGV4dDogTU9DS19ISVRMX1BST1BPU0FMLCBjaGFyRGVsYXlNczogMTIgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogNTAwLCBsYWJlbDogJ0dyYWZvIGVuIGh1bWFuX2FwcHJvdmFsJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICAgICAgICBsYWJlbDogJ2FwcHJvdmFsX3JlcXVpcmVkIChib3TDs24g4oCUIHN0cmVhbSBzZXR0bGVkKScsXG4gICAgICAgIGFwcHJvdmFsOiBNT0NLX0NSRUFURV9UQVNLX0FQUFJPVkFMLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbnRpbnVlRXZlbnRzOiBSRVNVTUVfQ09OVElOVUVfRVZFTlRTLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX21hbnVhbCcsXG4gICAgdGl0bGU6ICdISVRMIMK3IE1hbnVhbCAoXCJTw60sIGNvbmZpcm1vXCIpJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdhcHByb3ZhbF9yZXF1aXJlZCBjb24gbWFudWFsX2FwcHJvdmFsX2RldGVjdGVkOiBzaW4gQXBwcm92YWxCb3gsIGVsIHN0cmVhbSBzaWd1ZSBjb24gcmVzdW1pbmcgKyBjb250ZW50IGJsb2IuJyxcbiAgICB1c2VyUXVlc3Rpb246ICdTw60sIGNvbmZpcm1vLiBDcmXDoSBsYSB0YXJlYSBEZW1vLicsXG4gICAgZmluYWxBbnN3ZXI6IE1PQ0tfSElUTF9DT05URU5UX0JMT0IsXG4gICAgc3RyZWFtRXZlbnRzOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdTU0UgY29uZWN0YWRvJyB9LFxuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA2MDAsIGxhYmVsOiAnRGV0ZWN0YW5kbyBtYW51YWwgYXBwcm92YWwnIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7IGtpbmQ6ICd0b2tlbnMnLCBsYWJlbDogJ3Rva2VuIMK3IGFjaycsIHRleHQ6ICdQZXJmZWN0bywgcHJvY2VkbyBjb24gbGEgY3JlYWNpw7Nu4oCmJywgY2hhckRlbGF5TXM6IDE0IH0sXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdodW1hbl9hcHByb3ZhbCArIG1hbnVhbCBkZXRlY3RhZG8nIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gICAgICAgIGxhYmVsOiAnYXBwcm92YWxfcmVxdWlyZWQgKG1hbnVhbCDigJQgc3RyZWFtIE5PIHRlcm1pbmEpJyxcbiAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAuLi5NT0NLX0NSRUFURV9UQVNLX0FQUFJPVkFMLFxuICAgICAgICAgIG1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZDogdHJ1ZSxcbiAgICAgICAgICB3YXJuaW5nX21lc3NhZ2U6ICdDb25maXJtYXN0ZSBsYSBhY2Npw7NuIHBvciBtZW5zYWplIGRlIHRleHRvLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uTUFOVUFMX1NUUkVBTV9UQUlMLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hpdGxfY29udGVudF9ibG9iJyxcbiAgICB0aXRsZTogJ0hJVEwgwrcgQ29udGVudCBkZSB1bmEgKHBvc3QtcmVzdW1lKScsXG4gICAgZGVzY3JpcHRpb246ICdUcmFzIGFwcm9iYXI6IHJlc3VtaW5nIGdlbsOpcmljbywgbm9kZSBjb24gbm9tYnJlIGNydWRvIGRlIHRvb2wsIHJlc3B1ZXN0YSBlbiB1biBzb2xvIGV2ZW50byBjb250ZW50LicsXG4gICAgdXNlclF1ZXN0aW9uOiAnQ3Jlw6EgbGEgdGFyZWEgRGVtby4nLFxuICAgIGZpbmFsQW5zd2VyOiBNT0NLX0hJVExfQ09OVEVOVF9CTE9CLFxuICAgIHN0cmVhbUV2ZW50czogW1xuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd3JpdGluZycsIGxhYmVsOiAnd3JpdGluZ19zdGFydGVkJyB9LFxuICAgICAgeyBraW5kOiAndG9rZW5zJywgbGFiZWw6ICd0b2tlbiDCtyBwcm9wdWVzdGEnLCB0ZXh0OiBNT0NLX0hJVExfUFJPUE9TQUwsIGNoYXJEZWxheU1zOiAxMiB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICAgICAgICBsYWJlbDogJ2FwcHJvdmFsX3JlcXVpcmVkIChib3TDs24pJyxcbiAgICAgICAgYXBwcm92YWw6IE1PQ0tfQ1JFQVRFX1RBU0tfQVBQUk9WQUwsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29udGludWVFdmVudHM6IFJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX2NoYWluZWQnLFxuICAgIHRpdGxlOiAnSElUTCDCtyBFbmNhZGVuYWRvICgyIGFwcHJvdmFscyknLFxuICAgIGRlc2NyaXB0aW9uOiAnUHJpbWVyIGNvbnRpbnVlIE9LIOKGkiBhZ2VudGUgcGlkZSBvdHJhIHRvb2wg4oaSIHNlZ3VuZG8gQXBwcm92YWxCb3gg4oaSIHNlZ3VuZG8gY29udGludWUuJyxcbiAgICB1c2VyUXVlc3Rpb246ICdDcmXDoSBsYSB0YXJlYSBEZW1vIHkgYXNpZ25hbGEgYSBKdWFuLicsXG4gICAgZmluYWxBbnN3ZXI6IGAke01PQ0tfSElUTF9SRVNVTUVfVE9LRU5TfVxcblxcblRhbWJpw6luIGFzaWduw6kgbGEgdGFyZWEgYSAqKkp1YW4gUMOpcmV6KiouYCxcbiAgICBzdHJlYW1FdmVudHM6IFtcbiAgICAgIHsga2luZDogJ3RoaW5raW5nJywgbGFiZWw6ICd0aGlua2luZycgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcHJvcHVlc3RhIGNyZWF0ZScsIHRleHQ6IE1PQ0tfSElUTF9QUk9QT1NBTCwgY2hhckRlbGF5TXM6IDEyIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gICAgICAgIGxhYmVsOiAnYXBwcm92YWxfcmVxdWlyZWQgIzEgwrcgY3JlYXRlX3Rhc2snLFxuICAgICAgICBhcHByb3ZhbDogTU9DS19DUkVBVEVfVEFTS19BUFBST1ZBTCxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb250aW51ZUV2ZW50czogW1xuICAgICAgLi4uUkVTVU1FX0NPTlRJTlVFX0VWRU5UUy5zbGljZSgwLCAtMSksXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDUwMCwgbGFiZWw6ICdBZ2VudGUgcGlkZSBzZWd1bmRhIHRvb2wnIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICd0b2tlbnMnLFxuICAgICAgICBsYWJlbDogJ3Rva2VuIMK3IHRyYW5zaWNpw7NuJyxcbiAgICAgICAgdGV4dDogTU9DS19ISVRMX0NIQUlORURfUEFSVElBTCxcbiAgICAgICAgY2hhckRlbGF5TXM6IDEyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ2FwcHJvdmFsX3JlcXVpcmVkJyxcbiAgICAgICAgbGFiZWw6ICdhcHByb3ZhbF9yZXF1aXJlZCAjMiDCtyB0YXNrX2Fzc2lnbicsXG4gICAgICAgIGFwcHJvdmFsOiBNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbnRpbnVlRXZlbnRzU2Vjb25kOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdQT1NUIGNvbnRpbnVlLXRocmVhZCAjMicgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ25vZGUnLFxuICAgICAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgbm9kZTogJ3Jlc3VtaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lEX1NFQ09ORCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdub2RlJyxcbiAgICAgICAgbGFiZWw6ICdub2RlIMK3IHRhc2tfYXNzaWduJyxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIG5vZGU6ICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICAgdG9vbF9uYW1lOiAndGFza19hc3NpZ24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdBc2lnbmFuZG8gdXN1YXJpbyBhIGxhIHRhcmVh4oCmJyxcbiAgICAgICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lEX1NFQ09ORCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICd0b2tlbnMnLFxuICAgICAgICBsYWJlbDogJ3Rva2VuIMK3IGNpZXJyZScsXG4gICAgICAgIHRleHQ6ICdcXG5cXG5UYW1iacOpbiBhc2lnbsOpIGxhIHRhcmVhIGEgKipKdWFuIFDDqXJleioqLicsXG4gICAgICAgIGNoYXJEZWxheU1zOiAxMixcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICdjb21wbGV0ZScsIGxhYmVsOiAnY29tcGxldGUnIH0sXG4gICAgXSxcbiAgfSxcbl1cblxuZXhwb3J0IGNvbnN0IGdldFNjZW5hcmlvQnlJZCA9IChpZDogTW9ja1NjZW5hcmlvSWQpOiBNb2NrU2NlbmFyaW8gPT5cbiAgTU9DS19TQ0VOQVJJT1MuZmluZChzID0+IHMuaWQgPT09IGlkKSA/PyBNT0NLX1NDRU5BUklPU1swXVxuXG5leHBvcnQgY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT5cbiAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQocmVzb2x2ZSwgbXMpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUE4QkEsT0FBTyxJQUFNQSxZQUFZLEdBQUcsMkJBQTJCO0FBRXZELE9BQU8sSUFBTUMsY0FBYyxHQUFHLG9CQUFvQjtBQUNsRCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLG9CQUFvQjtBQUN6RCxPQUFPLElBQU1DLGtCQUFrQixHQUFHLHNCQUFzQjtBQUN4RCxPQUFPLElBQU1DLGVBQWUsR0FBRyxtQkFBbUI7QUFFbEQsT0FBTyxJQUFNQyx5QkFBMEMsR0FBRztFQUN4REMsSUFBSSxFQUFFLG1CQUFtQjtFQUN6QkMsZUFBZSxFQUFFLENBQ2Y7SUFDRUMsU0FBUyxFQUFFLGFBQWE7SUFDeEJDLFlBQVksRUFBRSx1QkFBdUI7SUFDckNDLFNBQVMsRUFBRTtNQUFFQyxLQUFLLEVBQUUsTUFBTTtNQUFFQyxVQUFVLEVBQUU7SUFBSyxDQUFDO0lBQzlDQyxTQUFTLEVBQUVaO0VBQ2IsQ0FBQyxDQUNGO0VBQ0RhLGFBQWEsRUFBRSxDQUFDO0VBQ2hCQyxrQkFBa0IsRUFBRVosa0JBQWtCO0VBQ3RDYSxVQUFVLEVBQUVaLGVBQWU7RUFDM0JhLFFBQVEsRUFBRTtJQUFFTCxVQUFVLEVBQUUsTUFBTTtJQUFFTSxJQUFJLEVBQUU7RUFBSztBQUM3QyxDQUFDO0FBRUQs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