@pie-lib/editable-html-tip-tap 1.1.1-next.2 → 1.1.1-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/LICENSE.md +5 -0
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/components/CharacterPicker.js +5 -24
  4. package/lib/components/CharacterPicker.js.map +1 -1
  5. package/lib/components/EditableHtml.js +1 -18
  6. package/lib/components/EditableHtml.js.map +1 -1
  7. package/lib/components/MenuBar.js +1 -18
  8. package/lib/components/MenuBar.js.map +1 -1
  9. package/lib/components/TiptapContainer.js +2 -18
  10. package/lib/components/TiptapContainer.js.map +1 -1
  11. package/lib/components/characters/characterUtils.js +1 -3
  12. package/lib/components/characters/characterUtils.js.map +1 -1
  13. package/lib/components/characters/custom-popper.js +1 -2
  14. package/lib/components/characters/custom-popper.js.map +1 -1
  15. package/lib/components/common/done-button.js +1 -2
  16. package/lib/components/common/done-button.js.map +1 -1
  17. package/lib/components/common/toolbar-buttons.js +1 -13
  18. package/lib/components/common/toolbar-buttons.js.map +1 -1
  19. package/lib/components/icons/CssIcon.js +1 -2
  20. package/lib/components/icons/CssIcon.js.map +1 -1
  21. package/lib/components/icons/RespArea.js +1 -11
  22. package/lib/components/icons/RespArea.js.map +1 -1
  23. package/lib/components/icons/TableIcons.js +1 -2
  24. package/lib/components/icons/TableIcons.js.map +1 -1
  25. package/lib/components/icons/TextAlign.js +1 -8
  26. package/lib/components/icons/TextAlign.js.map +1 -1
  27. package/lib/components/image/AltDialog.js +1 -6
  28. package/lib/components/image/AltDialog.js.map +1 -1
  29. package/lib/components/image/ImageToolbar.js +1 -14
  30. package/lib/components/image/ImageToolbar.js.map +1 -1
  31. package/lib/components/image/InsertImageHandler.js +1 -11
  32. package/lib/components/image/InsertImageHandler.js.map +1 -1
  33. package/lib/components/media/MediaDialog.js +1 -20
  34. package/lib/components/media/MediaDialog.js.map +1 -1
  35. package/lib/components/media/MediaToolbar.js +1 -3
  36. package/lib/components/media/MediaToolbar.js.map +1 -1
  37. package/lib/components/media/MediaWrapper.js +1 -12
  38. package/lib/components/media/MediaWrapper.js.map +1 -1
  39. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +3 -13
  40. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -1
  41. package/lib/components/respArea/DragInTheBlank/choice.js +1 -9
  42. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
  43. package/lib/components/respArea/ExplicitConstructedResponse.js +1 -9
  44. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -1
  45. package/lib/components/respArea/InlineDropdown.js +1 -9
  46. package/lib/components/respArea/InlineDropdown.js.map +1 -1
  47. package/lib/components/respArea/ToolbarIcon.js +1 -11
  48. package/lib/components/respArea/ToolbarIcon.js.map +1 -1
  49. package/lib/constants.js +1 -2
  50. package/lib/constants.js.map +1 -1
  51. package/lib/extensions/css.js +1 -12
  52. package/lib/extensions/css.js.map +1 -1
  53. package/lib/extensions/custom-toolbar-wrapper.js +2 -20
  54. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -1
  55. package/lib/extensions/extended-table.js +2 -6
  56. package/lib/extensions/extended-table.js.map +1 -1
  57. package/lib/extensions/image-component.js +5 -22
  58. package/lib/extensions/image-component.js.map +1 -1
  59. package/lib/extensions/image.js +1 -12
  60. package/lib/extensions/image.js.map +1 -1
  61. package/lib/extensions/index.js +4 -13
  62. package/lib/extensions/index.js.map +1 -1
  63. package/lib/extensions/math.js +1 -17
  64. package/lib/extensions/math.js.map +1 -1
  65. package/lib/extensions/media.js +1 -16
  66. package/lib/extensions/media.js.map +1 -1
  67. package/lib/extensions/responseArea.js +1 -24
  68. package/lib/extensions/responseArea.js.map +1 -1
  69. package/lib/index.js +1 -8
  70. package/lib/index.js.map +1 -1
  71. package/lib/styles/editorContainerStyles.js +1 -3
  72. package/lib/styles/editorContainerStyles.js.map +1 -1
  73. package/lib/theme.js +1 -2
  74. package/lib/theme.js.map +1 -1
  75. package/lib/utils/size.js +1 -7
  76. package/lib/utils/size.js.map +1 -1
  77. package/package.json +9 -9
  78. package/src/__tests__/constants.test.js +1 -2
  79. package/src/__tests__/extensions.test.js +1 -1
  80. package/src/__tests__/index.test.jsx +1 -1
  81. package/src/components/CharacterPicker.jsx +2 -6
  82. package/src/components/EditableHtml.jsx +1 -1
  83. package/src/components/MenuBar.jsx +32 -186
  84. package/src/components/TiptapContainer.jsx +1 -1
  85. package/src/components/__tests__/AltDialog.test.jsx +1 -1
  86. package/src/components/__tests__/CharacterPicker.test.jsx +5 -3
  87. package/src/components/__tests__/DragInTheBlank.test.jsx +1 -1
  88. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +1 -1
  89. package/src/components/__tests__/ImageToolbar.test.jsx +1 -1
  90. package/src/components/__tests__/InlineDropdown.test.jsx +1 -1
  91. package/src/components/__tests__/MediaDialog.test.jsx +1 -1
  92. package/src/components/__tests__/MediaToolbar.test.jsx +1 -1
  93. package/src/components/__tests__/MenuBar.test.jsx +1 -1
  94. package/src/components/__tests__/TableIcons.test.jsx +1 -1
  95. package/src/components/__tests__/TextAlign.test.jsx +2 -2
  96. package/src/components/__tests__/choice.test.jsx +1 -1
  97. package/src/components/__tests__/done-button.test.jsx +2 -2
  98. package/src/components/__tests__/toolbar-buttons.test.jsx +2 -2
  99. package/src/components/image/AltDialog.jsx +1 -1
  100. package/src/components/image/InsertImageHandler.js +1 -1
  101. package/src/components/media/MediaDialog.js +4 -15
  102. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +1 -1
  103. package/src/components/respArea/DragInTheBlank/choice.jsx +34 -27
  104. package/src/components/respArea/ExplicitConstructedResponse.jsx +1 -1
  105. package/src/components/respArea/InlineDropdown.jsx +2 -3
  106. package/src/extensions/__tests__/custom-toolbar-wrapper.test.jsx +1 -1
  107. package/src/extensions/__tests__/extended-table.test.js +0 -21
  108. package/src/extensions/__tests__/image-component.test.jsx +1 -1
  109. package/src/extensions/__tests__/media.test.js +1 -1
  110. package/src/extensions/__tests__/responseArea.test.js +2 -2
  111. package/src/extensions/css.js +25 -23
  112. package/src/extensions/custom-toolbar-wrapper.jsx +1 -2
  113. package/src/extensions/extended-table.js +3 -1
  114. package/src/extensions/image-component.jsx +2 -2
  115. package/src/extensions/image.js +1 -1
  116. package/src/extensions/index.js +1 -3
  117. package/src/extensions/math.js +29 -27
  118. package/src/extensions/media.js +12 -14
  119. package/src/extensions/responseArea.js +91 -86
  120. package/src/styles/editorContainerStyles.js +0 -1
  121. package/lib/__tests__/EditableHtml.test.js +0 -387
  122. package/lib/__tests__/constants.test.js +0 -28
  123. package/lib/__tests__/extensions.test.js +0 -214
  124. package/lib/__tests__/index.test.js +0 -246
  125. package/lib/__tests__/size-utils.test.js +0 -57
  126. package/lib/__tests__/theme.test.js +0 -17
  127. package/lib/components/__tests__/AltDialog.test.js +0 -201
  128. package/lib/components/__tests__/CharacterPicker.test.js +0 -313
  129. package/lib/components/__tests__/CssIcon.test.js +0 -58
  130. package/lib/components/__tests__/DragInTheBlank.test.js +0 -309
  131. package/lib/components/__tests__/ExplicitConstructedResponse.test.js +0 -263
  132. package/lib/components/__tests__/ImageToolbar.test.js +0 -195
  133. package/lib/components/__tests__/InlineDropdown.test.js +0 -297
  134. package/lib/components/__tests__/InsertImageHandler.test.js +0 -162
  135. package/lib/components/__tests__/MediaDialog.test.js +0 -435
  136. package/lib/components/__tests__/MediaToolbar.test.js +0 -126
  137. package/lib/components/__tests__/MediaWrapper.test.js +0 -96
  138. package/lib/components/__tests__/MenuBar.test.js +0 -459
  139. package/lib/components/__tests__/RespArea.test.js +0 -171
  140. package/lib/components/__tests__/TableIcons.test.js +0 -153
  141. package/lib/components/__tests__/TextAlign.test.js +0 -216
  142. package/lib/components/__tests__/TiptapContainer.test.js +0 -196
  143. package/lib/components/__tests__/characterUtils.test.js +0 -189
  144. package/lib/components/__tests__/choice.test.js +0 -213
  145. package/lib/components/__tests__/custom-popper.test.js +0 -108
  146. package/lib/components/__tests__/done-button.test.js +0 -72
  147. package/lib/components/__tests__/toolbar-buttons.test.js +0 -277
  148. package/lib/extensions/__tests__/component.test.js +0 -314
  149. package/lib/extensions/__tests__/css.test.js +0 -218
  150. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +0 -185
  151. package/lib/extensions/__tests__/extended-table.test.js +0 -114
  152. package/lib/extensions/__tests__/image-component.test.js +0 -315
  153. package/lib/extensions/__tests__/image.test.js +0 -178
  154. package/lib/extensions/__tests__/media.test.js +0 -296
  155. package/lib/extensions/__tests__/responseArea.test.js +0 -332
  156. package/lib/extensions/component.js +0 -305
