@pie-lib/editable-html 10.0.0-beta.5 → 10.0.0-beta.6
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 +255 -152
- package/lib/components.js +15 -39
- package/lib/components.js.map +1 -1
- package/lib/editor.js +200 -356
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -49
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +6 -67
- package/lib/new-serialization.js.map +1 -1
- package/lib/parse-html.js +7 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +3 -13
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +20 -59
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +9 -16
- package/lib/plugins/hotKeys/index.js.map +1 -1
- package/lib/plugins/image/alt-dialog.js +6 -27
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +42 -99
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +14 -50
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +16 -59
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -25
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +6 -36
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +11 -46
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +89 -93
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +32 -109
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +107 -195
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +7 -27
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +9 -14
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +13 -53
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +6 -20
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +5 -10
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +16 -31
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +7 -54
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +3 -10
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +6 -21
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -8
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +54 -187
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +12 -44
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +17 -46
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +2 -10
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +134 -144
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +2 -6
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +9 -40
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +29 -83
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +8 -30
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +11 -69
- package/lib/serialization.js.map +1 -1
- package/lib/test-serializer.js +3 -46
- package/lib/test-serializer.js.map +1 -1
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +7 -7
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +20 -22
- package/playground/image/index.jsx +10 -12
- package/playground/index.html +23 -25
- package/playground/mathquill/index.html +20 -23
- package/playground/mathquill/index.jsx +22 -18
- package/playground/prod-test/index.html +20 -24
- package/playground/prod-test/index.jsx +3 -5
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +4 -3
- package/playground/schema-override/index.html +19 -21
- package/playground/schema-override/index.jsx +14 -13
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +4 -3
- package/playground/serialization/index.html +20 -22
- package/playground/table-examples.html +8 -5
- package/playground/webpack.config.js +10 -10
- package/src/editor.jsx +108 -104
- package/src/index.jsx +20 -13
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +34 -23
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/image/alt-dialog.jsx +5 -4
- package/src/plugins/image/component.jsx +47 -44
- package/src/plugins/image/image-toolbar.jsx +19 -27
- package/src/plugins/image/index.jsx +24 -18
- package/src/plugins/image/insert-image-handler.js +9 -0
- package/src/plugins/index.jsx +7 -9
- package/src/plugins/list/index.jsx +7 -7
- package/src/plugins/math/index.jsx +71 -28
- package/src/plugins/media/index.jsx +7 -7
- package/src/plugins/media/media-dialog.js +63 -89
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +8 -5
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +19 -21
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -4
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +5 -4
- package/src/plugins/respArea/icons/index.jsx +14 -11
- package/src/plugins/respArea/index.jsx +9 -15
- package/src/plugins/respArea/inline-dropdown/index.jsx +6 -6
- package/src/plugins/respArea/utils.jsx +7 -3
- package/src/plugins/table/icons/index.jsx +11 -17
- package/src/plugins/table/index.jsx +14 -10
- package/src/plugins/table/table-toolbar.jsx +6 -6
- package/src/plugins/toolbar/default-toolbar.jsx +9 -9
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +36 -33
- package/src/plugins/toolbar/index.jsx +3 -2
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +6 -1
- package/src/plugins/utils.js +2 -2
- package/src/serialization.jsx +34 -32
- package/lib/old-serialization.js +0 -330
- package/lib/slate-editor.js +0 -302
- package/package-lock.json +0 -3762
|
@@ -1,58 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports["default"] = void 0;
|
|
9
|
-
|
|
10
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
-
|
|
14
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
-
|
|
16
11
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
17
|
-
|
|
18
12
|
var _react = _interopRequireDefault(require("react"));
|
|
19
|
-
|
|
20
13
|
var _slate = require("slate");
|
|
21
|
-
|
|
22
14
|
var _debug = _interopRequireDefault(require("debug"));
|
|
23
|
-
|
|
24
15
|
var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
|
|
25
|
-
|
|
26
16
|
var _tableToolbar = _interopRequireDefault(require("./table-toolbar"));
|
|
27
|
-
|
|
28
17
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
|
-
|
|
30
18
|
var _slateHyperscript = require("slate-hyperscript");
|
|
31
|
-
|
|
32
19
|
var _styles = require("@material-ui/styles");
|
|
33
|
-
|
|
34
20
|
var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter"));
|
|
35
|
-
|
|
36
21
|
var _toStyle = require("to-style");
|
|
37
|
-
|
|
38
22
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
39
|
-
|
|
40
23
|
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
41
|
-
|
|
42
24
|
var _reduce = _interopRequireDefault(require("lodash/reduce"));
|
|
43
|
-
|
|
44
25
|
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; }
|
|
45
|
-
|
|
46
26
|
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; }
|
|
47
|
-
|
|
48
27
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
49
|
-
|
|
50
28
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
51
|
-
|
|
52
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
53
|
-
|
|
29
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
54
30
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
|
|
55
|
-
|
|
56
31
|
var Table = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
57
32
|
var nodeAttributes = (0, _omit["default"])(dataToAttributes(props.element.data), 'newTable');
|
|
58
33
|
var attrs = (0, _omit["default"])(props.attributes, 'newTable');
|
|
@@ -61,7 +36,6 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
|
61
36
|
onBlur: props.onBlur
|
|
62
37
|
}), props.children);
|
|
63
38
|
});
|
|
64
|
-
|
|
65
39
|
Table.propTypes = {
|
|
66
40
|
attributes: _propTypes["default"].object,
|
|
67
41
|
element: _propTypes["default"].object,
|
|
@@ -74,22 +48,18 @@ Table.propTypes = {
|
|
|
74
48
|
}),
|
|
75
49
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
76
50
|
};
|
|
77
|
-
|
|
78
51
|
var TableRow = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
79
52
|
return /*#__PURE__*/_react["default"].createElement("tr", props.attributes, props.children);
|
|
80
53
|
});
|
|
81
|
-
|
|
82
54
|
TableRow.propTypes = {
|
|
83
55
|
attributes: _propTypes["default"].object,
|
|
84
56
|
onFocus: _propTypes["default"].func,
|
|
85
57
|
onBlur: _propTypes["default"].func,
|
|
86
58
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
87
59
|
};
|
|
88
|
-
|
|
89
60
|
var TableBody = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
90
61
|
return /*#__PURE__*/_react["default"].createElement("tbody", props.attributes, props.children);
|
|
91
62
|
});
|
|
92
|
-
|
|
93
63
|
TableBody.propTypes = {
|
|
94
64
|
attributes: _propTypes["default"].object,
|
|
95
65
|
onFocus: _propTypes["default"].func,
|
|
@@ -101,7 +71,6 @@ var useCellStyles = (0, _styles.makeStyles)({
|
|
|
101
71
|
minWidth: '25px'
|
|
102
72
|
}
|
|
103
73
|
});
|
|
104
|
-
|
|
105
74
|
var TableCell = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
106
75
|
var classes = useCellStyles();
|
|
107
76
|
var node = props.node;
|
|
@@ -115,7 +84,6 @@ var TableCell = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
|
115
84
|
onBlur: props.onBlur
|
|
116
85
|
}), props.children);
|
|
117
86
|
});
|
|
118
|
-
|
|
119
87
|
TableCell.propTypes = {
|
|
120
88
|
node: _propTypes["default"].object,
|
|
121
89
|
element: _propTypes["default"].object,
|
|
@@ -124,25 +92,20 @@ TableCell.propTypes = {
|
|
|
124
92
|
onBlur: _propTypes["default"].func,
|
|
125
93
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
126
94
|
};
|
|
127
|
-
|
|
128
95
|
var getAncestorByType = function getAncestorByType(editor, type) {
|
|
129
96
|
if (!editor || !type) {
|
|
130
97
|
return null;
|
|
131
98
|
}
|
|
132
|
-
|
|
133
99
|
var ancestors = _slate.Node.ancestors(editor, _slate.Editor.path(editor, editor.selection), {
|
|
134
100
|
reverse: true
|
|
135
101
|
});
|
|
136
|
-
|
|
137
102
|
var _iterator = _createForOfIteratorHelper(ancestors),
|
|
138
|
-
|
|
139
|
-
|
|
103
|
+
_step;
|
|
140
104
|
try {
|
|
141
105
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
142
106
|
var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
107
|
+
ancestor = _step$value[0],
|
|
108
|
+
ancestorPath = _step$value[1];
|
|
146
109
|
if (ancestor.type === type) {
|
|
147
110
|
return [ancestor, ancestorPath];
|
|
148
111
|
}
|
|
@@ -152,29 +115,23 @@ var getAncestorByType = function getAncestorByType(editor, type) {
|
|
|
152
115
|
} finally {
|
|
153
116
|
_iterator.f();
|
|
154
117
|
}
|
|
155
|
-
|
|
156
118
|
return null;
|
|
157
119
|
};
|
|
158
|
-
|
|
159
120
|
var moveToBeginningOfTable = function moveToBeginningOfTable(editor) {
|
|
160
121
|
var _getAncestorByType = getAncestorByType(editor, 'table'),
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
122
|
+
_getAncestorByType2 = (0, _slicedToArray2["default"])(_getAncestorByType, 2),
|
|
123
|
+
tableBlock = _getAncestorByType2[0],
|
|
124
|
+
tablePath = _getAncestorByType2[1];
|
|
165
125
|
var firstTdPath;
|
|
166
|
-
|
|
167
126
|
var _iterator2 = _createForOfIteratorHelper(_slate.Node.descendants(tableBlock, {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
127
|
+
reverse: true
|
|
128
|
+
})),
|
|
129
|
+
_step2;
|
|
172
130
|
try {
|
|
173
131
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
174
132
|
var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
133
|
+
descendant = _step2$value[0],
|
|
134
|
+
descendantPath = _step2$value[1];
|
|
178
135
|
if (descendant.type === 'td') {
|
|
179
136
|
firstTdPath = descendantPath;
|
|
180
137
|
}
|
|
@@ -184,28 +141,21 @@ var moveToBeginningOfTable = function moveToBeginningOfTable(editor) {
|
|
|
184
141
|
} finally {
|
|
185
142
|
_iterator2.f();
|
|
186
143
|
}
|
|
187
|
-
|
|
188
144
|
_slate.Transforms.select(editor, [].concat((0, _toConsumableArray2["default"])(tablePath), (0, _toConsumableArray2["default"])(firstTdPath)));
|
|
189
145
|
};
|
|
190
|
-
|
|
191
146
|
var TABLE_TYPES = ['tbody', 'tr', 'td', 'table'];
|
|
192
|
-
|
|
193
|
-
var _default = function _default(opts, toolbarPlugins
|
|
194
|
-
/* : {toolbar: {}}[] */
|
|
195
|
-
) {
|
|
147
|
+
var _default = function _default(opts, toolbarPlugins /* : {toolbar: {}}[] */) {
|
|
196
148
|
var core = {
|
|
197
149
|
utils: {},
|
|
198
150
|
rules: function rules(editor) {
|
|
199
151
|
var normalizeNode = editor.normalizeNode;
|
|
200
|
-
|
|
201
152
|
editor.normalizeNode = function (entry) {
|
|
202
153
|
var _entry = (0, _slicedToArray2["default"])(entry, 2),
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
var tableParent = _slate.Node.get(editor, tablePath.slice(0, -1)); // If the element is a paragraph, ensure its children are valid.
|
|
207
|
-
|
|
154
|
+
tableNode = _entry[0],
|
|
155
|
+
tablePath = _entry[1];
|
|
156
|
+
var tableParent = _slate.Node.get(editor, tablePath.slice(0, -1));
|
|
208
157
|
|
|
158
|
+
// If the element is a paragraph, ensure its children are valid.
|
|
209
159
|
if (_slate.Element.isElement(tableNode) && tableNode.type === 'table') {
|
|
210
160
|
var emptyBlock = {
|
|
211
161
|
type: 'paragraph',
|
|
@@ -213,9 +163,10 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
213
163
|
text: ''
|
|
214
164
|
}]
|
|
215
165
|
};
|
|
216
|
-
var tableIndex = tablePath.slice(-1)[0];
|
|
217
|
-
// so users can focus before the table
|
|
166
|
+
var tableIndex = tablePath.slice(-1)[0];
|
|
218
167
|
|
|
168
|
+
// if table is the first element, we need to add a space before
|
|
169
|
+
// so users can focus before the table
|
|
219
170
|
if (tableIndex === 0) {
|
|
220
171
|
var beforeTablePath = [].concat((0, _toConsumableArray2["default"])(tablePath.slice(0, -1)), [0]);
|
|
221
172
|
editor.apply({
|
|
@@ -225,9 +176,9 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
225
176
|
});
|
|
226
177
|
editor.continueNormalization();
|
|
227
178
|
return;
|
|
228
|
-
}
|
|
229
|
-
|
|
179
|
+
}
|
|
230
180
|
|
|
181
|
+
// if table is the last element, we add element after it
|
|
231
182
|
if (tableParent.children.length - 1 === tableIndex) {
|
|
232
183
|
var afterTablePath = [].concat((0, _toConsumableArray2["default"])(tablePath.slice(0, -1)), [tableIndex + 1]);
|
|
233
184
|
editor.apply({
|
|
@@ -237,15 +188,14 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
237
188
|
});
|
|
238
189
|
editor.continueNormalization();
|
|
239
190
|
return;
|
|
240
|
-
}
|
|
241
|
-
|
|
191
|
+
}
|
|
242
192
|
|
|
193
|
+
// if table does not have a tbody, we add it
|
|
243
194
|
if (tableNode.children[0].type !== 'tbody') {
|
|
244
195
|
var tBodyNode = {
|
|
245
196
|
type: 'tbody',
|
|
246
197
|
children: []
|
|
247
198
|
};
|
|
248
|
-
|
|
249
199
|
_slate.Transforms.wrapNodes(editor, tBodyNode, {
|
|
250
200
|
at: {
|
|
251
201
|
anchor: {
|
|
@@ -258,33 +208,28 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
258
208
|
}
|
|
259
209
|
}
|
|
260
210
|
});
|
|
261
|
-
|
|
262
211
|
editor.continueNormalization();
|
|
263
212
|
return;
|
|
264
213
|
}
|
|
265
|
-
}
|
|
266
|
-
|
|
214
|
+
}
|
|
267
215
|
|
|
216
|
+
// Fall back to the original `normalizeNode` to enforce other constraints.
|
|
268
217
|
normalizeNode(entry);
|
|
269
218
|
};
|
|
270
|
-
|
|
271
219
|
return editor;
|
|
272
220
|
}
|
|
273
221
|
};
|
|
274
|
-
|
|
275
222
|
core.utils.createTable = function () {
|
|
276
223
|
var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
277
224
|
var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
278
225
|
var tableRows = [];
|
|
279
226
|
var rowLength = new Array(row).fill(0).length;
|
|
280
227
|
var columnsLength = new Array(columns).fill(0).length;
|
|
281
|
-
|
|
282
228
|
for (var i = 0; i < rowLength; i++) {
|
|
283
229
|
var tableRow = {
|
|
284
230
|
type: 'tr',
|
|
285
231
|
children: []
|
|
286
232
|
};
|
|
287
|
-
|
|
288
233
|
for (var j = 0; j < columnsLength; j++) {
|
|
289
234
|
tableRow.children.push({
|
|
290
235
|
type: 'td',
|
|
@@ -293,10 +238,8 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
293
238
|
}]
|
|
294
239
|
});
|
|
295
240
|
}
|
|
296
|
-
|
|
297
241
|
tableRows.push(tableRow);
|
|
298
242
|
}
|
|
299
|
-
|
|
300
243
|
return {
|
|
301
244
|
type: 'table',
|
|
302
245
|
children: [{
|
|
@@ -305,23 +248,17 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
305
248
|
}]
|
|
306
249
|
};
|
|
307
250
|
};
|
|
308
|
-
|
|
309
251
|
core.utils.getTableBlock = function (editor) {
|
|
310
252
|
return getAncestorByType(editor, 'table');
|
|
311
253
|
};
|
|
312
|
-
|
|
313
254
|
core.utils.isSelectionInTable = function (editor) {
|
|
314
255
|
return !!core.utils.getTableBlock(editor);
|
|
315
256
|
};
|
|
316
|
-
|
|
317
257
|
core.utils.createTableWithOptions = function (row, columns, extra) {
|
|
318
258
|
var createdTable = core.utils.createTable(row, columns);
|
|
319
|
-
|
|
320
259
|
var newTable = _objectSpread(_objectSpread({}, createdTable), extra);
|
|
321
|
-
|
|
322
260
|
return newTable;
|
|
323
261
|
};
|
|
324
|
-
|
|
325
262
|
core.toolbar = {
|
|
326
263
|
icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
|
|
327
264
|
onClick: function onClick(editor) {
|
|
@@ -335,38 +272,30 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
335
272
|
editor.insertNode(newTable);
|
|
336
273
|
moveToBeginningOfTable(editor, newTable);
|
|
337
274
|
},
|
|
338
|
-
|
|
339
275
|
/**
|
|
340
276
|
* Note - the node may not be a table node - it may be a node inside a table.
|
|
341
277
|
*/
|
|
342
278
|
customToolbar: function customToolbar(node, nodePath, editor, onToolbarDone) {
|
|
343
279
|
log('[customToolbar] node.data: ', node.data);
|
|
344
|
-
|
|
345
280
|
var _core$utils$getTableB = core.utils.getTableBlock(editor),
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
281
|
+
_core$utils$getTableB2 = (0, _slicedToArray2["default"])(_core$utils$getTableB, 1),
|
|
282
|
+
tableBlock = _core$utils$getTableB2[0];
|
|
349
283
|
log('[customToolbar] tableBlock: ', tableBlock);
|
|
350
|
-
|
|
351
284
|
var hasBorder = function hasBorder() {
|
|
352
285
|
return (0, _get["default"])(tableBlock, 'data.border') !== '0';
|
|
353
286
|
};
|
|
354
|
-
|
|
355
287
|
var addRow = function addRow() {
|
|
356
288
|
var _getAncestorByType3 = getAncestorByType(editor, 'tr'),
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
289
|
+
_getAncestorByType4 = (0, _slicedToArray2["default"])(_getAncestorByType3, 2),
|
|
290
|
+
trNode = _getAncestorByType4[0],
|
|
291
|
+
trPath = _getAncestorByType4[1];
|
|
361
292
|
log('[addRow]');
|
|
362
|
-
|
|
363
293
|
if (trNode) {
|
|
364
294
|
var newTr = {
|
|
365
295
|
type: 'tr',
|
|
366
296
|
children: []
|
|
367
297
|
};
|
|
368
298
|
var columnsLength = trNode.children.length;
|
|
369
|
-
|
|
370
299
|
for (var i = 0; i < columnsLength; i++) {
|
|
371
300
|
newTr.children.push({
|
|
372
301
|
type: 'td',
|
|
@@ -375,29 +304,23 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
375
304
|
}]
|
|
376
305
|
});
|
|
377
306
|
}
|
|
378
|
-
|
|
379
307
|
_slate.Transforms.insertNodes(editor, [newTr], {
|
|
380
308
|
at: trPath
|
|
381
309
|
});
|
|
382
310
|
}
|
|
383
311
|
};
|
|
384
|
-
|
|
385
312
|
var removeRow = function removeRow() {
|
|
386
313
|
var _getAncestorByType5 = getAncestorByType(editor, 'tbody'),
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
314
|
+
_getAncestorByType6 = (0, _slicedToArray2["default"])(_getAncestorByType5, 2),
|
|
315
|
+
tBodyNode = _getAncestorByType6[0],
|
|
316
|
+
tBodyPath = _getAncestorByType6[1];
|
|
391
317
|
log('[removeRow]');
|
|
392
|
-
|
|
393
318
|
if (tBodyPath) {
|
|
394
319
|
if (tBodyNode.children.length > 1) {
|
|
395
320
|
var _getAncestorByType7 = getAncestorByType(editor, 'tr'),
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
321
|
+
_getAncestorByType8 = (0, _slicedToArray2["default"])(_getAncestorByType7, 2),
|
|
322
|
+
trPath = _getAncestorByType8[1];
|
|
399
323
|
log('[removeRow]');
|
|
400
|
-
|
|
401
324
|
if (trPath) {
|
|
402
325
|
_slate.Transforms.removeNodes(editor, {
|
|
403
326
|
at: trPath
|
|
@@ -406,15 +329,12 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
406
329
|
}
|
|
407
330
|
}
|
|
408
331
|
};
|
|
409
|
-
|
|
410
332
|
var addColumn = function addColumn() {
|
|
411
333
|
var _getAncestorByType9 = getAncestorByType(editor, 'tbody'),
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
334
|
+
_getAncestorByType10 = (0, _slicedToArray2["default"])(_getAncestorByType9, 2),
|
|
335
|
+
tBodyNode = _getAncestorByType10[0],
|
|
336
|
+
tBodyPath = _getAncestorByType10[1];
|
|
416
337
|
log('[addColumn]');
|
|
417
|
-
|
|
418
338
|
if (tBodyNode) {
|
|
419
339
|
var emptyTd = {
|
|
420
340
|
type: 'td',
|
|
@@ -422,7 +342,6 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
422
342
|
text: ''
|
|
423
343
|
}]
|
|
424
344
|
};
|
|
425
|
-
|
|
426
345
|
var trElements = _slate.Editor.nodes(editor, {
|
|
427
346
|
at: tBodyPath,
|
|
428
347
|
// Path of Editor
|
|
@@ -430,16 +349,13 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
430
349
|
return 'tr' === node.type;
|
|
431
350
|
}
|
|
432
351
|
});
|
|
433
|
-
|
|
434
352
|
var _iterator3 = _createForOfIteratorHelper(trElements),
|
|
435
|
-
|
|
436
|
-
|
|
353
|
+
_step3;
|
|
437
354
|
try {
|
|
438
355
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
439
356
|
var _step3$value = (0, _slicedToArray2["default"])(_step3.value, 2),
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
357
|
+
trNode = _step3$value[0],
|
|
358
|
+
_nodePath = _step3$value[1];
|
|
443
359
|
_slate.Transforms.insertNodes(editor, [emptyTd], {
|
|
444
360
|
at: [].concat((0, _toConsumableArray2["default"])(_nodePath), [trNode.children.length])
|
|
445
361
|
});
|
|
@@ -451,20 +367,15 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
451
367
|
}
|
|
452
368
|
}
|
|
453
369
|
};
|
|
454
|
-
|
|
455
370
|
var removeColumn = function removeColumn() {
|
|
456
371
|
var _getAncestorByType11 = getAncestorByType(editor, 'tbody'),
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
372
|
+
_getAncestorByType12 = (0, _slicedToArray2["default"])(_getAncestorByType11, 2),
|
|
373
|
+
tBodyNode = _getAncestorByType12[0],
|
|
374
|
+
tBodyPath = _getAncestorByType12[1];
|
|
461
375
|
log('[addColumn]');
|
|
462
|
-
|
|
463
376
|
if (tBodyNode) {
|
|
464
377
|
var currentPath = _slate.Editor.path(editor, editor.selection);
|
|
465
|
-
|
|
466
378
|
var columnIndex = currentPath[currentPath.length - 2];
|
|
467
|
-
|
|
468
379
|
var trElements = _slate.Editor.nodes(editor, {
|
|
469
380
|
at: tBodyPath,
|
|
470
381
|
// Path of Editor
|
|
@@ -472,16 +383,13 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
472
383
|
return 'tr' === node.type;
|
|
473
384
|
}
|
|
474
385
|
});
|
|
475
|
-
|
|
476
386
|
var _iterator4 = _createForOfIteratorHelper(trElements),
|
|
477
|
-
|
|
478
|
-
|
|
387
|
+
_step4;
|
|
479
388
|
try {
|
|
480
389
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
481
390
|
var _step4$value = (0, _slicedToArray2["default"])(_step4.value, 2),
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
391
|
+
trNode = _step4$value[0],
|
|
392
|
+
_nodePath2 = _step4$value[1];
|
|
485
393
|
if (trNode.children.length > 1) {
|
|
486
394
|
_slate.Transforms.removeNodes(editor, {
|
|
487
395
|
at: [].concat((0, _toConsumableArray2["default"])(_nodePath2), [columnIndex])
|
|
@@ -495,31 +403,25 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
495
403
|
}
|
|
496
404
|
}
|
|
497
405
|
};
|
|
498
|
-
|
|
499
406
|
var removeTable = function removeTable() {
|
|
500
407
|
var _getAncestorByType13 = getAncestorByType(editor, 'table'),
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
408
|
+
_getAncestorByType14 = (0, _slicedToArray2["default"])(_getAncestorByType13, 2),
|
|
409
|
+
tableNode = _getAncestorByType14[0],
|
|
410
|
+
tablePath = _getAncestorByType14[1];
|
|
505
411
|
editor.apply({
|
|
506
412
|
type: 'remove_node',
|
|
507
413
|
path: tablePath,
|
|
508
414
|
node: tableNode
|
|
509
415
|
});
|
|
510
416
|
};
|
|
511
|
-
|
|
512
417
|
var toggleBorder = function toggleBorder() {
|
|
513
418
|
var data = tableBlock.data;
|
|
514
|
-
|
|
515
419
|
var update = _objectSpread(_objectSpread({}, data), {}, {
|
|
516
420
|
border: hasBorder() ? '0' : '1'
|
|
517
421
|
});
|
|
518
|
-
|
|
519
422
|
var _getAncestorByType15 = getAncestorByType(editor, 'table'),
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
423
|
+
_getAncestorByType16 = (0, _slicedToArray2["default"])(_getAncestorByType15, 2),
|
|
424
|
+
tablePath = _getAncestorByType16[1];
|
|
523
425
|
log('[toggleBorder] update: ', update);
|
|
524
426
|
editor.apply({
|
|
525
427
|
type: 'set_node',
|
|
@@ -532,12 +434,10 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
532
434
|
}
|
|
533
435
|
});
|
|
534
436
|
};
|
|
535
|
-
|
|
536
437
|
var onDone = function onDone() {
|
|
537
438
|
log('[onDone] call onToolbarDone...');
|
|
538
439
|
onToolbarDone(true);
|
|
539
440
|
};
|
|
540
|
-
|
|
541
441
|
var Tb = function Tb() {
|
|
542
442
|
return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
|
|
543
443
|
editor: editor,
|
|
@@ -555,15 +455,12 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
555
455
|
onDone: onDone
|
|
556
456
|
});
|
|
557
457
|
};
|
|
558
|
-
|
|
559
458
|
return Tb;
|
|
560
459
|
}
|
|
561
460
|
};
|
|
562
|
-
|
|
563
461
|
core.supports = function (node) {
|
|
564
462
|
return TABLE_TYPES.includes(node.type);
|
|
565
463
|
};
|
|
566
|
-
|
|
567
464
|
var Node = function Node(props) {
|
|
568
465
|
switch (props.node.type) {
|
|
569
466
|
case 'table':
|
|
@@ -571,63 +468,49 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
571
468
|
onFocus: opts.onFocus,
|
|
572
469
|
onBlur: opts.onBlur
|
|
573
470
|
}));
|
|
574
|
-
|
|
575
471
|
case 'tbody':
|
|
576
472
|
return /*#__PURE__*/_react["default"].createElement(TableBody, (0, _extends2["default"])({}, props, {
|
|
577
473
|
onFocus: opts.onFocus,
|
|
578
474
|
onBlur: opts.onBlur
|
|
579
475
|
}));
|
|
580
|
-
|
|
581
476
|
case 'tr':
|
|
582
477
|
return /*#__PURE__*/_react["default"].createElement(TableRow, props);
|
|
583
|
-
|
|
584
478
|
case 'td':
|
|
585
479
|
return /*#__PURE__*/_react["default"].createElement(TableCell, (0, _extends2["default"])({}, props, {
|
|
586
480
|
onFocus: opts.onFocus,
|
|
587
481
|
onBlur: opts.onBlur
|
|
588
482
|
}));
|
|
589
|
-
|
|
590
483
|
default:
|
|
591
484
|
return null;
|
|
592
485
|
}
|
|
593
486
|
};
|
|
594
|
-
|
|
595
487
|
Node.propTypes = {
|
|
596
488
|
node: _propTypes["default"].object
|
|
597
489
|
};
|
|
598
490
|
core.renderNode = Node;
|
|
599
491
|
return core;
|
|
600
492
|
};
|
|
601
|
-
|
|
602
493
|
exports["default"] = _default;
|
|
603
|
-
|
|
604
494
|
var parseStyleString = function parseStyleString(s) {
|
|
605
495
|
var regex = /([\w-]*)\s*:\s*([^;]*)/g;
|
|
606
496
|
var match;
|
|
607
497
|
var result = {};
|
|
608
|
-
|
|
609
498
|
while (match = regex.exec(s)) {
|
|
610
499
|
result[match[1]] = match[2].trim();
|
|
611
500
|
}
|
|
612
|
-
|
|
613
501
|
return result;
|
|
614
502
|
};
|
|
615
|
-
|
|
616
503
|
exports.parseStyleString = parseStyleString;
|
|
617
|
-
|
|
618
504
|
var reactAttributes = function reactAttributes(o) {
|
|
619
505
|
return (0, _toStyle.object)(o, {
|
|
620
506
|
camelize: true,
|
|
621
507
|
addUnits: false
|
|
622
508
|
});
|
|
623
509
|
};
|
|
624
|
-
|
|
625
510
|
exports.reactAttributes = reactAttributes;
|
|
626
|
-
|
|
627
511
|
var attributesToMap = function attributesToMap(el) {
|
|
628
512
|
return function (acc, attribute) {
|
|
629
513
|
var value = el.getAttribute(attribute);
|
|
630
|
-
|
|
631
514
|
if (value) {
|
|
632
515
|
if (attribute === 'style') {
|
|
633
516
|
var styleString = el.getAttribute(attribute);
|
|
@@ -637,27 +520,22 @@ var attributesToMap = function attributesToMap(el) {
|
|
|
637
520
|
acc[attribute] = el.getAttribute(attribute);
|
|
638
521
|
}
|
|
639
522
|
}
|
|
640
|
-
|
|
641
523
|
return acc;
|
|
642
524
|
};
|
|
643
525
|
};
|
|
644
|
-
|
|
645
526
|
var dataToAttributes = function dataToAttributes(data) {
|
|
646
527
|
return (0, _reduce["default"])(data, function (acc, v, name) {
|
|
647
528
|
if (v) {
|
|
648
529
|
acc[(0, _reactAttrConverter["default"])(name)] = v;
|
|
649
530
|
}
|
|
650
|
-
|
|
651
531
|
return acc;
|
|
652
532
|
}, {});
|
|
653
533
|
};
|
|
654
|
-
|
|
655
534
|
var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
|
|
656
535
|
var cellAttributes = ['colspan', 'rowspan', 'class', 'style'];
|
|
657
536
|
var serialization = {
|
|
658
537
|
deserialize: function deserialize(el, next) {
|
|
659
538
|
var tag = el.tagName.toLowerCase();
|
|
660
|
-
|
|
661
539
|
switch (tag) {
|
|
662
540
|
case 'table':
|
|
663
541
|
{
|
|
@@ -668,14 +546,12 @@ var serialization = {
|
|
|
668
546
|
data: attributes.reduce(attributesToMap(el), {})
|
|
669
547
|
}, next(c));
|
|
670
548
|
}
|
|
671
|
-
|
|
672
549
|
case 'tbody':
|
|
673
550
|
{
|
|
674
551
|
return (0, _slateHyperscript.jsx)('element', {
|
|
675
552
|
type: 'tbody'
|
|
676
553
|
}, next(el.childNodes));
|
|
677
554
|
}
|
|
678
|
-
|
|
679
555
|
case 'th':
|
|
680
556
|
{
|
|
681
557
|
return (0, _slateHyperscript.jsx)('element', {
|
|
@@ -685,14 +561,12 @@ var serialization = {
|
|
|
685
561
|
})
|
|
686
562
|
}, next(el.childNodes));
|
|
687
563
|
}
|
|
688
|
-
|
|
689
564
|
case 'tr':
|
|
690
565
|
{
|
|
691
566
|
return (0, _slateHyperscript.jsx)('element', {
|
|
692
567
|
type: 'tr'
|
|
693
568
|
}, next(Array.from(el.children)));
|
|
694
569
|
}
|
|
695
|
-
|
|
696
570
|
case 'td':
|
|
697
571
|
{
|
|
698
572
|
return (0, _slateHyperscript.jsx)('element', {
|
|
@@ -709,35 +583,28 @@ var serialization = {
|
|
|
709
583
|
case 'table':
|
|
710
584
|
{
|
|
711
585
|
var _attributes = dataToAttributes(object.data);
|
|
712
|
-
|
|
713
586
|
return /*#__PURE__*/_react["default"].createElement("table", _attributes, children);
|
|
714
587
|
}
|
|
715
|
-
|
|
716
588
|
case 'tbody':
|
|
717
589
|
{
|
|
718
590
|
return /*#__PURE__*/_react["default"].createElement("tbody", null, children);
|
|
719
591
|
}
|
|
720
|
-
|
|
721
592
|
case 'tr':
|
|
722
593
|
{
|
|
723
594
|
return /*#__PURE__*/_react["default"].createElement("tr", null, children);
|
|
724
595
|
}
|
|
725
|
-
|
|
726
596
|
case 'td':
|
|
727
597
|
{
|
|
728
598
|
var _attributes2 = dataToAttributes(object.data);
|
|
729
|
-
|
|
730
599
|
return /*#__PURE__*/_react["default"].createElement("td", _attributes2, children);
|
|
731
600
|
}
|
|
732
|
-
|
|
733
601
|
case 'th':
|
|
734
602
|
{
|
|
735
603
|
var _attributes3 = dataToAttributes(object.data);
|
|
736
|
-
|
|
737
604
|
return /*#__PURE__*/_react["default"].createElement("th", _attributes3, children);
|
|
738
605
|
}
|
|
739
606
|
}
|
|
740
607
|
}
|
|
741
608
|
};
|
|
742
609
|
exports.serialization = serialization;
|
|
743
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIlRhYmxlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJub2RlQXR0cmlidXRlcyIsIm9taXQiLCJkYXRhVG9BdHRyaWJ1dGVzIiwiZWxlbWVudCIsImRhdGEiLCJhdHRycyIsImF0dHJpYnV0ZXMiLCJvbkZvY3VzIiwib25CbHVyIiwiY2hpbGRyZW4iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwibm9kZSIsInNoYXBlIiwidHlwZSIsInN0cmluZyIsImFycmF5Iiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsImlzUmVxdWlyZWQiLCJUYWJsZVJvdyIsIlRhYmxlQm9keSIsInVzZUNlbGxTdHlsZXMiLCJtYWtlU3R5bGVzIiwidGQiLCJtaW5XaWR0aCIsIlRhYmxlQ2VsbCIsImNsYXNzZXMiLCJUYWciLCJnZXQiLCJoZWFkZXIiLCJnZXRBbmNlc3RvckJ5VHlwZSIsImVkaXRvciIsImFuY2VzdG9ycyIsIlNsYXRlTm9kZSIsIkVkaXRvciIsInBhdGgiLCJzZWxlY3Rpb24iLCJyZXZlcnNlIiwiYW5jZXN0b3IiLCJhbmNlc3RvclBhdGgiLCJtb3ZlVG9CZWdpbm5pbmdPZlRhYmxlIiwidGFibGVCbG9jayIsInRhYmxlUGF0aCIsImZpcnN0VGRQYXRoIiwiZGVzY2VuZGFudHMiLCJkZXNjZW5kYW50IiwiZGVzY2VuZGFudFBhdGgiLCJUcmFuc2Zvcm1zIiwic2VsZWN0IiwiVEFCTEVfVFlQRVMiLCJvcHRzIiwidG9vbGJhclBsdWdpbnMiLCJjb3JlIiwidXRpbHMiLCJydWxlcyIsIm5vcm1hbGl6ZU5vZGUiLCJlbnRyeSIsInRhYmxlTm9kZSIsInRhYmxlUGFyZW50Iiwic2xpY2UiLCJTbGF0ZUVsZW1lbnQiLCJpc0VsZW1lbnQiLCJlbXB0eUJsb2NrIiwidGV4dCIsInRhYmxlSW5kZXgiLCJiZWZvcmVUYWJsZVBhdGgiLCJhcHBseSIsImNvbnRpbnVlTm9ybWFsaXphdGlvbiIsImxlbmd0aCIsImFmdGVyVGFibGVQYXRoIiwidEJvZHlOb2RlIiwid3JhcE5vZGVzIiwiYXQiLCJhbmNob3IiLCJvZmZzZXQiLCJmb2N1cyIsImNyZWF0ZVRhYmxlIiwicm93IiwiY29sdW1ucyIsInRhYmxlUm93cyIsInJvd0xlbmd0aCIsIkFycmF5IiwiZmlsbCIsImNvbHVtbnNMZW5ndGgiLCJpIiwidGFibGVSb3ciLCJqIiwicHVzaCIsImdldFRhYmxlQmxvY2siLCJpc1NlbGVjdGlvbkluVGFibGUiLCJjcmVhdGVUYWJsZVdpdGhPcHRpb25zIiwiZXh0cmEiLCJjcmVhdGVkVGFibGUiLCJuZXdUYWJsZSIsInRvb2xiYXIiLCJpY29uIiwib25DbGljayIsImJvcmRlciIsImluc2VydE5vZGUiLCJjdXN0b21Ub29sYmFyIiwibm9kZVBhdGgiLCJvblRvb2xiYXJEb25lIiwiaGFzQm9yZGVyIiwiYWRkUm93IiwidHJOb2RlIiwidHJQYXRoIiwibmV3VHIiLCJpbnNlcnROb2RlcyIsInJlbW92ZVJvdyIsInRCb2R5UGF0aCIsInJlbW92ZU5vZGVzIiwiYWRkQ29sdW1uIiwiZW1wdHlUZCIsInRyRWxlbWVudHMiLCJub2RlcyIsIm1hdGNoIiwicmVtb3ZlQ29sdW1uIiwiY3VycmVudFBhdGgiLCJjb2x1bW5JbmRleCIsInJlbW92ZVRhYmxlIiwidG9nZ2xlQm9yZGVyIiwidXBkYXRlIiwicHJvcGVydGllcyIsIm5ld1Byb3BlcnRpZXMiLCJvbkRvbmUiLCJUYiIsImMiLCJzdXBwb3J0cyIsImluY2x1ZGVzIiwiTm9kZSIsInJlbmRlck5vZGUiLCJwYXJzZVN0eWxlU3RyaW5nIiwicyIsInJlZ2V4IiwicmVzdWx0IiwiZXhlYyIsInRyaW0iLCJyZWFjdEF0dHJpYnV0ZXMiLCJvIiwidG9TdHlsZU9iamVjdCIsImNhbWVsaXplIiwiYWRkVW5pdHMiLCJhdHRyaWJ1dGVzVG9NYXAiLCJlbCIsImFjYyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiZ2V0QXR0cmlidXRlIiwic3R5bGVTdHJpbmciLCJyZWFjdFN0eWxlT2JqZWN0IiwicmVkdWNlIiwidiIsIm5hbWUiLCJjb252ZXJ0IiwiY2VsbEF0dHJpYnV0ZXMiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJuZXh0IiwidGFnIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiZnJvbSIsImpzeCIsImNoaWxkTm9kZXMiLCJzZXJpYWxpemUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy90YWJsZS9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5vZGUgYXMgU2xhdGVOb2RlLCBFbGVtZW50IGFzIFNsYXRlRWxlbWVudCwgRWRpdG9yLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBHcmlkT24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0dyaWRPbic7XG5pbXBvcnQgVGFibGVUb29sYmFyIGZyb20gJy4vdGFibGUtdG9vbGJhcic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnc2xhdGUtaHlwZXJzY3JpcHQnO1xuaW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9zdHlsZXMnO1xuaW1wb3J0IGNvbnZlcnQgZnJvbSAncmVhY3QtYXR0ci1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgb2JqZWN0IGFzIHRvU3R5bGVPYmplY3QgfSBmcm9tICd0by1zdHlsZSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IG9taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuaW1wb3J0IHJlZHVjZSBmcm9tICdsb2Rhc2gvcmVkdWNlJztcblxuY29uc3QgbG9nID0gZGVidWcoJ0BwaWUtbGliOmVkaXRhYmxlLWh0bWw6cGx1Z2luczp0YWJsZScpO1xuXG5jb25zdCBUYWJsZSA9IFJlYWN0LmZvcndhcmRSZWYocHJvcHMgPT4ge1xuICBjb25zdCBub2RlQXR0cmlidXRlcyA9IG9taXQoZGF0YVRvQXR0cmlidXRlcyhwcm9wcy5lbGVtZW50LmRhdGEpLCAnbmV3VGFibGUnKTtcbiAgY29uc3QgYXR0cnMgPSBvbWl0KHByb3BzLmF0dHJpYnV0ZXMsICduZXdUYWJsZScpO1xuXG4gIHJldHVybiAoXG4gICAgPHRhYmxlIHsuLi5hdHRyc30gey4uLm5vZGVBdHRyaWJ1dGVzfSBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfSBvbkJsdXI9e3Byb3BzLm9uQmx1cn0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC90YWJsZT5cbiAgKTtcbn0pO1xuXG5UYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBub2RlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWRcbn07XG5cbmNvbnN0IFRhYmxlUm93ID0gUmVhY3QuZm9yd2FyZFJlZihwcm9wcyA9PiA8dHIgey4uLnByb3BzLmF0dHJpYnV0ZXN9Pntwcm9wcy5jaGlsZHJlbn08L3RyPik7XG5cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgVGFibGVCb2R5ID0gUmVhY3QuZm9yd2FyZFJlZihwcm9wcyA9PiA8dGJvZHkgey4uLnByb3BzLmF0dHJpYnV0ZXN9Pntwcm9wcy5jaGlsZHJlbn08L3Rib2R5Pik7XG5cblRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWRcbn07XG5cbmNvbnN0IHVzZUNlbGxTdHlsZXMgPSBtYWtlU3R5bGVzKHtcbiAgdGQ6IHtcbiAgICBtaW5XaWR0aDogJzI1cHgnXG4gIH1cbn0pO1xuXG5jb25zdCBUYWJsZUNlbGwgPSBSZWFjdC5mb3J3YXJkUmVmKHByb3BzID0+IHtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZUNlbGxTdHlsZXMoKTtcbiAgY29uc3QgeyBub2RlIH0gPSBwcm9wcztcbiAgY29uc3QgVGFnID0gZ2V0KG5vZGUsICdkYXRhLmhlYWRlcicpID8gJ3RoJyA6ICd0ZCc7XG5cbiAgY29uc3Qgbm9kZUF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKHByb3BzLmVsZW1lbnQuZGF0YSk7XG4gIGRlbGV0ZSBub2RlQXR0cmlidXRlcy5oZWFkZXI7XG5cbiAgcmV0dXJuIChcbiAgICA8VGFnXG4gICAgICB7Li4ucHJvcHMuYXR0cmlidXRlc31cbiAgICAgIHsuLi5ub2RlQXR0cmlidXRlc31cbiAgICAgIGNvbFNwYW49e2dldChub2RlLCAnZGF0YS5jb2xzcGFuJyl9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbVGFnXX1cbiAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XG4gICAgICBvbkJsdXI9e3Byb3BzLm9uQmx1cn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9UYWc+XG4gICk7XG59KTtcblxuVGFibGVDZWxsLnByb3BUeXBlcyA9IHtcbiAgbm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9iamVjdCxcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgZ2V0QW5jZXN0b3JCeVR5cGUgPSAoZWRpdG9yLCB0eXBlKSA9PiB7XG4gIGlmICghZWRpdG9yIHx8ICF0eXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhbmNlc3RvcnMgPSBTbGF0ZU5vZGUuYW5jZXN0b3JzKGVkaXRvciwgRWRpdG9yLnBhdGgoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKSwge1xuICAgIHJldmVyc2U6IHRydWVcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbYW5jZXN0b3IsIGFuY2VzdG9yUGF0aF0gb2YgYW5jZXN0b3JzKSB7XG4gICAgaWYgKGFuY2VzdG9yLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgIHJldHVybiBbYW5jZXN0b3IsIGFuY2VzdG9yUGF0aF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBtb3ZlVG9CZWdpbm5pbmdPZlRhYmxlID0gZWRpdG9yID0+IHtcbiAgY29uc3QgW3RhYmxlQmxvY2ssIHRhYmxlUGF0aF0gPSBnZXRBbmNlc3RvckJ5VHlwZShlZGl0b3IsICd0YWJsZScpO1xuICBsZXQgZmlyc3RUZFBhdGg7XG5cbiAgZm9yIChjb25zdCBbZGVzY2VuZGFudCwgZGVzY2VuZGFudFBhdGhdIG9mIFNsYXRlTm9kZS5kZXNjZW5kYW50cyh0YWJsZUJsb2NrLCB7IHJldmVyc2U6IHRydWUgfSkpIHtcbiAgICBpZiAoZGVzY2VuZGFudC50eXBlID09PSAndGQnKSB7XG4gICAgICBmaXJzdFRkUGF0aCA9IGRlc2NlbmRhbnRQYXRoO1xuICAgIH1cbiAgfVxuXG4gIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLnRhYmxlUGF0aCwgLi4uZmlyc3RUZFBhdGhdKTtcbn07XG5cbmNvbnN0IFRBQkxFX1RZUEVTID0gWyd0Ym9keScsICd0cicsICd0ZCcsICd0YWJsZSddO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cywgdG9vbGJhclBsdWdpbnMgLyogOiAge3Rvb2xiYXI6IHt9fVtdICovKSA9PiB7XG4gIGNvbnN0IGNvcmUgPSB7XG4gICAgdXRpbHM6IHt9LFxuICAgIHJ1bGVzOiBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgeyBub3JtYWxpemVOb2RlIH0gPSBlZGl0b3I7XG5cbiAgICAgIGVkaXRvci5ub3JtYWxpemVOb2RlID0gZW50cnkgPT4ge1xuICAgICAgICBjb25zdCBbdGFibGVOb2RlLCB0YWJsZVBhdGhdID0gZW50cnk7XG4gICAgICAgIGNvbnN0IHRhYmxlUGFyZW50ID0gU2xhdGVOb2RlLmdldChlZGl0b3IsIHRhYmxlUGF0aC5zbGljZSgwLCAtMSkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgcGFyYWdyYXBoLCBlbnN1cmUgaXRzIGNoaWxkcmVuIGFyZSB2YWxpZC5cbiAgICAgICAgaWYgKFNsYXRlRWxlbWVudC5pc0VsZW1lbnQodGFibGVOb2RlKSAmJiB0YWJsZU5vZGUudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgIGNvbnN0IGVtcHR5QmxvY2sgPSB7XG4gICAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgdGFibGVJbmRleCA9IHRhYmxlUGF0aC5zbGljZSgtMSlbMF07XG5cbiAgICAgICAgICAvLyBpZiB0YWJsZSBpcyB0aGUgZmlyc3QgZWxlbWVudCwgd2UgbmVlZCB0byBhZGQgYSBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAvLyBzbyB1c2VycyBjYW4gZm9jdXMgYmVmb3JlIHRoZSB0YWJsZVxuICAgICAgICAgIGlmICh0YWJsZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVUYWJsZVBhdGggPSBbLi4udGFibGVQYXRoLnNsaWNlKDAsIC0xKSwgMF07XG5cbiAgICAgICAgICAgIGVkaXRvci5hcHBseSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbnNlcnRfbm9kZScsXG4gICAgICAgICAgICAgIHBhdGg6IGJlZm9yZVRhYmxlUGF0aCxcbiAgICAgICAgICAgICAgbm9kZTogZW1wdHlCbG9ja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgdGFibGUgaXMgdGhlIGxhc3QgZWxlbWVudCwgd2UgYWRkIGVsZW1lbnQgYWZ0ZXIgaXRcbiAgICAgICAgICBpZiAodGFibGVQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSA9PT0gdGFibGVJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUYWJsZVBhdGggPSBbLi4udGFibGVQYXRoLnNsaWNlKDAsIC0xKSwgdGFibGVJbmRleCArIDFdO1xuXG4gICAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5zZXJ0X25vZGUnLFxuICAgICAgICAgICAgICBwYXRoOiBhZnRlclRhYmxlUGF0aCxcbiAgICAgICAgICAgICAgbm9kZTogZW1wdHlCbG9ja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHRib2R5LCB3ZSBhZGQgaXRcbiAgICAgICAgICBpZiAodGFibGVOb2RlLmNoaWxkcmVuWzBdLnR5cGUgIT09ICd0Ym9keScpIHtcbiAgICAgICAgICAgIGNvbnN0IHRCb2R5Tm9kZSA9IHsgdHlwZTogJ3Rib2R5JywgY2hpbGRyZW46IFtdIH07XG5cbiAgICAgICAgICAgIFRyYW5zZm9ybXMud3JhcE5vZGVzKGVkaXRvciwgdEJvZHlOb2RlLCB7XG4gICAgICAgICAgICAgIGF0OiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yOiB7IHBhdGg6IFsuLi50YWJsZVBhdGgsIDBdLCBvZmZzZXQ6IDAgfSxcbiAgICAgICAgICAgICAgICBmb2N1czogeyBwYXRoOiBbLi4udGFibGVQYXRoLCB0YWJsZU5vZGUuY2hpbGRyZW4ubGVuZ3RoXSwgb2Zmc2V0OiAwIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBgbm9ybWFsaXplTm9kZWAgdG8gZW5mb3JjZSBvdGhlciBjb25zdHJhaW50cy5cbiAgICAgICAgbm9ybWFsaXplTm9kZShlbnRyeSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cbiAgfTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlID0gKHJvdyA9IDIsIGNvbHVtbnMgPSAyKSA9PiB7XG4gICAgY29uc3QgdGFibGVSb3dzID0gW107XG4gICAgY29uc3Qgcm93TGVuZ3RoID0gbmV3IEFycmF5KHJvdykuZmlsbCgwKS5sZW5ndGg7XG4gICAgY29uc3QgY29sdW1uc0xlbmd0aCA9IG5ldyBBcnJheShjb2x1bW5zKS5maWxsKDApLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRhYmxlUm93ID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdGFibGVSb3cuY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRhYmxlUm93cy5wdXNoKHRhYmxlUm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGJvZHknLFxuICAgICAgICAgIGNoaWxkcmVuOiB0YWJsZVJvd3NcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH07XG5cbiAgY29yZS51dGlscy5nZXRUYWJsZUJsb2NrID0gZWRpdG9yID0+IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgY29yZS51dGlscy5pc1NlbGVjdGlvbkluVGFibGUgPSBlZGl0b3IgPT4gISFjb3JlLnV0aWxzLmdldFRhYmxlQmxvY2soZWRpdG9yKTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMgPSAocm93LCBjb2x1bW5zLCBleHRyYSkgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZWRUYWJsZSA9IGNvcmUudXRpbHMuY3JlYXRlVGFibGUocm93LCBjb2x1bW5zKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IHsgLi4uY3JlYXRlZFRhYmxlLCAuLi5leHRyYSB9O1xuXG4gICAgcmV0dXJuIG5ld1RhYmxlO1xuICB9O1xuXG4gIGNvcmUudG9vbGJhciA9IHtcbiAgICBpY29uOiA8R3JpZE9uIC8+LFxuICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB7XG4gICAgICBsb2coJ2luc2VydCB0YWJsZScpO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMoMiwgMiwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYm9yZGVyOiAnMScsXG4gICAgICAgICAgbmV3VGFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGVkaXRvci5pbnNlcnROb2RlKG5ld1RhYmxlKTtcbiAgICAgIG1vdmVUb0JlZ2lubmluZ09mVGFibGUoZWRpdG9yLCBuZXdUYWJsZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBOb3RlIC0gdGhlIG5vZGUgbWF5IG5vdCBiZSBhIHRhYmxlIG5vZGUgLSBpdCBtYXkgYmUgYSBub2RlIGluc2lkZSBhIHRhYmxlLlxuICAgICAqL1xuICAgIGN1c3RvbVRvb2xiYXI6IChub2RlLCBub2RlUGF0aCwgZWRpdG9yLCBvblRvb2xiYXJEb25lKSA9PiB7XG4gICAgICBsb2coJ1tjdXN0b21Ub29sYmFyXSBub2RlLmRhdGE6ICcsIG5vZGUuZGF0YSk7XG5cbiAgICAgIGNvbnN0IFt0YWJsZUJsb2NrXSA9IGNvcmUudXRpbHMuZ2V0VGFibGVCbG9jayhlZGl0b3IpO1xuICAgICAgbG9nKCdbY3VzdG9tVG9vbGJhcl0gdGFibGVCbG9jazogJywgdGFibGVCbG9jayk7XG5cbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgpID0+IGdldCh0YWJsZUJsb2NrLCAnZGF0YS5ib3JkZXInKSAhPT0gJzAnO1xuICAgICAgY29uc3QgYWRkUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdHJOb2RlLCB0clBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndHInKTtcblxuICAgICAgICBsb2coJ1thZGRSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRyTm9kZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1RyID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gdHJOb2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdUci5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtuZXdUcl0sIHsgYXQ6IHRyUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVtb3ZlUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1tyZW1vdmVSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5UGF0aCkge1xuICAgICAgICAgIGlmICh0Qm9keU5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgdHJQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RyJyk7XG5cbiAgICAgICAgICAgIGxvZygnW3JlbW92ZVJvd10nKTtcblxuICAgICAgICAgICAgaWYgKHRyUGF0aCkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogdHJQYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYWRkQ29sdW1uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1thZGRDb2x1bW5dJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGVtcHR5VGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGQnLFxuICAgICAgICAgICAgY2hpbGRyZW46IFt7IHRleHQ6ICcnIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0ckVsZW1lbnRzID0gRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgYXQ6IHRCb2R5UGF0aCwgLy8gUGF0aCBvZiBFZGl0b3JcbiAgICAgICAgICAgIG1hdGNoOiBub2RlID0+ICd0cicgPT09IG5vZGUudHlwZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbdHJOb2RlLCBub2RlUGF0aF0gb2YgdHJFbGVtZW50cykge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtlbXB0eVRkXSwge1xuICAgICAgICAgICAgICBhdDogWy4uLm5vZGVQYXRoLCB0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVDb2x1bW4gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFt0Qm9keU5vZGUsIHRCb2R5UGF0aF0gPSBnZXRBbmNlc3RvckJ5VHlwZShlZGl0b3IsICd0Ym9keScpO1xuXG4gICAgICAgIGxvZygnW2FkZENvbHVtbl0nKTtcblxuICAgICAgICBpZiAodEJvZHlOb2RlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBFZGl0b3IucGF0aChlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMl07XG4gICAgICAgICAgY29uc3QgdHJFbGVtZW50cyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgIGF0OiB0Qm9keVBhdGgsIC8vIFBhdGggb2YgRWRpdG9yXG4gICAgICAgICAgICBtYXRjaDogbm9kZSA9PiAndHInID09PSBub2RlLnR5cGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW3RyTm9kZSwgbm9kZVBhdGhdIG9mIHRyRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogWy4uLm5vZGVQYXRoLCBjb2x1bW5JbmRleF0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVUYWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgW3RhYmxlTm9kZSwgdGFibGVQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlX25vZGUnLFxuICAgICAgICAgIHBhdGg6IHRhYmxlUGF0aCxcbiAgICAgICAgICBub2RlOiB0YWJsZU5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b2dnbGVCb3JkZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gdGFibGVCbG9jaztcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgYm9yZGVyOiBoYXNCb3JkZXIoKSA/ICcwJyA6ICcxJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBbLCB0YWJsZVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGFibGUnKTtcblxuICAgICAgICBsb2coJ1t0b2dnbGVCb3JkZXJdIHVwZGF0ZTogJywgdXBkYXRlKTtcblxuICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgIHR5cGU6ICdzZXRfbm9kZScsXG4gICAgICAgICAgcGF0aDogdGFibGVQYXRoLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3UHJvcGVydGllczogeyBkYXRhOiB1cGRhdGUgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRG9uZSA9ICgpID0+IHtcbiAgICAgICAgbG9nKCdbb25Eb25lXSBjYWxsIG9uVG9vbGJhckRvbmUuLi4nKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZSh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IFRiID0gKCkgPT4gKFxuICAgICAgICA8VGFibGVUb29sYmFyXG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgcGx1Z2lucz17dG9vbGJhclBsdWdpbnN9XG4gICAgICAgICAgb25DaGFuZ2U9e2MgPT4gb25Ub29sYmFyRG9uZShjLCBmYWxzZSl9XG4gICAgICAgICAgb25BZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICBvblJlbW92ZVJvdz17cmVtb3ZlUm93fVxuICAgICAgICAgIG9uQWRkQ29sdW1uPXthZGRDb2x1bW59XG4gICAgICAgICAgb25SZW1vdmVDb2x1bW49e3JlbW92ZUNvbHVtbn1cbiAgICAgICAgICBvblJlbW92ZVRhYmxlPXtyZW1vdmVUYWJsZX1cbiAgICAgICAgICBoYXNCb3JkZXI9e2hhc0JvcmRlcigpfVxuICAgICAgICAgIG9uVG9nZ2xlQm9yZGVyPXt0b2dnbGVCb3JkZXJ9XG4gICAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIFRiO1xuICAgIH1cbiAgfTtcblxuICBjb3JlLnN1cHBvcnRzID0gbm9kZSA9PiBUQUJMRV9UWVBFUy5pbmNsdWRlcyhub2RlLnR5cGUpO1xuXG4gIGNvbnN0IE5vZGUgPSBwcm9wcyA9PiB7XG4gICAgc3dpdGNoIChwcm9wcy5ub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZSB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICAgIHJldHVybiA8VGFibGVCb2R5IHsuLi5wcm9wc30gb25Gb2N1cz17b3B0cy5vbkZvY3VzfSBvbkJsdXI9e29wdHMub25CbHVyfSAvPjtcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZVJvdyB7Li4ucHJvcHN9IC8+O1xuICAgICAgY2FzZSAndGQnOlxuICAgICAgICByZXR1cm4gPFRhYmxlQ2VsbCB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIE5vZGUucHJvcFR5cGVzID0ge1xuICAgIG5vZGU6IFByb3BUeXBlcy5vYmplY3RcbiAgfTtcblxuICBjb3JlLnJlbmRlck5vZGUgPSBOb2RlO1xuXG4gIHJldHVybiBjb3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlU3R5bGVTdHJpbmcgPSBzID0+IHtcbiAgY29uc3QgcmVnZXggPSAvKFtcXHctXSopXFxzKjpcXHMqKFteO10qKS9nO1xuICBsZXQgbWF0Y2g7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzKSkpIHtcbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gbWF0Y2hbMl0udHJpbSgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVhY3RBdHRyaWJ1dGVzID0gbyA9PiB0b1N0eWxlT2JqZWN0KG8sIHsgY2FtZWxpemU6IHRydWUsIGFkZFVuaXRzOiBmYWxzZSB9KTtcblxuY29uc3QgYXR0cmlidXRlc1RvTWFwID0gZWwgPT4gKGFjYywgYXR0cmlidXRlKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdzdHlsZScpIHtcbiAgICAgIGNvbnN0IHN0eWxlU3RyaW5nID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICBjb25zdCByZWFjdFN0eWxlT2JqZWN0ID0gcmVhY3RBdHRyaWJ1dGVzKHBhcnNlU3R5bGVTdHJpbmcoc3R5bGVTdHJpbmcpKTtcbiAgICAgIGFjY1snc3R5bGUnXSA9IHJlYWN0U3R5bGVPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1thdHRyaWJ1dGVdID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2M7XG59O1xuXG5jb25zdCBkYXRhVG9BdHRyaWJ1dGVzID0gZGF0YSA9PiB7XG4gIHJldHVybiByZWR1Y2UoXG4gICAgZGF0YSxcbiAgICAoYWNjLCB2LCBuYW1lKSA9PiB7XG4gICAgICBpZiAodikge1xuICAgICAgICBhY2NbY29udmVydChuYW1lKV0gPSB2O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG59O1xuXG5jb25zdCBhdHRyaWJ1dGVzID0gWydib3JkZXInLCAnY2VsbHBhZGRpbmcnLCAnY2VsbHNwYWNpbmcnLCAnY2xhc3MnLCAnc3R5bGUnXTtcblxuY29uc3QgY2VsbEF0dHJpYnV0ZXMgPSBbJ2NvbHNwYW4nLCAncm93c3BhbicsICdjbGFzcycsICdzdHlsZSddO1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHtcbiAgZGVzZXJpYWxpemUoZWwsIG5leHQpIHtcbiAgICBjb25zdCB0YWcgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID1cbiAgICAgICAgICBlbC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgZWwuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGJvZHknXG4gICAgICAgICAgICA/IGVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuXG4gICAgICAgICAgICA6IGVsLmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjID0gQXJyYXkuZnJvbShjaGlsZHJlbik7XG5cbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHt9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChjKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAndGJvZHknOiB7XG4gICAgICAgIHJldHVybiBqc3goXG4gICAgICAgICAgJ2VsZW1lbnQnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0Ym9keSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5leHQoZWwuY2hpbGROb2RlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoJzoge1xuICAgICAgICByZXR1cm4ganN4KFxuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGgnLFxuICAgICAgICAgICAgZGF0YTogY2VsbEF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHsgaGVhZGVyOiB0cnVlIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGVsLmNoaWxkTm9kZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlICd0cic6IHtcbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChBcnJheS5mcm9tKGVsLmNoaWxkcmVuKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RkJzoge1xuICAgICAgICByZXR1cm4ganN4KFxuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGQnLFxuICAgICAgICAgICAgZGF0YTogY2VsbEF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHsgaGVhZGVyOiB0cnVlIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGVsLmNoaWxkTm9kZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemUob2JqZWN0LCBjaGlsZHJlbikge1xuICAgIHN3aXRjaCAob2JqZWN0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHRhYmxlIHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAndGJvZHknOiB7XG4gICAgICAgIHJldHVybiA8dGJvZHk+e2NoaWxkcmVufTwvdGJvZHk+O1xuICAgICAgfVxuICAgICAgY2FzZSAndHInOiB7XG4gICAgICAgIHJldHVybiA8dHI+e2NoaWxkcmVufTwvdHI+O1xuICAgICAgfVxuICAgICAgY2FzZSAndGQnOiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKG9iamVjdC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIDx0ZCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdGQ+O1xuICAgICAgfVxuICAgICAgY2FzZSAndGgnOiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKG9iamVjdC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIDx0aCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdGg+O1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsR0FBRyxHQUFHLElBQUFDLGlCQUFBLEVBQU0sc0NBQU4sQ0FBWjs7QUFFQSxJQUFNQyxLQUFLLGdCQUFHQyxpQkFBQSxDQUFNQyxVQUFOLENBQWlCLFVBQUFDLEtBQUssRUFBSTtFQUN0QyxJQUFNQyxjQUFjLEdBQUcsSUFBQUMsZ0JBQUEsRUFBS0MsZ0JBQWdCLENBQUNILEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFmLENBQXJCLEVBQTJDLFVBQTNDLENBQXZCO0VBQ0EsSUFBTUMsS0FBSyxHQUFHLElBQUFKLGdCQUFBLEVBQUtGLEtBQUssQ0FBQ08sVUFBWCxFQUF1QixVQUF2QixDQUFkO0VBRUEsb0JBQ0UsdUVBQVdELEtBQVgsRUFBc0JMLGNBQXRCO0lBQXNDLE9BQU8sRUFBRUQsS0FBSyxDQUFDUSxPQUFyRDtJ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
|
|
610
|
+
//# sourceMappingURL=index.js.map
|