@pie-lib/rubric 0.28.3-next.2 → 0.28.4-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/authoring.js CHANGED
@@ -1,254 +1,240 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = exports.RubricType = exports.RawAuthoring = exports.PointConfig = void 0;
9
-
10
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
24
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
27
-
28
16
  var _react = _interopRequireDefault(require("react"));
29
-
30
17
  var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
- var _styles = require("@material-ui/core/styles");
33
-
34
- var _classnames = _interopRequireDefault(require("classnames"));
35
-
36
- var _OutlinedInput = _interopRequireDefault(require("@material-ui/core/OutlinedInput"));
37
-
38
- var _InputLabel = _interopRequireDefault(require("@material-ui/core/InputLabel"));
39
-
40
- var _Select = _interopRequireDefault(require("@material-ui/core/Select"));
41
-
42
- var _FormControl = _interopRequireDefault(require("@material-ui/core/FormControl"));
43
-
44
- var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
45
-
18
+ var _styles = require("@mui/material/styles");
19
+ var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
20
+ var _OutlinedInput = _interopRequireDefault(require("@mui/material/OutlinedInput"));
21
+ var _Select = _interopRequireDefault(require("@mui/material/Select"));
22
+ var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
23
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
46
24
  var _times = _interopRequireDefault(require("lodash/times"));
47
-
48
- var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
49
-
50
- var _FormGroup = _interopRequireDefault(require("@material-ui/core/FormGroup"));
51
-
52
- var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
53
-
54
- var _grey = _interopRequireDefault(require("@material-ui/core/colors/grey"));
55
-
56
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
57
-
58
- var _DragIndicator = _interopRequireDefault(require("@material-ui/icons/DragIndicator"));
59
-
60
- var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
61
-
62
- var _reactBeautifulDnd = require("react-beautiful-dnd");
63
-
25
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
26
+ var _FormGroup = _interopRequireDefault(require("@mui/material/FormGroup"));
27
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
28
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
29
+ var _DragIndicator = _interopRequireDefault(require("@mui/icons-material/DragIndicator"));
30
+ var _dnd = require("@hello-pangea/dnd");
64
31
  var _debug = _interopRequireDefault(require("debug"));
65
-
66
32
  var _takeRight = _interopRequireDefault(require("lodash/takeRight"));
67
-
68
33
  var _pointMenu = _interopRequireDefault(require("./point-menu"));
69
-
70
34
  var _range = _interopRequireDefault(require("lodash/range"));
71
-
35
+ var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
72
36
  var _configUi = require("@pie-lib/config-ui");
73
-
74
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
75
-
76
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
77
-
78
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
79
-
80
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
81
-
37
+ var _colors = require("@mui/material/colors");
38
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
39
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
40
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
41
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
82
42
  var log = (0, _debug["default"])('pie-lib:rubric:authoring');
83
-
84
43
  var reorder = function reorder(list, startIndex, endIndex) {
85
44
  var result = Array.from(list);
86
-
87
45
  var _result$splice = result.splice(startIndex, 1),
88
- _result$splice2 = (0, _slicedToArray2["default"])(_result$splice, 1),
89
- removed = _result$splice2[0];
90
-
46
+ _result$splice2 = (0, _slicedToArray2["default"])(_result$splice, 1),
47
+ removed = _result$splice2[0];
91
48
  result.splice(endIndex, 0, removed);
92
49
  return result;
93
50
  };
94
-
95
- var RubricType = _propTypes["default"].shape({
51
+ var RubricType = exports.RubricType = _propTypes["default"].shape({
96
52
  excludeZero: _propTypes["default"].bool,
97
53
  points: _propTypes["default"].arrayOf(_propTypes["default"].string),
98
54
  sampleAnswers: _propTypes["default"].arrayOf(_propTypes["default"].string),
99
55
  maxPoints: _propTypes["default"].number,
100
56
  rubriclessInstruction: _propTypes["default"].string
101
57
  });
102
-
103
- exports.RubricType = RubricType;
104
- var MaxPoints = (0, _styles.withStyles)(function (theme) {
105
- return {
106
- formControl: {
107
- minWidth: '120px',
108
- margin: theme.spacing.unit
109
- }
110
- };
111
- })(function (props) {
58
+ var MaxPoints = function MaxPoints(props) {
112
59
  var value = props.value,
113
- _onChange = props.onChange,
114
- max = props.max,
115
- classes = props.classes;
60
+ _onChange = props.onChange,
61
+ max = props.max;
62
+ var labelId = 'max-points-label';
116
63
  return /*#__PURE__*/_react["default"].createElement(_FormControl["default"], {
117
- className: classes.formControl,
64
+ sx: {
65
+ minWidth: 120,
66
+ m: 1
67
+ },
118
68
  variant: "outlined"
119
69
  }, /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], {
120
- width: 100,
121
- htmlFor: "..."
70
+ id: labelId
122
71
  }, "Max Points"), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
72
+ labelId: labelId,
73
+ label: "Max Points",
123
74
  value: value,
124
75
  onChange: function onChange(e) {
125
76
  return _onChange(e.target.value);
126
77
  },
127
78
  input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
128
- labelWidth: 80
129
- })
79
+ label: "Max Points"
80
+ }),
81
+ MenuProps: {
82
+ transitionDuration: {
83
+ enter: 225,
84
+ exit: 195
85
+ }
86
+ }
130
87
  }, (0, _range["default"])(1, max + 1).map(function (v) {
131
88
  return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
132
89
  key: "".concat(v),
133
90
  value: v
134
91
  }, v);
135
92
  })));
136
- }); // if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed
137
- // if the value is '', the Sample Answer input field will be empty
93
+ };
138
94
 
95
+ // if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed
96
+ // if the value is '', the Sample Answer input field will be empty
139
97
  var checkSampleAnswer = function checkSampleAnswer(sampleAnswer) {
140
98
  return sampleAnswer === null || sampleAnswer === 'null';
141
99
  };
