@pie-lib/editable-html 12.0.0-next.0 → 12.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/lib/__tests__/editor-utils.test.js +164 -0
  2. package/lib/__tests__/serialization.test.js +242 -0
  3. package/lib/__tests__/utils.js +79 -0
  4. package/lib/block-tags.js +1 -1
  5. package/lib/constants.js +2 -4
  6. package/lib/constants.js.map +1 -1
  7. package/lib/editor.js +1 -1
  8. package/lib/index.js +1 -1
  9. package/lib/parse-html.js +1 -1
  10. package/lib/plugins/characters/custom-popper.js +1 -1
  11. package/lib/plugins/characters/index.js +1 -1
  12. package/lib/plugins/characters/utils.js +1 -1
  13. package/lib/plugins/css/icons/index.js +1 -1
  14. package/lib/plugins/css/index.js +1 -1
  15. package/lib/plugins/customPlugin/index.js +1 -1
  16. package/lib/plugins/html/icons/index.js +1 -1
  17. package/lib/plugins/html/index.js +1 -1
  18. package/lib/plugins/image/__tests__/component.test.js +96 -0
  19. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +131 -0
  20. package/lib/plugins/image/__tests__/image-toolbar.test.js +22 -0
  21. package/lib/plugins/image/__tests__/index.test.js +90 -0
  22. package/lib/plugins/image/__tests__/insert-image-handler.test.js +112 -0
  23. package/lib/plugins/image/__tests__/mock-change.js +22 -0
  24. package/lib/plugins/image/alt-dialog.js +1 -1
  25. package/lib/plugins/image/component.js +1 -1
  26. package/lib/plugins/image/image-toolbar.js +1 -1
  27. package/lib/plugins/image/index.js +1 -1
  28. package/lib/plugins/image/insert-image-handler.js +1 -1
  29. package/lib/plugins/index.js +1 -1
  30. package/lib/plugins/list/__tests__/index.test.js +64 -0
  31. package/lib/plugins/list/index.js +1 -1
  32. package/lib/plugins/math/__tests__/index.test.js +284 -0
  33. package/lib/plugins/math/index.js +1 -1
  34. package/lib/plugins/media/__tests__/index.test.js +69 -0
  35. package/lib/plugins/media/index.js +1 -1
  36. package/lib/plugins/media/media-dialog.js +1 -1
  37. package/lib/plugins/media/media-toolbar.js +1 -1
  38. package/lib/plugins/media/media-wrapper.js +1 -1
  39. package/lib/plugins/rendering/index.js +1 -1
  40. package/lib/plugins/respArea/drag-in-the-blank/choice.js +1 -1
  41. package/lib/plugins/respArea/drag-in-the-blank/index.js +1 -1
  42. package/lib/plugins/respArea/drag-in-the-blank/utils.js +1 -1
  43. package/lib/plugins/respArea/explicit-constructed-response/index.js +1 -1
  44. package/lib/plugins/respArea/icons/index.js +1 -1
  45. package/lib/plugins/respArea/index.js +1 -1
  46. package/lib/plugins/respArea/inline-dropdown/index.js +1 -1
  47. package/lib/plugins/respArea/math-templated/index.js +1 -1
  48. package/lib/plugins/respArea/utils.js +1 -1
  49. package/lib/plugins/table/CustomTablePlugin.js +1 -1
  50. package/lib/plugins/table/__tests__/index.test.js +416 -0
  51. package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
  52. package/lib/plugins/table/icons/index.js +1 -1
  53. package/lib/plugins/table/index.js +1 -1
  54. package/lib/plugins/table/table-toolbar.js +1 -1
  55. package/lib/plugins/textAlign/icons/index.js +1 -1
  56. package/lib/plugins/textAlign/index.js +1 -1
  57. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +154 -0
  58. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
  59. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
  60. package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
  61. package/lib/plugins/toolbar/default-toolbar.js +1 -1
  62. package/lib/plugins/toolbar/done-button.js +1 -1
  63. package/lib/plugins/toolbar/editor-and-toolbar.js +1 -1
  64. package/lib/plugins/toolbar/index.js +1 -1
  65. package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
  66. package/lib/plugins/toolbar/toolbar.js +1 -1
  67. package/lib/plugins/utils.js +1 -1
  68. package/lib/serialization.js +1 -1
  69. package/lib/shared/alert-dialog.js +1 -1
  70. package/lib/theme.js +1 -1
  71. package/package.json +8 -16
  72. package/src/constants.js +0 -2
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _debug = _interopRequireDefault(require("debug"));
8
+ var _mockChange = _interopRequireDefault(require("../../image/__tests__/mock-change"));
9
+ var _slate = require("slate");
10
+ var _index = _interopRequireWildcard(require("../index"));
11
+ var _react2 = require("@testing-library/react");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ jest.mock('@pie-framework/mathquill', function () {
16
+ return {
17
+ StaticMath: jest.fn(),
18
+ getInterface: jest.fn().mockReturnThis(),
19
+ registerEmbed: jest.fn()
20
+ };
21
+ });
22
+ var mockMathToolbarOnChange;
23
+ var mockMathToolbarOnDone;
24
+ jest.mock('@pie-lib/math-toolbar', function () {
25
+ return {
26
+ MathPreview: function MathPreview() {
27
+ return /*#__PURE__*/_react["default"].createElement("div", {
28
+ "data-testid": "math-preview"
29
+ });
30
+ },
31
+ MathToolbar: function MathToolbar(props) {
32
+ // Store callbacks for testing
33
+ mockMathToolbarOnChange = props.onChange;
34
+ mockMathToolbarOnDone = props.onDone;
35
+ return /*#__PURE__*/_react["default"].createElement("div", {
36
+ "data-testid": "math-toolbar",
37
+ role: "toolbar"
38
+ }, /*#__PURE__*/_react["default"].createElement("button", {
39
+ "data-testid": "toolbar-change",
40
+ onClick: function onClick() {
41
+ return props.onChange && props.onChange('test-latex');
42
+ }
43
+ }, "Change"), /*#__PURE__*/_react["default"].createElement("button", {
44
+ "data-testid": "toolbar-done",
45
+ onClick: function onClick() {
46
+ return props.onDone && props.onDone('test-latex');
47
+ }
48
+ }, "Done"));
49
+ }
50
+ };
51
+ });
52
+ jest.mock('@pie-lib/math-rendering', function () {
53
+ return _objectSpread(_objectSpread({}, jest.requireActual('@pie-lib/math-rendering')), {}, {
54
+ mmlToLatex: jest.fn(function () {
55
+ return '/foobar/latex';
56
+ })
57
+ });
58
+ });
59
+ var log = (0, _debug["default"])('@pie-lib:editable-html:test:math');
60
+
61
+ // I believe @andrei is moving this stuff out.
62
+ describe('MathPlugin', function () {
63
+ describe('toolbar', function () {
64
+ describe('onClick', function () {
65
+ var plugin, mockChange, value, onChange;
66
+ beforeEach(function () {
67
+ plugin = (0, _index["default"])({});
68
+ mockChange = new _mockChange["default"]();
69
+ value = {
70
+ change: jest.fn(function () {
71
+ return mockChange;
72
+ })
73
+ };
74
+ onChange = jest.fn();
75
+ plugin.toolbar.onClick(value, onChange);
76
+ });
77
+ test('calls insertInline', function () {
78
+ expect(mockChange.insertInline).toBeCalledWith(expect.objectContaining({
79
+ data: (0, _index.inlineMath)().data
80
+ }));
81
+ });
82
+ test('it calls onChange', function () {
83
+ expect(onChange).toHaveBeenCalledWith(mockChange);
84
+ });
85
+ });
86
+ });
87
+ describe('renderNode', function () {
88
+ test('the component has props', function () {
89
+ var plugin = (0, _index["default"])({});
90
+ var _plugin$renderNode = plugin.renderNode({
91
+ node: {
92
+ type: 'math'
93
+ }
94
+ }),
95
+ props = _plugin$renderNode.props;
96
+ expect(props.node).toEqual({
97
+ type: 'math'
98
+ });
99
+ });
100
+ });
101
+ describe('serialization', function () {
102
+ describe('deserialize', function () {
103
+ var assertDeserialize = function assertDeserialize(html, expected, wrapType) {
104
+ it("innerHTML: ".concat(html, " is deserialized to: ").concat(expected, " with wrapType: ").concat(wrapType), function () {
105
+ var el = {
106
+ tagName: 'span',
107
+ childNodes: [],
108
+ getAttribute: jest.fn(function () {
109
+ return '';
110
+ }),
111
+ hasAttribute: jest.fn(function () {
112
+ return true;
113
+ }),
114
+ innerHTML: html
115
+ };
116
+ var next = jest.fn();
117
+ var out = _index.serialization.deserialize(el, next);
118
+ expect(out).toEqual({
119
+ object: 'inline',
120
+ type: 'math',
121
+ isVoid: true,
122
+ nodes: [],
123
+ data: {
124
+ latex: expected,
125
+ wrapper: wrapType
126
+ }
127
+ });
128
+ });
129
+ };
130
+ assertDeserialize('$$&lt;$$', '<', _index["default"].DOLLAR);
131
+ assertDeserialize('$&lt;$', '<', _index["default"].DOLLAR);
132
+ assertDeserialize('\\(&lt;\\)', '<', _index["default"].ROUND_BRACKETS);
133
+ assertDeserialize('\\[&lt;\\]', '<', _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>&#xA0;</mtext> <mo>&#x2264;</mo> <mn>4</mn> <mi>y</mi> <mtext>&#xA0;</mtext> <mo>+</mo> <mtext>&#xA0;</mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
141
+ };
142
+ var next = jest.fn();
143
+ var out = _index.serialization.deserialize(el, next);
144
+ expect(out).toEqual({
145
+ object: 'inline',
146
+ type: 'math',
147
+ isVoid: true,
148
+ nodes: [],
149
+ data: {
150
+ latex: '/foobar/latex',
151
+ wrapper: 'round_brackets'
152
+ }
153
+ });
154
+ });
155
+ it('should make mathml readOnly if MathPlugin.mathMlOptions.mmlEditing is false', function () {
156
+ _index["default"].mathMlOptions.mmlEditing = false;
157
+ var el = {
158
+ tagName: 'math',
159
+ outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext>&#xA0;</mtext> <mo>&#x2264;</mo> <mn>4</mn> <mi>y</mi> <mtext>&#xA0;</mtext> <mo>+</mo> <mtext>&#xA0;</mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
160
+ };
161
+ var next = jest.fn();
162
+ var out = _index.serialization.deserialize(el, next);
163
+ expect(out).toEqual({
164
+ object: 'inline',
165
+ isVoid: true,
166
+ type: 'mathml',
167
+ data: {
168
+ html: el.outerHTML
169
+ }
170
+ });
171
+ });
172
+ });
173
+ describe('serialize', function () {
174
+ var assertSerialize = function assertSerialize(latex, expectedHtml, wrapper) {
175
+ wrapper = wrapper || _index["default"].ROUND_BRACKETS;
176
+ it("".concat(latex, " is serialized to: ").concat(expectedHtml), function () {
177
+ var object = {
178
+ kind: 'inline',
179
+ type: 'math',
180
+ isVoid: true,
181
+ nodes: [],
182
+ data: _slate.Data.create({
183
+ latex: latex,
184
+ wrapper: wrapper
185
+ })
186
+ };
187
+ var children = [];
188
+ var out = _index.serialization.serialize(object, children);
189
+ log('out: ', out);
190
+ expect(out).toEqual(/*#__PURE__*/_react["default"].createElement("span", {
191
+ "data-latex": "",
192
+ "data-raw": latex
193
+ }, expectedHtml));
194
+ });
195
+ };
196
+ assertSerialize('latex', '\\(latex\\)', _index["default"].ROUND_BRACKETS);
197
+ assertSerialize('latex', '\\(latex\\)', _index["default"].SQUARE_BRACKETS);
198
+ assertSerialize('latex', '$latex$', _index["default"].DOLLAR);
199
+ assertSerialize('latex', '$latex$', _index["default"].DOUBLE_DOLLAR);
200
+
201
+ /**
202
+ * Note that when this is converted to html it get's escaped - but that's an issue with the slate html-serializer.
203
+ */
204
+ assertSerialize('<', '\\(<\\)');
205
+ assertSerialize('x<y', '\\(x<y\\)');
206
+ });
207
+ });
208
+ });
209
+ describe('CustomToolbarComp', function () {
210
+ var onDataChange;
211
+ var onToolbarDone;
212
+ var renderComponent = function renderComponent() {
213
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
214
+ var mockChange = new _mockChange["default"]();
215
+ var defaults = {
216
+ node: {
217
+ key: '1',
218
+ data: _slate.Data.create({
219
+ latex: 'foo'
220
+ }),
221
+ equals: function equals() {
222
+ return true;
223
+ }
224
+ },
225
+ value: {
226
+ document: {
227
+ getNextText: jest.fn().mockReturnValue({
228
+ key: 'nt'
229
+ })
230
+ },
231
+ change: jest.fn().mockReturnValue(mockChange)
232
+ },
233
+ onDataChange: onDataChange,
234
+ onToolbarDone: onToolbarDone
235
+ };
236
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
237
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.CustomToolbarComp, props));
238
+ };
239
+ describe('render', function () {
240
+ it('renders toolbar without default keypadMode', function () {
241
+ renderComponent();
242
+
243
+ // Verify the toolbar is rendered
244
+ expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
245
+ expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
246
+ });
247
+ it('renders toolbar with default keypadMode', function () {
248
+ renderComponent({
249
+ pluginProps: {
250
+ math: {
251
+ keypadMode: 'geometry'
252
+ }
253
+ }
254
+ });
255
+
256
+ // Verify the toolbar is rendered with keypadMode prop
257
+ expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
258
+ expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
259
+ });
260
+ });
261
+ describe('onDone', function () {
262
+ it('calls onToolbarDone when done callback is triggered', function () {
263
+ onToolbarDone = jest.fn();
264
+ renderComponent();
265
+
266
+ // Trigger the onDone callback that was passed to MathToolbar
267
+ mockMathToolbarOnDone('oo');
268
+ expect(onToolbarDone).toHaveBeenCalledWith(expect.anything(), false);
269
+ });
270
+ });
271
+ describe('onChange', function () {
272
+ it('calls onDataChange when change callback is triggered', function () {
273
+ onDataChange = jest.fn();
274
+ renderComponent();
275
+
276
+ // Trigger the onChange callback that was passed to MathToolbar
277
+ mockMathToolbarOnChange('oo');
278
+ expect(onDataChange).toHaveBeenCalledWith('1', {
279
+ latex: 'oo'
280
+ });
281
+ });
282
+ });
283
+ });
284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9kZWJ1ZyIsIl9tb2NrQ2hhbmdlIiwiX3NsYXRlIiwiX2luZGV4IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcmVhY3QyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImplc3QiLCJtb2NrIiwiU3RhdGljTWF0aCIsImZuIiwiZ2V0SW50ZXJmYWNlIiwibW9ja1JldHVyblRoaXMiLCJyZWdpc3RlckVtYmVkIiwibW9ja01hdGhUb29sYmFyT25DaGFuZ2UiLCJtb2NrTWF0aFRvb2xiYXJPbkRvbmUiLCJNYXRoUHJldmlldyIsImNyZWF0ZUVsZW1lbnQiLCJNYXRoVG9vbGJhciIsInByb3BzIiwib25DaGFuZ2UiLCJvbkRvbmUiLCJyb2xlIiwib25DbGljayIsInJlcXVpcmVBY3R1YWwiLCJtbWxUb0xhdGV4IiwibG9nIiwiZGVidWciLCJkZXNjcmliZSIsInBsdWdpbiIsIm1vY2tDaGFuZ2UiLCJ2YWx1ZSIsImJlZm9yZUVhY2giLCJNYXRoUGx1Z2luIiwiTW9ja0NoYW5nZSIsImNoYW5nZSIsInRvb2xiYXIiLCJ0ZXN0IiwiZXhwZWN0IiwiaW5zZXJ0SW5saW5lIiwidG9CZUNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwiZGF0YSIsImlubGluZU1hdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIl9wbHVnaW4kcmVuZGVyTm9kZSIsInJlbmRlck5vZGUiLCJub2RlIiwidHlwZSIsInRvRXF1YWwiLCJhc3NlcnREZXNlcmlhbGl6ZSIsImh0bWwiLCJleHBlY3RlZCIsIndyYXBUeXBlIiwiaXQiLCJjb25jYXQiLCJlbCIsInRhZ05hbWUiLCJjaGlsZE5vZGVzIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiaW5uZXJIVE1MIiwibmV4dCIsIm91dCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsIm9iamVjdCIsImlzVm9pZCIsIm5vZGVzIiwibGF0ZXgiLCJ3cmFwcGVyIiwiRE9MTEFSIiwiUk9VTkRfQlJBQ0tFVFMiLCJtYXRoTWxPcHRpb25zIiwibW1sRWRpdGluZyIsIm91dGVySFRNTCIsImFzc2VydFNlcmlhbGl6ZSIsImV4cGVjdGVkSHRtbCIsImtpbmQiLCJEYXRhIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJzZXJpYWxpemUiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET1VCTEVfRE9MTEFSIiwib25EYXRhQ2hhbmdlIiwib25Ub29sYmFyRG9uZSIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsInVuZGVmaW5lZCIsImRlZmF1bHRzIiwia2V5IiwiZXF1YWxzIiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsIm1vY2tSZXR1cm5WYWx1ZSIsInJlbmRlciIsIkN1c3RvbVRvb2xiYXJDb21wIiwic2NyZWVuIiwiZ2V0QnlUZXN0SWQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImdldEJ5Um9sZSIsInBsdWdpblByb3BzIiwibWF0aCIsImtleXBhZE1vZGUiLCJhbnl0aGluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL21hdGgvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IE1vY2tDaGFuZ2UgZnJvbSAnLi4vLi4vaW1hZ2UvX190ZXN0c19fL21vY2stY2hhbmdlJztcbmltcG9ydCB7IERhdGEgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgTWF0aFBsdWdpbiwgeyBzZXJpYWxpemF0aW9uLCBpbmxpbmVNYXRoLCBDdXN0b21Ub29sYmFyQ29tcCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5cbmplc3QubW9jaygnQHBpZS1mcmFtZXdvcmsvbWF0aHF1aWxsJywgKCkgPT4gKHtcbiAgU3RhdGljTWF0aDogamVzdC5mbigpLFxuICBnZXRJbnRlcmZhY2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVGhpcygpLFxuICByZWdpc3RlckVtYmVkOiBqZXN0LmZuKCksXG59KSk7XG5cbmxldCBtb2NrTWF0aFRvb2xiYXJPbkNoYW5nZTtcbmxldCBtb2NrTWF0aFRvb2xiYXJPbkRvbmU7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC10b29sYmFyJywgKCkgPT4gKHtcbiAgTWF0aFByZXZpZXc6ICgpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJtYXRoLXByZXZpZXdcIiAvPixcbiAgTWF0aFRvb2xiYXI6IChwcm9wcykgPT4ge1xuICAgIC8vIFN0b3JlIGNhbGxiYWNrcyBmb3IgdGVzdGluZ1xuICAgIG1vY2tNYXRoVG9vbGJhck9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgbW9ja01hdGhUb29sYmFyT25Eb25lID0gcHJvcHMub25Eb25lO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwibWF0aC10b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIj5cbiAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cInRvb2xiYXItY2hhbmdlXCIgb25DbGljaz17KCkgPT4gcHJvcHMub25DaGFuZ2UgJiYgcHJvcHMub25DaGFuZ2UoJ3Rlc3QtbGF0ZXgnKX0+XG4gICAgICAgICAgQ2hhbmdlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwidG9vbGJhci1kb25lXCIgb25DbGljaz17KCkgPT4gcHJvcHMub25Eb25lICYmIHByb3BzLm9uRG9uZSgndGVzdC1sYXRleCcpfT5cbiAgICAgICAgICBEb25lXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnKSxcbiAgbW1sVG9MYXRleDogamVzdC5mbigoKSA9PiB7XG4gICAgcmV0dXJuICcvZm9vYmFyL2xhdGV4JztcbiAgfSksXG59KSk7XG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDp0ZXN0Om1hdGgnKTtcblxuLy8gSSBiZWxpZXZlIEBhbmRyZWkgaXMgbW92aW5nIHRoaXMgc3R1ZmYgb3V0LlxuZGVzY3JpYmUoJ01hdGhQbHVnaW4nLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd0b29sYmFyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdvbkNsaWNrJywgKCkgPT4ge1xuICAgICAgbGV0IHBsdWdpbiwgbW9ja0NoYW5nZSwgdmFsdWUsIG9uQ2hhbmdlO1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHBsdWdpbiA9IE1hdGhQbHVnaW4oe30pO1xuICAgICAgICBtb2NrQ2hhbmdlID0gbmV3IE1vY2tDaGFuZ2UoKTtcbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgY2hhbmdlOiBqZXN0LmZuKCgpID0+IG1vY2tDaGFuZ2UpLFxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgICAgcGx1Z2luLnRvb2xiYXIub25DbGljayh2YWx1ZSwgb25DaGFuZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ2NhbGxzIGluc2VydElubGluZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG1vY2tDaGFuZ2UuaW5zZXJ0SW5saW5lKS50b0JlQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGRhdGE6IGlubGluZU1hdGgoKS5kYXRhIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdpdCBjYWxscyBvbkNoYW5nZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ2hhbmdlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyTm9kZScsICgpID0+IHtcbiAgICB0ZXN0KCd0aGUgY29tcG9uZW50IGhhcyBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IE1hdGhQbHVnaW4oe30pO1xuICAgICAgY29uc3QgeyBwcm9wcyB9ID0gcGx1Z2luLnJlbmRlck5vZGUoeyBub2RlOiB7IHR5cGU6ICdtYXRoJyB9IH0pO1xuICAgICAgZXhwZWN0KHByb3BzLm5vZGUpLnRvRXF1YWwoeyB0eXBlOiAnbWF0aCcgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXJpYWxpemF0aW9uJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdkZXNlcmlhbGl6ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydERlc2VyaWFsaXplID0gKGh0bWwsIGV4cGVjdGVkLCB3cmFwVHlwZSkgPT4ge1xuICAgICAgICBpdChgaW5uZXJIVE1MOiAke2h0bWx9IGlzIGRlc2VyaWFsaXplZCB0bzogJHtleHBlY3RlZH0gd2l0aCB3cmFwVHlwZTogJHt3cmFwVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiAnc3BhbicsXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogamVzdC5mbigoKSA9PiAnJyksXG4gICAgICAgICAgICBoYXNBdHRyaWJ1dGU6IGplc3QuZm4oKCkgPT4gdHJ1ZSksXG4gICAgICAgICAgICBpbm5lckhUTUw6IGh0bWwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5mbigpO1xuXG4gICAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShlbCwgbmV4dCk7XG4gICAgICAgICAgZXhwZWN0KG91dCkudG9FcXVhbCh7XG4gICAgICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYXRleDogZXhwZWN0ZWQsXG4gICAgICAgICAgICAgIHdyYXBwZXI6IHdyYXBUeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnJCQmbHQ7JCQnLCAnPCcsIE1hdGhQbHVnaW4uRE9MTEFSKTtcbiAgICAgIGFzc2VydERlc2VyaWFsaXplKCckJmx0OyQnLCAnPCcsIE1hdGhQbHVnaW4uRE9MTEFSKTtcbiAgICAgIGFzc2VydERlc2VyaWFsaXplKCdcXFxcKCZsdDtcXFxcKScsICc8JywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnXFxcXFsmbHQ7XFxcXF0nLCAnPCcsIE1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0RGVzZXJpYWxpemUoJ2xhdGV4JywgJ2xhdGV4JywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnXFxcXGRpc3BsYXlzdHlsZSBmb28nLCAnZm9vJywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG5cbiAgICAgIGl0KCdzaG91bGQgbWFrZSBtYXRobWwgZWRpdGFibGUgaWYgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgICAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBlbCA9IHtcbiAgICAgICAgICB0YWdOYW1lOiAnbWF0aCcsXG4gICAgICAgICAgb3V0ZXJIVE1MOlxuICAgICAgICAgICAgJzxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiPiAgPG1uPjI8L21uPiAgPG1pPng8L21pPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW8+JiN4MjI2NDs8L21vPiAgPG1uPjQ8L21uPiAgPG1pPnk8L21pPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW8+KzwvbW8+ICA8bXRleHQ+JiN4QTA7PC9tdGV4dD4gIDxtbj44PC9tbj4gPG1zcXJ0PiAgICA8bWk+aDwvbWk+ICA8L21zcXJ0PjwvbWF0aD4nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5mbigpO1xuXG4gICAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoZWwsIG5leHQpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLnRvRXF1YWwoe1xuICAgICAgICAgIG9iamVjdDogJ2lubGluZScsXG4gICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICBub2RlczogW10sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGF0ZXg6ICcvZm9vYmFyL2xhdGV4JyxcbiAgICAgICAgICAgIHdyYXBwZXI6ICdyb3VuZF9icmFja2V0cycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBtYWtlIG1hdGhtbCByZWFkT25seSBpZiBNYXRoUGx1Z2luLm1hdGhNbE9wdGlvbnMubW1sRWRpdGluZyBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgICAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZWwgPSB7XG4gICAgICAgICAgdGFnTmFtZTogJ21hdGgnLFxuICAgICAgICAgIG91dGVySFRNTDpcbiAgICAgICAgICAgICc8bWF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIj4gIDxtbj4yPC9tbj4gIDxtaT54PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPiYjeDIyNjQ7PC9tbz4gIDxtbj40PC9tbj4gIDxtaT55PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPis8L21vPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW4+ODwvbW4+IDxtc3FydD4gICAgPG1pPmg8L21pPiAgPC9tc3FydD48L21hdGg+JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGplc3QuZm4oKTtcblxuICAgICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKGVsLCBuZXh0KTtcblxuICAgICAgICBleHBlY3Qob3V0KS50b0VxdWFsKHtcbiAgICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnbWF0aG1sJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBodG1sOiBlbC5vdXRlckhUTUwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRTZXJpYWxpemUgPSAobGF0ZXgsIGV4cGVjdGVkSHRtbCwgd3JhcHBlcikgPT4ge1xuICAgICAgICB3cmFwcGVyID0gd3JhcHBlciB8fCBNYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTO1xuICAgICAgICBpdChgJHtsYXRleH0gaXMgc2VyaWFsaXplZCB0bzogJHtleHBlY3RlZEh0bWx9YCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdpbmxpbmUnLFxuICAgICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBsYXRleCwgd3JhcHBlciB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG5cbiAgICAgICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShvYmplY3QsIGNoaWxkcmVuKTtcbiAgICAgICAgICBsb2coJ291dDogJywgb3V0KTtcbiAgICAgICAgICBleHBlY3Qob3V0KS50b0VxdWFsKFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PXtsYXRleH0+XG4gICAgICAgICAgICAgIHtleHBlY3RlZEh0bWx9XG4gICAgICAgICAgICA8L3NwYW4+LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICdcXFxcKGxhdGV4XFxcXCknLCBNYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTKTtcbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnbGF0ZXgnLCAnXFxcXChsYXRleFxcXFwpJywgTWF0aFBsdWdpbi5TUVVBUkVfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICckbGF0ZXgkJywgTWF0aFBsdWdpbi5ET0xMQVIpO1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICckbGF0ZXgkJywgTWF0aFBsdWdpbi5ET1VCTEVfRE9MTEFSKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgd2hlbiB0aGlzIGlzIGNvbnZlcnRlZCB0byBodG1sIGl0IGdldCdzIGVzY2FwZWQgLSBidXQgdGhhdCdzIGFuIGlzc3VlIHdpdGggdGhlIHNsYXRlIGh0bWwtc2VyaWFsaXplci5cbiAgICAgICAqL1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCc8JywgJ1xcXFwoPFxcXFwpJyk7XG4gICAgICBhc3NlcnRTZXJpYWxpemUoJ3g8eScsICdcXFxcKHg8eVxcXFwpJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDdXN0b21Ub29sYmFyQ29tcCcsICgpID0+IHtcbiAgbGV0IG9uRGF0YUNoYW5nZTtcbiAgbGV0IG9uVG9vbGJhckRvbmU7XG5cbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gKGV4dHJhcyA9IHt9KSA9PiB7XG4gICAgbGV0IG1vY2tDaGFuZ2UgPSBuZXcgTW9ja0NoYW5nZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgbm9kZToge1xuICAgICAgICBrZXk6ICcxJyxcbiAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBsYXRleDogJ2ZvbycgfSksXG4gICAgICAgIGVxdWFsczogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB2YWx1ZToge1xuICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgIGdldE5leHRUZXh0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHsga2V5OiAnbnQnIH0pLFxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0NoYW5nZSksXG4gICAgICB9LFxuICAgICAgb25EYXRhQ2hhbmdlLFxuICAgICAgb25Ub29sYmFyRG9uZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi5kZWZhdWx0cyxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlbmRlcig8Q3VzdG9tVG9vbGJhckNvbXAgey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB0b29sYmFyIHdpdGhvdXQgZGVmYXVsdCBrZXlwYWRNb2RlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdG9vbGJhciBpcyByZW5kZXJlZFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnbWF0aC10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgndG9vbGJhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgdG9vbGJhciB3aXRoIGRlZmF1bHQga2V5cGFkTW9kZScsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IHBsdWdpblByb3BzOiB7IG1hdGg6IHsga2V5cGFkTW9kZTogJ2dlb21ldHJ5JyB9IH0gfSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdG9vbGJhciBpcyByZW5kZXJlZCB3aXRoIGtleXBhZE1vZGUgcHJvcFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnbWF0aC10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgndG9vbGJhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb25Eb25lJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvblRvb2xiYXJEb25lIHdoZW4gZG9uZSBjYWxsYmFjayBpcyB0cmlnZ2VyZWQnLCAoKSA9PiB7XG4gICAgICBvblRvb2xiYXJEb25lID0gamVzdC5mbigpO1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIC8vIFRyaWdnZXIgdGhlIG9uRG9uZSBjYWxsYmFjayB0aGF0IHdhcyBwYXNzZWQgdG8gTWF0aFRvb2xiYXJcbiAgICAgIG1vY2tNYXRoVG9vbGJhck9uRG9uZSgnb28nKTtcblxuICAgICAgZXhwZWN0KG9uVG9vbGJhckRvbmUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnl0aGluZygpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvbkNoYW5nZScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25EYXRhQ2hhbmdlIHdoZW4gY2hhbmdlIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCcsICgpID0+IHtcbiAgICAgIG9uRGF0YUNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgIHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBvbkNoYW5nZSBjYWxsYmFjayB0aGF0IHdhcyBwYXNzZWQgdG8gTWF0aFRvb2xiYXJcbiAgICAgIG1vY2tNYXRoVG9vbGJhck9uQ2hhbmdlKCdvbycpO1xuXG4gICAgICBleHBlY3Qob25EYXRhQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnMScsIHsgbGF0ZXg6ICdvbycgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQXdELFNBQUFLLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMs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
@@ -399,4 +399,4 @@ var serialization = exports.serialization = {
399
399
  }
