@pie-lib/editable-html-tip-tap 1.0.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 (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
package/lib/index.js ADDED
@@ -0,0 +1,1213 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.CharacterPicker = CharacterPicker;
11
+ exports["default"] = exports.EditableHtml = void 0;
12
+
13
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
+
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
+
19
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
20
+
21
+ var _react = _interopRequireWildcard(require("react"));
22
+
23
+ var _reactDom = _interopRequireDefault(require("react-dom"));
24
+
25
+ var _client = require("react-dom/client");
26
+
27
+ var _prosemirrorState = require("prosemirror-state");
28
+
29
+ var _extensionTextStyle = require("@tiptap/extension-text-style");
30
+
31
+ var _react2 = require("@tiptap/react");
32
+
33
+ var _starterKit = _interopRequireDefault(require("@tiptap/starter-kit"));
34
+
35
+ var _extensionTable = require("@tiptap/extension-table");
36
+
37
+ var _extensionTableRow = require("@tiptap/extension-table-row");
38
+
39
+ var _extensionTableCell = require("@tiptap/extension-table-cell");
40
+
41
+ var _extensionTableHeader = require("@tiptap/extension-table-header");
42
+
43
+ var _extensionSuperscript = _interopRequireDefault(require("@tiptap/extension-superscript"));
44
+
45
+ var _extensionSubscript = _interopRequireDefault(require("@tiptap/extension-subscript"));
46
+
47
+ var _extensionTextAlign = _interopRequireDefault(require("@tiptap/extension-text-align"));
48
+
49
+ var _extensionImage = _interopRequireDefault(require("@tiptap/extension-image"));
50
+
51
+ var _styles = require("@material-ui/core/styles");
52
+
53
+ var _responseArea = require("./extensions/responseArea");
54
+
55
+ var _math = require("./extensions/math");
56
+
57
+ var _classnames = _interopRequireDefault(require("classnames"));
58
+
59
+ var _renderUi = require("@pie-lib/render-ui");
60
+
61
+ var _theme = require("./theme");
62
+
63
+ var _constants = require("./constants");
64
+
65
+ var _doneButton = require("./plugins/toolbar/done-button");
66
+
67
+ var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
68
+
69
+ var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
70
+
71
+ var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
72
+
73
+ var _Code = _interopRequireDefault(require("@material-ui/icons/Code"));
74
+
75
+ var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
76
+
77
+ var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
78
+
79
+ var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
80
+
81
+ var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
82
+
83
+ var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
84
+
85
+ var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
86
+
87
+ var _icons = require("./plugins/respArea/icons");
88
+
89
+ var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
90
+
91
+ var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
92
+
93
+ var _Theaters = _interopRequireDefault(require("@material-ui/icons/Theaters"));
94
+
95
+ var _VolumeUp = _interopRequireDefault(require("@material-ui/icons/VolumeUp"));
96
+
97
+ var _utils = require("./plugins/characters/utils");
98
+
99
+ var _propTypes = _interopRequireDefault(require("prop-types"));
100
+
101
+ var _mathToolbar = require("@pie-lib/math-toolbar");
102
+
103
+ var _get = _interopRequireDefault(require("lodash/get"));
104
+
105
+ var _customPopper = _interopRequireDefault(require("./plugins/characters/custom-popper"));
106
+
107
+ var _icons2 = _interopRequireDefault(require("./plugins/textAlign/icons"));
108
+
109
+ var _icons3 = _interopRequireDefault(require("./plugins/css/icons"));
110
+
111
+ var _image = require("./extensions/image");
112
+
113
+ var _media = require("./extensions/media");
114
+
115
+ var _css = require("./extensions/css");
116
+
117
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
118
+
119
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
120
+
121
+ 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; }
122
+
123
+ 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; }
124
+
125
+ var CharacterIcon = function CharacterIcon(_ref) {
126
+ var letter = _ref.letter;
127
+ return /*#__PURE__*/_react["default"].createElement("div", {
128
+ style: {
129
+ fontSize: '24px',
130
+ lineHeight: '24px'
131
+ }
132
+ }, letter);
133
+ };
134
+
135
+ CharacterIcon.propTypes = {
136
+ letter: _propTypes["default"].string
137
+ };
138
+
139
+ function CharacterPicker(_ref2) {
140
+ var _opts$characters;
141
+
142
+ var editor = _ref2.editor,
143
+ opts = _ref2.opts,
144
+ onClose = _ref2.onClose;
145
+
146
+ if (!(opts !== null && opts !== void 0 && (_opts$characters = opts.characters) !== null && _opts$characters !== void 0 && _opts$characters.length)) {
147
+ return null;
148
+ }
149
+
150
+ var containerRef = (0, _react.useRef)(null);
151
+
152
+ var _useState = (0, _react.useState)({
153
+ top: 0,
154
+ left: 0
155
+ }),
156
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
157
+ position = _useState2[0],
158
+ setPosition = _useState2[1];
159
+
160
+ var _useState3 = (0, _react.useState)(null),
161
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
162
+ popover = _useState4[0],
163
+ setPopover = _useState4[1];
164
+
165
+ var configToUse;
166
+
167
+ switch (true) {
168
+ case opts.language === 'spanish':
169
+ configToUse = _utils.spanishConfig;
170
+ break;
171
+
172
+ case opts.language === 'special':
173
+ configToUse = _utils.specialConfig;
174
+ break;
175
+
176
+ default:
177
+ configToUse = opts;
178
+ }
179
+
180
+ var layoutForCharacters = configToUse.characters.reduce(function (obj, arr) {
181
+ if (arr.length >= obj.columns) {
182
+ obj.columns = arr.length;
183
+ }
184
+
185
+ return obj;
186
+ }, {
187
+ rows: configToUse.characters.length,
188
+ columns: 0
189
+ });
190
+ (0, _react.useEffect)(function () {
191
+ return function () {
192
+ closePopOver();
193
+ };
194
+ }, []);
195
+ (0, _react.useEffect)(function () {
196
+ if (!editor) return; // Calculate position relative to selection
197
+
198
+ var bodyRect = document.body.getBoundingClientRect();
199
+ var from = editor.state.selection.from;
200
+ var start = editor.view.coordsAtPos(from);
201
+ setPosition({
202
+ top: start.top + Math.abs(bodyRect.top) + 40,
203
+ // shift above
204
+ left: start.left
205
+ });
206
+
207
+ var handleClickOutside = function handleClickOutside(e) {
208
+ if (containerRef.current && !containerRef.current.contains(e.target) && !editor.view.dom.contains(e.target)) {
209
+ onClose();
210
+ }
211
+ };
212
+
213
+ document.addEventListener('mousedown', handleClickOutside);
214
+ return function () {
215
+ return document.removeEventListener('mousedown', handleClickOutside);
216
+ };
217
+ }, [editor]);
218
+
219
+ var renderPopOver = function renderPopOver(event, el) {
220
+ return setPopover({
221
+ anchorEl: event.currentTarget,
222
+ el: el
223
+ });
224
+ };
225
+
226
+ var closePopOver = function closePopOver() {
227
+ return setPopover(null);
228
+ };
229
+
230
+ var handleChange = function handleChange(val) {
231
+ if (typeof val === 'string') {
232
+ editor.chain().focus().insertContent(val).run();
233
+ }
234
+ };
235
+
236
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement("div", {
237
+ ref: containerRef,
238
+ className: "insert-character-dialog",
239
+ style: {
240
+ position: 'absolute',
241
+ top: "".concat(position.top, "px"),
242
+ left: "".concat(position.left, "px"),
243
+ maxWidth: '500px'
244
+ }
245
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_mathToolbar.PureToolbar, {
246
+ keyPadCharacterRef: opts.keyPadCharacterRef,
247
+ setKeypadInteraction: opts.setKeypadInteraction,
248
+ autoFocus: true,
249
+ noDecimal: true,
250
+ hideInput: true,
251
+ noLatexHandling: true,
252
+ hideDoneButtonBackground: true,
253
+ layoutForKeyPad: layoutForCharacters,
254
+ additionalKeys: configToUse.characters.reduce(function (arr, n) {
255
+ arr = [].concat((0, _toConsumableArray2["default"])(arr), (0, _toConsumableArray2["default"])(n.map(function (k) {
256
+ return _objectSpread({
257
+ name: (0, _get["default"])(k, 'name') || k,
258
+ write: (0, _get["default"])(k, 'write') || k,
259
+ label: (0, _get["default"])(k, 'label') || k,
260
+ category: 'character',
261
+ extraClass: 'character',
262
+ extraProps: _objectSpread(_objectSpread({}, k.extraProps || {}), {}, {
263
+ style: _objectSpread(_objectSpread({}, (k.extraProps || {}).style), {}, {
264
+ border: '1px solid #000'
265
+ })
266
+ })
267
+ }, configToUse.hasPreview ? {
268
+ actions: {
269
+ onMouseEnter: function onMouseEnter(ev) {
270
+ return renderPopOver(ev, k);
271
+ },
272
+ onMouseLeave: closePopOver
273
+ }
274
+ } : {});
275
+ })));
276
+ return arr;
277
+ }, []),
278
+ keypadMode: "language",
279
+ onChange: handleChange,
280
+ onDone: onClose
281
+ }))), document.body), popover && /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_customPopper["default"], {
282
+ onClose: closePopOver,
283
+ anchorEl: popover.anchorEl
284
+ }, /*#__PURE__*/_react["default"].createElement("div", null, popover.el.label), /*#__PURE__*/_react["default"].createElement("div", {
285
+ style: {
286
+ fontSize: 20,
287
+ lineHeight: '20px'
288
+ }
289
+ }, popover.el.description), /*#__PURE__*/_react["default"].createElement("div", {
290
+ style: {
291
+ fontSize: 20,
292
+ lineHeight: '20px'
293
+ }
294
+ }, popover.el.unicode)), document.body));
295
+ }
296
+
297
+ var SuperscriptIcon = function SuperscriptIcon() {
298
+ return /*#__PURE__*/_react["default"].createElement("svg", {
299
+ xmlns: "http://www.w3.org/2000/svg",
300
+ height: "24px",
301
+ viewBox: "0 0 24 24",
302
+ width: "24px",
303
+ fill: "none"
304
+ }, /*#__PURE__*/_react["default"].createElement("path", {
305
+ d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
306
+ fill: "currentColor"
307
+ }));
308
+ };
309
+
310
+ var SubscriptIcon = function SubscriptIcon() {
311
+ return /*#__PURE__*/_react["default"].createElement("svg", {
312
+ xmlns: "http://www.w3.org/2000/svg",
313
+ height: "24px",
314
+ viewBox: "0 0 24 24",
315
+ width: "24px",
316
+ fill: "none"
317
+ }, /*#__PURE__*/_react["default"].createElement("path", {
318
+ d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
319
+ fill: "currentColor"
320
+ }));
321
+ };
322
+
323
+ var HeadingIcon = function HeadingIcon() {
324
+ return /*#__PURE__*/_react["default"].createElement("svg", {
325
+ width: "30",
326
+ height: "28",
327
+ viewBox: "0 0 30 28",
328
+ fill: "none",
329
+ xmlns: "http://www.w3.org/2000/svg",
330
+ style: {
331
+ width: '20px',
332
+ height: '18px'
333
+ }
334
+ }, /*#__PURE__*/_react["default"].createElement("path", {
335
+ d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
336
+ fill: "currentColor"
337
+ }));
338
+ };
339
+
340
+ var ExtendedTable = _extensionTable.Table.extend({
341
+ renderHTML: function renderHTML(props) {
342
+ var originalTable = this.parent(props);
343
+ originalTable[1].style = "".concat(originalTable[1].style, " width: 100%;\n color: var(--pie-text, black);\n table-layout: fixed;\n border-collapse: collapse;\n background-color: var(--pie-background, rgba(255, 255, 255))");
344
+ originalTable[1].border = '1';
345
+ return originalTable;
346
+ }
347
+ });
348
+
349
+ var styles = function styles(theme) {
350
+ return {
351
+ root: {
352
+ position: 'relative',
353
+ padding: '0px',
354
+ border: '1px solid #ccc',
355
+ borderRadius: '4px',
356
+ cursor: 'text',
357
+ '& [data-slate-editor="true"]': {
358
+ wordBreak: 'break-word',
359
+ overflow: 'visible',
360
+ maxHeight: '500px',
361
+ // needed in order to be able to put the focus before a void element when it is the first one in the editor
362
+ padding: '5px'
363
+ },
364
+ '&:first-child': {
365
+ marginTop: 0
366
+ },
367
+ '& ul, & ol': {
368
+ padding: '0 1rem',
369
+ margin: '1.25rem 1rem 1.25rem 0.4rem'
370
+ },
371
+ '& ul li p, & ol li p': {
372
+ marginTop: '0.25em',
373
+ marginBottom: '0.25em'
374
+ },
375
+ '& h1, & h2, & h3, & h4, & h5, & h6': {
376
+ lineHeight: 1.1,
377
+ marginTop: '2.5rem',
378
+ textWrap: 'pretty'
379
+ },
380
+ '& h1, & h2': {
381
+ marginTop: '3.5rem',
382
+ marginBottom: '1.5rem'
383
+ },
384
+ '& h1': {
385
+ fontSize: '1.4rem'
386
+ },
387
+ '& h2': {
388
+ fontSize: '1.2rem'
389
+ },
390
+ '& h3': {
391
+ fontSize: '1.1rem'
392
+ },
393
+ '& h4, & h5, & h6': {
394
+ fontSize: '1rem'
395
+ },
396
+ '& code': {
397
+ backgroundColor: 'var(--purple-light)',
398
+ borderRadius: '0.4rem',
399
+ color: 'var(--black)',
400
+ fontSize: '0.85rem',
401
+ padding: '0.25em 0.3em'
402
+ },
403
+ '& pre': {
404
+ background: 'var(--black)',
405
+ borderRadius: '0.5rem',
406
+ color: 'var(--white)',
407
+ fontFamily: "'JetBrainsMono', monospace",
408
+ margin: '1.5rem 0',
409
+ padding: '0.75rem 1rem',
410
+ '& code': {
411
+ background: 'none',
412
+ color: 'inherit',
413
+ fontSize: '0.8rem',
414
+ padding: 0
415
+ }
416
+ },
417
+ '& blockquote': {
418
+ borderLeft: '3px solid var(--gray-3)',
419
+ margin: '1.5rem 0',
420
+ paddingLeft: '1rem'
421
+ },
422
+ '& hr': {
423
+ border: 'none',
424
+ borderTop: '1px solid var(--gray-2)',
425
+ margin: '2rem 0'
426
+ }
427
+ },
428
+ children: {
429
+ padding: '10px 16px'
430
+ },
431
+ editorHolder: {
432
+ position: 'relative',
433
+ padding: '0px',
434
+ // overflowY: 'auto',
435
+ overflow: 'visible',
436
+ color: _renderUi.color.text(),
437
+ backgroundColor: _renderUi.color.background(),
438
+ '&::before': {
439
+ left: '0',
440
+ right: '0',
441
+ bottom: '0',
442
+ height: '1px',
443
+ content: '""',
444
+ position: 'absolute',
445
+ transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
446
+ pointerEvents: 'none',
447
+ backgroundColor: 'rgba(0, 0, 0, 0.42)'
448
+ },
449
+ '&::after': {
450
+ left: '0',
451
+ right: '0',
452
+ bottom: '0',
453
+ height: '1px',
454
+ content: '""',
455
+ position: 'absolute',
456
+ transform: 'scaleX(0)',
457
+ transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',
458
+ backgroundColor: 'rgba(0, 0, 0, 0.42)'
459
+ },
460
+ '&:focus': {
461
+ '&::after': {
462
+ transform: 'scaleX(1)',
463
+ backgroundColor: _theme.primary,
464
+ height: '2px'
465
+ }
466
+ },
467
+ '&:hover': {
468
+ '&::after': {
469
+ transform: 'scaleX(1)',
470
+ backgroundColor: theme.palette.common.black,
471
+ height: '2px'
472
+ }
473
+ }
474
+ },
475
+ disabledUnderline: {
476
+ '&::before': {
477
+ display: 'none'
478
+ },
479
+ '&::after': {
480
+ display: 'none'
481
+ }
482
+ },
483
+ disabledScrollbar: {
484
+ '&::-webkit-scrollbar': {
485
+ display: 'none'
486
+ },
487
+ scrollbarWidth: 'none',
488
+ '-ms-overflow-style': 'none'
489
+ },
490
+ readOnly: {
491
+ '&::before': {
492
+ background: 'transparent',
493
+ backgroundSize: '5px 1px',
494
+ backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',
495
+ backgroundRepeat: 'repeat-x',
496
+ backgroundPosition: 'left top'
497
+ },
498
+ '&::after': {
499
+ left: '0',
500
+ right: '0',
501
+ bottom: '0',
502
+ height: '1px',
503
+ content: '""',
504
+ position: 'absolute',
505
+ transform: 'scaleX(0)',
506
+ transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',
507
+ backgroundColor: 'rgba(0, 0, 0, 0)'
508
+ },
509
+ '&:hover': {
510
+ '&::after': {
511
+ transform: 'scaleX(0)',
512
+ backgroundColor: theme.palette.common.black,
513
+ height: '2px'
514
+ }
515
+ }
516
+ },
517
+ editorInFocus: {
518
+ '&::after': {
519
+ transform: 'scaleX(1)',
520
+ backgroundColor: _theme.primary,
521
+ height: '2px'
522
+ },
523
+ '&:hover': {
524
+ '&::after': {
525
+ backgroundColor: _theme.primary
526
+ }
527
+ }
528
+ },
529
+ error: {
530
+ border: "2px solid ".concat(theme.palette.error.main, " !important")
531
+ },
532
+ noBorder: {
533
+ border: 'none'
534
+ },
535
+ noPadding: {
536
+ padding: 0
537
+ },
538
+ toolbarOnTop: {
539
+ marginTop: '45px'
540
+ }
541
+ };
542
+ };
543
+
544
+ var defaultResponseAreaProps = {
545
+ options: {},
546
+ respAreaToolbar: function respAreaToolbar() {},
547
+ onHandleAreaChange: function onHandleAreaChange() {}
548
+ };
549
+
550
+ var valueToSize = function valueToSize(v) {
551
+ if (!v) {
552
+ return;
553
+ }
554
+
555
+ var calcRegex = /^calc\((.*)\)$/;
556
+
557
+ if (typeof v === 'string') {
558
+ if (v.endsWith('%')) {
559
+ return undefined;
560
+ } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw') || v.endsWith('ch') || v.endsWith('em') || v.match(calcRegex)) {
561
+ return v;
562
+ } else {
563
+ var value = parseInt(v, 10);
564
+ return isNaN(value) ? value : "".concat(value, "px");
565
+ }
566
+ }
567
+
568
+ if (typeof v === 'number') {
569
+ return "".concat(v, "px");
570
+ }
571
+ };
572
+
573
+ function TiptapContainer(props) {
574
+ var _classNames, _classNames2;
575
+
576
+ var editor = props.editor,
577
+ editorState = props.editorState,
578
+ classes = props.classes,
579
+ children = props.children,
580
+ disableUnderline = props.disableUnderline,
581
+ disableScrollbar = props.disableScrollbar,
582
+ toolbarOpts = props.toolbarOpts,
583
+ responseAreaProps = props.responseAreaProps,
584
+ autoFocus = props.autoFocus,
585
+ minWidth = props.minWidth,
586
+ width = props.width,
587
+ maxWidth = props.maxWidth,
588
+ minHeight = props.minHeight,
589
+ height = props.height,
590
+ maxHeight = props.maxHeight;
591
+ var holderNames = (0, _classnames["default"])(classes.editorHolder, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.editorInFocus, editorState.isFocused), (0, _defineProperty2["default"])(_classNames, classes.readOnly, editorState.readOnly), (0, _defineProperty2["default"])(_classNames, classes.disabledUnderline, disableUnderline), (0, _defineProperty2["default"])(_classNames, classes.disabledScrollbar, disableScrollbar), _classNames));
592
+ (0, _react.useEffect)(function () {
593
+ if (editor && autoFocus) {
594
+ Promise.resolve().then(function () {
595
+ editor.commands.focus('end');
596
+ });
597
+ }
598
+ }, [editor, autoFocus]);
599
+ var sizeStyle = (0, _react.useMemo)(function () {
600
+ return {
601
+ width: valueToSize(width),
602
+ minWidth: valueToSize(minWidth),
603
+ maxWidth: valueToSize(maxWidth),
604
+ height: valueToSize(height),
605
+ minHeight: valueToSize(minHeight),
606
+ maxHeight: valueToSize(maxHeight)
607
+ };
608
+ }, [minWidth, width, maxWidth, minHeight, height, maxHeight]);
609
+ return /*#__PURE__*/_react["default"].createElement("div", {
610
+ className: (0, _classnames["default"])((_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, classes.noBorder, toolbarOpts && toolbarOpts.noBorder), (0, _defineProperty2["default"])(_classNames2, classes.error, toolbarOpts && toolbarOpts.error), _classNames2), classes.root, props.className),
611
+ style: {
612
+ width: sizeStyle.width,
613
+ minWidth: sizeStyle.minWidth,
614
+ maxWidth: sizeStyle.maxWidth
615
+ }
616
+ }, /*#__PURE__*/_react["default"].createElement("div", {
617
+ className: holderNames
618
+ }, /*#__PURE__*/_react["default"].createElement("div", {
619
+ className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.noPadding, toolbarOpts && toolbarOpts.noPadding), classes.children)
620
+ }, children)), editor && /*#__PURE__*/_react["default"].createElement(StyledMenuBar, {
621
+ editor: editor,
622
+ responseAreaProps: responseAreaProps,
623
+ toolbarOpts: toolbarOpts,
624
+ onChange: props.onChange
625
+ }));
626
+ }
627
+
628
+ var EditorContainer = (0, _styles.withStyles)(styles)(TiptapContainer);
629
+
630
+ function MenuBar(_ref3) {
631
+ var _classNames4;
632
+
633
+ var editor = _ref3.editor,
634
+ classes = _ref3.classes,
635
+ toolOpts = _ref3.toolbarOpts,
636
+ responseAreaProps = _ref3.responseAreaProps,
637
+ onChange = _ref3.onChange;
638
+
639
+ var _useState5 = (0, _react.useState)(false),
640
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
641
+ showPicker = _useState6[0],
642
+ setShowPicker = _useState6[1];
643
+
644
+ var toolbarOpts = toolOpts !== null && toolOpts !== void 0 ? toolOpts : {}; // Read the current editor's state, and re-render the component when it changes
645
+
646
+ var editorState = (0, _react2.useEditorState)({
647
+ editor: editor,
648
+ selector: function selector(ctx) {
649
+ var _ctx$editor, _ctx$editor2, _ctx$editor3, _ctx$editor4, _ctx$editor5, _ctx$editor$isActive, _ctx$editor$can$chain, _ctx$editor$isActive2, _ctx$editor$can$chain2, _ctx$editor$isActive3, _ctx$editor$can$chain3, _ctx$editor$isActive4, _ctx$editor$can$chain4, _ctx$editor$isActive5, _ctx$editor$can$chain5, _ctx$editor$can$chain6, _ctx$editor$isActive6, _ctx$editor$isActive7, _ctx$editor$isActive8, _ctx$editor$isActive9, _ctx$editor$isActive10, _ctx$editor$isActive11, _ctx$editor$isActive12, _ctx$editor$isActive13, _ctx$editor$isActive14, _ctx$editor$isActive15, _ctx$editor$isActive16, _ctx$editor$isActive17, _ctx$editor$isActive18, _ctx$editor$isActive19, _ctx$editor$can$chain7, _ctx$editor$can$chain8;
650
+
651
+ var _ref4 = ((_ctx$editor = ctx.editor) === null || _ctx$editor === void 0 ? void 0 : _ctx$editor.state) || {},
652
+ selection = _ref4.selection;
653
+
654
+ var currentNode;
655
+
656
+ if (selection instanceof _prosemirrorState.NodeSelection) {
657
+ currentNode = selection.node; // the selected node
658
+ }
659
+
660
+ var customToolbarActive = ((_ctx$editor2 = ctx.editor) === null || _ctx$editor2 === void 0 ? void 0 : _ctx$editor2.isActive('math')) || ((_ctx$editor3 = ctx.editor) === null || _ctx$editor3 === void 0 ? void 0 : _ctx$editor3.isActive('explicit_constructed_response')) || ((_ctx$editor4 = ctx.editor) === null || _ctx$editor4 === void 0 ? void 0 : _ctx$editor4.isActive('imageUploadNode'));
661
+ return {
662
+ currentNode: currentNode,
663
+ customToolbarActive: customToolbarActive,
664
+ isFocused: (_ctx$editor5 = ctx.editor) === null || _ctx$editor5 === void 0 ? void 0 : _ctx$editor5.isFocused,
665
+ isBold: (_ctx$editor$isActive = ctx.editor.isActive('bold')) !== null && _ctx$editor$isActive !== void 0 ? _ctx$editor$isActive : false,
666
+ canBold: (_ctx$editor$can$chain = ctx.editor.can().chain().toggleBold().run()) !== null && _ctx$editor$can$chain !== void 0 ? _ctx$editor$can$chain : false,
667
+ isTable: (_ctx$editor$isActive2 = ctx.editor.isActive('table')) !== null && _ctx$editor$isActive2 !== void 0 ? _ctx$editor$isActive2 : false,
668
+ canTable: (_ctx$editor$can$chain2 = ctx.editor.can().chain().insertTable().run()) !== null && _ctx$editor$can$chain2 !== void 0 ? _ctx$editor$can$chain2 : false,
669
+ isItalic: (_ctx$editor$isActive3 = ctx.editor.isActive('italic')) !== null && _ctx$editor$isActive3 !== void 0 ? _ctx$editor$isActive3 : false,
670
+ canItalic: (_ctx$editor$can$chain3 = ctx.editor.can().chain().toggleItalic().run()) !== null && _ctx$editor$can$chain3 !== void 0 ? _ctx$editor$can$chain3 : false,
671
+ isStrike: (_ctx$editor$isActive4 = ctx.editor.isActive('strike')) !== null && _ctx$editor$isActive4 !== void 0 ? _ctx$editor$isActive4 : false,
672
+ canStrike: (_ctx$editor$can$chain4 = ctx.editor.can().chain().toggleStrike().run()) !== null && _ctx$editor$can$chain4 !== void 0 ? _ctx$editor$can$chain4 : false,
673
+ isCode: (_ctx$editor$isActive5 = ctx.editor.isActive('code')) !== null && _ctx$editor$isActive5 !== void 0 ? _ctx$editor$isActive5 : false,
674
+ canCode: (_ctx$editor$can$chain5 = ctx.editor.can().chain().toggleCode().run()) !== null && _ctx$editor$can$chain5 !== void 0 ? _ctx$editor$can$chain5 : false,
675
+ canClearMarks: (_ctx$editor$can$chain6 = ctx.editor.can().chain().unsetAllMarks().run()) !== null && _ctx$editor$can$chain6 !== void 0 ? _ctx$editor$can$chain6 : false,
676
+ isUnderline: (_ctx$editor$isActive6 = ctx.editor.isActive('underline')) !== null && _ctx$editor$isActive6 !== void 0 ? _ctx$editor$isActive6 : false,
677
+ isSubScript: (_ctx$editor$isActive7 = ctx.editor.isActive('subscript')) !== null && _ctx$editor$isActive7 !== void 0 ? _ctx$editor$isActive7 : false,
678
+ isSuperScript: (_ctx$editor$isActive8 = ctx.editor.isActive('superscript')) !== null && _ctx$editor$isActive8 !== void 0 ? _ctx$editor$isActive8 : false,
679
+ isParagraph: (_ctx$editor$isActive9 = ctx.editor.isActive('paragraph')) !== null && _ctx$editor$isActive9 !== void 0 ? _ctx$editor$isActive9 : false,
680
+ isHeading1: (_ctx$editor$isActive10 = ctx.editor.isActive('heading', {
681
+ level: 1
682
+ })) !== null && _ctx$editor$isActive10 !== void 0 ? _ctx$editor$isActive10 : false,
683
+ isHeading2: (_ctx$editor$isActive11 = ctx.editor.isActive('heading', {
684
+ level: 2
685
+ })) !== null && _ctx$editor$isActive11 !== void 0 ? _ctx$editor$isActive11 : false,
686
+ isHeading3: (_ctx$editor$isActive12 = ctx.editor.isActive('heading', {
687
+ level: 3
688
+ })) !== null && _ctx$editor$isActive12 !== void 0 ? _ctx$editor$isActive12 : false,
689
+ isHeading4: (_ctx$editor$isActive13 = ctx.editor.isActive('heading', {
690
+ level: 4
691
+ })) !== null && _ctx$editor$isActive13 !== void 0 ? _ctx$editor$isActive13 : false,
692
+ isHeading5: (_ctx$editor$isActive14 = ctx.editor.isActive('heading', {
693
+ level: 5
694
+ })) !== null && _ctx$editor$isActive14 !== void 0 ? _ctx$editor$isActive14 : false,
695
+ isHeading6: (_ctx$editor$isActive15 = ctx.editor.isActive('heading', {
696
+ level: 6
697
+ })) !== null && _ctx$editor$isActive15 !== void 0 ? _ctx$editor$isActive15 : false,
698
+ isBulletList: (_ctx$editor$isActive16 = ctx.editor.isActive('bulletList')) !== null && _ctx$editor$isActive16 !== void 0 ? _ctx$editor$isActive16 : false,
699
+ isOrderedList: (_ctx$editor$isActive17 = ctx.editor.isActive('orderedList')) !== null && _ctx$editor$isActive17 !== void 0 ? _ctx$editor$isActive17 : false,
700
+ isCodeBlock: (_ctx$editor$isActive18 = ctx.editor.isActive('codeBlock')) !== null && _ctx$editor$isActive18 !== void 0 ? _ctx$editor$isActive18 : false,
701
+ isBlockquote: (_ctx$editor$isActive19 = ctx.editor.isActive('blockquote')) !== null && _ctx$editor$isActive19 !== void 0 ? _ctx$editor$isActive19 : false,
702
+ canUndo: (_ctx$editor$can$chain7 = ctx.editor.can().chain().undo().run()) !== null && _ctx$editor$can$chain7 !== void 0 ? _ctx$editor$can$chain7 : false,
703
+ canRedo: (_ctx$editor$can$chain8 = ctx.editor.can().chain().redo().run()) !== null && _ctx$editor$can$chain8 !== void 0 ? _ctx$editor$can$chain8 : false
704
+ };
705
+ }
706
+ });
707
+ var hasDoneButton = false;
708
+ var autoWidth = false;
709
+ var names = (0, _classnames["default"])(classes.toolbar, _constants.PIE_TOOLBAR__CLASS, (_classNames4 = {}, (0, _defineProperty2["default"])(_classNames4, classes.toolbarWithNoDone, !hasDoneButton), (0, _defineProperty2["default"])(_classNames4, classes.toolbarTop, toolbarOpts.position === 'top'), (0, _defineProperty2["default"])(_classNames4, classes.toolbarRight, toolbarOpts.alignment === 'right'), (0, _defineProperty2["default"])(_classNames4, classes.focused, toolbarOpts.alwaysVisible || editorState.isFocused && !editor._toolbarOpened), (0, _defineProperty2["default"])(_classNames4, classes.autoWidth, autoWidth), (0, _defineProperty2["default"])(_classNames4, classes.fullWidth, !autoWidth), (0, _defineProperty2["default"])(_classNames4, classes.hidden, toolbarOpts.isHidden === true), _classNames4));
710
+ var customStyles = toolbarOpts.minWidth !== undefined ? {
711
+ minWidth: toolbarOpts.minWidth
712
+ } : {};
713
+
714
+ var handleMouseDown = function handleMouseDown(e) {
715
+ e.preventDefault();
716
+ };
717
+
718
+ return /*#__PURE__*/_react["default"].createElement("div", {
719
+ className: names,
720
+ style: _objectSpread({}, customStyles),
721
+ onMouseDown: handleMouseDown
722
+ }, !editorState.customToolbarActive && /*#__PURE__*/_react["default"].createElement("div", {
723
+ className: classes.defaultToolbar,
724
+ tabIndex: "1"
725
+ }, /*#__PURE__*/_react["default"].createElement("div", {
726
+ className: classes.buttonsContainer
727
+ }, /*#__PURE__*/_react["default"].createElement("button", {
728
+ onClick: function onClick(e) {
729
+ e.preventDefault();
730
+ editor.chain().focus().insertTable().run();
731
+ },
732
+ disabled: !editorState.canTable,
733
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isTable))
734
+ }, /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
735
+ onClick: function onClick(e) {
736
+ e.preventDefault();
737
+ editor.chain().focus().toggleBold().run();
738
+ },
739
+ disabled: !editorState.canBold,
740
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isBold))
741
+ }, /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
742
+ onClick: function onClick() {
743
+ return editor.chain().focus().toggleItalic().run();
744
+ },
745
+ disabled: !editorState.canItalic,
746
+ active: editorState.isItalic,
747
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isItalic))
748
+ }, /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
749
+ onClick: function onClick() {
750
+ return editor.chain().focus().toggleStrike().run();
751
+ },
752
+ disabled: !editorState.canStrike,
753
+ active: editorState.isStrike,
754
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isStrike))
755
+ }, /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
756
+ onClick: function onClick() {
757
+ return editor.chain().focus().toggleCode().run();
758
+ },
759
+ disabled: !editorState.canCode,
760
+ active: editorState.isCode,
761
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isCode))
762
+ }, /*#__PURE__*/_react["default"].createElement(_Code["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
763
+ onClick: function onClick() {
764
+ return editor.chain().focus().toggleUnderline().run();
765
+ },
766
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isUnderline))
767
+ }, /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
768
+ onClick: function onClick() {
769
+ return editor.chain().focus().toggleSubscript().run();
770
+ },
771
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isSubScript))
772
+ }, /*#__PURE__*/_react["default"].createElement(SubscriptIcon, null)), /*#__PURE__*/_react["default"].createElement("button", {
773
+ onClick: function onClick() {
774
+ return editor.chain().focus().toggleSuperscript().run();
775
+ },
776
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isSuperScript))
777
+ }, /*#__PURE__*/_react["default"].createElement(SuperscriptIcon, null)), /*#__PURE__*/_react["default"].createElement("button", {
778
+ onClick: function onClick() {
779
+ return editor.chain().focus().setImageUploadNode().run();
780
+ },
781
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isSuperScript))
782
+ }, /*#__PURE__*/_react["default"].createElement(_Image["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
783
+ onClick: function onClick() {
784
+ return editor.chain().focus().insertMedia({
785
+ tag: 'video'
786
+ }).run();
787
+ },
788
+ className: (0, _classnames["default"])(classes.button)
789
+ }, /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
790
+ onClick: function onClick() {
791
+ return editor.chain().focus().insertMedia({
792
+ tag: 'audio'
793
+ }).run();
794
+ },
795
+ className: (0, _classnames["default"])(classes.button)
796
+ }, /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
797
+ onClick: function onClick() {
798
+ return editor.commands.openCSSClassDialog();
799
+ },
800
+ className: (0, _classnames["default"])(classes.button)
801
+ }, /*#__PURE__*/_react["default"].createElement(_icons3["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
802
+ onClick: function onClick() {
803
+ return editor.chain().focus().toggleHeading({
804
+ level: 3
805
+ }).run();
806
+ },
807
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isHeading3))
808
+ }, /*#__PURE__*/_react["default"].createElement(HeadingIcon, null)), /*#__PURE__*/_react["default"].createElement("button", {
809
+ onClick: function onClick() {
810
+ return editor.chain().focus().insertMath('').run();
811
+ },
812
+ className: classes.button
813
+ }, /*#__PURE__*/_react["default"].createElement(_Functions["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
814
+ onClick: function onClick() {
815
+ return setShowPicker(_utils.spanishConfig);
816
+ },
817
+ className: classes.button
818
+ }, /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
819
+ letter: "\xF1"
820
+ })), /*#__PURE__*/_react["default"].createElement("button", {
821
+ onClick: function onClick() {
822
+ return setShowPicker(_utils.specialConfig);
823
+ },
824
+ className: classes.button
825
+ }, /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
826
+ letter: "\u20AC"
827
+ })), /*#__PURE__*/_react["default"].createElement("button", {
828
+ onClick: function onClick() {},
829
+ className: classes.button
830
+ }, /*#__PURE__*/_react["default"].createElement(_icons2["default"], {
831
+ editor: editor
832
+ })), /*#__PURE__*/_react["default"].createElement("button", {
833
+ onClick: function onClick() {
834
+ return editor.chain().focus().toggleBulletList().run();
835
+ },
836
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isBulletList))
837
+ }, /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
838
+ onClick: function onClick() {
839
+ return editor.chain().focus().toggleOrderedList().run();
840
+ },
841
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, editorState.isOrderedList))
842
+ }, /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
843
+ onClick: function onClick() {
844
+ return editor.chain().focus().undo().run();
845
+ },
846
+ disabled: !editorState.canUndo,
847
+ className: classes.button
848
+ }, /*#__PURE__*/_react["default"].createElement(_Undo["default"], null)), /*#__PURE__*/_react["default"].createElement("button", {
849
+ onClick: function onClick() {
850
+ return editor.chain().focus().redo().run();
851
+ },
852
+ disabled: !editorState.canRedo,
853
+ className: classes.button
854
+ }, /*#__PURE__*/_react["default"].createElement(_Redo["default"], null))), /*#__PURE__*/_react["default"].createElement("button", {
855
+ onClick: function onClick() {
856
+ editor.chain().focus().insertResponseArea(responseAreaProps.type).run();
857
+ },
858
+ className: classes.button
859
+ }, /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null)), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
860
+ onClick: function onClick() {
861
+ onChange === null || onChange === void 0 ? void 0 : onChange(editor.getHTML());
862
+ editor.commands.blur();
863
+ }
864
+ })), showPicker && /*#__PURE__*/_react["default"].createElement(CharacterPicker, {
865
+ editor: editor,
866
+ opts: _objectSpread(_objectSpread({}, showPicker), {}, {
867
+ renderPopOver: function renderPopOver(ev, ch) {
868
+ return console.log('Show popover', ch);
869
+ },
870
+ closePopOver: function closePopOver() {
871
+ return console.log('Close popover');
872
+ }
873
+ }),
874
+ onClose: function onClose() {
875
+ return setShowPicker(false);
876
+ }
877
+ }));
878
+ }
879
+
880
+ var style = function style(theme) {
881
+ return {
882
+ defaultToolbar: {
883
+ display: 'flex',
884
+ width: '100%',
885
+ justifyContent: 'space-between'
886
+ },
887
+ buttonsContainer: {
888
+ alignItems: 'center',
889
+ display: 'flex',
890
+ width: '100%'
891
+ },
892
+ button: {
893
+ color: 'grey',
894
+ display: 'inline-flex',
895
+ padding: '2px',
896
+ background: 'none',
897
+ border: 'none',
898
+ cursor: 'pointer',
899
+ '&:hover': {
900
+ color: 'black'
901
+ },
902
+ '&:focus': {
903
+ outline: "2px solid ".concat(theme.palette.grey[700])
904
+ }
905
+ },
906
+ active: {
907
+ color: 'black'
908
+ },
909
+ disabled: {
910
+ opacity: 0.7,
911
+ cursor: 'not-allowed',
912
+ '& :hover': {
913
+ color: 'grey'
914
+ }
915
+ },
916
+ isActive: {
917
+ background: 'var(--purple)',
918
+ color: 'var(--white)'
919
+ },
920
+ toolbar: {
921
+ position: 'absolute',
922
+ zIndex: 20,
923
+ cursor: 'pointer',
924
+ justifyContent: 'space-between',
925
+ background: 'var(--editable-html-toolbar-bg, #efefef)',
926
+ minWidth: '280px',
927
+ margin: '5px 0 0 0',
928
+ padding: '2px',
929
+ boxShadow: '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',
930
+ boxSizing: 'border-box',
931
+ display: 'flex',
932
+ opacity: 0,
933
+ pointerEvents: 'none'
934
+ },
935
+ toolbarWithNoDone: {
936
+ minWidth: '265px'
937
+ },
938
+ toolbarTop: {
939
+ top: '-45px'
940
+ },
941
+ toolbarRight: {
942
+ right: 0
943
+ },
944
+ fullWidth: {
945
+ width: '100%'
946
+ },
947
+ hidden: {
948
+ visibility: 'hidden'
949
+ },
950
+ autoWidth: {
951
+ width: 'auto'
952
+ },
953
+ focused: {
954
+ opacity: 1,
955
+ pointerEvents: 'auto'
956
+ },
957
+ iconRoot: {
958
+ width: '28px',
959
+ height: '28px',
960
+ padding: '4px',
961
+ verticalAlign: 'top'
962
+ },
963
+ label: {
964
+ color: 'var(--editable-html-toolbar-check, #00bb00)'
965
+ },
966
+ shared: {
967
+ display: 'flex'
968
+ }
969
+ };
970
+ };
971
+
972
+ var StyledMenuBar = (0, _styles.withStyles)(style, {
973
+ index: 1000
974
+ })(MenuBar);
975
+ var defaultToolbarOpts = {
976
+ position: 'bottom',
977
+ alignment: 'left',
978
+ alwaysVisible: false,
979
+ showDone: true,
980
+ doneOn: 'blur'
981
+ };
982
+
983
+ var EditableHtml = function EditableHtml(props) {
984
+ var _useState7 = (0, _react.useState)([]),
985
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
986
+ pendingImages = _useState8[0],
987
+ setPendingImages = _useState8[1];
988
+
989
+ var _useState9 = (0, _react.useState)(false),
990
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
991
+ scheduled = _useState10[0],
992
+ setScheduled = _useState10[1];
993
+
994
+ var classes = props.classes,
995
+ toolbarOpts = props.toolbarOpts;
996
+
997
+ var toolbarOptsToUse = _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
998
+
999
+ var extensions = [_extensionTextStyle.TextStyleKit, _starterKit["default"], ExtendedTable, _extensionTableRow.TableRow, _extensionTableHeader.TableHeader, _extensionTableCell.TableCell, _responseArea.ResponseAreaExtension, _responseArea.ExplicitConstructedResponseNode.configure(props.responseAreaProps), _responseArea.DragInTheBlankNode.configure(props.responseAreaProps), _responseArea.InlineDropdownNode.configure(props.responseAreaProps), _math.MathNode.configure({
1000
+ toolbarOpts: toolbarOptsToUse
1001
+ }), _extensionSubscript["default"], _extensionSuperscript["default"], _extensionTextAlign["default"].configure({
1002
+ types: ['heading', 'paragraph'],
1003
+ alignments: ['left', 'right', 'center']
1004
+ }), _extensionImage["default"], _image.ImageUploadNode.configure({
1005
+ toolbarOpts: toolbarOptsToUse,
1006
+ imageHandling: {
1007
+ disableImageAlignmentButtons: props.disableImageAlignmentButtons,
1008
+ onDelete: props.imageSupport && props.imageSupport["delete"] && function (node, done) {
1009
+ var src = node.attrs.src;
1010
+ props.imageSupport["delete"](src, function (e) {
1011
+ var newPendingImages = pendingImages.filter(function (img) {
1012
+ return img.key !== node.key;
1013
+ });
1014
+ var newState = {
1015
+ pendingImages: newPendingImages,
1016
+ scheduled: scheduled && newPendingImages.length === 0 ? false : scheduled
1017
+ };
1018
+ setPendingImages(newState.pendingImages);
1019
+ setScheduled(newState.scheduled);
1020
+ done();
1021
+ });
1022
+ },
1023
+ insertImageRequested: props.imageSupport && function (addedImage, getHandler) {
1024
+ var onFinish = function onFinish(result) {
1025
+ var _cb;
1026
+
1027
+ var cb;
1028
+
1029
+ if (scheduled && result) {
1030
+ // finish editing only on success
1031
+ cb = props.onChange;
1032
+ }
1033
+
1034
+ var newPendingImages = pendingImages.filter(function (img) {
1035
+ return img.key !== addedImage.key;
1036
+ });
1037
+ var newState = {
1038
+ pendingImages: newPendingImages
1039
+ };
1040
+
1041
+ if (newPendingImages.length === 0) {
1042
+ newState.scheduled = false;
1043
+ }
1044
+
1045
+ setPendingImages(newState.pendingImages);
1046
+ setScheduled(newState.scheduled);
1047
+ (_cb = cb) === null || _cb === void 0 ? void 0 : _cb(editor.getHTML());
1048
+ };
1049
+
1050
+ var callback = function callback() {
1051
+ /**
1052
+ * The handler is the object through which the outer context
1053
+ * communicates file upload events like: fileChosen, cancel, progress
1054
+ */
1055
+ var handler = getHandler(onFinish);
1056
+ props.imageSupport.add(handler);
1057
+ };
1058
+
1059
+ setPendingImages([].concat((0, _toConsumableArray2["default"])(pendingImages), [addedImage]));
1060
+ callback();
1061
+ },
1062
+ maxImageWidth: props.maxImageWidth,
1063
+ maxImageHeight: props.maxImageHeight
1064
+ },
1065
+ limit: 3
1066
+ }), _media.Media.configure({
1067
+ uploadSoundSupport: props.uploadSoundSupport
1068
+ }), _css.CSSMark.configure({
1069
+ extraCSSRules: props.extraCSSRules
1070
+ })];
1071
+ var editor = (0, _react2.useEditor)({
1072
+ extensions: extensions,
1073
+ immediatelyRender: false,
1074
+ content: props.markup,
1075
+ onUpdate: function onUpdate(_ref5) {
1076
+ var _props$onChange;
1077
+
1078
+ var editor = _ref5.editor,
1079
+ transaction = _ref5.transaction;
1080
+ return transaction.isDone && ((_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call(props, editor.getHTML()));
1081
+ },
1082
+ onBlur: function onBlur(_ref6) {
1083
+ var editor = _ref6.editor;
1084
+
1085
+ if (toolbarOptsToUse.doneOn === 'blur') {
1086
+ var _props$onChange2;
1087
+
1088
+ (_props$onChange2 = props.onChange) === null || _props$onChange2 === void 0 ? void 0 : _props$onChange2.call(props, editor.getHTML());
1089
+ } else {
1090
+ var _props$onDone;
1091
+
1092
+ (_props$onDone = props.onDone) === null || _props$onDone === void 0 ? void 0 : _props$onDone.call(props, editor.getHTML());
1093
+ }
1094
+ }
1095
+ });
1096
+ (0, _react.useEffect)(function () {
1097
+ if (!editor) {
1098
+ return;
1099
+ }
1100
+
1101
+ if (props.markup !== editor.getHTML()) {
1102
+ editor.commands.setContent(props.markup, false); // false = don’t emit update
1103
+ }
1104
+ }, [props.markup, editor]);
1105
+ (0, _react.useEffect)(function () {
1106
+ // Define your variables in a JS object
1107
+ var cssVariables = {
1108
+ '--white': '#fff',
1109
+ '--black': '#2e2b29',
1110
+ '--black-contrast': '#110f0e',
1111
+ '--gray-1': 'rgba(61, 37, 20, .05)',
1112
+ '--gray-2': 'rgba(61, 37, 20, .08)',
1113
+ '--gray-3': 'rgba(61, 37, 20, .12)',
1114
+ '--gray-4': 'rgba(53, 38, 28, .3)',
1115
+ '--gray-5': 'rgba(28, 25, 23, .6)',
1116
+ '--green': '#22c55e',
1117
+ '--purple': '#6a00f5',
1118
+ '--purple-contrast': '#5800cc',
1119
+ '--purple-light': 'rgba(88, 5, 255, .05)',
1120
+ '--yellow-contrast': '#facc15',
1121
+ '--yellow': 'rgba(250, 204, 21, .4)',
1122
+ '--yellow-light': '#fffae5',
1123
+ '--red': '#ff5c33',
1124
+ '--red-light': '#ffebe5',
1125
+ '--shadow': "0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)"
1126
+ };
1127
+ Object.entries(cssVariables).forEach(function (_ref7) {
1128
+ var _ref8 = (0, _slicedToArray2["default"])(_ref7, 2),
1129
+ key = _ref8[0],
1130
+ value = _ref8[1];
1131
+
1132
+ document.documentElement.style.setProperty(key, value);
1133
+ });
1134
+ }, []);
1135
+ var editorState = (0, _react2.useEditorState)({
1136
+ editor: editor,
1137
+ selector: function selector(ctx) {
1138
+ var _ctx$editor6;
1139
+
1140
+ return {
1141
+ isFocused: (_ctx$editor6 = ctx.editor) === null || _ctx$editor6 === void 0 ? void 0 : _ctx$editor6.isFocused
1142
+ };
1143
+ }
1144
+ });
1145
+
1146
+ var valueToSize = function valueToSize(v) {
1147
+ if (!v) {
1148
+ return;
1149
+ }
1150
+
1151
+ var calcRegex = /^calc\((.*)\)$/;
1152
+
1153
+ if (typeof v === 'string') {
1154
+ if (v.endsWith('%')) {
1155
+ return undefined;
1156
+ } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw') || v.endsWith('ch') || v.endsWith('em') || v.match(calcRegex)) {
1157
+ return v;
1158
+ } else {
1159
+ var value = parseInt(v, 10);
1160
+ return isNaN(value) ? value : "".concat(value, "px");
1161
+ }
1162
+ }
1163
+
1164
+ if (typeof v === 'number') {
1165
+ return "".concat(v, "px");
1166
+ }
1167
+ };
1168
+
1169
+ var sizeStyle = (0, _react.useMemo)(function () {
1170
+ var minWidth = props.minWidth,
1171
+ width = props.width,
1172
+ maxWidth = props.maxWidth,
1173
+ minHeight = props.minHeight,
1174
+ height = props.height,
1175
+ maxHeight = props.maxHeight;
1176
+ return {
1177
+ width: valueToSize(width),
1178
+ minWidth: valueToSize(minWidth),
1179
+ maxWidth: valueToSize(maxWidth),
1180
+ height: valueToSize(height),
1181
+ minHeight: valueToSize(minHeight),
1182
+ maxHeight: valueToSize(maxHeight)
1183
+ };
1184
+ }, [props]);
1185
+ return /*#__PURE__*/_react["default"].createElement(EditorContainer, (0, _extends2["default"])({}, _objectSpread(_objectSpread({}, props), {}, {
1186
+ toolbarOpts: toolbarOptsToUse
1187
+ }), {
1188
+ editorState: editorState,
1189
+ editor: editor
1190
+ }), editor && /*#__PURE__*/_react["default"].createElement(_react2.EditorContent, {
1191
+ style: {
1192
+ minHeight: sizeStyle.minHeight,
1193
+ height: sizeStyle.height,
1194
+ maxHeight: sizeStyle.maxHeight
1195
+ },
1196
+ className: classes.root,
1197
+ editor: editor
1198
+ }));
1199
+ };
1200
+
1201
+ exports.EditableHtml = EditableHtml;
1202
+ var StyledEditor = (0, _styles.withStyles)({
1203
+ root: {
1204
+ outline: 'none !important',
1205
+ '& .ProseMirror': {
1206
+ outline: 'none !important',
1207
+ position: 'initial'
1208
+ }
1209
+ }
1210
+ })(EditableHtml);
1211
+ var _default = StyledEditor;
1212
+ exports["default"] = _default;
1213
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qc3giXSwibmFtZXMiOlsiQ2hhcmFjdGVySWNvbiIsImxldHRlciIsImZvbnRTaXplIiwibGluZUhlaWdodCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIkNoYXJhY3RlclBpY2tlciIsImVkaXRvciIsIm9wdHMiLCJvbkNsb3NlIiwiY2hhcmFjdGVycyIsImxlbmd0aCIsImNvbnRhaW5lclJlZiIsInRvcCIsImxlZnQiLCJwb3NpdGlvbiIsInNldFBvc2l0aW9uIiwicG9wb3ZlciIsInNldFBvcG92ZXIiLCJjb25maWdUb1VzZSIsImxhbmd1YWdlIiwic3BhbmlzaENvbmZpZyIsInNwZWNpYWxDb25maWciLCJsYXlvdXRGb3JDaGFyYWN0ZXJzIiwicmVkdWNlIiwib2JqIiwiYXJyIiwiY29sdW1ucyIsInJvd3MiLCJjbG9zZVBvcE92ZXIiLCJib2R5UmVjdCIsImRvY3VtZW50IiwiYm9keSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImZyb20iLCJzdGF0ZSIsInNlbGVjdGlvbiIsInN0YXJ0IiwidmlldyIsImNvb3Jkc0F0UG9zIiwiTWF0aCIsImFicyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImUiLCJjdXJyZW50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkb20iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlclBvcE92ZXIiLCJldmVudCIsImVsIiwiYW5jaG9yRWwiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlQ2hhbmdlIiwidmFsIiwiY2hhaW4iLCJmb2N1cyIsImluc2VydENvbnRlbnQiLCJydW4iLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsIm1heFdpZHRoIiwia2V5UGFkQ2hhcmFjdGVyUmVmIiwic2V0S2V5cGFkSW50ZXJhY3Rpb24iLCJuIiwibWFwIiwiayIsIm5hbWUiLCJ3cml0ZSIsImxhYmVsIiwiY2F0ZWdvcnkiLCJleHRyYUNsYXNzIiwiZXh0cmFQcm9wcyIsInN0eWxlIiwiYm9yZGVyIiwiaGFzUHJldmlldyIsImFjdGlvbnMiLCJvbk1vdXNlRW50ZXIiLCJldiIsIm9uTW91c2VMZWF2ZSIsImRlc2NyaXB0aW9uIiwidW5pY29kZSIsIlN1cGVyc2NyaXB0SWNvbiIsIlN1YnNjcmlwdEljb24iLCJIZWFkaW5nSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiRXh0ZW5kZWRUYWJsZSIsIlRhYmxlIiwiZXh0ZW5kIiwicmVuZGVySFRNTCIsInByb3BzIiwib3JpZ2luYWxUYWJsZSIsInBhcmVudCIsInN0eWxlcyIsInRoZW1lIiwicm9vdCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJjdXJzb3IiLCJ3b3JkQnJlYWsiLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbiIsIm1hcmdpbkJvdHRvbSIsInRleHRXcmFwIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwiZm9udEZhbWlseSIsImJvcmRlckxlZnQiLCJwYWRkaW5nTGVmdCIsImJvcmRlclRvcCIsImNoaWxkcmVuIiwiZWRpdG9ySG9sZGVyIiwidGV4dCIsInJpZ2h0IiwiYm90dG9tIiwiY29udGVudCIsInRyYW5zaXRpb24iLCJwb2ludGVyRXZlbnRzIiwidHJhbnNmb3JtIiwicHJpbWFyeSIsInBhbGV0dGUiLCJjb21tb24iLCJibGFjayIsImRpc2FibGVkVW5kZXJsaW5lIiwiZGlzcGxheSIsImRpc2FibGVkU2Nyb2xsYmFyIiwic2Nyb2xsYmFyV2lkdGgiLCJyZWFkT25seSIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRQb3NpdGlvbiIsImVkaXRvckluRm9jdXMiLCJlcnJvciIsIm1haW4iLCJub0JvcmRlciIsIm5vUGFkZGluZyIsInRvb2xiYXJPblRvcCIsImRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyIsIm9wdGlvbnMiLCJyZXNwQXJlYVRvb2xiYXIiLCJvbkhhbmRsZUFyZWFDaGFuZ2UiLCJ2YWx1ZVRvU2l6ZSIsInYiLCJjYWxjUmVnZXgiLCJlbmRzV2l0aCIsInVuZGVmaW5lZCIsIm1hdGNoIiwidmFsdWUiLCJwYXJzZUludCIsImlzTmFOIiwiVGlwdGFwQ29udGFpbmVyIiwiZWRpdG9yU3RhdGUiLCJjbGFzc2VzIiwiZGlzYWJsZVVuZGVybGluZSIsImRpc2FibGVTY3JvbGxiYXIiLCJ0b29sYmFyT3B0cyIsInJlc3BvbnNlQXJlYVByb3BzIiwiYXV0b0ZvY3VzIiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJob2xkZXJOYW1lcyIsImlzRm9jdXNlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImNvbW1hbmRzIiwic2l6ZVN0eWxlIiwiY2xhc3NOYW1lIiwib25DaGFuZ2UiLCJFZGl0b3JDb250YWluZXIiLCJNZW51QmFyIiwidG9vbE9wdHMiLCJzaG93UGlja2VyIiwic2V0U2hvd1BpY2tlciIsInNlbGVjdG9yIiwiY3R4IiwiY3VycmVudE5vZGUiLCJOb2RlU2VsZWN0aW9uIiwibm9kZSIsImN1c3RvbVRvb2xiYXJBY3RpdmUiLCJpc0FjdGl2ZSIsImlzQm9sZCIsImNhbkJvbGQiLCJjYW4iLCJ0b2dnbGVCb2xkIiwiaXNUYWJsZSIsImNhblRhYmxlIiwiaW5zZXJ0VGFibGUiLCJpc0l0YWxpYyIsImNhbkl0YWxpYyIsInRvZ2dsZUl0YWxpYyIsImlzU3RyaWtlIiwiY2FuU3RyaWtlIiwidG9nZ2xlU3RyaWtlIiwiaXNDb2RlIiwiY2FuQ29kZSIsInRvZ2dsZUNvZGUiLCJjYW5DbGVhck1hcmtzIiwidW5zZXRBbGxNYXJrcyIsImlzVW5kZXJsaW5lIiwiaXNTdWJTY3JpcHQiLCJpc1N1cGVyU2NyaXB0IiwiaXNQYXJhZ3JhcGgiLCJpc0hlYWRpbmcxIiwibGV2ZWwiLCJpc0hlYWRpbmcyIiwiaXNIZWFkaW5nMyIsImlzSGVhZGluZzQiLCJpc0hlYWRpbmc1IiwiaXNIZWFkaW5nNiIsImlzQnVsbGV0TGlzdCIsImlzT3JkZXJlZExpc3QiLCJpc0NvZGVCbG9jayIsImlzQmxvY2txdW90ZSIsImNhblVuZG8iLCJ1bmRvIiwiY2FuUmVkbyIsInJlZG8iLCJoYXNEb25lQnV0dG9uIiwiYXV0b1dpZHRoIiwibmFtZXMiLCJ0b29sYmFyIiwiUElFX1RPT0xCQVJfX0NMQVNTIiwidG9vbGJhcldpdGhOb0RvbmUiLCJ0b29sYmFyVG9wIiwidG9vbGJhclJpZ2h0IiwiYWxpZ25tZW50IiwiZm9jdXNlZCIsImFsd2F5c1Zpc2libGUiLCJfdG9vbGJhck9wZW5lZCIsImZ1bGxXaWR0aCIsImhpZGRlbiIsImlzSGlkZGVuIiwiY3VzdG9tU3R5bGVzIiwiaGFuZGxlTW91c2VEb3duIiwicHJldmVudERlZmF1bHQiLCJkZWZhdWx0VG9vbGJhciIsImJ1dHRvbnNDb250YWluZXIiLCJidXR0b24iLCJhY3RpdmUiLCJ0b2dnbGVVbmRlcmxpbmUiLCJ0b2dnbGVTdWJzY3JpcHQiLCJ0b2dnbGVTdXBlcnNjcmlwdCIsInNldEltYWdlVXBsb2FkTm9kZSIsImluc2VydE1lZGlhIiwidGFnIiwib3BlbkNTU0NsYXNzRGlhbG9nIiwidG9nZ2xlSGVhZGluZyIsImluc2VydE1hdGgiLCJ0b2dnbGVCdWxsZXRMaXN0IiwidG9nZ2xlT3JkZXJlZExpc3QiLCJpbnNlcnRSZXNwb25zZUFyZWEiLCJ0eXBlIiwiZ2V0SFRNTCIsImJsdXIiLCJjaCIsImNvbnNvbGUiLCJsb2ciLCJqdXN0aWZ5Q29udGVudCIsImFsaWduSXRlbXMiLCJvdXRsaW5lIiwiZ3JleSIsImRpc2FibGVkIiwib3BhY2l0eSIsInpJbmRleCIsImJveFNoYWRvdyIsImJveFNpemluZyIsInZpc2liaWxpdHkiLCJpY29uUm9vdCIsInZlcnRpY2FsQWxpZ24iLCJzaGFyZWQiLCJTdHlsZWRNZW51QmFyIiwiaW5kZXgiLCJkZWZhdWx0VG9vbGJhck9wdHMiLCJzaG93RG9uZSIsImRvbmVPbiIsIkVkaXRhYmxlSHRtbCIsInBlbmRpbmdJbWFnZXMiLCJzZXRQZW5kaW5nSW1hZ2VzIiwic2NoZWR1bGVkIiwic2V0U2NoZWR1bGVkIiwidG9vbGJhck9wdHNUb1VzZSIsImV4dGVuc2lvbnMiLCJUZXh0U3R5bGVLaXQiLCJTdGFydGVyS2l0IiwiVGFibGVSb3ciLCJUYWJsZUhlYWRlciIsIlRhYmxlQ2VsbCIsIlJlc3BvbnNlQXJlYUV4dGVuc2lvbiIsIkV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUiLCJjb25maWd1cmUiLCJEcmFnSW5UaGVCbGFua05vZGUiLCJJbmxpbmVEcm9wZG93bk5vZGUiLCJNYXRoTm9kZSIsIlN1YlNjcmlwdCIsIlN1cGVyU2NyaXB0IiwiVGV4dEFsaWduIiwidHlwZXMiLCJhbGlnbm1lbnRzIiwiSW1hZ2UiLCJJbWFnZVVwbG9hZE5vZGUiLCJpbWFnZUhhbmRsaW5nIiwiZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucyIsIm9uRGVsZXRlIiwiaW1hZ2VTdXBwb3J0IiwiZG9uZSIsInNyYyIsImF0dHJzIiwibmV3UGVuZGluZ0ltYWdlcyIsImZpbHRlciIsImltZyIsImtleSIsIm5ld1N0YXRlIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJhZGRlZEltYWdlIiwiZ2V0SGFuZGxlciIsIm9uRmluaXNoIiwicmVzdWx0IiwiY2IiLCJjYWxsYmFjayIsImhhbmRsZXIiLCJhZGQiLCJtYXhJbWFnZVdpZHRoIiwibWF4SW1hZ2VIZWlnaHQiLCJsaW1pdCIsIk1lZGlhIiwidXBsb2FkU291bmRTdXBwb3J0IiwiQ1NTTWFyayIsImV4dHJhQ1NTUnVsZXMiLCJpbW1lZGlhdGVseVJlbmRlciIsIm1hcmt1cCIsIm9uVXBkYXRlIiwidHJhbnNhY3Rpb24iLCJpc0RvbmUiLCJvbkJsdXIiLCJvbkRvbmUiLCJzZXRDb250ZW50IiwiY3NzVmFyaWFibGVzIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJkb2N1bWVudEVsZW1lbnQiLCJzZXRQcm9wZXJ0eSIsIlN0eWxlZEVkaXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7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aUJBREw7QUFFSixzQkFBa0I7QUFDaEJBLE1BQUFBLE9BQU8sRUFBRSxpQkFETztBQUVoQjVQLE1BQUFBLFFBQVEsRUFBRTtBQUZNO0FBRmQ7QUFEd0IsQ0FBWCxFQVFsQjRRLFlBUmtCLENBQXJCO2VBVWVtRSxZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0IHsgTm9kZVNlbGVjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IFRleHRTdHlsZUtpdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtc3R5bGUnO1xuaW1wb3J0IHsgRWRpdG9yQ29udGVudCwgdXNlRWRpdG9yLCB1c2VFZGl0b3JTdGF0ZSB9IGZyb20gJ0B0aXB0YXAvcmVhY3QnO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSAnQHRpcHRhcC9zdGFydGVyLWtpdCc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93JztcbmltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInO1xuaW1wb3J0IFN1cGVyU2NyaXB0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0JztcbmltcG9ydCBTdWJTY3JpcHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0JztcbmltcG9ydCBUZXh0QWxpZ24gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnbic7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuXG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCB7XG4gIEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUsXG4gIERyYWdJblRoZUJsYW5rTm9kZSxcbiAgSW5saW5lRHJvcGRvd25Ob2RlLFxuICBSZXNwb25zZUFyZWFFeHRlbnNpb24sXG59IGZyb20gJy4vZXh0ZW5zaW9ucy9yZXNwb25zZUFyZWEnO1xuaW1wb3J0IHsgTWF0aE5vZGUgfSBmcm9tICcuL2V4dGVuc2lvbnMvbWF0aCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IHByaW1hcnkgfSBmcm9tICcuL3RoZW1lJztcbmltcG9ydCB7IFBJRV9UT09MQkFSX19DTEFTUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IERvbmVCdXR0b24gfSBmcm9tICcuL3BsdWdpbnMvdG9vbGJhci9kb25lLWJ1dHRvbic7XG5pbXBvcnQgQm9sZCBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0Qm9sZCc7XG5pbXBvcnQgSXRhbGljIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRJdGFsaWMnO1xuaW1wb3J0IFN0cmlrZXRocm91Z2ggZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdFN0cmlrZXRocm91Z2gnO1xuaW1wb3J0IENvZGUgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0NvZGUnO1xuaW1wb3J0IEdyaWRPbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvR3JpZE9uJztcbmltcG9ydCBCdWxsZXRlZExpc3RJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRMaXN0QnVsbGV0ZWQnO1xuaW1wb3J0IE51bWJlcmVkTGlzdEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdExpc3ROdW1iZXJlZCc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRVbmRlcmxpbmVkJztcbmltcG9ydCBGdW5jdGlvbnMgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Z1bmN0aW9ucyc7XG5pbXBvcnQgSW1hZ2VJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9JbWFnZSc7XG5pbXBvcnQgeyBUb29sYmFySWNvbiB9IGZyb20gJy4vcGx1Z2lucy9yZXNwQXJlYS9pY29ucyc7XG5pbXBvcnQgUmVkbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvUmVkbyc7XG5pbXBvcnQgVW5kbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVW5kbyc7XG5pbXBvcnQgVGhlYXRlcnNJY29uIGZyb20gXCJAbWF0ZXJpYWwtdWkvaWNvbnMvVGhlYXRlcnNcIjtcbmltcG9ydCBWb2x1bWVVcEljb24gZnJvbSBcIkBtYXRlcmlhbC11aS9pY29ucy9Wb2x1bWVVcFwiO1xuaW1wb3J0IHsgY2hhcmFjdGVySWNvbnMsIHNwYW5pc2hDb25maWcsIHNwZWNpYWxDb25maWcgfSBmcm9tICcuL3BsdWdpbnMvY2hhcmFjdGVycy91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgTWF0aFRvb2xiYXIsIFB1cmVUb29sYmFyIH0gZnJvbSAnQHBpZS1saWIvbWF0aC10b29sYmFyJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgQ3VzdG9tUG9wcGVyIGZyb20gJy4vcGx1Z2lucy9jaGFyYWN0ZXJzL2N1c3RvbS1wb3BwZXInO1xuaW1wb3J0IFRleHRBbGlnbkljb24gZnJvbSAnLi9wbHVnaW5zL3RleHRBbGlnbi9pY29ucyc7XG5pbXBvcnQgQ1NTSWNvbiBmcm9tICcuL3BsdWdpbnMvY3NzL2ljb25zJztcblxuaW1wb3J0IHsgSW1hZ2VVcGxvYWROb2RlIH0gZnJvbSAnLi9leHRlbnNpb25zL2ltYWdlJztcbmltcG9ydCB7IE1lZGlhIH0gZnJvbSAnLi9leHRlbnNpb25zL21lZGlhJztcbmltcG9ydCB7IENTU01hcmsgfSBmcm9tIFwiLi9leHRlbnNpb25zL2Nzc1wiO1xuXG5jb25zdCBDaGFyYWN0ZXJJY29uID0gKHsgbGV0dGVyIH0pID0+IChcbiAgPGRpdlxuICAgIHN0eWxlPXt7XG4gICAgICBmb250U2l6ZTogJzI0cHgnLFxuICAgICAgbGluZUhlaWdodDogJzI0cHgnLFxuICAgIH19XG4gID5cbiAgICB7bGV0dGVyfVxuICA8L2Rpdj5cbik7XG5cbkNoYXJhY3Rlckljb24ucHJvcFR5cGVzID0ge1xuICBsZXR0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2hhcmFjdGVyUGlja2VyKHsgZWRpdG9yLCBvcHRzLCBvbkNsb3NlIH0pIHtcbiAgaWYgKCFvcHRzPy5jaGFyYWN0ZXJzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHRvcDogMCwgbGVmdDogMCB9KTtcbiAgY29uc3QgW3BvcG92ZXIsIHNldFBvcG92ZXJdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgbGV0IGNvbmZpZ1RvVXNlO1xuXG4gIHN3aXRjaCAodHJ1ZSkge1xuICAgIGNhc2Ugb3B0cy5sYW5ndWFnZSA9PT0gJ3NwYW5pc2gnOlxuICAgICAgY29uZmlnVG9Vc2UgPSBzcGFuaXNoQ29uZmlnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvcHRzLmxhbmd1YWdlID09PSAnc3BlY2lhbCc6XG4gICAgICBjb25maWdUb1VzZSA9IHNwZWNpYWxDb25maWc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29uZmlnVG9Vc2UgPSBvcHRzO1xuICB9XG5cbiAgY29uc3QgbGF5b3V0Rm9yQ2hhcmFjdGVycyA9IGNvbmZpZ1RvVXNlLmNoYXJhY3RlcnMucmVkdWNlKFxuICAgIChvYmosIGFycikgPT4ge1xuICAgICAgaWYgKGFyci5sZW5ndGggPj0gb2JqLmNvbHVtbnMpIHtcbiAgICAgICAgb2JqLmNvbHVtbnMgPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgeyByb3dzOiBjb25maWdUb1VzZS5jaGFyYWN0ZXJzLmxlbmd0aCwgY29sdW1uczogMCB9LFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsb3NlUG9wT3ZlcigpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWRpdG9yKSByZXR1cm47XG5cbiAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gc2VsZWN0aW9uXG4gICAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgZnJvbSB9ID0gZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcbiAgICBjb25zdCBzdGFydCA9IGVkaXRvci52aWV3LmNvb3Jkc0F0UG9zKGZyb20pO1xuICAgIHNldFBvc2l0aW9uKHtcbiAgICAgIHRvcDogc3RhcnQudG9wICsgTWF0aC5hYnMoYm9keVJlY3QudG9wKSArIDQwLCAvLyBzaGlmdCBhYm92ZVxuICAgICAgbGVmdDogc3RhcnQubGVmdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChlKSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQgJiYgIWNvbnRhaW5lclJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhZWRpdG9yLnZpZXcuZG9tLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtlZGl0b3JdKTtcblxuICBjb25zdCByZW5kZXJQb3BPdmVyID0gKGV2ZW50LCBlbCkgPT4gc2V0UG9wb3Zlcih7IGFuY2hvckVsOiBldmVudC5jdXJyZW50VGFyZ2V0LCBlbCB9KTtcbiAgY29uc3QgY2xvc2VQb3BPdmVyID0gKCkgPT4gc2V0UG9wb3ZlcihudWxsKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAodmFsKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlZGl0b3JcbiAgICAgICAgLmNoYWluKClcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLmluc2VydENvbnRlbnQodmFsKVxuICAgICAgICAucnVuKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge1JlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImluc2VydC1jaGFyYWN0ZXItZGlhbG9nXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICB0b3A6IGAke3Bvc2l0aW9uLnRvcH1weGAsXG4gICAgICAgICAgICBsZWZ0OiBgJHtwb3NpdGlvbi5sZWZ0fXB4YCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPFB1cmVUb29sYmFyXG4gICAgICAgICAgICAgIGtleVBhZENoYXJhY3RlclJlZj17b3B0cy5rZXlQYWRDaGFyYWN0ZXJSZWZ9XG4gICAgICAgICAgICAgIHNldEtleXBhZEludGVyYWN0aW9uPXtvcHRzLnNldEtleXBhZEludGVyYWN0aW9ufVxuICAgICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgICAgbm9EZWNpbWFsXG4gICAgICAgICAgICAgIGhpZGVJbnB1dFxuICAgICAgICAgICAgICBub0xhdGV4SGFuZGxpbmdcbiAgICAgICAgICAgICAgaGlkZURvbmVCdXR0b25CYWNrZ3JvdW5kXG4gICAgICAgICAgICAgIGxheW91dEZvcktleVBhZD17bGF5b3V0Rm9yQ2hhcmFjdGVyc31cbiAgICAgICAgICAgICAgYWRkaXRpb25hbEtleXM9e2NvbmZpZ1RvVXNlLmNoYXJhY3RlcnMucmVkdWNlKChhcnIsIG4pID0+IHtcbiAgICAgICAgICAgICAgICBhcnIgPSBbXG4gICAgICAgICAgICAgICAgICAuLi5hcnIsXG4gICAgICAgICAgICAgICAgICAuLi5uLm1hcCgoaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0KGssICduYW1lJykgfHwgayxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IGdldChrLCAnd3JpdGUnKSB8fCBrLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0KGssICdsYWJlbCcpIHx8IGssXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnY2hhcmFjdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzczogJ2NoYXJhY3RlcicsXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi4oay5leHRyYVByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGsuZXh0cmFQcm9wcyB8fCB7fSkuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgIzAwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKGNvbmZpZ1RvVXNlLmhhc1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogeyBvbk1vdXNlRW50ZXI6IChldikgPT4gcmVuZGVyUG9wT3ZlcihldiwgayksIG9uTW91c2VMZWF2ZTogY2xvc2VQb3BPdmVyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgICAgIH0sIFtdKX1cbiAgICAgICAgICAgICAga2V5cGFkTW9kZT1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgb25Eb25lPXtvbkNsb3NlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+LFxuICAgICAgICBkb2N1bWVudC5ib2R5LFxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyICYmXG4gICAgICAgIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICA8Q3VzdG9tUG9wcGVyIG9uQ2xvc2U9e2Nsb3NlUG9wT3Zlcn0gYW5jaG9yRWw9e3BvcG92ZXIuYW5jaG9yRWx9PlxuICAgICAgICAgICAgPGRpdj57cG9wb3Zlci5lbC5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDIwLCBsaW5lSGVpZ2h0OiAnMjBweCcgfX0+e3BvcG92ZXIuZWwuZGVzY3JpcHRpb259PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAyMCwgbGluZUhlaWdodDogJzIwcHgnIH19Pntwb3BvdmVyLmVsLnVuaWNvZGV9PC9kaXY+XG4gICAgICAgICAgPC9DdXN0b21Qb3BwZXI+LFxuICAgICAgICAgIGRvY3VtZW50LmJvZHksXG4gICAgICAgICl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn1cblxuY29uc3QgU3VwZXJzY3JpcHRJY29uID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjIsN2gtMnYxaDN2MWgtNFY3YzAtMC41NSwwLjQ1LTEsMS0xaDJWNWgtM1Y0aDNjMC41NSwwLDEsMC40NSwxLDF2MUMyMyw2LjU1LDIyLjU1LDcsMjIsN3ogTTUuODgsMjBoMi42NmwzLjQtNS40MmgwLjEyIGwzLjQsNS40MmgyLjY2bC00LjY1LTcuMjdMMTcuODEsNmgtMi42OGwtMy4wNyw0Ljk5aC0wLjEyTDguODUsNkg2LjE5bDQuMzIsNi43M0w1Ljg4LDIwelwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IFN1YnNjcmlwdEljb24gPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICA8cGF0aFxuICAgICAgZD1cIk0yMiwxOGgtMnYxaDN2MWgtNHYtMmMwLTAuNTUsMC40NS0xLDEtMWgydi0xaC0zdi0xaDNjMC41NSwwLDEsMC40NSwxLDF2MUMyMywxNy41NSwyMi41NSwxOCwyMiwxOHogTTUuODgsMThoMi42NiBsMy40LTUuNDJoMC4xMmwzLjQsNS40MmgyLjY2bC00LjY1LTcuMjdMMTcuODEsNGgtMi42OGwtMy4wNyw0Ljk5aC0wLjEyTDguODUsNEg2LjE5bDQuMzIsNi43M0w1Ljg4LDE4elwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IEhlYWRpbmdJY29uID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgd2lkdGg9XCIzMFwiXG4gICAgaGVpZ2h0PVwiMjhcIlxuICAgIHZpZXdCb3g9XCIwIDAgMzAgMjhcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICBzdHlsZT17eyB3aWR0aDogJzIwcHgnLCBoZWlnaHQ6ICcxOHB4JyB9fVxuICA+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjcgNFYyNEgyOUMyOS41IDI0IDMwIDI0LjUgMzAgMjVWMjdDMzAgMjcuNTYyNSAyOS41IDI4IDI5IDI4SDE5QzE4LjQzNzUgMjggMTggMjcuNTYyNSAxOCAyN1YyNUMxOCAyNC41IDE4LjQzNzUgMjQgMTkgMjRIMjFWMTZIOVYyNEgxMUMxMS41IDI0IDEyIDI0LjUgMTIgMjVWMjdDMTIgMjcuNTYyNSAxMS41IDI4IDExIDI4SDFDMC40Mzc1IDI4IDAgMjcuNTYyNSAwIDI3VjI1QzAgMjQuNSAwLjQzNzUgMjQgMSAyNEgzVjRIMUMwLjQzNzUgNCAwIDMuNTYyNSAwIDNWMUMwIDAuNSAwLjQzNzUgMCAxIDBIMTFDMTEuNSAwIDEyIDAuNSAxMiAxVjNDMTIgMy41NjI1IDExLjUgNCAxMSA0SDlWMTJIMjFWNEgxOUMxOC40Mzc1IDQgMTggMy41NjI1IDE4IDNWMUMxOCAwLjUgMTguNDM3NSAwIDE5IDBIMjlDMjkuNSAwIDMwIDAuNSAzMCAxVjNDMzAgMy41NjI1IDI5LjUgNCAyOSA0SDI3WlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IEV4dGVuZGVkVGFibGUgPSBUYWJsZS5leHRlbmQoe1xuICByZW5kZXJIVE1MKHByb3BzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxUYWJsZSA9IHRoaXMucGFyZW50KHByb3BzKTtcblxuICAgIG9yaWdpbmFsVGFibGVbMV0uc3R5bGUgPSBgJHtvcmlnaW5hbFRhYmxlWzFdLnN0eWxlfSB3aWR0aDogMTAwJTtcbiAgICBjb2xvcjogdmFyKC0tcGllLXRleHQsIGJsYWNrKTtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGllLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSkpYDtcbiAgICBvcmlnaW5hbFRhYmxlWzFdLmJvcmRlciA9ICcxJztcblxuICAgIHJldHVybiBvcmlnaW5hbFRhYmxlO1xuICB9LFxufSk7XG5cbmNvbnN0IHN0eWxlcyA9ICh0aGVtZSkgPT4gKHtcbiAgcm9vdDoge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHBhZGRpbmc6ICcwcHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjY2NjJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3RleHQnLFxuICAgICcmIFtkYXRhLXNsYXRlLWVkaXRvcj1cInRydWVcIl0nOiB7XG4gICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICBtYXhIZWlnaHQ6ICc1MDBweCcsXG4gICAgICAvLyBuZWVkZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwdXQgdGhlIGZvY3VzIGJlZm9yZSBhIHZvaWQgZWxlbWVudCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGVkaXRvclxuICAgICAgcGFkZGluZzogJzVweCcsXG4gICAgfSxcblxuICAgICcmOmZpcnN0LWNoaWxkJzoge1xuICAgICAgbWFyZ2luVG9wOiAwLFxuICAgIH0sXG5cbiAgICAnJiB1bCwgJiBvbCc6IHtcbiAgICAgIHBhZGRpbmc6ICcwIDFyZW0nLFxuICAgICAgbWFyZ2luOiAnMS4yNXJlbSAxcmVtIDEuMjVyZW0gMC40cmVtJyxcbiAgICB9LFxuXG4gICAgJyYgdWwgbGkgcCwgJiBvbCBsaSBwJzoge1xuICAgICAgbWFyZ2luVG9wOiAnMC4yNWVtJyxcbiAgICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgfSxcblxuICAgICcmIGgxLCAmIGgyLCAmIGgzLCAmIGg0LCAmIGg1LCAmIGg2Jzoge1xuICAgICAgbGluZUhlaWdodDogMS4xLFxuICAgICAgbWFyZ2luVG9wOiAnMi41cmVtJyxcbiAgICAgIHRleHRXcmFwOiAncHJldHR5JyxcbiAgICB9LFxuXG4gICAgJyYgaDEsICYgaDInOiB7XG4gICAgICBtYXJnaW5Ub3A6ICczLjVyZW0nLFxuICAgICAgbWFyZ2luQm90dG9tOiAnMS41cmVtJyxcbiAgICB9LFxuXG4gICAgJyYgaDEnOiB7XG4gICAgICBmb250U2l6ZTogJzEuNHJlbScsXG4gICAgfSxcblxuICAgICcmIGgyJzoge1xuICAgICAgZm9udFNpemU6ICcxLjJyZW0nLFxuICAgIH0sXG5cbiAgICAnJiBoMyc6IHtcbiAgICAgIGZvbnRTaXplOiAnMS4xcmVtJyxcbiAgICB9LFxuXG4gICAgJyYgaDQsICYgaDUsICYgaDYnOiB7XG4gICAgICBmb250U2l6ZTogJzFyZW0nLFxuICAgIH0sXG5cbiAgICAnJiBjb2RlJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tcHVycGxlLWxpZ2h0KScsXG4gICAgICBib3JkZXJSYWRpdXM6ICcwLjRyZW0nLFxuICAgICAgY29sb3I6ICd2YXIoLS1ibGFjayknLFxuICAgICAgZm9udFNpemU6ICcwLjg1cmVtJyxcbiAgICAgIHBhZGRpbmc6ICcwLjI1ZW0gMC4zZW0nLFxuICAgIH0sXG5cbiAgICAnJiBwcmUnOiB7XG4gICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tYmxhY2spJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzAuNXJlbScsXG4gICAgICBjb2xvcjogJ3ZhcigtLXdoaXRlKScsXG4gICAgICBmb250RmFtaWx5OiBcIidKZXRCcmFpbnNNb25vJywgbW9ub3NwYWNlXCIsXG4gICAgICBtYXJnaW46ICcxLjVyZW0gMCcsXG4gICAgICBwYWRkaW5nOiAnMC43NXJlbSAxcmVtJyxcblxuICAgICAgJyYgY29kZSc6IHtcbiAgICAgICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgICAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgICAgICBmb250U2l6ZTogJzAuOHJlbScsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAnJiBibG9ja3F1b3RlJzoge1xuICAgICAgYm9yZGVyTGVmdDogJzNweCBzb2xpZCB2YXIoLS1ncmF5LTMpJyxcbiAgICAgIG1hcmdpbjogJzEuNXJlbSAwJyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAnMXJlbScsXG4gICAgfSxcblxuICAgICcmIGhyJzoge1xuICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgdmFyKC0tZ3JheS0yKScsXG4gICAgICBtYXJnaW46ICcycmVtIDAnLFxuICAgIH0sXG4gIH0sXG4gIGNoaWxkcmVuOiB7XG4gICAgcGFkZGluZzogJzEwcHggMTZweCcsXG4gIH0sXG4gIGVkaXRvckhvbGRlcjoge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHBhZGRpbmc6ICcwcHgnLFxuICAgIC8vIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJhY2tncm91bmQoKSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgbGVmdDogJzAnLFxuICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgaGVpZ2h0OiAnMXB4JyxcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwbXMnLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjQyKScsXG4gICAgfSxcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICByaWdodDogJzAnLFxuICAgICAgYm90dG9tOiAnMCcsXG4gICAgICBoZWlnaHQ6ICcxcHgnLFxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zZm9ybSAyMDBtcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSkgMG1zLCBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGxpbmVhcicsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyxcbiAgICB9LFxuICAgICcmOmZvY3VzJzoge1xuICAgICAgJyY6OmFmdGVyJzoge1xuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnksXG4gICAgICAgIGhlaWdodDogJzJweCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5jb21tb24uYmxhY2ssXG4gICAgICAgIGhlaWdodDogJzJweCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGRpc2FibGVkVW5kZXJsaW5lOiB7XG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICB9LFxuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICB9LFxuICB9LFxuICBkaXNhYmxlZFNjcm9sbGJhcjoge1xuICAgICcmOjotd2Via2l0LXNjcm9sbGJhcic6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICB9LFxuICAgIHNjcm9sbGJhcldpZHRoOiAnbm9uZScsXG4gICAgJy1tcy1vdmVyZmxvdy1zdHlsZSc6ICdub25lJyxcbiAgfSxcbiAgcmVhZE9ubHk6IHtcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGJhY2tncm91bmRTaXplOiAnNXB4IDFweCcsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSknLFxuICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ3JlcGVhdC14JyxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2xlZnQgdG9wJyxcbiAgICB9LFxuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICBib3R0b206ICcwJyxcbiAgICAgIGhlaWdodDogJzFweCcsXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIDIwMG1zIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKSAwbXMsIGJhY2tncm91bmQtY29sb3IgMG1zIGxpbmVhcicsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDApJyxcbiAgICB9LFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgJyY6OmFmdGVyJzoge1xuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuY29tbW9uLmJsYWNrLFxuICAgICAgICBoZWlnaHQ6ICcycHgnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBlZGl0b3JJbkZvY3VzOiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeSxcbiAgICAgIGhlaWdodDogJzJweCcsXG4gICAgfSxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgICcmOjphZnRlcic6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBlcnJvcjoge1xuICAgIGJvcmRlcjogYDJweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUuZXJyb3IubWFpbn0gIWltcG9ydGFudGAsXG4gIH0sXG4gIG5vQm9yZGVyOiB7XG4gICAgYm9yZGVyOiAnbm9uZScsXG4gIH0sXG4gIG5vUGFkZGluZzoge1xuICAgIHBhZGRpbmc6IDAsXG4gIH0sXG4gIHRvb2xiYXJPblRvcDoge1xuICAgIG1hcmdpblRvcDogJzQ1cHgnLFxuICB9LFxufSk7XG5cbmNvbnN0IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgb3B0aW9uczoge30sXG4gIHJlc3BBcmVhVG9vbGJhcjogKCkgPT4ge30sXG4gIG9uSGFuZGxlQXJlYUNoYW5nZTogKCkgPT4ge30sXG59O1xuXG5jb25zdCB2YWx1ZVRvU2l6ZSA9ICh2KSA9PiB7XG4gIGlmICghdikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjYWxjUmVnZXggPSAvXmNhbGNcXCgoLiopXFwpJC87XG5cbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2LmVuZHNXaXRoKCclJykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHYuZW5kc1dpdGgoJ3B4JykgfHxcbiAgICAgIHYuZW5kc1dpdGgoJ3ZoJykgfHxcbiAgICAgIHYuZW5kc1dpdGgoJ3Z3JykgfHxcbiAgICAgIHYuZW5kc1dpdGgoJ2NoJykgfHxcbiAgICAgIHYuZW5kc1dpdGgoJ2VtJykgfHxcbiAgICAgIHYubWF0Y2goY2FsY1JlZ2V4KVxuICAgICkge1xuICAgICAgcmV0dXJuIHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodiwgMTApO1xuICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IHZhbHVlIDogYCR7dmFsdWV9cHhgO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGAke3Z9cHhgO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaXB0YXBDb250YWluZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVkaXRvcixcbiAgICBlZGl0b3JTdGF0ZSxcbiAgICBjbGFzc2VzLFxuICAgIGNoaWxkcmVuLFxuICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgZGlzYWJsZVNjcm9sbGJhcixcbiAgICB0b29sYmFyT3B0cyxcbiAgICByZXNwb25zZUFyZWFQcm9wcyxcbiAgICBhdXRvRm9jdXMsXG4gICAgbWluV2lkdGgsXG4gICAgd2lkdGgsXG4gICAgbWF4V2lkdGgsXG4gICAgbWluSGVpZ2h0LFxuICAgIGhlaWdodCxcbiAgICBtYXhIZWlnaHQsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaG9sZGVyTmFtZXMgPSBjbGFzc05hbWVzKGNsYXNzZXMuZWRpdG9ySG9sZGVyLCB7XG4gICAgW2NsYXNzZXMuZWRpdG9ySW5Gb2N1c106IGVkaXRvclN0YXRlLmlzRm9jdXNlZCxcbiAgICBbY2xhc3Nlcy5yZWFkT25seV06IGVkaXRvclN0YXRlLnJlYWRPbmx5LFxuICAgIFtjbGFzc2VzLmRpc2FibGVkVW5kZXJsaW5lXTogZGlzYWJsZVVuZGVybGluZSxcbiAgICBbY2xhc3Nlcy5kaXNhYmxlZFNjcm9sbGJhcl06IGRpc2FibGVTY3JvbGxiYXIsXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVkaXRvciAmJiBhdXRvRm9jdXMpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuZm9jdXMoJ2VuZCcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZWRpdG9yLCBhdXRvRm9jdXNdKTtcblxuICBjb25zdCBzaXplU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHZhbHVlVG9TaXplKHdpZHRoKSxcbiAgICAgIG1pbldpZHRoOiB2YWx1ZVRvU2l6ZShtaW5XaWR0aCksXG4gICAgICBtYXhXaWR0aDogdmFsdWVUb1NpemUobWF4V2lkdGgpLFxuICAgICAgaGVpZ2h0OiB2YWx1ZVRvU2l6ZShoZWlnaHQpLFxuICAgICAgbWluSGVpZ2h0OiB2YWx1ZVRvU2l6ZShtaW5IZWlnaHQpLFxuICAgICAgbWF4SGVpZ2h0OiB2YWx1ZVRvU2l6ZShtYXhIZWlnaHQpLFxuICAgIH07XG4gIH0sIFttaW5XaWR0aCwgd2lkdGgsIG1heFdpZHRoLCBtaW5IZWlnaHQsIGhlaWdodCwgbWF4SGVpZ2h0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgIHtcbiAgICAgICAgICBbY2xhc3Nlcy5ub0JvcmRlcl06IHRvb2xiYXJPcHRzICYmIHRvb2xiYXJPcHRzLm5vQm9yZGVyLFxuICAgICAgICAgIFtjbGFzc2VzLmVycm9yXTogdG9vbGJhck9wdHMgJiYgdG9vbGJhck9wdHMuZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzZXMucm9vdCxcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgKX1cbiAgICAgIHN0eWxlPXt7IHdpZHRoOiBzaXplU3R5bGUud2lkdGgsIG1pbldpZHRoOiBzaXplU3R5bGUubWluV2lkdGgsIG1heFdpZHRoOiBzaXplU3R5bGUubWF4V2lkdGggfX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aG9sZGVyTmFtZXN9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbY2xhc3Nlcy5ub1BhZGRpbmddOiB0b29sYmFyT3B0cyAmJiB0b29sYmFyT3B0cy5ub1BhZGRpbmcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlcy5jaGlsZHJlbixcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7Lyp7ZWRpdG9yU3RhdGUuaXNGb2N1c2VkICYmIDxNZW51QmFyIGVkaXRvcj17ZWRpdG9yfSAvPn0qL31cbiAgICAgIHsvKjxUb29sYmFyIGVkaXRvcj17ZWRpdG9yfSBlZGl0b3JTdGF0ZT17ZWRpdG9yU3RhdGV9IHBsdWdpbnM9e3BsdWdpbnN9IHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c30gaXNGb2N1c2VkPXtlZGl0b3JTdGF0ZS5pc0ZvY3VzZWR9IC8+Ki99XG4gICAgICB7ZWRpdG9yICYmIChcbiAgICAgICAgPFN0eWxlZE1lbnVCYXJcbiAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICByZXNwb25zZUFyZWFQcm9wcz17cmVzcG9uc2VBcmVhUHJvcHN9XG4gICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IEVkaXRvckNvbnRhaW5lciA9IHdpdGhTdHlsZXMoc3R5bGVzKShUaXB0YXBDb250YWluZXIpO1xuXG5mdW5jdGlvbiBNZW51QmFyKHsgZWRpdG9yLCBjbGFzc2VzLCB0b29sYmFyT3B0czogdG9vbE9wdHMsIHJlc3BvbnNlQXJlYVByb3BzLCBvbkNoYW5nZSB9KSB7XG4gIGNvbnN0IFtzaG93UGlja2VyLCBzZXRTaG93UGlja2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdG9vbGJhck9wdHMgPSB0b29sT3B0cyA/PyB7fTtcbiAgLy8gUmVhZCB0aGUgY3VycmVudCBlZGl0b3IncyBzdGF0ZSwgYW5kIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHdoZW4gaXQgY2hhbmdlc1xuICBjb25zdCBlZGl0b3JTdGF0ZSA9IHVzZUVkaXRvclN0YXRlKHtcbiAgICBlZGl0b3IsXG4gICAgc2VsZWN0b3I6IChjdHgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBjdHguZWRpdG9yPy5zdGF0ZSB8fCB7fTtcblxuICAgICAgbGV0IGN1cnJlbnROb2RlO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IHNlbGVjdGlvbi5ub2RlOyAvLyB0aGUgc2VsZWN0ZWQgbm9kZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXN0b21Ub29sYmFyQWN0aXZlID1cbiAgICAgICAgY3R4LmVkaXRvcj8uaXNBY3RpdmUoJ21hdGgnKSB8fFxuICAgICAgICBjdHguZWRpdG9yPy5pc0FjdGl2ZSgnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnKSB8fFxuICAgICAgICBjdHguZWRpdG9yPy5pc0FjdGl2ZSgnaW1hZ2VVcGxvYWROb2RlJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnROb2RlLFxuICAgICAgICBjdXN0b21Ub29sYmFyQWN0aXZlLFxuICAgICAgICBpc0ZvY3VzZWQ6IGN0eC5lZGl0b3I/LmlzRm9jdXNlZCxcbiAgICAgICAgaXNCb2xkOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdib2xkJykgPz8gZmFsc2UsXG4gICAgICAgIGNhbkJvbGQ6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnRvZ2dsZUJvbGQoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc1RhYmxlOiBjdHguZWRpdG9yLmlzQWN0aXZlKCd0YWJsZScpID8/IGZhbHNlLFxuICAgICAgICBjYW5UYWJsZTpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuaW5zZXJ0VGFibGUoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc0l0YWxpYzogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaXRhbGljJykgPz8gZmFsc2UsXG4gICAgICAgIGNhbkl0YWxpYzpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAudG9nZ2xlSXRhbGljKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgaXNTdHJpa2U6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ3N0cmlrZScpID8/IGZhbHNlLFxuICAgICAgICBjYW5TdHJpa2U6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnRvZ2dsZVN0cmlrZSgpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGlzQ29kZTogY3R4LmVkaXRvci5pc0FjdGl2ZSgnY29kZScpID8/IGZhbHNlLFxuICAgICAgICBjYW5Db2RlOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC50b2dnbGVDb2RlKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuQ2xlYXJNYXJrczpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAudW5zZXRBbGxNYXJrcygpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGlzVW5kZXJsaW5lOiBjdHguZWRpdG9yLmlzQWN0aXZlKCd1bmRlcmxpbmUnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNTdWJTY3JpcHQ6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ3N1YnNjcmlwdCcpID8/IGZhbHNlLFxuICAgICAgICBpc1N1cGVyU2NyaXB0OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdzdXBlcnNjcmlwdCcpID8/IGZhbHNlLFxuICAgICAgICBpc1BhcmFncmFwaDogY3R4LmVkaXRvci5pc0FjdGl2ZSgncGFyYWdyYXBoJykgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzE6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAxIH0pID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmcyOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogMiB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nMzogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDMgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzQ6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiA0IH0pID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmc1OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogNSB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nNjogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDYgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzQnVsbGV0TGlzdDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnYnVsbGV0TGlzdCcpID8/IGZhbHNlLFxuICAgICAgICBpc09yZGVyZWRMaXN0OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdvcmRlcmVkTGlzdCcpID8/IGZhbHNlLFxuICAgICAgICBpc0NvZGVCbG9jazogY3R4LmVkaXRvci5pc0FjdGl2ZSgnY29kZUJsb2NrJykgPz8gZmFsc2UsXG4gICAgICAgIGlzQmxvY2txdW90ZTogY3R4LmVkaXRvci5pc0FjdGl2ZSgnYmxvY2txdW90ZScpID8/IGZhbHNlLFxuICAgICAgICBjYW5VbmRvOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC51bmRvKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuUmVkbzpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAucmVkbygpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICB9O1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBoYXNEb25lQnV0dG9uID0gZmFsc2U7XG4gIGNvbnN0IGF1dG9XaWR0aCA9IGZhbHNlO1xuXG4gIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lcyhjbGFzc2VzLnRvb2xiYXIsIFBJRV9UT09MQkFSX19DTEFTUywge1xuICAgIFtjbGFzc2VzLnRvb2xiYXJXaXRoTm9Eb25lXTogIWhhc0RvbmVCdXR0b24sXG4gICAgW2NsYXNzZXMudG9vbGJhclRvcF06IHRvb2xiYXJPcHRzLnBvc2l0aW9uID09PSAndG9wJyxcbiAgICBbY2xhc3Nlcy50b29sYmFyUmlnaHRdOiB0b29sYmFyT3B0cy5hbGlnbm1lbnQgPT09ICdyaWdodCcsXG4gICAgW2NsYXNzZXMuZm9jdXNlZF06IHRvb2xiYXJPcHRzLmFsd2F5c1Zpc2libGUgfHwgKGVkaXRvclN0YXRlLmlzRm9jdXNlZCAmJiAhZWRpdG9yLl90b29sYmFyT3BlbmVkKSxcbiAgICBbY2xhc3Nlcy5hdXRvV2lkdGhdOiBhdXRvV2lkdGgsXG4gICAgW2NsYXNzZXMuZnVsbFdpZHRoXTogIWF1dG9XaWR0aCxcbiAgICBbY2xhc3Nlcy5oaWRkZW5dOiB0b29sYmFyT3B0cy5pc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IGN1c3RvbVN0eWxlcyA9IHRvb2xiYXJPcHRzLm1pbldpZHRoICE9PSB1bmRlZmluZWQgPyB7IG1pbldpZHRoOiB0b29sYmFyT3B0cy5taW5XaWR0aCB9IDoge307XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e25hbWVzfSBzdHlsZT17eyAuLi5jdXN0b21TdHlsZXMgfX0gb25Nb3VzZURvd249e2hhbmRsZU1vdXNlRG93bn0+XG4gICAgICB7IWVkaXRvclN0YXRlLmN1c3RvbVRvb2xiYXJBY3RpdmUgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5kZWZhdWx0VG9vbGJhcn0gdGFiSW5kZXg9XCIxXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAuaW5zZXJ0VGFibGUoKVxuICAgICAgICAgICAgICAgICAgLnJ1bigpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWVkaXRvclN0YXRlLmNhblRhYmxlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNUYWJsZSB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEdyaWRPbiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAudG9nZ2xlQm9sZCgpXG4gICAgICAgICAgICAgICAgICAucnVuKCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshZWRpdG9yU3RhdGUuY2FuQm9sZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzQm9sZCB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEJvbGQgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAudG9nZ2xlSXRhbGljKClcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshZWRpdG9yU3RhdGUuY2FuSXRhbGljfVxuICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRvclN0YXRlLmlzSXRhbGljfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNJdGFsaWMgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJdGFsaWMgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAudG9nZ2xlU3RyaWtlKClcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshZWRpdG9yU3RhdGUuY2FuU3RyaWtlfVxuICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRvclN0YXRlLmlzU3RyaWtlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNTdHJpa2UgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdHJpa2V0aHJvdWdoIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnRvZ2dsZUNvZGUoKVxuICAgICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFlZGl0b3JTdGF0ZS5jYW5Db2RlfVxuICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRvclN0YXRlLmlzQ29kZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzQ29kZSB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPENvZGUgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgey8qPGJ1dHRvbiovfVxuICAgICAgICAgICAgey8qICBvbkNsaWNrPXsoKSA9PiovfVxuICAgICAgICAgICAgey8qICAgIGVkaXRvciovfVxuICAgICAgICAgICAgey8qICAgICAgLmNoYWluKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5mb2N1cygpKi99XG4gICAgICAgICAgICB7LyogICAgICAudW5zZXRBbGxNYXJrcygpKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICBDbGVhciBtYXJrcyovfVxuICAgICAgICAgICAgey8qPC9idXR0b24+Ki99XG4gICAgICAgICAgICB7Lyo8YnV0dG9uKi99XG4gICAgICAgICAgICB7LyogIG9uQ2xpY2s9eygpID0+Ki99XG4gICAgICAgICAgICB7LyogICAgZWRpdG9yKi99XG4gICAgICAgICAgICB7LyogICAgICAuY2hhaW4oKSovfVxuICAgICAgICAgICAgey8qICAgICAgLmZvY3VzKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jbGVhck5vZGVzKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5ydW4oKSovfVxuICAgICAgICAgICAgey8qICB9Ki99XG4gICAgICAgICAgICB7Lyo+Ki99XG4gICAgICAgICAgICB7LyogIENsZWFyIG5vZGVzKi99XG4gICAgICAgICAgICB7Lyo8L2J1dHRvbj4qL31cbiAgICAgICAgICAgIHsvKjxidXR0b24qL31cbiAgICAgICAgICAgIHsvKiAgb25DbGljaz17KCkgPT4qL31cbiAgICAgICAgICAgIHsvKiAgICBlZGl0b3IqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jaGFpbigpKi99XG4gICAgICAgICAgICB7LyogICAgICAuZm9jdXMoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnNldFBhcmFncmFwaCgpKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qICBjbGFzc05hbWU9e2VkaXRvclN0YXRlLmlzUGFyYWdyYXBoID8gY2xhc3Nlcy5pc0FjdGl2ZSA6ICcnfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICBQYXJhZ3JhcGgqL31cbiAgICAgICAgICAgIHsvKjwvYnV0dG9uPiovfVxuICAgICAgICAgICAgey8qPGJ1dHRvbiovfVxuICAgICAgICAgICAgey8qICBvbkNsaWNrPXsoKSA9PiovfVxuICAgICAgICAgICAgey8qICAgIGVkaXRvciovfVxuICAgICAgICAgICAgey8qICAgICAgLmNoYWluKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5mb2N1cygpKi99XG4gICAgICAgICAgICB7LyogICAgICAudG9nZ2xlSGVhZGluZyh7IGxldmVsOiAxIH0pKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qICBjbGFzc05hbWU9e2VkaXRvclN0YXRlLmlzSGVhZGluZzEgPyBjbGFzc2VzLmlzQWN0aXZlIDogJyd9Ki99XG4gICAgICAgICAgICB7Lyo+Ki99XG4gICAgICAgICAgICB7LyogIEgxKi99XG4gICAgICAgICAgICB7Lyo8L2J1dHRvbj4qL31cbiAgICAgICAgICAgIHsvKjxidXR0b24qL31cbiAgICAgICAgICAgIHsvKiAgb25DbGljaz17KCkgPT4qL31cbiAgICAgICAgICAgIHsvKiAgICBlZGl0b3IqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jaGFpbigpKi99XG4gICAgICAgICAgICB7LyogICAgICAuZm9jdXMoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KSovfVxuICAgICAgICAgICAgey8qICAgICAgLnJ1bigpKi99XG4gICAgICAgICAgICB7LyogIH0qL31cbiAgICAgICAgICAgIHsvKiAgY2xhc3NOYW1lPXtlZGl0b3JTdGF0ZS5pc0hlYWRpbmcyID8gY2xhc3Nlcy5pc0FjdGl2ZSA6ICcnfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICBIMiovfVxuICAgICAgICAgICAgey8qPC9idXR0b24+Ki99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgICAgICAgIC50b2dnbGVVbmRlcmxpbmUoKVxuICAgICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzVW5kZXJsaW5lIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VW5kZXJsaW5lIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnRvZ2dsZVN1YnNjcmlwdCgpXG4gICAgICAgICAgICAgICAgICAucnVuKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNTdWJTY3JpcHQgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdWJzY3JpcHRJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnRvZ2dsZVN1cGVyc2NyaXB0KClcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLmJ1dHRvbiwgeyBbY2xhc3Nlcy5hY3RpdmVdOiBlZGl0b3JTdGF0ZS5pc1N1cGVyU2NyaXB0IH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3VwZXJzY3JpcHRJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnNldEltYWdlVXBsb2FkTm9kZSgpXG4gICAgICAgICAgICAgICAgICAucnVuKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNTdXBlclNjcmlwdCB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEltYWdlSWNvbiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgICAgICAgIC5pbnNlcnRNZWRpYSh7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogJ3ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAucnVuKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGhlYXRlcnNJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLmluc2VydE1lZGlhKHtcbiAgICAgICAgICAgICAgICAgICAgdGFnOiAnYXVkaW8nLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLmJ1dHRvbil9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWb2x1bWVVcEljb24gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5vcGVuQ1NTQ2xhc3NEaWFsb2coKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLmJ1dHRvbil9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDU1NJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KVxuICAgICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzSGVhZGluZzMgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxIZWFkaW5nSWNvbiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB7Lyo8YnV0dG9uKi99XG4gICAgICAgICAgICB7LyogIG9uQ2xpY2s9eygpID0+Ki99XG4gICAgICAgICAgICB7LyogICAgZWRpdG9yKi99XG4gICAgICAgICAgICB7LyogICAgICAuY2hhaW4oKSovfVxuICAgICAgICAgICAgey8qICAgICAgLmZvY3VzKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDMgfSkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5ydW4oKSovfVxuICAgICAgICAgICAgey8qICB9Ki99XG4gICAgICAgICAgICB7LyogIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLmJ1dHRvbiwgeyBbY2xhc3Nlcy5hY3RpdmVdOiBlZGl0b3JTdGF0ZS5pc0hlYWRpbmczIH0pfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICA8SW1hZ2UgLz4qL31cbiAgICAgICAgICAgIHsvKjwvYnV0dG9uPiovfVxuICAgICAgICAgICAgey8qPGJ1dHRvbiovfVxuICAgICAgICAgICAgey8qICBvbkNsaWNrPXsoKSA9PiovfVxuICAgICAgICAgICAgey8qICAgIGVkaXRvciovfVxuICAgICAgICAgICAgey8qICAgICAgLmNoYWluKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5mb2N1cygpKi99XG4gICAgICAgICAgICB7LyogICAgICAudG9nZ2xlSGVhZGluZyh7IGxldmVsOiA0IH0pKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qICBjbGFzc05hbWU9e2VkaXRvclN0YXRlLmlzSGVhZGluZzQgPyBjbGFzc2VzLmlzQWN0aXZlIDogJyd9Ki99XG4gICAgICAgICAgICB7Lyo+Ki99XG4gICAgICAgICAgICB7LyogIEg0Ki99XG4gICAgICAgICAgICB7Lyo8L2J1dHRvbj4qL31cbiAgICAgICAgICAgIHsvKjxidXR0b24qL31cbiAgICAgICAgICAgIHsvKiAgb25DbGljaz17KCkgPT4qL31cbiAgICAgICAgICAgIHsvKiAgICBlZGl0b3IqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jaGFpbigpKi99XG4gICAgICAgICAgICB7LyogICAgICAuZm9jdXMoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogNSB9KSovfVxuICAgICAgICAgICAgey8qICAgICAgLnJ1bigpKi99XG4gICAgICAgICAgICB7LyogIH0qL31cbiAgICAgICAgICAgIHsvKiAgY2xhc3NOYW1lPXtlZGl0b3JTdGF0ZS5pc0hlYWRpbmc1ID8gY2xhc3Nlcy5pc0FjdGl2ZSA6ICcnfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICBINSovfVxuICAgICAgICAgICAgey8qPC9idXR0b24+Ki99XG4gICAgICAgICAgICB7Lyo8YnV0dG9uKi99XG4gICAgICAgICAgICB7LyogIG9uQ2xpY2s9eygpID0+Ki99XG4gICAgICAgICAgICB7LyogICAgZWRpdG9yKi99XG4gICAgICAgICAgICB7LyogICAgICAuY2hhaW4oKSovfVxuICAgICAgICAgICAgey8qICAgICAgLmZvY3VzKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDYgfSkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5ydW4oKSovfVxuICAgICAgICAgICAgey8qICB9Ki99XG4gICAgICAgICAgICB7LyogIGNsYXNzTmFtZT17ZWRpdG9yU3RhdGUuaXNIZWFkaW5nNiA/IGNsYXNzZXMuaXNBY3RpdmUgOiAnJ30qL31cbiAgICAgICAgICAgIHsvKj4qL31cbiAgICAgICAgICAgIHsvKiAgSDYqL31cbiAgICAgICAgICAgIHsvKjwvYnV0dG9uPiovfVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAuaW5zZXJ0TWF0aCgnJylcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGdW5jdGlvbnMgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UGlja2VyKHNwYW5pc2hDb25maWcpfSBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPENoYXJhY3Rlckljb24gbGV0dGVyPVwiw7FcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldFNob3dQaWNrZXIoc3BlY2lhbENvbmZpZyl9IGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259PlxuICAgICAgICAgICAgICA8Q2hhcmFjdGVySWNvbiBsZXR0ZXI9XCLigqxcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHt9fSBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPFRleHRBbGlnbkljb24gZWRpdG9yPXtlZGl0b3J9IC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgLnRvZ2dsZUJ1bGxldExpc3QoKVxuICAgICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzQnVsbGV0TGlzdCB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEJ1bGxldGVkTGlzdEljb24gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAudG9nZ2xlT3JkZXJlZExpc3QoKVxuICAgICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGVkaXRvclN0YXRlLmlzT3JkZXJlZExpc3QgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxOdW1iZXJlZExpc3RJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIHsvKjxidXR0b24qL31cbiAgICAgICAgICAgIHsvKiAgb25DbGljaz17KCkgPT4qL31cbiAgICAgICAgICAgIHsvKiAgICBlZGl0b3IqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jaGFpbigpKi99XG4gICAgICAgICAgICB7LyogICAgICAuZm9jdXMoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnRvZ2dsZUNvZGVCbG9jaygpKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNDb2RlQmxvY2sgfSl9Ki99XG4gICAgICAgICAgICB7Lyo+Ki99XG4gICAgICAgICAgICB7LyogIENvZGUgYmxvY2sqL31cbiAgICAgICAgICAgIHsvKjwvYnV0dG9uPiovfVxuICAgICAgICAgICAgey8qPGJ1dHRvbiovfVxuICAgICAgICAgICAgey8qICBvbkNsaWNrPXsoKSA9PiovfVxuICAgICAgICAgICAgey8qICAgIGVkaXRvciovfVxuICAgICAgICAgICAgey8qICAgICAgLmNoYWluKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5mb2N1cygpKi99XG4gICAgICAgICAgICB7LyogICAgICAudG9nZ2xlQmxvY2txdW90ZSgpKi99XG4gICAgICAgICAgICB7LyogICAgICAucnVuKCkqL31cbiAgICAgICAgICAgIHsvKiAgfSovfVxuICAgICAgICAgICAgey8qICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogZWRpdG9yU3RhdGUuaXNCbG9ja3F1b3RlIH0pfSovfVxuICAgICAgICAgICAgey8qPiovfVxuICAgICAgICAgICAgey8qICBCbG9ja3F1b3RlKi99XG4gICAgICAgICAgICB7Lyo8L2J1dHRvbj4qL31cbiAgICAgICAgICAgIHsvKjxidXR0b24qL31cbiAgICAgICAgICAgIHsvKiAgb25DbGljaz17KCkgPT4qL31cbiAgICAgICAgICAgIHsvKiAgICBlZGl0b3IqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5jaGFpbigpKi99XG4gICAgICAgICAgICB7LyogICAgICAuZm9jdXMoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnNldEhvcml6b250YWxSdWxlKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5ydW4oKSovfVxuICAgICAgICAgICAgey8qICB9Ki99XG4gICAgICAgICAgICB7Lyo+Ki99XG4gICAgICAgICAgICB7LyogIEhvcml6b250YWwgcnVsZSovfVxuICAgICAgICAgICAgey8qPC9idXR0b24+Ki99XG4gICAgICAgICAgICB7Lyo8YnV0dG9uKi99XG4gICAgICAgICAgICB7LyogIG9uQ2xpY2s9eygpID0+Ki99XG4gICAgICAgICAgICB7LyogICAgZWRpdG9yKi99XG4gICAgICAgICAgICB7LyogICAgICAuY2hhaW4oKSovfVxuICAgICAgICAgICAgey8qICAgICAgLmZvY3VzKCkqL31cbiAgICAgICAgICAgIHsvKiAgICAgIC5zZXRIYXJkQnJlYWsoKSovfVxuICAgICAgICAgICAgey8qICAgICAgLnJ1bigpKi99XG4gICAgICAgICAgICB7LyogIH0qL31cbiAgICAgICAgICAgIHsvKj4qL31cbiAgICAgICAgICAgIHsvKiAgSGFyZCBicmVhayovfVxuICAgICAgICAgICAgey8qPC9idXR0b24+Ki99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgICAgICAgIC51bmRvKClcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshZWRpdG9yU3RhdGUuY2FuVW5kb31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLmJ1dHRvbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFVuZG8gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAucmVkbygpXG4gICAgICAgICAgICAgICAgICAucnVuKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWVkaXRvclN0YXRlLmNhblJlZG99XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxSZWRvIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgICAgICAuaW5zZXJ0UmVzcG9uc2VBcmVhKHJlc3BvbnNlQXJlYVByb3BzLnR5cGUpXG4gICAgICAgICAgICAgICAgLnJ1bigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRvb2xiYXJJY29uIC8+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8RG9uZUJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBvbkNoYW5nZT8uKGVkaXRvci5nZXRIVE1MKCkpO1xuICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuYmx1cigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7c2hvd1BpY2tlciAmJiAoXG4gICAgICAgIDxDaGFyYWN0ZXJQaWNrZXJcbiAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICBvcHRzPXt7XG4gICAgICAgICAgICAuLi5zaG93UGlja2VyLFxuICAgICAgICAgICAgcmVuZGVyUG9wT3ZlcjogKGV2LCBjaCkgPT4gY29uc29sZS5sb2coJ1Nob3cgcG9wb3ZlcicsIGNoKSxcbiAgICAgICAgICAgIGNsb3NlUG9wT3ZlcjogKCkgPT4gY29uc29sZS5sb2coJ0Nsb3NlIHBvcG92ZXInKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dQaWNrZXIoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGUgPSAodGhlbWUpID0+ICh7XG4gIGRlZmF1bHRUb29sYmFyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbiAgYnV0dG9uc0NvbnRhaW5lcjoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBjb2xvcjogJ2dyZXknLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgcGFkZGluZzogJzJweCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgfSxcbiAgICAnJjpmb2N1cyc6IHtcbiAgICAgIG91dGxpbmU6IGAycHggc29saWQgJHt0aGVtZS5wYWxldHRlLmdyZXlbNzAwXX1gLFxuICAgIH0sXG4gIH0sXG4gIGFjdGl2ZToge1xuICAgIGNvbG9yOiAnYmxhY2snLFxuICB9LFxuICBkaXNhYmxlZDoge1xuICAgIG9wYWNpdHk6IDAuNyxcbiAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCcsXG4gICAgJyYgOmhvdmVyJzoge1xuICAgICAgY29sb3I6ICdncmV5JyxcbiAgICB9LFxuICB9LFxuICBpc0FjdGl2ZToge1xuICAgIGJhY2tncm91bmQ6ICd2YXIoLS1wdXJwbGUpJyxcbiAgICBjb2xvcjogJ3ZhcigtLXdoaXRlKScsXG4gIH0sXG4gIHRvb2xiYXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB6SW5kZXg6IDIwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYmFja2dyb3VuZDogJ3ZhcigtLWVkaXRhYmxlLWh0bWwtdG9vbGJhci1iZywgI2VmZWZlZiknLFxuICAgIG1pbldpZHRoOiAnMjgwcHgnLFxuICAgIG1hcmdpbjogJzVweCAwIDAgMCcsXG4gICAgcGFkZGluZzogJzJweCcsXG4gICAgYm94U2hhZG93OlxuICAgICAgJzBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgfSxcbiAgdG9vbGJhcldpdGhOb0RvbmU6IHtcbiAgICBtaW5XaWR0aDogJzI2NXB4JyxcbiAgfSxcbiAgdG9vbGJhclRvcDoge1xuICAgIHRvcDogJy00NXB4JyxcbiAgfSxcbiAgdG9vbGJhclJpZ2h0OiB7XG4gICAgcmlnaHQ6IDAsXG4gIH0sXG4gIGZ1bGxXaWR0aDoge1xuICAgIHdpZHRoOiAnMTAwJScsXG4gIH0sXG4gIGhpZGRlbjoge1xuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICB9LFxuICBhdXRvV2lkdGg6IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICB9LFxuICBmb2N1c2VkOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIH0sXG4gIGljb25Sb290OiB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nOiAnNHB4JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJyxcbiAgfSxcbiAgbGFiZWw6IHtcbiAgICBjb2xvcjogJ3ZhcigtLWVkaXRhYmxlLWh0bWwtdG9vbGJhci1jaGVjaywgIzAwYmIwMCknLFxuICB9LFxuICBzaGFyZWQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gIH0sXG59KTtcbmNvbnN0IFN0eWxlZE1lbnVCYXIgPSB3aXRoU3R5bGVzKHN0eWxlLCB7IGluZGV4OiAxMDAwIH0pKE1lbnVCYXIpO1xuXG5jb25zdCBkZWZhdWx0VG9vbGJhck9wdHMgPSB7XG4gIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgYWxpZ25tZW50OiAnbGVmdCcsXG4gIGFsd2F5c1Zpc2libGU6IGZhbHNlLFxuICBzaG93RG9uZTogdHJ1ZSxcbiAgZG9uZU9uOiAnYmx1cicsXG59O1xuXG5leHBvcnQgY29uc3QgRWRpdGFibGVIdG1sID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtwZW5kaW5nSW1hZ2VzLCBzZXRQZW5kaW5nSW1hZ2VzXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW3NjaGVkdWxlZCwgc2V0U2NoZWR1bGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyBjbGFzc2VzLCB0b29sYmFyT3B0cyB9ID0gcHJvcHM7XG4gIGNvbnN0IHRvb2xiYXJPcHRzVG9Vc2UgPSB7XG4gICAgLi4uZGVmYXVsdFRvb2xiYXJPcHRzLFxuICAgIC4uLnRvb2xiYXJPcHRzLFxuICB9O1xuICBjb25zdCBleHRlbnNpb25zID0gW1xuICAgIFRleHRTdHlsZUtpdCxcbiAgICBTdGFydGVyS2l0LFxuICAgIEV4dGVuZGVkVGFibGUsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVIZWFkZXIsXG4gICAgVGFibGVDZWxsLFxuICAgIFJlc3BvbnNlQXJlYUV4dGVuc2lvbixcbiAgICBFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2VOb2RlLmNvbmZpZ3VyZShwcm9wcy5yZXNwb25zZUFyZWFQcm9wcyksXG4gICAgRHJhZ0luVGhlQmxhbmtOb2RlLmNvbmZpZ3VyZShwcm9wcy5yZXNwb25zZUFyZWFQcm9wcyksXG4gICAgSW5saW5lRHJvcGRvd25Ob2RlLmNvbmZpZ3VyZShwcm9wcy5yZXNwb25zZUFyZWFQcm9wcyksXG4gICAgTWF0aE5vZGUuY29uZmlndXJlKHtcbiAgICAgIHRvb2xiYXJPcHRzOiB0b29sYmFyT3B0c1RvVXNlLFxuICAgIH0pLFxuICAgIFN1YlNjcmlwdCxcbiAgICBTdXBlclNjcmlwdCxcbiAgICBUZXh0QWxpZ24uY29uZmlndXJlKHtcbiAgICAgIHR5cGVzOiBbJ2hlYWRpbmcnLCAncGFyYWdyYXBoJ10sXG4gICAgICBhbGlnbm1lbnRzOiBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ10sXG4gICAgfSksXG4gICAgSW1hZ2UsXG4gICAgSW1hZ2VVcGxvYWROb2RlLmNvbmZpZ3VyZSh7XG4gICAgICB0b29sYmFyT3B0czogdG9vbGJhck9wdHNUb1VzZSxcbiAgICAgIGltYWdlSGFuZGxpbmc6IHtcbiAgICAgICAgZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9uczogcHJvcHMuZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucyxcbiAgICAgICAgb25EZWxldGU6XG4gICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0ICYmXG4gICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmRlbGV0ZSAmJlxuICAgICAgICAgICgobm9kZSwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzcmMgfSA9IG5vZGUuYXR0cnM7XG5cbiAgICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydC5kZWxldGUoc3JjLCAoZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdQZW5kaW5nSW1hZ2VzID0gcGVuZGluZ0ltYWdlcy5maWx0ZXIoKGltZykgPT4gaW1nLmtleSAhPT0gbm9kZS5rZXkpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nSW1hZ2VzOiBuZXdQZW5kaW5nSW1hZ2VzLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZDogc2NoZWR1bGVkICYmIG5ld1BlbmRpbmdJbWFnZXMubGVuZ3RoID09PSAwID8gZmFsc2UgOiBzY2hlZHVsZWQsXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc2V0UGVuZGluZ0ltYWdlcyhuZXdTdGF0ZS5wZW5kaW5nSW1hZ2VzKTtcbiAgICAgICAgICAgICAgc2V0U2NoZWR1bGVkKG5ld1N0YXRlLnNjaGVkdWxlZCk7XG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICBpbnNlcnRJbWFnZVJlcXVlc3RlZDpcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQgJiZcbiAgICAgICAgICAoKGFkZGVkSW1hZ2UsIGdldEhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9uRmluaXNoID0gKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgY2I7XG5cbiAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlZCAmJiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAvLyBmaW5pc2ggZWRpdGluZyBvbmx5IG9uIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICBjYiA9IHByb3BzLm9uQ2hhbmdlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgbmV3UGVuZGluZ0ltYWdlcyA9IHBlbmRpbmdJbWFnZXMuZmlsdGVyKChpbWcpID0+IGltZy5rZXkgIT09IGFkZGVkSW1hZ2Uua2V5KTtcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ0ltYWdlczogbmV3UGVuZGluZ0ltYWdlcyxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobmV3UGVuZGluZ0ltYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdTdGF0ZS5zY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNldFBlbmRpbmdJbWFnZXMobmV3U3RhdGUucGVuZGluZ0ltYWdlcyk7XG4gICAgICAgICAgICAgIHNldFNjaGVkdWxlZChuZXdTdGF0ZS5zY2hlZHVsZWQpO1xuICAgICAgICAgICAgICBjYj8uKGVkaXRvci5nZXRIVE1MKCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogVGhlIGhhbmRsZXIgaXMgdGhlIG9iamVjdCB0aHJvdWdoIHdoaWNoIHRoZSBvdXRlciBjb250ZXh0XG4gICAgICAgICAgICAgICAqIGNvbW11bmljYXRlcyBmaWxlIHVwbG9hZCBldmVudHMgbGlrZTogZmlsZUNob3NlbiwgY2FuY2VsLCBwcm9ncmVzc1xuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGdldEhhbmRsZXIob25GaW5pc2gpO1xuICAgICAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuYWRkKGhhbmRsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2V0UGVuZGluZ0ltYWdlcyhbLi4ucGVuZGluZ0ltYWdlcywgYWRkZWRJbWFnZV0pO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgbWF4SW1hZ2VXaWR0aDogcHJvcHMubWF4SW1hZ2VXaWR0aCxcbiAgICAgICAgbWF4SW1hZ2VIZWlnaHQ6IHByb3BzLm1heEltYWdlSGVpZ2h0LFxuICAgICAgfSxcbiAgICAgIGxpbWl0OiAzLFxuICAgIH0pLFxuICAgIE1lZGlhLmNvbmZpZ3VyZSh7XG4gICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ6IHByb3BzLnVwbG9hZFNvdW5kU3VwcG9ydCxcbiAgICB9KSxcbiAgICBDU1NNYXJrLmNvbmZpZ3VyZSh7XG4gICAgICBleHRyYUNTU1J1bGVzOiBwcm9wcy5leHRyYUNTU1J1bGVzXG4gICAgfSksXG4gIF07XG4gIGNvbnN0IGVkaXRvciA9IHVzZUVkaXRvcih7XG4gICAgZXh0ZW5zaW9ucyxcbiAgICBpbW1lZGlhdGVseVJlbmRlcjogZmFsc2UsXG4gICAgY29udGVudDogcHJvcHMubWFya3VwLFxuICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IsIHRyYW5zYWN0aW9uIH0pID0+IHRyYW5zYWN0aW9uLmlzRG9uZSAmJiBwcm9wcy5vbkNoYW5nZT8uKGVkaXRvci5nZXRIVE1MKCkpLFxuICAgIG9uQmx1cjogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIGlmICh0b29sYmFyT3B0c1RvVXNlLmRvbmVPbiA9PT0gJ2JsdXInKSB7XG4gICAgICAgIHByb3BzLm9uQ2hhbmdlPy4oZWRpdG9yLmdldEhUTUwoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wcy5vbkRvbmU/LihlZGl0b3IuZ2V0SFRNTCgpKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1hcmt1cCAhPT0gZWRpdG9yLmdldEhUTUwoKSkge1xuICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQocHJvcHMubWFya3VwLCBmYWxzZSk7IC8vIGZhbHNlID0gZG9u4oCZdCBlbWl0IHVwZGF0ZVxuICAgIH1cbiAgfSwgW3Byb3BzLm1hcmt1cCwgZWRpdG9yXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBEZWZpbmUgeW91ciB2YXJpYWJsZXMgaW4gYSBKUyBvYmplY3RcbiAgICBjb25zdCBjc3NWYXJpYWJsZXMgPSB7XG4gICAgICAnLS13aGl0ZSc6ICcjZmZmJyxcbiAgICAgICctLWJsYWNrJzogJyMyZTJiMjknLFxuICAgICAgJy0tYmxhY2stY29udHJhc3QnOiAnIzExMGYwZScsXG4gICAgICAnLS1ncmF5LTEnOiAncmdiYSg2MSwgMzcsIDIwLCAuMDUpJyxcbiAgICAgICctLWdyYXktMic6ICdyZ2JhKDYxLCAzNywgMjAsIC4wOCknLFxuICAgICAgJy0tZ3JheS0zJzogJ3JnYmEoNjEsIDM3LCAyMCwgLjEyKScsXG4gICAgICAnLS1ncmF5LTQnOiAncmdiYSg1MywgMzgsIDI4LCAuMyknLFxuICAgICAgJy0tZ3JheS01JzogJ3JnYmEoMjgsIDI1LCAyMywgLjYpJyxcbiAgICAgICctLWdyZWVuJzogJyMyMmM1NWUnLFxuICAgICAgJy0tcHVycGxlJzogJyM2YTAwZjUnLFxuICAgICAgJy0tcHVycGxlLWNvbnRyYXN0JzogJyM1ODAwY2MnLFxuICAgICAgJy0tcHVycGxlLWxpZ2h0JzogJ3JnYmEoODgsIDUsIDI1NSwgLjA1KScsXG4gICAgICAnLS15ZWxsb3ctY29udHJhc3QnOiAnI2ZhY2MxNScsXG4gICAgICAnLS15ZWxsb3cnOiAncmdiYSgyNTAsIDIwNCwgMjEsIC40KScsXG4gICAgICAnLS15ZWxsb3ctbGlnaHQnOiAnI2ZmZmFlNScsXG4gICAgICAnLS1yZWQnOiAnI2ZmNWMzMycsXG4gICAgICAnLS1yZWQtbGlnaHQnOiAnI2ZmZWJlNScsXG4gICAgICAnLS1zaGFkb3cnOiBgMHB4IDEycHggMzNweCAwcHggcmdiYSgwLCAwLCAwLCAuMDYpLFxuICAgICAgICAgICAgICAgMHB4IDMuNjE4cHggOS45NDlweCAwcHggcmdiYSgwLCAwLCAwLCAuMDQpYCxcbiAgICB9O1xuXG4gICAgT2JqZWN0LmVudHJpZXMoY3NzVmFyaWFibGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGVkaXRvclN0YXRlID0gdXNlRWRpdG9yU3RhdGUoe1xuICAgIGVkaXRvcixcbiAgICBzZWxlY3RvcjogKGN0eCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNGb2N1c2VkOiBjdHguZWRpdG9yPy5pc0ZvY3VzZWQsXG4gICAgICB9O1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHZhbHVlVG9TaXplID0gKHYpID0+IHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FsY1JlZ2V4ID0gL15jYWxjXFwoKC4qKVxcKSQvO1xuXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHYuZW5kc1dpdGgoJyUnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdi5lbmRzV2l0aCgncHgnKSB8fFxuICAgICAgICB2LmVuZHNXaXRoKCd2aCcpIHx8XG4gICAgICAgIHYuZW5kc1dpdGgoJ3Z3JykgfHxcbiAgICAgICAgdi5lbmRzV2l0aCgnY2gnKSB8fFxuICAgICAgICB2LmVuZHNXaXRoKCdlbScpIHx8XG4gICAgICAgIHYubWF0Y2goY2FsY1JlZ2V4KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IGAke3ZhbHVlfXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3Z9cHhgO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaXplU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IG1pbldpZHRoLCB3aWR0aCwgbWF4V2lkdGgsIG1pbkhlaWdodCwgaGVpZ2h0LCBtYXhIZWlnaHQgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB2YWx1ZVRvU2l6ZSh3aWR0aCksXG4gICAgICBtaW5XaWR0aDogdmFsdWVUb1NpemUobWluV2lkdGgpLFxuICAgICAgbWF4V2lkdGg6IHZhbHVlVG9TaXplKG1heFdpZHRoKSxcbiAgICAgIGhlaWdodDogdmFsdWVUb1NpemUoaGVpZ2h0KSxcbiAgICAgIG1pbkhlaWdodDogdmFsdWVUb1NpemUobWluSGVpZ2h0KSxcbiAgICAgIG1heEhlaWdodDogdmFsdWVUb1NpemUobWF4SGVpZ2h0KSxcbiAgICB9O1xuICB9LCBbcHJvcHNdKTtcblxuICByZXR1cm4gKFxuICAgIDxFZGl0b3JDb250YWluZXIgey4uLnsgLi4ucHJvcHMsIHRvb2xiYXJPcHRzOiB0b29sYmFyT3B0c1RvVXNlIH19IGVkaXRvclN0YXRlPXtlZGl0b3JTdGF0ZX0gZWRpdG9yPXtlZGl0b3J9PlxuICAgICAge2VkaXRvciAmJiAoXG4gICAgICAgIDxFZGl0b3JDb250ZW50XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVN0eWxlLm1pbkhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVN0eWxlLmhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogc2l6ZVN0eWxlLm1heEhlaWdodCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5yb290fVxuICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0VkaXRvckNvbnRhaW5lcj5cbiAgKTtcbn07XG5cbmNvbnN0IFN0eWxlZEVkaXRvciA9IHdpdGhTdHlsZXMoe1xuICByb290OiB7XG4gICAgb3V0bGluZTogJ25vbmUgIWltcG9ydGFudCcsXG4gICAgJyYgLlByb3NlTWlycm9yJzoge1xuICAgICAgb3V0bGluZTogJ25vbmUgIWltcG9ydGFudCcsXG4gICAgICBwb3NpdGlvbjogJ2luaXRpYWwnLFxuICAgIH0sXG4gIH0sXG59KShFZGl0YWJsZUh0bWwpO1xuXG5leHBvcnQgZGVmYXVsdCBTdHlsZWRFZGl0b3I7XG4iXX0=