@pie-lib/editable-html 11.3.0-beta.0 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.json +12 -3322
  2. package/CHANGELOG.md +120 -96
  3. package/package.json +7 -6
  4. package/src/editor.jsx +3 -3
  5. package/src/plugins/media/media-dialog.js +1 -1
  6. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +1 -1
  7. package/src/plugins/toolbar/default-toolbar.jsx +6 -4
  8. package/src/plugins/toolbar/editor-and-toolbar.jsx +1 -1
  9. package/src/plugins/toolbar/toolbar.jsx +4 -4
  10. package/lib/__tests__/editor.test.js +0 -470
  11. package/lib/__tests__/serialization.test.js +0 -246
  12. package/lib/__tests__/utils.js +0 -106
  13. package/lib/block-tags.js +0 -25
  14. package/lib/constants.js +0 -16
  15. package/lib/editor.js +0 -1355
  16. package/lib/index.js +0 -269
  17. package/lib/parse-html.js +0 -16
  18. package/lib/plugins/characters/custom-popper.js +0 -73
  19. package/lib/plugins/characters/index.js +0 -305
  20. package/lib/plugins/characters/utils.js +0 -381
  21. package/lib/plugins/css/icons/index.js +0 -37
  22. package/lib/plugins/css/index.js +0 -397
  23. package/lib/plugins/customPlugin/index.js +0 -114
  24. package/lib/plugins/html/icons/index.js +0 -38
  25. package/lib/plugins/html/index.js +0 -80
  26. package/lib/plugins/image/__tests__/component.test.js +0 -51
  27. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -56
  28. package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -26
  29. package/lib/plugins/image/__tests__/index.test.js +0 -98
  30. package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -125
  31. package/lib/plugins/image/__tests__/mock-change.js +0 -25
  32. package/lib/plugins/image/alt-dialog.js +0 -129
  33. package/lib/plugins/image/component.js +0 -419
  34. package/lib/plugins/image/image-toolbar.js +0 -177
  35. package/lib/plugins/image/index.js +0 -263
  36. package/lib/plugins/image/insert-image-handler.js +0 -161
  37. package/lib/plugins/index.js +0 -402
  38. package/lib/plugins/list/__tests__/index.test.js +0 -79
  39. package/lib/plugins/list/index.js +0 -334
  40. package/lib/plugins/math/__tests__/index.test.js +0 -300
  41. package/lib/plugins/math/index.js +0 -454
  42. package/lib/plugins/media/__tests__/index.test.js +0 -71
  43. package/lib/plugins/media/index.js +0 -387
  44. package/lib/plugins/media/media-dialog.js +0 -709
  45. package/lib/plugins/media/media-toolbar.js +0 -101
  46. package/lib/plugins/media/media-wrapper.js +0 -93
  47. package/lib/plugins/rendering/index.js +0 -46
  48. package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -254
  49. package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -97
  50. package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -57
  51. package/lib/plugins/respArea/icons/index.js +0 -95
  52. package/lib/plugins/respArea/index.js +0 -341
  53. package/lib/plugins/respArea/inline-dropdown/index.js +0 -75
  54. package/lib/plugins/respArea/math-templated/index.js +0 -130
  55. package/lib/plugins/respArea/utils.js +0 -125
  56. package/lib/plugins/table/CustomTablePlugin.js +0 -133
  57. package/lib/plugins/table/__tests__/index.test.js +0 -442
  58. package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -54
  59. package/lib/plugins/table/icons/index.js +0 -69
  60. package/lib/plugins/table/index.js +0 -483
  61. package/lib/plugins/table/table-toolbar.js +0 -187
  62. package/lib/plugins/textAlign/icons/index.js +0 -226
  63. package/lib/plugins/textAlign/index.js +0 -34
  64. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -128
  65. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -51
  66. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -54
  67. package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -120
  68. package/lib/plugins/toolbar/default-toolbar.js +0 -229
  69. package/lib/plugins/toolbar/done-button.js +0 -53
  70. package/lib/plugins/toolbar/editor-and-toolbar.js +0 -286
  71. package/lib/plugins/toolbar/index.js +0 -34
  72. package/lib/plugins/toolbar/toolbar-buttons.js +0 -194
  73. package/lib/plugins/toolbar/toolbar.js +0 -376
  74. package/lib/plugins/utils.js +0 -62
  75. package/lib/serialization.js +0 -677
  76. package/lib/theme.js +0 -9
