@pie-element/explicit-constructed-response 9.3.2-tip-tap.11 → 9.3.2-tip-tap.12

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.
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
6
+
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+
9
+ var _enzyme = require("enzyme");
10
+
11
+ var _react = _interopRequireDefault(require("react"));
12
+
13
+ var _alternateSection = require("../alternateSection");
14
+
15
+ 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; }
16
+
17
+ 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; }
18
+
19
+ var choices = [{
20
+ label: 'cow',
21
+ value: '0'
22
+ }, {
23
+ label: 'cattle',
24
+ value: '1'
25
+ }, {
26
+ label: 'calf',
27
+ value: '2'
28
+ }];
29
+ describe('Choice', function () {
30
+ var onChange = jest.fn();
31
+ var onDelete = jest.fn();
32
+
33
+ var wrapper = function wrapper() {
34
+ var defaults = {
35
+ classes: {},
36
+ key: '0',
37
+ markup: 'cow',
38
+ onChange: onChange,
39
+ onDelete: onDelete
40
+ };
41
+
42
+ var props = _objectSpread({}, defaults);
43
+
44
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_alternateSection.Choice, props));
45
+ };
46
+
47
+ describe('snapshot', function () {
48
+ it('renders', function () {
49
+ expect(wrapper()).toMatchSnapshot();
50
+ });
51
+ });
52
+ describe('logic', function () {
53
+ it('calls onChange', function () {
54
+ var w = wrapper();
55
+ w.instance().onChange({
56
+ target: {
57
+ value: 'TEST'
58
+ }
59
+ });
60
+ setTimeout(function () {
61
+ expect(onChange).toHaveBeenCalledWith('TEST');
62
+ }, 400);
63
+ });
64
+ });
65
+ });
66
+ describe('AlternateSection', function () {
67
+ var onSelect = jest.fn();
68
+ var choiceChanged = jest.fn();
69
+ var choiceRemoved = jest.fn();
70
+ var lengthChanged = jest.fn();
71
+
72
+ var wrapper = function wrapper() {
73
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
74
+
75
+ var defaults = _objectSpread({
76
+ classes: {},
77
+ key: '0',
78
+ value: 'cow',
79
+ onSelect: onSelect,
80
+ choiceChanged: choiceChanged,
81
+ choiceRemoved: choiceRemoved,
82
+ lengthChanged: lengthChanged,
83
+ selectChoices: [{
84
+ label: 'moon',
85
+ value: '2'
86
+ }],
87
+ choices: choices,
88
+ maxLength: 10
89
+ }, extras);
90
+
91
+ var props = _objectSpread({}, defaults);
92
+
93
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_alternateSection.AlternateSection, props));
94
+ };
95
+
96
+ describe('snapshot', function () {
97
+ it('renders', function () {
98
+ expect(wrapper()).toMatchSnapshot();
99
+ });
100
+ });
101
+ describe('logic', function () {
102
+ var w;
103
+ beforeEach(function () {
104
+ w = wrapper();
105
+ });
106
+ describe('updateChoicesIfNeeded', function () {
107
+ it('does not set state', function () {
108
+ w.instance().updateChoicesIfNeeded({
109
+ choices: choices
110
+ });
111
+ expect(w.instance().state).toEqual(expect.objectContaining({
112
+ choices: choices
113
+ }));
114
+ });
115
+ it('sets state, updates edited choice', function () {
116
+ var newChoices = [{
117
+ label: 'cow',
118
+ value: '0'
119
+ }, {
120
+ label: 'cattle',
121
+ value: '1'
122
+ }, {
123
+ label: 'little calf',
124
+ value: '2'
125
+ }];
126
+ w.instance().updateChoicesIfNeeded({
127
+ choices: newChoices
128
+ });
129
+ expect(w.instance().state).toEqual(expect.objectContaining({
130
+ choices: newChoices
131
+ }));
132
+ });
133
+ it('sets state, updates adding new choice', function () {
134
+ var newChoices = [{
135
+ label: 'cow',
136
+ value: '0'
137
+ }, {
138
+ label: 'cattle',
139
+ value: '1'
140
+ }, {
141
+ label: 'little calf',
142
+ value: '2'
143
+ }];
144
+ w.instance().updateChoicesIfNeeded({
145
+ choices: newChoices
146
+ });
147
+ expect(w.instance().state).toEqual(expect.objectContaining({
148
+ choices: newChoices
149
+ }));
150
+ });
151
+ it('sets state, updates removing choice', function () {
152
+ var newChoices = [{
153
+ label: 'cow',
154
+ value: '0'
155
+ }, {
156
+ label: 'cattle',
157
+ value: '1'
158
+ }];
159
+ w.instance().updateChoicesIfNeeded({
160
+ choices: newChoices
161
+ });
162
+ expect(w.instance().state).toEqual(expect.objectContaining({
163
+ choices: newChoices
164
+ }));
165
+ });
166
+ });
167
+ describe('handleSelect', function () {
168
+ it('calls onSelect', function () {
169
+ w.instance().handleSelect({
170
+ target: {
171
+ value: '2'
172
+ }
173
+ });
174
+ expect(onSelect).toBeCalledWith({
175
+ label: 'moon',
176
+ value: '2'
177
+ });
178
+ });
179
+ });
180
+ describe('onAddChoice', function () {
181
+ it('adds choice', function () {
182
+ var state = w.instance().state;
183
+ w.instance().onAddChoice();
184
+ expect(w.instance().state.choices).toEqual([].concat((0, _toConsumableArray2["default"])(state.choices), [{
185
+ value: '3',
186
+ label: ''
187
+ }]));
188
+ });
189
+ it('does not add choice if previously added choice is empty', function () {
190
+ var state = w.instance().state;
191
+ w.instance().onAddChoice();
192
+ state.choices.push({
193
+ value: '3',
194
+ label: ''
195
+ });
196
+ expect(w.instance().state.choices).toEqual(state.choices);
197
+ w.instance().onAddChoice();
198
+ expect(w.instance().state.choices).toEqual(state.choices);
199
+ });
200
+ });
201
+ describe('onChoiceChanged', function () {
202
+ beforeEach(function () {
203
+ choiceChanged.mockClear();
204
+ lengthChanged.mockClear();
205
+ });
206
+ it('calls choiceChanged', function () {
207
+ w.instance().onChoiceChanged({
208
+ value: '0',
209
+ label: 'cow'
210
+ }, 'New value');
211
+ expect(choiceChanged).toBeCalledWith({
212
+ value: '0',
213
+ label: 'New value'
214
+ });
215
+ });
216
+ it('calls lengthChanged when new max length is greater than current maxLength', function () {
217
+ // ['cow', 'cattle', 'calf'] - max length is 6 (cattle)
218
+ // maxLength prop is 10, so we need something longer than 10
219
+ var longChoice = 'Very long choice text'; // 21 characters
220
+
221
+ w.instance().onChoiceChanged({
222
+ value: '0',
223
+ label: 'cow'
224
+ }, longChoice, 0); // 21 + 5 = 26
225
+
226
+ expect(lengthChanged).toHaveBeenCalledWith(26);
227
+ });
228
+ it('calls lengthChanged when new max length is significantly smaller', function () {
229
+ var wrapperWithHighMaxLength = wrapper({
230
+ maxLength: 30
231
+ }); // ['cow', 'cattle', 'calf'] - max length is 6
232
+
233
+ wrapperWithHighMaxLength.instance().onChoiceChanged({
234
+ value: '1',
235
+ label: 'cattle'
236
+ }, 'a', 1); // max length will be 4 (max of 'cow', 'a', 'calf')
237
+ // Since 4 + 10 = 14 <= 30, this should trigger lengthChanged
238
+
239
+ expect(lengthChanged).toHaveBeenCalledWith(7); // getAdjustedLength(4) = 4 + 3 = 7
240
+ });
241
+ it('does not call lengthChanged when new max length is within threshold', function () {
242
+ // ['cow', 'cattle', 'calf'] - max length is 6
243
+ // maxLength is 10, change to something that keeps max around the same
244
+ w.instance().onChoiceChanged({
245
+ value: '0',
246
+ label: 'cow'
247
+ }, 'bull', 0); // max length will still be 6 (cattle), which is not > 10 and not <= 0 (10-10)
248
+
249
+ expect(lengthChanged).not.toHaveBeenCalled();
250
+ });
251
+ it('calculates max length across all choices correctly', function () {
252
+ var shortChoices = [{
253
+ label: 'a',
254
+ value: '0'
255
+ }, {
256
+ label: 'bb',
257
+ value: '1'
258
+ }, {
259
+ label: 'ccc',
260
+ value: '2'
261
+ }];
262
+ var wrapperWithShortChoices = wrapper({
263
+ choices: shortChoices,
264
+ maxLength: 5
265
+ });
266
+ wrapperWithShortChoices.instance().onChoiceChanged({
267
+ value: '2',
268
+ label: 'ccc'
269
+ }, 'This is much longer', 2);
270
+ expect(lengthChanged).toHaveBeenCalledWith(24);
271
+ });
272
+ it('handles mixed special characters correctly', function () {
273
+ lengthChanged.mockClear();
274
+ var mixedSpecialChoice = 'Test with & < > " \' symbols'; // 27 chars when decoded
275
+
276
+ var wrapperWithLowMax = wrapper({
277
+ maxLength: 5
278
+ });
279
+ wrapperWithLowMax.instance().onChoiceChanged({
280
+ value: '0',
281
+ label: 'cow'
282
+ }, mixedSpecialChoice, 0); // 27 normal characters + 5 buffer = 32
283
+
284
+ expect(lengthChanged).toHaveBeenCalledWith(32);
285
+ });
286
+ });
287
+ });
288
+ });
289
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vYWx0ZXJuYXRlU2VjdGlvbi50ZXN0LmpzeCJdLCJuYW1lcyI6WyJjaG9pY2VzIiwibGFiZWwiLCJ2YWx1ZSIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJvbkRlbGV0ZSIsIndyYXBwZXIiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJrZXkiLCJtYXJrdXAiLCJwcm9wcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidyIsImluc3RhbmNlIiwidGFyZ2V0Iiwic2V0VGltZW91dCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwib25TZWxlY3QiLCJjaG9pY2VDaGFuZ2VkIiwiY2hvaWNlUmVtb3ZlZCIsImxlbmd0aENoYW5nZWQiLCJleHRyYXMiLCJzZWxlY3RDaG9pY2VzIiwibWF4TGVuZ3RoIiwiYmVmb3JlRWFjaCIsInVwZGF0ZUNob2ljZXNJZk5lZWRlZCIsInN0YXRlIiwidG9FcXVhbCIsIm9iamVjdENvbnRhaW5pbmciLCJuZXdDaG9pY2VzIiwiaGFuZGxlU2VsZWN0IiwidG9CZUNhbGxlZFdpdGgiLCJvbkFkZENob2ljZSIsInB1c2giLCJtb2NrQ2xlYXIiLCJvbkNob2ljZUNoYW5nZWQiLCJsb25nQ2hvaWNlIiwid3JhcHBlcldpdGhIaWdoTWF4TGVuZ3RoIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsInNob3J0Q2hvaWNlcyIsIndyYXBwZXJXaXRoU2hvcnRDaG9pY2VzIiwibWl4ZWRTcGVjaWFsQ2hvaWNlIiwid3JhcHBlcldpdGhMb3dNYXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBLElBQU1BLE9BQU8sR0FBRyxDQUNkO0FBQUVDLEVBQUFBLEtBQUssRUFBRSxLQUFUO0FBQWdCQyxFQUFBQSxLQUFLLEVBQUU7QUFBdkIsQ0FEYyxFQUVkO0FBQUVELEVBQUFBLEtBQUssRUFBRSxRQUFUO0FBQW1CQyxFQUFBQSxLQUFLLEVBQUU7QUFBMUIsQ0FGYyxFQUdkO0FBQUVELEVBQUFBLEtBQUssRUFBRSxNQUFUO0FBQWlCQyxFQUFBQSxLQUFLLEVBQUU7QUFBeEIsQ0FIYyxDQUFoQjtBQU1BQyxRQUFRLENBQUMsUUFBRCxFQUFXLFlBQU07QUFDdkIsTUFBSUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUwsRUFBZjtBQUNBLE1BQUlDLFFBQVEsR0FBR0YsSUFBSSxDQUFDQyxFQUFMLEVBQWY7O0FBRUEsTUFBTUUsT0FBTyxHQUFHLFNBQVZBLE9BQVUsR0FBTTtBQUNwQixRQUFNQyxRQUFRLEdBQUc7QUFDZkMsTUFBQUEsT0FBTyxFQUFFLEVBRE07QUFFZkMsTUFBQUEsR0FBRyxFQUFFLEdBRlU7QUFHZkMsTUFBQUEsTUFBTSxFQUFFLEtBSE87QUFJZlIsTUFBQUEsUUFBUSxFQUFSQSxRQUplO0FBS2ZHLE1BQUFBLFFBQVEsRUFBUkE7QUFMZSxLQUFqQjs7QUFPQSxRQUFNTSxLQUFLLHFCQUFRSixRQUFSLENBQVg7O0FBRUEsV0FBTyxtQ0FBUSxnQ0FBQyx3QkFBRCxFQUFZSSxLQUFaLENBQVIsQ0FBUDtBQUNELEdBWEQ7O0FBYUFWLEVBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QlcsSUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCQyxNQUFBQSxNQUFNLENBQUNQLE9BQU8sRUFBUixDQUFOLENBQWtCUSxlQUFsQjtBQUNELEtBRkMsQ0FBRjtBQUdELEdBSk8sQ0FBUjtBQU1BYixFQUFBQSxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQU07QUFDdEJXLElBQUFBLEVBQUUsQ0FBQyxnQkFBRCxFQUFtQixZQUFNO0FBQ3pCLFVBQU1HLENBQUMsR0FBR1QsT0FBTyxFQUFqQjtBQUVBUyxNQUFBQSxDQUFDLENBQUNDLFFBQUYsR0FBYWQsUUFBYixDQUFzQjtBQUFFZSxRQUFBQSxNQUFNLEVBQUU7QUFBRWpCLFVBQUFBLEtBQUssRUFBRTtBQUFUO0FBQVYsT0FBdEI7QUFFQWtCLE1BQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2ZMLFFBQUFBLE1BQU0sQ0FBQ1gsUUFBRCxDQUFOLENBQWlCaUIsb0JBQWpCLENBQXNDLE1BQXRDO0FBQ0QsT0FGUyxFQUVQLEdBRk8sQ0FBVjtBQUdELEtBUkMsQ0FBRjtBQVNELEdBVk8sQ0FBUjtBQVdELENBbENPLENBQVI7QUFvQ0FsQixRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBTTtBQUNqQyxNQUFJbUIsUUFBUSxHQUFHakIsSUFBSSxDQUFDQyxFQUFMLEVBQWY7QUFDQSxNQUFJaUIsYUFBYSxHQUFHbEIsSUFBSSxDQUFDQyxFQUFMLEVBQXBCO0FBQ0EsTUFBSWtCLGFBQWEsR0FBR25CLElBQUksQ0FBQ0MsRUFBTCxFQUFwQjtBQUNBLE1BQUltQixhQUFhLEdBQUdwQixJQUFJLENBQUNDLEVBQUwsRUFBcEI7O0FBRUEsTUFBTUUsT0FBTyxHQUFHLFNBQVZBLE9BQVUsR0FBaUI7QUFBQSxRQUFoQmtCLE1BQWdCLHVFQUFQLEVBQU87O0FBQy9CLFFBQU1qQixRQUFRO0FBQ1pDLE1BQUFBLE9BQU8sRUFBRSxFQURHO0FBRVpDLE1BQUFBLEdBQUcsRUFBRSxHQUZPO0FBR1pULE1BQUFBLEtBQUssRUFBRSxLQUhLO0FBSVpvQixNQUFBQSxRQUFRLEVBQVJBLFFBSlk7QUFLWkMsTUFBQUEsYUFBYSxFQUFiQSxhQUxZO0FBTVpDLE1BQUFBLGFBQWEsRUFBYkEsYUFOWTtBQU9aQyxNQUFBQSxhQUFhLEVBQWJBLGFBUFk7QUFRWkUsTUFBQUEsYUFBYSxFQUFFLENBQUM7QUFBRTFCLFFBQUFBLEtBQUssRUFBRSxNQUFUO0FBQWlCQyxRQUFBQSxLQUFLLEVBQUU7QUFBeEIsT0FBRCxDQVJIO0FBU1pGLE1BQUFBLE9BQU8sRUFBUEEsT0FUWTtBQVVaNEIsTUFBQUEsU0FBUyxFQUFFO0FBVkMsT0FXVEYsTUFYUyxDQUFkOztBQWFBLFFBQU1iLEtBQUsscUJBQVFKLFFBQVIsQ0FBWDs7QUFFQSxXQUFPLG1DQUFRLGdDQUFDLGtDQUFELEVBQXNCSSxLQUF0QixDQUFSLENBQVA7QUFDRCxHQWpCRDs7QUFtQkFWLEVBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QlcsSUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCQyxNQUFBQSxNQUFNLENBQUNQLE9BQU8sRUFBUixDQUFOLENBQWtCUSxlQUFsQjtBQUNELEtBRkMsQ0FBRjtBQUdELEdBSk8sQ0FBUjtBQU1BYixFQUFBQSxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQU07QUFDdEIsUUFBSWMsQ0FBSjtBQUVBWSxJQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmWixNQUFBQSxDQUFDLEdBQUdULE9BQU8sRUFBWDtBQUNELEtBRlMsQ0FBVjtBQUlBTCxJQUFBQSxRQUFRLENBQUMsdUJBQUQsRUFBMEIsWUFBTTtBQUN0Q1csTUFBQUEsRUFBRSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDN0JHLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhWSxxQkFBYixDQUFtQztBQUFFOUIsVUFBQUEsT0FBTyxFQUFQQTtBQUFGLFNBQW5DO0FBRUFlLFFBQUFBLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDQyxRQUFGLEdBQWFhLEtBQWQsQ0FBTixDQUEyQkMsT0FBM0IsQ0FBbUNqQixNQUFNLENBQUNrQixnQkFBUCxDQUF3QjtBQUFFakMsVUFBQUEsT0FBTyxFQUFQQTtBQUFGLFNBQXhCLENBQW5DO0FBQ0QsT0FKQyxDQUFGO0FBTUFjLE1BQUFBLEVBQUUsQ0FBQyxtQ0FBRCxFQUFzQyxZQUFNO0FBQzVDLFlBQU1vQixVQUFVLEdBQUcsQ0FDakI7QUFBRWpDLFVBQUFBLEtBQUssRUFBRSxLQUFUO0FBQWdCQyxVQUFBQSxLQUFLLEVBQUU7QUFBdkIsU0FEaUIsRUFFakI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLFFBQVQ7QUFBbUJDLFVBQUFBLEtBQUssRUFBRTtBQUExQixTQUZpQixFQUdqQjtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsYUFBVDtBQUF3QkMsVUFBQUEsS0FBSyxFQUFFO0FBQS9CLFNBSGlCLENBQW5CO0FBTUFlLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhWSxxQkFBYixDQUFtQztBQUFFOUIsVUFBQUEsT0FBTyxFQUFFa0M7QUFBWCxTQUFuQztBQUVBbkIsUUFBQUEsTUFBTSxDQUFDRSxDQUFDLENBQUNDLFFBQUYsR0FBYWEsS0FBZCxDQUFOLENBQTJCQyxPQUEzQixDQUNFakIsTUFBTSxDQUFDa0IsZ0JBQVAsQ0FBd0I7QUFDdEJqQyxVQUFBQSxPQUFPLEVBQUVrQztBQURhLFNBQXhCLENBREY7QUFLRCxPQWRDLENBQUY7QUFnQkFwQixNQUFBQSxFQUFFLENBQUMsdUNBQUQsRUFBMEMsWUFBTTtBQUNoRCxZQUFNb0IsVUFBVSxHQUFHLENBQ2pCO0FBQUVqQyxVQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkMsVUFBQUEsS0FBSyxFQUFFO0FBQXZCLFNBRGlCLEVBRWpCO0FBQUVELFVBQUFBLEtBQUssRUFBRSxRQUFUO0FBQW1CQyxVQUFBQSxLQUFLLEVBQUU7QUFBMUIsU0FGaUIsRUFHakI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGFBQVQ7QUFBd0JDLFVBQUFBLEtBQUssRUFBRTtBQUEvQixTQUhpQixDQUFuQjtBQU1BZSxRQUFBQSxDQUFDLENBQUNDLFFBQUYsR0FBYVkscUJBQWIsQ0FBbUM7QUFBRTlCLFVBQUFBLE9BQU8sRUFBRWtDO0FBQVgsU0FBbkM7QUFFQW5CLFFBQUFBLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDQyxRQUFGLEdBQWFhLEtBQWQsQ0FBTixDQUEyQkMsT0FBM0IsQ0FDRWpCLE1BQU0sQ0FBQ2tCLGdCQUFQLENBQXdCO0FBQ3RCakMsVUFBQUEsT0FBTyxFQUFFa0M7QUFEYSxTQUF4QixDQURGO0FBS0QsT0FkQyxDQUFGO0FBZ0JBcEIsTUFBQUEsRUFBRSxDQUFDLHFDQUFELEVBQXdDLFlBQU07QUFDOUMsWUFBTW9CLFVBQVUsR0FBRyxDQUNqQjtBQUFFakMsVUFBQUEsS0FBSyxFQUFFLEtBQVQ7QUFBZ0JDLFVBQUFBLEtBQUssRUFBRTtBQUF2QixTQURpQixFQUVqQjtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsUUFBVDtBQUFtQkMsVUFBQUEsS0FBSyxFQUFFO0FBQTFCLFNBRmlCLENBQW5CO0FBS0FlLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhWSxxQkFBYixDQUFtQztBQUFFOUIsVUFBQUEsT0FBTyxFQUFFa0M7QUFBWCxTQUFuQztBQUVBbkIsUUFBQUEsTUFBTSxDQUFDRSxDQUFDLENBQUNDLFFBQUYsR0FBYWEsS0FBZCxDQUFOLENBQTJCQyxPQUEzQixDQUNFakIsTUFBTSxDQUFDa0IsZ0JBQVAsQ0FBd0I7QUFDdEJqQyxVQUFBQSxPQUFPLEVBQUVrQztBQURhLFNBQXhCLENBREY7QUFLRCxPQWJDLENBQUY7QUFjRCxLQXJETyxDQUFSO0FBdURBL0IsSUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBTTtBQUM3QlcsTUFBQUEsRUFBRSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDekJHLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhaUIsWUFBYixDQUEwQjtBQUFFaEIsVUFBQUEsTUFBTSxFQUFFO0FBQUVqQixZQUFBQSxLQUFLLEVBQUU7QUFBVDtBQUFWLFNBQTFCO0FBRUFhLFFBQUFBLE1BQU0sQ0FBQ08sUUFBRCxDQUFOLENBQWlCYyxjQUFqQixDQUFnQztBQUFFbkMsVUFBQUEsS0FBSyxFQUFFLE1BQVQ7QUFBaUJDLFVBQUFBLEtBQUssRUFBRTtBQUF4QixTQUFoQztBQUNELE9BSkMsQ0FBRjtBQUtELEtBTk8sQ0FBUjtBQVFBQyxJQUFBQSxRQUFRLENBQUMsYUFBRCxFQUFnQixZQUFNO0FBQzVCVyxNQUFBQSxFQUFFLENBQUMsYUFBRCxFQUFnQixZQUFNO0FBQ3RCLFlBQU1pQixLQUFLLEdBQUdkLENBQUMsQ0FBQ0MsUUFBRixHQUFhYSxLQUEzQjtBQUVBZCxRQUFBQSxDQUFDLENBQUNDLFFBQUYsR0FBYW1CLFdBQWI7QUFFQXRCLFFBQUFBLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDQyxRQUFGLEdBQWFhLEtBQWIsQ0FBbUIvQixPQUFwQixDQUFOLENBQW1DZ0MsT0FBbkMsK0NBQStDRCxLQUFLLENBQUMvQixPQUFyRCxJQUE4RDtBQUFFRSxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBOUQ7QUFDRCxPQU5DLENBQUY7QUFRQWEsTUFBQUEsRUFBRSxDQUFDLHlEQUFELEVBQTRELFlBQU07QUFDbEUsWUFBTWlCLEtBQUssR0FBR2QsQ0FBQyxDQUFDQyxRQUFGLEdBQWFhLEtBQTNCO0FBRUFkLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhbUIsV0FBYjtBQUVBTixRQUFBQSxLQUFLLENBQUMvQixPQUFOLENBQWNzQyxJQUFkLENBQW1CO0FBQUVwQyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBbkI7QUFFQWMsUUFBQUEsTUFBTSxDQUFDRSxDQUFDLENBQUNDLFFBQUYsR0FBYWEsS0FBYixDQUFtQi9CLE9BQXBCLENBQU4sQ0FBbUNnQyxPQUFuQyxDQUEyQ0QsS0FBSyxDQUFDL0IsT0FBakQ7QUFFQWlCLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhbUIsV0FBYjtBQUVBdEIsUUFBQUEsTUFBTSxDQUFDRSxDQUFDLENBQUNDLFFBQUYsR0FBYWEsS0FBYixDQUFtQi9CLE9BQXBCLENBQU4sQ0FBbUNnQyxPQUFuQyxDQUEyQ0QsS0FBSyxDQUFDL0IsT0FBakQ7QUFDRCxPQVpDLENBQUY7QUFhRCxLQXRCTyxDQUFSO0FBd0JBRyxJQUFBQSxRQUFRLENBQUMsaUJBQUQsRUFBb0IsWUFBTTtBQUNoQzBCLE1BQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2ZOLFFBQUFBLGFBQWEsQ0FBQ2dCLFNBQWQ7QUFDQWQsUUFBQUEsYUFBYSxDQUFDYyxTQUFkO0FBQ0QsT0FIUyxDQUFWO0FBS0F6QixNQUFBQSxFQUFFLENBQUMscUJBQUQsRUFBd0IsWUFBTTtBQUM5QkcsUUFBQUEsQ0FBQyxDQUFDQyxRQUFGLEdBQWFzQixlQUFiLENBQTZCO0FBQUV0QyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBN0IsRUFBMkQsV0FBM0Q7QUFFQWMsUUFBQUEsTUFBTSxDQUFDUSxhQUFELENBQU4sQ0FBc0JhLGNBQXRCLENBQXFDO0FBQUVsQyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBckM7QUFDRCxPQUpDLENBQUY7QUFNQWEsTUFBQUEsRUFBRSxDQUFDLDJFQUFELEVBQThFLFlBQU07QUFDcEY7QUFDQTtBQUNBLFlBQU0yQixVQUFVLEdBQUcsdUJBQW5CLENBSG9GLENBR3hDOztBQUU1Q3hCLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhc0IsZUFBYixDQUE2QjtBQUFFdEMsVUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY0QsVUFBQUEsS0FBSyxFQUFFO0FBQXJCLFNBQTdCLEVBQTJEd0MsVUFBM0QsRUFBdUUsQ0FBdkUsRUFMb0YsQ0FPcEY7O0FBQ0ExQixRQUFBQSxNQUFNLENBQUNVLGFBQUQsQ0FBTixDQUFzQkosb0JBQXRCLENBQTJDLEVBQTNDO0FBQ0QsT0FUQyxDQUFGO0FBV0FQLE1BQUFBLEVBQUUsQ0FBQyxrRUFBRCxFQUFxRSxZQUFNO0FBQzNFLFlBQU00Qix3QkFBd0IsR0FBR2xDLE9BQU8sQ0FBQztBQUFFb0IsVUFBQUEsU0FBUyxFQUFFO0FBQWIsU0FBRCxDQUF4QyxDQUQyRSxDQUczRTs7QUFDQWMsUUFBQUEsd0JBQXdCLENBQUN4QixRQUF6QixHQUFvQ3NCLGVBQXBDLENBQW9EO0FBQUV0QyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBcEQsRUFBcUYsR0FBckYsRUFBMEYsQ0FBMUYsRUFKMkUsQ0FNM0U7QUFDQTs7QUFDQWMsUUFBQUEsTUFBTSxDQUFDVSxhQUFELENBQU4sQ0FBc0JKLG9CQUF0QixDQUEyQyxDQUEzQyxFQVIyRSxDQVE1QjtBQUNoRCxPQVRDLENBQUY7QUFXQVAsTUFBQUEsRUFBRSxDQUFDLHFFQUFELEVBQXdFLFlBQU07QUFDOUU7QUFDQTtBQUNBRyxRQUFBQSxDQUFDLENBQUNDLFFBQUYsR0FBYXNCLGVBQWIsQ0FBNkI7QUFBRXRDLFVBQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELFVBQUFBLEtBQUssRUFBRTtBQUFyQixTQUE3QixFQUEyRCxNQUEzRCxFQUFtRSxDQUFuRSxFQUg4RSxDQUs5RTs7QUFDQWMsUUFBQUEsTUFBTSxDQUFDVSxhQUFELENBQU4sQ0FBc0JrQixHQUF0QixDQUEwQkMsZ0JBQTFCO0FBQ0QsT0FQQyxDQUFGO0FBU0E5QixNQUFBQSxFQUFFLENBQUMsb0RBQUQsRUFBdUQsWUFBTTtBQUM3RCxZQUFNK0IsWUFBWSxHQUFHLENBQ25CO0FBQUU1QyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjQyxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FEbUIsRUFFbkI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLElBQVQ7QUFBZUMsVUFBQUEsS0FBSyxFQUFFO0FBQXRCLFNBRm1CLEVBR25CO0FBQUVELFVBQUFBLEtBQUssRUFBRSxLQUFUO0FBQWdCQyxVQUFBQSxLQUFLLEVBQUU7QUFBdkIsU0FIbUIsQ0FBckI7QUFNQSxZQUFNNEMsdUJBQXVCLEdBQUd0QyxPQUFPLENBQUM7QUFDdENSLFVBQUFBLE9BQU8sRUFBRTZDLFlBRDZCO0FBRXRDakIsVUFBQUEsU0FBUyxFQUFFO0FBRjJCLFNBQUQsQ0FBdkM7QUFLQWtCLFFBQUFBLHVCQUF1QixDQUFDNUIsUUFBeEIsR0FBbUNzQixlQUFuQyxDQUNFO0FBQUV0QyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FERixFQUVFLHFCQUZGLEVBR0UsQ0FIRjtBQUtBYyxRQUFBQSxNQUFNLENBQUNVLGFBQUQsQ0FBTixDQUFzQkosb0JBQXRCLENBQTJDLEVBQTNDO0FBQ0QsT0FsQkMsQ0FBRjtBQW9CQVAsTUFBQUEsRUFBRSxDQUFDLDRDQUFELEVBQStDLFlBQU07QUFDckRXLFFBQUFBLGFBQWEsQ0FBQ2MsU0FBZDtBQUNBLFlBQU1RLGtCQUFrQixHQUFHLDhCQUEzQixDQUZxRCxDQUVNOztBQUUzRCxZQUFNQyxpQkFBaUIsR0FBR3hDLE9BQU8sQ0FBQztBQUFFb0IsVUFBQUEsU0FBUyxFQUFFO0FBQWIsU0FBRCxDQUFqQztBQUVBb0IsUUFBQUEsaUJBQWlCLENBQUM5QixRQUFsQixHQUE2QnNCLGVBQTdCLENBQTZDO0FBQUV0QyxVQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxVQUFBQSxLQUFLLEVBQUU7QUFBckIsU0FBN0MsRUFBMkU4QyxrQkFBM0UsRUFBK0YsQ0FBL0YsRUFOcUQsQ0FRckQ7O0FBQ0FoQyxRQUFBQSxNQUFNLENBQUNVLGFBQUQsQ0FBTixDQUFzQkosb0JBQXRCLENBQTJDLEVBQTNDO0FBQ0QsT0FWQyxDQUFGO0FBV0QsS0ExRU8sQ0FBUjtBQTJFRCxHQXpLTyxDQUFSO0FBMEtELENBek1PLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEFsdGVybmF0ZVNlY3Rpb24sIENob2ljZSB9IGZyb20gJy4uL2FsdGVybmF0ZVNlY3Rpb24nO1xuXG5jb25zdCBjaG9pY2VzID0gW1xuICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJyB9LFxuICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbl07XG5cbmRlc2NyaWJlKCdDaG9pY2UnLCAoKSA9PiB7XG4gIGxldCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgbGV0IG9uRGVsZXRlID0gamVzdC5mbigpO1xuXG4gIGNvbnN0IHdyYXBwZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGtleTogJzAnLFxuICAgICAgbWFya3VwOiAnY293JyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25EZWxldGUsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMgfTtcblxuICAgIHJldHVybiBzaGFsbG93KDxDaG9pY2Ugey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHdyYXBwZXIoKSkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuXG4gICAgICB3Lmluc3RhbmNlKCkub25DaGFuZ2UoeyB0YXJnZXQ6IHsgdmFsdWU6ICdURVNUJyB9IH0pO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnVEVTVCcpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0FsdGVybmF0ZVNlY3Rpb24nLCAoKSA9PiB7XG4gIGxldCBvblNlbGVjdCA9IGplc3QuZm4oKTtcbiAgbGV0IGNob2ljZUNoYW5nZWQgPSBqZXN0LmZuKCk7XG4gIGxldCBjaG9pY2VSZW1vdmVkID0gamVzdC5mbigpO1xuICBsZXQgbGVuZ3RoQ2hhbmdlZCA9IGplc3QuZm4oKTtcblxuICBjb25zdCB3cmFwcGVyID0gKGV4dHJhcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGtleTogJzAnLFxuICAgICAgdmFsdWU6ICdjb3cnLFxuICAgICAgb25TZWxlY3QsXG4gICAgICBjaG9pY2VDaGFuZ2VkLFxuICAgICAgY2hvaWNlUmVtb3ZlZCxcbiAgICAgIGxlbmd0aENoYW5nZWQsXG4gICAgICBzZWxlY3RDaG9pY2VzOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzInIH1dLFxuICAgICAgY2hvaWNlcyxcbiAgICAgIG1heExlbmd0aDogMTAsXG4gICAgICAuLi5leHRyYXNcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPEFsdGVybmF0ZVNlY3Rpb24gey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHdyYXBwZXIoKSkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBsZXQgdztcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgdyA9IHdyYXBwZXIoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd1cGRhdGVDaG9pY2VzSWZOZWVkZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnZG9lcyBub3Qgc2V0IHN0YXRlJywgKCkgPT4ge1xuICAgICAgICB3Lmluc3RhbmNlKCkudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHsgY2hvaWNlcyB9KTtcblxuICAgICAgICBleHBlY3Qody5pbnN0YW5jZSgpLnN0YXRlKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgY2hvaWNlcyB9KSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NldHMgc3RhdGUsIHVwZGF0ZXMgZWRpdGVkIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IFtcbiAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ2xpdHRsZSBjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoeyBjaG9pY2VzOiBuZXdDaG9pY2VzIH0pO1xuXG4gICAgICAgIGV4cGVjdCh3Lmluc3RhbmNlKCkuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2V0cyBzdGF0ZSwgdXBkYXRlcyBhZGRpbmcgbmV3IGNob2ljZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IFtcbiAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ2xpdHRsZSBjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoeyBjaG9pY2VzOiBuZXdDaG9pY2VzIH0pO1xuXG4gICAgICAgIGV4cGVjdCh3Lmluc3RhbmNlKCkuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2V0cyBzdGF0ZSwgdXBkYXRlcyByZW1vdmluZyBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0Nob2ljZXMgPSBbXG4gICAgICAgICAgeyBsYWJlbDogJ2NvdycsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJyB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoeyBjaG9pY2VzOiBuZXdDaG9pY2VzIH0pO1xuXG4gICAgICAgIGV4cGVjdCh3Lmluc3RhbmNlKCkuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2hhbmRsZVNlbGVjdCcsICgpID0+IHtcbiAgICAgIGl0KCdjYWxscyBvblNlbGVjdCcsICgpID0+IHtcbiAgICAgICAgdy5pbnN0YW5jZSgpLmhhbmRsZVNlbGVjdCh7IHRhcmdldDogeyB2YWx1ZTogJzInIH0gfSk7XG5cbiAgICAgICAgZXhwZWN0KG9uU2VsZWN0KS50b0JlQ2FsbGVkV2l0aCh7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMicgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbkFkZENob2ljZScsICgpID0+IHtcbiAgICAgIGl0KCdhZGRzIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB3Lmluc3RhbmNlKCkuc3RhdGU7XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQWRkQ2hvaWNlKCk7XG5cbiAgICAgICAgZXhwZWN0KHcuaW5zdGFuY2UoKS5zdGF0ZS5jaG9pY2VzKS50b0VxdWFsKFsuLi5zdGF0ZS5jaG9pY2VzLCB7IHZhbHVlOiAnMycsIGxhYmVsOiAnJyB9XSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IGFkZCBjaG9pY2UgaWYgcHJldmlvdXNseSBhZGRlZCBjaG9pY2UgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdy5pbnN0YW5jZSgpLnN0YXRlO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkFkZENob2ljZSgpO1xuXG4gICAgICAgIHN0YXRlLmNob2ljZXMucHVzaCh7IHZhbHVlOiAnMycsIGxhYmVsOiAnJyB9KTtcblxuICAgICAgICBleHBlY3Qody5pbnN0YW5jZSgpLnN0YXRlLmNob2ljZXMpLnRvRXF1YWwoc3RhdGUuY2hvaWNlcyk7XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQWRkQ2hvaWNlKCk7XG5cbiAgICAgICAgZXhwZWN0KHcuaW5zdGFuY2UoKS5zdGF0ZS5jaG9pY2VzKS50b0VxdWFsKHN0YXRlLmNob2ljZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaG9pY2VDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGNob2ljZUNoYW5nZWQubW9ja0NsZWFyKCk7XG4gICAgICAgIGxlbmd0aENoYW5nZWQubW9ja0NsZWFyKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIGNob2ljZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSwgJ05ldyB2YWx1ZScpO1xuXG4gICAgICAgIGV4cGVjdChjaG9pY2VDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aCh7IHZhbHVlOiAnMCcsIGxhYmVsOiAnTmV3IHZhbHVlJyB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnY2FsbHMgbGVuZ3RoQ2hhbmdlZCB3aGVuIG5ldyBtYXggbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IG1heExlbmd0aCcsICgpID0+IHtcbiAgICAgICAgLy8gWydjb3cnLCAnY2F0dGxlJywgJ2NhbGYnXSAtIG1heCBsZW5ndGggaXMgNiAoY2F0dGxlKVxuICAgICAgICAvLyBtYXhMZW5ndGggcHJvcCBpcyAxMCwgc28gd2UgbmVlZCBzb21ldGhpbmcgbG9uZ2VyIHRoYW4gMTBcbiAgICAgICAgY29uc3QgbG9uZ0Nob2ljZSA9ICdWZXJ5IGxvbmcgY2hvaWNlIHRleHQnOyAvLyAyMSBjaGFyYWN0ZXJzXG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCh7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LCBsb25nQ2hvaWNlLCAwKTtcblxuICAgICAgICAvLyAyMSArIDUgPSAyNlxuICAgICAgICBleHBlY3QobGVuZ3RoQ2hhbmdlZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMjYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBsZW5ndGhDaGFuZ2VkIHdoZW4gbmV3IG1heCBsZW5ndGggaXMgc2lnbmlmaWNhbnRseSBzbWFsbGVyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVyV2l0aEhpZ2hNYXhMZW5ndGggPSB3cmFwcGVyKHsgbWF4TGVuZ3RoOiAzMCB9KTtcblxuICAgICAgICAvLyBbJ2NvdycsICdjYXR0bGUnLCAnY2FsZiddIC0gbWF4IGxlbmd0aCBpcyA2XG4gICAgICAgIHdyYXBwZXJXaXRoSGlnaE1heExlbmd0aC5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCh7IHZhbHVlOiAnMScsIGxhYmVsOiAnY2F0dGxlJyB9LCAnYScsIDEpO1xuXG4gICAgICAgIC8vIG1heCBsZW5ndGggd2lsbCBiZSA0IChtYXggb2YgJ2NvdycsICdhJywgJ2NhbGYnKVxuICAgICAgICAvLyBTaW5jZSA0ICsgMTAgPSAxNCA8PSAzMCwgdGhpcyBzaG91bGQgdHJpZ2dlciBsZW5ndGhDaGFuZ2VkXG4gICAgICAgIGV4cGVjdChsZW5ndGhDaGFuZ2VkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCg3KTsgLy8gZ2V0QWRqdXN0ZWRMZW5ndGgoNCkgPSA0ICsgMyA9IDdcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgY2FsbCBsZW5ndGhDaGFuZ2VkIHdoZW4gbmV3IG1heCBsZW5ndGggaXMgd2l0aGluIHRocmVzaG9sZCcsICgpID0+IHtcbiAgICAgICAgLy8gWydjb3cnLCAnY2F0dGxlJywgJ2NhbGYnXSAtIG1heCBsZW5ndGggaXMgNlxuICAgICAgICAvLyBtYXhMZW5ndGggaXMgMTAsIGNoYW5nZSB0byBzb21ldGhpbmcgdGhhdCBrZWVwcyBtYXggYXJvdW5kIHRoZSBzYW1lXG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSwgJ2J1bGwnLCAwKTtcblxuICAgICAgICAvLyBtYXggbGVuZ3RoIHdpbGwgc3RpbGwgYmUgNiAoY2F0dGxlKSwgd2hpY2ggaXMgbm90ID4gMTAgYW5kIG5vdCA8PSAwICgxMC0xMClcbiAgICAgICAgZXhwZWN0KGxlbmd0aENoYW5nZWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGN1bGF0ZXMgbWF4IGxlbmd0aCBhY3Jvc3MgYWxsIGNob2ljZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaG9ydENob2ljZXMgPSBbXG4gICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ2JiJywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjY2MnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3Qgd3JhcHBlcldpdGhTaG9ydENob2ljZXMgPSB3cmFwcGVyKHtcbiAgICAgICAgICBjaG9pY2VzOiBzaG9ydENob2ljZXMsXG4gICAgICAgICAgbWF4TGVuZ3RoOiA1XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdyYXBwZXJXaXRoU2hvcnRDaG9pY2VzLmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKFxuICAgICAgICAgIHsgdmFsdWU6ICcyJywgbGFiZWw6ICdjY2MnIH0sXG4gICAgICAgICAgJ1RoaXMgaXMgbXVjaCBsb25nZXInLFxuICAgICAgICAgIDJcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KGxlbmd0aENoYW5nZWQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDI0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFuZGxlcyBtaXhlZCBzcGVjaWFsIGNoYXJhY3RlcnMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgICBsZW5ndGhDaGFuZ2VkLm1vY2tDbGVhcigpO1xuICAgICAgICBjb25zdCBtaXhlZFNwZWNpYWxDaG9pY2UgPSAnVGVzdCB3aXRoICYgPCA+IFwiIFxcJyBzeW1ib2xzJzsgLy8gMjcgY2hhcnMgd2hlbiBkZWNvZGVkXG5cbiAgICAgICAgY29uc3Qgd3JhcHBlcldpdGhMb3dNYXggPSB3cmFwcGVyKHsgbWF4TGVuZ3RoOiA1IH0pO1xuXG4gICAgICAgIHdyYXBwZXJXaXRoTG93TWF4Lmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sIG1peGVkU3BlY2lhbENob2ljZSwgMCk7XG5cbiAgICAgICAgLy8gMjcgbm9ybWFsIGNoYXJhY3RlcnMgKyA1IGJ1ZmZlciA9IDMyXG4gICAgICAgIGV4cGVjdChsZW5ndGhDaGFuZ2VkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgzMik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+
7
+ var _enzyme = require("enzyme");
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _ecrToolbar = require("../ecr-toolbar");
12
+
13
+ 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; }
14
+
15
+ 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; }
16
+
17
+ describe('ECRToolbar', function () {
18
+ var onChangeResponse = jest.fn();
19
+ var onToolbarDone = jest.fn();
20
+
21
+ var wrapper = function wrapper() {
22
+ var defaults = {
23
+ onChangeResponse: onChangeResponse,
24
+ onToolbarDone: onToolbarDone,
25
+ classes: {},
26
+ node: {
27
+ key: 1,
28
+ data: {
29
+ get: function get(prop) {
30
+ if (prop === 'index') {
31
+ return '2';
32
+ }
33
+
34
+ return 'moon';
35
+ },
36
+ toJSON: jest.fn()
37
+ }
38
+ },
39
+ value: {
40
+ change: jest.fn().mockReturnValue({
41
+ setNodeByKey: jest.fn().mockReturnValue({
42
+ moveFocusTo: jest.fn().mockReturnValue({
43
+ moveAnchorTo: jest.fn()
44
+ })
45
+ })
46
+ }),
47
+ document: {
48
+ getNextText: jest.fn().mockReturnValue({
49
+ key: 1
50
+ })
51
+ }
52
+ },
53
+ correctChoice: {
54
+ value: '0',
55
+ label: 'moon'
56
+ }
57
+ };
58
+
59
+ var props = _objectSpread({}, defaults);
60
+
61
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_ecrToolbar.ECRToolbar, props));
62
+ };
63
+
64
+ describe('snapshot', function () {
65
+ it('renders', function () {
66
+ expect(wrapper()).toMatchSnapshot();
67
+ });
68
+ });
69
+ describe('logic', function () {
70
+ it('onDone: calls onToolbarDone and onChangeResponse', function () {
71
+ var w = wrapper();
72
+ w.instance().onDone();
73
+ expect(onToolbarDone).toBeCalled();
74
+ expect(onChangeResponse).toBeCalled();
75
+ });
76
+ it('onChange', function () {
77
+ var w = wrapper();
78
+ w.instance().onRespAreaChange('test');
79
+ expect(w.instance().state).toEqual({
80
+ markup: '',
81
+ respAreaMarkup: 'test',
82
+ toolbarStyle: {}
83
+ });
84
+ });
85
+ });
86
+ });
87
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZWNyLXRvb2xiYXIudGVzdC5qc3giXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJvbkNoYW5nZVJlc3BvbnNlIiwiamVzdCIsImZuIiwib25Ub29sYmFyRG9uZSIsIndyYXBwZXIiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJub2RlIiwia2V5IiwiZGF0YSIsImdldCIsInByb3AiLCJ0b0pTT04iLCJ2YWx1ZSIsImNoYW5nZSIsIm1vY2tSZXR1cm5WYWx1ZSIsInNldE5vZGVCeUtleSIsIm1vdmVGb2N1c1RvIiwibW92ZUFuY2hvclRvIiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsImNvcnJlY3RDaG9pY2UiLCJsYWJlbCIsInByb3BzIiwiaXQiLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJ3IiwiaW5zdGFuY2UiLCJvbkRvbmUiLCJ0b0JlQ2FsbGVkIiwib25SZXNwQXJlYUNoYW5nZSIsInN0YXRlIiwidG9FcXVhbCIsIm1hcmt1cCIsInJlc3BBcmVhTWFya3VwIiwidG9vbGJhclN0eWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7Ozs7O0FBRUFBLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBTTtBQUMzQixNQUFJQyxnQkFBZ0IsR0FBR0MsSUFBSSxDQUFDQyxFQUFMLEVBQXZCO0FBQ0EsTUFBSUMsYUFBYSxHQUFHRixJQUFJLENBQUNDLEVBQUwsRUFBcEI7O0FBRUEsTUFBTUUsT0FBTyxHQUFHLFNBQVZBLE9BQVUsR0FBTTtBQUNwQixRQUFNQyxRQUFRLEdBQUc7QUFDZkwsTUFBQUEsZ0JBQWdCLEVBQWhCQSxnQkFEZTtBQUVmRyxNQUFBQSxhQUFhLEVBQWJBLGFBRmU7QUFHZkcsTUFBQUEsT0FBTyxFQUFFLEVBSE07QUFJZkMsTUFBQUEsSUFBSSxFQUFFO0FBQ0pDLFFBQUFBLEdBQUcsRUFBRSxDQUREO0FBRUpDLFFBQUFBLElBQUksRUFBRTtBQUNKQyxVQUFBQSxHQUFHLEVBQUUsYUFBQ0MsSUFBRCxFQUFVO0FBQ2IsZ0JBQUlBLElBQUksS0FBSyxPQUFiLEVBQXNCO0FBQ3BCLHFCQUFPLEdBQVA7QUFDRDs7QUFFRCxtQkFBTyxNQUFQO0FBQ0QsV0FQRztBQVFKQyxVQUFBQSxNQUFNLEVBQUVYLElBQUksQ0FBQ0MsRUFBTDtBQVJKO0FBRkYsT0FKUztBQWlCZlcsTUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFFBQUFBLE1BQU0sRUFBRWIsSUFBSSxDQUFDQyxFQUFMLEdBQVVhLGVBQVYsQ0FBMEI7QUFDaENDLFVBQUFBLFlBQVksRUFBRWYsSUFBSSxDQUFDQyxFQUFMLEdBQVVhLGVBQVYsQ0FBMEI7QUFDdENFLFlBQUFBLFdBQVcsRUFBRWhCLElBQUksQ0FBQ0MsRUFBTCxHQUFVYSxlQUFWLENBQTBCO0FBQ3JDRyxjQUFBQSxZQUFZLEVBQUVqQixJQUFJLENBQUNDLEVBQUw7QUFEdUIsYUFBMUI7QUFEeUIsV0FBMUI7QUFEa0IsU0FBMUIsQ0FESDtBQVFMaUIsUUFBQUEsUUFBUSxFQUFFO0FBQ1JDLFVBQUFBLFdBQVcsRUFBRW5CLElBQUksQ0FBQ0MsRUFBTCxHQUFVYSxlQUFWLENBQTBCO0FBQ3JDUCxZQUFBQSxHQUFHLEVBQUU7QUFEZ0MsV0FBMUI7QUFETDtBQVJMLE9BakJRO0FBK0JmYSxNQUFBQSxhQUFhLEVBQUU7QUFBRVIsUUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY1MsUUFBQUEsS0FBSyxFQUFFO0FBQXJCO0FBL0JBLEtBQWpCOztBQWlDQSxRQUFNQyxLQUFLLHFCQUFRbEIsUUFBUixDQUFYOztBQUVBLFdBQU8sbUNBQVEsZ0NBQUMsc0JBQUQsRUFBZ0JrQixLQUFoQixDQUFSLENBQVA7QUFDRCxHQXJDRDs7QUF1Q0F4QixFQUFBQSxRQUFRLENBQUMsVUFBRCxFQUFhLFlBQU07QUFDekJ5QixJQUFBQSxFQUFFLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDbEJDLE1BQUFBLE1BQU0sQ0FBQ3JCLE9BQU8sRUFBUixDQUFOLENBQWtCc0IsZUFBbEI7QUFDRCxLQUZDLENBQUY7QUFHRCxHQUpPLENBQVI7QUFNQTNCLEVBQUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBTTtBQUN0QnlCLElBQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxZQUFNO0FBQzNELFVBQU1HLENBQUMsR0FBR3ZCLE9BQU8sRUFBakI7QUFFQXVCLE1BQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhQyxNQUFiO0FBRUFKLE1BQUFBLE1BQU0sQ0FBQ3RCLGFBQUQsQ0FBTixDQUFzQjJCLFVBQXRCO0FBQ0FMLE1BQUFBLE1BQU0sQ0FBQ3pCLGdCQUFELENBQU4sQ0FBeUI4QixVQUF6QjtBQUNELEtBUEMsQ0FBRjtBQVNBTixJQUFBQSxFQUFFLENBQUMsVUFBRCxFQUFhLFlBQU07QUFDbkIsVUFBTUcsQ0FBQyxHQUFHdkIsT0FBTyxFQUFqQjtBQUVBdUIsTUFBQUEsQ0FBQyxDQUFDQyxRQUFGLEdBQWFHLGdCQUFiLENBQThCLE1BQTlCO0FBRUFOLE1BQUFBLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDQyxRQUFGLEdBQWFJLEtBQWQsQ0FBTixDQUEyQkMsT0FBM0IsQ0FBbUM7QUFDakNDLFFBQUFBLE1BQU0sRUFBRSxFQUR5QjtBQUVqQ0MsUUFBQUEsY0FBYyxFQUFFLE1BRmlCO0FBR2pDQyxRQUFBQSxZQUFZLEVBQUU7QUFIbUIsT0FBbkM7QUFLRCxLQVZDLENBQUY7QUFXRCxHQXJCTyxDQUFSO0FBc0JELENBdkVPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEVDUlRvb2xiYXIgfSBmcm9tICcuLi9lY3ItdG9vbGJhcic7XG5cbmRlc2NyaWJlKCdFQ1JUb29sYmFyJywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2VSZXNwb25zZSA9IGplc3QuZm4oKTtcbiAgbGV0IG9uVG9vbGJhckRvbmUgPSBqZXN0LmZuKCk7XG5cbiAgY29uc3Qgd3JhcHBlciA9ICgpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uQ2hhbmdlUmVzcG9uc2UsXG4gICAgICBvblRvb2xiYXJEb25lLFxuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBub2RlOiB7XG4gICAgICAgIGtleTogMSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGdldDogKHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnaW5kZXgnKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnMic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnbW9vbic7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b0pTT046IGplc3QuZm4oKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2YWx1ZToge1xuICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIHNldE5vZGVCeUtleTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICAgICAgICBtb3ZlRm9jdXNUbzogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICAgICAgICAgIG1vdmVBbmNob3JUbzogamVzdC5mbigpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgIGdldE5leHRUZXh0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb3JyZWN0Q2hvaWNlOiB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnbW9vbicgfSxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPEVDUlRvb2xiYXIgey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHdyYXBwZXIoKSkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBpdCgnb25Eb25lOiBjYWxscyBvblRvb2xiYXJEb25lIGFuZCBvbkNoYW5nZVJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdyA9IHdyYXBwZXIoKTtcblxuICAgICAgdy5pbnN0YW5jZSgpLm9uRG9uZSgpO1xuXG4gICAgICBleHBlY3Qob25Ub29sYmFyRG9uZSkudG9CZUNhbGxlZCgpO1xuICAgICAgZXhwZWN0KG9uQ2hhbmdlUmVzcG9uc2UpLnRvQmVDYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdvbkNoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG5cbiAgICAgIHcuaW5zdGFuY2UoKS5vblJlc3BBcmVhQ2hhbmdlKCd0ZXN0Jyk7XG5cbiAgICAgIGV4cGVjdCh3Lmluc3RhbmNlKCkuc3RhdGUpLnRvRXF1YWwoe1xuICAgICAgICBtYXJrdXA6ICcnLFxuICAgICAgICByZXNwQXJlYU1hcmt1cDogJ3Rlc3QnLFxuICAgICAgICB0b29sYmFyU3R5bGU6IHt9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=