@pie-element/inline-dropdown 10.2.2-beta.3 → 10.2.3

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.
@@ -1,705 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _index = require("../index");
5
- var _defaults = _interopRequireDefault(require("../defaults"));
6
- describe('inline-dropdown', () => {
7
- let result, question, session, env;
8
- beforeEach(() => {
9
- question = {
10
- displayType: 'block',
11
- language: 'english',
12
- lockChoiceOrder: false,
13
- choices: {
14
- 0: [{
15
- correct: false,
16
- value: '9719395',
17
- label: '20,000'
18
- }, {
19
- correct: false,
20
- value: '9719396',
21
- label: '17,000'
22
- }, {
23
- correct: false,
24
- value: '9719397',
25
- label: '16,100'
26
- }, {
27
- correct: true,
28
- value: '9719398',
29
- label: '16,000',
30
- rationale: 'rationale for choice'
31
- }]
32
- },
33
- element: 'inline-dropdown-element',
34
- rationale: '',
35
- prompt: '<p>\n <strong><span style="color: #000000; font-family: Arial;">El número 16,101</span></strong> <strong><span style="color: #000000; font-family: Arial;">redondeado al</span></strong> <strong><span style="color: #000000; font-family: Arial;">millar más cercano es&nbsp;______________.</span></strong>\n</p>\n<p>\n <strong><span style="color: #000000;">&nbsp;</span></strong>\n</p>',
36
- scoringType: 'auto',
37
- teacherInstructions: true,
38
- studentInstructions: false,
39
- partialScoring: false,
40
- markup: '{{0}}',
41
- id: '2421310',
42
- alternateResponses: null
43
- };
44
- });
45
- describe('edge cases', () => {
46
- it('is ok is session is empty', async () => {
47
- session = {};
48
- env = {
49
- mode: 'evaluate'
50
- };
51
- const r = await (0, _index.model)(question, {}, {
52
- mode: 'evaluate'
53
- });
54
- expect(r).toBeDefined();
55
- });
56
- });
57
- describe('model - with updateSession', () => {
58
- it('calls updateSession', async () => {
59
- session = {
60
- id: '1',
61
- element: 'inline-dropdown-element'
62
- };
63
- env = {
64
- mode: 'gather'
65
- };
66
- const updateSession = jest.fn().mockResolvedValue();
67
- await (0, _index.model)(question, session, env, updateSession);
68
- expect(updateSession).toHaveBeenCalledWith('1', 'inline-dropdown-element', expect.objectContaining({
69
- shuffledValues: {
70
- 0: expect.arrayContaining(['9719395', '9719396', '9719397', '9719398'])
71
- }
72
- }));
73
- });
74
- });
75
- });
76
- const question = {
77
- displayType: 'block',
78
- language: 'english',
79
- prompt: 'Use the drop-downs to complete the sentence',
80
- markup: '<div><p>The {{0}} jumped {{1}} the {{2}}</p></div>',
81
- choices: {
82
- 0: [{
83
- label: 'cow ',
84
- value: '0',
85
- correct: true,
86
- rationale: 'rationale cow'
87
- }, {
88
- label: 'dog ',
89
- value: '1',
90
- correct: false,
91
- rationale: 'rationale dog'
92
- }, {
93
- label: 'cat ',
94
- value: '2',
95
- correct: false,
96
- rationale: 'rationale cat'
97
- }],
98
- 1: [{
99
- label: 'over ',
100
- value: '0',
101
- correct: true,
102
- rationale: 'rationale over'
103
- }, {
104
- label: 'under ',
105
- value: '1',
106
- correct: false,
107
- rationale: 'rationale under'
108
- }, {
109
- label: 'across ',
110
- value: '2',
111
- correct: false,
112
- rationale: 'rationale across'
113
- }],
114
- 2: [{
115
- label: 'moon ',
116
- value: '0',
117
- correct: true,
118
- rationale: 'rationale moon'
119
- }, {
120
- label: 'sun',
121
- value: '2',
122
- correct: false,
123
- rationale: 'rationale sun'
124
- }, {
125
- label: 'house ',
126
- value: '3',
127
- correct: false,
128
- rationale: 'rationale house'
129
- }]
130
- }
131
- };
132
- describe('controller', () => {
133
- describe('model', () => {
134
- let q;
135
- const updateSession = jest.fn().mockResolvedValue();
136
- it('output when session is defined', async () => {
137
- const m = await (0, _index.model)(question, {
138
- value: {
139
- 0: '0',
140
- 1: '0',
141
- 2: '0'
142
- }
143
- }, {
144
- mode: 'evaluate'
145
- }, updateSession);
146
- expect(m).toEqual(expect.objectContaining({
147
- feedback: {
148
- 0: 'correct',
149
- 1: 'correct',
150
- 2: 'correct'
151
- },
152
- responseCorrect: true
153
- }));
154
- });
155
- const returnModel = session => {
156
- it(`output when session is ${JSON.stringify(session)}`, async () => {
157
- const m = await (0, _index.model)(question, session, {
158
- mode: 'evaluate'
159
- }, updateSession);
160
- expect(m).toEqual(expect.objectContaining({
161
- feedback: {
162
- 0: 'incorrect',
163
- 1: 'incorrect',
164
- 2: 'incorrect'
165
- },
166
- responseCorrect: false
167
- }));
168
- });
169
- };
170
- returnModel(undefined);
171
- returnModel(null);
172
- returnModel({});
173
- const choicesWithNullRationale = {
174
- 0: [{
175
- label: 'cow ',
176
- value: '0',
177
- correct: true,
178
- rationale: null
179
- }, {
180
- label: 'dog ',
181
- value: '1',
182
- correct: false,
183
- rationale: null
184
- }, {
185
- label: 'cat ',
186
- value: '2',
187
- correct: false,
188
- rationale: null
189
- }],
190
- 1: [{
191
- label: 'over ',
192
- value: '0',
193
- correct: true,
194
- rationale: null
195
- }, {
196
- label: 'under ',
197
- value: '1',
198
- correct: false,
199
- rationale: null
200
- }, {
201
- label: 'across ',
202
- value: '2',
203
- correct: false,
204
- rationale: null
205
- }],
206
- 2: [{
207
- label: 'moon ',
208
- value: '0',
209
- correct: true,
210
- rationale: null
211
- }, {
212
- label: 'sun',
213
- value: '2',
214
- correct: false,
215
- rationale: null
216
- }, {
217
- label: 'house ',
218
- value: '3',
219
- correct: false,
220
- rationale: null
221
- }]
222
- };
223
- const assertGather = (label, extra, session, expected) => {
224
- it(`'mode: gather, ${label}'`, async () => {
225
- q = {
226
- ...question,
227
- alternateResponse: {
228
- 2: ['2']
229
- },
230
- lockChoiceOrder: true,
231
- teacherInstructions: 'Teacher Instructions',
232
- rationale: 'Rationale',
233
- ...extra
234
- };
235
- const result = await (0, _index.model)(q, {
236
- id: '1',
237
- element: 'explicit-constructed-response',
238
- ...session
239
- }, {
240
- mode: 'gather'
241
- }, updateSession);
242
- expect(result).toEqual({
243
- ...question,
244
- disabled: false,
245
- mode: 'gather',
246
- feedback: {},
247
- responseCorrect: undefined,
248
- choices: choicesWithNullRationale,
249
- ...expected
250
- });
251
- });
252
- };
253
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled not set', {}, {}, {
254
- rationale: null,
255
- teacherInstructions: null
256
- });
257
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
258
- promptEnabled: false,
259
- rationaleEnabled: false,
260
- teacherInstructionsEnabled: false,
261
- studentInstructionsEnabled: false
262
- }, {}, {
263
- prompt: null,
264
- rationale: null,
265
- teacherInstructions: null
266
- });
267
- const assertView = (label, extra, session, expected) => {
268
- it(`'mode: view, ${label}'`, async () => {
269
- q = {
270
- ...question,
271
- alternateResponse: {
272
- 2: ['2']
273
- },
274
- lockChoiceOrder: true,
275
- teacherInstructions: 'Teacher Instructions',
276
- rationale: 'Rationale',
277
- ...extra
278
- };
279
- const result = await (0, _index.model)(q, {
280
- id: '1',
281
- element: 'explicit-constructed-response',
282
- ...session
283
- }, {
284
- mode: 'view',
285
- role: 'instructor'
286
- }, updateSession);
287
- expect(result).toEqual({
288
- ...question,
289
- mode: 'view',
290
- disabled: true,
291
- feedback: {},
292
- responseCorrect: undefined,
293
- ...expected
294
- });
295
- });
296
- };
297
- assertView(' + role: instructor, promptEnabled, rationaleEnabled, teacherInstructionsEnabled and choiceRationaleEnabled set to false', {
298
- promptEnabled: false,
299
- rationaleEnabled: false,
300
- teacherInstructionsEnabled: false,
301
- studentInstructionsEnabled: false,
302
- choiceRationaleEnabled: false
303
- }, {}, {
304
- prompt: null,
305
- rationale: null,
306
- teacherInstructions: null,
307
- choices: choicesWithNullRationale
308
- });
309
- assertView(' + role: instructor, promptEnabled, rationaleEnabled, teacherInstructionsEnabled and choiceRationaleEnabled unset', {}, {}, {
310
- teacherInstructions: 'Teacher Instructions',
311
- rationale: 'Rationale'
312
- });
313
- const assertViewStudent = (label, extra, session, expected) => {
314
- it(`'mode: view, ${label}'`, async () => {
315
- q = {
316
- ...question,
317
- alternateResponse: {
318
- 2: ['2']
319
- },
320
- lockChoiceOrder: true,
321
- teacherInstructions: 'Teacher Instructions',
322
- rationale: 'Rationale',
323
- ...extra
324
- };
325
- const result = await (0, _index.model)(q, {
326
- id: '1',
327
- element: 'explicit-constructed-response',
328
- ...session
329
- }, {
330
- mode: 'view',
331
- role: 'student'
332
- });
333
- expect(result).toEqual({
334
- ...question,
335
- mode: 'view',
336
- disabled: true,
337
- feedback: {},
338
- responseCorrect: undefined,
339
- choices: choicesWithNullRationale,
340
- ...expected
341
- });
342
- });
343
- };
344
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
345
- promptEnabled: false,
346
- rationaleEnabled: false,
347
- teacherInstructionsEnabled: false,
348
- studentInstructionsEnabled: false
349
- }, {}, {
350
- prompt: null,
351
- rationale: null,
352
- teacherInstructions: null
353
- });
354
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
355
- rationale: null,
356
- teacherInstructions: null
357
- });
358
- const assertEvaluate = (label, extra, session, expected) => {
359
- it(`'mode: evaluate, ${label}'`, async () => {
360
- q = {
361
- ...question,
362
- alternateResponse: {
363
- 0: ['2'],
364
- 1: ['2'],
365
- 2: ['2']
366
- },
367
- lockChoiceOrder: true,
368
- teacherInstructions: 'Teacher Instructions',
369
- rationale: 'Rationale',
370
- choiceRationaleEnabled: true,
371
- ...extra
372
- };
373
- const result = await (0, _index.model)(q, {
374
- id: '1',
375
- element: 'explicit-constructed-response',
376
- ...session
377
- }, {
378
- mode: 'evaluate',
379
- role: 'instructor'
380
- }, updateSession);
381
- expect(result).toEqual({
382
- ...question,
383
- teacherInstructions: 'Teacher Instructions',
384
- rationale: 'Rationale',
385
- mode: 'evaluate',
386
- disabled: true,
387
- ...expected
388
- });
389
- });
390
- };
391
- assertEvaluate('- correct answer', {}, {
392
- value: {
393
- 0: '0',
394
- 1: '0',
395
- 2: '0'
396
- }
397
- }, {
398
- feedback: {
399
- 0: 'correct',
400
- 1: 'correct',
401
- 2: 'correct'
402
- },
403
- responseCorrect: true
404
- });
405
- assertEvaluate('- partially correct answer', {}, {
406
- value: {
407
- 0: '0',
408
- 1: '0',
409
- 2: '1'
410
- }
411
- }, {
412
- feedback: {
413
- 0: 'correct',
414
- 1: 'correct',
415
- 2: 'incorrect'
416
- },
417
- responseCorrect: false
418
- });
419
- assertEvaluate('- partially correct answer using alternates', {}, {
420
- value: {
421
- 0: '2',
422
- 1: '1',
423
- 2: '2'
424
- }
425
- }, {
426
- feedback: {
427
- 0: 'correct',
428
- 1: 'incorrect',
429
- 2: 'correct'
430
- },
431
- responseCorrect: false
432
- });
433
- assertEvaluate('- incorrect answer', {}, {
434
- value: {
435
- 0: '1',
436
- 1: '1',
437
- 2: '1'
438
- }
439
- }, {
440
- feedback: {
441
- 0: 'incorrect',
442
- 1: 'incorrect',
443
- 2: 'incorrect'
444
- },
445
- responseCorrect: false
446
- });
447
- });
448
- describe('get score', () => {
449
- const assertScore = (session, expected) => {
450
- it('return score', () => {
451
- const score = (0, _index.getScore)(question, session);
452
- expect(score).toEqual(expected);
453
- });
454
- };
455
- assertScore({
456
- value: {
457
- 0: '0',
458
- 1: '0',
459
- 2: '0'
460
- }
461
- }, 1);
462
- assertScore({
463
- value: {
464
- 0: '0',
465
- 1: '0',
466
- 2: '1'
467
- }
468
- }, 0.67);
469
- assertScore({
470
- value: {
471
- 0: '0',
472
- 1: '1',
473
- 2: '1'
474
- }
475
- }, 0.33);
476
- assertScore({
477
- value: {
478
- 0: '1',
479
- 1: '1',
480
- 2: '1'
481
- }
482
- }, 0);
483
- const returnScore = session => {
484
- it(`score = 0 when session is ${JSON.stringify(session)}`, () => {
485
- expect((0, _index.getScore)(question, session)).toEqual(0);
486
- });
487
- };
488
- returnScore(undefined);
489
- returnScore(null);
490
- returnScore({});
491
- });
492
- describe('outcome partialScoring test', () => {
493
- const assertOutcome = (message, extra, sessionValue, env, expected) => {
494
- it(message, async () => {
495
- const result = await (0, _index.outcome)({
496
- ...question,
497
- ...extra
498
- }, sessionValue, env);
499
- expect(result).toEqual(expect.objectContaining(expected));
500
- });
501
- };
502
- assertOutcome('element.partialScoring = true', {
503
- partialScoring: true
504
- }, {
505
- value: {
506
- 0: '0',
507
- 1: '0',
508
- 2: '1'
509
- }
510
- }, {
511
- mode: 'evaluate'
512
- }, {
513
- score: 0.67
514
- });
515
- assertOutcome('element.partialScoring = false', {
516
- partialScoring: false
517
- }, {
518
- value: {
519
- 0: '0',
520
- 1: '0',
521
- 2: '1'
522
- }
523
- }, {
524
- mode: 'evaluate'
525
- }, {
526
- score: 0
527
- });
528
- assertOutcome('element.partialScoring = false, env.partialScoring = true', {
529
- partialScoring: false
530
- }, {
531
- value: {
532
- 0: '0',
533
- 1: '0',
534
- 2: '1'
535
- }
536
- }, {
537
- mode: 'evaluate',
538
- partialScoring: true
539
- }, {
540
- score: 0
541
- });
542
- assertOutcome('element.partialScoring = true, env.partialScoring = false', {
543
- partialScoring: true
544
- }, {
545
- value: {
546
- 0: '0',
547
- 1: '0',
548
- 2: '1'
549
- }
550
- }, {
551
- mode: 'evaluate',
552
- partialScoring: false
553
- }, {
554
- score: 0
555
- });
556
- });
557
- describe('outcome', () => {
558
- const assertOutcome = (partialScoring, sessionValue, expected) => {
559
- it(`partial score ${partialScoring ? 'enabled' : 'disabled'}`, async () => {
560
- const result = await (0, _index.outcome)({
561
- ...question,
562
- partialScoring
563
- }, sessionValue);
564
- expect(result).toEqual(expect.objectContaining(expected));
565
- });
566
- };
567
- assertOutcome(true, {
568
- value: {
569
- 0: '0',
570
- 1: '0',
571
- 2: '0'
572
- }
573
- }, {
574
- score: 1,
575
- empty: false
576
- });
577
- assertOutcome(true, {
578
- value: {
579
- 0: '0',
580
- 1: '0',
581
- 2: '1'
582
- }
583
- }, {
584
- score: 0.67,
585
- empty: false
586
- });
587
- assertOutcome(true, {
588
- value: {
589
- 0: '0',
590
- 1: '1',
591
- 2: '1'
592
- }
593
- }, {
594
- score: 0.33,
595
- empty: false
596
- });
597
- assertOutcome(true, {
598
- value: {
599
- 0: '1',
600
- 1: '1',
601
- 2: '1'
602
- }
603
- }, {
604
- score: 0,
605
- empty: false
606
- });
607
- assertOutcome(false, {
608
- value: {
609
- 0: '0',
610
- 1: '0',
611
- 2: '0'
612
- }
613
- }, {
614
- score: 1,
615
- empty: false
616
- });
617
- assertOutcome(false, {
618
- value: {
619
- 0: '0',
620
- 1: '0',
621
- 2: '1'
622
- }
623
- }, {
624
- score: 0,
625
- empty: false
626
- });
627
- assertOutcome(false, {
628
- value: {
629
- 0: '0',
630
- 1: '1',
631
- 2: '1'
632
- }
633
- }, {
634
- score: 0,
635
- empty: false
636
- });
637
- assertOutcome(false, {
638
- value: {
639
- 0: '1',
640
- 1: '1',
641
- 2: '1'
642
- }
643
- }, {
644
- score: 0,
645
- empty: false
646
- });
647
- const returnModel = session => {
648
- it(`empty: true when session is ${JSON.stringify(session)}`, async () => {
649
- const m = await (0, _index.outcome)(question, session);
650
- expect(m).toEqual(expect.objectContaining({
651
- score: 0,
652
- empty: true
653
- }));
654
- });
655
- };
656
- returnModel(undefined);
657
- returnModel(null);
658
- returnModel({});
659
- });
660
- describe('correct response', () => {
661
- it('returns correct response if role is instructor and mode is gather', async () => {
662
- const sess = await (0, _index.createCorrectResponseSession)(question, {
663
- mode: 'gather',
664
- role: 'instructor'
665
- });
666
- expect(sess).toEqual({
667
- id: '1',
668
- value: {
669
- 0: '0',
670
- 1: '0',
671
- 2: '0'
672
- }
673
- });
674
- });
675
- it('returns correct response if role is instructor and mode is view', async () => {
676
- const sess = await (0, _index.createCorrectResponseSession)(question, {
677
- mode: 'view',
678
- role: 'instructor'
679
- });
680
- expect(sess).toEqual({
681
- id: '1',
682
- value: {
683
- 0: '0',
684
- 1: '0',
685
- 2: '0'
686
- }
687
- });
688
- });
689
- it('returns null if mode is evaluate', async () => {
690
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
691
- mode: 'evaluate',
692
- role: 'instructor'
693
- });
694
- expect(noResult).toBeNull();
695
- });
696
- it('returns null if role is student', async () => {
697
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
698
- mode: 'gather',
699
- role: 'student'
700
- });
701
- expect(noResult).toBeNull();
702
- });
703
- });
704
- });
705
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImRlc2NyaWJlIiwicmVzdWx0IiwicXVlc3Rpb24iLCJzZXNzaW9uIiwiZW52IiwiYmVmb3JlRWFjaCIsImRpc3BsYXlUeXBlIiwibGFuZ3VhZ2UiLCJsb2NrQ2hvaWNlT3JkZXIiLCJjaG9pY2VzIiwiY29ycmVjdCIsInZhbHVlIiwibGFiZWwiLCJyYXRpb25hbGUiLCJlbGVtZW50IiwicHJvbXB0Iiwic2NvcmluZ1R5cGUiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwic3R1ZGVudEluc3RydWN0aW9ucyIsInBhcnRpYWxTY29yaW5nIiwibWFya3VwIiwiaWQiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJpdCIsIm1vZGUiLCJyIiwibW9kZWwiLCJleHBlY3QiLCJ0b0JlRGVmaW5lZCIsInVwZGF0ZVNlc3Npb24iLCJqZXN0IiwiZm4iLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwib2JqZWN0Q29udGFpbmluZyIsInNodWZmbGVkVmFsdWVzIiwiYXJyYXlDb250YWluaW5nIiwicSIsIm0iLCJ0b0VxdWFsIiwiZmVlZGJhY2siLCJyZXNwb25zZUNvcnJlY3QiLCJyZXR1cm5Nb2RlbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJjaG9pY2VzV2l0aE51bGxSYXRpb25hbGUiLCJhc3NlcnRHYXRoZXIiLCJleHRyYSIsImV4cGVjdGVkIiwiYWx0ZXJuYXRlUmVzcG9uc2UiLCJkaXNhYmxlZCIsInByb21wdEVuYWJsZWQiLCJyYXRpb25hbGVFbmFibGVkIiwidGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQiLCJzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZCIsImFzc2VydFZpZXciLCJyb2xlIiwiY2hvaWNlUmF0aW9uYWxlRW5hYmxlZCIsImFzc2VydFZpZXdTdHVkZW50IiwiYXNzZXJ0RXZhbHVhdGUiLCJhc3NlcnRTY29yZSIsInNjb3JlIiwiZ2V0U2NvcmUiLCJyZXR1cm5TY29yZSIsImFzc2VydE91dGNvbWUiLCJtZXNzYWdlIiwic2Vzc2lvblZhbHVlIiwib3V0Y29tZSIsImVtcHR5Iiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJub1Jlc3VsdCIsInRvQmVOdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNjb3JlLCBvdXRjb21lLCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uLCBtb2RlbCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmRlc2NyaWJlKCdpbmxpbmUtZHJvcGRvd24nLCAoKSA9PiB7XG4gIGxldCByZXN1bHQsIHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnY7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcXVlc3Rpb24gPSB7XG4gICAgICBkaXNwbGF5VHlwZTogJ2Jsb2NrJyxcbiAgICAgIGxhbmd1YWdlOiAnZW5nbGlzaCcsXG4gICAgICBsb2NrQ2hvaWNlT3JkZXI6IGZhbHNlLFxuICAgICAgY2hvaWNlczoge1xuICAgICAgICAwOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogJzk3MTkzOTUnLFxuICAgICAgICAgICAgbGFiZWw6ICcyMCwwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogJzk3MTkzOTYnLFxuICAgICAgICAgICAgbGFiZWw6ICcxNywwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogJzk3MTkzOTcnLFxuICAgICAgICAgICAgbGFiZWw6ICcxNiwxMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAnOTcxOTM5OCcsXG4gICAgICAgICAgICBsYWJlbDogJzE2LDAwMCcsXG4gICAgICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgZm9yIGNob2ljZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBlbGVtZW50OiAnaW5saW5lLWRyb3Bkb3duLWVsZW1lbnQnLFxuICAgICAgcmF0aW9uYWxlOiAnJyxcbiAgICAgIHByb21wdDpcbiAgICAgICAgJzxwPlxcbiAgPHN0cm9uZz48c3BhbiBzdHlsZT1cImNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogQXJpYWw7XCI+RWwgbsO6bWVybyAxNiwxMDE8L3NwYW4+PC9zdHJvbmc+IDxzdHJvbmc+PHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IEFyaWFsO1wiPnJlZG9uZGVhZG8gYWw8L3NwYW4+PC9zdHJvbmc+IDxzdHJvbmc+PHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IEFyaWFsO1wiPm1pbGxhciBtw6FzIGNlcmNhbm8gZXMmbmJzcDtfX19fX19fX19fX19fXy48L3NwYW4+PC9zdHJvbmc+XFxuPC9wPlxcbjxwPlxcbiAgPHN0cm9uZz48c3BhbiBzdHlsZT1cImNvbG9yOiAjMDAwMDAwO1wiPiZuYnNwOzwvc3Bhbj48L3N0cm9uZz5cXG48L3A+JyxcbiAgICAgIHNjb3JpbmdUeXBlOiAnYXV0bycsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiB0cnVlLFxuICAgICAgc3R1ZGVudEluc3RydWN0aW9uczogZmFsc2UsXG4gICAgICBwYXJ0aWFsU2NvcmluZzogZmFsc2UsXG4gICAgICBtYXJrdXA6ICd7ezB9fScsXG4gICAgICBpZDogJzI0MjEzMTAnLFxuICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBudWxsLFxuICAgIH07XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdpcyBvayBpcyBzZXNzaW9uIGlzIGVtcHR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICBjb25zdCByID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICBleHBlY3QocikudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21vZGVsIC0gd2l0aCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyB1cGRhdGVTZXNzaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHsgaWQ6ICcxJywgZWxlbWVudDogJ2lubGluZS1kcm9wZG93bi1lbGVtZW50JyB9O1xuICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgY29uc3QgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgpO1xuICAgICAgYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudiwgdXBkYXRlU2Vzc2lvbik7XG4gICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICcxJyxcbiAgICAgICAgJ2lubGluZS1kcm9wZG93bi1lbGVtZW50JyxcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIHNodWZmbGVkVmFsdWVzOiB7IDA6IGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoWyc5NzE5Mzk1JywgJzk3MTkzOTYnLCAnOTcxOTM5NycsICc5NzE5Mzk4J10pIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuY29uc3QgcXVlc3Rpb24gPSB7XG4gIGRpc3BsYXlUeXBlOiAnYmxvY2snLFxuICBsYW5ndWFnZTogJ2VuZ2xpc2gnLFxuICBwcm9tcHQ6ICdVc2UgdGhlIGRyb3AtZG93bnMgdG8gY29tcGxldGUgdGhlIHNlbnRlbmNlJyxcbiAgbWFya3VwOiAnPGRpdj48cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD48L2Rpdj4nLFxuICBjaG9pY2VzOiB7XG4gICAgMDogW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvdyAnLFxuICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgY293JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZG9nICcsXG4gICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgZG9nJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY2F0ICcsXG4gICAgICAgIHZhbHVlOiAnMicsXG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgY2F0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICAxOiBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnb3ZlciAnLFxuICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgb3ZlcicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3VuZGVyICcsXG4gICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGU6ICdyYXRpb25hbGUgdW5kZXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdhY3Jvc3MgJyxcbiAgICAgICAgdmFsdWU6ICcyJyxcbiAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZSBhY3Jvc3MnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIDI6IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdtb29uICcsXG4gICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZSBtb29uJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3VuJyxcbiAgICAgICAgdmFsdWU6ICcyJyxcbiAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZSBzdW4nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdob3VzZSAnLFxuICAgICAgICB2YWx1ZTogJzMnLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlOiAncmF0aW9uYWxlIGhvdXNlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbn07XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgbGV0IHE7XG4gICAgY29uc3QgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgpO1xuXG4gICAgaXQoJ291dHB1dCB3aGVuIHNlc3Npb24gaXMgZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgeyB2YWx1ZTogeyAwOiAnMCcsIDE6ICcwJywgMjogJzAnIH0gfSwgeyBtb2RlOiAnZXZhbHVhdGUnIH0sIHVwZGF0ZVNlc3Npb24pO1xuXG4gICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldHVybk1vZGVsID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBvdXRwdXQgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCB1cGRhdGVTZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBmZWVkYmFjazogeyAwOiAnaW5jb3JyZWN0JywgMTogJ2luY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk1vZGVsKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuTW9kZWwobnVsbCk7XG4gICAgcmV0dXJuTW9kZWwoe30pO1xuXG4gICAgY29uc3QgY2hvaWNlc1dpdGhOdWxsUmF0aW9uYWxlID0ge1xuICAgICAgMDogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdjb3cgJyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdkb2cgJyxcbiAgICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnY2F0ICcsXG4gICAgICAgICAgdmFsdWU6ICcyJyxcbiAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgMTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdvdmVyICcsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAndW5kZXIgJyxcbiAgICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnYWNyb3NzICcsXG4gICAgICAgICAgdmFsdWU6ICcyJyxcbiAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgMjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdtb29uICcsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnc3VuJyxcbiAgICAgICAgICB2YWx1ZTogJzInLFxuICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnaG91c2UgJyxcbiAgICAgICAgICB2YWx1ZTogJzMnLFxuICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IGFzc2VydEdhdGhlciA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IGdhdGhlciwgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlOiB7IDI6IFsnMiddIH0sXG4gICAgICAgICAgbG9ja0Nob2ljZU9yZGVyOiB0cnVlLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgICAgcSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgZWxlbWVudDogJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG1vZGU6ICdnYXRoZXInIH0sXG4gICAgICAgICAgdXBkYXRlU2Vzc2lvbixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAgICAgZmVlZGJhY2s6IHt9LFxuICAgICAgICAgIHJlc3BvbnNlQ29ycmVjdDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNob2ljZXM6IGNob2ljZXNXaXRoTnVsbFJhdGlvbmFsZSxcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIG5vdCBzZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogbnVsbCxcbiAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZXJ0VmlldyA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IHZpZXcsICR7bGFiZWx9J2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcSA9IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBhbHRlcm5hdGVSZXNwb25zZTogeyAyOiBbJzInXSB9LFxuICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZScsXG4gICAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAgeyBpZDogJzEnLCBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLCAuLi5zZXNzaW9uIH0sXG4gICAgICAgICAgeyBtb2RlOiAndmlldycsIHJvbGU6ICdpbnN0cnVjdG9yJyB9LFxuICAgICAgICAgIHVwZGF0ZVNlc3Npb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0VmlldyhcbiAgICAgICcgKyByb2xlOiBpbnN0cnVjdG9yLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkLCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBhbmQgY2hvaWNlUmF0aW9uYWxlRW5hYmxlZCBzZXQgdG8gZmFsc2UnLFxuICAgICAge1xuICAgICAgICBwcm9tcHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBjaG9pY2VSYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IG51bGwsXG4gICAgICAgIGNob2ljZXM6IGNob2ljZXNXaXRoTnVsbFJhdGlvbmFsZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydFZpZXcoXG4gICAgICAnICsgcm9sZTogaW5zdHJ1Y3RvciwgcHJvbXB0RW5hYmxlZCwgcmF0aW9uYWxlRW5hYmxlZCwgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgYW5kIGNob2ljZVJhdGlvbmFsZUVuYWJsZWQgdW5zZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VydFZpZXdTdHVkZW50ID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogdmlldywgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlOiB7IDI6IFsnMiddIH0sXG4gICAgICAgICAgbG9ja0Nob2ljZU9yZGVyOiB0cnVlLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgICAgcSxcbiAgICAgICAgICB7IGlkOiAnMScsIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsIC4uLnNlc3Npb24gfSxcbiAgICAgICAgICB7IG1vZGU6ICd2aWV3Jywgcm9sZTogJ3N0dWRlbnQnIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjaG9pY2VzOiBjaG9pY2VzV2l0aE51bGxSYXRpb25hbGUsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFZpZXdTdHVkZW50KFxuICAgICAgJyArIHJvbGU6IHN0dWRlbnQsIHByb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogbnVsbCxcbiAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0Vmlld1N0dWRlbnQoXG4gICAgICAnICsgcm9sZTogc3R1ZGVudCwgcHJvbXB0RW5hYmxlZCwgcmF0aW9uYWxlRW5hYmxlZCBhbmQgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgdW5zZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZXJ0RXZhbHVhdGUgPSAobGFiZWwsIGV4dHJhLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCdtb2RlOiBldmFsdWF0ZSwgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlOiB7IDA6IFsnMiddLCAxOiBbJzInXSwgMjogWycyJ10gfSxcbiAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICAgIGNob2ljZVJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAgeyBpZDogJzEnLCBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLCAuLi5zZXNzaW9uIH0sXG4gICAgICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCByb2xlOiAnaW5zdHJ1Y3RvcicgfSxcbiAgICAgICAgICB1cGRhdGVTZXNzaW9uLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICBtb2RlOiAnZXZhbHVhdGUnLFxuICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIC4uLmV4cGVjdGVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRFdmFsdWF0ZShcbiAgICAgICctIGNvcnJlY3QgYW5zd2VyJyxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgICAxOiAnMCcsXG4gICAgICAgICAgMjogJzAnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdjb3JyZWN0JyB9LFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRFdmFsdWF0ZShcbiAgICAgICctIHBhcnRpYWxseSBjb3JyZWN0IGFuc3dlcicsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnMCcsXG4gICAgICAgICAgMTogJzAnLFxuICAgICAgICAgIDI6ICcxJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBwYXJ0aWFsbHkgY29ycmVjdCBhbnN3ZXIgdXNpbmcgYWx0ZXJuYXRlcycsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnMicsXG4gICAgICAgICAgMTogJzEnLFxuICAgICAgICAgIDI6ICcyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2luY29ycmVjdCcsIDI6ICdjb3JyZWN0JyB9LFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBpbmNvcnJlY3QgYW5zd2VyJyxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIDA6ICcxJyxcbiAgICAgICAgICAxOiAnMScsXG4gICAgICAgICAgMjogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2luY29ycmVjdCcsIDE6ICdpbmNvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0IHNjb3JlJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydFNjb3JlID0gKHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdCgncmV0dXJuIHNjb3JlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzY29yZSA9IGdldFNjb3JlKHF1ZXN0aW9uLCBzZXNzaW9uKTtcblxuICAgICAgICBleHBlY3Qoc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJzAnLCAxOiAnMCcsIDI6ICcwJyB9IH0sIDEpO1xuXG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnMCcsIDE6ICcwJywgMjogJzEnIH0gfSwgMC42Nyk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnMCcsIDE6ICcxJywgMjogJzEnIH0gfSwgMC4zMyk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnMScsIDE6ICcxJywgMjogJzEnIH0gfSwgMCk7XG5cbiAgICBjb25zdCByZXR1cm5TY29yZSA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgc2NvcmUgPSAwIHdoZW4gc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGdldFNjb3JlKHF1ZXN0aW9uLCBzZXNzaW9uKSkudG9FcXVhbCgwKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm5TY29yZSh1bmRlZmluZWQpO1xuICAgIHJldHVyblNjb3JlKG51bGwpO1xuICAgIHJldHVyblNjb3JlKHt9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUgcGFydGlhbFNjb3JpbmcgdGVzdCcsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKG1lc3NhZ2UsIGV4dHJhLCBzZXNzaW9uVmFsdWUsIGVudiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KG1lc3NhZ2UsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIC4uLmV4dHJhLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvblZhbHVlLFxuICAgICAgICAgIGVudixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgICdlbGVtZW50LnBhcnRpYWxTY29yaW5nID0gdHJ1ZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMScgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwLjY3IH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMScgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLCBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMScgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyBzY29yZTogMCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSB0cnVlLCBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMScgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSxcbiAgICAgIHsgc2NvcmU6IDAgfSxcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKHBhcnRpYWxTY29yaW5nLCBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgcGFydGlhbCBzY29yZSAke3BhcnRpYWxTY29yaW5nID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgICBwYXJ0aWFsU2NvcmluZyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSxcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMCcgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMScgfSB9LCB7IHNjb3JlOiAwLjY3LCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzEnLCAyOiAnMScgfSB9LCB7IHNjb3JlOiAwLjMzLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICcxJywgMTogJzEnLCAyOiAnMScgfSB9LCB7IHNjb3JlOiAwLCBlbXB0eTogZmFsc2UgfSk7XG5cbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICcwJywgMTogJzAnLCAyOiAnMCcgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnMCcsIDE6ICcwJywgMjogJzEnIH0gfSwgeyBzY29yZTogMCwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJzAnLCAxOiAnMScsIDI6ICcxJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICcxJywgMTogJzEnLCAyOiAnMScgfSB9LCB7IHNjb3JlOiAwLCBlbXB0eTogZmFsc2UgfSk7XG5cbiAgICBjb25zdCByZXR1cm5Nb2RlbCA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgZW1wdHk6IHRydWUgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgc2Vzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KG0pLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBzY29yZTogMCwgZW1wdHk6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk1vZGVsKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuTW9kZWwobnVsbCk7XG4gICAgcmV0dXJuTW9kZWwoe30pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIHJvbGUgaXMgaW5zdHJ1Y3RvciBhbmQgbW9kZSBpcyBnYXRoZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IHsgMDogJzAnLCAxOiAnMCcsIDI6ICcwJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiByb2xlIGlzIGluc3RydWN0b3IgYW5kIG1vZGUgaXMgdmlldycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IHsgMDogJzAnLCAxOiAnMCcsIDI6ICcwJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ3N0dWRlbnQnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBQyxzQkFBQSxD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LENBQUMsa0JBQWtCLEVBQUUsTUFBTTtJQUNqQ3VCLEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxZQUFZO01BQ2xGLE1BQU0rQyxJQUFJLEdBQUcsTUFBTSxJQUFBQyxtQ0FBNEIsRUFBQ3JFLFFBQVEsRUFBRTtRQUN4RHNCLElBQUksRUFBRSxRQUFRO1FBQ2RpQyxJQUFJLEVBQUU7TUFDUixDQUFDLENBQUM7TUFFRjlCLE1BQU0sQ0FBQzJDLElBQUksQ0FBQyxDQUFDL0IsT0FBTyxDQUFDO1FBQUVsQixFQUFFLEVBQUUsR0FBRztRQUFFVixLQUFLLEVBQUU7VUFBRSxDQUFDLEVBQUUsR0FBRztVQUFFLENBQUMsRUFBRSxHQUFHO1VBQUUsQ0FBQyxFQUFFO1FBQUk7TUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDO0lBRUZZLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxZQUFZO01BQ2hGLE1BQU0rQyxJQUFJLEdBQUcsTUFBTSxJQUFBQyxtQ0FBNEIsRUFBQ3JFLFFBQVEsRUFBRTtRQUN4RHNCLElBQUksRUFBRSxNQUFNO1FBQ1ppQyxJQUFJLEVBQUU7TUFDUixDQUFDLENBQUM7TUFFRjlCLE1BQU0sQ0FBQzJDLElBQUksQ0FBQyxDQUFDL0IsT0FBTyxDQUFDO1FBQUVsQixFQUFFLEVBQUUsR0FBRztRQUFFVixLQUFLLEVBQUU7VUFBRSxDQUFDLEVBQUUsR0FBRztVQUFFLENBQUMsRUFBRSxHQUFHO1VBQUUsQ0FBQyxFQUFFO1FBQUk7TUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDO0lBRUZZLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxZQUFZO01BQ2pELE1BQU1pRCxRQUFRLEdBQUcsTUFBTSxJQUFBRCxtQ0FBNEIsRUFBQ3JFLFFBQVEsRUFBRTtRQUM1RHNCLElBQUksRUFBRSxVQUFVO1FBQ2hCaUMsSUFBSSxFQUFFO01BQ1IsQ0FBQyxDQUFDO01BRUY5QixNQUFNLENBQUM2QyxRQUFRLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUZsRCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsWUFBWTtNQUNoRCxNQUFNaUQsUUFBUSxHQUFHLE1BQU0sSUFBQUQsbUNBQTRCLEVBQUNyRSxRQUFRLEVBQUU7UUFDNURzQixJQUFJLEVBQUUsUUFBUTtRQUNkaUMsSUFBSSxFQUFFO01BQ1IsQ0FBQyxDQUFDO01BRUY5QixNQUFNLENBQUM2QyxRQUFRLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119