@@ -1,402 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _slateHotkeys = _interopRequireDefault(require("slate-hotkeys"));
15
-
16
- var _slateDevEnvironment = require("slate-dev-environment");
17
-
18
- var _slate = require("slate");
19
-
20
- var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
21
-
22
- var _FormatQuote = _interopRequireDefault(require("@material-ui/icons/FormatQuote"));
23
-
24
- var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
25
-
26
- var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
27
-
28
- var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
29
-
30
- var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
31
-
32
- var _image = _interopRequireDefault(require("./image"));
33
-
34
- var _media = _interopRequireDefault(require("./media"));
35
-
36
- var _characters = _interopRequireDefault(require("./characters"));
37
-
38
- var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
39
-
40
- var _math = _interopRequireDefault(require("./math"));
41
-
42
- var _react = _interopRequireDefault(require("react"));
43
-
44
- var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
45
-
46
- var _toolbar = _interopRequireDefault(require("./toolbar"));
47
-
48
- var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
49
-
50
- var _compact = _interopRequireDefault(require("lodash/compact"));
51
-
52
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
53
-
54
- var _slateSoftBreak = _interopRequireDefault(require("slate-soft-break"));
55
-
56
- var _debug = _interopRequireDefault(require("debug"));
57
-
58
- var _list = _interopRequireDefault(require("./list"));
59
-
60
- var _table = _interopRequireDefault(require("./table"));
61
-
62
- var _respArea = _interopRequireDefault(require("./respArea"));
63
-
64
- var _html = _interopRequireDefault(require("./html"));
65
-
66
- var _css = _interopRequireDefault(require("./css"));
67
-
68
- var _customPlugin = _interopRequireDefault(require("./customPlugin"));
69
-
70
- var _rendering = _interopRequireDefault(require("./rendering"));
71
-
72
- var _textAlign = _interopRequireDefault(require("./textAlign"));
73
-
74
- 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; }
75
-
76
- 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; }
77
-
78
- var log = (0, _debug["default"])('@pie-lib:editable-html:plugins');
79
-
80
- var SuperscriptIcon = function SuperscriptIcon() {
81
- return /*#__PURE__*/_react["default"].createElement("svg", {
82
- xmlns: "http://www.w3.org/2000/svg",
83
- height: "24px",
84
- viewBox: "0 0 24 24",
85
- width: "24px",
86
- fill: "none"
87
- }, /*#__PURE__*/_react["default"].createElement("path", {
88
- d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
89
- fill: "currentColor"
90
- }));
91
- };
92
-
93
- var SubscriptIcon = function SubscriptIcon() {
94
- return /*#__PURE__*/_react["default"].createElement("svg", {
95
- xmlns: "http://www.w3.org/2000/svg",
96
- height: "24px",
97
- viewBox: "0 0 24 24",
98
- width: "24px",
99
- fill: "none"
100
- }, /*#__PURE__*/_react["default"].createElement("path", {
101
- d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
102
- fill: "currentColor"
103
- }));
104
- };
105
-
106
- var HeadingIcon = function HeadingIcon() {
107
- return /*#__PURE__*/_react["default"].createElement("svg", {
108
- width: "30",
109
- height: "28",
110
- viewBox: "0 0 30 28",
111
- fill: "none",
112
- xmlns: "http://www.w3.org/2000/svg",
113
- style: {
114
- width: '20px',
115
- height: '18px'
116
- }
117
- }, /*#__PURE__*/_react["default"].createElement("path", {
118
- d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
119
- fill: "currentColor"
120
- }));
121
- };
122
-
123
- var STYLES_MAP = {
124
- h3: {
125
- fontSize: 'inherit',
126
- fontWeight: 'inherit'
127
- },
128
- blockquote: {
129
- background: '#f9f9f9',
130
- borderLeft: '5px solid #ccc',
131
- margin: '1.5em 10px',
132
- padding: '.5em 10px'
133
- }
134
- };
135
-
136
- function MarkHotkey(options) {
137
- var type = options.type,
138
- key = options.key,
139
- icon = options.icon,
140
- tag = options.tag; // Return our "plugin" object, containing the `onKeyDown` handler.
141
-
142
- return {
143
- name: type,
144
- toolbar: {
145
- isMark: true,
146
- type: type,
147
- icon: icon,
148
- onToggle: function onToggle(change) {
149
- log('[onToggleMark] type: ', type);
150
- var selection = change.value.selection;
151
-
152
- if (['blockquote', 'h3'].includes(type)) {
153
- var texts = change.value.document.getTextsAtRangeAsArray(selection);
154
- var onlyOneText = texts.length === 1;
155
- var hasMark = false;
156
- var sameMark = true;
157
- texts.forEach(function (t) {
158
- var marks = t.getMarksAsArray();
159
- var markIsThere = marks.find(function (m) {
160
- return m.type === type;
161
- });
162
-
163
- if (!markIsThere) {
164
- // not all texts have this mark
165
- sameMark = false;
166
- } else {
167
- // at least one mark
168
- hasMark = true;
169
- }
170
- });
171
- var shouldContinue = onlyOneText || sameMark || !hasMark;
172
-
173
- if (!shouldContinue) {
174
- return change;
175
- }
176
-
177
- if (selection.startKey === selection.endKey && selection.anchorOffset === selection.focusOffset) {
178
- var textNode = change.value.document.getNode(selection.startKey); // select the whole line if there is no selection
179
-
180
- change.moveFocusTo(textNode.key, 0).moveAnchorTo(textNode.key, textNode.text.length); // remove toggle
181
-
182
- var _hasMark = change.value.activeMarks.find(function (entry) {
183
- return entry.type === type;
184
- });
185
-
186
- if (_hasMark) {
187
- change.removeMark(_hasMark);
188
- } else {
189
- var newMark = _slate.Mark.create(type);
190
-
191
- change.addMark(newMark);
192
- } // move focus to end of text
193
-
194
-
195
- return change.moveFocusTo(textNode.key, textNode.text.length).moveAnchorTo(textNode.key, textNode.text.length);
196
- }
197
- }
198
-
199
- return change.toggleMark(type);
200
- }
201
- },
202
- renderMark: function renderMark(props) {
203
- if (props.mark.type === type) {
204
- var _ref = props.node || {},
205
- data = _ref.data;
206
-
207
- var jsonData = (data === null || data === void 0 ? void 0 : data.toJSON()) || {};
208
- var K = tag || type;
209
- var additionalStyles = STYLES_MAP[K];
210
-
211
- if (additionalStyles) {
212
- if (!jsonData.attributes) {
213
- jsonData.attributes = {};
214
- }
215
-
216
- jsonData.attributes.style = _objectSpread(_objectSpread({}, jsonData.attributes.style), additionalStyles);
217
- }
218
-
219
- return /*#__PURE__*/_react["default"].createElement(K, jsonData.attributes, props.children);
220
- }
221
- },
222
- onKeyDown: function onKeyDown(event, change) {
223
- // Check that the key pressed matches our `key` option.
224
- if (!event.metaKey || event.key != key) return; // Prevent the default characters from being inserted.
225
-
226
- event.preventDefault(); // Toggle the mark `type`.
227
-
228
- change.toggleMark(type);
229
- return true;
230
- }
231
- };
232
- }
233
-
234
- var ALL_PLUGINS = ['bold', // 'code',
235
- 'html', 'extraCSSRules', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'text-align', 'blockquote', 'h3', 'table', 'video', 'audio', 'responseArea', 'redo', 'undo', 'superscript', 'subscript'];
236
- exports.ALL_PLUGINS = ALL_PLUGINS;
237
- var DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
238
- return !['responseArea', 'h3', 'blockquote'].includes(plug);
239
- });
240
- exports.DEFAULT_PLUGINS = DEFAULT_PLUGINS;
241
- var ICON_MAP = {
242
- undo: _Undo["default"],
243
- redo: _Redo["default"]
244
- };
245
-
246
- function UndoRedo(type) {
247
- var IconToUse = ICON_MAP[type];
248
- return {
249
- name: type,
250
- toolbar: {
251
- type: type,
252
- icon: /*#__PURE__*/_react["default"].createElement(IconToUse, null),
253
- ariaLabel: type === 'undo' ? 'Undo (revert the last action)' : 'Redo (reapply the last undone action)',
254
- onClick: function onClick(value, onChange) {
255
- var change = value.change();
256
- onChange(change[type]());
257
- }
258
- }
259
- };
260
- }
261
-
262
- function EnterHandlingPlugin() {
263
- return {
264
- name: 'enterHandling',
265
- onKeyDown: function onKeyDown(event, change) {
266
- if (_slateHotkeys["default"].isSplitBlock(event) && !_slateDevEnvironment.IS_IOS) {
267
- if (change.value.isInVoid) {
268
- return change.collapseToStartOfNextText();
269
- }
270
-
271
- change.splitBlock();
272
- var range = change.value.selection;
273
- var newBlock = change.value.document.getClosestBlock(range.startKey);
274
-
275
- if (newBlock.type !== 'paragraph') {
276
- change.setNodeByKey(newBlock.key, {
277
- type: 'paragraph'
278
- });
279
- }
280
-
281
- return change;
282
- }
283
-
284
- return undefined;
285
- }
286
- };
287
- }
288
-
289
- var buildPlugins = function buildPlugins(activePlugins, customPlugins, opts) {
290
- log('[buildPlugins] opts: ', opts);
291
- activePlugins = activePlugins || DEFAULT_PLUGINS;
292
-
293
- var addIf = function addIf(key, p) {
294
- return activePlugins.includes(key) && p;
295
- };
296
-
297
- var imagePlugin = opts.image && opts.image.onDelete && (0, _image["default"])(opts.image);
298
- var mathPlugin = (0, _math["default"])(opts.math);
299
- var respAreaPlugin = opts.responseArea && opts.responseArea.type && (0, _respArea["default"])(opts.responseArea, (0, _compact["default"])([mathPlugin]));
300
- var cssPlugin = !(0, _isEmpty["default"])(opts.extraCSSRules) && (0, _css["default"])(opts.extraCSSRules);
301
- var languageCharactersPlugins = ((opts === null || opts === void 0 ? void 0 : opts.languageCharacters) || []).map(function (config) {
302
- return (0, _characters["default"])(_objectSpread(_objectSpread({}, config), {}, {
303
- keyPadCharacterRef: opts.keyPadCharacterRef,
304
- setKeypadInteraction: opts.setKeypadInteraction
305
- }));
306
- });
307
- var tablePlugins = [imagePlugin, mathPlugin, respAreaPlugin].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins));
308
-
309
- if (opts.responseArea && opts.responseArea.type === 'math-templated') {
310
- tablePlugins.push(respAreaPlugin);
311
- }
312
-
313
- var builtCustomPlugins = [];
314
- customPlugins.forEach(function (customPlugin) {
315
- var _ref2 = customPlugin || {},
316
- event = _ref2.event,
317
- icon = _ref2.icon,
318
- iconType = _ref2.iconType,
319
- iconAlt = _ref2.iconAlt;
320
-
321
- function isValidEventName(eventName) {
322
- // Check if eventName is a non-empty string
323
- if (typeof eventName !== 'string' || eventName.length === 0) {
324
- return false;
325
- } // Regular expression to match valid event names (only alphanumeric characters and underscore)
326
-
327
-
328
- var regex = /^[a-zA-Z0-9_]+$/; // Check if the eventName matches the regular expression
329
-
330
- return regex.test(eventName);
331
- }
332
-
333
- if (!isValidEventName(event)) {
334
- console.error("The event name: ".concat(event, " is not a valid event name!"));
335
- return;
336
- }
337
-
338
- if (!icon && !iconType && !iconAlt) {
339
- console.error('Your custom button requires icon, iconType and iconAlt');
340
- return;
341
- }
342
-
343
- builtCustomPlugins.push((0, _customPlugin["default"])('custom-plugin', customPlugin));
344
- });
345
- return (0, _compact["default"])([addIf('table', (0, _table["default"])(opts.table, (0, _compact["default"])(tablePlugins))), addIf('bold', MarkHotkey({
346
- key: 'b',
347
- type: 'bold',
348
- icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
349
- tag: 'strong'
350
- })), // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),
351
- addIf('italic', MarkHotkey({
352
- key: 'i',
353
- type: 'italic',
354
- icon: /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null),
355
- tag: 'em'
356
- })), addIf('strikethrough', MarkHotkey({
357
- key: '~',
358
- type: 'strikethrough',
359
- icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
360
- tag: 'del'
361
- })), addIf('underline', MarkHotkey({
362
- key: 'u',
363
- type: 'underline',
364
- icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
365
- tag: 'u'
366
- })), // icon should be modifies accordingly
367
- addIf('superscript', MarkHotkey({
368
- type: 'sup',
369
- icon: /*#__PURE__*/_react["default"].createElement(SuperscriptIcon, null),
370
- tag: 'sup'
371
- })), // icon should be modifies accordingly
372
- addIf('subscript', MarkHotkey({
373
- type: 'sub',
374
- icon: /*#__PURE__*/_react["default"].createElement(SubscriptIcon, null),
375
- tag: 'sub'
376
- })), addIf('image', imagePlugin), addIf('video', (0, _media["default"])('video', opts.media)), addIf('audio', (0, _media["default"])('audio', opts.media)), addIf('math', mathPlugin)].concat((0, _toConsumableArray2["default"])(languageCharactersPlugins.map(function (plugin) {
377
- return addIf('languageCharacters', plugin);
378
- })), [addIf('text-align', (0, _textAlign["default"])(opts.textAlign)), addIf('blockquote', MarkHotkey({
379
- key: 'q',
380
- type: 'blockquote',
381
- icon: /*#__PURE__*/_react["default"].createElement(_FormatQuote["default"], null),
382
- tag: 'blockquote'
383
- })), addIf('h3', MarkHotkey({
384
- key: 'h3',
385
- type: 'h3',
386
- icon: /*#__PURE__*/_react["default"].createElement(HeadingIcon, null),
387
- tag: 'h3'
388
- })), addIf('bulleted-list', (0, _list["default"])({
389
- key: 'l',
390
- type: 'ul_list',
391
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null)
392
- })), addIf('numbered-list', (0, _list["default"])({
393
- key: 'n',
394
- type: 'ol_list',
395
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)
396
- })), addIf('undo', UndoRedo('undo')), addIf('redo', UndoRedo('redo')), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
397
- shift: true
398
- })], builtCustomPlugins, [addIf('responseArea', respAreaPlugin), cssPlugin, addIf('html', (0, _html["default"])(opts.html)), EnterHandlingPlugin(), (0, _rendering["default"])()]));
399
- };
400
-
401
- exports.buildPlugins = buildPlugins;
402
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wbHVnaW5zL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJTdXBlcnNjcmlwdEljb24iLCJTdWJzY3JpcHRJY29uIiwiSGVhZGluZ0ljb24iLCJ3aWR0aCIsImhlaWdodCIsIlNUWUxFU19NQVAiLCJoMyIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImJsb2NrcXVvdGUiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyTGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJNYXJrSG90a2V5Iiwib3B0aW9ucyIsInR5cGUiLCJrZXkiLCJpY29uIiwidGFnIiwibmFtZSIsInRvb2xiYXIiLCJpc01hcmsiLCJvblRvZ2dsZSIsImNoYW5nZSIsInNlbGVjdGlvbiIsInZhbHVlIiwiaW5jbHVkZXMiLCJ0ZXh0cyIsImRvY3VtZW50IiwiZ2V0VGV4dHNBdFJhbmdlQXNBcnJheSIsIm9ubHlPbmVUZXh0IiwibGVuZ3RoIiwiaGFzTWFyayIsInNhbWVNYXJrIiwiZm9yRWFjaCIsInQiLCJtYXJrcyIsImdldE1hcmtzQXNBcnJheSIsIm1hcmtJc1RoZXJlIiwiZmluZCIsIm0iLCJzaG91bGRDb250aW51ZSIsInN0YXJ0S2V5IiwiZW5kS2V5IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJ0ZXh0Tm9kZSIsImdldE5vZGUiLCJtb3ZlRm9jdXNUbyIsIm1vdmVBbmNob3JUbyIsInRleHQiLCJhY3RpdmVNYXJrcyIsImVudHJ5IiwicmVtb3ZlTWFyayIsIm5ld01hcmsiLCJNYXJrIiwiY3JlYXRlIiwiYWRkTWFyayIsInRvZ2dsZU1hcmsiLCJyZW5kZXJNYXJrIiwicHJvcHMiLCJtYXJrIiwibm9kZSIsImRhdGEiLCJqc29uRGF0YSIsInRvSlNPTiIsIksiLCJhZGRpdGlvbmFsU3R5bGVzIiwiYXR0cmlidXRlcyIsInN0eWxlIiwiY2hpbGRyZW4iLCJvbktleURvd24iLCJldmVudCIsIm1ldGFLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkFMTF9QTFVHSU5TIiwiREVGQVVMVF9QTFVHSU5TIiwiZmlsdGVyIiwicGx1ZyIsIklDT05fTUFQIiwidW5kbyIsIlVuZG8iLCJyZWRvIiwiUmVkbyIsIlVuZG9SZWRvIiwiSWNvblRvVXNlIiwiYXJpYUxhYmVsIiwib25DbGljayIsIm9uQ2hhbmdlIiwiRW50ZXJIYW5kbGluZ1BsdWdpbiIsIkhvdGtleXMiLCJpc1NwbGl0QmxvY2siLCJJU19JT1MiLCJpc0luVm9pZCIsImNvbGxhcHNlVG9TdGFydE9mTmV4dFRleHQiLCJzcGxpdEJsb2NrIiwicmFuZ2UiLCJuZXdCbG9jayIsImdldENsb3Nlc3RCbG9jayIsInNldE5vZGVCeUtleSIsInVuZGVmaW5lZCIsImJ1aWxkUGx1Z2lucyIsImFjdGl2ZVBsdWdpbnMiLCJjdXN0b21QbHVnaW5zIiwib3B0cyIsImFkZElmIiwicCIsImltYWdlUGx1Z2luIiwiaW1hZ2UiLCJvbkRlbGV0ZSIsIm1hdGhQbHVnaW4iLCJtYXRoIiwicmVzcEFyZWFQbHVnaW4iLCJyZXNwb25zZUFyZWEiLCJjc3NQbHVnaW4iLCJleHRyYUNTU1J1bGVzIiwibGFuZ3VhZ2VDaGFyYWN0ZXJzUGx1Z2lucyIsImxhbmd1YWdlQ2hhcmFjdGVycyIsIm1hcCIsImNvbmZpZyIsImtleVBhZENoYXJhY3RlclJlZiIsInNldEtleXBhZEludGVyYWN0aW9uIiwidGFibGVQbHVnaW5zIiwicHVzaCIsImJ1aWx0Q3VzdG9tUGx1Z2lucyIsImN1c3RvbVBsdWdpbiIsImljb25UeXBlIiwiaWNvbkFsdCIsImlzVmFsaWRFdmVudE5hbWUiLCJldmVudE5hbWUiLCJyZWdleCIsInRlc3QiLCJjb25zb2xlIiwiZXJyb3IiLCJ0YWJsZSIsIm1lZGlhIiwicGx1Z2luIiwidGV4dEFsaWduIiwic2hpZnQiLCJodG1sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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SUFBQUEsSUFBSSxlQUFFLGdDQUFDLDhCQUFEO0FBQW5DLEdBQUwsQ0FBbEIsQ0EzQkEsRUE0Qkx3RixLQUFLLENBQUMsZUFBRCxFQUFrQixzQkFBSztBQUFFekYsSUFBQUEsR0FBRyxFQUFFLEdBQVA7QUFBWUQsSUFBQUEsSUFBSSxFQUFFLFNBQWxCO0FBQTZCRSxJQUFBQSxJQUFJLGVBQUUsZ0NBQUMsOEJBQUQ7QUFBbkMsR0FBTCxDQUFsQixDQTVCQSxFQTZCTHdGLEtBQUssQ0FBQyxNQUFELEVBQVNyQixRQUFRLENBQUMsTUFBRCxDQUFqQixDQTdCQSxFQThCTHFCLEtBQUssQ0FBQyxNQUFELEVBQVNyQixRQUFRLENBQUMsTUFBRCxDQUFqQixDQTlCQSxFQStCTCx5QkFBY29CLElBQUksQ0FBQ3BGLE9BQW5CLENBL0JLLEVBZ0NMLGdDQUFnQjtBQUFFc0gsSUFBQUEsS0FBSyxFQUFFO0FBQVQsR0FBaEIsQ0FoQ0ssR0FpQ0ZkLGtCQWpDRSxHQWtDTG5CLEtBQUssQ0FBQyxjQUFELEVBQWlCTyxjQUFqQixDQWxDQSxFQW1DTEUsU0FuQ0ssRUFvQ0xULEtBQUssQ0FBQyxNQUFELEVBQVMsc0JBQVdELElBQUksQ0FBQ21DLElBQWhCLENBQVQsQ0FwQ0EsRUFxQ0xsRCxtQkFBbUIsRUFyQ2QsRUFzQ0wsNEJBdENLLEdBQVA7QUF3Q0QsQ0FsR00iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSG90a2V5cyBmcm9tICdzbGF0ZS1ob3RrZXlzJztcbmltcG9ydCB7IElTX0lPUyB9IGZyb20gJ3NsYXRlLWRldi1lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBNYXJrIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IEJvbGQgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdEJvbGQnO1xuaW1wb3J0IEZvcm1hdFF1b3RlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRRdW90ZSc7XG4vL2ltcG9ydCBDb2RlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Db2RlJztcbmltcG9ydCBCdWxsZXRlZExpc3RJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRMaXN0QnVsbGV0ZWQnO1xuaW1wb3J0IE51bWJlcmVkTGlzdEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdExpc3ROdW1iZXJlZCc7XG5pbXBvcnQgUmVkbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvUmVkbyc7XG5pbXBvcnQgVW5kbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVW5kbyc7XG5pbXBvcnQgSW1hZ2VQbHVnaW4gZnJvbSAnLi9pbWFnZSc7XG5pbXBvcnQgTWVkaWFQbHVnaW4gZnJvbSAnLi9tZWRpYSc7XG5pbXBvcnQgQ2hhcmFjdGVyc1BsdWdpbiBmcm9tICcuL2NoYXJhY3RlcnMnO1xuaW1wb3J0IEl0YWxpYyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0SXRhbGljJztcbmltcG9ydCBNYXRoUGx1Z2luIGZyb20gJy4vbWF0aCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0cmlrZXRocm91Z2ggZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdFN0cmlrZXRocm91Z2gnO1xuaW1wb3J0IFRvb2xiYXJQbHVnaW4gZnJvbSAnLi90b29sYmFyJztcbmltcG9ydCBVbmRlcmxpbmUgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdFVuZGVybGluZWQnO1xuaW1wb3J0IGNvbXBhY3QgZnJvbSAnbG9kYXNoL2NvbXBhY3QnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IFNvZnRCcmVha1BsdWdpbiBmcm9tICdzbGF0ZS1zb2Z0LWJyZWFrJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTGlzdCBmcm9tICcuL2xpc3QnO1xuaW1wb3J0IFRhYmxlUGx1Z2luIGZyb20gJy4vdGFibGUnO1xuaW1wb3J0IFJlc3BBcmVhUGx1Z2luIGZyb20gJy4vcmVzcEFyZWEnO1xuaW1wb3J0IEh0bWxQbHVnaW4gZnJvbSAnLi9odG1sJztcbmltcG9ydCBDU1NQbHVnaW4gZnJvbSAnLi9jc3MnO1xuaW1wb3J0IEN1c3RvbVBsdWdpbiBmcm9tICcuL2N1c3RvbVBsdWdpbic7XG5pbXBvcnQgUmVuZGVyaW5nUGx1Z2luIGZyb20gJy4vcmVuZGVyaW5nJztcbmltcG9ydCBUZXh0QWxpZ24gZnJvbSAnLi90ZXh0QWxpZ24nO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zJyk7XG5cbmNvbnN0IFN1cGVyc2NyaXB0SWNvbiA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTIyLDdoLTJ2MWgzdjFoLTRWN2MwLTAuNTUsMC40NS0xLDEtMWgyVjVoLTNWNGgzYzAuNTUsMCwxLDAuNDUsMSwxdjFDMjMsNi41NSwyMi41NSw3LDIyLDd6IE01Ljg4LDIwaDIuNjZsMy40LTUuNDJoMC4xMiBsMy40LDUuNDJoMi42NmwtNC42NS03LjI3TDE3LjgxLDZoLTIuNjhsLTMuMDcsNC45OWgtMC4xMkw4Ljg1LDZINi4xOWw0LjMyLDYuNzNMNS44OCwyMHpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5jb25zdCBTdWJzY3JpcHRJY29uID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjIsMThoLTJ2MWgzdjFoLTR2LTJjMC0wLjU1LDAuNDUtMSwxLTFoMnYtMWgtM3YtMWgzYzAuNTUsMCwxLDAuNDUsMSwxdjFDMjMsMTcuNTUsMjIuNTUsMTgsMjIsMTh6IE01Ljg4LDE4aDIuNjYgbDMuNC01LjQyaDAuMTJsMy40LDUuNDJoMi42NmwtNC42NS03LjI3TDE3LjgxLDRoLTIuNjhsLTMuMDcsNC45OWgtMC4xMkw4Ljg1LDRINi4xOWw0LjMyLDYuNzNMNS44OCwxOHpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5jb25zdCBIZWFkaW5nSWNvbiA9ICgpID0+IChcbiAgPHN2Z1xuICAgIHdpZHRoPVwiMzBcIlxuICAgIGhlaWdodD1cIjI4XCJcbiAgICB2aWV3Qm94PVwiMCAwIDMwIDI4XCJcbiAgICBmaWxsPVwibm9uZVwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgc3R5bGU9e3sgd2lkdGg6ICcyMHB4JywgaGVpZ2h0OiAnMThweCcgfX1cbiAgPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTI3IDRWMjRIMjlDMjkuNSAyNCAzMCAyNC41IDMwIDI1VjI3QzMwIDI3LjU2MjUgMjkuNSAyOCAyOSAyOEgxOUMxOC40Mzc1IDI4IDE4IDI3LjU2MjUgMTggMjdWMjVDMTggMjQuNSAxOC40Mzc1IDI0IDE5IDI0SDIxVjE2SDlWMjRIMTFDMTEuNSAyNCAxMiAyNC41IDEyIDI1VjI3QzEyIDI3LjU2MjUgMTEuNSAyOCAxMSAyOEgxQzAuNDM3NSAyOCAwIDI3LjU2MjUgMCAyN1YyNUMwIDI0LjUgMC40Mzc1IDI0IDEgMjRIM1Y0SDFDMC40Mzc1IDQgMCAzLjU2MjUgMCAzVjFDMCAwLjUgMC40Mzc1IDAgMSAwSDExQzExLjUgMCAxMiAwLjUgMTIgMVYzQzEyIDMuNTYyNSAxMS41IDQgMTEgNEg5VjEySDIxVjRIMTlDMTguNDM3NSA0IDE4IDMuNTYyNSAxOCAzVjFDMTggMC41IDE4LjQzNzUgMCAxOSAwSDI5QzI5LjUgMCAzMCAwLjUgMzAgMVYzQzMwIDMuNTYyNSAyOS41IDQgMjkgNEgyN1pcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuY29uc3QgU1RZTEVTX01BUCA9IHtcbiAgaDM6IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgIGZvbnRXZWlnaHQ6ICdpbmhlcml0JyxcbiAgfSxcbiAgYmxvY2txdW90ZToge1xuICAgIGJhY2tncm91bmQ6ICcjZjlmOWY5JyxcbiAgICBib3JkZXJMZWZ0OiAnNXB4IHNvbGlkICNjY2MnLFxuICAgIG1hcmdpbjogJzEuNWVtIDEwcHgnLFxuICAgIHBhZGRpbmc6ICcuNWVtIDEwcHgnLFxuICB9LFxufTtcblxuZnVuY3Rpb24gTWFya0hvdGtleShvcHRpb25zKSB7XG4gIGNvbnN0IHsgdHlwZSwga2V5LCBpY29uLCB0YWcgfSA9IG9wdGlvbnM7XG5cbiAgLy8gUmV0dXJuIG91ciBcInBsdWdpblwiIG9iamVjdCwgY29udGFpbmluZyB0aGUgYG9uS2V5RG93bmAgaGFuZGxlci5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0eXBlLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIGlzTWFyazogdHJ1ZSxcbiAgICAgIHR5cGUsXG4gICAgICBpY29uLFxuICAgICAgb25Ub2dnbGU6IChjaGFuZ2UpID0+IHtcbiAgICAgICAgbG9nKCdbb25Ub2dnbGVNYXJrXSB0eXBlOiAnLCB0eXBlKTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGNoYW5nZS52YWx1ZTtcblxuICAgICAgICBpZiAoWydibG9ja3F1b3RlJywgJ2gzJ10uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0cyA9IGNoYW5nZS52YWx1ZS5kb2N1bWVudC5nZXRUZXh0c0F0UmFuZ2VBc0FycmF5KHNlbGVjdGlvbik7XG4gICAgICAgICAgY29uc3Qgb25seU9uZVRleHQgPSB0ZXh0cy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgbGV0IGhhc01hcmsgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgc2FtZU1hcmsgPSB0cnVlO1xuXG4gICAgICAgICAgdGV4dHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFya3MgPSB0LmdldE1hcmtzQXNBcnJheSgpO1xuICAgICAgICAgICAgY29uc3QgbWFya0lzVGhlcmUgPSBtYXJrcy5maW5kKChtKSA9PiBtLnR5cGUgPT09IHR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIW1hcmtJc1RoZXJlKSB7XG4gICAgICAgICAgICAgIC8vIG5vdCBhbGwgdGV4dHMgaGF2ZSB0aGlzIG1hcmtcbiAgICAgICAgICAgICAgc2FtZU1hcmsgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBtYXJrXG4gICAgICAgICAgICAgIGhhc01hcmsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBvbmx5T25lVGV4dCB8fCBzYW1lTWFyayB8fCAhaGFzTWFyaztcblxuICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5zdGFydEtleSA9PT0gc2VsZWN0aW9uLmVuZEtleSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldE5vZGUoc2VsZWN0aW9uLnN0YXJ0S2V5KTtcblxuICAgICAgICAgICAgLy8gc2VsZWN0IHRoZSB3aG9sZSBsaW5lIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvblxuICAgICAgICAgICAgY2hhbmdlLm1vdmVGb2N1c1RvKHRleHROb2RlLmtleSwgMCkubW92ZUFuY2hvclRvKHRleHROb2RlLmtleSwgdGV4dE5vZGUudGV4dC5sZW5ndGgpO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdG9nZ2xlXG4gICAgICAgICAgICBjb25zdCBoYXNNYXJrID0gY2hhbmdlLnZhbHVlLmFjdGl2ZU1hcmtzLmZpbmQoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnRyeS50eXBlID09PSB0eXBlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChoYXNNYXJrKSB7XG4gICAgICAgICAgICAgIGNoYW5nZS5yZW1vdmVNYXJrKGhhc01hcmspO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TWFyayA9IE1hcmsuY3JlYXRlKHR5cGUpO1xuXG4gICAgICAgICAgICAgIGNoYW5nZS5hZGRNYXJrKG5ld01hcmspO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtb3ZlIGZvY3VzIHRvIGVuZCBvZiB0ZXh0XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlXG4gICAgICAgICAgICAgIC5tb3ZlRm9jdXNUbyh0ZXh0Tm9kZS5rZXksIHRleHROb2RlLnRleHQubGVuZ3RoKVxuICAgICAgICAgICAgICAubW92ZUFuY2hvclRvKHRleHROb2RlLmtleSwgdGV4dE5vZGUudGV4dC5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGFuZ2UudG9nZ2xlTWFyayh0eXBlKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZW5kZXJNYXJrKHByb3BzKSB7XG4gICAgICBpZiAocHJvcHMubWFyay50eXBlID09PSB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcHJvcHMubm9kZSB8fCB7fTtcbiAgICAgICAgY29uc3QganNvbkRhdGEgPSBkYXRhPy50b0pTT04oKSB8fCB7fTtcbiAgICAgICAgY29uc3QgSyA9IHRhZyB8fCB0eXBlO1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsU3R5bGVzID0gU1RZTEVTX01BUFtLXTtcblxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlcykge1xuICAgICAgICAgIGlmICghanNvbkRhdGEuYXR0cmlidXRlcykge1xuICAgICAgICAgICAganNvbkRhdGEuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGpzb25EYXRhLmF0dHJpYnV0ZXMuc3R5bGUgPSB7XG4gICAgICAgICAgICAuLi5qc29uRGF0YS5hdHRyaWJ1dGVzLnN0eWxlLFxuICAgICAgICAgICAgLi4uYWRkaXRpb25hbFN0eWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxLIHsuLi5qc29uRGF0YS5hdHRyaWJ1dGVzfT57cHJvcHMuY2hpbGRyZW59PC9LPjtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uS2V5RG93bihldmVudCwgY2hhbmdlKSB7XG4gICAgICAvLyBDaGVjayB0aGF0IHRoZSBrZXkgcHJlc3NlZCBtYXRjaGVzIG91ciBga2V5YCBvcHRpb24uXG4gICAgICBpZiAoIWV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQua2V5ICE9IGtleSkgcmV0dXJuO1xuXG4gICAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IGNoYXJhY3RlcnMgZnJvbSBiZWluZyBpbnNlcnRlZC5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIC8vIFRvZ2dsZSB0aGUgbWFyayBgdHlwZWAuXG4gICAgICBjaGFuZ2UudG9nZ2xlTWFyayh0eXBlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBBTExfUExVR0lOUyA9IFtcbiAgJ2JvbGQnLFxuICAvLyAnY29kZScsXG4gICdodG1sJyxcbiAgJ2V4dHJhQ1NTUnVsZXMnLFxuICAnaXRhbGljJyxcbiAgJ3VuZGVybGluZScsXG4gICdzdHJpa2V0aHJvdWdoJyxcbiAgJ2J1bGxldGVkLWxpc3QnLFxuICAnbnVtYmVyZWQtbGlzdCcsXG4gICdpbWFnZScsXG4gICdtYXRoJyxcbiAgJ2xhbmd1YWdlQ2hhcmFjdGVycycsXG4gICd0ZXh0LWFsaWduJyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnaDMnLFxuICAndGFibGUnLFxuICAndmlkZW8nLFxuICAnYXVkaW8nLFxuICAncmVzcG9uc2VBcmVhJyxcbiAgJ3JlZG8nLFxuICAndW5kbycsXG4gICdzdXBlcnNjcmlwdCcsXG4gICdzdWJzY3JpcHQnLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUExVR0lOUyA9IEFMTF9QTFVHSU5TLmZpbHRlcigocGx1ZykgPT4gIVsncmVzcG9uc2VBcmVhJywgJ2gzJywgJ2Jsb2NrcXVvdGUnXS5pbmNsdWRlcyhwbHVnKSk7XG5cbmNvbnN0IElDT05fTUFQID0ge1xuICB1bmRvOiBVbmRvLFxuICByZWRvOiBSZWRvLFxufTtcbmZ1bmN0aW9uIFVuZG9SZWRvKHR5cGUpIHtcbiAgY29uc3QgSWNvblRvVXNlID0gSUNPTl9NQVBbdHlwZV07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0eXBlLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIHR5cGUsXG4gICAgICBpY29uOiA8SWNvblRvVXNlIC8+LFxuICAgICAgYXJpYUxhYmVsOiB0eXBlID09PSAndW5kbycgPyAnVW5kbyAocmV2ZXJ0IHRoZSBsYXN0IGFjdGlvbiknIDogJ1JlZG8gKHJlYXBwbHkgdGhlIGxhc3QgdW5kb25lIGFjdGlvbiknLFxuICAgICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKTtcblxuICAgICAgICBvbkNoYW5nZShjaGFuZ2VbdHlwZV0oKSk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIEVudGVySGFuZGxpbmdQbHVnaW4oKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2VudGVySGFuZGxpbmcnLFxuICAgIG9uS2V5RG93bjogKGV2ZW50LCBjaGFuZ2UpID0+IHtcbiAgICAgIGlmIChIb3RrZXlzLmlzU3BsaXRCbG9jayhldmVudCkgJiYgIUlTX0lPUykge1xuICAgICAgICBpZiAoY2hhbmdlLnZhbHVlLmlzSW5Wb2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZS5jb2xsYXBzZVRvU3RhcnRPZk5leHRUZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFuZ2Uuc3BsaXRCbG9jaygpO1xuXG4gICAgICAgIGNvbnN0IHJhbmdlID0gY2hhbmdlLnZhbHVlLnNlbGVjdGlvbjtcbiAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBjaGFuZ2UudmFsdWUuZG9jdW1lbnQuZ2V0Q2xvc2VzdEJsb2NrKHJhbmdlLnN0YXJ0S2V5KTtcblxuICAgICAgICBpZiAobmV3QmxvY2sudHlwZSAhPT0gJ3BhcmFncmFwaCcpIHtcbiAgICAgICAgICBjaGFuZ2Uuc2V0Tm9kZUJ5S2V5KG5ld0Jsb2NrLmtleSwge1xuICAgICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbmdlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFBsdWdpbnMgPSAoYWN0aXZlUGx1Z2lucywgY3VzdG9tUGx1Z2lucywgb3B0cykgPT4ge1xuICBsb2coJ1tidWlsZFBsdWdpbnNdIG9wdHM6ICcsIG9wdHMpO1xuXG4gIGFjdGl2ZVBsdWdpbnMgPSBhY3RpdmVQbHVnaW5zIHx8IERFRkFVTFRfUExVR0lOUztcblxuICBjb25zdCBhZGRJZiA9IChrZXksIHApID0+IGFjdGl2ZVBsdWdpbnMuaW5jbHVkZXMoa2V5KSAmJiBwO1xuXG4gIGNvbnN0IGltYWdlUGx1Z2luID0gb3B0cy5pbWFnZSAmJiBvcHRzLmltYWdlLm9uRGVsZXRlICYmIEltYWdlUGx1Z2luKG9wdHMuaW1hZ2UpO1xuICBjb25zdCBtYXRoUGx1Z2luID0gTWF0aFBsdWdpbihvcHRzLm1hdGgpO1xuICBjb25zdCByZXNwQXJlYVBsdWdpbiA9XG4gICAgb3B0cy5yZXNwb25zZUFyZWEgJiYgb3B0cy5yZXNwb25zZUFyZWEudHlwZSAmJiBSZXNwQXJlYVBsdWdpbihvcHRzLnJlc3BvbnNlQXJlYSwgY29tcGFjdChbbWF0aFBsdWdpbl0pKTtcbiAgY29uc3QgY3NzUGx1Z2luID0gIWlzRW1wdHkob3B0cy5leHRyYUNTU1J1bGVzKSAmJiBDU1NQbHVnaW4ob3B0cy5leHRyYUNTU1J1bGVzKTtcblxuICBjb25zdCBsYW5ndWFnZUNoYXJhY3RlcnNQbHVnaW5zID0gKG9wdHM/Lmxhbmd1YWdlQ2hhcmFjdGVycyB8fCBbXSkubWFwKChjb25maWcpID0+XG4gICAgQ2hhcmFjdGVyc1BsdWdpbih7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBrZXlQYWRDaGFyYWN0ZXJSZWY6IG9wdHMua2V5UGFkQ2hhcmFjdGVyUmVmLFxuICAgICAgc2V0S2V5cGFkSW50ZXJhY3Rpb246IG9wdHMuc2V0S2V5cGFkSW50ZXJhY3Rpb24sXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgdGFibGVQbHVnaW5zID0gW2ltYWdlUGx1Z2luLCBtYXRoUGx1Z2luLCByZXNwQXJlYVBsdWdpbiwgLi4ubGFuZ3VhZ2VDaGFyYWN0ZXJzUGx1Z2luc107XG5cbiAgaWYgKG9wdHMucmVzcG9uc2VBcmVhICYmIG9wdHMucmVzcG9uc2VBcmVhLnR5cGUgPT09ICdtYXRoLXRlbXBsYXRlZCcpIHtcbiAgICB0YWJsZVBsdWdpbnMucHVzaChyZXNwQXJlYVBsdWdpbik7XG4gIH1cblxuICBsZXQgYnVpbHRDdXN0b21QbHVnaW5zID0gW107XG5cbiAgY3VzdG9tUGx1Z2lucy5mb3JFYWNoKChjdXN0b21QbHVnaW4pID0+IHtcbiAgICBjb25zdCB7IGV2ZW50LCBpY29uLCBpY29uVHlwZSwgaWNvbkFsdCB9ID0gY3VzdG9tUGx1Z2luIHx8IHt9O1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGV2ZW50TmFtZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJyB8fCBldmVudE5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGV2ZW50IG5hbWVzIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3JlKVxuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlfXSskLztcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50TmFtZSBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgIHJldHVybiByZWdleC50ZXN0KGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkRXZlbnROYW1lKGV2ZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGV2ZW50IG5hbWU6ICR7ZXZlbnR9IGlzIG5vdCBhIHZhbGlkIGV2ZW50IG5hbWUhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpY29uICYmICFpY29uVHlwZSAmJiAhaWNvbkFsdCkge1xuICAgICAgY29uc29sZS5lcnJvcignWW91ciBjdXN0b20gYnV0dG9uIHJlcXVpcmVzIGljb24sIGljb25UeXBlIGFuZCBpY29uQWx0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbHRDdXN0b21QbHVnaW5zLnB1c2goQ3VzdG9tUGx1Z2luKCdjdXN0b20tcGx1Z2luJywgY3VzdG9tUGx1Z2luKSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb21wYWN0KFtcbiAgICBhZGRJZigndGFibGUnLCBUYWJsZVBsdWdpbihvcHRzLnRhYmxlLCBjb21wYWN0KHRhYmxlUGx1Z2lucykpKSxcbiAgICBhZGRJZignYm9sZCcsIE1hcmtIb3RrZXkoeyBrZXk6ICdiJywgdHlwZTogJ2JvbGQnLCBpY29uOiA8Qm9sZCAvPiwgdGFnOiAnc3Ryb25nJyB9KSksXG4gICAgLy8gYWRkSWYoJ2NvZGUnLCBNYXJrSG90a2V5KHsga2V5OiAnYCcsIHR5cGU6ICdjb2RlJywgaWNvbjogPENvZGUgLz4gfSkpLFxuICAgIGFkZElmKCdpdGFsaWMnLCBNYXJrSG90a2V5KHsga2V5OiAnaScsIHR5cGU6ICdpdGFsaWMnLCBpY29uOiA8SXRhbGljIC8+LCB0YWc6ICdlbScgfSkpLFxuICAgIGFkZElmKFxuICAgICAgJ3N0cmlrZXRocm91Z2gnLFxuICAgICAgTWFya0hvdGtleSh7XG4gICAgICAgIGtleTogJ34nLFxuICAgICAgICB0eXBlOiAnc3RyaWtldGhyb3VnaCcsXG4gICAgICAgIGljb246IDxTdHJpa2V0aHJvdWdoIC8+LFxuICAgICAgICB0YWc6ICdkZWwnLFxuICAgICAgfSksXG4gICAgKSxcbiAgICBhZGRJZigndW5kZXJsaW5lJywgTWFya0hvdGtleSh7IGtleTogJ3UnLCB0eXBlOiAndW5kZXJsaW5lJywgaWNvbjogPFVuZGVybGluZSAvPiwgdGFnOiAndScgfSkpLFxuICAgIC8vIGljb24gc2hvdWxkIGJlIG1vZGlmaWVzIGFjY29yZGluZ2x5XG4gICAgYWRkSWYoJ3N1cGVyc2NyaXB0JywgTWFya0hvdGtleSh7IHR5cGU6ICdzdXAnLCBpY29uOiA8U3VwZXJzY3JpcHRJY29uIC8+LCB0YWc6ICdzdXAnIH0pKSxcbiAgICAvLyBpY29uIHNob3VsZCBiZSBtb2RpZmllcyBhY2NvcmRpbmdseVxuICAgIGFkZElmKCdzdWJzY3JpcHQnLCBNYXJrSG90a2V5KHsgdHlwZTogJ3N1YicsIGljb246IDxTdWJzY3JpcHRJY29uIC8+LCB0YWc6ICdzdWInIH0pKSxcbiAgICBhZGRJZignaW1hZ2UnLCBpbWFnZVBsdWdpbiksXG4gICAgYWRkSWYoJ3ZpZGVvJywgTWVkaWFQbHVnaW4oJ3ZpZGVvJywgb3B0cy5tZWRpYSkpLFxuICAgIGFkZElmKCdhdWRpbycsIE1lZGlhUGx1Z2luKCdhdWRpbycsIG9wdHMubWVkaWEpKSxcbiAgICBhZGRJZignbWF0aCcsIG1hdGhQbHVnaW4pLFxuICAgIC4uLmxhbmd1YWdlQ2hhcmFjdGVyc1BsdWdpbnMubWFwKChwbHVnaW4pID0+IGFkZElmKCdsYW5ndWFnZUNoYXJhY3RlcnMnLCBwbHVnaW4pKSxcbiAgICBhZGRJZigndGV4dC1hbGlnbicsIFRleHRBbGlnbihvcHRzLnRleHRBbGlnbikpLFxuICAgIGFkZElmKCdibG9ja3F1b3RlJywgTWFya0hvdGtleSh7IGtleTogJ3EnLCB0eXBlOiAnYmxvY2txdW90ZScsIGljb246IDxGb3JtYXRRdW90ZSAvPiwgdGFnOiAnYmxvY2txdW90ZScgfSkpLFxuICAgIGFkZElmKCdoMycsIE1hcmtIb3RrZXkoeyBrZXk6ICdoMycsIHR5cGU6ICdoMycsIGljb246IDxIZWFkaW5nSWNvbiAvPiwgdGFnOiAnaDMnIH0pKSxcbiAgICBhZGRJZignYnVsbGV0ZWQtbGlzdCcsIExpc3QoeyBrZXk6ICdsJywgdHlwZTogJ3VsX2xpc3QnLCBpY29uOiA8QnVsbGV0ZWRMaXN0SWNvbiAvPiB9KSksXG4gICAgYWRkSWYoJ251bWJlcmVkLWxpc3QnLCBMaXN0KHsga2V5OiAnbicsIHR5cGU6ICdvbF9saXN0JywgaWNvbjogPE51bWJlcmVkTGlzdEljb24gLz4gfSkpLFxuICAgIGFkZElmKCd1bmRvJywgVW5kb1JlZG8oJ3VuZG8nKSksXG4gICAgYWRkSWYoJ3JlZG8nLCBVbmRvUmVkbygncmVkbycpKSxcbiAgICBUb29sYmFyUGx1Z2luKG9wdHMudG9vbGJhciksXG4gICAgU29mdEJyZWFrUGx1Z2luKHsgc2hpZnQ6IHRydWUgfSksXG4gICAgLi4uYnVpbHRDdXN0b21QbHVnaW5zLFxuICAgIGFkZElmKCdyZXNwb25zZUFyZWEnLCByZXNwQXJlYVBsdWdpbiksXG4gICAgY3NzUGx1Z2luLFxuICAgIGFkZElmKCdodG1sJywgSHRtbFBsdWdpbihvcHRzLmh0bWwpKSxcbiAgICBFbnRlckhhbmRsaW5nUGx1Z2luKCksXG4gICAgUmVuZGVyaW5nUGx1Z2luKCksXG4gIF0pO1xufTtcbiJdfQ==
@@ -1,79 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- var _react = _interopRequireDefault(require("react"));
8
-
9
- var _index = _interopRequireWildcard(require("../index"));
10
-
11
- var _debug = _interopRequireDefault(require("debug"));
12
-
13
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
-
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
-
17
- var log = (0, _debug["default"])('@pie-lib:editable-html:test:plugins:list');
18
- describe('ListPlugin', function () {
19
- var next;
20
- describe('deserialize', function () {
21
- next = jest.fn();
22
-
23
- var assertDeserialize = function assertDeserialize(tagName, expectedType) {
24
- it("should deserialize ".concat(tagName, " to ").concat(expectedType), function () {
25
- var out = _index.serialization.deserialize({
26
- tagName: tagName,
27
- children: [],
28
- childNodes: []
29
- }, next);
30
-
31
- expect(out).toMatchObject({
32
- object: 'block',
33
- type: expectedType
34
- });
35
- expect(next).toHaveBeenCalledWith([]);
36
- });
37
- };
38
-
39
- assertDeserialize('ul', 'ul_list');
40
- assertDeserialize('ol', 'ol_list');
41
- assertDeserialize('li', 'list_item');
42
- });
43
- describe('serialize', function () {
44
- var assertSerialize = function assertSerialize(type, expectedType) {
45
- it("should serialize ".concat(type, " to ").concat(expectedType), function () {
46
- var out = _index.serialization.serialize({
47
- object: 'block',
48
- type: type
49
- }, {});
50
-
51
- log('out: ', out);
52
- expect(out.type).toMatch(expectedType);
53
- });
54
- };
55
-
56
- assertSerialize('ul_list', 'ul');
57
- assertSerialize('ol_list', 'ol');
58
- assertSerialize('list_item', 'li');
59
- });
60
- describe('renderNode', function () {
61
- var plugin = (0, _index["default"])({});
62
-
63
- var assertRenderNode = function assertRenderNode(type, expectedType) {
64
- it("should renderNode ".concat(type, " to ").concat(expectedType), function () {
65
- var out = plugin.renderNode({
66
- node: {
67
- type: type
68
- }
69
- });
70
- expect(out.type).toMatch(expectedType);
71
- });
72
- };
73
-
74
- assertRenderNode('ul_list', 'ul');
75
- assertRenderNode('ol_list', 'ol');
76
- assertRenderNode('list_item', 'li');
77
- });
78
- });
79
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL2xpc3QvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwibmFtZXMiOlsibG9nIiwiZGVzY3JpYmUiLCJuZXh0IiwiamVzdCIsImZuIiwiYXNzZXJ0RGVzZXJpYWxpemUiLCJ0YWdOYW1lIiwiZXhwZWN0ZWRUeXBlIiwiaXQiLCJvdXQiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJjaGlsZHJlbiIsImNoaWxkTm9kZXMiLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0Iiwib2JqZWN0IiwidHlwZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiYXNzZXJ0U2VyaWFsaXplIiwic2VyaWFsaXplIiwidG9NYXRjaCIsInBsdWdpbiIsImFzc2VydFJlbmRlck5vZGUiLCJyZW5kZXJOb2RlIiwibm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSwwQ0FBTixDQUFaO0FBRUFDLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBTTtBQUMzQixNQUFJQyxJQUFKO0FBRUFELEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDNUJDLElBQUFBLElBQUksR0FBR0MsSUFBSSxDQUFDQyxFQUFMLEVBQVA7O0FBRUEsUUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxPQUFELEVBQVVDLFlBQVYsRUFBMkI7QUFDbkRDLE1BQUFBLEVBQUUsOEJBQXVCRixPQUF2QixpQkFBcUNDLFlBQXJDLEdBQXFELFlBQU07QUFDM0QsWUFBTUUsR0FBRyxHQUFHQyxxQkFBY0MsV0FBZCxDQUEwQjtBQUFFTCxVQUFBQSxPQUFPLEVBQVBBLE9BQUY7QUFBV00sVUFBQUEsUUFBUSxFQUFFLEVBQXJCO0FBQXlCQyxVQUFBQSxVQUFVLEVBQUU7QUFBckMsU0FBMUIsRUFBcUVYLElBQXJFLENBQVo7O0FBRUFZLFFBQUFBLE1BQU0sQ0FBQ0wsR0FBRCxDQUFOLENBQVlNLGFBQVosQ0FBMEI7QUFBRUMsVUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJDLFVBQUFBLElBQUksRUFBRVY7QUFBekIsU0FBMUI7QUFDQU8sUUFBQUEsTUFBTSxDQUFDWixJQUFELENBQU4sQ0FBYWdCLG9CQUFiLENBQWtDLEVBQWxDO0FBQ0QsT0FMQyxDQUFGO0FBTUQsS0FQRDs7QUFRQWIsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFNBQVAsQ0FBakI7QUFDQUEsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFNBQVAsQ0FBakI7QUFDQUEsSUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPLFdBQVAsQ0FBakI7QUFDRCxHQWRPLENBQVI7QUFnQkFKLEVBQUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsWUFBTTtBQUMxQixRQUFNa0IsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDRixJQUFELEVBQU9WLFlBQVAsRUFBd0I7QUFDOUNDLE1BQUFBLEVBQUUsNEJBQXFCUyxJQUFyQixpQkFBZ0NWLFlBQWhDLEdBQWdELFlBQU07QUFDdEQsWUFBTUUsR0FBRyxHQUFHQyxxQkFBY1UsU0FBZCxDQUF3QjtBQUFFSixVQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQkMsVUFBQUEsSUFBSSxFQUFKQTtBQUFuQixTQUF4QixFQUFtRCxFQUFuRCxDQUFaOztBQUNBakIsUUFBQUEsR0FBRyxDQUFDLE9BQUQsRUFBVVMsR0FBVixDQUFIO0FBQ0FLLFFBQUFBLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDUSxJQUFMLENBQU4sQ0FBaUJJLE9BQWpCLENBQXlCZCxZQUF6QjtBQUNELE9BSkMsQ0FBRjtBQUtELEtBTkQ7O0FBT0FZLElBQUFBLGVBQWUsQ0FBQyxTQUFELEVBQVksSUFBWixDQUFmO0FBQ0FBLElBQUFBLGVBQWUsQ0FBQyxTQUFELEVBQVksSUFBWixDQUFmO0FBQ0FBLElBQUFBLGVBQWUsQ0FBQyxXQUFELEVBQWMsSUFBZCxDQUFmO0FBQ0QsR0FYTyxDQUFSO0FBYUFsQixFQUFBQSxRQUFRLENBQUMsWUFBRCxFQUFlLFlBQU07QUFDM0IsUUFBSXFCLE1BQU0sR0FBRyx1QkFBSyxFQUFMLENBQWI7O0FBRUEsUUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDTixJQUFELEVBQU9WLFlBQVAsRUFBd0I7QUFDL0NDLE1BQUFBLEVBQUUsNkJBQXNCUyxJQUF0QixpQkFBaUNWLFlBQWpDLEdBQWlELFlBQU07QUFDdkQsWUFBTUUsR0FBRyxHQUFHYSxNQUFNLENBQUNFLFVBQVAsQ0FBa0I7QUFBRUMsVUFBQUEsSUFBSSxFQUFFO0FBQUVSLFlBQUFBLElBQUksRUFBSkE7QUFBRjtBQUFSLFNBQWxCLENBQVo7QUFDQUgsUUFBQUEsTUFBTSxDQUFDTCxHQUFHLENBQUNRLElBQUwsQ0FBTixDQUFpQkksT0FBakIsQ0FBeUJkLFlBQXpCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMRDs7QUFPQWdCLElBQUFBLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxJQUFaLENBQWhCO0FBQ0FBLElBQUFBLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxJQUFaLENBQWhCO0FBQ0FBLElBQUFBLGdCQUFnQixDQUFDLFdBQUQsRUFBYyxJQUFkLENBQWhCO0FBQ0QsR0FiTyxDQUFSO0FBY0QsQ0E5Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBMaXN0LCB7IHNlcmlhbGl6YXRpb24gfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDp0ZXN0OnBsdWdpbnM6bGlzdCcpO1xuXG5kZXNjcmliZSgnTGlzdFBsdWdpbicsICgpID0+IHtcbiAgbGV0IG5leHQ7XG5cbiAgZGVzY3JpYmUoJ2Rlc2VyaWFsaXplJywgKCkgPT4ge1xuICAgIG5leHQgPSBqZXN0LmZuKCk7XG5cbiAgICBjb25zdCBhc3NlcnREZXNlcmlhbGl6ZSA9ICh0YWdOYW1lLCBleHBlY3RlZFR5cGUpID0+IHtcbiAgICAgIGl0KGBzaG91bGQgZGVzZXJpYWxpemUgJHt0YWdOYW1lfSB0byAke2V4cGVjdGVkVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoeyB0YWdOYW1lLCBjaGlsZHJlbjogW10sIGNoaWxkTm9kZXM6IFtdIH0sIG5leHQpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLnRvTWF0Y2hPYmplY3QoeyBvYmplY3Q6ICdibG9jaycsIHR5cGU6IGV4cGVjdGVkVHlwZSB9KTtcbiAgICAgICAgZXhwZWN0KG5leHQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtdKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgYXNzZXJ0RGVzZXJpYWxpemUoJ3VsJywgJ3VsX2xpc3QnKTtcbiAgICBhc3NlcnREZXNlcmlhbGl6ZSgnb2wnLCAnb2xfbGlzdCcpO1xuICAgIGFzc2VydERlc2VyaWFsaXplKCdsaScsICdsaXN0X2l0ZW0nKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlcmlhbGl6ZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRTZXJpYWxpemUgPSAodHlwZSwgZXhwZWN0ZWRUeXBlKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHNlcmlhbGl6ZSAke3R5cGV9IHRvICR7ZXhwZWN0ZWRUeXBlfWAsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoeyBvYmplY3Q6ICdibG9jaycsIHR5cGUgfSwge30pO1xuICAgICAgICBsb2coJ291dDogJywgb3V0KTtcbiAgICAgICAgZXhwZWN0KG91dC50eXBlKS50b01hdGNoKGV4cGVjdGVkVHlwZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFzc2VydFNlcmlhbGl6ZSgndWxfbGlzdCcsICd1bCcpO1xuICAgIGFzc2VydFNlcmlhbGl6ZSgnb2xfbGlzdCcsICdvbCcpO1xuICAgIGFzc2VydFNlcmlhbGl6ZSgnbGlzdF9pdGVtJywgJ2xpJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJOb2RlJywgKCkgPT4ge1xuICAgIGxldCBwbHVnaW4gPSBMaXN0KHt9KTtcblxuICAgIGNvbnN0IGFzc2VydFJlbmRlck5vZGUgPSAodHlwZSwgZXhwZWN0ZWRUeXBlKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHJlbmRlck5vZGUgJHt0eXBlfSB0byAke2V4cGVjdGVkVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHBsdWdpbi5yZW5kZXJOb2RlKHsgbm9kZTogeyB0eXBlIH0gfSk7XG4gICAgICAgIGV4cGVjdChvdXQudHlwZSkudG9NYXRjaChleHBlY3RlZFR5cGUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFJlbmRlck5vZGUoJ3VsX2xpc3QnLCAndWwnKTtcbiAgICBhc3NlcnRSZW5kZXJOb2RlKCdvbF9saXN0JywgJ29sJyk7XG4gICAgYXNzZXJ0UmVuZGVyTm9kZSgnbGlzdF9pdGVtJywgJ2xpJyk7XG4gIH0pO1xufSk7XG4iXX0=