142
-
143
- var PointConfig = (0, _styles.withStyles)(function (theme) {
100
+ var Row = (0, _styles.styled)('div')(function () {
144
101
  return {
145
- pointConfig: {},
146
- row: {
147
- display: 'flex',
148
- width: '100%',
149
- position: 'relative'
150
- },
151
- editor: {
152
- width: '100%',
153
- backgroundColor: "".concat(theme.palette.common.white, " !important")
154
- },
155
- dragIndicator: {
156
- paddingTop: theme.spacing.unit,
157
- color: _grey["default"][500]
158
- },
159
- pointsLabel: {
160
- color: _grey["default"][500],
161
- paddingBottom: theme.spacing.unit,
162
- textTransform: 'uppercase'
163
- },
164
- sampleAnswersEditor: {
165
- paddingLeft: theme.spacing.unit * 3
166
- },
167
- pointMenu: {
168
- position: 'absolute',
169
- right: 0
170
- },
171
- errorText: {
172
- fontSize: theme.typography.fontSize - 2,
173
- color: theme.palette.error.main,
174
- paddingLeft: theme.spacing.unit * 3,
175
- paddingTop: theme.spacing.unit
176
- }
102
+ display: 'flex',
103
+ width: '100%',
104
+ position: 'relative'
105
+ };
106
+ });
107
+ var EditorDiv = (0, _styles.styled)('div')(function (_ref) {
108
+ var theme = _ref.theme;
109
+ return {
110
+ width: '100%',
111
+ backgroundColor: "".concat(theme.palette.common.white)
112
+ };
113
+ });
114
+ var DragIndicatorStyled = (0, _styles.styled)(_DragIndicator["default"])(function (_ref2) {
115
+ var theme = _ref2.theme;
116
+ return {
117
+ paddingTop: theme.spacing(1),
118
+ color: _colors.grey[500]
119
+ };
120
+ });
121
+ var PointsLabel = (0, _styles.styled)(_Typography["default"])(function (_ref3) {
122
+ var theme = _ref3.theme;
123
+ return {
124
+ color: _colors.grey[500],
125
+ paddingBottom: theme.spacing(1),
126
+ textTransform: 'uppercase'
127
+ };
128
+ });
129
+ var SampleAnswersEditor = (0, _styles.styled)('div')(function (_ref4) {
130
+ var theme = _ref4.theme;
131
+ return {
132
+ paddingLeft: theme.spacing(3)
133
+ };
134
+ });
135
+ var ErrorText = (0, _styles.styled)('div')(function (_ref5) {
136
+ var theme = _ref5.theme;
137
+ return {
138
+ fontSize: theme.typography.fontSize - 2,
139
+ color: theme.palette.error.main,
140
+ paddingLeft: theme.spacing(3),
141
+ paddingTop: theme.spacing(1)
142
+ };
143
+ });
144
+ var PointMenuWrapper = (0, _styles.styled)('div')(function () {
145
+ return {
146
+ position: 'absolute',
147
+ right: 0
177
148
  };
178
- })(function (props) {
149
+ });
150
+ var PointConfig = exports.PointConfig = function PointConfig(props) {
179
151
  var points = props.points,
180
- content = props.content,
181
- classes = props.classes,
182
- sampleAnswer = props.sampleAnswer,
183
- _props$mathMlOptions = props.mathMlOptions,
184
- mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions,
185
- error = props.error,
186
- _props$pluginOpts = props.pluginOpts,
187
- pluginOpts = _props$pluginOpts === void 0 ? {} : _props$pluginOpts;
152
+ content = props.content,
153
+ sampleAnswer = props.sampleAnswer,
154
+ _props$mathMlOptions = props.mathMlOptions,
155
+ mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions,
156
+ error = props.error,
157
+ _props$pluginOpts = props.pluginOpts,
158
+ pluginOpts = _props$pluginOpts === void 0 ? {} : _props$pluginOpts;
188
159
  var pointsLabel = "".concat(points, " ").concat(points <= 1 ? 'pt' : 'pts');
189
160
  var showSampleAnswer = checkSampleAnswer(sampleAnswer);
190
- return /*#__PURE__*/_react["default"].createElement("div", {
191
- className: classes.pointConfig
192
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
193
- variant: "overline",
194
- className: classes.pointsLabel
195
- }, pointsLabel), /*#__PURE__*/_react["default"].createElement("div", {
196
- className: classes.row
197
- }, /*#__PURE__*/_react["default"].createElement(_DragIndicator["default"], {
198
- className: classes.dragIndicator
199
- }), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
200
- className: classes.editor,
161
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(PointsLabel, {
162
+ variant: "overline"
163
+ }, pointsLabel), /*#__PURE__*/_react["default"].createElement(Row, null, /*#__PURE__*/_react["default"].createElement(DragIndicatorStyled, null), /*#__PURE__*/_react["default"].createElement(EditorDiv, null, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
201
164
  error: error,
202
165
  pluginProps: pluginOpts,
203
166
  markup: content,
204
167
  onChange: props.onChange,
205
168
  mathMlOptions: mathMlOptions
206
- }), /*#__PURE__*/_react["default"].createElement(_pointMenu["default"], {
207
- classes: {
208
- icon: classes.pointMenu
209
- },
169
+ })), /*#__PURE__*/_react["default"].createElement(PointMenuWrapper, null, /*#__PURE__*/_react["default"].createElement(_pointMenu["default"], {
210
170
  showSampleAnswer: showSampleAnswer,
211
171
  onChange: props.onMenuChange
212
- })), error && /*#__PURE__*/_react["default"].createElement("div", {
213
- className: classes.errorText
214
- }, error), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
215
- className: classes.sampleAnswersEditor
216
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
217
- variant: "overline",
218
- className: classes.dragIndicator
219
- }, "Sample Response"), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
220
- className: classes.editor,
172
+ }))), error && /*#__PURE__*/_react["default"].createElement(ErrorText, null, error), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement(SampleAnswersEditor, null, /*#__PURE__*/_react["default"].createElement(DragIndicatorStyled, {
173
+ as: _Typography["default"],
174
+ variant: "overline"
175
+ }, "Sample Response"), /*#__PURE__*/_react["default"].createElement(EditorDiv, null, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
221
176
  markup: sampleAnswer,
222
177
  pluginProps: pluginOpts,
223
178
  onChange: props.onSampleChange,
224
179
  mathMlOptions: mathMlOptions
225
- })));
180
+ }))));
181
+ };
182
+ var Container = (0, _styles.styled)('div')(function (_ref6) {
183
+ var theme = _ref6.theme;
184
+ return {
185
+ backgroundColor: _colors.grey[200],
186
+ borderWidth: 1,
187
+ borderStyle: 'solid',
188
+ borderColor: _colors.grey[300],
189
+ padding: theme.spacing(2),
190
+ margin: theme.spacing(1)
191
+ };
226
192
  });
227
- exports.PointConfig = PointConfig;
228
-
229
- var RawAuthoring = /*#__PURE__*/function (_React$Component) {
230
- (0, _inherits2["default"])(RawAuthoring, _React$Component);
231
-
232
- var _super = _createSuper(RawAuthoring);
233
-
193
+ var InputContainerWrapper = (0, _styles.styled)('div')(function (_ref7) {
194
+ var theme = _ref7.theme;
195
+ return {
196
+ width: '100%',
197
+ paddingTop: theme.spacing(2),
198
+ marginBottom: theme.spacing(2),
199
+ '& MuiFormControl-root': {
200
+ width: '100%'
201
+ }
202
+ };
203
+ });
204
+ var Rubricless = (0, _styles.styled)('div')(function () {
205
+ return {
206
+ display: 'none'
207
+ };
208
+ });
209
+ var ConfigHolder = (0, _styles.styled)('div')(function (_ref8) {
210
+ var theme = _ref8.theme;
211
+ return {
212
+ paddingTop: theme.spacing(1),
213
+ paddingBottom: theme.spacing(1)
214
+ };
215
+ });
216
+ var RubricTitle = (0, _styles.styled)(_Typography["default"])(function (_ref9) {
217
+ var theme = _ref9.theme;
218
+ return {
219
+ paddingLeft: theme.spacing(1),
220
+ margin: theme.spacing(1)
221
+ };
222
+ });
223
+ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Component) {
234
224
  function RawAuthoring() {
235
225
  var _this;
236
-
237
226
  (0, _classCallCheck2["default"])(this, RawAuthoring);
238
-
239
227
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
240
228
  args[_key] = arguments[_key];
241
229
  }
242
-
243
- _this = _super.call.apply(_super, [this].concat(args));
244
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragEnd", function (result) {
230
+ _this = _callSuper(this, RawAuthoring, [].concat(args));
231
+ (0, _defineProperty2["default"])(_this, "dragEnd", function (result) {
245
232
  if (!result.destination) {
246
233
  return;
247
234
  }
248
-
249
235
  var _this$props = _this.props,
250
- value = _this$props.value,
251
- onChange = _this$props.onChange;
236
+ value = _this$props.value,
237
+ onChange = _this$props.onChange;
252
238
  var points = reorder(value.points, result.source.index, result.destination.index);
253
239
  var sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);
254
240
  onChange(_objectSpread(_objectSpread({}, value), {}, {
@@ -256,23 +242,22 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
256
242
  sampleAnswers: sampleAnswers
257
243
  }));
258
244
  });
259
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeRubriclessInstruction", function (input) {
245
+ (0, _defineProperty2["default"])(_this, "changeRubriclessInstruction", function (input) {
260
246
  var _this$props2 = _this.props,
261
- value = _this$props2.value,
262
- onChange = _this$props2.onChange;
247
+ value = _this$props2.value,
248
+ onChange = _this$props2.onChange;
263
249
  onChange(_objectSpread(_objectSpread({}, value), {}, {
264
250
  rubriclessInstruction: input
265
251
  }));
266
252
  });
267
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxPoints", function (maxPoints) {
253
+ (0, _defineProperty2["default"])(_this, "changeMaxPoints", function (maxPoints) {
268
254
  var _this$props3 = _this.props,
269
- value = _this$props3.value,
270
- onChange = _this$props3.onChange,
271
- rubricless = _this$props3.rubricless;
255
+ value = _this$props3.value,
256
+ onChange = _this$props3.onChange,
257
+ rubricless = _this$props3.rubricless;
272
258
  var currentMax = value.points.length - 1;
273
259
  log('current', currentMax, 'new: ', maxPoints);
274
260
  var points, sampleAnswers;
275
-
276
261
  if (maxPoints > currentMax) {
277
262
  points = (0, _times["default"])(maxPoints - currentMax).map(function () {
278
263
  return '';
@@ -281,13 +266,11 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
281
266
  return null;
282
267
  }).concat(value.sampleAnswers);
283
268
  }
284
-
285
269
  if (maxPoints < currentMax) {
286
270
  log('less than');
287
271
  points = (0, _takeRight["default"])(value.points, maxPoints + 1);
288
272
  sampleAnswers = (0, _takeRight["default"])(value.sampleAnswers, maxPoints + 1);
289
273
  }
290
-
291
274
  if (points && !rubricless) {
292
275
  onChange(_objectSpread(_objectSpread({}, value), {}, {
293
276
  points: points,
@@ -300,31 +283,29 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
300
283
  }));
301
284
  }
302
285
  });