@@ -1,332 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
- require("core-js/modules/es.array.is-array.js");
6
- require("core-js/modules/es.function.name.js");
7
- var _responseArea = require("../responseArea");
8
- jest.mock('@tiptap/core', function () {
9
- return {
10
- Extension: {
11
- create: jest.fn(function (config) {
12
- return config;
13
- })
14
- },
15
- Node: {
16
- create: jest.fn(function (config) {
17
- return config;
18
- })
19
- }
20
- };
21
- });
22
- jest.mock('@tiptap/react', function () {
23
- return {
24
- Node: {
25
- create: jest.fn(function (config) {
26
- return config;
27
- })
28
- },
29
- ReactNodeViewRenderer: jest.fn(function (component) {
30
- return component;
31
- })
32
- };
33
- });
34
- jest.mock('prosemirror-state', function () {
35
- return {
36
- Plugin: jest.fn(function (config) {
37
- return config;
38
- }),
39
- PluginKey: jest.fn(function (key) {
40
- this.key = key;
41
- }),
42
- TextSelection: {
43
- near: jest.fn(function (pos, dir) {
44
- return {
45
- type: 'text',
46
- pos: pos,
47
- dir: dir
48
- };
49
- }),
50
- create: jest.fn(function (doc, pos) {
51
- return {
52
- type: 'text',
53
- pos: pos
54
- };
55
- })
56
- },
57
- NodeSelection: {
58
- create: jest.fn(function (doc, pos) {
59
- return {
60
- type: 'node',
61
- pos: pos
62
- };
63
- })
64
- }
65
- };
66
- });
67
- jest.mock('../../components/respArea/ExplicitConstructedResponse', function () {
68
- return {
69
- __esModule: true,
70
- "default": jest.fn(function () {
71
- return /*#__PURE__*/React.createElement("div", {
72
- "data-testid": "explicit-constructed-response"
73
- });
74
- })
75
- };
76
- });
77
- jest.mock('../../components/respArea/DragInTheBlank/DragInTheBlank', function () {
78
- return {
79
- __esModule: true,
80
- "default": jest.fn(function () {
81
- return /*#__PURE__*/React.createElement("div", {
82
- "data-testid": "drag-in-the-blank"
83
- });
84
- })
85
- };
86
- });
87
- jest.mock('../../components/respArea/InlineDropdown', function () {
88
- return {
89
- __esModule: true,
90
- "default": jest.fn(function () {
91
- return /*#__PURE__*/React.createElement("div", {
92
- "data-testid": "inline-dropdown"
93
- });
94
- })
95
- };
96
- });
97
- describe('ResponseAreaExtension', function () {
98
- describe('configuration', function () {
99
- it('has correct name', function () {
100
- expect(_responseArea.ResponseAreaExtension.name).toBe('responseArea');
101
- });
102
- });
103
- describe('addOptions', function () {
104
- it('returns default options', function () {
105
- var options = _responseArea.ResponseAreaExtension.addOptions();
106
- expect(options).toHaveProperty('maxResponseAreas', null);
107
- expect(options).toHaveProperty('error', null);
108
- expect(options).toHaveProperty('options', null);
109
- expect(options).toHaveProperty('respAreaToolbar', null);
110
- expect(options).toHaveProperty('onHandleAreaChange', null);
111
- });
112
- });
113
- describe('addProseMirrorPlugins', function () {
114
- it('returns empty array when no type specified', function () {
115
- var context = {
116
- options: {}
117
- };
118
- var plugins = _responseArea.ResponseAreaExtension.addProseMirrorPlugins.call(context);
119
- expect(Array.isArray(plugins)).toBe(true);
120
- expect(plugins).toHaveLength(0);
121
- });
122
- it('returns plugin array when type is specified', function () {
123
- var context = {
124
- options: {
125
- type: 'explicit-constructed-response',
126
- maxResponseAreas: 5
127
- }
128
- };
129
- var plugins = _responseArea.ResponseAreaExtension.addProseMirrorPlugins.call(context);
130
- expect(Array.isArray(plugins)).toBe(true);
131
- expect(plugins).toHaveLength(1);
132
- expect(plugins[0]).toHaveProperty('key');
133
- expect(plugins[0]).toHaveProperty('view');
134
- });
135
- });
136
- describe('addCommands', function () {
137
- it('returns insertResponseArea command', function () {
138
- var commands = _responseArea.ResponseAreaExtension.addCommands();
139
- expect(commands).toHaveProperty('insertResponseArea');
140
- expect((0, _typeof2["default"])(commands.insertResponseArea)).toBe('function');
141
- });
142
- });
143
- });
144
- describe('ExplicitConstructedResponseNode', function () {
145
- describe('configuration', function () {
146
- it('has correct name', function () {
147
- expect(_responseArea.ExplicitConstructedResponseNode.name).toBe('explicit_constructed_response');
148
- });
149
- it('is inline', function () {
150
- expect(_responseArea.ExplicitConstructedResponseNode.inline).toBe(true);
151
- });
152
- it('is in inline group', function () {
153
- expect(_responseArea.ExplicitConstructedResponseNode.group).toBe('inline');
154
- });
155
- it('is atomic', function () {
156
- expect(_responseArea.ExplicitConstructedResponseNode.atom).toBe(true);
157
- });
158
- });
159
- describe('addAttributes', function () {
160
- it('returns required attributes', function () {
161
- var attributes = _responseArea.ExplicitConstructedResponseNode.addAttributes();
162
- expect(attributes).toHaveProperty('index');
163
- expect(attributes).toHaveProperty('value');
164
- expect(attributes).toHaveProperty('updated');
165
- expect(attributes.index).toEqual({
166
- "default": null
167
- });
168
- expect(attributes.value).toEqual({
169
- "default": ''
170
- });
171
- expect(attributes.updated).toEqual({
172
- "default": ''
173
- });
174
- });
175
- });
176
- describe('parseHTML', function () {
177
- it('returns parsing rules', function () {
178
- var rules = _responseArea.ExplicitConstructedResponseNode.parseHTML();
179
- expect(Array.isArray(rules)).toBe(true);
180
- expect(rules).toHaveLength(1);
181
- expect(rules[0]).toHaveProperty('tag');
182
- });
183
- });
184
- describe('renderHTML', function () {
185
- it('renders span with attributes', function () {
186
- var result = _responseArea.ExplicitConstructedResponseNode.renderHTML({
187
- HTMLAttributes: {
188
- index: '1',
189
- id: '1',
190
- value: 'test'
191
- }
192
- });
193
- expect(result[0]).toBe('span');
194
- expect(result[1]).toHaveProperty('data-type', 'explicit_constructed_response');
195
- });
196
- });
197
- describe('addNodeView', function () {
198
- it('returns ReactNodeViewRenderer result', function () {
199
- var result = _responseArea.ExplicitConstructedResponseNode.addNodeView();
200
- expect(result).toBeDefined();
201
- });
202
- });
203
- });
204
- describe('DragInTheBlankNode', function () {
205
- describe('configuration', function () {
206
- it('has correct name', function () {
207
- expect(_responseArea.DragInTheBlankNode.name).toBe('drag_in_the_blank');
208
- });
209
- it('is inline', function () {
210
- expect(_responseArea.DragInTheBlankNode.inline).toBe(true);
211
- });
212
- it('is in inline group', function () {
213
- expect(_responseArea.DragInTheBlankNode.group).toBe('inline');
214
- });
215
- it('is atomic', function () {
216
- expect(_responseArea.DragInTheBlankNode.atom).toBe(true);
217
- });
218
- });
219
- describe('addAttributes', function () {
220
- it('returns required attributes', function () {
221
- var attributes = _responseArea.DragInTheBlankNode.addAttributes();
222
- expect(attributes).toHaveProperty('index');
223
- expect(attributes).toHaveProperty('id');
224
- expect(attributes).toHaveProperty('value');
225
- expect(attributes).toHaveProperty('inTable');
226
- expect(attributes).toHaveProperty('updated');
227
- expect(attributes.index).toEqual({
228
- "default": null
229
- });
230
- expect(attributes.id).toEqual({
231
- "default": null
232
- });
233
- expect(attributes.value).toEqual({
234
- "default": ''
235
- });
236
- expect(attributes.inTable).toEqual({
237
- "default": null
238
- });
239
- expect(attributes.updated).toEqual({
240
- "default": ''
241
- });
242
- });
243
- });
244
- describe('parseHTML', function () {
245
- it('returns parsing rules', function () {
246
- var rules = _responseArea.DragInTheBlankNode.parseHTML();
247
- expect(Array.isArray(rules)).toBe(true);
248
- expect(rules).toHaveLength(1);
249
- expect(rules[0]).toHaveProperty('tag');
250
- });
251
- });
252
- describe('renderHTML', function () {
253
- it('renders span with attributes', function () {
254
- var result = _responseArea.DragInTheBlankNode.renderHTML({
255
- HTMLAttributes: {
256
- index: '1',
257
- id: '1',
258
- value: 'test'
259
- }
260
- });
261
- expect(result[0]).toBe('span');
262
- expect(result[1]).toHaveProperty('data-type', 'drag_in_the_blank');
263
- });
264
- });
265
- describe('addNodeView', function () {
266
- it('returns ReactNodeViewRenderer result', function () {
267
- var result = _responseArea.DragInTheBlankNode.addNodeView();
268
- expect(result).toBeDefined();
269
- });
270
- });
271
- });
272
- describe('InlineDropdownNode', function () {
273
- describe('configuration', function () {
274
- it('has correct name', function () {
275
- expect(_responseArea.InlineDropdownNode.name).toBe('inline_dropdown');
276
- });
277
- it('is inline', function () {
278
- expect(_responseArea.InlineDropdownNode.inline).toBe(true);
279
- });
280
- it('is in inline group', function () {
281
- expect(_responseArea.InlineDropdownNode.group).toBe('inline');
282
- });
283
- it('is atomic', function () {
284
- expect(_responseArea.InlineDropdownNode.atom).toBe(true);
285
- });
286
- });
287
- describe('addAttributes', function () {
288
- it('returns required attributes', function () {
289
- var attributes = _responseArea.InlineDropdownNode.addAttributes();
290
- expect(attributes).toHaveProperty('index');
291
- expect(attributes).toHaveProperty('value');
292
- expect(attributes).toHaveProperty('updated');
293
- expect(attributes.index).toEqual({
294
- "default": null
295
- });
296
- expect(attributes.value).toEqual({
297
- "default": ''
298
- });
299
- expect(attributes.updated).toEqual({
300
- "default": ''
301
- });
302
- });
303
- });
304
- describe('parseHTML', function () {
305
- it('returns parsing rules', function () {
306
- var rules = _responseArea.InlineDropdownNode.parseHTML();
307
- expect(Array.isArray(rules)).toBe(true);
308
- expect(rules).toHaveLength(1);
309
- expect(rules[0]).toHaveProperty('tag');
310
- });
311
- });
312
- describe('renderHTML', function () {
313
- it('renders span with attributes', function () {
314
- var result = _responseArea.InlineDropdownNode.renderHTML({
315
- HTMLAttributes: {
316
- index: '1',
317
- id: '1',
318
- value: 'test'
319
- }
320
- });
321
- expect(result[0]).toBe('span');
322
- expect(result[1]).toHaveProperty('data-type', 'inline_dropdown');
323
- });
324
- });
325
- describe('addNodeView', function () {
326
- it('returns ReactNodeViewRenderer result', function () {
327
- var result = _responseArea.InlineDropdownNode.addNodeView();
328
- expect(result).toBeDefined();
329
- });
330
- });
331
- });
332
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVzcG9uc2VBcmVhIiwicmVxdWlyZSIsImplc3QiLCJtb2NrIiwiRXh0ZW5zaW9uIiwiY3JlYXRlIiwiZm4iLCJjb25maWciLCJOb2RlIiwiUmVhY3ROb2RlVmlld1JlbmRlcmVyIiwiY29tcG9uZW50IiwiUGx1Z2luIiwiUGx1Z2luS2V5Iiwia2V5IiwiVGV4dFNlbGVjdGlvbiIsIm5lYXIiLCJwb3MiLCJkaXIiLCJ0eXBlIiwiZG9jIiwiTm9kZVNlbGVjdGlvbiIsIl9fZXNNb2R1bGUiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwiUmVzcG9uc2VBcmVhRXh0ZW5zaW9uIiwibmFtZSIsInRvQmUiLCJvcHRpb25zIiwiYWRkT3B0aW9ucyIsInRvSGF2ZVByb3BlcnR5IiwiY29udGV4dCIsInBsdWdpbnMiLCJhZGRQcm9zZU1pcnJvclBsdWdpbnMiLCJjYWxsIiwiQXJyYXkiLCJpc0FycmF5IiwidG9IYXZlTGVuZ3RoIiwibWF4UmVzcG9uc2VBcmVhcyIsImNvbW1hbmRzIiwiYWRkQ29tbWFuZHMiLCJfdHlwZW9mMiIsImluc2VydFJlc3BvbnNlQXJlYSIsIkV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUiLCJpbmxpbmUiLCJncm91cCIsImF0b20iLCJhdHRyaWJ1dGVzIiwiYWRkQXR0cmlidXRlcyIsImluZGV4IiwidG9FcXVhbCIsInZhbHVlIiwidXBkYXRlZCIsInJ1bGVzIiwicGFyc2VIVE1MIiwicmVzdWx0IiwicmVuZGVySFRNTCIsIkhUTUxBdHRyaWJ1dGVzIiwiaWQiLCJhZGROb2RlVmlldyIsInRvQmVEZWZpbmVkIiwiRHJhZ0luVGhlQmxhbmtOb2RlIiwiaW5UYWJsZSIsIklubGluZURyb3Bkb3duTm9kZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leHRlbnNpb25zL19fdGVzdHNfXy9yZXNwb25zZUFyZWEudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBSZXNwb25zZUFyZWFFeHRlbnNpb24sXG4gIEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUsXG4gIERyYWdJblRoZUJsYW5rTm9kZSxcbiAgSW5saW5lRHJvcGRvd25Ob2RlLFxufSBmcm9tICcuLi9yZXNwb25zZUFyZWEnO1xuXG5qZXN0Lm1vY2soJ0B0aXB0YXAvY29yZScsICgpID0+ICh7XG4gIEV4dGVuc2lvbjogeyBjcmVhdGU6IGplc3QuZm4oKGNvbmZpZykgPT4gY29uZmlnKSB9LFxuICBOb2RlOiB7IGNyZWF0ZTogamVzdC5mbigoY29uZmlnKSA9PiBjb25maWcpIH0sXG59KSk7XG5cbmplc3QubW9jaygnQHRpcHRhcC9yZWFjdCcsICgpID0+ICh7XG4gIE5vZGU6IHsgY3JlYXRlOiBqZXN0LmZuKChjb25maWcpID0+IGNvbmZpZykgfSxcbiAgUmVhY3ROb2RlVmlld1JlbmRlcmVyOiBqZXN0LmZuKChjb21wb25lbnQpID0+IGNvbXBvbmVudCksXG59KSk7XG5cbmplc3QubW9jaygncHJvc2VtaXJyb3Itc3RhdGUnLCAoKSA9PiAoe1xuICBQbHVnaW46IGplc3QuZm4oZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH0pLFxuICBQbHVnaW5LZXk6IGplc3QuZm4oZnVuY3Rpb24gKGtleSkge1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICB9KSxcbiAgVGV4dFNlbGVjdGlvbjoge1xuICAgIG5lYXI6IGplc3QuZm4oKHBvcywgZGlyKSA9PiAoeyB0eXBlOiAndGV4dCcsIHBvcywgZGlyIH0pKSxcbiAgICBjcmVhdGU6IGplc3QuZm4oKGRvYywgcG9zKSA9PiAoeyB0eXBlOiAndGV4dCcsIHBvcyB9KSksXG4gIH0sXG4gIE5vZGVTZWxlY3Rpb246IHtcbiAgICBjcmVhdGU6IGplc3QuZm4oKGRvYywgcG9zKSA9PiAoeyB0eXBlOiAnbm9kZScsIHBvcyB9KSksXG4gIH0sXG59KSk7XG5cbmplc3QubW9jaygnLi4vLi4vY29tcG9uZW50cy9yZXNwQXJlYS9FeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2UnLCAoKSA9PiAoe1xuICBfX2VzTW9kdWxlOiB0cnVlLFxuICBkZWZhdWx0OiBqZXN0LmZuKCgpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZVwiIC8+KSxcbn0pKTtcblxuamVzdC5tb2NrKCcuLi8uLi9jb21wb25lbnRzL3Jlc3BBcmVhL0RyYWdJblRoZUJsYW5rL0RyYWdJblRoZUJsYW5rJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogamVzdC5mbigoKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1pbi10aGUtYmxhbmtcIiAvPiksXG59KSk7XG5cbmplc3QubW9jaygnLi4vLi4vY29tcG9uZW50cy9yZXNwQXJlYS9JbmxpbmVEcm9wZG93bicsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IGplc3QuZm4oKCkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImlubGluZS1kcm9wZG93blwiIC8+KSxcbn0pKTtcblxuZGVzY3JpYmUoJ1Jlc3BvbnNlQXJlYUV4dGVuc2lvbicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2NvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2hhcyBjb3JyZWN0IG5hbWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoUmVzcG9uc2VBcmVhRXh0ZW5zaW9uLm5hbWUpLnRvQmUoJ3Jlc3BvbnNlQXJlYScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkT3B0aW9ucycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBkZWZhdWx0IG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gUmVzcG9uc2VBcmVhRXh0ZW5zaW9uLmFkZE9wdGlvbnMoKTtcblxuICAgICAgZXhwZWN0KG9wdGlvbnMpLnRvSGF2ZVByb3BlcnR5KCdtYXhSZXNwb25zZUFyZWFzJywgbnVsbCk7XG4gICAgICBleHBlY3Qob3B0aW9ucykudG9IYXZlUHJvcGVydHkoJ2Vycm9yJywgbnVsbCk7XG4gICAgICBleHBlY3Qob3B0aW9ucykudG9IYXZlUHJvcGVydHkoJ29wdGlvbnMnLCBudWxsKTtcbiAgICAgIGV4cGVjdChvcHRpb25zKS50b0hhdmVQcm9wZXJ0eSgncmVzcEFyZWFUb29sYmFyJywgbnVsbCk7XG4gICAgICBleHBlY3Qob3B0aW9ucykudG9IYXZlUHJvcGVydHkoJ29uSGFuZGxlQXJlYUNoYW5nZScsIG51bGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkUHJvc2VNaXJyb3JQbHVnaW5zJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gbm8gdHlwZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBsdWdpbnMgPSBSZXNwb25zZUFyZWFFeHRlbnNpb24uYWRkUHJvc2VNaXJyb3JQbHVnaW5zLmNhbGwoY29udGV4dCk7XG5cbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHBsdWdpbnMpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHBsdWdpbnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHBsdWdpbiBhcnJheSB3aGVuIHR5cGUgaXMgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHR5cGU6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgbWF4UmVzcG9uc2VBcmVhczogNSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBsdWdpbnMgPSBSZXNwb25zZUFyZWFFeHRlbnNpb24uYWRkUHJvc2VNaXJyb3JQbHVnaW5zLmNhbGwoY29udGV4dCk7XG5cbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHBsdWdpbnMpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHBsdWdpbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChwbHVnaW5zWzBdKS50b0hhdmVQcm9wZXJ0eSgna2V5Jyk7XG4gICAgICBleHBlY3QocGx1Z2luc1swXSkudG9IYXZlUHJvcGVydHkoJ3ZpZXcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FkZENvbW1hbmRzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGluc2VydFJlc3BvbnNlQXJlYSBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZHMgPSBSZXNwb25zZUFyZWFFeHRlbnNpb24uYWRkQ29tbWFuZHMoKTtcblxuICAgICAgZXhwZWN0KGNvbW1hbmRzKS50b0hhdmVQcm9wZXJ0eSgnaW5zZXJ0UmVzcG9uc2VBcmVhJyk7XG4gICAgICBleHBlY3QodHlwZW9mIGNvbW1hbmRzLmluc2VydFJlc3BvbnNlQXJlYSkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0V4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdjb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdoYXMgY29ycmVjdCBuYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUubmFtZSkudG9CZSgnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBpbmxpbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZS5pbmxpbmUpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgaW4gaW5saW5lIGdyb3VwJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUuZ3JvdXApLnRvQmUoJ2lubGluZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIGF0b21pYycsICgpID0+IHtcbiAgICAgIGV4cGVjdChFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2VOb2RlLmF0b20pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhZGRBdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHJlcXVpcmVkIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZS5hZGRBdHRyaWJ1dGVzKCk7XG5cbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgnaW5kZXgnKTtcbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgndmFsdWUnKTtcbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgndXBkYXRlZCcpO1xuXG4gICAgICBleHBlY3QoYXR0cmlidXRlcy5pbmRleCkudG9FcXVhbCh7IGRlZmF1bHQ6IG51bGwgfSk7XG4gICAgICBleHBlY3QoYXR0cmlidXRlcy52YWx1ZSkudG9FcXVhbCh7IGRlZmF1bHQ6ICcnIH0pO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMudXBkYXRlZCkudG9FcXVhbCh7IGRlZmF1bHQ6ICcnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VIVE1MJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHBhcnNpbmcgcnVsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBydWxlcyA9IEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUucGFyc2VIVE1MKCk7XG5cbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHJ1bGVzKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChydWxlcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KHJ1bGVzWzBdKS50b0hhdmVQcm9wZXJ0eSgndGFnJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJIVE1MJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHNwYW4gd2l0aCBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZS5yZW5kZXJIVE1MKHtcbiAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBpbmRleDogJzEnLFxuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgdmFsdWU6ICd0ZXN0JyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0WzBdKS50b0JlKCdzcGFuJyk7XG4gICAgICBleHBlY3QocmVzdWx0WzFdKS50b0hhdmVQcm9wZXJ0eSgnZGF0YS10eXBlJywgJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhZGROb2RlVmlldycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBSZWFjdE5vZGVWaWV3UmVuZGVyZXIgcmVzdWx0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZS5hZGROb2RlVmlldygpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRHJhZ0luVGhlQmxhbmtOb2RlJywgKCkgPT4ge1xuICBkZXNjcmliZSgnY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICBpdCgnaGFzIGNvcnJlY3QgbmFtZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChEcmFnSW5UaGVCbGFua05vZGUubmFtZSkudG9CZSgnZHJhZ19pbl90aGVfYmxhbmsnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBpbmxpbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoRHJhZ0luVGhlQmxhbmtOb2RlLmlubGluZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBpbiBpbmxpbmUgZ3JvdXAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoRHJhZ0luVGhlQmxhbmtOb2RlLmdyb3VwKS50b0JlKCdpbmxpbmUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBhdG9taWMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoRHJhZ0luVGhlQmxhbmtOb2RlLmF0b20pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhZGRBdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHJlcXVpcmVkIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gRHJhZ0luVGhlQmxhbmtOb2RlLmFkZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMpLnRvSGF2ZVByb3BlcnR5KCdpbmRleCcpO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMpLnRvSGF2ZVByb3BlcnR5KCdpZCcpO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMpLnRvSGF2ZVByb3BlcnR5KCd2YWx1ZScpO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMpLnRvSGF2ZVByb3BlcnR5KCdpblRhYmxlJyk7XG4gICAgICBleHBlY3QoYXR0cmlidXRlcykudG9IYXZlUHJvcGVydHkoJ3VwZGF0ZWQnKTtcblxuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMuaW5kZXgpLnRvRXF1YWwoeyBkZWZhdWx0OiBudWxsIH0pO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMuaWQpLnRvRXF1YWwoeyBkZWZhdWx0OiBudWxsIH0pO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMudmFsdWUpLnRvRXF1YWwoeyBkZWZhdWx0OiAnJyB9KTtcbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzLmluVGFibGUpLnRvRXF1YWwoeyBkZWZhdWx0OiBudWxsIH0pO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMudXBkYXRlZCkudG9FcXVhbCh7IGRlZmF1bHQ6ICcnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VIVE1MJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHBhcnNpbmcgcnVsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBydWxlcyA9IERyYWdJblRoZUJsYW5rTm9kZS5wYXJzZUhUTUwoKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkocnVsZXMpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJ1bGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3QocnVsZXNbMF0pLnRvSGF2ZVByb3BlcnR5KCd0YWcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlckhUTUwnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgc3BhbiB3aXRoIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBEcmFnSW5UaGVCbGFua05vZGUucmVuZGVySFRNTCh7XG4gICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaW5kZXg6ICcxJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIHZhbHVlOiAndGVzdCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdFswXSkudG9CZSgnc3BhbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdFsxXSkudG9IYXZlUHJvcGVydHkoJ2RhdGEtdHlwZScsICdkcmFnX2luX3RoZV9ibGFuaycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkTm9kZVZpZXcnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgUmVhY3ROb2RlVmlld1JlbmRlcmVyIHJlc3VsdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IERyYWdJblRoZUJsYW5rTm9kZS5hZGROb2RlVmlldygpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnSW5saW5lRHJvcGRvd25Ob2RlJywgKCkgPT4ge1xuICBkZXNjcmliZSgnY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICBpdCgnaGFzIGNvcnJlY3QgbmFtZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChJbmxpbmVEcm9wZG93bk5vZGUubmFtZSkudG9CZSgnaW5saW5lX2Ryb3Bkb3duJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgaW5saW5lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KElubGluZURyb3Bkb3duTm9kZS5pbmxpbmUpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgaW4gaW5saW5lIGdyb3VwJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KElubGluZURyb3Bkb3duTm9kZS5ncm91cCkudG9CZSgnaW5saW5lJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgYXRvbWljJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KElubGluZURyb3Bkb3duTm9kZS5hdG9tKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkQXR0cmlidXRlcycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyByZXF1aXJlZCBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IElubGluZURyb3Bkb3duTm9kZS5hZGRBdHRyaWJ1dGVzKCk7XG5cbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgnaW5kZXgnKTtcbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgndmFsdWUnKTtcbiAgICAgIGV4cGVjdChhdHRyaWJ1dGVzKS50b0hhdmVQcm9wZXJ0eSgndXBkYXRlZCcpO1xuXG4gICAgICBleHBlY3QoYXR0cmlidXRlcy5pbmRleCkudG9FcXVhbCh7IGRlZmF1bHQ6IG51bGwgfSk7XG4gICAgICBleHBlY3QoYXR0cmlidXRlcy52YWx1ZSkudG9FcXVhbCh7IGRlZmF1bHQ6ICcnIH0pO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMudXBkYXRlZCkudG9FcXVhbCh7IGRlZmF1bHQ6ICcnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VIVE1MJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHBhcnNpbmcgcnVsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBydWxlcyA9IElubGluZURyb3Bkb3duTm9kZS5wYXJzZUhUTUwoKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkocnVsZXMpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJ1bGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3QocnVsZXNbMF0pLnRvSGF2ZVByb3BlcnR5KCd0YWcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlckhUTUwnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgc3BhbiB3aXRoIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBJbmxpbmVEcm9wZG93bk5vZGUucmVuZGVySFRNTCh7XG4gICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaW5kZXg6ICcxJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIHZhbHVlOiAndGVzdCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdFswXSkudG9CZSgnc3BhbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdFsxXSkudG9IYXZlUHJvcGVydHkoJ2RhdGEtdHlwZScsICdpbmxpbmVfZHJvcGRvd24nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FkZE5vZGVWaWV3JywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIFJlYWN0Tm9kZVZpZXdSZW5kZXJlciByZXN1bHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBJbmxpbmVEcm9wZG93bk5vZGUuYWRkTm9kZVZpZXcoKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsYUFBQSxHQUFBQyxPQUFBO0FBT0FDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtFQUFBLE9BQU87SUFDL0JDLFNBQVMsRUFBRTtNQUFFQyxNQUFNLEVBQUVILElBQUksQ0FBQ0ksRUFBRSxDQUFDLFVBQUNDLE1BQU07UUFBQSxPQUFLQSxNQUFNO01BQUE7SUFBRSxDQUFDO0lBQ2xEQyxJQUFJLEVBQUU7TUFBRUgsTUFBTSxFQUFFSCxJQUFJLENBQUNJLEVBQUUsQ0FBQyxVQUFDQyxNQUFNO1FBQUEsT0FBS0EsTUFBTTtNQUFBO0lBQUU7RUFDOUMsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVITCxJQUFJLENBQUNDLElBQUksQ0FBQyxlQUFlLEVBQUU7RUFBQSxPQUFPO0lBQ2hDSyxJQUFJLEVBQUU7TUFBRUgsTUFBTSxFQUFFSCxJQUFJLENBQUNJLEVBQUUsQ0FBQyxVQUFDQyxNQUFNO1FBQUEsT0FBS0EsTUFBTTtNQUFBO0lBQUUsQ0FBQztJQUM3Q0UscUJBQXFCLEVBQUVQLElBQUksQ0FBQ0ksRUFBRSxDQUFDLFVBQUNJLFNBQVM7TUFBQSxPQUFLQSxTQUFTO0lBQUE7RUFDekQsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVIUixJQUFJLENBQUNDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtFQUFBLE9BQU87SUFDcENRLE1BQU0sRUFBRVQsSUFBSSxDQUFDSSxFQUFFLENBQUMsVUFBVUMsTUFBTSxFQUFFO01BQ2hDLE9BQU9BLE1BQU07SUFDZixDQUFDLENBQUM7SUFDRkssU0FBUyxFQUFFVixJQUFJLENBQUNJLEVBQUUsQ0FBQyxVQUFVTyxHQUFHLEVBQUU7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