400
400
  }
401
401
  };
402
- //# sourceMappingURL=index.js.map
402
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRnVuY3Rpb25zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc2xhdGUiLCJfbWF0aFRvb2xiYXIiLCJfbWF0aFJlbmRlcmluZyIsIl9yZWFjdCIsIl9kZWJ1ZyIsIl9zbGF0ZVByb3BUeXBlcyIsIl9wcm9wVHlwZXMiLCJfYmxvY2tUYWdzIiwiX2lzRXF1YWwiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImxvZyIsImRlYnVnIiwiVEVYVF9OT0RFIiwiZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyIsImtleURhdGEiLCJ1bmRlZmluZWQiLCJtYXAiLCJrZXkiLCJuYW1lIiwibGF0ZXgiLCJ3cml0ZSIsImxhYmVsIiwiQ3VzdG9tVG9vbGJhckNvbXAiLCJleHBvcnRzIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJub2RlIiwidmFsdWUiLCJvbkZvY3VzIiwib25CbHVyIiwib25DbGljayIsIl9yZWYiLCJwbHVnaW5Qcm9wcyIsIl9yZWYyIiwibWF0aCIsIl9yZWYzIiwia2V5cGFkTW9kZSIsImN1c3RvbUtleXMiLCJfcmVmMyRjb250cm9sbGVkS2V5cGEiLCJjb250cm9sbGVkS2V5cGFkTW9kZSIsIm9uRG9uZSIsInVwZGF0ZSIsImRhdGEiLCJ0b09iamVjdCIsImNoYW5nZSIsInNldE5vZGVCeUtleSIsIm5leHRUZXh0IiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsIm1vdmVGb2N1c1RvIiwibW92ZUFuY2hvclRvIiwib25Ub29sYmFyRG9uZSIsIm9uQ2hhbmdlIiwib25EYXRhQ2hhbmdlIiwiZ2V0IiwiY3JlYXRlRWxlbWVudCIsIk1hdGhUb29sYmFyIiwiYXV0b0ZvY3VzIiwiYWRkaXRpb25hbEtleXMiLCJwcmV2IiwibmV4dCIsIl9wcmV2JHBsdWdpblByb3BzIiwiX3ByZXYkcGx1Z2luUHJvcHMyIiwiX3ByZXYkcGx1Z2luUHJvcHMyJG1hIiwiX3ByZXYkcGx1Z2luUHJvcHMyJG1hMiIsIm5vZGVOZXh0IiwiX25leHQkcGx1Z2luUHJvcHMiLCJfbmV4dCRwbHVnaW5Qcm9wczIiLCJfbmV4dCRwbHVnaW5Qcm9wczIkbWEiLCJfbmV4dCRwbHVnaW5Qcm9wczIkbWEyIiwia2V5cGFkTW9kZU5leHQiLCJjb250cm9sbGVkS2V5cGFkTW9kZU5leHQiLCJrZXlwYWRNb2RlQ2hhbmdlZCIsImNvbnRyb2xsZWRLZXlwYWRNb2RlQ2hhbmdlZCIsImVxdWFsIiwiZXF1YWxzIiwicHJvcFR5cGVzIiwiU2xhdGVQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiUHJvcFR5cGVzIiwiZnVuYyIsIk1hdGhQbHVnaW4iLCJvcHRzIiwibWF0aE1sT3B0aW9ucyIsIm1tbE91dHB1dCIsIm1tbEVkaXRpbmciLCJ0b29sYmFyIiwiYXJpYUxhYmVsIiwiaWNvbiIsImlubGluZU1hdGgiLCJpbnNlcnRJbmxpbmUiLCJzdXBwb3J0cyIsIm9iamVjdCIsInR5cGUiLCJzY2hlbWEiLCJtYXRjaCIsInBsdWdpblN0eWxlcyIsInBhcmVudE5vZGUiLCJwIiwicG9zaXRpb24iLCJ0b3AiLCJyZW5kZXJOb2RlIiwiTWF0aFByZXZpZXciLCJodG1sIiwiX2V4dGVuZHMyIiwiYXR0cmlidXRlcyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUk9VTkRfQlJBQ0tFVFMiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET0xMQVIiLCJET1VCTEVfRE9MTEFSIiwiSW5saW5lIiwiY3JlYXRlIiwiaXNWb2lkIiwiaHRtbERlY29kZSIsImlucHV0IiwiZG9jIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jdW1lbnRFbGVtZW50IiwidGV4dENvbnRlbnQiLCJnZXRUYWdOYW1lIiwiZWwiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJhcnJvd0hhbmRsaW5nQ2FzZSIsInJlcGxhY2UiLCJyZXBsYWNlTGVmdFJpZ2h0IiwibGF0ZXhJbnB1dCIsImNvbnZlcnRMYXRleFRvTWF0aE1sIiwiX3JlZjQiLCJkZWNvZGVkIiwid3JhcHBlciIsInJlbW92ZUVtcHR5TW9zIiwibW1sRnJvbUxhdGV4IiwicmVnZXgiLCJoYW5kbGVkIiwibGF0ZXhUb0NvbnZlcnQiLCJjb25jYXQiLCJ3cmFwTWF0aCIsIm1hdGhNbEZyb21MYXRleCIsInJlbmRlck1hdGgiLCJza2lwV2FpdEZvck1hdGhSZW5kZXJpbmdMaWIiLCJjb252ZXJzaW9uRGlkTm90V29yayIsImlzRXF1YWwiLCJsYXRleEZyb21NYXRoTWwiLCJtbWxUb0xhdGV4Iiwic3RyaXBwZWRMIiwic3RyaXBwZWROZXdMIiwiY29ycmVjdGVkTGF0ZXgiLCJjb25zb2xlIiwiaW5pdGlhbExhdGV4IiwibmV3TGF0ZXgiLCJtYXRoTUwiLCJjb252ZXJ0TWF0aE1sVG9MYXRleCIsIm1hdGhNbCIsImh0bWxXaXRoUmVtb3ZlZFNwYWNlcyIsInJlcGxhY2VBbGwiLCJodG1sVG9Vc2UiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJoYXNNYXRoQ2hpbGQiLCJCTE9DS19UQUdTIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJkYXRhc2V0IiwiaW5uZXJIVE1MIiwib3V0ZXJIVE1MIiwiX3VuV3JhcE1hdGgiLCJ1bldyYXBNYXRoIiwidW53cmFwcGVkIiwid3JhcFR5cGUiLCJub2RlcyIsIm5vZGVUeXBlIiwiaGFzTGF0ZXgiLCJoYXNBdHRyaWJ1dGUiLCJfdW5XcmFwTWF0aDIiLCJzZXJpYWxpemUiLCJfY29udmVydExhdGV4VG9NYXRoTWwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9tYXRoL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVuY3Rpb25zIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRnVuY3Rpb25zJztcbmltcG9ydCB7IElubGluZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE1hdGhQcmV2aWV3LCBNYXRoVG9vbGJhciB9IGZyb20gJ0BwaWUtbGliL21hdGgtdG9vbGJhcic7XG5pbXBvcnQgeyB3cmFwTWF0aCwgdW5XcmFwTWF0aCwgbW1sVG9MYXRleCwgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFNsYXRlUHJvcFR5cGVzIGZyb20gJ3NsYXRlLXByb3AtdHlwZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHsgQkxPQ0tfVEFHUyB9IGZyb20gJy4uLy4uL2Jsb2NrLXRhZ3MnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOm1hdGgnKTtcblxuY29uc3QgVEVYVF9OT0RFID0gMztcblxuZnVuY3Rpb24gZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyhrZXlEYXRhID0gW10pIHtcbiAgcmV0dXJuIGtleURhdGEubWFwKChrZXkpID0+ICh7XG4gICAgbmFtZToga2V5LFxuICAgIGxhdGV4OiBrZXksXG4gICAgd3JpdGU6IGtleSxcbiAgICBsYWJlbDoga2V5LFxuICB9KSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbmV4cG9ydCBjb25zdCBDdXN0b21Ub29sYmFyQ29tcCA9IFJlYWN0Lm1lbW8oXG4gIChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgdmFsdWUsIG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gcHJvcHM7XG4gICAgY29uc3QgeyBwbHVnaW5Qcm9wcyB9ID0gcHJvcHMgfHwge307XG4gICAgY29uc3QgeyBtYXRoIH0gPSBwbHVnaW5Qcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGtleXBhZE1vZGUsIGN1c3RvbUtleXMsIGNvbnRyb2xsZWRLZXlwYWRNb2RlID0gdHJ1ZSB9ID0gbWF0aCB8fCB7fTtcblxuICAgIGNvbnN0IG9uRG9uZSA9IChsYXRleCkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAuLi5ub2RlLmRhdGEudG9PYmplY3QoKSxcbiAgICAgICAgbGF0ZXgsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5zZXROb2RlQnlLZXkobm9kZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xuXG4gICAgICBjb25zdCBuZXh0VGV4dCA9IHZhbHVlLmRvY3VtZW50LmdldE5leHRUZXh0KG5vZGUua2V5KTtcblxuICAgICAgY2hhbmdlLm1vdmVGb2N1c1RvKG5leHRUZXh0LmtleSwgMCkubW92ZUFuY2hvclRvKG5leHRUZXh0LmtleSwgMCk7XG5cbiAgICAgIHByb3BzLm9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKGxhdGV4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgIC4uLm5vZGUuZGF0YS50b09iamVjdCgpLFxuICAgICAgICBsYXRleCxcbiAgICAgIH07XG4gICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5zZXROb2RlQnlLZXkobm9kZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xuICAgICAgbG9nKCdjYWxsIG9uVG9vbGJhckNoYW5nZTonLCBjaGFuZ2UpO1xuICAgICAgcHJvcHMub25EYXRhQ2hhbmdlKG5vZGUua2V5LCB1cGRhdGUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYXRleCA9IG5vZGUuZGF0YS5nZXQoJ2xhdGV4Jyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1hdGhUb29sYmFyXG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBhZGRpdGlvbmFsS2V5cz17Z2VuZXJhdGVBZGRpdGlvbmFsS2V5cyhjdXN0b21LZXlzKX1cbiAgICAgICAgbGF0ZXg9e2xhdGV4fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uRG9uZT17b25Eb25lfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAga2V5cGFkTW9kZT17a2V5cGFkTW9kZX1cbiAgICAgICAgY29udHJvbGxlZEtleXBhZE1vZGU9e2NvbnRyb2xsZWRLZXlwYWRNb2RlfVxuICAgICAgLz5cbiAgICApO1xuICB9LFxuICAocHJldiwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlLCBjb250cm9sbGVkS2V5cGFkTW9kZSB9ID0ge30gfSA9IHt9IH0gPSBwcmV2O1xuICAgIGNvbnN0IHtcbiAgICAgIG5vZGU6IG5vZGVOZXh0LFxuICAgICAgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlOiBrZXlwYWRNb2RlTmV4dCwgY29udHJvbGxlZEtleXBhZE1vZGU6IGNvbnRyb2xsZWRLZXlwYWRNb2RlTmV4dCB9ID0ge30gfSA9IHt9LFxuICAgIH0gPSBuZXh0O1xuICAgIGNvbnN0IGtleXBhZE1vZGVDaGFuZ2VkID0ga2V5cGFkTW9kZSAhPT0ga2V5cGFkTW9kZU5leHQ7XG4gICAgY29uc3QgY29udHJvbGxlZEtleXBhZE1vZGVDaGFuZ2VkID0gY29udHJvbGxlZEtleXBhZE1vZGUgIT09IGNvbnRyb2xsZWRLZXlwYWRNb2RlTmV4dDtcblxuICAgIGNvbnN0IGVxdWFsID0gbm9kZS5lcXVhbHMobm9kZU5leHQpO1xuICAgIHJldHVybiBlcXVhbCAmJiAha2V5cGFkTW9kZUNoYW5nZWQgJiYgIWNvbnRyb2xsZWRLZXlwYWRNb2RlQ2hhbmdlZDtcbiAgfSxcbik7XG5cbkN1c3RvbVRvb2xiYXJDb21wLnByb3BUeXBlcyA9IHtcbiAgbm9kZTogU2xhdGVQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICB2YWx1ZTogU2xhdGVQcm9wVHlwZXMudmFsdWUsXG4gIG9uVG9vbGJhckRvbmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRhdGFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXRoUGx1Z2luKG9wdHMpIHtcbiAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zID0ge1xuICAgIG1tbE91dHB1dDogb3B0cy5tbWxPdXRwdXQsXG4gICAgbW1sRWRpdGluZzogb3B0cy5tbWxFZGl0aW5nLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21hdGgnLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIGFyaWFMYWJlbDogJ01hdGggVG9vbGJhcicsXG4gICAgICBpY29uOiA8RnVuY3Rpb25zIC8+LFxuICAgICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgICBsb2coJ1tpbnNlcnRNYXRoXScpO1xuICAgICAgICBjb25zdCBtYXRoID0gaW5saW5lTWF0aCgpO1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5pbnNlcnRJbmxpbmUobWF0aCk7XG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICB9LFxuICAgICAgc3VwcG9ydHM6IChub2RlKSA9PiBub2RlICYmIG5vZGUub2JqZWN0ID09PSAnaW5saW5lJyAmJiBub2RlLnR5cGUgPT09ICdtYXRoJyxcbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIGEgcmVhY3QgY29tcG9uZW50IGZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0gbm9kZSB7U2xhdGUuTm9kZX1cbiAgICAgICAqIEBwYXJhbSB2YWx1ZSB7U2xhdGUuVmFsdWV9XG4gICAgICAgKiBAcGFyYW0gb25Eb25lIHsoY2hhbmdlPzogU2xhdGUuQ2hhbmdlLCBmaW5pc2hFZGl0aW5nIDpib29sZWEpID0+IHZvaWR9IC0gYSBmdW5jdGlvbiB0byBjYWxsIG9uY2UgdGhlIHRvb2xiYXJcbiAgICAgICAqICAgaGFzIG1hZGUgYW55IGNoYW5nZXMsIGNhbGwgd2l0aCB0aGUgbm9kZS5rZXkgYW5kIGEgZGF0YSBvYmplY3QuXG4gICAgICAgKi9cbiAgICAgIEN1c3RvbVRvb2xiYXJDb21wLFxuICAgIH0sXG4gICAgc2NoZW1hOiB7XG4gICAgICBkb2N1bWVudDogeyBtYXRjaDogW3sgdHlwZTogJ21hdGgnIH1dIH0sXG4gICAgfSxcblxuICAgIHBsdWdpblN0eWxlczogKG5vZGUsIHBhcmVudE5vZGUsIHApID0+IHtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAnaW5pdGlhbCcsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlck5vZGU6IChwcm9wcykgPT4ge1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICAgIGxvZygnW3JlbmRlck5vZGVdOiBkYXRhOicsIHByb3BzLm5vZGUuZGF0YSk7XG4gICAgICAgIHJldHVybiA8TWF0aFByZXZpZXcgey4uLnByb3BzfSAvPjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHByb3BzLm5vZGUuZGF0YS5nZXQoJ2h0bWwnKTtcblxuICAgICAgICByZXR1cm4gPHNwYW4gey4uLnByb3BzLmF0dHJpYnV0ZXN9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaHRtbCB9fSAvPjtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5NYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTID0gJ3JvdW5kX2JyYWNrZXRzJztcbk1hdGhQbHVnaW4uU1FVQVJFX0JSQUNLRVRTID0gJ3NxdWFyZV9icmFja2V0cyc7XG5NYXRoUGx1Z2luLkRPTExBUiA9ICdkb2xsYXInO1xuTWF0aFBsdWdpbi5ET1VCTEVfRE9MTEFSID0gJ2RvdWJsZV9kb2xsYXInO1xuTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zID0ge307XG5cbk1hdGhQbHVnaW4ucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBub2RlOiBTbGF0ZVByb3BUeXBlcy5ub2RlLFxufTtcblxuZXhwb3J0IGNvbnN0IGlubGluZU1hdGggPSAoKSA9PlxuICBJbmxpbmUuY3JlYXRlKHtcbiAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgIHR5cGU6ICdtYXRoJyxcbiAgICBpc1ZvaWQ6IHRydWUsXG4gICAgZGF0YToge1xuICAgICAgbGF0ZXg6ICcnLFxuICAgIH0sXG4gIH0pO1xuXG5jb25zdCBodG1sRGVjb2RlID0gKGlucHV0KSA9PiB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsICd0ZXh0L2h0bWwnKTtcblxuICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbn07XG5cbmNvbnN0IGdldFRhZ05hbWUgPSAoZWwpID0+IHtcbiAgcmV0dXJuICgoZWwgJiYgZWwudGFnTmFtZSkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIE1ha2VzIHN1cmUgdGhhdCBzdHJpbmdzIHRoYXQgY29udGFpbiBzdHVmZiBsaWtlOlxuICogeDx5IGFyZSBub3QgdHJhbnNmb3JtZWQgaW50byB4IGJ5IHRoZSBET01QYXJzZXIgYmVjYXVzZSBpdCB0aGlua3NcbiAqIHRoYXQgPHkgaXMgdGhlIHN0YXJ0IG9mIGEgZG9tIGVsZW1lbnQgdGFnXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5jb25zdCBhcnJvd0hhbmRsaW5nQ2FzZSA9IChpbnB1dCkgPT4ge1xuICAvKlxuICBJZiB3ZSBoYXZlIGEgPCBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYSBsZXR0ZXJcbiAgd2UgbWFrZSBzdXJlIHRvIHJlcGxhY2UgaXQgd2l0aCBhICZsdDsgc2lnbiBpbnN0ZWFkXG4gICAqL1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvPChbYS16QS1aXSopL2csICcmbHQ7JDEnKTtcbn07XG5cbmZ1bmN0aW9uIHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXhJbnB1dCkge1xuICAvLyBmb3Igc29tZSByZWFzb24sIG1tbFRvTGF0ZXggcGFyc2VzICgpIGluY29ycmVjdGx5IC0gb3IgYXQgbGVhc3QgaW4gYSB3YXkgdGhhdCBvdXIgaW50ZXJwcmV0ZXIgY2FuIG5vdCB1c2UgdGhlbVxuICAvLyBSZXBsYWNlICdcXFxcbGVmdC4nIGFuZCAnXFxcXHJpZ2h0Licgd2l0aCBhbiBlbXB0eSBzdHJpbmdcbiAgcmV0dXJuIGxhdGV4SW5wdXQucmVwbGFjZSgvXFxcXGxlZnRcXC5cXHMqfFxcXFxyaWdodFxcLlxccyovZywgJycpO1xufVxuXG5jb25zdCBjb252ZXJ0TGF0ZXhUb01hdGhNbCA9ICh7IGxhdGV4LCBkZWNvZGVkLCB3cmFwcGVyIH0pID0+IHtcbiAgY29uc3QgcmVtb3ZlRW1wdHlNb3MgPSAobW1sRnJvbUxhdGV4KSA9PiB7XG4gICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIDxtbz4mI3gyMDYxOzwvbW8+IGFuZCA8bW8gLi4uPiYjeDIwNjE7PC9tbz4sIHdoaWNoIGdldCBhZGRlZCB3aGVuIHVzaW5nIGxvZyB3aXRoIGJhc2VcbiAgICAvLyBub3Qgc3VyZSB3aHkgdGhleSBnZXQgYWRkZWQsIGJ1dCB0aGV5IGFkZCBhbiBleHRyYSBzcGFjZSB3aGljaCBpcyBub3QgbmVlZGVkXG4gICAgY29uc3QgcmVnZXggPSAvPG1vKD86IFtePl0qKT8+JiN4MjA2MTs8XFwvbW8+L2c7XG5cbiAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgbWF0Y2hlZCBwYXR0ZXJuc1xuICAgIHJldHVybiBtbWxGcm9tTGF0ZXgucmVwbGFjZShyZWdleCwgJycpO1xuICB9O1xuICBjb25zdCBoYW5kbGVkID0gYXJyb3dIYW5kbGluZ0Nhc2UoZGVjb2RlZCk7XG5cbiAgY29uc3QgbGF0ZXhUb0NvbnZlcnQgPSBgPHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PVwiJHtoYW5kbGVkfVwiPiR7d3JhcE1hdGgoaGFuZGxlZCwgd3JhcHBlcil9PC9zcGFuPmA7XG5cbiAgLy8gdXNlIG1hdGggcmVuZGVyaW5nIChNYXRoSmF4KSB0byBjb252ZXJ0IGxhdGV4IHRvIG1hdGhNbFxuICBsZXQgbWF0aE1sRnJvbUxhdGV4ID0gcmVuZGVyTWF0aChsYXRleFRvQ29udmVydCwge1xuICAgIHNraXBXYWl0Rm9yTWF0aFJlbmRlcmluZ0xpYjogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gaWYgcmVuZGVyTWF0aCByZXR1cm5lZCB0aGUgZXhhY3Qgc2FtZSBzdHJpbmcgdGhhdCB3ZSBzZW50LCBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIGNvbnZlcnNpb24gY291bGQgbm90IGJlIGRvbmVcbiAgY29uc3QgY29udmVyc2lvbkRpZE5vdFdvcmsgPSBpc0VxdWFsKGxhdGV4VG9Db252ZXJ0LCBtYXRoTWxGcm9tTGF0ZXgpO1xuXG4gIG1hdGhNbEZyb21MYXRleCA9IHJlbW92ZUVtcHR5TW9zKG1hdGhNbEZyb21MYXRleCk7XG5cbiAgLy8gd2UgY29udmVydCByZXN1bHRlZCBtYXRobWwgdG8gbGF0ZXggdG8gY2hlY2sgaWYgdGhlIHJlc3VsdGVkIG1hdGhNbCBjYW4gYmUgY29udmVydGVkIGJhY2sgdG8gbGF0ZXggaWYgdXNlciB3YW50cyB0byBlZGl0IGl0IGxhdGVyXG4gIGNvbnN0IGxhdGV4RnJvbU1hdGhNbCA9IG1hdGhNbEZyb21MYXRleCA/IG1tbFRvTGF0ZXgobWF0aE1sRnJvbUxhdGV4KSA6ICcnO1xuXG4gIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3BhY2VzIGZyb20gdGhlIGxhdGV4IHRvIGJlIGFibGUgdG8gY29tcGFyZSBpdFxuICBjb25zdCBzdHJpcHBlZEwgPSBsYXRleC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICBjb25zdCBzdHJpcHBlZE5ld0wgPSBsYXRleEZyb21NYXRoTWwucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAvLyB3ZSBjaGVjayBpZiB0aGUgbGF0ZXgga2VlcHMgaGlzIGZvcm0gYWZ0ZXIgYmVpbmcgY29udmVydGVkIHRvIG1hdGhtbCBhbmQgYmFjayB0byBsYXRleFxuICAvLyBpZiBpdCBkb2VzLCB3ZSBjYW4gc2FmZWx5IGNvbnZlcnQgaXQgdG8gbWF0aG1sXG4gIGlmICghaXNFcXVhbChzdHJpcHBlZEwsIHN0cmlwcGVkTmV3TCkpIHtcbiAgICBjb25zdCBjb3JyZWN0ZWRMYXRleCA9IHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXhGcm9tTWF0aE1sKTtcblxuICAgIC8vIEFzIEdlb3JnZSByZXF1ZXN0ZWQgaW4gUEQtMzE2NywgSSB3aWxsIHNldCB0aGUgbmV3IG1hdGhNTCBhbnl3YXksIGFuZCBhbHNvIGxvZyBkaWZmZXJlbmNlc1xuICAgIC8vIGlmIGl0IGRvZXNuJ3QsIHdlIGtlZXAgdGhlIGxhdGV4IHZlcnNpb25cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdUaGlzIGxhdGV4IGNhbiBub3QgYmUgc2FmZWx5IGNvbnZlcnRlZCB0byBtYXRobWwgc28gd2Ugd2lsbCBrZWVwIHRoZSBsYXRleCB2ZXJzaW9uISEhJywge1xuICAgICAgaW5pdGlhbExhdGV4OiBsYXRleCxcbiAgICAgIG5ld0xhdGV4OiBsYXRleEZyb21NYXRoTWwsXG4gICAgICBjb3JyZWN0ZWRMYXRleCxcbiAgICAgIG1hdGhNTDogbWF0aE1sRnJvbUxhdGV4LFxuICAgICAgY29udmVyc2lvbkRpZE5vdFdvcmssXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBtYXRoTWxGcm9tTGF0ZXgsIGNvbnZlcnNpb25EaWROb3RXb3JrIH07XG59O1xuXG5jb25zdCBjb252ZXJ0TWF0aE1sVG9MYXRleCA9IChtYXRoTWwpID0+IHtcbiAgY29uc3QgaHRtbFdpdGhSZW1vdmVkU3BhY2VzID0gbWF0aE1sLnJlcGxhY2VBbGwoJyZuYnNwOycsICcgJyk7XG4gIGNvbnN0IGh0bWxUb1VzZSA9IG1tbFRvTGF0ZXgoaHRtbFdpdGhSZW1vdmVkU3BhY2VzKTtcbiAgY29uc3QgbGF0ZXggPSBodG1sRGVjb2RlKGh0bWxUb1VzZSk7XG5cbiAgLy8gdG9kbyBmaXggdGhpcyBpbiBtYXRobWwtdG8tbGF0ZXhcbiAgcmV0dXJuIHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsKSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGdldFRhZ05hbWUoZWwpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3Igd2hlbiB0aGVyZSdzIGEgd3JhcHBlciBvdmVyIHRoZSBtYXRobWwgZWxlbWVudC5cbiAgICAgKiBCZWNhdXNlIG9mIHRoaXMgc2xhdGUgcnVsZTogXCJPbmx5IGFsbG93IGJsb2NrIG5vZGVzIG9yIGlubGluZSBhbmQgdGV4dCBub2RlcyBpbiBibG9ja3MuXCJcbiAgICAgKiBUaGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGhtbCBpcyByZW1vdmVkIChhbG9uZyB3aXRoIHRoZSBtYXRoKSBiZWNhdXNlIGl0IGhhc1xuICAgICAqIGFuIGlubGluZSBjaGlsZCBhbmQgdGhlIGJsb2NrIGlzIG9mIHR5cGUgYmxvY2tcbiAgICAgKiBUaGlzIGlzIGZvciBsZWdhY3kgY29udGVudCBvbmx5IHNpbmNlIG91ciBtYXRoIHJlbmRlcmluZyBpcyB2YWxpZCBmb3IgdGhlIGNvcmUgc2xhdGUgcnVsZXNcbiAgICAgKi9cbiAgICBjb25zdCBoYXNNYXRoQ2hpbGQgPSBCTE9DS19UQUdTW3RhZ05hbWVdICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGdldFRhZ05hbWUoZWwuZmlyc3RDaGlsZCkgPT09ICdtYXRoJztcbiAgICBsb2coJ1tkZXNlcmlhbGl6ZV0gbmFtZTogJywgdGFnTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGhlcmUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZW5kZXIgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAodGFnTmFtZSA9PT0gJ21hdGgnIHx8IChlbC5kYXRhc2V0ICYmIGVsLmRhdGFzZXQudHlwZSA9PT0gJ21hdGhtbCcpIHx8IGhhc01hdGhDaGlsZCkge1xuICAgICAgY29uc3QgbWF0aE1sID0gaGFzTWF0aENoaWxkID8gZWwuaW5uZXJIVE1MIDogZWwub3V0ZXJIVE1MO1xuXG4gICAgICBpZiAoTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcpIHtcbiAgICAgICAgY29uc3QgeyB1bndyYXBwZWQsIHdyYXBUeXBlIH0gPSB1bldyYXBNYXRoKGNvbnZlcnRNYXRoTWxUb0xhdGV4KG1hdGhNbCkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYXRleDogdW53cmFwcGVkLFxuICAgICAgICAgICAgd3JhcHBlcjogd3JhcFR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnbWF0aG1sJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGh0bWw6IG1hdGhNbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVsLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGFnTmFtZSAhPT0gJ3NwYW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzTGF0ZXggPSBlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGF0ZXgnKSB8fCBlbC5oYXNBdHRyaWJ1dGUoJ2xhdGV4Jyk7XG5cbiAgICBpZiAoaGFzTGF0ZXgpIHtcbiAgICAgIGNvbnN0IGxhdGV4ID0gaHRtbERlY29kZShlbC5pbm5lckhUTUwpO1xuICAgICAgY29uc3QgeyB1bndyYXBwZWQsIHdyYXBUeXBlIH0gPSB1bldyYXBNYXRoKGxhdGV4KTtcbiAgICAgIGxvZygnW2Rlc2VyaWFsaXplXTogbm9CcmFja2V0czogJywgdW53cmFwcGVkLCB3cmFwVHlwZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGF0ZXg6IHVud3JhcHBlZCxcbiAgICAgICAgICB3cmFwcGVyOiB3cmFwVHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemUob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC50eXBlID09PSAnbWF0aCcpIHtcbiAgICAgIGNvbnN0IGxhdGV4ID0gb2JqZWN0LmRhdGEuZ2V0KCdsYXRleCcpO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IG9iamVjdC5kYXRhLmdldCgnd3JhcHBlcicpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGh0bWxEZWNvZGUoYXJyb3dIYW5kbGluZ0Nhc2UobGF0ZXgpKTtcblxuICAgICAgbG9nKCdbc2VyaWFsaXplXSBsYXRleDogJywgbGF0ZXgpO1xuXG4gICAgICBpZiAoTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbE91dHB1dCkge1xuICAgICAgICBjb25zdCB7IG1hdGhNbEZyb21MYXRleCwgY29udmVyc2lvbkRpZE5vdFdvcmsgfSA9IGNvbnZlcnRMYXRleFRvTWF0aE1sKHsgbGF0ZXgsIGRlY29kZWQsIHdyYXBwZXIgfSk7XG5cbiAgICAgICAgaWYgKGNvbnZlcnNpb25EaWROb3RXb3JrKSB7XG4gICAgICAgICAgLy8gdGhpcyBtZWFucyB3ZSBjb3VsZCBub3QgY29udmVydCBsYXRleCB0byBtYXRoTWwsIHNvIGp1c3QgcmV0dXJuIHRoZSBsYXRleCB2ZXJzaW9uLFxuICAgICAgICAgIC8vIHNhbWUgYXMgd2Ugd291bGQgZG8gaWYgbW1sT3V0cHV0IHdvdWxkIG5vdCBiZSBlbmFibGVkXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbGF0ZXg9XCJcIiBkYXRhLXJhdz17ZGVjb2RlZH0+XG4gICAgICAgICAgICAgIHt3cmFwTWF0aChkZWNvZGVkLCB3cmFwcGVyKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGRhdGEtdHlwZT1cIm1hdGhtbFwiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogbWF0aE1sRnJvbUxhdGV4IH19IC8+O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9e2RlY29kZWR9PlxuICAgICAgICAgIHt3cmFwTWF0aChkZWNvZGVkLCB3cmFwcGVyKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09ICdtYXRobWwnKSB7XG4gICAgICBjb25zdCBodG1sID0gb2JqZWN0LmRhdGEuZ2V0KCdodG1sJyk7XG5cbiAgICAgIHJldHVybiA8c3BhbiBkYXRhLXR5cGU9XCJtYXRobWxcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGh0bWwgfX0gLz47XG4gICAgfVxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxlQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBcUMsU0FBQVUsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFFckMsSUFBTW9CLEdBQUcsR0FBRyxJQUFBQyxpQkFBSyxFQUFDLHFDQUFxQyxDQUFDO0FBRXhELElBQU1DLFNBQVMsR0FBRyxDQUFDO0FBRW5CLFNBQVNDLHNCQUFzQkEsQ0FBQSxFQUFlO0VBQUEsSUFBZEMsT0FBTyxHQUFBWCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBWSxTQUFBLEdBQUFaLFNBQUEsTUFBRyxFQUFFO0VBQzFDLE9BQU9XLE9BQU8sQ0FBQ0UsR0FBRyxDQUFDLFVBQUNDLEdBQUc7SUFBQSxPQUFNO01BQzNCQyxJQUFJLEVBQUVELEdBQUc7TUFDVEUsS0FBSyxFQUFFRixHQUFHO01BQ1ZHLEtBQUssRUFBRUgsR0FBRztNQUNWSSxLQUFLLEVBQUVKO0lBQ1QsQ0FBQztFQUFBLENBQUMsQ0FBQztBQUNMOztBQUVBO0FBQ08sSUFBTUssaUJBQWlCLEdBQUFDLE9BQUEsQ0FBQUQsaUJBQUEsZ0JBQUdFLGlCQUFLLENBQUNDLElBQUksQ0FDekMsVUFBQ0MsS0FBSyxFQUFLO0VBQ1QsSUFBUUMsSUFBSSxHQUFzQ0QsS0FBSyxDQUEvQ0MsSUFBSTtJQUFFQyxLQUFLLEdBQStCRixLQUFLLENBQXpDRSxLQUFLO0lBQUVDLE9BQU8sR0FBc0JILEtBQUssQ0FBbENHLE9BQU87SUFBRUMsTUFBTSxHQUFjSixLQUFLLENBQXpCSSxNQUFNO0lBQUVDLE9BQU8sR0FBS0wsS0FBSyxDQUFqQkssT0FBTztFQUM3QyxJQUFBQyxJQUFBLEdBQXdCTixLQUFLLElBQUksQ0FBQyxDQUFDO0lBQTNCTyxXQUFXLEdBQUFELElBQUEsQ0FBWEMsV0FBVztFQUNuQixJQUFBQyxLQUFBLEdBQWlCRCxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQTFCRSxJQUFJLEdBQUFELEtBQUEsQ0FBSkMsSUFBSTtFQUNaLElBQUFDLEtBQUEsR0FBZ0VELElBQUksSUFBSSxDQUFDLENBQUM7SUFBbEVFLFVBQVUsR0FBQUQsS0FBQSxDQUFWQyxVQUFVO0lBQUVDLFVBQVUsR0FBQUYsS0FBQSxDQUFWRSxVQUFVO0lBQUFDLHFCQUFBLEdBQUFILEtBQUEsQ0FBRUksb0JBQW9CO0lBQXBCQSxvQkFBb0IsR0FBQUQscUJBQUEsY0FBRyxJQUFJLEdBQUFBLHFCQUFBO0VBRTNELElBQU1FLE1BQU0sR0FBRyxTQUFUQSxNQUFNQSxDQUFJdEIsS0FBSyxFQUFLO0lBQ3hCLElBQU11QixNQUFNLEdBQUF4QyxhQUFBLENBQUFBLGFBQUEsS0FDUHlCLElBQUksQ0FBQ2dCLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFDdkJ6QixLQUFLLEVBQUxBO0lBQUssRUFDTjtJQUVELElBQU0wQixNQUFNLEdBQUdqQixLQUFLLENBQUNpQixNQUFNLENBQUMsQ0FBQyxDQUFDQyxZQUFZLENBQUNuQixJQUFJLENBQUNWLEdBQUcsRUFBRTtNQUFFMEIsSUFBSSxFQUFFRDtJQUFPLENBQUMsQ0FBQztJQUV0RSxJQUFNSyxRQUFRLEdBQUduQixLQUFLLENBQUNvQixRQUFRLENBQUNDLFdBQVcsQ0FBQ3RCLElBQUksQ0FBQ1YsR0FBRyxDQUFDO0lBRXJENEIsTUFBTSxDQUFDSyxXQUFXLENBQUNILFFBQVEsQ0FBQzlCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQ2tDLFlBQVksQ0FBQ0osUUFBUSxDQUFDOUIsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUVqRVMsS0FBSyxDQUFDMEIsYUFBYSxDQUFDUCxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ3BDLENBQUM7RUFFRCxJQUFNUSxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBSWxDLEtBQUssRUFBSztJQUMxQixJQUFNdUIsTUFBTSxHQUFBeEMsYUFBQSxDQUFBQSxhQUFBLEtBQ1B5QixJQUFJLENBQUNnQixJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDO01BQ3ZCekIsS0FBSyxFQUFMQTtJQUFLLEVBQ047SUFDRCxJQUFNMEIsTUFBTSxHQUFHakIsS0FBSyxDQUFDaUIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDbkIsSUFBSSxDQUFDVixHQUFHLEVBQUU7TUFBRTBCLElBQUksRUFBRUQ7SUFBTyxDQUFDLENBQUM7SUFDdEVoQyxHQUFHLENBQUMsdUJBQXVCLEVBQUVtQyxNQUFNLENBQUM7SUFDcENuQixLQUFLLENBQUM0QixZQUFZLENBQUMzQixJQUFJLENBQUNWLEdBQUcsRUFBRXlCLE1BQU0sQ0FBQztFQUN0QyxDQUFDO0VBRUQsSUFBTXZCLEtBQUssR0FBR1EsSUFBSSxDQUFDZ0IsSUFBSSxDQUFDWSxHQUFHLENBQUMsT0FBTyxDQUFDO0VBRXBDLG9CQUNFeEUsTUFBQSxZQUFBeUUsYUFBQSxDQUFDM0UsWUFBQSxDQUFBNEUsV0FBVztJQUNWQyxTQUFTO0lBQ1RDLGNBQWMsRUFBRTlDLHNCQUFzQixDQUFDeUIsVUFBVSxDQUFFO0lBQ25EbkIsS0FBSyxFQUFFQSxLQUFNO0lBQ2JrQyxRQUFRLEVBQUVBLFFBQVM7SUFDbkJaLE1BQU0sRUFBRUEsTUFBTztJQUNmWCxNQUFNLEVBQUVBLE1BQU87SUFDZkQsT0FBTyxFQUFFQSxPQUFRO0lBQ2pCRSxPQUFPLEVBQUVBLE9BQVE7SUFDakJNLFVBQVUsRUFBRUEsVUFBVztJQUN2Qkcsb0JBQW9CLEVBQUVBO0VBQXFCLENBQzVDLENBQUM7QUFFTixDQUFDLEVBQ0QsVUFBQ29CLElBQUksRUFBRUMsSUFBSSxFQUFLO0VBQ2QsSUFBUWxDLElBQUksR0FBNEVpQyxJQUFJLENBQXBGakMsSUFBSTtJQUFBbUMsaUJBQUEsR0FBNEVGLElBQUksQ0FBOUUzQixXQUFXO0lBQUE4QixrQkFBQSxHQUFBRCxpQkFBQSxjQUF3RCxDQUFDLENBQUMsR0FBQUEsaUJBQUE7SUFBQUUscUJBQUEsR0FBQUQsa0JBQUEsQ0FBdEQ1QixJQUFJO0lBQUE4QixzQkFBQSxHQUFBRCxxQkFBQSxjQUF5QyxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBdkMzQixVQUFVLEdBQUE0QixzQkFBQSxDQUFWNUIsVUFBVTtJQUFFRyxvQkFBb0IsR0FBQXlCLHNCQUFBLENBQXBCekIsb0JBQW9CO0VBQ3JFLElBQ1EwQixRQUFRLEdBRVpMLElBQUksQ0FGTmxDLElBQUk7SUFBQXdDLGlCQUFBLEdBRUZOLElBQUksQ0FETjVCLFdBQVc7SUFBQW1DLGtCQUFBLEdBQUFELGlCQUFBLGNBQWtHLENBQUMsQ0FBQyxHQUFBQSxpQkFBQTtJQUFBRSxxQkFBQSxHQUFBRCxrQkFBQSxDQUFoR2pDLElBQUk7SUFBQW1DLHNCQUFBLEdBQUFELHFCQUFBLGNBQW1GLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtJQUFyRUUsY0FBYyxHQUFBRCxzQkFBQSxDQUExQmpDLFVBQVU7SUFBd0NtQyx3QkFBd0IsR0FBQUYsc0JBQUEsQ0FBOUM5QixvQkFBb0I7RUFFekUsSUFBTWlDLGlCQUFpQixHQUFHcEMsVUFBVSxLQUFLa0MsY0FBYztFQUN2RCxJQUFNRywyQkFBMkIsR0FBR2xDLG9CQUFvQixLQUFLZ0Msd0JBQXdCO0VBRXJGLElBQU1HLEtBQUssR0FBR2hELElBQUksQ0FBQ2lELE1BQU0sQ0FBQ1YsUUFBUSxDQUFDO0VBQ25DLE9BQU9TLEtBQUssSUFBSSxDQUFDRixpQkFBaUIsSUFBSSxDQUFDQywyQkFBMkI7QUFDcEUsQ0FDRixDQUFDO0FBRURwRCxpQkFBaUIsQ0FBQ3VELFNBQVMsR0FBRztFQUM1QmxELElBQUksRUFBRW1ELDBCQUFjLENBQUNuRCxJQUFJLENBQUNvRCxVQUFVO0VBQ3BDbkQsS0FBSyxFQUFFa0QsMEJBQWMsQ0FBQ2xELEtBQUs7RUFDM0J3QixhQUFhLEVBQUU0QixxQkFBUyxDQUFDQyxJQUFJO0VBQzdCM0IsWUFBWSxFQUFFMEIscUJBQVMsQ0FBQ0MsSUFBSTtFQUM1QnBELE9BQU8sRUFBRW1ELHFCQUFTLENBQUNDLElBQUk7RUFDdkJsRCxPQUFPLEVBQUVpRCxxQkFBUyxDQUFDQyxJQUFJO0VBQ3ZCbkQsTUFBTSxFQUFFa0QscUJBQVMsQ0FBQ0M7QUFDcEIsQ0FBQztBQUVjLFNBQVNDLFVBQVVBLENBQUNDLElBQUksRUFBRTtFQUN2Q0QsVUFBVSxDQUFDRSxhQUFhLEdBQUc7SUFDekJDLFNBQVMsRUFBRUYsSUFBSSxDQUFDRSxTQUFTO0lBQ3pCQyxVQUFVLEVBQUVILElBQUksQ0FBQ0c7RUFDbkIsQ0FBQztFQUVELE9BQU87SUFDTHBFLElBQUksRUFBRSxNQUFNO0lBQ1pxRSxPQUFPLEVBQUU7TUFDUEMsU0FBUyxFQUFFLGNBQWM7TUFDekJDLElBQUksZUFBRTFHLE1BQUEsWUFBQXlFLGFBQUEsQ0FBQy9FLFVBQUEsV0FBUyxNQUFFLENBQUM7TUFDbkJzRCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0gsS0FBSyxFQUFFeUIsUUFBUSxFQUFLO1FBQzVCM0MsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUNuQixJQUFNeUIsSUFBSSxHQUFHdUQsVUFBVSxDQUFDLENBQUM7UUFDekIsSUFBTTdDLE1BQU0sR0FBR2pCLEtBQUssQ0FBQ2lCLE1BQU0sQ0FBQyxDQUFDLENBQUM4QyxZQUFZLENBQUN4RCxJQUFJLENBQUM7UUFDaERrQixRQUFRLENBQUNSLE1BQU0sQ0FBQztNQUNsQixDQUFDO01BQ0QrQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR2pFLElBQUk7UUFBQSxPQUFLQSxJQUFJLElBQUlBLElBQUksQ0FBQ2tFLE1BQU0sS0FBSyxRQUFRLElBQUlsRSxJQUFJLENBQUNtRSxJQUFJLEtBQUssTUFBTTtNQUFBO01BQzVFO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ014RSxpQkFBaUIsRUFBakJBO0lBQ0YsQ0FBQztJQUNEeUUsTUFBTSxFQUFFO01BQ04vQyxRQUFRLEVBQUU7UUFBRWdELEtBQUssRUFBRSxDQUFDO1VBQUVGLElBQUksRUFBRTtRQUFPLENBQUM7TUFBRTtJQUN4QyxDQUFDO0lBRURHLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHdEUsSUFBSSxFQUFFdUUsVUFBVSxFQUFFQyxDQUFDLEVBQUs7TUFDckMsSUFBSUEsQ0FBQyxFQUFFO1FBQ0wsT0FBTztVQUNMQyxRQUFRLEVBQUUsVUFBVTtVQUNwQkMsR0FBRyxFQUFFO1FBQ1AsQ0FBQztNQUNIO0lBQ0YsQ0FBQztJQUVEQyxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBRzVFLEtBQUssRUFBSztNQUNyQixJQUFJQSxLQUFLLENBQUNDLElBQUksQ0FBQ21FLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDOUJwRixHQUFHLENBQUMscUJBQXFCLEVBQUVnQixLQUFLLENBQUNDLElBQUksQ0FBQ2dCLElBQUksQ0FBQztRQUMzQyxvQkFBTzVELE1BQUEsWUFBQXlFLGFBQUEsQ0FBQzNFLFlBQUEsQ0FBQTBILFdBQVcsRUFBSzdFLEtBQVEsQ0FBQztNQUNuQzs7TUFFQTtBQUNOO0FBQ0E7TUFDTSxJQUFJQSxLQUFLLENBQUNDLElBQUksQ0FBQ21FLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDaEMsSUFBTVUsSUFBSSxHQUFHOUUsS0FBSyxDQUFDQyxJQUFJLENBQUNnQixJQUFJLENBQUNZLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFeEMsb0JBQU94RSxNQUFBLFlBQUF5RSxhQUFBLGFBQUFpRCxTQUFBLGlCQUFVL0UsS0FBSyxDQUFDZ0YsVUFBVTtVQUFFQyx1QkFBdUIsRUFBRTtZQUFFQyxNQUFNLEVBQUVKO1VBQUs7UUFBRSxFQUFFLENBQUM7TUFDbEY7SUFDRjtFQUNGLENBQUM7QUFDSDtBQUVBdEIsVUFBVSxDQUFDMkIsY0FBYyxHQUFHLGdCQUFnQjtBQUM1QzNCLFVBQVUsQ0FBQzRCLGVBQWUsR0FBRyxpQkFBaUI7QUFDOUM1QixVQUFVLENBQUM2QixNQUFNLEdBQUcsUUFBUTtBQUM1QjdCLFVBQVUsQ0FBQzhCLGFBQWEsR0FBRyxlQUFlO0FBQzFDOUIsVUFBVSxDQUFDRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRTdCRixVQUFVLENBQUNMLFNBQVMsR0FBRztFQUNyQjZCLFVBQVUsRUFBRTFCLHFCQUFTLENBQUNhLE1BQU07RUFDNUJsRSxJQUFJLEVBQUVtRCwwQkFBYyxDQUFDbkQ7QUFDdkIsQ0FBQztBQUVNLElBQU0rRCxVQUFVLEdBQUFuRSxPQUFBLENBQUFtRSxVQUFBLEdBQUcsU0FBYkEsVUFBVUEsQ0FBQTtFQUFBLE9BQ3JCdUIsYUFBTSxDQUFDQyxNQUFNLENBQUM7SUFDWnJCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCQyxJQUFJLEVBQUUsTUFBTTtJQUNacUIsTUFBTSxFQUFFLElBQUk7SUFDWnhFLElBQUksRUFBRTtNQUNKeEIsS0FBSyxFQUFFO0lBQ1Q7RUFDRixDQUFDLENBQUM7QUFBQTtBQUVKLElBQU1pRyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSUMsS0FBSyxFQUFLO0VBQzVCLElBQU1DLEdBQUcsR0FBRyxJQUFJQyxTQUFTLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUNILEtBQUssRUFBRSxXQUFXLENBQUM7RUFFL0QsT0FBT0MsR0FBRyxDQUFDRyxlQUFlLENBQUNDLFdBQVc7QUFDeEMsQ0FBQztBQUVELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJQyxFQUFFLEVBQUs7RUFDekIsT0FBTyxDQUFFQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsT0FBTyxJQUFLLEVBQUUsRUFBRUMsV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlWLEtBQUssRUFBSztFQUNuQztBQUNGO0FBQ0E7QUFDQTtFQUNFLE9BQU9BLEtBQUssQ0FBQ1csT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVNDLGdCQUFnQkEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ3BDO0VBQ0E7RUFDQSxPQUFPQSxVQUFVLENBQUNGLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUM7QUFDNUQ7QUFFQSxJQUFNRyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBQyxLQUFBLEVBQW9DO0VBQUEsSUFBOUJqSCxLQUFLLEdBQUFpSCxLQUFBLENBQUxqSCxLQUFLO0lBQUVrSCxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztJQUFFQyxPQUFPLEdBQUFGLEtBQUEsQ0FBUEUsT0FBTztFQUNyRCxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUlDLFlBQVksRUFBSztJQUN2QztJQUNBO0lBQ0EsSUFBTUMsS0FBSyxHQUFHLGdDQUFnQzs7SUFFOUM7SUFDQSxPQUFPRCxZQUFZLENBQUNSLE9BQU8sQ0FBQ1MsS0FBSyxFQUFFLEVBQUUsQ0FBQztFQUN4QyxDQUFDO0VBQ0QsSUFBTUMsT0FBTyxHQUFHWCxpQkFBaUIsQ0FBQ00sT0FBTyxDQUFDO0VBRTFDLElBQU1NLGNBQWMsdUNBQUFDLE1BQUEsQ0FBb0NGLE9BQU8sU0FBQUUsTUFBQSxDQUFLLElBQUFDLHVCQUFRLEVBQUNILE9BQU8sRUFBRUosT0FBTyxDQUFDLFlBQVM7O0VBRXZHO0VBQ0EsSUFBSVEsZUFBZSxHQUFHLElBQUFDLHlCQUFVLEVBQUNKLGNBQWMsRUFBRTtJQUMvQ0ssMkJBQTJCLEVBQUU7RUFDL0IsQ0FBQyxDQUFDOztFQUVGO0VBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsSUFBQUMsbUJBQU8sRUFBQ1AsY0FBYyxFQUFFRyxlQUFlLENBQUM7RUFFckVBLGVBQWUsR0FBR1AsY0FBYyxDQUFDTyxlQUFlLENBQUM7O0VBRWpEO0VBQ0EsSUFBTUssZUFBZSxHQUFHTCxlQUFlLEdBQUcsSUFBQU0seUJBQVUsRUFBQ04sZUFBZSxDQUFDLEdBQUcsRUFBRTs7RUFFMUU7RUFDQSxJQUFNTyxTQUFTLEdBQUdsSSxLQUFLLENBQUM2RyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztFQUMxQyxJQUFNc0IsWUFBWSxHQUFHSCxlQUFlLENBQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzs7RUFFdkQ7RUFDQTtFQUNBLElBQUksQ0FBQyxJQUFBa0IsbUJBQU8sRUFBQ0csU0FBUyxFQUFFQyxZQUFZLENBQUMsRUFBRTtJQUNyQyxJQUFNQyxjQUFjLEdBQUd0QixnQkFBZ0IsQ0FBQ2tCLGVBQWUsQ0FBQzs7SUFFeEQ7SUFDQTtJQUNBO0lBQ0FLLE9BQU8sQ0FBQzlJLEdBQUcsQ0FBQyx1RkFBdUYsRUFBRTtNQUNuRytJLFlBQVksRUFBRXRJLEtBQUs7TUFDbkJ1SSxRQUFRLEVBQUVQLGVBQWU7TUFDekJJLGNBQWMsRUFBZEEsY0FBYztNQUNkSSxNQUFNLEVBQUViLGVBQWU7TUFDdkJHLG9CQUFvQixFQUFwQkE7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLE9BQU87SUFBRUgsZUFBZSxFQUFmQSxlQUFlO0lBQUVHLG9CQUFvQixFQUFwQkE7RUFBcUIsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBTVcsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsTUFBTSxFQUFLO0VBQ3ZDLElBQU1DLHFCQUFxQixHQUFHRCxNQUFNLENBQUNFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO0VBQzlELElBQU1DLFNBQVMsR0FBRyxJQUFBWix5QkFBVSxFQUFDVSxxQkFBcUIsQ0FBQztFQUNuRCxJQUFNM0ksS0FBSyxHQUFHaUcsVUFBVSxDQUFDNEMsU0FBUyxDQUFDOztFQUVuQztFQUNBLE9BQU8vQixnQkFBZ0IsQ0FBQzlHLEtBQUssQ0FBQztBQUNoQyxDQUFDO0FBRU0sSUFBTThJLGFBQWEsR0FBQTFJLE9BQUEsQ0FBQTBJLGFBQUEsR0FBRztFQUMzQkMsV0FBVyxXQUFYQSxXQUFXQSxDQUFDdEMsRUFBRSxFQUFFO0lBQ2QsSUFBTUMsT0FBTyxHQUFHRixVQUFVLENBQUNDLEVBQUUsQ0FBQztJQUM5QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNJLElBQU11QyxZQUFZLEdBQUdDLHFCQUFVLENBQUN2QyxPQUFPLENBQUMsSUFBSUQsRUFBRSxDQUFDeUMsVUFBVSxDQUFDakssTUFBTSxLQUFLLENBQUMsSUFBSXVILFVBQVUsQ0FBQ0MsRUFBRSxDQUFDMEMsVUFBVSxDQUFDLEtBQUssTUFBTTtJQUM5RzVKLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRW1ILE9BQU8sQ0FBQzs7SUFFcEM7QUFDSjtBQUNBO0lBQ0ksSUFBSUEsT0FBTyxLQUFLLE1BQU0sSUFBS0QsRUFBRSxDQUFDMkMsT0FBTyxJQUFJM0MsRUFBRSxDQUFDMkMsT0FBTyxDQUFDekUsSUFBSSxLQUFLLFFBQVMsSUFBSXFFLFlBQVksRUFBRTtNQUN0RixJQUFNTixNQUFNLEdBQUdNLFlBQVksR0FBR3ZDLEVBQUUsQ0FBQzRDLFNBQVMsR0FBRzVDLEVBQUUsQ0FBQzZDLFNBQVM7TUFFekQsSUFBSXZGLFVBQVUsQ0FBQ0UsYUFBYSxDQUFDRSxVQUFVLEVBQUU7UUFDdkMsSUFBQW9GLFdBQUEsR0FBZ0MsSUFBQUMseUJBQVUsRUFBQ2Ysb0JBQW9CLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1VBQWhFZSxTQUFTLEdBQUFGLFdBQUEsQ0FBVEUsU0FBUztVQUFFQyxRQUFRLEdBQUFILFdBQUEsQ0FBUkcsUUFBUTtRQUUzQixPQUFPO1VBQ0xoRixNQUFNLEVBQUUsUUFBUTtVQUNoQkMsSUFBSSxFQUFFLE1BQU07VUFDWnFCLE1BQU0sRUFBRSxJQUFJO1VBQ1oyRCxLQUFLLEVBQUUsRUFBRTtVQUNUbkksSUFBSSxFQUFFO1lBQ0p4QixLQUFLLEVBQUV5SixTQUFTO1lBQ2hCdEMsT0FBTyxFQUFFdUM7VUFDWDtRQUNGLENBQUM7TUFDSDtNQUVBLE9BQU87UUFDTGhGLE1BQU0sRUFBRSxRQUFRO1FBQ2hCc0IsTUFBTSxFQUFFLElBQUk7UUFDWnJCLElBQUksRUFBRSxRQUFRO1FBQ2RuRCxJQUFJLEVBQUU7VUFDSjZELElBQUksRUFBRXFEO1FBQ1I7TUFDRixDQUFDO0lBQ0g7SUFFQSxJQUFJakMsRUFBRSxDQUFDbUQsUUFBUSxLQUFLbkssU0FBUyxFQUFFO01BQzdCO0lBQ0Y7SUFFQSxJQUFJaUgsT0FBTyxLQUFLLE1BQU0sRUFBRTtNQUN0QjtJQUNGO0lBRUEsSUFBTW1ELFFBQVEsR0FBR3BELEVBQUUsQ0FBQ3FELFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSXJELEVBQUUsQ0FBQ3FELFlBQVksQ0FBQyxPQUFPLENBQUM7SUFFMUUsSUFBSUQsUUFBUSxFQUFFO01BQ1osSUFBTTdKLEtBQUssR0FBR2lHLFVBQVUsQ0FBQ1EsRUFBRSxDQUFDNEMsU0FBUyxDQUFDO01BQ3RDLElBQUFVLFlBQUEsR0FBZ0MsSUFBQVAseUJBQVUsRUFBQ3hKLEtBQUssQ0FBQztRQUF6Q3lKLFVBQVMsR0FBQU0sWUFBQSxDQUFUTixTQUFTO1FBQUVDLFNBQVEsR0FBQUssWUFBQSxDQUFSTCxRQUFRO01BQzNCbkssR0FBRyxDQUFDLDZCQUE2QixFQUFFa0ssVUFBUyxFQUFFQyxTQUFRLENBQUM7TUFDdkQsT0FBTztRQUNMaEYsTUFBTSxFQUFFLFFBQVE7UUFDaEJDLElBQUksRUFBRSxNQUFNO1FBQ1pxQixNQUFNLEVBQUUsSUFBSTtRQUNaMkQsS0FBSyxFQUFFLEVBQUU7UUFDVG5JLElBQUksRUFBRTtVQUNKeEIsS0FBSyxFQUFFeUosVUFBUztVQUNoQnRDLE9BQU8sRUFBRXVDO1FBQ1g7TUFDRixDQUFDO0lBQ0g7RUFDRixDQUFDO0VBQ0RNLFNBQVMsV0FBVEEsU0FBU0EsQ0FBQ3RGLE1BQU0sRUFBRTtJQUNoQixJQUFJQSxNQUFNLENBQUNDLElBQUksS0FBSyxNQUFNLEVBQUU7TUFDMUIsSUFBTTNFLEtBQUssR0FBRzBFLE1BQU0sQ0FBQ2xELElBQUksQ0FBQ1ksR0FBRyxDQUFDLE9BQU8sQ0FBQztNQUN0QyxJQUFNK0UsT0FBTyxHQUFHekMsTUFBTSxDQUFDbEQsSUFBSSxDQUFDWSxHQUFHLENBQUMsU0FBUyxDQUFDO01BQzFDLElBQU04RSxPQUFPLEdBQUdqQixVQUFVLENBQUNXLGlCQUFpQixDQUFDNUcsS0FBSyxDQUFDLENBQUM7TUFFcERULEdBQUcsQ0FBQyxxQkFBcUIsRUFBRVMsS0FBSyxDQUFDO01BRWpDLElBQUkrRCxVQUFVLENBQUNFLGFBQWEsQ0FBQ0MsU0FBUyxFQUFFO1FBQ3RDLElBQUErRixxQkFBQSxHQUFrRGpELG9CQUFvQixDQUFDO1lBQUVoSCxLQUFLLEVBQUxBLEtBQUs7WUFBRWtILE9BQU8sRUFBUEEsT0FBTztZQUFFQyxPQUFPLEVBQVBBO1VBQVEsQ0FBQyxDQUFDO1VBQTNGUSxlQUFlLEdBQUFzQyxxQkFBQSxDQUFmdEMsZUFBZTtVQUFFRyxvQkFBb0IsR0FBQW1DLHFCQUFBLENBQXBCbkMsb0JBQW9CO1FBRTdDLElBQUlBLG9CQUFvQixFQUFFO1VBQ3hCO1VBQ0E7VUFDQSxvQkFDRWxLLE1BQUEsWUFBQXlFLGFBQUE7WUFBTSxjQUFXLEVBQUU7WUFBQyxZQUFVNkU7VUFBUSxHQUNuQyxJQUFBUSx1QkFBUSxFQUFDUixPQUFPLEVBQUVDLE9BQU8sQ0FDdEIsQ0FBQztRQUVYO1FBRUEsb0JBQU92SixNQUFBLFlBQUF5RSxhQUFBO1VBQU0sYUFBVSxRQUFRO1VBQUNtRCx1QkFBdUIsRUFBRTtZQUFFQyxNQUFNLEVBQUVrQztVQUFnQjtRQUFFLENBQUUsQ0FBQztNQUMxRjtNQUVBLG9CQUNFL0osTUFBQSxZQUFBeUUsYUFBQTtRQUFNLGNBQVcsRUFBRTtRQUFDLFlBQVU2RTtNQUFRLEdBQ25DLElBQUFRLHVCQUFRLEVBQUNSLE9BQU8sRUFBRUMsT0FBTyxDQUN0QixDQUFDO0lBRVg7O0lBRUE7QUFDSjtBQUNBO0lBQ0ksSUFBSXpDLE1BQU0sQ0FBQ0MsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM1QixJQUFNVSxJQUFJLEdBQUdYLE1BQU0sQ0FBQ2xELElBQUksQ0FBQ1ksR0FBRyxDQUFDLE1BQU0sQ0FBQztNQUVwQyxvQkFBT3hFLE1BQUEsWUFBQXlFLGFBQUE7UUFBTSxhQUFVLFFBQVE7UUFBQ21ELHVCQUF1QixFQUFFO1VBQUVDLE1BQU0sRUFBRUo7UUFBSztNQUFFLENBQUUsQ0FBQztJQUMvRTtFQUNGO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _ = _interopRequireDefault(require("../"));
5
+ describe('media plugin', function () {
6
+ var imagePlugin = (0, _["default"])('video');
7
+ describe('normalizeNode', function () {
8
+ it('should exit the function if the node is not of type document', function () {
9
+ var returnValue = imagePlugin.normalizeNode({
10
+ object: 'image'
11
+ });
12
+ expect(returnValue).toEqual(undefined);
13
+ });
14
+ it('should exit there are no changes needed', function () {
15
+ var nodes = [{
16
+ object: 'text',
17
+ text: 'Before Media'
18
+ }, {
19
+ type: 'video'
20
+ }, {
21
+ object: 'text',
22
+ text: 'After Media'
23
+ }];
24
+ var returnValue = imagePlugin.normalizeNode({
25
+ object: 'document',
26
+ findDescendant: jest.fn(function (callback) {
27
+ nodes.forEach(function (n) {
28
+ return callback(n);
29
+ });
30
+ })
31
+ });
32
+ expect(returnValue).toEqual(undefined);
33
+ });
34
+ it('should return a function if there is a node with an empty text before a media element', function () {
35
+ var nodes = [{
36
+ object: 'text',
37
+ text: '',
38
+ key: '1'
39
+ }, {
40
+ type: 'video',
41
+ key: '2'
42
+ }, {
43
+ object: 'text',
44
+ text: 'After Media',
45
+ key: '3'
46
+ }];
47
+ var findDescendant = jest.fn(function (callback) {
48
+ nodes.forEach(function (n) {
49
+ return callback(n);
50
+ });
51
+ });
52
+ var change = {
53
+ withoutNormalization: jest.fn(function (callback) {
54
+ callback();
55
+ }),
56
+ insertTextByKey: jest.fn()
57
+ };
58
+ var returnValue = imagePlugin.normalizeNode({
59
+ object: 'document',
60
+ findDescendant: findDescendant
61
+ });
62
+ expect(returnValue).toEqual(expect.any(Function));
63
+ returnValue(change);
64
+ expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));
65
+ expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');
66
+ });
67
+ });
68
+ });
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJkZXNjcmliZSIsImltYWdlUGx1Z2luIiwiTWVkaWFQbHVnaW4iLCJpdCIsInJldHVyblZhbHVlIiwibm9ybWFsaXplTm9kZSIsIm9iamVjdCIsImV4cGVjdCIsInRvRXF1YWwiLCJ1bmRlZmluZWQiLCJub2RlcyIsInRleHQiLCJ0eXBlIiwiZmluZERlc2NlbmRhbnQiLCJqZXN0IiwiZm4iLCJjYWxsYmFjayIsImZvckVhY2giLCJuIiwia2V5IiwiY2hhbmdlIiwid2l0aG91dE5vcm1hbGl6YXRpb24iLCJpbnNlcnRUZXh0QnlLZXkiLCJhbnkiLCJGdW5jdGlvbiIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvbWVkaWEvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lZGlhUGx1Z2luIGZyb20gJy4uLyc7XG5cbmRlc2NyaWJlKCdtZWRpYSBwbHVnaW4nLCAoKSA9PiB7XG4gIGNvbnN0IGltYWdlUGx1Z2luID0gTWVkaWFQbHVnaW4oJ3ZpZGVvJyk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZU5vZGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleGl0IHRoZSBmdW5jdGlvbiBpZiB0aGUgbm9kZSBpcyBub3Qgb2YgdHlwZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7IG9iamVjdDogJ2ltYWdlJyB9KTtcblxuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4aXQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgbmVlZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQmVmb3JlIE1lZGlhJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQWZ0ZXIgTWVkaWEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7XG4gICAgICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICAgICAgZmluZERlc2NlbmRhbnQ6IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobikgPT4gY2FsbGJhY2sobikpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIGEgbm9kZSB3aXRoIGFuIGVtcHR5IHRleHQgYmVmb3JlIGEgbWVkaWEgZWxlbWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAga2V5OiAnMScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgIGtleTogJzInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJ0FmdGVyIE1lZGlhJyxcbiAgICAgICAgICBrZXk6ICczJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG4pID0+IGNhbGxiYWNrKG4pKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hhbmdlID0ge1xuICAgICAgICB3aXRob3V0Tm9ybWFsaXphdGlvbjogamVzdC5mbigoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgaW5zZXJ0VGV4dEJ5S2V5OiBqZXN0LmZuKCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBpbWFnZVBsdWdpbi5ub3JtYWxpemVOb2RlKHtcbiAgICAgICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgICAgICBmaW5kRGVzY2VuZGFudCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmV0dXJuVmFsdWUpLnRvRXF1YWwoZXhwZWN0LmFueShGdW5jdGlvbikpO1xuXG4gICAgICByZXR1cm5WYWx1ZShjaGFuZ2UpO1xuXG4gICAgICBleHBlY3QoY2hhbmdlLndpdGhvdXROb3JtYWxpemF0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gICAgICBleHBlY3QoY2hhbmdlLmluc2VydFRleHRCeUtleSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCAnICcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxDQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFNO0VBQzdCLElBQU1DLFdBQVcsR0FBRyxJQUFBQyxZQUFXLEVBQUMsT0FBTyxDQUFDO0VBRXhDRixRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07SUFDOUJHLEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxZQUFNO01BQ3ZFLElBQU1DLFdBQVcsR0FBR0gsV0FBVyxDQUFDSSxhQUFhLENBQUM7UUFBRUMsTUFBTSxFQUFFO01B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
@@ -327,4 +327,4 @@ var serialization = exports.serialization = {
327
327
  }, props));
