@pie-lib/charting 6.2.0-next.2 → 6.2.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +23 -37
  2. package/LICENSE.md +5 -0
  3. package/lib/actions-button.js +1 -1
  4. package/lib/axes.js +1 -1
  5. package/lib/bars/bar.js +1 -1
  6. package/lib/bars/common/bars.js +1 -1
  7. package/lib/bars/common/correct-check-icon.js +1 -1
  8. package/lib/bars/histogram.js +1 -1
  9. package/lib/chart-setup.js +1 -1
  10. package/lib/chart-type.js +1 -1
  11. package/lib/chart-types.js +1 -1
  12. package/lib/chart.js +1 -1
  13. package/lib/common/correctness-indicators.js +1 -1
  14. package/lib/common/drag-handle.js +1 -1
  15. package/lib/common/drag-icon.js +1 -1
  16. package/lib/common/styles.js +1 -1
  17. package/lib/grid.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/key-legend.js +1 -1
  20. package/lib/line/common/drag-handle.js +1 -1
  21. package/lib/line/common/line.js +1 -1
  22. package/lib/line/line-cross.js +1 -1
  23. package/lib/line/line-dot.js +1 -1
  24. package/lib/mark-label.js +1 -1
  25. package/lib/plot/common/plot.js +1 -1
  26. package/lib/plot/dot.js +1 -1
  27. package/lib/plot/line.js +1 -1
  28. package/lib/tool-menu.js +1 -1
  29. package/lib/utils.js +1 -1
  30. package/package.json +3 -3
  31. package/lib/__tests__/actions-button.test.js +0 -332
  32. package/lib/__tests__/axes.test.js +0 -746
  33. package/lib/__tests__/chart-setup.test.js +0 -796
  34. package/lib/__tests__/chart-type.test.js +0 -25
  35. package/lib/__tests__/chart.test.js +0 -103
  36. package/lib/__tests__/grid.test.js +0 -39
  37. package/lib/__tests__/key-legend.test.js +0 -235
  38. package/lib/__tests__/mark-label.test.js +0 -46
  39. package/lib/__tests__/tool-menu.test.js +0 -627
  40. package/lib/__tests__/utils.js +0 -56
  41. package/lib/__tests__/utils.test.js +0 -186
  42. package/lib/bars/__tests__/bar.test.js +0 -53
  43. package/lib/bars/__tests__/histogram.test.js +0 -53
  44. package/lib/bars/__tests__/utils.js +0 -50
  45. package/lib/bars/common/__tests__/bars.test.js +0 -76
  46. package/lib/bars/common/__tests__/utils.js +0 -50
  47. package/lib/common/__tests__/correctness-indicators.test.js +0 -887
  48. package/lib/common/__tests__/drag-handle.test.js +0 -73
  49. package/lib/common/__tests__/utils.js +0 -50
  50. package/lib/line/__tests__/line-cross.test.js +0 -617
  51. package/lib/line/__tests__/line-dot.test.js +0 -47
  52. package/lib/line/__tests__/utils.js +0 -56
  53. package/lib/line/common/__tests__/drag-handle.test.js +0 -73
  54. package/lib/line/common/__tests__/line.test.js +0 -92
  55. package/lib/line/common/__tests__/utils.js +0 -50
  56. package/lib/plot/__tests__/dot.test.js +0 -513
  57. package/lib/plot/__tests__/line.test.js +0 -566
  58. package/lib/plot/__tests__/utils.js +0 -50
  59. package/lib/plot/common/__tests__/plot.test.js +0 -79
  60. package/lib/plot/common/__tests__/utils.js +0 -50