303
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeContent", function (index, content, type) {
286
+ (0, _defineProperty2["default"])(_this, "changeContent", function (index, content, type) {
304
287
  // type could be 'points' or 'sampleAnswers'
305
288
  log("changeModel[".concat(type, "]:"), index, content);
306
-
307
289
  if (type !== 'points' && type !== 'sampleAnswers') {
308
290
  return;
309
291
  }
310
-
311
292
  var _this$props4 = _this.props,
312
- value = _this$props4.value,
313
- onChange = _this$props4.onChange;
293
+ value = _this$props4.value,
294
+ onChange = _this$props4.onChange;
314
295
  var items = value[type] && Array.from(value[type]);
315
296
  items.splice(index, 1, content);
316
297
  log("changeModel[".concat(type, "]:"), items);
317
298
  onChange(_objectSpread(_objectSpread({}, value), {}, (0, _defineProperty2["default"])({}, type, items)));
318
299
  });
319
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "excludeZeros", function () {
300
+ (0, _defineProperty2["default"])(_this, "excludeZeros", function () {
320
301
  var _this$props5 = _this.props,
321
- value = _this$props5.value,
322
- onChange = _this$props5.onChange;
302
+ value = _this$props5.value,
303
+ onChange = _this$props5.onChange;
323
304
  onChange(_objectSpread(_objectSpread({}, value), {}, {
324
305
  excludeZero: !value.excludeZero
325
306
  }));
326
307
  });
327
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "shouldRenderPoint", function (index, value) {
308
+ (0, _defineProperty2["default"])(_this, "shouldRenderPoint", function (index, value) {
328
309
  if (!value.excludeZero) {
329
310
  return true;
330
311
  } else {
@@ -333,15 +314,13 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
333
314
  } else if (index === value.points.length - 1) {
334
315
  return false;
335
316
  }
336
-
337
317
  return true;
338
318
  }
339
319
  });
340
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPointMenuChange", function (index, clickedItem) {
320
+ (0, _defineProperty2["default"])(_this, "onPointMenuChange", function (index, clickedItem) {
341
321
  if (clickedItem === 'sample') {
342
322
  var value = _this.props.value;
343
323
  var sampleAnswers = Array.from(value.sampleAnswers || []);
344
-
345
324
  if (checkSampleAnswer(sampleAnswers[index])) {
346
325
  // an empty string will display an empty Sample Answer input field
347
326
  _this.changeContent(index, '', 'sampleAnswers');
@@ -353,59 +332,49 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
353
332
  });
354
333
  return _this;
355
334
  }
356
-
357
- (0, _createClass2["default"])(RawAuthoring, [{
335
+ (0, _inherits2["default"])(RawAuthoring, _React$Component);
336
+ return (0, _createClass2["default"])(RawAuthoring, [{
358
337
  key: "render",
359
338
  value: function render() {
360
339
  var _this2 = this;
361
-
362
340
  var _this$props6 = this.props,
363
- classes = _this$props6.classes,
364
- className = _this$props6.className,
365
- value = _this$props6.value,
366
- _this$props6$mathMlOp = _this$props6.mathMlOptions,
367
- mathMlOptions = _this$props6$mathMlOp === void 0 ? {} : _this$props6$mathMlOp,
368
- _this$props6$config = _this$props6.config,
369
- config = _this$props6$config === void 0 ? {} : _this$props6$config,
370
- _this$props6$rubricle = _this$props6.rubricless,
371
- rubricless = _this$props6$rubricle === void 0 ? false : _this$props6$rubricle,
372
- _this$props6$pluginOp = _this$props6.pluginOpts,
373
- pluginOpts = _this$props6$pluginOp === void 0 ? {} : _this$props6$pluginOp;
374
-
375
- var _ref = value || {},
376
- _ref$excludeZeroEnabl = _ref.excludeZeroEnabled,
377
- excludeZeroEnabled = _ref$excludeZeroEnabl === void 0 ? true : _ref$excludeZeroEnabl,
378
- _ref$maxPointsEnabled = _ref.maxPointsEnabled,
379
- maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _ref$maxPointsEnabled,
380
- _ref$errors = _ref.errors,
381
- errors = _ref$errors === void 0 ? {} : _ref$errors,
382
- _ref$rubriclessInstru = _ref.rubriclessInstructionEnabled,
383
- rubriclessInstructionEnabled = _ref$rubriclessInstru === void 0 ? false : _ref$rubriclessInstru,
384
- _ref$maxPoints = _ref.maxPoints,
385
- maxPoints = _ref$maxPoints === void 0 ? 10 : _ref$maxPoints; // rubric will contain a max value for maxPoints
386
-
387
-
388
- var _ref2 = config || {},
389
- _ref2$rubriclessInstr = _ref2.rubriclessInstruction,
390
- rubriclessInstruction = _ref2$rubriclessInstr === void 0 ? {} : _ref2$rubriclessInstr,
391
- _ref2$maxMaxPoints = _ref2.maxMaxPoints,
392
- maxMaxPoints = _ref2$maxMaxPoints === void 0 ? 10 : _ref2$maxMaxPoints;
393
-
394
- var _ref3 = errors || {},
395
- pointsDescriptorsErrors = _ref3.pointsDescriptorsErrors;
396
-
341
+ value = _this$props6.value,
342
+ _this$props6$mathMlOp = _this$props6.mathMlOptions,
343
+ mathMlOptions = _this$props6$mathMlOp === void 0 ? {} : _this$props6$mathMlOp,
344
+ _this$props6$config = _this$props6.config,
345
+ config = _this$props6$config === void 0 ? {} : _this$props6$config,
346
+ _this$props6$rubricle = _this$props6.rubricless,
347
+ rubricless = _this$props6$rubricle === void 0 ? false : _this$props6$rubricle,
348
+ _this$props6$pluginOp = _this$props6.pluginOpts,
349
+ pluginOpts = _this$props6$pluginOp === void 0 ? {} : _this$props6$pluginOp;
350
+ var _ref0 = value || {},
351
+ _ref0$excludeZeroEnab = _ref0.excludeZeroEnabled,
352
+ excludeZeroEnabled = _ref0$excludeZeroEnab === void 0 ? true : _ref0$excludeZeroEnab,
353
+ _ref0$maxPointsEnable = _ref0.maxPointsEnabled,
354
+ maxPointsEnabled = _ref0$maxPointsEnable === void 0 ? true : _ref0$maxPointsEnable,
355
+ _ref0$errors = _ref0.errors,
356
+ errors = _ref0$errors === void 0 ? {} : _ref0$errors,
357
+ _ref0$rubriclessInstr = _ref0.rubriclessInstructionEnabled,
358
+ rubriclessInstructionEnabled = _ref0$rubriclessInstr === void 0 ? false : _ref0$rubriclessInstr,
359
+ _ref0$maxPoints = _ref0.maxPoints,
360
+ maxPoints = _ref0$maxPoints === void 0 ? 10 : _ref0$maxPoints;
361
+ // rubric will contain a max value for maxPoints
362
+ var _ref1 = config || {},
363
+ _ref1$rubriclessInstr = _ref1.rubriclessInstruction,
364
+ rubriclessInstruction = _ref1$rubriclessInstr === void 0 ? {} : _ref1$rubriclessInstr,
365
+ _ref1$maxMaxPoints = _ref1.maxMaxPoints,
366
+ maxMaxPoints = _ref1$maxMaxPoints === void 0 ? 10 : _ref1$maxMaxPoints;
367
+ var _ref10 = errors || {},
368
+ pointsDescriptorsErrors = _ref10.pointsDescriptorsErrors;
397
369
  if (value && Number.isFinite(value.maxPoints)) {
398
370
  // eslint-disable-next-line no-console
399
371
  console.warn('maxPoints is deprecated - remove from model');
400
- } // for rubric value is computed based on points
401
-
372
+ }
402
373
 
374
+ // for rubric value is computed based on points
403
375
  var maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;
404
- return /*#__PURE__*/_react["default"].createElement("div", {
405
- className: (0, _classnames["default"])(classes["class"], className)
406
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
407
- variant: "h5",
408
- className: classes.rubricTitle
376
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(RubricTitle, {
377
+ variant: "h5"
409
378
  }, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
410
379
  row: true
411
380
  }, maxPointsEnabled && /*#__PURE__*/_react["default"].createElement(MaxPoints, {
@@ -419,11 +388,9 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
419
388
  checked: value.excludeZero,
420
389
  onChange: this.excludeZeros
421
390
  })
422
- })), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
423
- label: rubriclessInstruction.label,
424
- className: classes.inputContainer
391
+ })), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(InputContainerWrapper, null, /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
392
+ label: rubriclessInstruction.label
425
393
  }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
426
- className: classes.input,
427
394
  markup: value.rubriclessInstruction || '',
428
395
  onChange: this.changeRubriclessInstruction,
429
396
  pluginProps: pluginOpts,
@@ -435,23 +402,20 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
435
402
  language: 'special'
436
403
  }],
437
404
  mathMlOptions: mathMlOptions
438
- })), /*#__PURE__*/_react["default"].createElement("div", {
439
- className: rubricless ? classes.rubricless : classes.container
440
- }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.DragDropContext, {
405
+ }))), /*#__PURE__*/_react["default"].createElement("div", null, rubricless ? /*#__PURE__*/_react["default"].createElement(Rubricless, null) : /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(_dnd.DragDropContext, {
441
406
  onDragEnd: this.dragEnd
442
- }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, {
407
+ }, /*#__PURE__*/_react["default"].createElement(_dnd.Droppable, {
443
408
  droppableId: "droppable"
444
409
  }, function (provided) {
445
410
  return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, provided.droppableProps, {
446
411
  ref: provided.innerRef
447
412
  }), value.points.map(function (p, index) {
448
- return _this2.shouldRenderPoint(index, value) && /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Draggable, {
413
+ return _this2.shouldRenderPoint(index, value) && /*#__PURE__*/_react["default"].createElement(_dnd.Draggable, {
449
414
  key: "".concat(p.points, "-").concat(index),
450
415
  index: index,
451
416
  draggableId: index.toString()
452
417
  }, function (provided) {
453
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
454
- className: classes.configHolder,
418
+ return /*#__PURE__*/_react["default"].createElement(ConfigHolder, (0, _extends2["default"])({
455
419
  ref: provided.innerRef
456
420
  }, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
457
421
  points: value.points.length - 1 - index,
@@ -472,16 +436,11 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
472
436
  }));
473
437
  });
474
438
  }), provided.placeholder);
475
- }))));
439
+ })))));
476
440
  }