328
328
  }
329
329
  };
330
- //# sourceMappingURL=index.js.map
330
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jbGllbnQiLCJfc2xhdGUiLCJfVGhlYXRlcnMiLCJfVm9sdW1lVXAiLCJfZGVidWciLCJfbWVkaWFEaWFsb2ciLCJfbWVkaWFUb29sYmFyIiwiX21lZGlhV3JhcHBlciIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImxvZyIsImRlYnVnIiwicmVtb3ZlRGlhbG9ncyIsInByZXZEaWFsb2dzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicyIsInJlbW92ZSIsImluc2VydERpYWxvZyIsImV4cG9ydHMiLCJwcm9wcyIsIm5ld0VsIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJjYWxsYmFjayIsIm9wdHMiLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImluaXRpYWxCb2R5T3ZlcmZsb3ciLCJib2R5Iiwic3R5bGUiLCJvdmVyZmxvdyIsImNsYXNzTmFtZSIsImhhbmRsZUNsb3NlIiwidmFsIiwiZGF0YSIsImVsIiwiX2V4dGVuZHMyIiwidXBsb2FkU291bmRTdXBwb3J0IiwiZGlzYWJsZVBvcnRhbCIsIm9wZW4iLCJkaWFsb2dSb290IiwiY3JlYXRlUm9vdCIsInJlbmRlciIsImFwcGVuZENoaWxkIiwidHlwZXMiLCJNZWRpYVBsdWdpbiIsInRvb2xiYXIiLCJpY29uIiwiYXJpYUxhYmVsIiwib25DbGljayIsInZhbHVlIiwib25DaGFuZ2UiLCJpbmxpbmUiLCJJbmxpbmUiLCJjcmVhdGUiLCJpc1ZvaWQiLCJlZGl0aW5nIiwiZW5kcyIsInVuZGVmaW5lZCIsImhlaWdodCIsInRpdGxlIiwic3RhcnRzIiwic3JjIiwidXJsIiwid2lkdGgiLCJjaGFuZ2UiLCJpbnNlcnRJbmxpbmUiLCJub2RlSXNUaGVyZSIsImZpbmREZXNjZW5kYW50IiwiZCIsImtleSIsImMiLCJyZW1vdmVOb2RlQnlLZXkiLCJmb2N1cyIsInNldE5vZGVCeUtleSIsInN1cHBvcnRzIiwibm9kZSIsIm9iamVjdCIsIm5hbWUiLCJkZWxldGVOb2RlIiwicHJldmVudERlZmF1bHQiLCJyZW5kZXJOb2RlIiwianNvbkRhdGEiLCJ0b0pTT04iLCJ0YWciLCJoYW5kbGVFZGl0IiwiY3JlYXRlQ2hhbmdlIiwiZWRpdCIsImdldCIsImhhbmRsZURlbGV0ZSIsImNvbmNhdCIsImVkaXRvciIsImNvbnRyb2xzIiwiY29udHJvbHNMaXN0IiwiaGlkZUVkaXQiLCJvblJlbW92ZSIsImZyYW1lQm9yZGVyIiwiYWxsb3ciLCJhbGxvd0Z1bGxTY3JlZW4iLCJvbkVkaXQiLCJub3JtYWxpemVOb2RlIiwidGV4dE5vZGVNYXAiLCJ1cGRhdGVOb2Rlc0FycmF5IiwiaW5kZXgiLCJpc01lZGlhIiwiaW5kZXhPZiIsInRleHQiLCJ3aXRob3V0Tm9ybWFsaXphdGlvbiIsIm4iLCJpbnNlcnRUZXh0QnlLZXkiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJkYXRhc2V0IiwidHlwZUluZGV4IiwiRWxlbWVudCIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsIl9lbCRmaXJzdENoaWxkIiwiZmlyc3RDaGlsZCIsImdldEF0dHJpYnV0ZSIsIl9yZWYiLCJwYXJzZUludCIsIm91dCIsInNlcmlhbGl6ZSIsImRpdlByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvbWVkaWEvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgeyBJbmxpbmUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgVGhlYXRlcnNJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvVGhlYXRlcnMnO1xuaW1wb3J0IFZvbHVtZVVwSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1ZvbHVtZVVwJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCBNZWRpYURpYWxvZyBmcm9tICcuL21lZGlhLWRpYWxvZyc7XG5pbXBvcnQgTWVkaWFUb29sYmFyIGZyb20gJy4vbWVkaWEtdG9vbGJhcic7XG5pbXBvcnQgTWVkaWFXcmFwcGVyIGZyb20gJy4vbWVkaWEtd3JhcHBlcic7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6aW1hZ2UnKTtcblxuY29uc3QgcmVtb3ZlRGlhbG9ncyA9ICgpID0+IHtcbiAgY29uc3QgcHJldkRpYWxvZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zZXJ0LW1lZGlhLWRpYWxvZycpO1xuXG4gIHByZXZEaWFsb2dzLmZvckVhY2goKHMpID0+IHMucmVtb3ZlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydERpYWxvZyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBuZXdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb25zdCB7IHR5cGUsIGNhbGxiYWNrLCBvcHRzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3QgaW5pdGlhbEJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG5cbiAgcmVtb3ZlRGlhbG9ncygpO1xuXG4gIG5ld0VsLmNsYXNzTmFtZSA9ICdpbnNlcnQtbWVkaWEtZGlhbG9nJztcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHZhbCwgZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbCwgZGF0YSk7XG4gICAgbmV3RWwucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IGluaXRpYWxCb2R5T3ZlcmZsb3c7XG4gIH07XG5cbiAgY29uc3QgZWwgPSAoXG4gICAgPE1lZGlhRGlhbG9nXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17b3B0cy51cGxvYWRTb3VuZFN1cHBvcnR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGlzYWJsZVBvcnRhbD17dHJ1ZX1cbiAgICAgIG9wZW49e3RydWV9XG4gICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgLz5cbiAgKTtcblxuICBjb25zdCBkaWFsb2dSb290ID0gY3JlYXRlUm9vdChuZXdFbCk7XG4gIGRpYWxvZ1Jvb3QucmVuZGVyKGVsKTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld0VsKTtcbn07XG5cbmNvbnN0IHR5cGVzID0gWydhdWRpbycsICd2aWRlbyddO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZWRpYVBsdWdpbih0eXBlLCBvcHRzKSB7XG4gIGNvbnN0IHRvb2xiYXIgPSB7XG4gICAgaWNvbjogdHlwZSA9PT0gJ2F1ZGlvJyA/IDxWb2x1bWVVcEljb24gLz4gOiA8VGhlYXRlcnNJY29uIC8+LFxuICAgIGFyaWFMYWJlbDogdHlwZSA9PT0gJ2F1ZGlvJyA/ICdJbnNlcnQgYXVkaW8nIDogJ0luc2VydCB2aWRlbycsXG4gICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgbG9nKCdbdG9vbGJhcl0gb25DbGljaycpO1xuICAgICAgY29uc3QgaW5saW5lID0gSW5saW5lLmNyZWF0ZSh7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVuZHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHN0YXJ0czogdW5kZWZpbmVkLFxuICAgICAgICAgIHNyYzogdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCkuaW5zZXJ0SW5saW5lKGlubGluZSk7XG4gICAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICAgICAgaW5zZXJ0RGlhbG9nKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgb3B0cyxcbiAgICAgICAgY2FsbGJhY2s6ICh2YWwsIGRhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlSXNUaGVyZSA9IGNoYW5nZS52YWx1ZS5kb2N1bWVudC5maW5kRGVzY2VuZGFudCgoZCkgPT4gZC5rZXkgPT09IGlubGluZS5rZXkpO1xuXG4gICAgICAgICAgaWYgKG5vZGVJc1RoZXJlKSB7XG4gICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICBjb25zdCBjID0gY2hhbmdlLnJlbW92ZU5vZGVCeUtleShpbmxpbmUua2V5KTtcbiAgICAgICAgICAgICAgb25DaGFuZ2UoYywgKCkgPT4gb3B0cy5mb2N1cygpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBjaGFuZ2Uuc2V0Tm9kZUJ5S2V5KGlubGluZS5rZXksIHsgZGF0YSB9KTtcbiAgICAgICAgICAgICAgb25DaGFuZ2UoYywgKCkgPT4gb3B0cy5mb2N1cygnYmVnaW5uaW5nJywgbm9kZUlzVGhlcmUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0cy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc3VwcG9ydHM6IChub2RlKSA9PiBub2RlLm9iamVjdCA9PT0gJ2lubGluZScgJiYgbm9kZS50eXBlID09PSB0eXBlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogdHlwZSxcbiAgICB0b29sYmFyLFxuICAgIGRlbGV0ZU5vZGU6IChlLCBub2RlLCB2YWx1ZSwgb25DaGFuZ2UpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpLnJlbW92ZU5vZGVCeUtleShub2RlLmtleSk7XG5cbiAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgfSxcbiAgICByZW5kZXJOb2RlKHByb3BzKSB7XG4gICAgICBpZiAocHJvcHMubm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZSwga2V5IH0gPSBwcm9wcztcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBub2RlO1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IGRhdGEudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IHsgc3JjLCBoZWlnaHQsIHdpZHRoLCBlZGl0aW5nLCB0YWcsIC4uLnJlc3QgfSA9IGpzb25EYXRhO1xuICAgICAgICBjb25zdCBoYW5kbGVFZGl0ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IG9wdHMuY3JlYXRlQ2hhbmdlKCk7XG4gICAgICAgICAgY29uc3QgYyA9IGNoYW5nZS5zZXROb2RlQnlLZXkoa2V5LCB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIC4uLmpzb25EYXRhLFxuICAgICAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG9wdHMub25DaGFuZ2UoYywgKCkgPT4ge1xuICAgICAgICAgICAgaW5zZXJ0RGlhbG9nKHtcbiAgICAgICAgICAgICAgLi4uanNvbkRhdGEsXG4gICAgICAgICAgICAgIGVkaXQ6IHRydWUsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiAodmFsLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBrZXkgfSA9IG5vZGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSXNUaGVyZSA9IGNoYW5nZS52YWx1ZS5kb2N1bWVudC5maW5kRGVzY2VuZGFudChcbiAgICAgICAgICAgICAgICAgIChkKSA9PiBkLnR5cGUgPT09IHR5cGUgJiYgZC5kYXRhLmdldCgnZWRpdGluZycpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZUlzVGhlcmUgJiYgdmFsKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2hhbmdlLnNldE5vZGVCeUtleShrZXksIHsgZGF0YSwgZWRpdGluZzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICBvcHRzLm9uQ2hhbmdlKGMsICgpID0+IG9wdHMuZm9jdXMoJ2JlZ2lubmluZycsIG5vZGVJc1RoZXJlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9wdHMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IG9wdHMuY3JlYXRlQ2hhbmdlKCk7XG4gICAgICAgICAgY29uc3QgYyA9IGNoYW5nZS5yZW1vdmVOb2RlQnlLZXkobm9kZS5rZXkpO1xuXG4gICAgICAgICAgb3B0cy5vbkNoYW5nZShjKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7fTtcblxuICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICBzdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWlnaHQpIHtcbiAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVkaWFXcmFwcGVyIGVkaXRvciBkYXRhLXR5cGU9e3R5cGV9IHdpZHRoPXtzdHlsZS53aWR0aH0gey4uLnJlc3R9PlxuICAgICAgICAgICAgICA8YXVkaW8gY29udHJvbHM9XCJjb250cm9sc1wiIGNvbnRyb2xzTGlzdD1cIm5vZG93bmxvYWRcIj5cbiAgICAgICAgICAgICAgICA8c291cmNlIHR5cGU9XCJhdWRpby9tcDNcIiBzcmM9e3NyY30gLz5cbiAgICAgICAgICAgICAgPC9hdWRpbz5cbiAgICAgICAgICAgICAgPE1lZGlhVG9vbGJhciBoaWRlRWRpdCBvblJlbW92ZT17aGFuZGxlRGVsZXRlfSAvPlxuICAgICAgICAgICAgPC9NZWRpYVdyYXBwZXI+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPE1lZGlhV3JhcHBlciBlZGl0b3IgZGF0YS10eXBlPXt0eXBlfSB3aWR0aD17c3R5bGUud2lkdGh9IHsuLi5yZXN0fT5cbiAgICAgICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgICAgICAgIHNyYz17c3JjfVxuICAgICAgICAgICAgICBkYXRhLWVkaXRpbmc9e2VkaXRpbmcgPyAxIDogMH1cbiAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgIHsuLi5zdHlsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8TWVkaWFUb29sYmFyIG9uRWRpdD17aGFuZGxlRWRpdH0gb25SZW1vdmU9e2hhbmRsZURlbGV0ZX0gLz5cbiAgICAgICAgICA8L01lZGlhV3JhcHBlcj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5vcm1hbGl6ZU5vZGU6IChub2RlKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0Tm9kZU1hcCA9IHt9O1xuICAgICAgY29uc3QgdXBkYXRlTm9kZXNBcnJheSA9IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgaWYgKG5vZGUub2JqZWN0ICE9PSAnZG9jdW1lbnQnKSByZXR1cm47XG5cbiAgICAgIG5vZGUuZmluZERlc2NlbmRhbnQoKGQpID0+IHtcbiAgICAgICAgaWYgKGQub2JqZWN0ID09PSAndGV4dCcpIHtcbiAgICAgICAgICB0ZXh0Tm9kZU1hcFtpbmRleF0gPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNNZWRpYSA9IHR5cGVzLmluZGV4T2YoZC50eXBlKSA+PSAwO1xuXG4gICAgICAgIGlmIChpc01lZGlhKSB7XG4gICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB0ZXh0Tm9kZU1hcFtpbmRleCAtIDFdICYmIHRleHROb2RlTWFwW2luZGV4IC0gMV0udGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHVwZGF0ZU5vZGVzQXJyYXkucHVzaCh0ZXh0Tm9kZU1hcFtpbmRleCAtIDFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCsrO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdXBkYXRlTm9kZXNBcnJheS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgcmV0dXJuIChjaGFuZ2UpID0+IHtcbiAgICAgICAgY2hhbmdlLndpdGhvdXROb3JtYWxpemF0aW9uKCgpID0+IHtcbiAgICAgICAgICB1cGRhdGVOb2Rlc0FycmF5LmZvckVhY2goKG4pID0+IGNoYW5nZS5pbnNlcnRUZXh0QnlLZXkobi5rZXksIDAsICcgJykpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsIC8qLCBuZXh0Ki8pIHtcbiAgICBsZXQgdHlwZSA9IGVsLmRhdGFzZXQgJiYgZWwuZGF0YXNldC50eXBlO1xuICAgIGxldCB0YWcgPSAnaWZyYW1lJztcbiAgICBsZXQgc3JjO1xuICAgIGNvbnN0IHR5cGVJbmRleCA9IHR5cGVzLmluZGV4T2YodHlwZSk7XG5cbiAgICBpZiAodHlwZUluZGV4IDwgMCkge1xuICAgICAgaWYgKGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhdWRpbycpIHtcbiAgICAgICAgdHlwZSA9ICdhdWRpbyc7XG4gICAgICAgIHRhZyA9ICdhdWRpbyc7XG4gICAgICAgIHNyYyA9IGVsLmZpcnN0Q2hpbGQ/LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbmRzLCBzdGFydHMsIHRpdGxlLCBlZGl0aW5nLCB1cmwgfSA9IGVsLmRhdGFzZXQgfHwge307XG5cbiAgICBsb2coJ2Rlc2VyaWFsaXplOiAnLCBuYW1lKTtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KGVsLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApIHx8IG51bGw7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApIHx8IG51bGw7XG5cbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFnLFxuICAgICAgICBzcmM6IHNyYyB8fCBlbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgICBlZGl0aW5nLFxuICAgICAgICBlbmRzLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHN0YXJ0cyxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgIH07XG4gICAgbG9nKCdyZXR1cm4gb2JqZWN0OiAnLCBvdXQpO1xuICAgIHJldHVybiBvdXQ7XG4gIH0sXG4gIHNlcmlhbGl6ZShvYmplY3QgLyosIGNoaWxkcmVuKi8pIHtcbiAgICBjb25zdCB0eXBlSW5kZXggPSB0eXBlcy5pbmRleE9mKG9iamVjdC50eXBlKTtcblxuICAgIGlmICh0eXBlSW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gdHlwZXNbdHlwZUluZGV4XTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gb2JqZWN0O1xuICAgIGNvbnN0IGVkaXRpbmcgPSBkYXRhLmdldCgnZWRpdGluZycpO1xuICAgIGNvbnN0IHRhZyA9IGRhdGEuZ2V0KCd0YWcnKTtcbiAgICBjb25zdCBlbmRzID0gZGF0YS5nZXQoJ2VuZHMnKTtcbiAgICBjb25zdCBzcmMgPSBkYXRhLmdldCgnc3JjJyk7XG4gICAgY29uc3Qgc3RhcnRzID0gZGF0YS5nZXQoJ3N0YXJ0cycpO1xuICAgIGNvbnN0IHRpdGxlID0gZGF0YS5nZXQoJ3RpdGxlJyk7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLmdldCgnd2lkdGgnKTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLmdldCgnaGVpZ2h0Jyk7XG4gICAgY29uc3QgdXJsID0gZGF0YS5nZXQoJ3VybCcpO1xuICAgIGNvbnN0IHN0eWxlID0ge307XG5cbiAgICBpZiAod2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQpIHtcbiAgICAgIHN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgfVxuXG4gICAgY29uc3QgZGl2UHJvcHMgPSB7XG4gICAgICAnZGF0YS1lZGl0aW5nJzogZWRpdGluZyxcbiAgICAgICdkYXRhLWVuZHMnOiBlbmRzLFxuICAgICAgJ2RhdGEtc3RhcnRzJzogc3RhcnRzLFxuICAgICAgJ2RhdGEtdGl0bGUnOiB0aXRsZSxcbiAgICAgICdkYXRhLXVybCc6IHVybCxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgLi4uc3R5bGUsXG4gICAgICBzcmMsXG4gICAgfTtcblxuICAgIGlmICh0YWcgPT09ICdhdWRpbycpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxhdWRpbyBjb250cm9scz1cImNvbnRyb2xzXCIgY29udHJvbHNMaXN0PVwibm9kb3dubG9hZFwiPlxuICAgICAgICAgIDxzb3VyY2UgdHlwZT1cImF1ZGlvL21wM1wiIHNyYz17c3JjfSAvPlxuICAgICAgICA8L2F1ZGlvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGlmcmFtZVxuICAgICAgICBkYXRhLXR5cGU9e3R5cGV9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICB7Li4uZGl2UHJvcHN9XG4gICAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgIGFsbG93RnVsbFNjcmVlblxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMs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