@@ -1,566 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
7
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
- var _react = _interopRequireDefault(require("react"));
9
- var _testUtils = require("@pie-lib/test-utils");
10
- var _styles = require("@mui/material/styles");
11
- var _line = _interopRequireWildcard(require("../line"));
12
- var _utils = require("./utils");
13
- var _excluded = ["data", "x", "y"];
14
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
- jest.mock('@mui/icons-material/Check', function () {
18
- return function Check(props) {
19
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
20
- "data-testid": "check-icon"
21
- }, props));
22
- };
23
- });
24
- jest.mock('@visx/shape', function () {
25
- return {
26
- LinePath: function LinePath(_ref) {
27
- var data = _ref.data,
28
- x = _ref.x,
29
- y = _ref.y,
30
- rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
31
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({
32
- d: data.map(function (d, i) {
33
- return "".concat(i === 0 ? 'M' : 'L').concat(x(d), ",").concat(y(d));
34
- }).join(' ')
35
- }, rest));
36
- }
37
- };
38
- });
39
- jest.mock('@visx/group', function () {
40
- return {
41
- Group: function Group(_ref2) {
42
- var children = _ref2.children;
43
- return /*#__PURE__*/_react["default"].createElement("g", {
44
- className: "visx-group"
45
- }, children);
46
- }
47
- };
48
- });
49
- var theme;
50
- beforeAll(function () {
51
- theme = (0, _styles.createTheme)();
52
- });
53
- describe('LinePlot', function () {
54
- var renderComponent = function renderComponent(extras) {
55
- var defaults = {
56
- classes: {},
57
- className: 'className',
58
- graphProps: (0, _utils.graphProps)(),
59
- xBand: function xBand() {
60
- return {
61
- bandwidth: function bandwidth() {}
62
- };
63
- }
64
- };
65
- var props = _objectSpread(_objectSpread({}, defaults), extras);
66
- return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
67
- theme: theme
68
- }, /*#__PURE__*/_react["default"].createElement("svg", null, /*#__PURE__*/_react["default"].createElement(_line.LinePlot, props))));
69
- };
70
- describe('rendering', function () {
71
- it('renders line plot', function () {
72
- var _renderComponent = renderComponent(),
73
- container = _renderComponent.container;
74
- expect(container.firstChild).toBeInTheDocument();
75
- });
76
- it('renders without graphProps', function () {
77
- var _renderComponent2 = renderComponent({
78
- graphProps: undefined
79
- }),
80
- container = _renderComponent2.container;
81
- expect(container.firstChild).toBeInTheDocument();
82
- });
83
- it('renders with data array', function () {
84
- var data = [{
85
- value: 1,
86
- label: 'A'
87
- }, {
88
- value: 2,
89
- label: 'B'
90
- }, {
91
- value: 3,
92
- label: 'C'
93
- }];
94
- var _renderComponent3 = renderComponent({
95
- data: data
96
- }),
97
- container = _renderComponent3.container;
98
- expect(container.firstChild).toBeInTheDocument();
99
- });
100
- it('renders with empty data array', function () {
101
- var _renderComponent4 = renderComponent({
102
- data: []
103
- }),
104
- container = _renderComponent4.container;
105
- expect(container.firstChild).toBeInTheDocument();
106
- });
107
- it('renders with null data', function () {
108
- var _renderComponent5 = renderComponent({
109
- data: null
110
- }),
111
- container = _renderComponent5.container;
112
- expect(container.firstChild).toBeInTheDocument();
113
- });
114
- it('renders with undefined data', function () {
115
- var _renderComponent6 = renderComponent({
116
- data: undefined
117
- }),
118
- container = _renderComponent6.container;
119
- expect(container.firstChild).toBeInTheDocument();
120
- });
121
- it('renders with custom className', function () {
122
- var _renderComponent7 = renderComponent({
123
- className: 'custom-line-plot'
124
- }),
125
- container = _renderComponent7.container;
126
- expect(container.firstChild).toBeInTheDocument();
127
- });
128
- it('renders with onChange handler', function () {
129
- var onChange = jest.fn();
130
- var _renderComponent8 = renderComponent({
131
- onChange: onChange
132
- }),
133
- container = _renderComponent8.container;
134
- expect(container.firstChild).toBeInTheDocument();
135
- });
136
- it('renders in defineChart mode', function () {
137
- var _renderComponent9 = renderComponent({
138
- defineChart: true
139
- }),
140
- container = _renderComponent9.container;
141
- expect(container.firstChild).toBeInTheDocument();
142
- });
143
- it('renders with correctData', function () {
144
- var data = [{
145
- value: 2,
146
- label: 'A'
147
- }];
148
- var correctData = [{
149
- value: 3,
150
- label: 'A'
151
- }];
152
- var _renderComponent0 = renderComponent({
153
- data: data,
154
- correctData: correctData
155
- }),
156
- container = _renderComponent0.container;
157
- expect(container.firstChild).toBeInTheDocument();
158
- });
159
- });
160
- describe('graphProps handling', function () {
161
- it('handles graphProps with missing scale', function () {
162
- var props = (0, _utils.graphProps)();
163
- delete props.scale;
164
- var _renderComponent1 = renderComponent({
165
- graphProps: props
166
- }),
167
- container = _renderComponent1.container;
168
- expect(container.firstChild).toBeInTheDocument();
169
- });
170
- it('handles graphProps with missing size', function () {
171
- var props = (0, _utils.graphProps)();
172
- delete props.size;
173
- var _renderComponent10 = renderComponent({
174
- graphProps: props
175
- }),
176
- container = _renderComponent10.container;
177
- expect(container.firstChild).toBeInTheDocument();
178
- });
179
- it('handles graphProps with empty scale object', function () {
180
- var props = (0, _utils.graphProps)();
181
- props.scale = {};
182
- var _renderComponent11 = renderComponent({
183
- graphProps: props
184
- }),
185
- container = _renderComponent11.container;
186
- expect(container.firstChild).toBeInTheDocument();
187
- });
188
- it('handles graphProps with empty size object', function () {
189
- var props = (0, _utils.graphProps)();
190
- props.size = {};
191
- var _renderComponent12 = renderComponent({
192
- graphProps: props
193
- }),
194
- container = _renderComponent12.container;
195
- expect(container.firstChild).toBeInTheDocument();
196
- });
197
- });
198
- describe('data variations', function () {
199
- it('renders with single data point', function () {
200
- var data = [{
201
- value: 1,
202
- label: 'A'
203
- }];
204
- var _renderComponent13 = renderComponent({
205
- data: data
206
- }),
207
- container = _renderComponent13.container;
208
- expect(container.firstChild).toBeInTheDocument();
209
- });
210
- it('renders with multiple data points', function () {
211
- var data = [{
212
- value: 1,
213
- label: 'A'
214
- }, {
215
- value: 2,
216
- label: 'B'
217
- }, {
218
- value: 3,
219
- label: 'C'
220
- }, {
221
- value: 4,
222
- label: 'D'
223
- }];
224
- var _renderComponent14 = renderComponent({
225
- data: data
226
- }),
227
- container = _renderComponent14.container;
228
- expect(container.firstChild).toBeInTheDocument();
229
- });
230
- it('renders with zero values', function () {
231
- var data = [{
232
- value: 0,
233
- label: 'A'
234
- }, {
235
- value: 0,
236
- label: 'B'
237
- }];
238
- var _renderComponent15 = renderComponent({
239
- data: data
240
- }),
241
- container = _renderComponent15.container;
242
- expect(container.firstChild).toBeInTheDocument();
243
- });
244
- it('renders with mixed values', function () {
245
- var data = [{
246
- value: 0,
247
- label: 'A'
248
- }, {
249
- value: 5,
250
- label: 'B'
251
- }, {
252
- value: 1,
253
- label: 'C'
254
- }];
255
- var _renderComponent16 = renderComponent({
256
- data: data
257
- }),
258
- container = _renderComponent16.container;
259
- expect(container.firstChild).toBeInTheDocument();
260
- });
261
- it('renders with large values', function () {
262
- var data = [{
263
- value: 100,
264
- label: 'A'
265
- }, {
266
- value: 200,
267
- label: 'B'
268
- }];
269
- var _renderComponent17 = renderComponent({
270
- data: data
271
- }),
272
- container = _renderComponent17.container;
273
- expect(container.firstChild).toBeInTheDocument();
274
- });
275
- it('renders with correctness data', function () {
276
- var data = [{
277
- value: 2,
278
- label: 'A',
279
- correctness: {
280
- value: 'correct',
281
- label: 'Correct'
282
- }
283
- }, {
284
- value: 3,
285
- label: 'B',
286
- correctness: {
287
- value: 'correct',
288
- label: 'Correct'
289
- }
290
- }];
291
- var _renderComponent18 = renderComponent({
292
- data: data
293
- }),
294
- container = _renderComponent18.container;
295
- expect(container.firstChild).toBeInTheDocument();
296
- });
297
- it('renders with incorrect correctness and correctData', function () {
298
- var data = [{
299
- value: 2,
300
- label: 'A',
301
- correctness: {
302
- value: 'incorrect',
303
- label: 'Incorrect'
304
- }
305
- }, {
306
- value: 3,
307
- label: 'B',
308
- correctness: {
309
- value: 'incorrect',
310
- label: 'Incorrect'
311
- }
312
- }];
313
- var correctData = [{
314
- value: 3,
315
- label: 'A'
316
- }, {
317
- value: 4,
318
- label: 'B'
319
- }];
320
- var _renderComponent19 = renderComponent({
321
- data: data,
322
- correctData: correctData
323
- }),
324
- container = _renderComponent19.container;
325
- expect(container.firstChild).toBeInTheDocument();
326
- });
327
- it('renders with interactive data points', function () {
328
- var data = [{
329
- value: 2,
330
- label: 'A',
331
- interactive: true
332
- }, {
333
- value: 3,
334
- label: 'B',
335
- interactive: false
336
- }];
337
- var _renderComponent20 = renderComponent({
338
- data: data
339
- }),
340
- container = _renderComponent20.container;
341
- expect(container.firstChild).toBeInTheDocument();
342
- });
343
- });
344
- describe('callbacks', function () {
345
- it('passes onChange handler to Plot component', function () {
346
- var onChange = jest.fn();
347
- var data = [{
348
- value: 1,
349
- label: 'A'
350
- }];
351
- var _renderComponent21 = renderComponent({
352
- data: data,
353
- onChange: onChange
354
- }),
355
- container = _renderComponent21.container;
356
- expect(container.firstChild).toBeInTheDocument();
357
- });
358
- it('handles onChangeCategory callback', function () {
359
- var onChangeCategory = jest.fn();
360
- var data = [{
361
- value: 1,
362
- label: 'A'
363
- }];
364
- var _renderComponent22 = renderComponent({
365
- data: data,
366
- onChangeCategory: onChangeCategory
367
- }),
368
- container = _renderComponent22.container;
369
- expect(container.firstChild).toBeInTheDocument();
370
- });
371
- });
372
- describe('component', function () {
373
- it('returns correct chart object', function () {
374
- var chart = (0, _line["default"])();
375
- expect(chart).toEqual({
376
- type: 'linePlot',
377
- Component: _line.LinePlot,
378
- name: 'Line Plot'
379
- });
380
- });
381
- it('returns object with Component that can be rendered', function () {
382
- var chart = (0, _line["default"])();
383
- var Component = chart.Component;
384
- var _render = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(Component, {
385
- graphProps: (0, _utils.graphProps)()
386
- })),
387
- container = _render.container;
388
- expect(container.firstChild).toBeInTheDocument();
389
- });
390
- });
391
- });
392
- describe('CustomBarElement (Line)', function () {
393
- var renderLinePlot = function renderLinePlot(props) {
394
- return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
395
- theme: theme
396
- }, /*#__PURE__*/_react["default"].createElement("svg", null, /*#__PURE__*/_react["default"].createElement(_line.LinePlot, props))));
397
- };
398
- it('renders line elements', function () {
399
- var data = [{
400
- value: 1,
401
- label: 'A'
402
- }];
403
- var _renderLinePlot = renderLinePlot({
404
- data: data,
405
- graphProps: (0, _utils.graphProps)()
406
- }),
407
- container = _renderLinePlot.container;
408
- expect(container).toBeInTheDocument();
409
- });
410
- it('renders with dottedOverline prop', function () {
411
- var data = [{
412
- value: 2,
413
- label: 'A',
414
- correctness: {
415
- value: 'incorrect'
416
- }
417
- }];
418
- var correctData = [{
419
- value: 3,
420
- label: 'A'
421
- }];
422
- var _renderLinePlot2 = renderLinePlot({
423
- data: data,
424
- graphProps: (0, _utils.graphProps)(),
425
- correctData: correctData
426
- }),
427
- container = _renderLinePlot2.container;
428
- expect(container).toBeInTheDocument();
429
- });
430
- it('renders without dottedOverline prop', function () {
431
- var data = [{
432
- value: 2,
433
- label: 'A'
434
- }];
435
- var _renderLinePlot3 = renderLinePlot({
436
- data: data,
437
- graphProps: (0, _utils.graphProps)()
438
- }),
439
- container = _renderLinePlot3.container;
440
- expect(container).toBeInTheDocument();
441
- });
442
- it('renders two LinePath elements for X shape when not dotted', function () {
443
- var data = [{
444
- value: 3,
445
- label: 'A'
446
- }];
447
- var _renderLinePlot4 = renderLinePlot({
448
- data: data,
449
- graphProps: (0, _utils.graphProps)()
450
- }),
451
- container = _renderLinePlot4.container;
452
- expect(container).toBeInTheDocument();
453
- });
454
- it('renders rect with dashed stroke when dottedOverline is true', function () {
455
- var data = [{
456
- value: 2,
457
- label: 'A',
458
- correctness: {
459
- value: 'incorrect'
460
- }
461
- }];
462
- var correctData = [{
463
- value: 3,
464
- label: 'A'
465
- }];
466
- var _renderLinePlot5 = renderLinePlot({
467
- data: data,
468
- graphProps: (0, _utils.graphProps)(),
469
- correctData: correctData
470
- }),
471
- container = _renderLinePlot5.container;
472
- expect(container).toBeInTheDocument();
473
- });
474
- it('calculates correct line positions', function () {
475
- var data = [{
476
- value: 2,
477
- label: 'A'
478
- }];
479
- var _renderLinePlot6 = renderLinePlot({
480
- data: data,
481
- graphProps: (0, _utils.graphProps)()
482
- }),
483
- container = _renderLinePlot6.container;
484
- expect(container).toBeInTheDocument();
485
- });
486
- it('handles zero pointDiameter', function () {
487
- var props = (0, _utils.graphProps)();
488
- props.size = {
489
- width: 0,
490
- height: 0
491
- };
492
- var data = [{
493
- value: 1,
494
- label: 'A'
495
- }];
496
- var _renderLinePlot7 = renderLinePlot({
497
- data: data,
498
- graphProps: props
499
- }),
500
- container = _renderLinePlot7.container;
501
- expect(container).toBeInTheDocument();
502
- });
503
- it('handles large pointDiameter values', function () {
504
- var props = (0, _utils.graphProps)();
505
- props.size = {
506
- width: 1000,
507
- height: 1000
508
- };
509
- var data = [{
510
- value: 1,
511
- label: 'A'
512
- }];
513
- var _renderLinePlot8 = renderLinePlot({
514
- data: data,
515
- graphProps: props
516
- }),
517
- container = _renderLinePlot8.container;
518
- expect(container).toBeInTheDocument();
519
- });
520
- it('applies correct strokeWidth based on pointDiameter', function () {
521
- var data = [{
522
- value: 2,
523
- label: 'A'
524
- }];
525
- var _renderLinePlot9 = renderLinePlot({
526
- data: data,
527
- graphProps: (0, _utils.graphProps)()
528
- }),
529
- container = _renderLinePlot9.container;
530
- // strokeWidth should be pointDiameter / 5
531
- expect(container).toBeInTheDocument();
532
- });
533
- it('renders Group component wrapping LinePaths', function () {
534
- var data = [{
535
- value: 1,
536
- label: 'A'
537
- }];
538
- var _renderLinePlot0 = renderLinePlot({
539
- data: data,
540
- graphProps: (0, _utils.graphProps)()
541
- }),
542
- container = _renderLinePlot0.container;
543
- expect(container).toBeInTheDocument();
544
- });
545
- it('handles rect with extra padding when dotted', function () {
546
- var data = [{
547
- value: 2,
548
- label: 'A',
549
- correctness: {
550
- value: 'incorrect'
551
- }
552
- }];
553
- var correctData = [{
554
- value: 3,
555
- label: 'A'
556
- }];
557
- var _renderLinePlot1 = renderLinePlot({
558
- data: data,
559
- graphProps: (0, _utils.graphProps)(),
560
- correctData: correctData
561
- }),
562
- container = _renderLinePlot1.container;
563
- expect(container).toBeInTheDocument();
564
- });
565
- });
566
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90ZXN0VXRpbHMiLCJfc3R5bGVzIiwiX2xpbmUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl91dGlscyIsIl9leGNsdWRlZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJqZXN0IiwibW9jayIsIkNoZWNrIiwicHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiTGluZVBhdGgiLCJfcmVmIiwiZGF0YSIsIngiLCJ5IiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJkIiwibWFwIiwiY29uY2F0Iiwiam9pbiIsIkdyb3VwIiwiX3JlZjIiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInRoZW1lIiwiYmVmb3JlQWxsIiwiY3JlYXRlVGhlbWUiLCJkZXNjcmliZSIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImdyYXBoUHJvcHMiLCJ4QmFuZCIsImJhbmR3aWR0aCIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJMaW5lUGxvdCIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXJDb21wb25lbnQyIiwidW5kZWZpbmVkIiwidmFsdWUiLCJsYWJlbCIsIl9yZW5kZXJDb21wb25lbnQzIiwiX3JlbmRlckNvbXBvbmVudDQiLCJfcmVuZGVyQ29tcG9uZW50NSIsIl9yZW5kZXJDb21wb25lbnQ2IiwiX3JlbmRlckNvbXBvbmVudDciLCJvbkNoYW5nZSIsImZuIiwiX3JlbmRlckNvbXBvbmVudDgiLCJfcmVuZGVyQ29tcG9uZW50OSIsImRlZmluZUNoYXJ0IiwiY29ycmVjdERhdGEiLCJfcmVuZGVyQ29tcG9uZW50MCIsInNjYWxlIiwiX3JlbmRlckNvbXBvbmVudDEiLCJzaXplIiwiX3JlbmRlckNvbXBvbmVudDEwIiwiX3JlbmRlckNvbXBvbmVudDExIiwiX3JlbmRlckNvbXBvbmVudDEyIiwiX3JlbmRlckNvbXBvbmVudDEzIiwiX3JlbmRlckNvbXBvbmVudDE0IiwiX3JlbmRlckNvbXBvbmVudDE1IiwiX3JlbmRlckNvbXBvbmVudDE2IiwiX3JlbmRlckNvbXBvbmVudDE3IiwiY29ycmVjdG5lc3MiLCJfcmVuZGVyQ29tcG9uZW50MTgiLCJfcmVuZGVyQ29tcG9uZW50MTkiLCJpbnRlcmFjdGl2ZSIsIl9yZW5kZXJDb21wb25lbnQyMCIsIl9yZW5kZXJDb21wb25lbnQyMSIsIm9uQ2hhbmdlQ2F0ZWdvcnkiLCJfcmVuZGVyQ29tcG9uZW50MjIiLCJjaGFydCIsIkxpbmUiLCJ0b0VxdWFsIiwidHlwZSIsIkNvbXBvbmVudCIsIm5hbWUiLCJfcmVuZGVyIiwicmVuZGVyTGluZVBsb3QiLCJfcmVuZGVyTGluZVBsb3QiLCJfcmVuZGVyTGluZVBsb3QyIiwiX3JlbmRlckxpbmVQbG90MyIsIl9yZW5kZXJMaW5lUGxvdDQiLCJfcmVuZGVyTGluZVBsb3Q1IiwiX3JlbmRlckxpbmVQbG90NiIsIndpZHRoIiwiaGVpZ2h0IiwiX3JlbmRlckxpbmVQbG90NyIsIl9yZW5kZXJMaW5lUGxvdDgiLCJfcmVuZGVyTGluZVBsb3Q5IiwiX3JlbmRlckxpbmVQbG90MCIsIl9yZW5kZXJMaW5lUGxvdDEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGxvdC9fX3Rlc3RzX18vbGluZS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHBpZS1saWIvdGVzdC11dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSwgVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCBMaW5lLCB7IExpbmVQbG90IH0gZnJvbSAnLi4vbGluZSc7XG5pbXBvcnQgeyBncmFwaFByb3BzIH0gZnJvbSAnLi91dGlscyc7XG5cbmplc3QubW9jaygnQG11aS9pY29ucy1tYXRlcmlhbC9DaGVjaycsICgpID0+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENoZWNrKHByb3BzKSB7XG4gICAgcmV0dXJuIDxkaXYgZGF0YS10ZXN0aWQ9XCJjaGVjay1pY29uXCIgey4uLnByb3BzfSAvPjtcbiAgfTtcbn0pO1xuXG5qZXN0Lm1vY2soJ0B2aXN4L3NoYXBlJywgKCkgPT4gKHtcbiAgTGluZVBhdGg6ICh7IGRhdGEsIHgsIHksIC4uLnJlc3QgfSkgPT4gKFxuICAgIDxwYXRoIGQ9e2RhdGEubWFwKChkLCBpKSA9PiBgJHtpID09PSAwID8gJ00nIDogJ0wnfSR7eChkKX0sJHt5KGQpfWApLmpvaW4oJyAnKX0gey4uLnJlc3R9IC8+XG4gICksXG59KSk7XG5cbmplc3QubW9jaygnQHZpc3gvZ3JvdXAnLCAoKSA9PiAoe1xuICBHcm91cDogKHsgY2hpbGRyZW4gfSkgPT4gPGcgY2xhc3NOYW1lPVwidmlzeC1ncm91cFwiPntjaGlsZHJlbn08L2c+LFxufSkpO1xuXG5sZXQgdGhlbWU7XG5cbmJlZm9yZUFsbCgoKSA9PiB7XG4gIHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbn0pO1xuXG5kZXNjcmliZSgnTGluZVBsb3QnLCAoKSA9PiB7XG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIHhCYW5kOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmFuZHdpZHRoOiAoKSA9PiB7fSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoXG4gICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICA8c3ZnPlxuICAgICAgICAgIDxMaW5lUGxvdCB7Li4ucHJvcHN9IC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9UaGVtZVByb3ZpZGVyPixcbiAgICApO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgbGluZSBwbG90JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBncmFwaFByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGdyYXBoUHJvcHM6IHVuZGVmaW5lZCB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggZGF0YSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBbXG4gICAgICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnQScgfSxcbiAgICAgICAgeyB2YWx1ZTogMiwgbGFiZWw6ICdCJyB9LFxuICAgICAgICB7IHZhbHVlOiAzLCBsYWJlbDogJ0MnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGRhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGVtcHR5IGRhdGEgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YTogW10gfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG51bGwgZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBkYXRhOiBudWxsIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCB1bmRlZmluZWQgZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBkYXRhOiB1bmRlZmluZWQgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGN1c3RvbSBjbGFzc05hbWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgY2xhc3NOYW1lOiAnY3VzdG9tLWxpbmUtcGxvdCcgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG9uQ2hhbmdlIGhhbmRsZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBvbkNoYW5nZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGluIGRlZmluZUNoYXJ0IG1vZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGVmaW5lQ2hhcnQ6IHRydWUgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGNvcnJlY3REYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IFt7IHZhbHVlOiAyLCBsYWJlbDogJ0EnIH1dO1xuICAgICAgY29uc3QgY29ycmVjdERhdGEgPSBbeyB2YWx1ZTogMywgbGFiZWw6ICdBJyB9XTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBkYXRhLCBjb3JyZWN0RGF0YSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dyYXBoUHJvcHMgaGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2hhbmRsZXMgZ3JhcGhQcm9wcyB3aXRoIG1pc3Npbmcgc2NhbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGdyYXBoUHJvcHMoKTtcbiAgICAgIGRlbGV0ZSBwcm9wcy5zY2FsZTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBncmFwaFByb3BzOiBwcm9wcyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGdyYXBoUHJvcHMgd2l0aCBtaXNzaW5nIHNpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGdyYXBoUHJvcHMoKTtcbiAgICAgIGRlbGV0ZSBwcm9wcy5zaXplO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGdyYXBoUHJvcHM6IHByb3BzIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgZ3JhcGhQcm9wcyB3aXRoIGVtcHR5IHNjYWxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0gZ3JhcGhQcm9wcygpO1xuICAgICAgcHJvcHMuc2NhbGUgPSB7fTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBncmFwaFByb3BzOiBwcm9wcyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGdyYXBoUHJvcHMgd2l0aCBlbXB0eSBzaXplIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0gZ3JhcGhQcm9wcygpO1xuICAgICAgcHJvcHMuc2l6ZSA9IHt9O1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGdyYXBoUHJvcHM6IHByb3BzIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGF0YSB2YXJpYXRpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggc2luZ2xlIGRhdGEgcG9pbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDEsIGxhYmVsOiAnQScgfV07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbXVsdGlwbGUgZGF0YSBwb2ludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gW1xuICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0EnIH0sXG4gICAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQicgfSxcbiAgICAgICAgeyB2YWx1ZTogMywgbGFiZWw6ICdDJyB9LFxuICAgICAgICB7IHZhbHVlOiA0LCBsYWJlbDogJ0QnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGRhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIHplcm8gdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IFtcbiAgICAgICAgeyB2YWx1ZTogMCwgbGFiZWw6ICdBJyB9LFxuICAgICAgICB7IHZhbHVlOiAwLCBsYWJlbDogJ0InIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGRhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG1peGVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBbXG4gICAgICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnQScgfSxcbiAgICAgICAgeyB2YWx1ZTogNSwgbGFiZWw6ICdCJyB9LFxuICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0MnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGRhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGxhcmdlIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBbXG4gICAgICAgIHsgdmFsdWU6IDEwMCwgbGFiZWw6ICdBJyB9LFxuICAgICAgICB7IHZhbHVlOiAyMDAsIGxhYmVsOiAnQicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY29ycmVjdG5lc3MgZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBbXG4gICAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQScsIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnQ29ycmVjdCcgfSB9LFxuICAgICAgICB7IHZhbHVlOiAzLCBsYWJlbDogJ0InLCBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ0NvcnJlY3QnIH0gfSxcbiAgICAgIF07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggaW5jb3JyZWN0IGNvcnJlY3RuZXNzIGFuZCBjb3JyZWN0RGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBbXG4gICAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQScsIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdJbmNvcnJlY3QnIH0gfSxcbiAgICAgICAgeyB2YWx1ZTogMywgbGFiZWw6ICdCJywgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ0luY29ycmVjdCcgfSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvcnJlY3REYXRhID0gW1xuICAgICAgICB7IHZhbHVlOiAzLCBsYWJlbDogJ0EnIH0sXG4gICAgICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnQicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YSwgY29ycmVjdERhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGludGVyYWN0aXZlIGRhdGEgcG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IFtcbiAgICAgICAgeyB2YWx1ZTogMiwgbGFiZWw6ICdBJywgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyB2YWx1ZTogMywgbGFiZWw6ICdCJywgaW50ZXJhY3RpdmU6IGZhbHNlIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IGRhdGEgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYWxsYmFja3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBvbkNoYW5nZSBoYW5kbGVyIHRvIFBsb3QgY29tcG9uZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDEsIGxhYmVsOiAnQScgfV07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZGF0YSwgb25DaGFuZ2UgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBvbkNoYW5nZUNhdGVnb3J5IGNhbGxiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2VDYXRlZ29yeSA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBbeyB2YWx1ZTogMSwgbGFiZWw6ICdBJyB9XTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBkYXRhLCBvbkNoYW5nZUNhdGVnb3J5IH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgY2hhcnQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hhcnQgPSBMaW5lKCk7XG5cbiAgICAgIGV4cGVjdChjaGFydCkudG9FcXVhbCh7XG4gICAgICAgIHR5cGU6ICdsaW5lUGxvdCcsXG4gICAgICAgIENvbXBvbmVudDogTGluZVBsb3QsXG4gICAgICAgIG5hbWU6ICdMaW5lIFBsb3QnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBvYmplY3Qgd2l0aCBDb21wb25lbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFydCA9IExpbmUoKTtcbiAgICAgIGNvbnN0IHsgQ29tcG9uZW50IH0gPSBjaGFydDtcblxuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q29tcG9uZW50IGdyYXBoUHJvcHM9e2dyYXBoUHJvcHMoKX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQ3VzdG9tQmFyRWxlbWVudCAoTGluZSknLCAoKSA9PiB7XG4gIGNvbnN0IHJlbmRlckxpbmVQbG90ID0gKHByb3BzKSA9PlxuICAgIHJlbmRlcihcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgIDxzdmc+XG4gICAgICAgICAgPExpbmVQbG90IHsuLi5wcm9wc30gLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+LFxuICAgICk7XG5cbiAgaXQoJ3JlbmRlcnMgbGluZSBlbGVtZW50cycsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDEsIGxhYmVsOiAnQScgfV07XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxpbmVQbG90KHtcbiAgICAgIGRhdGEsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgd2l0aCBkb3R0ZWRPdmVybGluZSBwcm9wJywgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBbeyB2YWx1ZTogMiwgbGFiZWw6ICdBJywgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnIH0gfV07XG4gICAgY29uc3QgY29ycmVjdERhdGEgPSBbeyB2YWx1ZTogMywgbGFiZWw6ICdBJyB9XTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTGluZVBsb3Qoe1xuICAgICAgZGF0YSxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIGNvcnJlY3REYXRhLFxuICAgIH0pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdpdGhvdXQgZG90dGVkT3ZlcmxpbmUgcHJvcCcsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDIsIGxhYmVsOiAnQScgfV07XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxpbmVQbG90KHtcbiAgICAgIGRhdGEsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgdHdvIExpbmVQYXRoIGVsZW1lbnRzIGZvciBYIHNoYXBlIHdoZW4gbm90IGRvdHRlZCcsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDMsIGxhYmVsOiAnQScgfV07XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxpbmVQbG90KHtcbiAgICAgIGRhdGEsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgcmVjdCB3aXRoIGRhc2hlZCBzdHJva2Ugd2hlbiBkb3R0ZWRPdmVybGluZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBbeyB2YWx1ZTogMiwgbGFiZWw6ICdBJywgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnIH0gfV07XG4gICAgY29uc3QgY29ycmVjdERhdGEgPSBbeyB2YWx1ZTogMywgbGFiZWw6ICdBJyB9XTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTGluZVBsb3Qoe1xuICAgICAgZGF0YSxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIGNvcnJlY3REYXRhLFxuICAgIH0pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdjYWxjdWxhdGVzIGNvcnJlY3QgbGluZSBwb3NpdGlvbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IFt7IHZhbHVlOiAyLCBsYWJlbDogJ0EnIH1dO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJMaW5lUGxvdCh7XG4gICAgICBkYXRhLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIH0pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdoYW5kbGVzIHplcm8gcG9pbnREaWFtZXRlcicsICgpID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IGdyYXBoUHJvcHMoKTtcbiAgICBwcm9wcy5zaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3QgZGF0YSA9IFt7IHZhbHVlOiAxLCBsYWJlbDogJ0EnIH1dO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJMaW5lUGxvdCh7XG4gICAgICBkYXRhLFxuICAgICAgZ3JhcGhQcm9wczogcHJvcHMsXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgbGFyZ2UgcG9pbnREaWFtZXRlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSBncmFwaFByb3BzKCk7XG4gICAgcHJvcHMuc2l6ZSA9IHsgd2lkdGg6IDEwMDAsIGhlaWdodDogMTAwMCB9O1xuICAgIGNvbnN0IGRhdGEgPSBbeyB2YWx1ZTogMSwgbGFiZWw6ICdBJyB9XTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTGluZVBsb3Qoe1xuICAgICAgZGF0YSxcbiAgICAgIGdyYXBoUHJvcHM6IHByb3BzLFxuICAgIH0pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGNvcnJlY3Qgc3Ryb2tlV2lkdGggYmFzZWQgb24gcG9pbnREaWFtZXRlcicsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDIsIGxhYmVsOiAnQScgfV07XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxpbmVQbG90KHtcbiAgICAgIGRhdGEsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfSk7XG4gICAgLy8gc3Ryb2tlV2lkdGggc2hvdWxkIGJlIHBvaW50RGlhbWV0ZXIgLyA1XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgR3JvdXAgY29tcG9uZW50IHdyYXBwaW5nIExpbmVQYXRocycsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gW3sgdmFsdWU6IDEsIGxhYmVsOiAnQScgfV07XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckxpbmVQbG90KHtcbiAgICAgIGRhdGEsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgcmVjdCB3aXRoIGV4dHJhIHBhZGRpbmcgd2hlbiBkb3R0ZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IFt7IHZhbHVlOiAyLCBsYWJlbDogJ0EnLCBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcgfSB9XTtcbiAgICBjb25zdCBjb3JyZWN0RGF0YSA9IFt7IHZhbHVlOiAzLCBsYWJlbDogJ0EnIH1dO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJMaW5lUGxvdCh7XG4gICAgICBkYXRhLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgICAgY29ycmVjdERhdGEsXG4gICAgfSk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUFxQyxJQUFBTSxTQUFBO0FBQUEsU0FBQUYsd0JBQUFHLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFMLHVCQUFBLFlBQUFBLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFB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