477
441
  }]);
478
- return RawAuthoring;
479
- }(_react["default"].Component);
480
-
481
- exports.RawAuthoring = RawAuthoring;
442
+ }(_react["default"].Component); // styles migrated to styled-components above
482
443
  (0, _defineProperty2["default"])(RawAuthoring, "propTypes", {
483
- classes: _propTypes["default"].object.isRequired,
484
- className: _propTypes["default"].string,
485
444
  value: RubricType,
486
445
  config: _propTypes["default"].object,
487
446
  pluginOpts: _propTypes["default"].object,
@@ -489,69 +448,32 @@ exports.RawAuthoring = RawAuthoring;
489
448
  onChange: _propTypes["default"].func
490
449
  });
491
450
  (0, _defineProperty2["default"])(RawAuthoring, "defaultProps", {});
492
-
493
- var styles = function styles(theme) {
494
- return {
495
- container: {
496
- backgroundColor: _grey["default"][200],
497
- borderWidth: 1,
498
- borderStyle: 'solid',
499
- borderColor: _grey["default"][300],
500
- padding: theme.spacing.unit * 2,
501
- margin: theme.spacing.unit
502
- },
503
- inputContainer: {
504
- width: '100%',
505
- paddingTop: theme.spacing.unit * 2,
506
- marginBottom: theme.spacing.unit * 2
507
- },
508
- rubricless: {
509
- display: 'none'
510
- },
511
- configHolder: {
512
- paddingTop: theme.spacing.unit,
513
- paddingBottom: theme.spacing.unit
514
- },
515
- rubricTitle: {
516
- paddingLeft: theme.spacing.unit,
517
- margin: theme.spacing.unit
518
- }
519
- };
520
- };
521
-
522
- var StyledRawAuthoring = (0, _styles.withStyles)(styles)(RawAuthoring);
523
-
524
451
  var Reverse = function Reverse(props) {
525
- var _ref4 = props || {},
526
- _ref4$rubricless = _ref4.rubricless,
527
- rubricless = _ref4$rubricless === void 0 ? false : _ref4$rubricless,
528
- _ref4$config = _ref4.config,
529
- config = _ref4$config === void 0 ? {} : _ref4$config,
530
- _ref4$pluginOpts = _ref4.pluginOpts,
531
- pluginOpts = _ref4$pluginOpts === void 0 ? {} : _ref4$pluginOpts;
532
-
452
+ var _ref11 = props || {},
453
+ _ref11$rubricless = _ref11.rubricless,
454
+ rubricless = _ref11$rubricless === void 0 ? false : _ref11$rubricless,
455
+ _ref11$config = _ref11.config,
456
+ config = _ref11$config === void 0 ? {} : _ref11$config,
457
+ _ref11$pluginOpts = _ref11.pluginOpts,
458
+ pluginOpts = _ref11$pluginOpts === void 0 ? {} : _ref11$pluginOpts;
533
459
  var points = Array.from(props.value.points || []).reverse();
534
460
  var sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
535
-
536
461
  if (points.length > sampleAnswers.length) {
537
462
  sampleAnswers = (0, _times["default"])(points.length - sampleAnswers.length).map(function () {
538
463
  return null;
539
464
  }).concat(sampleAnswers);
540
465
  }
541
-
542
466
  var value = _objectSpread(_objectSpread({}, props.value), {}, {
543
467
  points: points,
544
468
  sampleAnswers: sampleAnswers
545
469
  });
546
-
547
470
  var onChange = function onChange(value) {
548
471
  props.onChange(_objectSpread(_objectSpread({}, value), {}, {
549
472
  points: Array.from(value.points || []).reverse(),
550
473
  sampleAnswers: Array.from(value.sampleAnswers || []).reverse()
551
474
  }));
552
475
  };
553
-
554
- return /*#__PURE__*/_react["default"].createElement(StyledRawAuthoring, {
476
+ return /*#__PURE__*/_react["default"].createElement(RawAuthoring, {
555
477
  value: value,
556
478
  config: config,
557
479
  onChange: onChange,
@@ -559,7 +481,6 @@ var Reverse = function Reverse(props) {
559
481
  pluginOpts: pluginOpts
560
482
  });
561
483
  };
562
-
563
484
  Reverse.propTypes = {
564
485
  value: RubricType,
565
486
  config: _propTypes["default"].object,
@@ -568,6 +489,5 @@ Reverse.propTypes = {
568
489
  getIndex: _propTypes["default"].func,
569
490
  onChange: _propTypes["default"].func
570
491
  };
571
- var _default = Reverse;
572
- exports["default"] = _default;
573
- //# sourceMappingURL=authoring.js.map
492
+ var _default = exports["default"] = Reverse;
493
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX0lucHV0TGFiZWwiLCJfT3V0bGluZWRJbnB1dCIsIl9TZWxlY3QiLCJfRm9ybUNvbnRyb2wiLCJfTWVudUl0ZW0iLCJfdGltZXMiLCJfQ2hlY2tib3giLCJfRm9ybUdyb3VwIiwiX0Zvcm1Db250cm9sTGFiZWwiLCJfVHlwb2dyYXBoeSIsIl9EcmFnSW5kaWNhdG9yIiwiX2RuZCIsIl9kZWJ1ZyIsIl90YWtlUmlnaHQiLCJfcG9pbnRNZW51IiwiX3JhbmdlIiwiX2VkaXRhYmxlSHRtbCIsIl9jb25maWdVaSIsIl9jb2xvcnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImxvZyIsImRlYnVnIiwicmVvcmRlciIsImxpc3QiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJyZXN1bHQiLCJBcnJheSIsImZyb20iLCJfcmVzdWx0JHNwbGljZSIsInNwbGljZSIsIl9yZXN1bHQkc3BsaWNlMiIsIl9zbGljZWRUb0FycmF5MiIsInJlbW92ZWQiLCJSdWJyaWNUeXBlIiwiZXhwb3J0cyIsIlByb3BUeXBlcyIsInNoYXBlIiwiZXhjbHVkZVplcm8iLCJib29sIiwicG9pbnRzIiwiYXJyYXlPZiIsInN0cmluZyIsInNhbXBsZUFuc3dlcnMiLCJtYXhQb2ludHMiLCJudW1iZXIiLCJydWJyaWNsZXNzSW5zdHJ1Y3Rpb24iLCJNYXhQb2ludHMiLCJwcm9wcyIsInZhbHVlIiwib25DaGFuZ2UiLCJtYXgiLCJsYWJlbElkIiwiY3JlYXRlRWxlbWVudCIsInN4IiwibWluV2lkdGgiLCJtIiwidmFyaWFudCIsImlkIiwibGFiZWwiLCJ0YXJnZXQiLCJpbnB1dCIsIk1lbnVQcm9wcyIsInRyYW5zaXRpb25EdXJhdGlvbiIsImVudGVyIiwiZXhpdCIsInJhbmdlIiwibWFwIiwidiIsImtleSIsImNvbmNhdCIsImNoZWNrU2FtcGxlQW5zd2VyIiwic2FtcGxlQW5zd2VyIiwiUm93Iiwic3R5bGVkIiwiZGlzcGxheSIsIndpZHRoIiwicG9zaXRpb24iLCJFZGl0b3JEaXYiLCJfcmVmIiwidGhlbWUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwYWxldHRlIiwiY29tbW9uIiwid2hpdGUiLCJEcmFnSW5kaWNhdG9yU3R5bGVkIiwiRHJhZ0luZGljYXRvciIsIl9yZWYyIiwicGFkZGluZ1RvcCIsInNwYWNpbmciLCJjb2xvciIsImdyZXkiLCJQb2ludHNMYWJlbCIsIlR5cG9ncmFwaHkiLCJfcmVmMyIsInBhZGRpbmdCb3R0b20iLCJ0ZXh0VHJhbnNmb3JtIiwiU2FtcGxlQW5zd2Vyc0VkaXRvciIsIl9yZWY0IiwicGFkZGluZ0xlZnQiLCJFcnJvclRleHQiLCJfcmVmNSIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImVycm9yIiwibWFpbiIsIlBvaW50TWVudVdyYXBwZXIiLCJyaWdodCIsIlBvaW50Q29uZmlnIiwiY29udGVudCIsIl9wcm9wcyRtYXRoTWxPcHRpb25zIiwibWF0aE1sT3B0aW9ucyIsIl9wcm9wcyRwbHVnaW5PcHRzIiwicGx1Z2luT3B0cyIsInBvaW50c0xhYmVsIiwic2hvd1NhbXBsZUFuc3dlciIsInBsdWdpblByb3BzIiwibWFya3VwIiwib25NZW51Q2hhbmdlIiwiYXMiLCJvblNhbXBsZUNoYW5nZSIsIkNvbnRhaW5lciIsIl9yZWY2IiwiYm9yZGVyV2lkdGgiLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwicGFkZGluZyIsIm1hcmdpbiIsIklucHV0Q29udGFpbmVyV3JhcHBlciIsIl9yZWY3IiwibWFyZ2luQm90dG9tIiwiUnVicmljbGVzcyIsIkNvbmZpZ0hvbGRlciIsIl9yZWY4IiwiUnVicmljVGl0bGUiLCJfcmVmOSIsIlJhd0F1dGhvcmluZyIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJkZXN0aW5hdGlvbiIsIl90aGlzJHByb3BzIiwic291cmNlIiwiaW5kZXgiLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczMiLCJydWJyaWNsZXNzIiwiY3VycmVudE1heCIsInRpbWVzIiwidGFrZVJpZ2h0IiwidHlwZSIsIl90aGlzJHByb3BzNCIsIml0ZW1zIiwiX3RoaXMkcHJvcHM1IiwiY2xpY2tlZEl0ZW0iLCJjaGFuZ2VDb250ZW50IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkbWF0aE1sT3AiLCJfdGhpcyRwcm9wczYkY29uZmlnIiwiY29uZmlnIiwiX3RoaXMkcHJvcHM2JHJ1YnJpY2xlIiwiX3RoaXMkcHJvcHM2JHBsdWdpbk9wIiwiX3JlZjAiLCJfcmVmMCRleGNsdWRlWmVyb0VuYWIiLCJleGNsdWRlWmVyb0VuYWJsZWQiLCJfcmVmMCRtYXhQb2ludHNFbmFibGUiLCJtYXhQb2ludHNFbmFibGVkIiwiX3JlZjAkZXJyb3JzIiwiZXJyb3JzIiwiX3JlZjAkcnVicmljbGVzc0luc3RyIiwicnVicmljbGVzc0luc3RydWN0aW9uRW5hYmxlZCIsIl9yZWYwJG1heFBvaW50cyIsIl9yZWYxIiwiX3JlZjEkcnVicmljbGVzc0luc3RyIiwiX3JlZjEkbWF4TWF4UG9pbnRzIiwibWF4TWF4UG9pbnRzIiwiX3JlZjEwIiwicG9pbnRzRGVzY3JpcHRvcnNFcnJvcnMiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNvbnNvbGUiLCJ3YXJuIiwibWF4UG9pbnRzVmFsdWUiLCJyb3ciLCJjaGFuZ2VNYXhQb2ludHMiLCJjb250cm9sIiwiY2hlY2tlZCIsImV4Y2x1ZGVaZXJvcyIsIklucHV0Q29udGFpbmVyIiwiY2hhbmdlUnVicmljbGVzc0luc3RydWN0aW9uIiwibm9uRW1wdHkiLCJkaXNhYmxlVW5kZXJsaW5lIiwibGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMiLCJsYW5ndWFnZSIsIkRyYWdEcm9wQ29udGV4dCIsIm9uRHJhZ0VuZCIsImRyYWdFbmQiLCJEcm9wcGFibGUiLCJkcm9wcGFibGVJZCIsInByb3ZpZGVkIiwiX2V4dGVuZHMyIiwiZHJvcHBhYmxlUHJvcHMiLCJyZWYiLCJpbm5lclJlZiIsInAiLCJzaG91bGRSZW5kZXJQb2ludCIsIkRyYWdnYWJsZSIsImRyYWdnYWJsZUlkIiwidG9TdHJpbmciLCJkcmFnZ2FibGVQcm9wcyIsImRyYWdIYW5kbGVQcm9wcyIsIm9uUG9pbnRNZW51Q2hhbmdlIiwicGxhY2Vob2xkZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsIm9iamVjdCIsImZ1bmMiLCJSZXZlcnNlIiwiX3JlZjExIiwiX3JlZjExJHJ1YnJpY2xlc3MiLCJfcmVmMTEkY29uZmlnIiwiX3JlZjExJHBsdWdpbk9wdHMiLCJyZXZlcnNlIiwicHJvcFR5cGVzIiwiZ2V0SW5kZXgiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hdXRob3JpbmcuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAbXVpL21hdGVyaWFsL0lucHV0TGFiZWwnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnQG11aS9tYXRlcmlhbC9TZWxlY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wnO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0nO1xuaW1wb3J0IHRpbWVzIGZyb20gJ2xvZGFzaC90aW1lcyc7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnQG11aS9tYXRlcmlhbC9DaGVja2JveCc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUdyb3VwJztcbmltcG9ydCBGb3JtQ29udHJvbExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbCc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuaW1wb3J0IERyYWdJbmRpY2F0b3IgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9EcmFnSW5kaWNhdG9yJztcbmltcG9ydCB7IERyYWdEcm9wQ29udGV4dCwgRHJvcHBhYmxlLCBEcmFnZ2FibGUgfSBmcm9tICdAaGVsbG8tcGFuZ2VhL2RuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHRha2VSaWdodCBmcm9tICdsb2Rhc2gvdGFrZVJpZ2h0JztcbmltcG9ydCBQb2ludE1lbnUgZnJvbSAnLi9wb2ludC1tZW51JztcbmltcG9ydCByYW5nZSBmcm9tICdsb2Rhc2gvcmFuZ2UnO1xuaW1wb3J0IEVkaXRhYmxlSHRtbCBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sJztcbmltcG9ydCB7IElucHV0Q29udGFpbmVyIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCB7IGdyZXkgfSBmcm9tICdAbXVpL21hdGVyaWFsL2NvbG9ycyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOnJ1YnJpYzphdXRob3JpbmcnKTtcblxuY29uc3QgcmVvcmRlciA9IChsaXN0LCBzdGFydEluZGV4LCBlbmRJbmRleCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBBcnJheS5mcm9tKGxpc3QpO1xuICBjb25zdCBbcmVtb3ZlZF0gPSByZXN1bHQuc3BsaWNlKHN0YXJ0SW5kZXgsIDEpO1xuXG4gIHJlc3VsdC5zcGxpY2UoZW5kSW5kZXgsIDAsIHJlbW92ZWQpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgUnVicmljVHlwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIGV4Y2x1ZGVaZXJvOiBQcm9wVHlwZXMuYm9vbCxcbiAgcG9pbnRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgc2FtcGxlQW5zd2VyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIG1heFBvaW50czogUHJvcFR5cGVzLm51bWJlcixcbiAgcnVicmljbGVzc0luc3RydWN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxufSk7XG5cbmNvbnN0IE1heFBvaW50cyA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgbWF4IH0gPSBwcm9wcztcbiAgY29uc3QgbGFiZWxJZCA9ICdtYXgtcG9pbnRzLWxhYmVsJztcblxuICByZXR1cm4gKFxuICAgIDxGb3JtQ29udHJvbCBzeD17eyBtaW5XaWR0aDogMTIwLCBtOiAxIH19IHZhcmlhbnQ9XCJvdXRsaW5lZFwiPlxuICAgICAgPElucHV0TGFiZWwgaWQ9e2xhYmVsSWR9Pk1heCBQb2ludHM8L0lucHV0TGFiZWw+XG4gICAgICA8U2VsZWN0XG4gICAgICAgIGxhYmVsSWQ9e2xhYmVsSWR9XG4gICAgICAgIGxhYmVsPVwiTWF4IFBvaW50c1wiXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBvbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgIGlucHV0PXs8T3V0bGluZWRJbnB1dCBsYWJlbD1cIk1heCBQb2ludHNcIiAvPn1cbiAgICAgICAgTWVudVByb3BzPXt7IHRyYW5zaXRpb25EdXJhdGlvbjogeyBlbnRlcjogMjI1LCBleGl0OiAxOTUgfSB9fVxuICAgICAgPlxuICAgICAgICB7cmFuZ2UoMSwgbWF4ICsgMSkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPE1lbnVJdGVtIGtleT17YCR7dn1gfSB2YWx1ZT17dn0+XG4gICAgICAgICAgICB7dn1cbiAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0PlxuICAgIDwvRm9ybUNvbnRyb2w+XG4gICk7XG59O1xuXG4vLyBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciAnbnVsbCcsIHRoZSBTYW1wbGUgQW5zd2VyIGlucHV0IGZpZWxkIGZvciB0aGF0IHBvaW50IHdpbGwgbm90IGJlIGRpc3BhbHllZFxuLy8gaWYgdGhlIHZhbHVlIGlzICcnLCB0aGUgU2FtcGxlIEFuc3dlciBpbnB1dCBmaWVsZCB3aWxsIGJlIGVtcHR5XG5jb25zdCBjaGVja1NhbXBsZUFuc3dlciA9IChzYW1wbGVBbnN3ZXIpID0+IHNhbXBsZUFuc3dlciA9PT0gbnVsbCB8fCBzYW1wbGVBbnN3ZXIgPT09ICdudWxsJztcblxuY29uc3QgUm93ID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoeyBkaXNwbGF5OiAnZmxleCcsIHdpZHRoOiAnMTAwJScsIHBvc2l0aW9uOiAncmVsYXRpdmUnIH0pKTtcblxuY29uc3QgRWRpdG9yRGl2ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoeyB3aWR0aDogJzEwMCUnLCBiYWNrZ3JvdW5kQ29sb3I6IGAke3RoZW1lLnBhbGV0dGUuY29tbW9uLndoaXRlfWAgfSkpO1xuXG5jb25zdCBEcmFnSW5kaWNhdG9yU3R5bGVkID0gc3R5bGVkKERyYWdJbmRpY2F0b3IpKCh7IHRoZW1lIH0pID0+ICh7IHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcoMSksIGNvbG9yOiBncmV5WzUwMF0gfSkpO1xuXG5jb25zdCBQb2ludHNMYWJlbCA9IHN0eWxlZChUeXBvZ3JhcGh5KSgoeyB0aGVtZSB9KSA9PiAoe1xuICBjb2xvcjogZ3JleVs1MDBdLFxuICBwYWRkaW5nQm90dG9tOiB0aGVtZS5zcGFjaW5nKDEpLFxuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyxcbn0pKTtcblxuY29uc3QgU2FtcGxlQW5zd2Vyc0VkaXRvciA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHsgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMykgfSkpO1xuXG5jb25zdCBFcnJvclRleHQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplIC0gMixcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcoMSksXG59KSk7XG5cbmNvbnN0IFBvaW50TWVudVdyYXBwZXIgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCByaWdodDogMCB9KSk7XG5cbmV4cG9ydCBjb25zdCBQb2ludENvbmZpZyA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHBvaW50cywgY29udGVudCwgc2FtcGxlQW5zd2VyLCBtYXRoTWxPcHRpb25zID0ge30sIGVycm9yLCBwbHVnaW5PcHRzID0ge30gfSA9IHByb3BzO1xuICBjb25zdCBwb2ludHNMYWJlbCA9IGAke3BvaW50c30gJHtwb2ludHMgPD0gMSA/ICdwdCcgOiAncHRzJ31gO1xuICBjb25zdCBzaG93U2FtcGxlQW5zd2VyID0gY2hlY2tTYW1wbGVBbnN3ZXIoc2FtcGxlQW5zd2VyKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8UG9pbnRzTGFiZWwgdmFyaWFudD1cIm92ZXJsaW5lXCI+e3BvaW50c0xhYmVsfTwvUG9pbnRzTGFiZWw+XG4gICAgICA8Um93PlxuICAgICAgICA8RHJhZ0luZGljYXRvclN0eWxlZCAvPlxuICAgICAgICA8RWRpdG9yRGl2PlxuICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgIHBsdWdpblByb3BzPXtwbHVnaW5PcHRzfVxuICAgICAgICAgICAgbWFya3VwPXtjb250ZW50fVxuICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgbWF0aE1sT3B0aW9ucz17bWF0aE1sT3B0aW9uc31cbiAgICAgICAgICAvPlxuICAgICAgICA8L0VkaXRvckRpdj5cbiAgICAgICAgPFBvaW50TWVudVdyYXBwZXI+XG4gICAgICAgICAgPFBvaW50TWVudSBzaG93U2FtcGxlQW5zd2VyPXtzaG93U2FtcGxlQW5zd2VyfSBvbkNoYW5nZT17cHJvcHMub25NZW51Q2hhbmdlfSAvPlxuICAgICAgICA8L1BvaW50TWVudVdyYXBwZXI+XG4gICAgICA8L1Jvdz5cbiAgICAgIHtlcnJvciAmJiA8RXJyb3JUZXh0PntlcnJvcn08L0Vycm9yVGV4dD59XG4gICAgICB7IXNob3dTYW1wbGVBbnN3ZXIgJiYgKFxuICAgICAgICA8U2FtcGxlQW5zd2Vyc0VkaXRvcj5cbiAgICAgICAgICA8RHJhZ0luZGljYXRvclN0eWxlZCBhcz17VHlwb2dyYXBoeX0gdmFyaWFudD1cIm92ZXJsaW5lXCI+XG4gICAgICAgICAgICBTYW1wbGUgUmVzcG9uc2VcbiAgICAgICAgICA8L0RyYWdJbmRpY2F0b3JTdHlsZWQ+XG4gICAgICAgICAgPEVkaXRvckRpdj5cbiAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgbWFya3VwPXtzYW1wbGVBbnN3ZXJ9XG4gICAgICAgICAgICAgIHBsdWdpblByb3BzPXtwbHVnaW5PcHRzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17cHJvcHMub25TYW1wbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRWRpdG9yRGl2PlxuICAgICAgICA8L1NhbXBsZUFuc3dlcnNFZGl0b3I+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IGdyZXlbMjAwXSxcbiAgYm9yZGVyV2lkdGg6IDEsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJDb2xvcjogZ3JleVszMDBdLFxuICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDIpLFxuICBtYXJnaW46IHRoZW1lLnNwYWNpbmcoMSksXG59KSk7XG5jb25zdCBJbnB1dENvbnRhaW5lcldyYXBwZXIgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygyKSxcbiAgJyYgTXVpRm9ybUNvbnRyb2wtcm9vdCc6IHsgd2lkdGg6ICcxMDAlJyB9LFxufSkpO1xuY29uc3QgUnVicmljbGVzcyA9IHN0eWxlZCgnZGl2JykoKCkgPT4gKHsgZGlzcGxheTogJ25vbmUnIH0pKTtcbmNvbnN0IENvbmZpZ0hvbGRlciA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHsgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygxKSwgcGFkZGluZ0JvdHRvbTogdGhlbWUuc3BhY2luZygxKSB9KSk7XG5jb25zdCBSdWJyaWNUaXRsZSA9IHN0eWxlZChUeXBvZ3JhcGh5KSgoeyB0aGVtZSB9KSA9PiAoeyBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygxKSwgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpIH0pKTtcblxuZXhwb3J0IGNsYXNzIFJhd0F1dGhvcmluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgdmFsdWU6IFJ1YnJpY1R5cGUsXG4gICAgY29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBsdWdpbk9wdHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcnVicmljbGVzczogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7fTtcblxuICBkcmFnRW5kID0gKHJlc3VsdCkgPT4ge1xuICAgIGlmICghcmVzdWx0LmRlc3RpbmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBwb2ludHMgPSByZW9yZGVyKHZhbHVlLnBvaW50cywgcmVzdWx0LnNvdXJjZS5pbmRleCwgcmVzdWx0LmRlc3RpbmF0aW9uLmluZGV4KTtcbiAgICBjb25zdCBzYW1wbGVBbnN3ZXJzID0gcmVvcmRlcih2YWx1ZS5zYW1wbGVBbnN3ZXJzLCByZXN1bHQuc291cmNlLmluZGV4LCByZXN1bHQuZGVzdGluYXRpb24uaW5kZXgpO1xuXG4gICAgb25DaGFuZ2UoeyAuLi52YWx1ZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzIH0pO1xuICB9O1xuXG4gIGNoYW5nZVJ1YnJpY2xlc3NJbnN0cnVjdGlvbiA9IChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIG9uQ2hhbmdlKHsgLi4udmFsdWUsIHJ1YnJpY2xlc3NJbnN0cnVjdGlvbjogaW5wdXQgfSk7XG4gIH07XG5cbiAgY2hhbmdlTWF4UG9pbnRzID0gKG1heFBvaW50cykgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBydWJyaWNsZXNzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGN1cnJlbnRNYXggPSB2YWx1ZS5wb2ludHMubGVuZ3RoIC0gMTtcblxuICAgIGxvZygnY3VycmVudCcsIGN1cnJlbnRNYXgsICduZXc6ICcsIG1heFBvaW50cyk7XG5cbiAgICBsZXQgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzO1xuICAgIGlmIChtYXhQb2ludHMgPiBjdXJyZW50TWF4KSB7XG4gICAgICBwb2ludHMgPSB0aW1lcyhtYXhQb2ludHMgLSBjdXJyZW50TWF4KVxuICAgICAgICAubWFwKCgpID0+ICcnKVxuICAgICAgICAuY29uY2F0KHZhbHVlLnBvaW50cyk7XG4gICAgICBzYW1wbGVBbnN3ZXJzID0gdGltZXMobWF4UG9pbnRzIC0gY3VycmVudE1heClcbiAgICAgICAgLm1hcCgoKSA9PiBudWxsKVxuICAgICAgICAuY29uY2F0KHZhbHVlLnNhbXBsZUFuc3dlcnMpO1xuICAgIH1cblxuICAgIGlmIChtYXhQb2ludHMgPCBjdXJyZW50TWF4KSB7XG4gICAgICBsb2coJ2xlc3MgdGhhbicpO1xuICAgICAgcG9pbnRzID0gdGFrZVJpZ2h0KHZhbHVlLnBvaW50cywgbWF4UG9pbnRzICsgMSk7XG4gICAgICBzYW1wbGVBbnN3ZXJzID0gdGFrZVJpZ2h0KHZhbHVlLnNhbXBsZUFuc3dlcnMsIG1heFBvaW50cyArIDEpO1xuICAgIH1cblxuICAgIGlmIChwb2ludHMgJiYgIXJ1YnJpY2xlc3MpIHtcbiAgICAgIG9uQ2hhbmdlKHsgLi4udmFsdWUsIHBvaW50cywgc2FtcGxlQW5zd2VycywgbWF4UG9pbnRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZSh7IC4uLnZhbHVlLCBtYXhQb2ludHMgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNoYW5nZUNvbnRlbnQgPSAoaW5kZXgsIGNvbnRlbnQsIHR5cGUpID0+IHtcbiAgICAvLyB0eXBlIGNvdWxkIGJlICdwb2ludHMnIG9yICdzYW1wbGVBbnN3ZXJzJ1xuICAgIGxvZyhgY2hhbmdlTW9kZWxbJHt0eXBlfV06YCwgaW5kZXgsIGNvbnRlbnQpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdwb2ludHMnICYmIHR5cGUgIT09ICdzYW1wbGVBbnN3ZXJzJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWVbdHlwZV0gJiYgQXJyYXkuZnJvbSh2YWx1ZVt0eXBlXSk7XG5cbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEsIGNvbnRlbnQpO1xuICAgIGxvZyhgY2hhbmdlTW9kZWxbJHt0eXBlfV06YCwgaXRlbXMpO1xuXG4gICAgb25DaGFuZ2UoeyAuLi52YWx1ZSwgW3R5cGVdOiBpdGVtcyB9KTtcbiAgfTtcblxuICBleGNsdWRlWmVyb3MgPSAoKSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBvbkNoYW5nZSh7IC4uLnZhbHVlLCBleGNsdWRlWmVybzogIXZhbHVlLmV4Y2x1ZGVaZXJvIH0pO1xuICB9O1xuXG4gIHNob3VsZFJlbmRlclBvaW50ID0gKGluZGV4LCB2YWx1ZSkgPT4ge1xuICAgIGlmICghdmFsdWUuZXhjbHVkZVplcm8pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPCB2YWx1ZS5wb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHZhbHVlLnBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIG9uUG9pbnRNZW51Q2hhbmdlID0gKGluZGV4LCBjbGlja2VkSXRlbSkgPT4ge1xuICAgIGlmIChjbGlja2VkSXRlbSA9PT0gJ3NhbXBsZScpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzYW1wbGVBbnN3ZXJzID0gQXJyYXkuZnJvbSh2YWx1ZS5zYW1wbGVBbnN3ZXJzIHx8IFtdKTtcblxuICAgICAgaWYgKGNoZWNrU2FtcGxlQW5zd2VyKHNhbXBsZUFuc3dlcnNbaW5kZXhdKSkge1xuICAgICAgICAvLyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBkaXNwbGF5IGFuIGVtcHR5IFNhbXBsZSBBbnN3ZXIgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5jaGFuZ2VDb250ZW50KGluZGV4LCAnJywgJ3NhbXBsZUFuc3dlcnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGNvbnRlbnQgaXMgbnVsbCBvciAnbnVsbCcsIHRoZSBTYW1wbGUgQW5zd2VyIGlucHV0IGZpZWxkIHdpbGwgbm90IGJlIGRpc3BsYXllZFxuICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnQoaW5kZXgsIG51bGwsICdzYW1wbGVBbnN3ZXJzJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBtYXRoTWxPcHRpb25zID0ge30sIGNvbmZpZyA9IHt9LCBydWJyaWNsZXNzID0gZmFsc2UsIHBsdWdpbk9wdHMgPSB7fSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQge1xuICAgICAgZXhjbHVkZVplcm9FbmFibGVkID0gdHJ1ZSxcbiAgICAgIG1heFBvaW50c0VuYWJsZWQgPSB0cnVlLFxuICAgICAgZXJyb3JzID0ge30sXG4gICAgICBydWJyaWNsZXNzSW5zdHJ1Y3Rpb25FbmFibGVkID0gZmFsc2UsXG4gICAgICBtYXhQb2ludHMgPSAxMCxcbiAgICB9ID0gdmFsdWUgfHwge307XG4gICAgLy8gcnVicmljIHdpbGwgY29udGFpbiBhIG1heCB2YWx1ZSBmb3IgbWF4UG9pbnRzXG4gICAgY29uc3QgeyBydWJyaWNsZXNzSW5zdHJ1Y3Rpb24gPSB7fSwgbWF4TWF4UG9pbnRzID0gMTAgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHBvaW50c0Rlc2NyaXB0b3JzRXJyb3JzIH0gPSBlcnJvcnMgfHwge307XG4gICAgaWYgKHZhbHVlICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZS5tYXhQb2ludHMpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKCdtYXhQb2ludHMgaXMgZGVwcmVjYXRlZCAtIHJlbW92ZSBmcm9tIG1vZGVsJyk7XG4gICAgfVxuXG4gICAgLy8gZm9yIHJ1YnJpYyB2YWx1ZSBpcyBjb21wdXRlZCBiYXNlZCBvbiBwb2ludHNcbiAgICBjb25zdCBtYXhQb2ludHNWYWx1ZSA9ICFydWJyaWNsZXNzID8gdmFsdWUucG9pbnRzLmxlbmd0aCAtIDEgOiBtYXhQb2ludHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFJ1YnJpY1RpdGxlIHZhcmlhbnQ9XCJoNVwiPlJ1YnJpYzwvUnVicmljVGl0bGU+XG4gICAgICAgIDxGb3JtR3JvdXAgcm93PlxuICAgICAgICAgIHttYXhQb2ludHNFbmFibGVkICYmIChcbiAgICAgICAgICAgIDxNYXhQb2ludHNcbiAgICAgICAgICAgICAgbWF4PXttYXhNYXhQb2ludHMgPCAxMDAgPyBtYXhNYXhQb2ludHMgOiAxMDB9XG4gICAgICAgICAgICAgIHZhbHVlPXttYXhQb2ludHNWYWx1ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlTWF4UG9pbnRzfVxuICAgICAgICAgICAgICBwbHVnaW5PcHRzPXtwbHVnaW5PcHRzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtleGNsdWRlWmVyb0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgbGFiZWw9XCJFeGNsdWRlIHplcm9zXCJcbiAgICAgICAgICAgICAgY29udHJvbD17PENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlLmV4Y2x1ZGVaZXJvfSBvbkNoYW5nZT17dGhpcy5leGNsdWRlWmVyb3N9IC8+fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICB7cnVicmljbGVzc0luc3RydWN0aW9uRW5hYmxlZCAmJiBydWJyaWNsZXNzICYmIChcbiAgICAgICAgICA8SW5wdXRDb250YWluZXJXcmFwcGVyPlxuICAgICAgICAgICAgPElucHV0Q29udGFpbmVyIGxhYmVsPXtydWJyaWNsZXNzSW5zdHJ1Y3Rpb24ubGFiZWx9PlxuICAgICAgICAgICAgICA8RWRpdGFibGVIdG1sXG4gICAgICAgICAgICAgICAgbWFya3VwPXt2YWx1ZS5ydWJyaWNsZXNzSW5zdHJ1Y3Rpb24gfHwgJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlUnVicmljbGVzc0luc3RydWN0aW9ufVxuICAgICAgICAgICAgICAgIHBsdWdpblByb3BzPXtwbHVnaW5PcHRzfVxuICAgICAgICAgICAgICAgIG5vbkVtcHR5PXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlVW5kZXJsaW5lXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHM9e1t7IGxhbmd1YWdlOiAnc3BhbmlzaCcgfSwgeyBsYW5ndWFnZTogJ3NwZWNpYWwnIH1dfVxuICAgICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0lucHV0Q29udGFpbmVyPlxuICAgICAgICAgIDwvSW5wdXRDb250YWluZXJXcmFwcGVyPlxuICAgICAgICApfVxuXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge3J1YnJpY2xlc3MgPyAoXG4gICAgICAgICAgICA8UnVicmljbGVzcyAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8RHJhZ0Ryb3BDb250ZXh0IG9uRHJhZ0VuZD17dGhpcy5kcmFnRW5kfT5cbiAgICAgICAgICAgICAgICA8RHJvcHBhYmxlIGRyb3BwYWJsZUlkPVwiZHJvcHBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICB7KHByb3ZpZGVkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgey4uLnByb3ZpZGVkLmRyb3BwYWJsZVByb3BzfSByZWY9e3Byb3ZpZGVkLmlubmVyUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUucG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIChwLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG91bGRSZW5kZXJQb2ludChpbmRleCwgdmFsdWUpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlIGtleT17YCR7cC5wb2ludHN9LSR7aW5kZXh9YH0gaW5kZXg9e2luZGV4fSBkcmFnZ2FibGVJZD17aW5kZXgudG9TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHByb3ZpZGVkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25maWdIb2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e3Byb3ZpZGVkLmlubmVyUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5wcm92aWRlZC5kcmFnZ2FibGVQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ucHJvdmlkZWQuZHJhZ0hhbmRsZVByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBvaW50Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM9e3ZhbHVlLnBvaW50cy5sZW5ndGggLSAxIC0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNEZXNjcmlwdG9yc0Vycm9ycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNEZXNjcmlwdG9yc0Vycm9yc1t2YWx1ZS5wb2ludHMubGVuZ3RoIC0gMSAtIGluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlQW5zd2VyPXt2YWx1ZS5zYW1wbGVBbnN3ZXJzICYmIHZhbHVlLnNhbXBsZUFuc3dlcnNbaW5kZXhdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjb250ZW50KSA9PiB0aGlzLmNoYW5nZUNvbnRlbnQoaW5kZXgsIGNvbnRlbnQsICdwb2ludHMnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2FtcGxlQ2hhbmdlPXsoY29udGVudCkgPT4gdGhpcy5jaGFuZ2VDb250ZW50KGluZGV4LCBjb250ZW50LCAnc2FtcGxlQW5zd2VycycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25NZW51Q2hhbmdlPXsoY2xpY2tlZEl0ZW0pID0+IHRoaXMub25Qb2ludE1lbnVDaGFuZ2UoaW5kZXgsIGNsaWNrZWRJdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5PcHRzPXtwbHVnaW5PcHRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZmlnSG9sZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RyYWdnYWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHtwcm92aWRlZC5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRHJvcHBhYmxlPlxuICAgICAgICAgICAgICA8L0RyYWdEcm9wQ29udGV4dD5cbiAgICAgICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBzdHlsZXMgbWlncmF0ZWQgdG8gc3R5bGVkLWNvbXBvbmVudHMgYWJvdmVcblxuY29uc3QgUmV2ZXJzZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHJ1YnJpY2xlc3MgPSBmYWxzZSwgY29uZmlnID0ge30sIHBsdWdpbk9wdHMgPSB7fSB9ID0gcHJvcHMgfHwge307XG4gIGNvbnN0IHBvaW50cyA9IEFycmF5LmZyb20ocHJvcHMudmFsdWUucG9pbnRzIHx8IFtdKS5yZXZlcnNlKCk7XG4gIGxldCBzYW1wbGVBbnN3ZXJzID0gQXJyYXkuZnJvbShwcm9wcy52YWx1ZS5zYW1wbGVBbnN3ZXJzIHx8IFtdKS5yZXZlcnNlKCk7XG5cbiAgaWYgKHBvaW50cy5sZW5ndGggPiBzYW1wbGVBbnN3ZXJzLmxlbmd0aCkge1xuICAgIHNhbXBsZUFuc3dlcnMgPSB0aW1lcyhwb2ludHMubGVuZ3RoIC0gc2FtcGxlQW5zd2Vycy5sZW5ndGgpXG4gICAgICAubWFwKCgpID0+IG51bGwpXG4gICAgICAuY29uY2F0KHNhbXBsZUFuc3dlcnMpO1xuICB9XG5cbiAgY29uc3QgdmFsdWUgPSB7IC4uLnByb3BzLnZhbHVlLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfTtcblxuICBjb25zdCBvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHByb3BzLm9uQ2hhbmdlKHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgcG9pbnRzOiBBcnJheS5mcm9tKHZhbHVlLnBvaW50cyB8fCBbXSkucmV2ZXJzZSgpLFxuICAgICAgc2FtcGxlQW5zd2VyczogQXJyYXkuZnJvbSh2YWx1ZS5zYW1wbGVBbnN3ZXJzIHx8IFtdKS5yZXZlcnNlKCksXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8UmF3QXV0aG9yaW5nIHZhbHVlPXt2YWx1ZX0gY29uZmlnPXtjb25maWd9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gcnVicmljbGVzcz17cnVicmljbGVzc30gcGx1Z2luT3B0cz17cGx1Z2luT3B0c30gLz5cbiAgKTtcbn07XG5cblJldmVyc2UucHJvcFR5cGVzID0ge1xuICB2YWx1ZTogUnVicmljVHlwZSxcbiAgY29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICBwbHVnaW5PcHRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBydWJyaWNsZXNzOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0SW5kZXg6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZXZlcnNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJ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