@pie-lib/editable-html 11.1.1 → 11.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -4
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/editor.test.js +470 -0
- package/lib/__tests__/serialization.test.js +246 -0
- package/lib/__tests__/utils.js +106 -0
- package/lib/block-tags.js +25 -0
- package/lib/constants.js +16 -0
- package/lib/editor.js +349 -88
- package/lib/index.js +26 -10
- package/lib/parse-html.js +1 -1
- package/lib/plugins/characters/custom-popper.js +1 -1
- package/lib/plugins/characters/index.js +9 -4
- package/lib/plugins/characters/utils.js +13 -13
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/index.js +397 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/html/icons/index.js +1 -1
- package/lib/plugins/html/index.js +12 -8
- package/lib/plugins/image/__tests__/component.test.js +51 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
- package/lib/plugins/image/__tests__/index.test.js +98 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
- package/lib/plugins/image/__tests__/mock-change.js +25 -0
- package/lib/plugins/image/alt-dialog.js +1 -1
- package/lib/plugins/image/component.js +1 -1
- package/lib/plugins/image/image-toolbar.js +1 -1
- package/lib/plugins/image/index.js +3 -2
- package/lib/plugins/image/insert-image-handler.js +14 -5
- package/lib/plugins/index.js +271 -12
- package/lib/plugins/list/__tests__/index.test.js +79 -0
- package/lib/plugins/list/index.js +131 -1
- package/lib/plugins/math/__tests__/index.test.js +300 -0
- package/lib/plugins/math/index.js +92 -57
- package/lib/plugins/media/__tests__/index.test.js +71 -0
- package/lib/plugins/media/index.js +6 -3
- package/lib/plugins/media/media-dialog.js +99 -58
- package/lib/plugins/media/media-toolbar.js +1 -1
- package/lib/plugins/media/media-wrapper.js +1 -1
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +6 -3
- package/lib/plugins/respArea/drag-in-the-blank/index.js +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +12 -10
- package/lib/plugins/respArea/icons/index.js +1 -1
- package/lib/plugins/respArea/index.js +70 -22
- package/lib/plugins/respArea/inline-dropdown/index.js +11 -6
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/utils.js +17 -2
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/__tests__/index.test.js +442 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
- package/lib/plugins/table/icons/index.js +1 -1
- package/lib/plugins/table/index.js +44 -60
- package/lib/plugins/table/table-toolbar.js +34 -5
- package/lib/plugins/textAlign/icons/index.js +226 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
- package/lib/plugins/toolbar/default-toolbar.js +83 -28
- package/lib/plugins/toolbar/done-button.js +6 -3
- package/lib/plugins/toolbar/editor-and-toolbar.js +19 -20
- package/lib/plugins/toolbar/index.js +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +45 -12
- package/lib/plugins/toolbar/toolbar.js +36 -12
- package/lib/plugins/utils.js +1 -1
- package/lib/serialization.js +234 -45
- package/lib/theme.js +1 -1
- package/package.json +6 -6
- package/src/__tests__/editor.test.jsx +363 -0
- package/src/__tests__/serialization.test.js +291 -0
- package/src/__tests__/utils.js +36 -0
- package/src/block-tags.js +17 -0
- package/src/constants.js +7 -0
- package/src/editor.jsx +303 -49
- package/src/index.jsx +19 -10
- package/src/plugins/characters/index.jsx +11 -3
- package/src/plugins/characters/utils.js +12 -12
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +346 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/index.jsx +9 -6
- package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
- package/src/plugins/image/__tests__/component.test.jsx +41 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
- package/src/plugins/image/__tests__/index.test.js +95 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/image/index.jsx +2 -1
- package/src/plugins/image/insert-image-handler.js +13 -6
- package/src/plugins/index.jsx +248 -5
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +130 -0
- package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
- package/src/plugins/math/__tests__/index.test.jsx +245 -0
- package/src/plugins/math/index.jsx +87 -56
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +3 -2
- package/src/plugins/media/media-dialog.js +106 -57
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
- package/src/plugins/respArea/index.jsx +53 -7
- package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +11 -0
- package/src/plugins/table/CustomTablePlugin.js +113 -0
- package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
- package/src/plugins/table/index.jsx +46 -59
- package/src/plugins/table/table-toolbar.jsx +39 -2
- package/src/plugins/textAlign/icons/index.jsx +139 -0
- package/src/plugins/textAlign/index.jsx +23 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
- package/src/plugins/toolbar/default-toolbar.jsx +80 -20
- package/src/plugins/toolbar/done-button.jsx +3 -1
- package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
- package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
- package/src/plugins/toolbar/toolbar.jsx +31 -8
- package/src/serialization.jsx +213 -38
- package/README.md +0 -45
- package/deploy.sh +0 -16
- package/lib/editor.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/parse-html.js.map +0 -1
- package/lib/plugins/characters/custom-popper.js.map +0 -1
- package/lib/plugins/characters/index.js.map +0 -1
- package/lib/plugins/characters/utils.js.map +0 -1
- package/lib/plugins/html/icons/index.js.map +0 -1
- package/lib/plugins/html/index.js.map +0 -1
- package/lib/plugins/image/alt-dialog.js.map +0 -1
- package/lib/plugins/image/component.js.map +0 -1
- package/lib/plugins/image/image-toolbar.js.map +0 -1
- package/lib/plugins/image/index.js.map +0 -1
- package/lib/plugins/image/insert-image-handler.js.map +0 -1
- package/lib/plugins/index.js.map +0 -1
- package/lib/plugins/list/index.js.map +0 -1
- package/lib/plugins/math/index.js.map +0 -1
- package/lib/plugins/media/index.js.map +0 -1
- package/lib/plugins/media/media-dialog.js.map +0 -1
- package/lib/plugins/media/media-toolbar.js.map +0 -1
- package/lib/plugins/media/media-wrapper.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +0 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +0 -1
- package/lib/plugins/respArea/icons/index.js.map +0 -1
- package/lib/plugins/respArea/index.js.map +0 -1
- package/lib/plugins/respArea/inline-dropdown/index.js.map +0 -1
- package/lib/plugins/respArea/utils.js.map +0 -1
- package/lib/plugins/table/icons/index.js.map +0 -1
- package/lib/plugins/table/index.js.map +0 -1
- package/lib/plugins/table/table-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/default-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/done-button.js.map +0 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/index.js.map +0 -1
- package/lib/plugins/toolbar/toolbar-buttons.js.map +0 -1
- package/lib/plugins/toolbar/toolbar.js.map +0 -1
- package/lib/plugins/utils.js.map +0 -1
- package/lib/serialization.js.map +0 -1
- package/lib/theme.js.map +0 -1
- package/playground/image/data.js +0 -59
- package/playground/image/index.html +0 -22
- package/playground/image/index.jsx +0 -81
- package/playground/index.html +0 -25
- package/playground/mathquill/index.html +0 -22
- package/playground/mathquill/index.jsx +0 -155
- package/playground/package.json +0 -15
- package/playground/prod-test/index.html +0 -22
- package/playground/prod-test/index.jsx +0 -28
- package/playground/schema-override/data.js +0 -29
- package/playground/schema-override/image-plugin.jsx +0 -41
- package/playground/schema-override/index.html +0 -21
- package/playground/schema-override/index.jsx +0 -97
- package/playground/serialization/data.js +0 -29
- package/playground/serialization/image-plugin.jsx +0 -41
- package/playground/serialization/index.html +0 -22
- package/playground/serialization/index.jsx +0 -12
- package/playground/static.json +0 -3
- package/playground/table-examples.html +0 -70
- package/playground/webpack.config.js +0 -42
- package/static.json +0 -1
|
@@ -17,8 +17,12 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
17
17
|
|
|
18
18
|
var _slateEditList = _interopRequireDefault(require("slate-edit-list"));
|
|
19
19
|
|
|
20
|
+
var _options = _interopRequireDefault(require("slate-edit-list/dist/options"));
|
|
21
|
+
|
|
20
22
|
var _debug = _interopRequireDefault(require("debug"));
|
|
21
23
|
|
|
24
|
+
var _this = void 0;
|
|
25
|
+
|
|
22
26
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:list');
|
|
23
27
|
|
|
24
28
|
var b = function b(type, next, childNodes) {
|
|
@@ -66,6 +70,9 @@ exports.serialization = serialization;
|
|
|
66
70
|
var createEditList = function createEditList() {
|
|
67
71
|
var core = (0, _slateEditList["default"])({
|
|
68
72
|
typeDefault: 'span'
|
|
73
|
+
});
|
|
74
|
+
var listOptions = new _options["default"]({
|
|
75
|
+
typeDefault: 'span'
|
|
69
76
|
}); // fix outdated schema
|
|
70
77
|
|
|
71
78
|
if (core.schema && core.schema.blocks) {
|
|
@@ -141,6 +148,86 @@ var createEditList = function createEditList() {
|
|
|
141
148
|
return change.normalize();
|
|
142
149
|
};
|
|
143
150
|
|
|
151
|
+
core.changes.unwrapList = function unwrapList(opts, change) {
|
|
152
|
+
var items = core.utils.getItemsAtRange(change.value);
|
|
153
|
+
|
|
154
|
+
if (items.isEmpty()) {
|
|
155
|
+
return change;
|
|
156
|
+
} // Unwrap the items from their list
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
items.forEach(function (item) {
|
|
160
|
+
return change.unwrapNodeByKey(item.key, {
|
|
161
|
+
normalize: false
|
|
162
|
+
});
|
|
163
|
+
}); // Parent of the list of the items
|
|
164
|
+
|
|
165
|
+
var firstItem = items.first();
|
|
166
|
+
var parent = change.value.document.getParent(firstItem.key);
|
|
167
|
+
var index = parent.nodes.findIndex(function (node) {
|
|
168
|
+
return node.key === firstItem.key;
|
|
169
|
+
}); // Unwrap the items' children
|
|
170
|
+
|
|
171
|
+
items.forEach(function (item) {
|
|
172
|
+
item.nodes.forEach(function (node) {
|
|
173
|
+
change.moveNodeByKey(node.key, parent.key, index, {
|
|
174
|
+
normalize: false
|
|
175
|
+
});
|
|
176
|
+
index += 1;
|
|
177
|
+
});
|
|
178
|
+
}); // Finally, remove the now empty items
|
|
179
|
+
|
|
180
|
+
items.forEach(function (item) {
|
|
181
|
+
return change.removeNodeByKey(item.key, {
|
|
182
|
+
normalize: false
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
return change;
|
|
186
|
+
}.bind(_this, listOptions);
|
|
187
|
+
|
|
188
|
+
core.utils.getItemsAtRange = function (opts, value, range) {
|
|
189
|
+
range = range || value.selection;
|
|
190
|
+
|
|
191
|
+
if (!range.startKey) {
|
|
192
|
+
return _immutable["default"].List();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var document = value.document;
|
|
196
|
+
var startBlock = document.getClosestBlock(range.startKey);
|
|
197
|
+
var endBlock = document.getClosestBlock(range.endKey);
|
|
198
|
+
|
|
199
|
+
if (startBlock === endBlock) {
|
|
200
|
+
var item = core.utils.getCurrentItem(value, startBlock);
|
|
201
|
+
return item ? _immutable["default"].List([item]) : _immutable["default"].List();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
var ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
|
|
205
|
+
|
|
206
|
+
if (core.utils.isList(ancestor)) {
|
|
207
|
+
var startPath = ancestor.getPath(startBlock.key);
|
|
208
|
+
var endPath = ancestor.getPath(endBlock.key);
|
|
209
|
+
return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
|
|
210
|
+
} else if (ancestor.type === opts.typeItem) {
|
|
211
|
+
// The ancestor is the highest list item that covers the range
|
|
212
|
+
return _immutable["default"].List([ancestor]);
|
|
213
|
+
} // No list of items can cover the range
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
return _immutable["default"].List();
|
|
217
|
+
}.bind(_this, listOptions);
|
|
218
|
+
|
|
219
|
+
core.utils.getListForItem = function (opts, value, item) {
|
|
220
|
+
var document = value.document;
|
|
221
|
+
var parent = document.getParent(item.key);
|
|
222
|
+
return parent && core.utils.isList(parent) ? parent : null;
|
|
223
|
+
}.bind(_this, listOptions);
|
|
224
|
+
|
|
225
|
+
core.utils.isSelectionInList = function (opts, value, type) {
|
|
226
|
+
var items = core.utils.getItemsAtRange(value);
|
|
227
|
+
return !items.isEmpty() && ( // Check the type of the list if needed
|
|
228
|
+
!type || core.utils.getListForItem(value, items.first()).get('type') === type);
|
|
229
|
+
}.bind(_this, listOptions);
|
|
230
|
+
|
|
144
231
|
return core;
|
|
145
232
|
};
|
|
146
233
|
|
|
@@ -168,6 +255,7 @@ var _default = function _default(options) {
|
|
|
168
255
|
|
|
169
256
|
core.toolbar = {
|
|
170
257
|
isMark: false,
|
|
258
|
+
ariaLabel: type == 'ul_list' ? 'bulleted list' : 'numbered-list',
|
|
171
259
|
type: type,
|
|
172
260
|
icon: icon,
|
|
173
261
|
isActive: function isActive(value, type) {
|
|
@@ -192,13 +280,55 @@ var _default = function _default(options) {
|
|
|
192
280
|
}
|
|
193
281
|
}
|
|
194
282
|
};
|
|
283
|
+
|
|
284
|
+
core.normalizeNode = function (node) {
|
|
285
|
+
if (node.object !== 'document' && node.object !== 'block') {
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
var response = core.validateNode(node);
|
|
290
|
+
var invalidListItems = [];
|
|
291
|
+
node.forEachDescendant(function (d) {
|
|
292
|
+
if (d.type === 'list_item' && d.nodes.size === 1 && d.nodes.first().object === 'text') {
|
|
293
|
+
// if we have a list_item that has only a text inside, we need to add a block in it
|
|
294
|
+
invalidListItems.push(d);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
if (!invalidListItems.length && !response) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return function (change) {
|
|
303
|
+
if (response) {
|
|
304
|
+
response(change);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (invalidListItems.length) {
|
|
308
|
+
change.withoutNormalization(function () {
|
|
309
|
+
invalidListItems.forEach(function (node) {
|
|
310
|
+
var textNode = node.nodes.first();
|
|
311
|
+
var wrappedBlock = {
|
|
312
|
+
object: 'block',
|
|
313
|
+
type: 'div',
|
|
314
|
+
nodes: [textNode.toJSON()]
|
|
315
|
+
};
|
|
316
|
+
change.removeNodeByKey(textNode.key);
|
|
317
|
+
change.insertNodeByKey(node.key, 0, wrappedBlock);
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
};
|
|
323
|
+
|
|
195
324
|
core.renderNode.propTypes = {
|
|
196
325
|
node: _propTypes["default"].object,
|
|
197
326
|
attributes: _propTypes["default"].object,
|
|
198
327
|
children: _propTypes["default"].func
|
|
199
328
|
};
|
|
329
|
+
core.name = type;
|
|
200
330
|
return core;
|
|
201
331
|
};
|
|
202
332
|
|
|
203
333
|
exports["default"] = _default;
|
|
204
|
-
//# sourceMappingURL=index.js.map
|
|
334
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2xpc3QvaW5kZXguanN4Il0sIm5hbWVzIjpbImxvZyIsImIiLCJ0eXBlIiwibmV4dCIsImNoaWxkTm9kZXMiLCJvYmplY3QiLCJub2RlcyIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImVsIiwibmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsImNoaWxkcmVuIiwibGVuZ3RoIiwiQXJyYXkiLCJmcm9tIiwic2VyaWFsaXplIiwiY3JlYXRlRWRpdExpc3QiLCJjb3JlIiwidHlwZURlZmF1bHQiLCJsaXN0T3B0aW9ucyIsIkxpc3RPcHRpb25zIiwic2NoZW1hIiwiYmxvY2tzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJibG9jayIsInBhcmVudCIsInR5cGVzIiwiZ2V0SGlnaGVzdFNlbGVjdGVkQmxvY2tzIiwidmFsdWUiLCJyYW5nZSIsInNlbGVjdGlvbiIsImRvY3VtZW50Iiwic3RhcnRCbG9jayIsImdldENsb3Nlc3RCbG9jayIsInN0YXJ0S2V5IiwiZW5kQmxvY2siLCJlbmRLZXkiLCJJbW11dGFibGUiLCJMaXN0IiwiYW5jZXN0b3IiLCJnZXRDb21tb25BbmNlc3RvciIsInN0YXJ0UGF0aCIsImdldFBhdGgiLCJlbmRQYXRoIiwic2xpY2UiLCJnZXQiLCJjaGFuZ2VzIiwid3JhcEluTGlzdCIsImNoYW5nZSIsImRhdGEiLCJzZWxlY3RlZEJsb2NrcyIsIndyYXBCbG9jayIsIkRhdGEiLCJjcmVhdGUiLCJub3JtYWxpemUiLCJub2RlIiwidXRpbHMiLCJpc0xpc3QiLCJfcmVmIiwidW53cmFwTm9kZUJ5S2V5Iiwid3JhcEJsb2NrQnlLZXkiLCJ1bndyYXBMaXN0Iiwib3B0cyIsIml0ZW1zIiwiZ2V0SXRlbXNBdFJhbmdlIiwiaXNFbXB0eSIsIml0ZW0iLCJmaXJzdEl0ZW0iLCJmaXJzdCIsImdldFBhcmVudCIsImluZGV4IiwiZmluZEluZGV4IiwibW92ZU5vZGVCeUtleSIsInJlbW92ZU5vZGVCeUtleSIsImJpbmQiLCJnZXRDdXJyZW50SXRlbSIsInR5cGVJdGVtIiwiZ2V0TGlzdEZvckl0ZW0iLCJpc1NlbGVjdGlvbkluTGlzdCIsIm9wdGlvbnMiLCJpY29uIiwicmVuZGVyTm9kZSIsInByb3BzIiwiYXR0cmlidXRlcyIsInRvb2xiYXIiLCJpc01hcmsiLCJhcmlhTGFiZWwiLCJpc0FjdGl2ZSIsImN1cnJlbnQiLCJnZXRDdXJyZW50TGlzdCIsIm9uQ2xpY2siLCJvbkNoYW5nZSIsImluTGlzdCIsImNhbGwiLCJub3JtYWxpemVOb2RlIiwidW5kZWZpbmVkIiwicmVzcG9uc2UiLCJ2YWxpZGF0ZU5vZGUiLCJpbnZhbGlkTGlzdEl0ZW1zIiwiZm9yRWFjaERlc2NlbmRhbnQiLCJkIiwic2l6ZSIsInB1c2giLCJ3aXRob3V0Tm9ybWFsaXphdGlvbiIsInRleHROb2RlIiwid3JhcHBlZEJsb2NrIiwidG9KU09OIiwiaW5zZXJ0Tm9kZUJ5S2V5IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsdUJBQU0scUNBQU4sQ0FBWjs7QUFFQSxJQUFNQyxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDQyxJQUFELEVBQU9DLElBQVAsRUFBYUMsVUFBYjtBQUFBLFNBQTZCO0FBQ3JDQyxJQUFBQSxNQUFNLEVBQUUsT0FENkI7QUFFckNILElBQUFBLElBQUksRUFBSkEsSUFGcUM7QUFHckNJLElBQUFBLEtBQUssRUFBRUgsSUFBSSxDQUFDQyxVQUFEO0FBSDBCLEdBQTdCO0FBQUEsQ0FBVjs7QUFNTyxJQUFNRyxhQUFhLEdBQUc7QUFDM0JDLEVBQUFBLFdBRDJCLHVCQUNmQyxFQURlLEVBQ1hOLElBRFcsRUFDTDtBQUNwQixRQUFNTyxJQUFJLEdBQUdELEVBQUUsQ0FBQ0UsT0FBSCxDQUFXQyxXQUFYLEVBQWI7O0FBRUEsUUFBSUYs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S0FGYTtBQUduQkksY0FBQUEsS0FBSyxFQUFFLENBQUN1RyxRQUFRLENBQUNFLE1BQVQsRUFBRDtBQUhZLGFBQXJCO0FBTUExRCxZQUFBQSxNQUFNLENBQUN5QixlQUFQLENBQXVCK0IsUUFBUSxDQUFDakYsR0FBaEM7QUFFQXlCLFlBQUFBLE1BQU0sQ0FBQzJELGVBQVAsQ0FBdUJwRCxJQUFJLENBQUNoQyxHQUE1QixFQUFpQyxDQUFqQyxFQUFvQ2tGLFlBQXBDO0FBQ0QsV0FYRDtBQVlELFNBYkQ7QUFjRDtBQUNGLEtBckJEO0FBc0JELEdBMUNEOztBQTRDQTNGLEVBQUFBLElBQUksQ0FBQ21FLFVBQUwsQ0FBZ0IyQixTQUFoQixHQUE0QjtBQUMxQnJELElBQUFBLElBQUksRUFBRXNELHNCQUFVN0csTUFEVTtBQUUxQm1GLElBQUFBLFVBQVUsRUFBRTBCLHNCQUFVN0csTUFGSTtBQUcxQlEsSUFBQUEsUUFBUSxFQUFFcUcsc0JBQVVDO0FBSE0sR0FBNUI7QUFLQWhHLEVBQUFBLElBQUksQ0FBQ1QsSUFBTCxHQUFZUixJQUFaO0FBRUEsU0FBT2lCLElBQVA7QUFDRCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IERhdGEgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgSW1tdXRhYmxlIGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEVkaXRMaXN0IGZyb20gJ3NsYXRlLWVkaXQtbGlzdCc7XG5pbXBvcnQgTGlzdE9wdGlvbnMgZnJvbSAnc2xhdGUtZWRpdC1saXN0L2Rpc3Qvb3B0aW9ucyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOmxpc3QnKTtcblxuY29uc3QgYiA9ICh0eXBlLCBuZXh0LCBjaGlsZE5vZGVzKSA9PiAoe1xuICBvYmplY3Q6ICdibG9jaycsXG4gIHR5cGUsXG4gIG5vZGVzOiBuZXh0KGNoaWxkTm9kZXMpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemF0aW9uID0ge1xuICBkZXNlcmlhbGl6ZShlbCwgbmV4dCkge1xuICAgIGNvbnN0IG5hbWUgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobmFtZSA9PT0gJ2xpJykge1xuICAgICAgcmV0dXJuIGIoJ2xpc3RfaXRlbScsIG5leHQsIGVsLmNoaWxkTm9kZXMpO1xuICAgIH1cblxuICAgIGlmIChuYW1lID09PSAndWwnKSB7XG4gICAgICByZXR1cm4gYigndWxfbGlzdCcsIG5leHQsIGVsLmNoaWxkcmVuLmxlbmd0aCA/IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pIDogZWwuY2hpbGROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdvbCcpIHtcbiAgICAgIHJldHVybiBiKCdvbF9saXN0JywgbmV4dCwgZWwuY2hpbGRyZW4ubGVuZ3RoID8gQXJyYXkuZnJvbShlbC5jaGlsZHJlbikgOiBlbC5jaGlsZE5vZGVzKTtcbiAgICB9XG4gIH0sXG4gIHNlcmlhbGl6ZShvYmplY3QsIGNoaWxkcmVuKSB7XG4gICAgaWYgKG9iamVjdC5vYmplY3QgIT09ICdibG9jaycpIHJldHVybjtcblxuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ2xpc3RfaXRlbScpIHtcbiAgICAgIHJldHVybiA8bGk+e2NoaWxkcmVufTwvbGk+O1xuICAgIH1cblxuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ3VsX2xpc3QnKSB7XG4gICAgICByZXR1cm4gPHVsPntjaGlsZHJlbn08L3VsPjtcbiAgICB9XG5cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09ICdvbF9saXN0Jykge1xuICAgICAgcmV0dXJuIDxvbD57Y2hpbGRyZW59PC9vbD47XG4gICAgfVxuICB9LFxufTtcblxuY29uc3QgY3JlYXRlRWRpdExpc3QgPSAoKSA9PiB7XG4gIGNvbnN0IGNvcmUgPSBFZGl0TGlzdCh7XG4gICAgdHlwZURlZmF1bHQ6ICdzcGFuJyxcbiAgfSk7XG5cbiAgY29uc3QgbGlzdE9wdGlvbnMgPSBuZXcgTGlzdE9wdGlvbnMoe1xuICAgIHR5cGVEZWZhdWx0OiAnc3BhbicsXG4gIH0pO1xuXG4gIC8vIGZpeCBvdXRkYXRlZCBzY2hlbWFcbiAgaWYgKGNvcmUuc2NoZW1hICYmIGNvcmUuc2NoZW1hLmJsb2Nrcykge1xuICAgIE9iamVjdC5rZXlzKGNvcmUuc2NoZW1hLmJsb2NrcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBibG9jayA9IGNvcmUuc2NoZW1hLmJsb2Nrc1trZXldO1xuXG4gICAgICBpZiAoYmxvY2sucGFyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYmxvY2subm9kZXNbMF0gPSB7IHR5cGU6IGJsb2NrLm5vZGVzWzBdLnR5cGVzWzBdIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBvdmVycmlkZSBvZiB0aGUgY29yZS5jaGFuZ2VzLndyYXBJbkxpc3QgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIHZlcnNpb25cbiAgICogb2YgaW1tdXRhYmxlIHRoYXQgd2UgaGF2ZSBkb2VzIG5vdCBzdXBwb3J0IGdldHRpbmcgdGhlIGVsZW1lbnQgYXQgYSBzcGVjaWZpY1xuICAgKiBpbmRleCB3aXRoIGEgc3F1YXJlIGJyYWNrZXQgKGxpc3RbMF0pLiBXZSBoYXZlIHRvIHVzZSB0aGUgbGlzdC5nZXQgZnVuY3Rpb24gaW5zdGVhZFxuICAgKi9cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaGlnaGVzdCBsaXN0IG9mIGJsb2NrcyB0aGF0IGNvdmVyIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgKi9cbiAgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkQmxvY2tzID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZS5zZWxlY3Rpb247XG4gICAgY29uc3QgZG9jdW1lbnQgPSB2YWx1ZS5kb2N1bWVudDtcblxuICAgIGNvbnN0IHN0YXJ0QmxvY2sgPSBkb2N1bWVudC5nZXRDbG9zZXN0QmxvY2socmFuZ2Uuc3RhcnRLZXkpO1xuICAgIGNvbnN0IGVuZEJsb2NrID0gZG9jdW1lbnQuZ2V0Q2xvc2VzdEJsb2NrKHJhbmdlLmVuZEtleSk7XG5cbiAgICBpZiAoc3RhcnRCbG9jayA9PT0gZW5kQmxvY2spIHtcbiAgICAgIHJldHVybiBJbW11dGFibGUuTGlzdChbc3RhcnRCbG9ja10pO1xuICAgIH1cblxuICAgIGNvbnN0IGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0Q29tbW9uQW5jZXN0b3Ioc3RhcnRCbG9jay5rZXksIGVuZEJsb2NrLmtleSk7XG4gICAgY29uc3Qgc3RhcnRQYXRoID0gYW5jZXN0b3IuZ2V0UGF0aChzdGFydEJsb2NrLmtleSk7XG4gICAgY29uc3QgZW5kUGF0aCA9IGFuY2VzdG9yLmdldFBhdGgoZW5kQmxvY2sua2V5KTtcblxuICAgIHJldHVybiBhbmNlc3Rvci5ub2Rlcy5zbGljZShzdGFydFBhdGguZ2V0KDApLCBlbmRQYXRoLmdldCgwKSArIDEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXcmFwIHRoZSBibG9ja3MgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGEgbmV3IGxpc3QuIFNlbGVjdGVkXG4gICAqIGxpc3RzIGFyZSBtZXJnZWQgdG9nZXRoZXIuXG4gICAqL1xuICBjb3JlLmNoYW5nZXMud3JhcEluTGlzdCA9IGZ1bmN0aW9uKGNoYW5nZSwgdHlwZSwgZGF0YSkge1xuICAgIGNvbnN0IHNlbGVjdGVkQmxvY2tzID0gZ2V0SGlnaGVzdFNlbGVjdGVkQmxvY2tzKGNoYW5nZS52YWx1ZSk7XG5cbiAgICAvLyBXcmFwIGluIGNvbnRhaW5lclxuICAgIGNoYW5nZS53cmFwQmxvY2soeyB0eXBlOiB0eXBlLCBkYXRhOiBEYXRhLmNyZWF0ZShkYXRhKSB9LCB7IG5vcm1hbGl6ZTogZmFsc2UgfSk7XG5cbiAgICAvLyBXcmFwIGluIGxpc3QgaXRlbXNcbiAgICBzZWxlY3RlZEJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChjb3JlLnV0aWxzLmlzTGlzdChub2RlKSkge1xuICAgICAgICAvLyBNZXJnZSBpdHMgaXRlbXMgd2l0aCB0aGUgY3JlYXRlZCBsaXN0XG4gICAgICAgIG5vZGUubm9kZXMuZm9yRWFjaChmdW5jdGlvbihfcmVmKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gX3JlZi5rZXk7XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZS51bndyYXBOb2RlQnlLZXkoa2V5LCB7IG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgIT09ICdsaXN0X2l0ZW0nKSB7XG4gICAgICAgIGNoYW5nZS53cmFwQmxvY2tCeUtleShub2RlLmtleSwgJ2xpc3RfaXRlbScsIHtcbiAgICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjaGFuZ2Uubm9ybWFsaXplKCk7XG4gIH07XG5cbiAgY29yZS5jaGFuZ2VzLnVud3JhcExpc3QgPSBmdW5jdGlvbiB1bndyYXBMaXN0KG9wdHMsIGNoYW5nZSkge1xuICAgIGNvbnN0IGl0ZW1zID0gY29yZS51dGlscy5nZXRJdGVtc0F0UmFuZ2UoY2hhbmdlLnZhbHVlKTtcblxuICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuXG4gICAgLy8gVW53cmFwIHRoZSBpdGVtcyBmcm9tIHRoZWlyIGxpc3RcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBjaGFuZ2UudW53cmFwTm9kZUJ5S2V5KGl0ZW0ua2V5LCB7IG5vcm1hbGl6ZTogZmFsc2UgfSkpO1xuXG4gICAgLy8gUGFyZW50IG9mIHRoZSBsaXN0IG9mIHRoZSBpdGVtc1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGl0ZW1zLmZpcnN0KCk7XG4gICAgY29uc3QgcGFyZW50ID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldFBhcmVudChmaXJzdEl0ZW0ua2V5KTtcblxuICAgIGxldCBpbmRleCA9IHBhcmVudC5ub2Rlcy5maW5kSW5kZXgoKG5vZGUpID0+IG5vZGUua2V5ID09PSBmaXJzdEl0ZW0ua2V5KTtcblxuICAgIC8vIFVud3JhcCB0aGUgaXRlbXMnIGNoaWxkcmVuXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNoYW5nZS5tb3ZlTm9kZUJ5S2V5KG5vZGUua2V5LCBwYXJlbnQua2V5LCBpbmRleCwge1xuICAgICAgICAgIG5vcm1hbGl6ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5hbGx5LCByZW1vdmUgdGhlIG5vdyBlbXB0eSBpdGVtc1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGNoYW5nZS5yZW1vdmVOb2RlQnlLZXkoaXRlbS5rZXksIHsgbm9ybWFsaXplOiBmYWxzZSB9KSk7XG5cbiAgICByZXR1cm4gY2hhbmdlO1xuICB9LmJpbmQodGhpcywgbGlzdE9wdGlvbnMpO1xuXG4gIGNvcmUudXRpbHMuZ2V0SXRlbXNBdFJhbmdlID0gZnVuY3Rpb24ob3B0cywgdmFsdWUsIHJhbmdlKSB7XG4gICAgcmFuZ2UgPSByYW5nZSB8fCB2YWx1ZS5zZWxlY3Rpb247XG5cbiAgICBpZiAoIXJhbmdlLnN0YXJ0S2V5KSB7XG4gICAgICByZXR1cm4gSW1tdXRhYmxlLkxpc3QoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB2YWx1ZTtcblxuICAgIGNvbnN0IHN0YXJ0QmxvY2sgPSBkb2N1bWVudC5nZXRDbG9zZXN0QmxvY2socmFuZ2Uuc3RhcnRLZXkpO1xuICAgIGNvbnN0IGVuZEJsb2NrID0gZG9jdW1lbnQuZ2V0Q2xvc2VzdEJsb2NrKHJhbmdlLmVuZEtleSk7XG5cbiAgICBpZiAoc3RhcnRCbG9jayA9PT0gZW5kQmxvY2spIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjb3JlLnV0aWxzLmdldEN1cnJlbnRJdGVtKHZhbHVlLCBzdGFydEJsb2NrKTtcbiAgICAgIHJldHVybiBpdGVtID8gSW1tdXRhYmxlLkxpc3QoW2l0ZW1dKSA6IEltbXV0YWJsZS5MaXN0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgYW5jZXN0b3IgPSBkb2N1bWVudC5nZXRDb21tb25BbmNlc3RvcihzdGFydEJsb2NrLmtleSwgZW5kQmxvY2sua2V5KTtcblxuICAgIGlmIChjb3JlLnV0aWxzLmlzTGlzdChhbmNlc3RvcikpIHtcbiAgICAgIGNvbnN0IHN0YXJ0UGF0aCA9IGFuY2VzdG9yLmdldFBhdGgoc3RhcnRCbG9jay5rZXkpO1xuICAgICAgY29uc3QgZW5kUGF0aCA9IGFuY2VzdG9yLmdldFBhdGgoZW5kQmxvY2sua2V5KTtcblxuICAgICAgcmV0dXJuIGFuY2VzdG9yLm5vZGVzLnNsaWNlKHN0YXJ0UGF0aC5nZXQoMCksIGVuZFBhdGguZ2V0KDApICsgMSk7XG4gICAgfSBlbHNlIGlmIChhbmNlc3Rvci50eXBlID09PSBvcHRzLnR5cGVJdGVtKSB7XG4gICAgICAvLyBUaGUgYW5jZXN0b3IgaXMgdGhlIGhpZ2hlc3QgbGlzdCBpdGVtIHRoYXQgY292ZXJzIHRoZSByYW5nZVxuICAgICAgcmV0dXJuIEltbXV0YWJsZS5MaXN0KFthbmNlc3Rvcl0pO1xuICAgIH1cbiAgICAvLyBObyBsaXN0IG9mIGl0ZW1zIGNhbiBjb3ZlciB0aGUgcmFuZ2VcbiAgICByZXR1cm4gSW1tdXRhYmxlLkxpc3QoKTtcbiAgfS5iaW5kKHRoaXMsIGxpc3RPcHRpb25zKTtcblxuICBjb3JlLnV0aWxzLmdldExpc3RGb3JJdGVtID0gZnVuY3Rpb24ob3B0cywgdmFsdWUsIGl0ZW0pIHtcbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB2YWx1ZTtcbiAgICBjb25zdCBwYXJlbnQgPSBkb2N1bWVudC5nZXRQYXJlbnQoaXRlbS5rZXkpO1xuICAgIHJldHVybiBwYXJlbnQgJiYgY29yZS51dGlscy5pc0xpc3QocGFyZW50KSA/IHBhcmVudCA6IG51bGw7XG4gIH0uYmluZCh0aGlzLCBsaXN0T3B0aW9ucyk7XG5cbiAgY29yZS51dGlscy5pc1NlbGVjdGlvbkluTGlzdCA9IGZ1bmN0aW9uKG9wdHMsIHZhbHVlLCB0eXBlKSB7XG4gICAgY29uc3QgaXRlbXMgPSBjb3JlLnV0aWxzLmdldEl0ZW1zQXRSYW5nZSh2YWx1ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgICFpdGVtcy5pc0VtcHR5KCkgJiZcbiAgICAgIC8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBsaXN0IGlmIG5lZWRlZFxuICAgICAgKCF0eXBlIHx8IGNvcmUudXRpbHMuZ2V0TGlzdEZvckl0ZW0odmFsdWUsIGl0ZW1zLmZpcnN0KCkpLmdldCgndHlwZScpID09PSB0eXBlKVxuICAgICk7XG4gIH0uYmluZCh0aGlzLCBsaXN0T3B0aW9ucyk7XG5cbiAgcmV0dXJuIGNvcmU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHR5cGUsIGljb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgY29yZSA9IGNyZWF0ZUVkaXRMaXN0KCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Rpc3BsYXktbmFtZVxuICBjb3JlLnJlbmRlck5vZGUgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IG5vZGUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuIH0gPSBwcm9wcztcblxuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlICd1bF9saXN0JzpcbiAgICAgICAgcmV0dXJuIDx1bCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdWw+O1xuICAgICAgY2FzZSAnb2xfbGlzdCc6XG4gICAgICAgIHJldHVybiA8b2wgey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L29sPjtcbiAgICAgIGNhc2UgJ2xpc3RfaXRlbSc6XG4gICAgICAgIHJldHVybiA8bGkgey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L2xpPjtcbiAgICB9XG4gIH07XG5cbiAgY29yZS50b29sYmFyID0ge1xuICAgIGlzTWFyazogZmFsc2UsXG4gICAgYXJpYUxhYmVsOiB0eXBlID09ICd1bF9saXN0JyA/ICdidWxsZXRlZCBsaXN0JyA6ICdudW1iZXJlZC1saXN0JyxcbiAgICB0eXBlLFxuICAgIGljb24sXG4gICAgaXNBY3RpdmU6ICh2YWx1ZSwgdHlwZSkgPT4ge1xuICAgICAgaWYgKCFjb3JlLnV0aWxzLmlzU2VsZWN0aW9uSW5MaXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0gY29yZS51dGlscy5nZXRDdXJyZW50TGlzdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQudHlwZSA9PT0gdHlwZSA6IGZhbHNlO1xuICAgIH0sXG4gICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgbG9nKCdbb25DbGlja10nLCB2YWx1ZSk7XG4gICAgICBjb25zdCBpbkxpc3QgPSBjb3JlLnV0aWxzLmlzU2VsZWN0aW9uSW5MaXN0KHZhbHVlKTtcbiAgICAgIGlmIChpbkxpc3QpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCkuY2FsbChjb3JlLmNoYW5nZXMudW53cmFwTGlzdCk7XG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5jYWxsKGNvcmUuY2hhbmdlcy53cmFwSW5MaXN0LCB0eXBlKTtcbiAgICAgICAgb25DaGFuZ2UoY2hhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGNvcmUubm9ybWFsaXplTm9kZSA9IChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUub2JqZWN0ICE9PSAnZG9jdW1lbnQnICYmIG5vZGUub2JqZWN0ICE9PSAnYmxvY2snKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gY29yZS52YWxpZGF0ZU5vZGUobm9kZSk7XG5cbiAgICBjb25zdCBpbnZhbGlkTGlzdEl0ZW1zID0gW107XG5cbiAgICBub2RlLmZvckVhY2hEZXNjZW5kYW50KChkKSA9PiB7XG4gICAgICBpZiAoZC50eXBlID09PSAnbGlzdF9pdGVtJyAmJiBkLm5vZGVzLnNpemUgPT09IDEgJiYgZC5ub2Rlcy5maXJzdCgpLm9iamVjdCA9PT0gJ3RleHQnKSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBsaXN0X2l0ZW0gdGhhdCBoYXMgb25seSBhIHRleHQgaW5zaWRlLCB3ZSBuZWVkIHRvIGFkZCBhIGJsb2NrIGluIGl0XG4gICAgICAgIGludmFsaWRMaXN0SXRlbXMucHVzaChkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaW52YWxpZExpc3RJdGVtcy5sZW5ndGggJiYgIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzcG9uc2UoY2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGludmFsaWRMaXN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGNoYW5nZS53aXRob3V0Tm9ybWFsaXphdGlvbigoKSA9PiB7XG4gICAgICAgICAgaW52YWxpZExpc3RJdGVtcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUubm9kZXMuZmlyc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRCbG9jayA9IHtcbiAgICAgICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgICAgICB0eXBlOiAnZGl2JyxcbiAgICAgICAgICAgICAgbm9kZXM6IFt0ZXh0Tm9kZS50b0pTT04oKV0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjaGFuZ2UucmVtb3ZlTm9kZUJ5S2V5KHRleHROb2RlLmtleSk7XG5cbiAgICAgICAgICAgIGNoYW5nZS5pbnNlcnROb2RlQnlLZXkobm9kZS5rZXksIDAsIHdyYXBwZWRCbG9jayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29yZS5yZW5kZXJOb2RlLnByb3BUeXBlcyA9IHtcbiAgICBub2RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuICBjb3JlLm5hbWUgPSB0eXBlO1xuXG4gIHJldHVybiBjb3JlO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
12
|
+
|
|
13
|
+
var _mockChange = _interopRequireDefault(require("../../image/__tests__/mock-change"));
|
|
14
|
+
|
|
15
|
+
var _slate = require("slate");
|
|
16
|
+
|
|
17
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
18
|
+
|
|
19
|
+
var _enzyme = require("enzyme");
|
|
20
|
+
|
|
21
|
+
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
22
|
+
|
|
23
|
+
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); }
|
|
24
|
+
|
|
25
|
+
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; }
|
|
26
|
+
|
|
27
|
+
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; }
|
|
28
|
+
|
|
29
|
+
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; }
|
|
30
|
+
|
|
31
|
+
jest.mock('@pie-framework/mathquill', function () {
|
|
32
|
+
return {
|
|
33
|
+
StaticMath: jest.fn(),
|
|
34
|
+
getInterface: jest.fn().mockReturnThis(),
|
|
35
|
+
registerEmbed: jest.fn()
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
jest.mock('@pie-lib/math-toolbar', function () {
|
|
39
|
+
return {
|
|
40
|
+
MathPreview: function MathPreview() {
|
|
41
|
+
return /*#__PURE__*/_react["default"].createElement("div", null);
|
|
42
|
+
},
|
|
43
|
+
MathToolbar: function MathToolbar() {
|
|
44
|
+
return /*#__PURE__*/_react["default"].createElement("div", null);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
49
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('@pie-lib/math-rendering')), {}, {
|
|
50
|
+
mmlToLatex: jest.fn(function () {
|
|
51
|
+
return '/foobar/latex';
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:test:math'); // I believe @andrei is moving this stuff out.
|
|
56
|
+
|
|
57
|
+
describe('MathPlugin', function () {
|
|
58
|
+
describe('toolbar', function () {
|
|
59
|
+
describe('onClick', function () {
|
|
60
|
+
var plugin, mockChange, value, onChange;
|
|
61
|
+
beforeEach(function () {
|
|
62
|
+
plugin = (0, _index["default"])({});
|
|
63
|
+
mockChange = new _mockChange["default"]();
|
|
64
|
+
value = {
|
|
65
|
+
change: jest.fn(function () {
|
|
66
|
+
return mockChange;
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
onChange = jest.fn();
|
|
70
|
+
plugin.toolbar.onClick(value, onChange);
|
|
71
|
+
});
|
|
72
|
+
test('calls insertInline', function () {
|
|
73
|
+
expect(mockChange.insertInline).toBeCalledWith(expect.objectContaining({
|
|
74
|
+
data: (0, _index.inlineMath)().data
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
test('it calls onChange', function () {
|
|
78
|
+
expect(onChange).toHaveBeenCalledWith(mockChange);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('renderNode', function () {
|
|
83
|
+
test('the component has props', function () {
|
|
84
|
+
var plugin = (0, _index["default"])({});
|
|
85
|
+
|
|
86
|
+
var _plugin$renderNode = plugin.renderNode({
|
|
87
|
+
node: {
|
|
88
|
+
type: 'math'
|
|
89
|
+
}
|
|
90
|
+
}),
|
|
91
|
+
props = _plugin$renderNode.props;
|
|
92
|
+
|
|
93
|
+
expect(props.node).toEqual({
|
|
94
|
+
type: 'math'
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('serialization', function () {
|
|
99
|
+
describe('deserialize', function () {
|
|
100
|
+
var assertDeserialize = function assertDeserialize(html, expected, wrapType) {
|
|
101
|
+
it("innerHTML: ".concat(html, " is deserialized to: ").concat(expected, " with wrapType: ").concat(wrapType), function () {
|
|
102
|
+
var el = {
|
|
103
|
+
tagName: 'span',
|
|
104
|
+
childNodes: [],
|
|
105
|
+
getAttribute: jest.fn(function () {
|
|
106
|
+
return '';
|
|
107
|
+
}),
|
|
108
|
+
hasAttribute: jest.fn(function () {
|
|
109
|
+
return true;
|
|
110
|
+
}),
|
|
111
|
+
innerHTML: html
|
|
112
|
+
};
|
|
113
|
+
var next = jest.fn();
|
|
114
|
+
|
|
115
|
+
var out = _index.serialization.deserialize(el, next);
|
|
116
|
+
|
|
117
|
+
expect(out).toEqual({
|
|
118
|
+
object: 'inline',
|
|
119
|
+
type: 'math',
|
|
120
|
+
isVoid: true,
|
|
121
|
+
nodes: [],
|
|
122
|
+
data: {
|
|
123
|
+
latex: expected,
|
|
124
|
+
wrapper: wrapType
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
assertDeserialize('$$<$$', '<', _index["default"].DOLLAR);
|
|
131
|
+
assertDeserialize('$<$', '<', _index["default"].DOLLAR);
|
|
132
|
+
assertDeserialize('\\(<\\)', '<', _index["default"].ROUND_BRACKETS);
|
|
133
|
+
assertDeserialize('\\[<\\]', '<', _index["default"].ROUND_BRACKETS);
|
|
134
|
+
assertDeserialize('latex', 'latex', _index["default"].ROUND_BRACKETS);
|
|
135
|
+
assertDeserialize('\\displaystyle foo', 'foo', _index["default"].ROUND_BRACKETS);
|
|
136
|
+
it('should make mathml editable if MathPlugin.mathMlOptions.mmlEditing is true', function () {
|
|
137
|
+
_index["default"].mathMlOptions.mmlEditing = true;
|
|
138
|
+
var el = {
|
|
139
|
+
tagName: 'math',
|
|
140
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
141
|
+
};
|
|
142
|
+
var next = jest.fn();
|
|
143
|
+
|
|
144
|
+
var out = _index.serialization.deserialize(el, next);
|
|
145
|
+
|
|
146
|
+
expect(out).toEqual({
|
|
147
|
+
object: 'inline',
|
|
148
|
+
type: 'math',
|
|
149
|
+
isVoid: true,
|
|
150
|
+
nodes: [],
|
|
151
|
+
data: {
|
|
152
|
+
latex: '/foobar/latex',
|
|
153
|
+
wrapper: 'round_brackets'
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
it('should make mathml readOnly if MathPlugin.mathMlOptions.mmlEditing is false', function () {
|
|
158
|
+
_index["default"].mathMlOptions.mmlEditing = false;
|
|
159
|
+
var el = {
|
|
160
|
+
tagName: 'math',
|
|
161
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
162
|
+
};
|
|
163
|
+
var next = jest.fn();
|
|
164
|
+
|
|
165
|
+
var out = _index.serialization.deserialize(el, next);
|
|
166
|
+
|
|
167
|
+
expect(out).toEqual({
|
|
168
|
+
object: 'inline',
|
|
169
|
+
isVoid: true,
|
|
170
|
+
type: 'mathml',
|
|
171
|
+
data: {
|
|
172
|
+
html: el.outerHTML
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('serialize', function () {
|
|
178
|
+
var assertSerialize = function assertSerialize(latex, expectedHtml, wrapper) {
|
|
179
|
+
wrapper = wrapper || _index["default"].ROUND_BRACKETS;
|
|
180
|
+
it("".concat(latex, " is serialized to: ").concat(expectedHtml), function () {
|
|
181
|
+
var object = {
|
|
182
|
+
kind: 'inline',
|
|
183
|
+
type: 'math',
|
|
184
|
+
isVoid: true,
|
|
185
|
+
nodes: [],
|
|
186
|
+
data: _slate.Data.create({
|
|
187
|
+
latex: latex,
|
|
188
|
+
wrapper: wrapper
|
|
189
|
+
})
|
|
190
|
+
};
|
|
191
|
+
var children = [];
|
|
192
|
+
|
|
193
|
+
var out = _index.serialization.serialize(object, children);
|
|
194
|
+
|
|
195
|
+
log('out: ', out);
|
|
196
|
+
expect(out).toEqual( /*#__PURE__*/_react["default"].createElement("span", {
|
|
197
|
+
"data-latex": "",
|
|
198
|
+
"data-raw": latex
|
|
199
|
+
}, expectedHtml));
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].ROUND_BRACKETS);
|
|
204
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].SQUARE_BRACKETS);
|
|
205
|
+
assertSerialize('latex', '$latex$', _index["default"].DOLLAR);
|
|
206
|
+
assertSerialize('latex', '$latex$', _index["default"].DOUBLE_DOLLAR);
|
|
207
|
+
/**
|
|
208
|
+
* Note that when this is converted to html it get's escaped - but that's an issue with the slate html-serializer.
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
assertSerialize('<', '\\(<\\)');
|
|
212
|
+
assertSerialize('x<y', '\\(x<y\\)');
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
describe('CustomToolbarComp', function () {
|
|
217
|
+
var onDataChange;
|
|
218
|
+
var onToolbarDone;
|
|
219
|
+
|
|
220
|
+
var wrapper = function wrapper(extras) {
|
|
221
|
+
var mockChange = new _mockChange["default"]();
|
|
222
|
+
var defaults = {
|
|
223
|
+
node: {
|
|
224
|
+
key: '1',
|
|
225
|
+
data: _slate.Data.create({
|
|
226
|
+
latex: 'foo'
|
|
227
|
+
}),
|
|
228
|
+
equals: function equals() {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
value: {
|
|
233
|
+
document: {
|
|
234
|
+
getNextText: jest.fn().mockReturnValue({
|
|
235
|
+
key: 'nt'
|
|
236
|
+
})
|
|
237
|
+
},
|
|
238
|
+
change: jest.fn().mockReturnValue(mockChange)
|
|
239
|
+
},
|
|
240
|
+
onDataChange: onDataChange,
|
|
241
|
+
onToolbarDone: onToolbarDone
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
245
|
+
|
|
246
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_index.CustomToolbarComp, props));
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
describe('render', function () {
|
|
250
|
+
it('renders without default keypadMode', function () {
|
|
251
|
+
var w = wrapper();
|
|
252
|
+
expect(w).toMatchSnapshot();
|
|
253
|
+
w.setProps({
|
|
254
|
+
pluginProps: {
|
|
255
|
+
math: {
|
|
256
|
+
keypadMode: 3
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
expect(w).toMatchSnapshot();
|
|
261
|
+
});
|
|
262
|
+
it('renders with default keypadMode', function () {
|
|
263
|
+
var w = wrapper({
|
|
264
|
+
pluginProps: {
|
|
265
|
+
math: {
|
|
266
|
+
keypadMode: 'geometry'
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
expect(w).toMatchSnapshot();
|
|
271
|
+
w.setProps({
|
|
272
|
+
pluginProps: {
|
|
273
|
+
math: {
|
|
274
|
+
keypadMode: 3
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
expect(w).toMatchSnapshot();
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
describe('onDone', function () {
|
|
282
|
+
it('calls onToolbarDone', function () {
|
|
283
|
+
onToolbarDone = jest.fn();
|
|
284
|
+
var w = wrapper();
|
|
285
|
+
w.find(_mathToolbar.MathToolbar).prop('onDone')('oo');
|
|
286
|
+
expect(onToolbarDone).toHaveBeenCalledWith(expect.anything(), false);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
describe('onChange', function () {
|
|
290
|
+
it('calls onDataChange', function () {
|
|
291
|
+
onDataChange = jest.fn();
|
|
292
|
+
var w = wrapper();
|
|
293
|
+
w.find(_mathToolbar.MathToolbar).prop('onChange')('oo');
|
|
294
|
+
expect(onDataChange).toHaveBeenCalledWith('1', {
|
|
295
|
+
latex: 'oo'
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL21hdGgvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sIm5hbWVzIjpbImplc3QiLCJtb2NrIiwiU3RhdGljTWF0aCIsImZuIiwiZ2V0SW50ZXJmYWNlIiwibW9ja1JldHVyblRoaXMiLCJyZWdpc3RlckVtYmVkIiwiTWF0aFByZXZpZXciLCJNYXRoVG9vbGJhciIsInJlcXVpcmVBY3R1YWwiLCJtbWxUb0xhdGV4IiwibG9nIiwiZGVzY3JpYmUiLCJwbHVnaW4iLCJtb2NrQ2hhbmdlIiwidmFsdWUiLCJvbkNoYW5nZSIsImJlZm9yZUVhY2giLCJNb2NrQ2hhbmdlIiwiY2hhbmdlIiwidG9vbGJhciIsIm9uQ2xpY2siLCJ0ZXN0IiwiZXhwZWN0IiwiaW5zZXJ0SW5saW5lIiwidG9CZUNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwiZGF0YSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwicmVuZGVyTm9kZSIsIm5vZGUiLCJ0eXBlIiwicHJvcHMiLCJ0b0VxdWFsIiwiYXNzZXJ0RGVzZXJpYWxpemUiLCJodG1sIiwiZXhwZWN0ZWQiLCJ3cmFwVHlwZSIsIml0IiwiZWwiLCJ0YWdOYW1lIiwiY2hpbGROb2RlcyIsImdldEF0dHJpYnV0ZSIsImhhc0F0dHJpYnV0ZSIsImlubmVySFRNTCIsIm5leHQiLCJvdXQiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJvYmplY3QiLCJpc1ZvaWQiLCJub2RlcyIsImxhdGV4Iiwid3JhcHBlciIsIk1hdGhQbHVnaW4iLCJET0xMQVIiLCJST1VORF9CUkFDS0VUUyIsIm1hdGhNbE9wdGlvbnMiLCJtbWxFZGl0aW5nIiwib3V0ZXJIVE1MIiwiYXNzZXJ0U2VyaWFsaXplIiwiZXhwZWN0ZWRIdG1sIiwia2luZCIsIkRhdGEiLCJjcmVhdGUiLCJjaGlsZHJlbiIsInNlcmlhbGl6ZSIsIlNRVUFSRV9CUkFDS0VUUyIsIkRPVUJMRV9ET0xMQVIiLCJvbkRhdGFDaGFuZ2UiLCJvblRvb2xiYXJEb25lIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJrZXkiLCJlcXVhbHMiLCJkb2N1bWVudCIsImdldE5leHRUZXh0IiwibW9ja1JldHVyblZhbHVlIiwidyIsInRvTWF0Y2hTbmFwc2hvdCIsInNldFByb3BzIiwicGx1Z2luUHJvcHMiLCJtYXRoIiwia2V5cGFkTW9kZSIsImZpbmQiLCJwcm9wIiwiYW55dGhpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFDQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsMEJBQVYsRUFBc0M7QUFBQSxTQUFPO0FBQzNDQyxJQUFBQSxVQUFVLEVBQUVGLElBQUksQ0FBQ0csRUFBTCxFQUQrQjtBQUUzQ0MsSUFBQUEsWUFBWSxFQUFFSixJQUFJLENBQUNHLEVBQUwsR0FBVUUsY0FBVixFQUY2QjtBQUczQ0MsSUFBQUEsYUFBYSxFQUFFTixJQUFJLENBQUNHLEVBQUw7QUFINEIsR0FBUDtBQUFBLENBQXRDO0FBTUFILElBQUksQ0FBQ0MsSUFBTCxDQUFVLHVCQUFWLEVBQW1DO0FBQUEsU0FBTztBQUN4Q00sSUFBQUEsV0FBVyxFQUFFO0FBQUEsMEJBQU0sNENBQU47QUFBQSxLQUQyQjtBQUV4Q0MsSUFBQUEsV0FBVyxFQUFFO0FBQUEsMEJBQU0sNENBQU47QUFBQTtBQUYyQixHQUFQO0FBQUEsQ0FBbkM7QUFLQVIsSUFBSSxDQUFDQyxJQUFMLENBQVUseUJBQVYsRUFBcUM7QUFBQSx5Q0FDaENELElBQUksQ0FBQ1MsYUFBTCxDQUFtQix5QkFBbkIsQ0FEZ0M7QUFFbkNDLElBQUFBLFVBQVUsRUFBRVYsSUFBSSxDQUFDRyxFQUFMLENBQVEsWUFBTTtBQUN4QixhQUFPLGVBQVA7QUFDRCxLQUZXO0FBRnVCO0FBQUEsQ0FBckM7QUFNQSxJQUFNUSxHQUFHLEdBQUcsdUJBQU0sa0NBQU4sQ0FBWixDLENBRUE7O0FBQ0FDLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBTTtBQUMz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QUd0RSxJQUFJLENBQUNHLEVBQUwsRUFBaEI7QUFDQSxVQUFNMkUsQ0FBQyxHQUFHekIsT0FBTyxFQUFqQjtBQUNBeUIsTUFBQUEsQ0FBQyxDQUFDTSxJQUFGLENBQU81RSx3QkFBUCxFQUFvQjZFLElBQXBCLENBQXlCLFFBQXpCLEVBQW1DLElBQW5DO0FBQ0E5RCxNQUFBQSxNQUFNLENBQUMrQyxhQUFELENBQU4sQ0FBc0IxQyxvQkFBdEIsQ0FBMkNMLE1BQU0sQ0FBQytELFFBQVAsRUFBM0MsRUFBOEQsS0FBOUQ7QUFDRCxLQUxDLENBQUY7QUFNRCxHQVBPLENBQVI7QUFTQTFFLEVBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QjBCLElBQUFBLEVBQUUsQ0FBQyxvQkFBRCxFQUF1QixZQUFNO0FBQzdCK0IsTUFBQUEsWUFBWSxHQUFHckUsSUFBSSxDQUFDRyxFQUFMLEVBQWY7QUFDQSxVQUFNMkUsQ0FBQyxHQUFHekIsT0FBTyxFQUFqQjtBQUNBeUIsTUFBQUEsQ0FBQyxDQUFDTSxJQUFGLENBQU81RSx3QkFBUCxFQUFvQjZFLElBQXBCLENBQXlCLFVBQXpCLEVBQXFDLElBQXJDO0FBQ0E5RCxNQUFBQSxNQUFNLENBQUM4QyxZQUFELENBQU4sQ0FBcUJ6QyxvQkFBckIsQ0FBMEMsR0FBMUMsRUFBK0M7QUFBRXdCLFFBQUFBLEtBQUssRUFBRTtBQUFULE9BQS9DO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0FQTyxDQUFSO0FBUUQsQ0FyRU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IE1vY2tDaGFuZ2UgZnJvbSAnLi4vLi4vaW1hZ2UvX190ZXN0c19fL21vY2stY2hhbmdlJztcbmltcG9ydCB7IERhdGEgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgTWF0aFBsdWdpbiwgeyBzZXJpYWxpemF0aW9uLCBpbmxpbmVNYXRoLCBDdXN0b21Ub29sYmFyQ29tcCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IHsgTWF0aFRvb2xiYXIgfSBmcm9tICdAcGllLWxpYi9tYXRoLXRvb2xiYXInO1xuamVzdC5tb2NrKCdAcGllLWZyYW1ld29yay9tYXRocXVpbGwnLCAoKSA9PiAoe1xuICBTdGF0aWNNYXRoOiBqZXN0LmZuKCksXG4gIGdldEludGVyZmFjZTogamVzdC5mbigpLm1vY2tSZXR1cm5UaGlzKCksXG4gIHJlZ2lzdGVyRW1iZWQ6IGplc3QuZm4oKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXRvb2xiYXInLCAoKSA9PiAoe1xuICBNYXRoUHJldmlldzogKCkgPT4gPGRpdiAvPixcbiAgTWF0aFRvb2xiYXI6ICgpID0+IDxkaXYgLz4sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJyksXG4gIG1tbFRvTGF0ZXg6IGplc3QuZm4oKCkgPT4ge1xuICAgIHJldHVybiAnL2Zvb2Jhci9sYXRleCc7XG4gIH0pLFxufSkpO1xuY29uc3QgbG9nID0gZGVidWcoJ0BwaWUtbGliOmVkaXRhYmxlLWh0bWw6dGVzdDptYXRoJyk7XG5cbi8vIEkgYmVsaWV2ZSBAYW5kcmVpIGlzIG1vdmluZyB0aGlzIHN0dWZmIG91dC5cbmRlc2NyaWJlKCdNYXRoUGx1Z2luJywgKCkgPT4ge1xuICBkZXNjcmliZSgndG9vbGJhcicsICgpID0+IHtcbiAgICBkZXNjcmliZSgnb25DbGljaycsICgpID0+IHtcbiAgICAgIGxldCBwbHVnaW4sIG1vY2tDaGFuZ2UsIHZhbHVlLCBvbkNoYW5nZTtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBwbHVnaW4gPSBNYXRoUGx1Z2luKHt9KTtcbiAgICAgICAgbW9ja0NoYW5nZSA9IG5ldyBNb2NrQ2hhbmdlKCk7XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgIGNoYW5nZTogamVzdC5mbigoKSA9PiBtb2NrQ2hhbmdlKSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIHBsdWdpbi50b29sYmFyLm9uQ2xpY2sodmFsdWUsIG9uQ2hhbmdlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdjYWxscyBpbnNlcnRJbmxpbmUnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtb2NrQ2hhbmdlLmluc2VydElubGluZSkudG9CZUNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBkYXRhOiBpbmxpbmVNYXRoKCkuZGF0YSB9KSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnaXQgY2FsbHMgb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NoYW5nZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlck5vZGUnLCAoKSA9PiB7XG4gICAgdGVzdCgndGhlIGNvbXBvbmVudCBoYXMgcHJvcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBNYXRoUGx1Z2luKHt9KTtcbiAgICAgIGNvbnN0IHsgcHJvcHMgfSA9IHBsdWdpbi5yZW5kZXJOb2RlKHsgbm9kZTogeyB0eXBlOiAnbWF0aCcgfSB9KTtcbiAgICAgIGV4cGVjdChwcm9wcy5ub2RlKS50b0VxdWFsKHsgdHlwZTogJ21hdGgnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2VyaWFsaXphdGlvbicsICgpID0+IHtcbiAgICBkZXNjcmliZSgnZGVzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnREZXNlcmlhbGl6ZSA9IChodG1sLCBleHBlY3RlZCwgd3JhcFR5cGUpID0+IHtcbiAgICAgICAgaXQoYGlubmVySFRNTDogJHtodG1sfSBpcyBkZXNlcmlhbGl6ZWQgdG86ICR7ZXhwZWN0ZWR9IHdpdGggd3JhcFR5cGU6ICR7d3JhcFR5cGV9YCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICAgICAgdGFnTmFtZTogJ3NwYW4nLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IGplc3QuZm4oKCkgPT4gJycpLFxuICAgICAgICAgICAgaGFzQXR0cmlidXRlOiBqZXN0LmZuKCgpID0+IHRydWUpLFxuICAgICAgICAgICAgaW5uZXJIVE1MOiBodG1sLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGplc3QuZm4oKTtcblxuICAgICAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoZWwsIG5leHQpO1xuICAgICAgICAgIGV4cGVjdChvdXQpLnRvRXF1YWwoe1xuICAgICAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgICAgIHR5cGU6ICdtYXRoJyxcbiAgICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGF0ZXg6IGV4cGVjdGVkLFxuICAgICAgICAgICAgICB3cmFwcGVyOiB3cmFwVHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgYXNzZXJ0RGVzZXJpYWxpemUoJyQkJmx0OyQkJywgJzwnLCBNYXRoUGx1Z2luLkRPTExBUik7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnJCZsdDskJywgJzwnLCBNYXRoUGx1Z2luLkRPTExBUik7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnXFxcXCgmbHQ7XFxcXCknLCAnPCcsIE1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0RGVzZXJpYWxpemUoJ1xcXFxbJmx0O1xcXFxdJywgJzwnLCBNYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTKTtcbiAgICAgIGFzc2VydERlc2VyaWFsaXplKCdsYXRleCcsICdsYXRleCcsIE1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0RGVzZXJpYWxpemUoJ1xcXFxkaXNwbGF5c3R5bGUgZm9vJywgJ2ZvbycsIE1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMpO1xuXG4gICAgICBpdCgnc2hvdWxkIG1ha2UgbWF0aG1sIGVkaXRhYmxlIGlmIE1hdGhQbHVnaW4ubWF0aE1sT3B0aW9ucy5tbWxFZGl0aW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICAgIE1hdGhQbHVnaW4ubWF0aE1sT3B0aW9ucy5tbWxFZGl0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZWwgPSB7XG4gICAgICAgICAgdGFnTmFtZTogJ21hdGgnLFxuICAgICAgICAgIG91dGVySFRNTDpcbiAgICAgICAgICAgICc8bWF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIj4gIDxtbj4yPC9tbj4gIDxtaT54PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPiYjeDIyNjQ7PC9tbz4gIDxtbj40PC9tbj4gIDxtaT55PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPis8L21vPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW4+ODwvbW4+IDxtc3FydD4gICAgPG1pPmg8L21pPiAgPC9tc3FydD48L21hdGg+JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGplc3QuZm4oKTtcblxuICAgICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKGVsLCBuZXh0KTtcblxuICAgICAgICBleHBlY3Qob3V0KS50b0VxdWFsKHtcbiAgICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICAgIHR5cGU6ICdtYXRoJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhdGV4OiAnL2Zvb2Jhci9sYXRleCcsXG4gICAgICAgICAgICB3cmFwcGVyOiAncm91bmRfYnJhY2tldHMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbWFrZSBtYXRobWwgcmVhZE9ubHkgaWYgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgICAgIE1hdGhQbHVnaW4ubWF0aE1sT3B0aW9ucy5tbWxFZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICAgIHRhZ05hbWU6ICdtYXRoJyxcbiAgICAgICAgICBvdXRlckhUTUw6XG4gICAgICAgICAgICAnPG1hdGggeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI+ICA8bW4+MjwvbW4+ICA8bWk+eDwvbWk+ICA8bXRleHQ+JiN4QTA7PC9tdGV4dD4gIDxtbz4mI3gyMjY0OzwvbW8+ICA8bW4+NDwvbW4+ICA8bWk+eTwvbWk+ICA8bXRleHQ+JiN4QTA7PC9tdGV4dD4gIDxtbz4rPC9tbz4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1uPjg8L21uPiA8bXNxcnQ+ICAgIDxtaT5oPC9taT4gIDwvbXNxcnQ+PC9tYXRoPicsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSBqZXN0LmZuKCk7XG5cbiAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShlbCwgbmV4dCk7XG5cbiAgICAgICAgZXhwZWN0KG91dCkudG9FcXVhbCh7XG4gICAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ21hdGhtbCcsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaHRtbDogZWwub3V0ZXJIVE1MLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2VyaWFsaXplJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0U2VyaWFsaXplID0gKGxhdGV4LCBleHBlY3RlZEh0bWwsIHdyYXBwZXIpID0+IHtcbiAgICAgICAgd3JhcHBlciA9IHdyYXBwZXIgfHwgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUztcbiAgICAgICAgaXQoYCR7bGF0ZXh9IGlzIHNlcmlhbGl6ZWQgdG86ICR7ZXhwZWN0ZWRIdG1sfWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSB7XG4gICAgICAgICAgICBraW5kOiAnaW5saW5lJyxcbiAgICAgICAgICAgIHR5cGU6ICdtYXRoJyxcbiAgICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHsgbGF0ZXgsIHdyYXBwZXIgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG4gICAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUob2JqZWN0LCBjaGlsZHJlbik7XG4gICAgICAgICAgbG9nKCdvdXQ6ICcsIG91dCk7XG4gICAgICAgICAgZXhwZWN0KG91dCkudG9FcXVhbChcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbGF0ZXg9XCJcIiBkYXRhLXJhdz17bGF0ZXh9PlxuICAgICAgICAgICAgICB7ZXhwZWN0ZWRIdG1sfVxuICAgICAgICAgICAgPC9zcGFuPixcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnbGF0ZXgnLCAnXFxcXChsYXRleFxcXFwpJywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG4gICAgICBhc3NlcnRTZXJpYWxpemUoJ2xhdGV4JywgJ1xcXFwobGF0ZXhcXFxcKScsIE1hdGhQbHVnaW4uU1FVQVJFX0JSQUNLRVRTKTtcbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnbGF0ZXgnLCAnJGxhdGV4JCcsIE1hdGhQbHVnaW4uRE9MTEFSKTtcbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnbGF0ZXgnLCAnJGxhdGV4JCcsIE1hdGhQbHVnaW4uRE9VQkxFX0RPTExBUik7XG5cbiAgICAgIC8qKlxuICAgICAgICogTm90ZSB0aGF0IHdoZW4gdGhpcyBpcyBjb252ZXJ0ZWQgdG8gaHRtbCBpdCBnZXQncyBlc2NhcGVkIC0gYnV0IHRoYXQncyBhbiBpc3N1ZSB3aXRoIHRoZSBzbGF0ZSBodG1sLXNlcmlhbGl6ZXIuXG4gICAgICAgKi9cbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnPCcsICdcXFxcKDxcXFxcKScpO1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCd4PHknLCAnXFxcXCh4PHlcXFxcKScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQ3VzdG9tVG9vbGJhckNvbXAnLCAoKSA9PiB7XG4gIGxldCBvbkRhdGFDaGFuZ2U7XG4gIGxldCBvblRvb2xiYXJEb25lO1xuXG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgbGV0IG1vY2tDaGFuZ2UgPSBuZXcgTW9ja0NoYW5nZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgbm9kZToge1xuICAgICAgICBrZXk6ICcxJyxcbiAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBsYXRleDogJ2ZvbycgfSksXG4gICAgICAgIGVxdWFsczogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB2YWx1ZToge1xuICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgIGdldE5leHRUZXh0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHsga2V5OiAnbnQnIH0pLFxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0NoYW5nZSksXG4gICAgICB9LFxuICAgICAgb25EYXRhQ2hhbmdlLFxuICAgICAgb25Ub29sYmFyRG9uZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi5kZWZhdWx0cyxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPEN1c3RvbVRvb2xiYXJDb21wIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXInLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBkZWZhdWx0IGtleXBhZE1vZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuXG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG5cbiAgICAgIHcuc2V0UHJvcHMoeyBwbHVnaW5Qcm9wczogeyBtYXRoOiB7IGtleXBhZE1vZGU6IDMgfSB9IH0pO1xuXG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGRlZmF1bHQga2V5cGFkTW9kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKHsgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlOiAnZ2VvbWV0cnknIH0gfSB9KTtcblxuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuXG4gICAgICB3LnNldFByb3BzKHsgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlOiAzIH0gfSB9KTtcblxuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb25Eb25lJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvblRvb2xiYXJEb25lJywgKCkgPT4ge1xuICAgICAgb25Ub29sYmFyRG9uZSA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICB3LmZpbmQoTWF0aFRvb2xiYXIpLnByb3AoJ29uRG9uZScpKCdvbycpO1xuICAgICAgZXhwZWN0KG9uVG9vbGJhckRvbmUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnl0aGluZygpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvbkNoYW5nZScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25EYXRhQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgb25EYXRhQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgdyA9IHdyYXBwZXIoKTtcbiAgICAgIHcuZmluZChNYXRoVG9vbGJhcikucHJvcCgnb25DaGFuZ2UnKSgnb28nKTtcbiAgICAgIGV4cGVjdChvbkRhdGFDaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcxJywgeyBsYXRleDogJ29vJyB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|