@pie-element/multiple-choice 9.18.0 → 9.19.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/configure/CHANGELOG.md +8 -0
- package/configure/lib/__tests__/root.test.js +271 -0
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/index.js +2 -2
- package/configure/lib/main.js +7 -7
- package/configure/lib/utils.js +1 -1
- package/configure/package.json +4 -2
- package/controller/CHANGELOG.md +8 -0
- package/controller/lib/__tests__/index.test.js +867 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +2 -2
- package/controller/lib/utils.js +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/choice-input-test.js +131 -0
- package/lib/__tests__/index-test.js +183 -0
- package/lib/__tests__/key-events-test.js +98 -0
- package/lib/__tests__/multiple-choice-test.js +235 -0
- package/lib/__tests__/session-updater-test.js +72 -0
- package/lib/choice-input.js +2 -2
- package/lib/choice.js +1 -1
- package/lib/feedback-tick.js +2 -2
- package/lib/index.js +3 -3
- package/lib/main.js +2 -2
- package/lib/multiple-choice.js +5 -5
- package/lib/print.js +2 -2
- package/lib/session-updater.js +1 -1
- package/package.json +6 -3
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/main.js.map +0 -1
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js.map +0 -1
- package/lib/choice-input.js.map +0 -1
- package/lib/choice.js.map +0 -1
- package/lib/feedback-tick.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/main.js.map +0 -1
- package/lib/multiple-choice.js.map +0 -1
- package/lib/print.js.map +0 -1
- package/lib/session-updater.js.map +0 -1
- package/module/configure.js +0 -11070
- package/module/controller.js +0 -3601
- package/module/demo.js +0 -86
- package/module/element.js +0 -13448
- package/module/index.html +0 -21
- package/module/manifest.json +0 -14
- package/module/print-demo.js +0 -124
- package/module/print.html +0 -18
- package/module/print.js +0 -13204
|
@@ -0,0 +1,867 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
6
|
+
|
|
7
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
8
|
+
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
|
|
13
|
+
var _index = require("../index");
|
|
14
|
+
|
|
15
|
+
var _utils = require("../utils");
|
|
16
|
+
|
|
17
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
18
|
+
|
|
19
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
20
|
+
|
|
21
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
|
+
|
|
23
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
24
|
+
|
|
25
|
+
jest.mock('../utils', function () {
|
|
26
|
+
return {
|
|
27
|
+
isResponseCorrect: jest.fn()
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
describe('controller', function () {
|
|
31
|
+
var result, question, session, env;
|
|
32
|
+
beforeEach(function () {
|
|
33
|
+
question = {
|
|
34
|
+
id: '1',
|
|
35
|
+
element: 'multiple-choice',
|
|
36
|
+
prompt: 'prompt',
|
|
37
|
+
promptEnabled: true,
|
|
38
|
+
choicePrefix: 'letters',
|
|
39
|
+
choiceMode: 'radio',
|
|
40
|
+
feedbackEnabled: true,
|
|
41
|
+
choices: [{
|
|
42
|
+
label: 'a',
|
|
43
|
+
value: 'apple',
|
|
44
|
+
correct: true,
|
|
45
|
+
feedback: {
|
|
46
|
+
type: 'custom',
|
|
47
|
+
value: 'foo'
|
|
48
|
+
}
|
|
49
|
+
}, {
|
|
50
|
+
label: 'b',
|
|
51
|
+
value: 'banana',
|
|
52
|
+
feedback: {
|
|
53
|
+
type: 'default'
|
|
54
|
+
}
|
|
55
|
+
}]
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
var stringify = JSON.stringify;
|
|
59
|
+
describe('model', function () {
|
|
60
|
+
describe('mode: gather', function () {
|
|
61
|
+
beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
62
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
63
|
+
while (1) {
|
|
64
|
+
switch (_context.prev = _context.next) {
|
|
65
|
+
case 0:
|
|
66
|
+
session = {};
|
|
67
|
+
env = {
|
|
68
|
+
mode: 'gather'
|
|
69
|
+
};
|
|
70
|
+
_context.next = 4;
|
|
71
|
+
return (0, _index.model)(question, session, env);
|
|
72
|
+
|
|
73
|
+
case 4:
|
|
74
|
+
result = _context.sent;
|
|
75
|
+
|
|
76
|
+
case 5:
|
|
77
|
+
case "end":
|
|
78
|
+
return _context.stop();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}, _callee);
|
|
82
|
+
})));
|
|
83
|
+
it('returns disabled', function () {
|
|
84
|
+
expect(result.disabled).toEqual(false);
|
|
85
|
+
});
|
|
86
|
+
it('returns mode', function () {
|
|
87
|
+
expect(result.mode).toEqual('gather');
|
|
88
|
+
});
|
|
89
|
+
it('returns prompt', function () {
|
|
90
|
+
expect(result.prompt).toEqual('prompt');
|
|
91
|
+
});
|
|
92
|
+
it('returns choiceMode', function () {
|
|
93
|
+
expect(result.choiceMode).toEqual('radio');
|
|
94
|
+
});
|
|
95
|
+
it('returns choicePrefix', function () {
|
|
96
|
+
expect(result.keyMode).toEqual('letters');
|
|
97
|
+
});
|
|
98
|
+
it('returns choices', function () {
|
|
99
|
+
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
100
|
+
label: 'a',
|
|
101
|
+
value: 'apple',
|
|
102
|
+
rationale: null
|
|
103
|
+
}, {
|
|
104
|
+
label: 'b',
|
|
105
|
+
value: 'banana',
|
|
106
|
+
rationale: null
|
|
107
|
+
}]));
|
|
108
|
+
});
|
|
109
|
+
it('does not return responseCorrect', function () {
|
|
110
|
+
expect(result.responseCorrect).toBe(undefined);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('model - with updateSession', function () {
|
|
114
|
+
it('calls updateSession', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
115
|
+
var updateSession;
|
|
116
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
117
|
+
while (1) {
|
|
118
|
+
switch (_context2.prev = _context2.next) {
|
|
119
|
+
case 0:
|
|
120
|
+
session = {
|
|
121
|
+
id: '1',
|
|
122
|
+
element: 'multiple-choice'
|
|
123
|
+
};
|
|
124
|
+
env = {
|
|
125
|
+
mode: 'gather'
|
|
126
|
+
};
|
|
127
|
+
question = _objectSpread(_objectSpread({}, question), {}, {
|
|
128
|
+
lockChoiceOrder: false
|
|
129
|
+
});
|
|
130
|
+
updateSession = jest.fn().mockResolvedValue();
|
|
131
|
+
_context2.next = 6;
|
|
132
|
+
return (0, _index.model)(question, session, env, updateSession);
|
|
133
|
+
|
|
134
|
+
case 6:
|
|
135
|
+
expect(updateSession).toHaveBeenCalledWith('1', 'multiple-choice', {
|
|
136
|
+
shuffledValues: expect.arrayContaining(['apple', 'banana'])
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
case 7:
|
|
140
|
+
case "end":
|
|
141
|
+
return _context2.stop();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}, _callee2);
|
|
145
|
+
})));
|
|
146
|
+
});
|
|
147
|
+
describe('mode: view', function () {
|
|
148
|
+
beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
149
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
150
|
+
while (1) {
|
|
151
|
+
switch (_context3.prev = _context3.next) {
|
|
152
|
+
case 0:
|
|
153
|
+
session = {};
|
|
154
|
+
env = {
|
|
155
|
+
mode: 'view'
|
|
156
|
+
};
|
|
157
|
+
_context3.next = 4;
|
|
158
|
+
return (0, _index.model)(question, session, env);
|
|
159
|
+
|
|
160
|
+
case 4:
|
|
161
|
+
result = _context3.sent;
|
|
162
|
+
|
|
163
|
+
case 5:
|
|
164
|
+
case "end":
|
|
165
|
+
return _context3.stop();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}, _callee3);
|
|
169
|
+
})));
|
|
170
|
+
it('returns disabled', function () {
|
|
171
|
+
expect(result.disabled).toEqual(true);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('mode: evaluate', function () {
|
|
175
|
+
beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
176
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
177
|
+
while (1) {
|
|
178
|
+
switch (_context4.prev = _context4.next) {
|
|
179
|
+
case 0:
|
|
180
|
+
session = {};
|
|
181
|
+
env = {
|
|
182
|
+
mode: 'evaluate'
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
_utils.isResponseCorrect.mockReturnValue(false);
|
|
186
|
+
|
|
187
|
+
_context4.next = 5;
|
|
188
|
+
return (0, _index.model)(question, session, env);
|
|
189
|
+
|
|
190
|
+
case 5:
|
|
191
|
+
result = _context4.sent;
|
|
192
|
+
return _context4.abrupt("return", result);
|
|
193
|
+
|
|
194
|
+
case 7:
|
|
195
|
+
case "end":
|
|
196
|
+
return _context4.stop();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}, _callee4);
|
|
200
|
+
})));
|
|
201
|
+
it('returns choices w/ correct', function () {
|
|
202
|
+
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
203
|
+
label: 'a',
|
|
204
|
+
value: 'apple',
|
|
205
|
+
correct: true,
|
|
206
|
+
feedback: 'foo',
|
|
207
|
+
rationale: null
|
|
208
|
+
}, {
|
|
209
|
+
label: 'b',
|
|
210
|
+
value: 'banana',
|
|
211
|
+
correct: false,
|
|
212
|
+
feedback: 'Incorrect',
|
|
213
|
+
rationale: null
|
|
214
|
+
}]));
|
|
215
|
+
});
|
|
216
|
+
it('returns choices w/ correct even if feedbackEnabled is false', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
217
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
218
|
+
while (1) {
|
|
219
|
+
switch (_context5.prev = _context5.next) {
|
|
220
|
+
case 0:
|
|
221
|
+
_context5.next = 2;
|
|
222
|
+
return (0, _index.model)(_objectSpread(_objectSpread({}, question), {}, {
|
|
223
|
+
feedbackEnabled: false
|
|
224
|
+
}), session, env, jest.fn());
|
|
225
|
+
|
|
226
|
+
case 2:
|
|
227
|
+
result = _context5.sent;
|
|
228
|
+
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
229
|
+
label: 'a',
|
|
230
|
+
value: 'apple',
|
|
231
|
+
correct: true,
|
|
232
|
+
feedback: undefined,
|
|
233
|
+
rationale: null
|
|
234
|
+
}, {
|
|
235
|
+
label: 'b',
|
|
236
|
+
value: 'banana',
|
|
237
|
+
correct: false,
|
|
238
|
+
feedback: undefined,
|
|
239
|
+
rationale: null
|
|
240
|
+
}]));
|
|
241
|
+
|
|
242
|
+
case 4:
|
|
243
|
+
case "end":
|
|
244
|
+
return _context5.stop();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}, _callee5);
|
|
248
|
+
})));
|
|
249
|
+
it('returns feedback undefined if feedbackEnabled is false', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
250
|
+
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
251
|
+
while (1) {
|
|
252
|
+
switch (_context6.prev = _context6.next) {
|
|
253
|
+
case 0:
|
|
254
|
+
_context6.next = 2;
|
|
255
|
+
return (0, _index.model)(_objectSpread(_objectSpread({}, question), {}, {
|
|
256
|
+
feedbackEnabled: false
|
|
257
|
+
}), session, env, jest.fn());
|
|
258
|
+
|
|
259
|
+
case 2:
|
|
260
|
+
result = _context6.sent;
|
|
261
|
+
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
262
|
+
label: 'a',
|
|
263
|
+
value: 'apple',
|
|
264
|
+
correct: true,
|
|
265
|
+
feedback: undefined,
|
|
266
|
+
rationale: null
|
|
267
|
+
}, {
|
|
268
|
+
label: 'b',
|
|
269
|
+
value: 'banana',
|
|
270
|
+
correct: false,
|
|
271
|
+
feedback: undefined,
|
|
272
|
+
rationale: null
|
|
273
|
+
}]));
|
|
274
|
+
|
|
275
|
+
case 4:
|
|
276
|
+
case "end":
|
|
277
|
+
return _context6.stop();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}, _callee6);
|
|
281
|
+
})));
|
|
282
|
+
it('returns proper feedback if feedbackEnabled is true', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
283
|
+
return _regenerator["default"].wrap(function _callee7$(_context7) {
|
|
284
|
+
while (1) {
|
|
285
|
+
switch (_context7.prev = _context7.next) {
|
|
286
|
+
case 0:
|
|
287
|
+
_context7.next = 2;
|
|
288
|
+
return (0, _index.model)(_objectSpread(_objectSpread({}, question), {}, {
|
|
289
|
+
feedbackEnabled: true
|
|
290
|
+
}), session, env, jest.fn());
|
|
291
|
+
|
|
292
|
+
case 2:
|
|
293
|
+
result = _context7.sent;
|
|
294
|
+
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
295
|
+
label: 'a',
|
|
296
|
+
value: 'apple',
|
|
297
|
+
correct: true,
|
|
298
|
+
feedback: 'foo',
|
|
299
|
+
rationale: null
|
|
300
|
+
}, {
|
|
301
|
+
label: 'b',
|
|
302
|
+
value: 'banana',
|
|
303
|
+
correct: false,
|
|
304
|
+
feedback: 'Incorrect',
|
|
305
|
+
rationale: null
|
|
306
|
+
}]));
|
|
307
|
+
|
|
308
|
+
case 4:
|
|
309
|
+
case "end":
|
|
310
|
+
return _context7.stop();
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}, _callee7);
|
|
314
|
+
})));
|
|
315
|
+
it('returns is response correct', function () {
|
|
316
|
+
expect(result.responseCorrect).toEqual(false);
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
var returnsCorrectness = function returnsCorrectness(sess) {
|
|
320
|
+
it("returns responseCorrect: false if session is ".concat(stringify(sess)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
|
|
321
|
+
var o;
|
|
322
|
+
return _regenerator["default"].wrap(function _callee8$(_context8) {
|
|
323
|
+
while (1) {
|
|
324
|
+
switch (_context8.prev = _context8.next) {
|
|
325
|
+
case 0:
|
|
326
|
+
_context8.next = 2;
|
|
327
|
+
return (0, _index.model)(question, sess, env);
|
|
328
|
+
|
|
329
|
+
case 2:
|
|
330
|
+
o = _context8.sent;
|
|
331
|
+
expect(o.responseCorrect).toEqual(false);
|
|
332
|
+
|
|
333
|
+
case 4:
|
|
334
|
+
case "end":
|
|
335
|
+
return _context8.stop();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}, _callee8);
|
|
339
|
+
})));
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
returnsCorrectness(undefined);
|
|
343
|
+
returnsCorrectness(null);
|
|
344
|
+
returnsCorrectness({});
|
|
345
|
+
});
|
|
346
|
+
describe('choicePrefix is undefined', function () {
|
|
347
|
+
var question = {
|
|
348
|
+
id: '1',
|
|
349
|
+
element: 'multiple-choice',
|
|
350
|
+
prompt: 'prompt',
|
|
351
|
+
promptEnabled: true,
|
|
352
|
+
choiceMode: 'radio',
|
|
353
|
+
feedbackEnabled: true,
|
|
354
|
+
choices: [{
|
|
355
|
+
label: 'a',
|
|
356
|
+
value: 'apple',
|
|
357
|
+
correct: true,
|
|
358
|
+
feedback: {
|
|
359
|
+
type: 'custom',
|
|
360
|
+
value: 'foo'
|
|
361
|
+
}
|
|
362
|
+
}, {
|
|
363
|
+
label: 'b',
|
|
364
|
+
value: 'banana',
|
|
365
|
+
feedback: {
|
|
366
|
+
type: 'default'
|
|
367
|
+
}
|
|
368
|
+
}]
|
|
369
|
+
};
|
|
370
|
+
beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
|
|
371
|
+
return _regenerator["default"].wrap(function _callee9$(_context9) {
|
|
372
|
+
while (1) {
|
|
373
|
+
switch (_context9.prev = _context9.next) {
|
|
374
|
+
case 0:
|
|
375
|
+
session = {};
|
|
376
|
+
env = {
|
|
377
|
+
mode: 'gather'
|
|
378
|
+
};
|
|
379
|
+
_context9.next = 4;
|
|
380
|
+
return (0, _index.model)(question, session, env);
|
|
381
|
+
|
|
382
|
+
case 4:
|
|
383
|
+
result = _context9.sent;
|
|
384
|
+
|
|
385
|
+
case 5:
|
|
386
|
+
case "end":
|
|
387
|
+
return _context9.stop();
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}, _callee9);
|
|
391
|
+
})));
|
|
392
|
+
it('returns default letters', function () {
|
|
393
|
+
expect(result.keyMode).toEqual('letters');
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
describe('getScore', function () {
|
|
398
|
+
it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n sessionValue | expectedDychotomous | expectedPartialScoring\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n "])), undefined, 0, 0, null, 0, 0, [], 0, 0, ['a'], 0, 0.5, ['e'], 0, 0.5, ['a', 'b'], 0, 0.5, ['a', 'c'], 0, 0.5, ['a', 'd'], 0, 0.5, ['a', 'e'], 1, 1, ['a', 'b', 'c'], 0, 0, ['a', 'b', 'd'], 0, 0, ['a', 'b', 'e'], 0, 0.5, ['a', 'b', 'c', 'd'], 0, 0, ['a', 'b', 'c', 'e'], 0, 0, ['a', 'b', 'c', 'd', 'e'], 0, 0, ['a', 'c', 'd', 'e'], 0, 0, ['a', 'd', 'e'], 0, 0.5)('session = $sessionValue; partial scoring = true => score = $expectedPartialScoring / partial scoring = false => score = $expectedDychotomous', /*#__PURE__*/function () {
|
|
399
|
+
var _ref11 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(_ref10) {
|
|
400
|
+
var sessionValue, expectedPartialScoring, expectedDychotomous, q, resultPS, resultD;
|
|
401
|
+
return _regenerator["default"].wrap(function _callee10$(_context10) {
|
|
402
|
+
while (1) {
|
|
403
|
+
switch (_context10.prev = _context10.next) {
|
|
404
|
+
case 0:
|
|
405
|
+
sessionValue = _ref10.sessionValue, expectedPartialScoring = _ref10.expectedPartialScoring, expectedDychotomous = _ref10.expectedDychotomous;
|
|
406
|
+
q = {
|
|
407
|
+
choiceMode: 'checkbox',
|
|
408
|
+
choices: [{
|
|
409
|
+
label: 'a',
|
|
410
|
+
value: 'a',
|
|
411
|
+
correct: true
|
|
412
|
+
}, {
|
|
413
|
+
label: 'b',
|
|
414
|
+
value: 'b'
|
|
415
|
+
}, {
|
|
416
|
+
label: 'c',
|
|
417
|
+
value: 'c'
|
|
418
|
+
}, {
|
|
419
|
+
label: 'd',
|
|
420
|
+
value: 'd'
|
|
421
|
+
}, {
|
|
422
|
+
label: 'e',
|
|
423
|
+
value: 'e',
|
|
424
|
+
correct: true
|
|
425
|
+
}]
|
|
426
|
+
};
|
|
427
|
+
_context10.next = 4;
|
|
428
|
+
return (0, _index.outcome)(q, {
|
|
429
|
+
value: sessionValue
|
|
430
|
+
}, {
|
|
431
|
+
mode: 'evaluate '
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
case 4:
|
|
435
|
+
resultPS = _context10.sent;
|
|
436
|
+
expect(resultPS.score).toEqual(expectedPartialScoring);
|
|
437
|
+
_context10.next = 8;
|
|
438
|
+
return (0, _index.outcome)(_objectSpread(_objectSpread({}, q), {}, {
|
|
439
|
+
partialScoring: false
|
|
440
|
+
}), {
|
|
441
|
+
value: sessionValue
|
|
442
|
+
}, {
|
|
443
|
+
mode: 'evaluate '
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
case 8:
|
|
447
|
+
resultD = _context10.sent;
|
|
448
|
+
expect(resultD.score).toEqual(expectedDychotomous);
|
|
449
|
+
|
|
450
|
+
case 10:
|
|
451
|
+
case "end":
|
|
452
|
+
return _context10.stop();
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}, _callee10);
|
|
456
|
+
}));
|
|
457
|
+
|
|
458
|
+
return function (_x) {
|
|
459
|
+
return _ref11.apply(this, arguments);
|
|
460
|
+
};
|
|
461
|
+
}());
|
|
462
|
+
});
|
|
463
|
+
describe('outcome', function () {
|
|
464
|
+
it('returns score of 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
|
|
465
|
+
var result;
|
|
466
|
+
return _regenerator["default"].wrap(function _callee11$(_context11) {
|
|
467
|
+
while (1) {
|
|
468
|
+
switch (_context11.prev = _context11.next) {
|
|
469
|
+
case 0:
|
|
470
|
+
_context11.next = 2;
|
|
471
|
+
return (0, _index.outcome)(question, {
|
|
472
|
+
value: ['banana']
|
|
473
|
+
}, {
|
|
474
|
+
mode: 'gather'
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
case 2:
|
|
478
|
+
result = _context11.sent;
|
|
479
|
+
expect(result.score).toEqual(0);
|
|
480
|
+
|
|
481
|
+
case 4:
|
|
482
|
+
case "end":
|
|
483
|
+
return _context11.stop();
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}, _callee11);
|
|
487
|
+
})));
|
|
488
|
+
it('returns score of 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
|
|
489
|
+
var result;
|
|
490
|
+
return _regenerator["default"].wrap(function _callee12$(_context12) {
|
|
491
|
+
while (1) {
|
|
492
|
+
switch (_context12.prev = _context12.next) {
|
|
493
|
+
case 0:
|
|
494
|
+
_context12.next = 2;
|
|
495
|
+
return (0, _index.outcome)(question, {
|
|
496
|
+
value: ['apple']
|
|
497
|
+
}, {
|
|
498
|
+
mode: 'gather'
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
case 2:
|
|
502
|
+
result = _context12.sent;
|
|
503
|
+
expect(result.score).toEqual(1);
|
|
504
|
+
|
|
505
|
+
case 4:
|
|
506
|
+
case "end":
|
|
507
|
+
return _context12.stop();
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}, _callee12);
|
|
511
|
+
})));
|
|
512
|
+
describe('partial scoring', function () {
|
|
513
|
+
describe('choiceMode:radio is disabled', function () {
|
|
514
|
+
it('with defaults', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
|
|
515
|
+
var result;
|
|
516
|
+
return _regenerator["default"].wrap(function _callee13$(_context13) {
|
|
517
|
+
while (1) {
|
|
518
|
+
switch (_context13.prev = _context13.next) {
|
|
519
|
+
case 0:
|
|
520
|
+
_context13.next = 2;
|
|
521
|
+
return (0, _index.outcome)(question, {}, {});
|
|
522
|
+
|
|
523
|
+
case 2:
|
|
524
|
+
result = _context13.sent;
|
|
525
|
+
expect(result.score).toEqual(0);
|
|
526
|
+
|
|
527
|
+
case 4:
|
|
528
|
+
case "end":
|
|
529
|
+
return _context13.stop();
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}, _callee13);
|
|
533
|
+
})));
|
|
534
|
+
it('with defaults and correct', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
|
|
535
|
+
var result;
|
|
536
|
+
return _regenerator["default"].wrap(function _callee14$(_context14) {
|
|
537
|
+
while (1) {
|
|
538
|
+
switch (_context14.prev = _context14.next) {
|
|
539
|
+
case 0:
|
|
540
|
+
_context14.next = 2;
|
|
541
|
+
return (0, _index.outcome)(question, {
|
|
542
|
+
value: ['apple']
|
|
543
|
+
}, {});
|
|
544
|
+
|
|
545
|
+
case 2:
|
|
546
|
+
result = _context14.sent;
|
|
547
|
+
expect(result.score).toEqual(1);
|
|
548
|
+
|
|
549
|
+
case 4:
|
|
550
|
+
case "end":
|
|
551
|
+
return _context14.stop();
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}, _callee14);
|
|
555
|
+
})));
|
|
556
|
+
it('with env.partialScoring: true', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
|
|
557
|
+
var result;
|
|
558
|
+
return _regenerator["default"].wrap(function _callee15$(_context15) {
|
|
559
|
+
while (1) {
|
|
560
|
+
switch (_context15.prev = _context15.next) {
|
|
561
|
+
case 0:
|
|
562
|
+
_context15.next = 2;
|
|
563
|
+
return (0, _index.outcome)(question, {
|
|
564
|
+
partialScoring: true
|
|
565
|
+
}, {});
|
|
566
|
+
|
|
567
|
+
case 2:
|
|
568
|
+
result = _context15.sent;
|
|
569
|
+
expect(result.score).toEqual(0);
|
|
570
|
+
|
|
571
|
+
case 4:
|
|
572
|
+
case "end":
|
|
573
|
+
return _context15.stop();
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}, _callee15);
|
|
577
|
+
})));
|
|
578
|
+
it('with env.partialScoring: true + config.partialScoring: true', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16() {
|
|
579
|
+
var result;
|
|
580
|
+
return _regenerator["default"].wrap(function _callee16$(_context16) {
|
|
581
|
+
while (1) {
|
|
582
|
+
switch (_context16.prev = _context16.next) {
|
|
583
|
+
case 0:
|
|
584
|
+
_context16.next = 2;
|
|
585
|
+
return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), {}, {
|
|
586
|
+
partialScoring: true
|
|
587
|
+
}), {
|
|
588
|
+
partialScoring: true
|
|
589
|
+
}, {});
|
|
590
|
+
|
|
591
|
+
case 2:
|
|
592
|
+
result = _context16.sent;
|
|
593
|
+
expect(result.score).toEqual(0);
|
|
594
|
+
|
|
595
|
+
case 4:
|
|
596
|
+
case "end":
|
|
597
|
+
return _context16.stop();
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}, _callee16);
|
|
601
|
+
})));
|
|
602
|
+
});
|
|
603
|
+
describe('checkbox', function () {
|
|
604
|
+
beforeEach(function () {
|
|
605
|
+
var choices = question.choices.concat({
|
|
606
|
+
value: 'c',
|
|
607
|
+
correct: true
|
|
608
|
+
});
|
|
609
|
+
question = _objectSpread(_objectSpread({}, question), {}, {
|
|
610
|
+
choiceMode: 'checkbox',
|
|
611
|
+
partialScoring: true,
|
|
612
|
+
choices: choices
|
|
613
|
+
});
|
|
614
|
+
});
|
|
615
|
+
it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n sessionValue | expected\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), undefined, 0, null, 0, [], 0, ['apple'], 0.25, ['apple', 'cherry'], 0.5, ['apple', 'banana'], 0.5, ['apple', 'banana', 'cherry'], 0.75, ['apple', 'banana', 'grapes'], 0.75, ['apple', 'banana', 'grapes', 'cherry'], 1, ['cherry', 'banana', 'grapes'], 0.75, ['apple', 'durian'], 0.25, ['apple', 'durian', 'elderberries'], 0.25, ['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit'], 0, ['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi'], 0, ['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi'], 0, ['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi'], 0, ['apple', 'cherry', 'banana', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi'], 0, ['apple', 'cherry', 'banana', 'durian', 'feijoa', 'jackfruit', 'kiwi'], 0, ['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit', 'kiwi'], 0.25, ['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit'], 0.5, ['apple', 'cherry', 'banana', 'grapes', 'durian'], 0.75)('outcome: partial scoring = true, sessionValue = $sessionValue => expected = $expected', /*#__PURE__*/function () {
|
|
616
|
+
var _ref19 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee17(_ref18) {
|
|
617
|
+
var sessionValue, expected, q, result;
|
|
618
|
+
return _regenerator["default"].wrap(function _callee17$(_context17) {
|
|
619
|
+
while (1) {
|
|
620
|
+
switch (_context17.prev = _context17.next) {
|
|
621
|
+
case 0:
|
|
622
|
+
sessionValue = _ref18.sessionValue, expected = _ref18.expected;
|
|
623
|
+
q = {
|
|
624
|
+
choiceMode: 'checkbox',
|
|
625
|
+
choices: [{
|
|
626
|
+
label: 'a',
|
|
627
|
+
value: 'apple',
|
|
628
|
+
correct: true
|
|
629
|
+
}, {
|
|
630
|
+
label: 'b',
|
|
631
|
+
value: 'banana',
|
|
632
|
+
correct: true
|
|
633
|
+
}, {
|
|
634
|
+
label: 'c',
|
|
635
|
+
value: 'cherry',
|
|
636
|
+
correct: true
|
|
637
|
+
}, {
|
|
638
|
+
label: 'd',
|
|
639
|
+
value: 'durian'
|
|
640
|
+
}, {
|
|
641
|
+
label: 'e',
|
|
642
|
+
value: 'elderberries'
|
|
643
|
+
}, {
|
|
644
|
+
label: 'f',
|
|
645
|
+
value: 'feijoa'
|
|
646
|
+
}, {
|
|
647
|
+
label: 'g',
|
|
648
|
+
value: 'grapes',
|
|
649
|
+
correct: true
|
|
650
|
+
}, {
|
|
651
|
+
label: 'j',
|
|
652
|
+
value: 'jackfruit'
|
|
653
|
+
}, {
|
|
654
|
+
label: 'k',
|
|
655
|
+
value: 'kiwi'
|
|
656
|
+
}]
|
|
657
|
+
};
|
|
658
|
+
_context17.next = 4;
|
|
659
|
+
return (0, _index.outcome)(q, {
|
|
660
|
+
value: sessionValue
|
|
661
|
+
}, {
|
|
662
|
+
mode: 'evaluate '
|
|
663
|
+
});
|
|
664
|
+
|
|
665
|
+
case 4:
|
|
666
|
+
result = _context17.sent;
|
|
667
|
+
expect(result.score).toEqual(expected);
|
|
668
|
+
|
|
669
|
+
case 6:
|
|
670
|
+
case "end":
|
|
671
|
+
return _context17.stop();
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}, _callee17);
|
|
675
|
+
}));
|
|
676
|
+
|
|
677
|
+
return function (_x2) {
|
|
678
|
+
return _ref19.apply(this, arguments);
|
|
679
|
+
};
|
|
680
|
+
}());
|
|
681
|
+
});
|
|
682
|
+
});
|
|
683
|
+
it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n session | empty\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), undefined, true, null, true, {}, true, {
|
|
684
|
+
value: []
|
|
685
|
+
}, false)('returns score: 0 and empty: true if session is $session', /*#__PURE__*/function () {
|
|
686
|
+
var _ref21 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee18(_ref20) {
|
|
687
|
+
var session, empty, o;
|
|
688
|
+
return _regenerator["default"].wrap(function _callee18$(_context18) {
|
|
689
|
+
while (1) {
|
|
690
|
+
switch (_context18.prev = _context18.next) {
|
|
691
|
+
case 0:
|
|
692
|
+
session = _ref20.session, empty = _ref20.empty;
|
|
693
|
+
_context18.next = 3;
|
|
694
|
+
return (0, _index.outcome)(question, session, {
|
|
695
|
+
mode: 'evaluate'
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
case 3:
|
|
699
|
+
o = _context18.sent;
|
|
700
|
+
expect(o).toEqual({
|
|
701
|
+
score: 0,
|
|
702
|
+
empty: empty
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
case 5:
|
|
706
|
+
case "end":
|
|
707
|
+
return _context18.stop();
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}, _callee18);
|
|
711
|
+
}));
|
|
712
|
+
|
|
713
|
+
return function (_x3) {
|
|
714
|
+
return _ref21.apply(this, arguments);
|
|
715
|
+
};
|
|
716
|
+
}());
|
|
717
|
+
});
|
|
718
|
+
describe('correct response', function () {
|
|
719
|
+
it('returns correct response if env is correct', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee19() {
|
|
720
|
+
var sess;
|
|
721
|
+
return _regenerator["default"].wrap(function _callee19$(_context19) {
|
|
722
|
+
while (1) {
|
|
723
|
+
switch (_context19.prev = _context19.next) {
|
|
724
|
+
case 0:
|
|
725
|
+
_context19.next = 2;
|
|
726
|
+
return (0, _index.createCorrectResponseSession)(question, {
|
|
727
|
+
mode: 'gather',
|
|
728
|
+
role: 'instructor'
|
|
729
|
+
});
|
|
730
|
+
|
|
731
|
+
case 2:
|
|
732
|
+
sess = _context19.sent;
|
|
733
|
+
expect(sess).toEqual({
|
|
734
|
+
id: '1',
|
|
735
|
+
value: ['apple']
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
case 4:
|
|
739
|
+
case "end":
|
|
740
|
+
return _context19.stop();
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}, _callee19);
|
|
744
|
+
})));
|
|
745
|
+
it('returns null env is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee20() {
|
|
746
|
+
var noResult;
|
|
747
|
+
return _regenerator["default"].wrap(function _callee20$(_context20) {
|
|
748
|
+
while (1) {
|
|
749
|
+
switch (_context20.prev = _context20.next) {
|
|
750
|
+
case 0:
|
|
751
|
+
_context20.next = 2;
|
|
752
|
+
return (0, _index.createCorrectResponseSession)(question, {
|
|
753
|
+
mode: 'gather',
|
|
754
|
+
role: 'student'
|
|
755
|
+
});
|
|
756
|
+
|
|
757
|
+
case 2:
|
|
758
|
+
noResult = _context20.sent;
|
|
759
|
+
expect(noResult).toBeNull();
|
|
760
|
+
|
|
761
|
+
case 4:
|
|
762
|
+
case "end":
|
|
763
|
+
return _context20.stop();
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}, _callee20);
|
|
767
|
+
})));
|
|
768
|
+
});
|
|
769
|
+
describe('normalize', function () {
|
|
770
|
+
it('sets choicesLayout: horizontal if verticalMode: false', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee21() {
|
|
771
|
+
var sess;
|
|
772
|
+
return _regenerator["default"].wrap(function _callee21$(_context21) {
|
|
773
|
+
while (1) {
|
|
774
|
+
switch (_context21.prev = _context21.next) {
|
|
775
|
+
case 0:
|
|
776
|
+
_context21.next = 2;
|
|
777
|
+
return (0, _index.normalize)(_objectSpread(_objectSpread({}, question), {}, {
|
|
778
|
+
verticalMode: false
|
|
779
|
+
}));
|
|
780
|
+
|
|
781
|
+
case 2:
|
|
782
|
+
sess = _context21.sent;
|
|
783
|
+
expect(sess).toEqual(_objectSpread(_objectSpread(_objectSpread({}, _defaults["default"]), question), {}, {
|
|
784
|
+
choicesLayout: 'horizontal'
|
|
785
|
+
}));
|
|
786
|
+
|
|
787
|
+
case 4:
|
|
788
|
+
case "end":
|
|
789
|
+
return _context21.stop();
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
}, _callee21);
|
|
793
|
+
})));
|
|
794
|
+
it('sets choicesLayout: vertical if verticalMode: true', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee22() {
|
|
795
|
+
var sess;
|
|
796
|
+
return _regenerator["default"].wrap(function _callee22$(_context22) {
|
|
797
|
+
while (1) {
|
|
798
|
+
switch (_context22.prev = _context22.next) {
|
|
799
|
+
case 0:
|
|
800
|
+
_context22.next = 2;
|
|
801
|
+
return (0, _index.normalize)(_objectSpread(_objectSpread({}, question), {}, {
|
|
802
|
+
verticalMode: true
|
|
803
|
+
}));
|
|
804
|
+
|
|
805
|
+
case 2:
|
|
806
|
+
sess = _context22.sent;
|
|
807
|
+
expect(sess).toEqual(_objectSpread(_objectSpread(_objectSpread({}, _defaults["default"]), question), {}, {
|
|
808
|
+
choicesLayout: 'vertical'
|
|
809
|
+
}));
|
|
810
|
+
|
|
811
|
+
case 4:
|
|
812
|
+
case "end":
|
|
813
|
+
return _context22.stop();
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}, _callee22);
|
|
817
|
+
})));
|
|
818
|
+
it('sets choicesLayout: grid if verticalMode: true && choicesLayout: grid', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee23() {
|
|
819
|
+
var sess;
|
|
820
|
+
return _regenerator["default"].wrap(function _callee23$(_context23) {
|
|
821
|
+
while (1) {
|
|
822
|
+
switch (_context23.prev = _context23.next) {
|
|
823
|
+
case 0:
|
|
824
|
+
_context23.next = 2;
|
|
825
|
+
return (0, _index.normalize)(_objectSpread(_objectSpread({}, question), {}, {
|
|
826
|
+
verticalMode: true,
|
|
827
|
+
choicesLayout: 'grid'
|
|
828
|
+
}));
|
|
829
|
+
|
|
830
|
+
case 2:
|
|
831
|
+
sess = _context23.sent;
|
|
832
|
+
expect(sess).toEqual(_objectSpread(_objectSpread(_objectSpread({}, _defaults["default"]), question), {}, {
|
|
833
|
+
choicesLayout: 'grid'
|
|
834
|
+
}));
|
|
835
|
+
|
|
836
|
+
case 4:
|
|
837
|
+
case "end":
|
|
838
|
+
return _context23.stop();
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}, _callee23);
|
|
842
|
+
})));
|
|
843
|
+
it('sets choicesLayout: vertical', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee24() {
|
|
844
|
+
var sess;
|
|
845
|
+
return _regenerator["default"].wrap(function _callee24$(_context24) {
|
|
846
|
+
while (1) {
|
|
847
|
+
switch (_context24.prev = _context24.next) {
|
|
848
|
+
case 0:
|
|
849
|
+
_context24.next = 2;
|
|
850
|
+
return (0, _index.normalize)(question);
|
|
851
|
+
|
|
852
|
+
case 2:
|
|
853
|
+
sess = _context24.sent;
|
|
854
|
+
expect(sess).toEqual(_objectSpread(_objectSpread(_objectSpread({}, _defaults["default"]), question), {}, {
|
|
855
|
+
choicesLayout: 'vertical'
|
|
856
|
+
}));
|
|
857
|
+
|
|
858
|
+
case 4:
|
|
859
|
+
case "end":
|
|
860
|
+
return _context24.stop();
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
}, _callee24);
|
|
864
|
+
})));
|
|
865
|
+
});
|
|
866
|
+
});
|
|
867
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImlzUmVzcG9uc2VDb3JyZWN0IiwiZm4iLCJkZXNjcmliZSIsInJlc3VsdCIsInF1ZXN0aW9uIiwic2Vzc2lvbiIsImVudiIsImJlZm9yZUVhY2giLCJpZCIsImVsZW1lbnQiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiY2hvaWNlUHJlZml4IiwiY2hvaWNlTW9kZSIsImZlZWRiYWNrRW5hYmxlZCIsImNob2ljZXMiLCJsYWJlbCIsInZhbHVlIiwiY29ycmVjdCIsImZlZWRiYWNrIiwidHlwZSIsInN0cmluZ2lmeSIsIkpTT04iLCJtb2RlIiwiaXQiLCJleHBlY3QiLCJkaXNhYmxlZCIsInRvRXF1YWwiLCJrZXlNb2RlIiwiYXJyYXlDb250YWluaW5nIiwicmF0aW9uYWxlIiwicmVzcG9uc2VDb3JyZWN0IiwidG9CZSIsInVuZGVmaW5lZCIsImxvY2tDaG9pY2VPcmRlciIsInVwZGF0ZVNlc3Npb24iLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwic2h1ZmZsZWRWYWx1ZXMiLCJtb2NrUmV0dXJuVmFsdWUiLCJyZXR1cm5zQ29ycmVjdG5lc3MiLCJzZXNzIiwibyIsImVhY2giLCJzZXNzaW9uVmFsdWUiLCJleHBlY3RlZFBhcnRpYWxTY29yaW5nIiwiZXhwZWN0ZWREeWNob3RvbW91cyIsInEiLCJyZXN1bHRQUyIsInNjb3JlIiwicGFydGlhbFNjb3JpbmciLCJyZXN1bHREIiwiY29uY2F0IiwiZXhwZWN0ZWQiLCJlbXB0eSIsInJvbGUiLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwidmVydGljYWxNb2RlIiwiZGVmYXVsdHMiLCJjaG9pY2VzTGF5b3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsVUFBVixFQUFzQjtBQUFB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LElBQUQsQ0FBTixDQUFhZCxPQUFiLCtDQUEwQmdDLG9CQUExQixHQUF1Q3ZELFFBQXZDO0FBQWlEd0QsZ0JBQUFBLGFBQWEsRUFBRTtBQUFoRTs7QUFIMEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBMUUsR0FBRjtBQU1BcEMsSUFBQUEsRUFBRSxDQUFDLDhCQUFELDZGQUFpQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUNkLHNCQUFVcEIsUUFBVixDQURjOztBQUFBO0FBQzNCcUMsY0FBQUEsSUFEMkI7QUFHakNoQixjQUFBQSxNQUFNLENBQUNnQixJQUFELENBQU4sQ0FBYWQsT0FBYiwrQ0FBMEJnQyxvQkFBMUIsR0FBdUN2RCxRQUF2QztBQUFpRHdELGdCQUFBQSxhQUFhLEVBQUU7QUFBaEU7O0FBSGlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQWpDLEdBQUY7QUFLRCxHQXhCTyxDQUFSO0FBeUJELENBdmRPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgb3V0Y29tZSwgZ2V0U2NvcmUsIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sIG5vcm1hbGl6ZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGlzUmVzcG9uc2VDb3JyZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcblxuamVzdC5tb2NrKCcuLi91dGlscycsICgpID0+ICh7XG4gIGlzUmVzcG9uc2VDb3JyZWN0OiBqZXN0LmZuKCksXG59KSk7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0LCBxdWVzdGlvbiwgc2Vzc2lvbiwgZW52O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHF1ZXN0aW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnLFxuICAgICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VQcmVmaXg6ICdsZXR0ZXJzJyxcbiAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgIHZhbHVlOiAnYXBwbGUnLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgIHZhbHVlOiAnYmFuYW5hJyxcbiAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0IHsgc3RyaW5naWZ5IH0gPSBKU09OO1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZTogZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbChmYWxzZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbW9kZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5tb2RlKS50b0VxdWFsKCdnYXRoZXInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9tcHQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucHJvbXB0KS50b0VxdWFsKCdwcm9tcHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VNb2RlJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZU1vZGUpLnRvRXF1YWwoJ3JhZGlvJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlUHJlZml4JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleU1vZGUpLnRvRXF1YWwoJ2xldHRlcnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZXMpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgICB7IGxhYmVsOiAnYScsIHZhbHVlOiAnYXBwbGUnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgcmV0dXJuIHJlc3BvbnNlQ29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZUNvcnJlY3QpLnRvQmUodW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGVsIC0gd2l0aCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7IGlkOiAnMScsIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnIH07XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgICAgcXVlc3Rpb24gPSB7IC4uLnF1ZXN0aW9uLCBsb2NrQ2hvaWNlT3JkZXI6IGZhbHNlIH07XG4gICAgICAgIGNvbnN0IHVwZGF0ZVNlc3Npb24gPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoKTtcblxuICAgICAgICBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52LCB1cGRhdGVTZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAnbXVsdGlwbGUtY2hvaWNlJywge1xuICAgICAgICAgIHNodWZmbGVkVmFsdWVzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsnYXBwbGUnLCAnYmFuYW5hJ10pLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IHZpZXcnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICd2aWV3JyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IGV2YWx1YXRlJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICAgIGlzUmVzcG9uc2VDb3JyZWN0Lm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNob2ljZXMgdy8gY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdmb28nLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBmZWVkYmFjazogJ0luY29ycmVjdCcsXG4gICAgICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlcyB3LyBjb3JyZWN0IGV2ZW4gaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBmZWVkYmFjayB1bmRlZmluZWQgaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaWYgZmVlZGJhY2tFbmFibGVkIGlzIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgamVzdC5mbigpLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQuY2hvaWNlcykudG9FcXVhbChcbiAgICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdhJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdhcHBsZScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICAgIGZlZWRiYWNrOiAnZm9vJyxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdJbmNvcnJlY3QnLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGlzIHJlc3BvbnNlIGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2VDb3JyZWN0KS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXR1cm5zQ29ycmVjdG5lc3MgPSAoc2VzcykgPT4ge1xuICAgICAgICBpdChgcmV0dXJucyByZXNwb25zZUNvcnJlY3Q6IGZhbHNlIGlmIHNlc3Npb24gaXMgJHtzdHJpbmdpZnkoc2Vzcyl9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG8gPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2VzcywgZW52KTtcblxuICAgICAgICAgIGV4cGVjdChvLnJlc3BvbnNlQ29ycmVjdCkudG9FcXVhbChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuc0NvcnJlY3RuZXNzKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3Moe30pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZVByZWZpeCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgZWxlbWVudDogJ211bHRpcGxlLWNob2ljZScsXG4gICAgICAgIHByb21wdDogJ3Byb21wdCcsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYScsXG4gICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYicsXG4gICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgfSk7XG4gICAgICBpdCgncmV0dXJucyBkZWZhdWx0IGxldHRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5TW9kZSkudG9FcXVhbCgnbGV0dGVycycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgc2Vzc2lvblZhbHVlICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkRHljaG90b21vdXMgfCBleHBlY3RlZFBhcnRpYWxTY29yaW5nXG4gICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7bnVsbH0gICAgICAgICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbXX0gICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYSddfSAgICAgICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2UnXX0gICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2InXX0gICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdjJ119ICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2EnLCAnZCddfSAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2UnXX0gICAgICAgICAgICAgICAgfCAkezF9ICAgICAgICAgICAgICAgIHwgJHsxfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJ119ICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdiJywgJ2QnXX0gICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdiJywgJ2MnLCAnZCddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnYycsICdlJ119ICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddfSB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdjJywgJ2QnLCAnZSddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2QnLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgYChcbiAgICAgICdzZXNzaW9uID0gJHNlc3Npb25WYWx1ZTsgcGFydGlhbCBzY29yaW5nID0gdHJ1ZSA9PiBzY29yZSA9ICRleHBlY3RlZFBhcnRpYWxTY29yaW5nIC8gcGFydGlhbCBzY29yaW5nID0gZmFsc2UgPT4gc2NvcmUgPSAkZXhwZWN0ZWREeWNob3RvbW91cycsXG4gICAgICBhc3luYyAoeyBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkUGFydGlhbFNjb3JpbmcsIGV4cGVjdGVkRHljaG90b21vdXMgfSkgPT4ge1xuICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2EnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIHZhbHVlOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgdmFsdWU6ICdjJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2QnLCB2YWx1ZTogJ2QnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnZScsIHZhbHVlOiAnZScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFBTID0gYXdhaXQgb3V0Y29tZShxLCB7IHZhbHVlOiBzZXNzaW9uVmFsdWUgfSwgeyBtb2RlOiAnZXZhbHVhdGUgJyB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0UFMuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWRQYXJ0aWFsU2NvcmluZyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0RCA9IGF3YWl0IG91dGNvbWUoeyAuLi5xLCBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSwgeyB2YWx1ZTogc2Vzc2lvblZhbHVlIH0sIHsgbW9kZTogJ2V2YWx1YXRlICcgfSk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdEQuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWREeWNob3RvbW91cyk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7IHZhbHVlOiBbJ2JhbmFuYSddIH0sIHsgbW9kZTogJ2dhdGhlcicgfSk7XG4gICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgc2NvcmUgb2YgMScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWU6IFsnYXBwbGUnXSB9LCB7IG1vZGU6ICdnYXRoZXInIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJ0aWFsIHNjb3JpbmcnLCAoKSA9PiB7XG4gICAgICBkZXNjcmliZSgnY2hvaWNlTW9kZTpyYWRpbyBpcyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge30sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMgYW5kIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyB2YWx1ZTogWydhcHBsZSddIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZW52LnBhcnRpYWxTY29yaW5nOiB0cnVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSwge30pO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnd2l0aCBlbnYucGFydGlhbFNjb3Jpbmc6IHRydWUgKyBjb25maWcucGFydGlhbFNjb3Jpbmc6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZSh7IC4uLnF1ZXN0aW9uLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LCB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnY2hlY2tib3gnLCAoKSA9PiB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzLmNvbmNhdCh7XG4gICAgICAgICAgICB2YWx1ZTogJ2MnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICAgICAgY2hvaWNlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBpdC5lYWNoYFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAgICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke251bGx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1tdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1snYXBwbGUnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC4yNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgICAgICR7WydhcHBsZScsICdiYW5hbmEnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdjaGVycnknXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezF9XG4gICAgICAgICAgJHtbJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbiddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdlbGRlcmJlcnJpZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCcsICdraXdpJ119ICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdlbGRlcmJlcnJpZXMnLCAnamFja2ZydWl0JywgJ2tpd2knXX0gfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnXX0gICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5JywgJ2JhbmFuYScsICdncmFwZXMnLCAnZHVyaWFuJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC43NX1cbiAgICAgICAgYChcbiAgICAgICAgICAnb3V0Y29tZTogcGFydGlhbCBzY29yaW5nID0gdHJ1ZSwgc2Vzc2lvblZhbHVlID0gJHNlc3Npb25WYWx1ZSA9PiBleHBlY3RlZCA9ICRleHBlY3RlZCcsXG4gICAgICAgICAgYXN5bmMgKHsgc2Vzc2lvblZhbHVlLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2FwcGxlJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCB2YWx1ZTogJ2NoZXJyeScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZCcsIHZhbHVlOiAnZHVyaWFuJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdlJywgdmFsdWU6ICdlbGRlcmJlcnJpZXMnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2YnLCB2YWx1ZTogJ2ZlaWpvYScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZycsIHZhbHVlOiAnZ3JhcGVzJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdqJywgdmFsdWU6ICdqYWNrZnJ1aXQnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2snLCB2YWx1ZTogJ2tpd2knIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHEsIHsgdmFsdWU6IHNlc3Npb25WYWx1ZSB9LCB7IG1vZGU6ICdldmFsdWF0ZSAnIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQuZWFjaGBcbiAgICAgIHNlc3Npb24gICAgICAgICAgfCBlbXB0eVxuICAgICAgJHt1bmRlZmluZWR9ICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7bnVsbH0gICAgICAgICAgfCAke3RydWV9XG4gICAgICAke3t9fSAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHt7IHZhbHVlOiBbXSB9fSB8ICR7ZmFsc2V9XG4gICAgYCgncmV0dXJucyBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAkc2Vzc2lvbicsIGFzeW5jICh7IHNlc3Npb24sIGVtcHR5IH0pID0+IHtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG5cbiAgICAgIGV4cGVjdChvKS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5IH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIGVudiBpcyBjb3JyZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdpbnN0cnVjdG9yJyB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IFsnYXBwbGUnXSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgZW52IGlzIHN0dWRlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZScsICgpID0+IHtcbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBob3Jpem9udGFsIGlmIHZlcnRpY2FsTW9kZTogZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAnaG9yaXpvbnRhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiB2ZXJ0aWNhbCBpZiB2ZXJ0aWNhbE1vZGU6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogdHJ1ZSB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICd2ZXJ0aWNhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBncmlkIGlmIHZlcnRpY2FsTW9kZTogdHJ1ZSAmJiBjaG9pY2VzTGF5b3V0OiBncmlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZSh7IC4uLnF1ZXN0aW9uLCB2ZXJ0aWNhbE1vZGU6IHRydWUsIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzZXRzIGNob2ljZXNMYXlvdXQ6IHZlcnRpY2FsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZShxdWVzdGlvbik7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAndmVydGljYWwnIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|