@pie-lib/charting 5.36.3-next.2 → 5.36.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/CHANGELOG.md +17 -96
- package/lib/__tests__/axes.test.js +129 -0
- package/lib/__tests__/chart-setup.test.js +57 -0
- package/lib/__tests__/chart-type.test.js +25 -0
- package/lib/__tests__/chart.test.js +103 -0
- package/lib/__tests__/grid.test.js +39 -0
- package/lib/__tests__/mark-label.test.js +46 -0
- package/lib/__tests__/utils.js +56 -0
- package/lib/__tests__/utils.test.js +186 -0
- package/lib/actions-button.js +61 -91
- package/lib/actions-button.js.map +1 -1
- package/lib/axes.js +163 -239
- package/lib/axes.js.map +1 -1
- package/lib/bars/__tests__/bar.test.js +53 -0
- package/lib/bars/__tests__/histogram.test.js +53 -0
- package/lib/bars/__tests__/utils.js +50 -0
- package/lib/bars/bar.js +14 -42
- package/lib/bars/bar.js.map +1 -1
- package/lib/bars/common/__tests__/bars.test.js +76 -0
- package/lib/bars/common/__tests__/utils.js +50 -0
- package/lib/bars/common/bars.js +62 -138
- package/lib/bars/common/bars.js.map +1 -1
- package/lib/bars/common/correct-check-icon.js +6 -7
- package/lib/bars/common/correct-check-icon.js.map +1 -1
- package/lib/bars/histogram.js +14 -42
- package/lib/bars/histogram.js.map +1 -1
- package/lib/chart-setup.js +120 -196
- package/lib/chart-setup.js.map +1 -1
- package/lib/chart-type.js +53 -44
- package/lib/chart-type.js.map +1 -1
- package/lib/chart-types.js +2 -11
- package/lib/chart-types.js.map +1 -1
- package/lib/chart.js +74 -152
- package/lib/chart.js.map +1 -1
- package/lib/common/__tests__/drag-handle.test.js +74 -0
- package/lib/common/__tests__/utils.js +50 -0
- package/lib/common/correctness-indicators.js +110 -53
- package/lib/common/correctness-indicators.js.map +1 -1
- package/lib/common/drag-handle.js +66 -109
- package/lib/common/drag-handle.js.map +1 -1
- package/lib/common/drag-icon.js +13 -13
- package/lib/common/drag-icon.js.map +1 -1
- package/lib/common/styles.js +7 -25
- package/lib/common/styles.js.map +1 -1
- package/lib/grid.js +44 -84
- package/lib/grid.js.map +1 -1
- package/lib/index.js +1 -7
- package/lib/index.js.map +1 -1
- package/lib/key-legend.js +64 -88
- package/lib/key-legend.js.map +1 -1
- package/lib/line/__tests__/line-cross.test.js +47 -0
- package/lib/line/__tests__/line-dot.test.js +47 -0
- package/lib/line/__tests__/utils.js +56 -0
- package/lib/line/common/__tests__/drag-handle.test.js +74 -0
- package/lib/line/common/__tests__/line.test.js +92 -0
- package/lib/line/common/__tests__/utils.js +50 -0
- package/lib/line/common/drag-handle.js +73 -101
- package/lib/line/common/drag-handle.js.map +1 -1
- package/lib/line/common/line.js +51 -97
- package/lib/line/common/line.js.map +1 -1
- package/lib/line/line-cross.js +80 -90
- package/lib/line/line-cross.js.map +1 -1
- package/lib/line/line-dot.js +59 -77
- package/lib/line/line-dot.js.map +1 -1
- package/lib/mark-label.js +85 -120
- package/lib/mark-label.js.map +1 -1
- package/lib/plot/__tests__/dot.test.js +53 -0
- package/lib/plot/__tests__/line.test.js +53 -0
- package/lib/plot/__tests__/utils.js +50 -0
- package/lib/plot/common/__tests__/plot.test.js +79 -0
- package/lib/plot/common/__tests__/utils.js +50 -0
- package/lib/plot/common/plot.js +91 -149
- package/lib/plot/common/plot.js.map +1 -1
- package/lib/plot/dot.js +33 -59
- package/lib/plot/dot.js.map +1 -1
- package/lib/plot/line.js +40 -65
- package/lib/plot/line.js.map +1 -1
- package/lib/tool-menu.js +48 -84
- package/lib/tool-menu.js.map +1 -1
- package/lib/utils.js +32 -87
- package/lib/utils.js.map +1 -1
- package/package.json +22 -24
- package/src/__tests__/axes.test.jsx +85 -100
- package/src/__tests__/chart-type.test.jsx +5 -11
- package/src/__tests__/chart.test.jsx +41 -50
- package/src/__tests__/grid.test.jsx +23 -11
- package/src/__tests__/mark-label.test.jsx +13 -11
- package/src/__tests__/utils.js +8 -2
- package/src/actions-button.jsx +44 -39
- package/src/axes.jsx +67 -81
- package/src/bars/__tests__/bar.test.jsx +19 -11
- package/src/bars/__tests__/histogram.test.jsx +19 -12
- package/src/bars/common/__tests__/bars.test.jsx +23 -24
- package/src/bars/common/bars.jsx +42 -69
- package/src/bars/common/correct-check-icon.jsx +5 -0
- package/src/chart-setup.jsx +75 -88
- package/src/chart-type.js +45 -22
- package/src/chart.jsx +19 -34
- package/src/common/__tests__/drag-handle.test.jsx +16 -45
- package/src/common/correctness-indicators.jsx +91 -13
- package/src/common/drag-handle.jsx +44 -64
- package/src/common/drag-icon.jsx +9 -2
- package/src/common/styles.js +1 -1
- package/src/grid.jsx +10 -14
- package/src/key-legend.jsx +62 -60
- package/src/line/__tests__/line-cross.test.jsx +16 -13
- package/src/line/__tests__/line-dot.test.jsx +16 -13
- package/src/line/__tests__/utils.js +8 -2
- package/src/line/common/__tests__/drag-handle.test.jsx +20 -45
- package/src/line/common/__tests__/line.test.jsx +27 -30
- package/src/line/common/drag-handle.jsx +61 -55
- package/src/line/common/line.jsx +21 -11
- package/src/line/line-cross.js +39 -14
- package/src/line/line-dot.js +27 -32
- package/src/mark-label.jsx +51 -47
- package/src/plot/__tests__/dot.test.jsx +19 -12
- package/src/plot/__tests__/line.test.jsx +19 -12
- package/src/plot/common/__tests__/plot.test.jsx +23 -24
- package/src/plot/common/plot.jsx +29 -24
- package/src/plot/dot.js +11 -4
- package/src/plot/line.js +16 -8
- package/src/tool-menu.jsx +26 -30
- package/src/utils.js +13 -9
- package/esm/index.css +0 -847
- package/esm/index.js +0 -231130
- package/esm/index.js.map +0 -1
- package/esm/package.json +0 -3
- package/src/__tests__/__snapshots__/axes.test.jsx.snap +0 -569
- package/src/__tests__/__snapshots__/chart-type.test.jsx.snap +0 -14
- package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -595
- package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -72
- package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -73
- package/src/bars/__tests__/__snapshots__/bar.test.jsx.snap +0 -43
- package/src/bars/__tests__/__snapshots__/histogram.test.jsx.snap +0 -45
- package/src/bars/common/__tests__/__snapshots__/bars.test.jsx.snap +0 -110
- package/src/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -48
- package/src/line/__tests__/__snapshots__/line-cross.test.jsx.snap +0 -45
- package/src/line/__tests__/__snapshots__/line-dot.test.jsx.snap +0 -45
- package/src/line/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -49
- package/src/line/common/__tests__/__snapshots__/line.test.jsx.snap +0 -143
- package/src/plot/__tests__/__snapshots__/dot.test.jsx.snap +0 -45
- package/src/plot/__tests__/__snapshots__/line.test.jsx.snap +0 -45
- package/src/plot/common/__tests__/__snapshots__/plot.test.jsx.snap +0 -97
package/lib/axes.js
CHANGED
|
@@ -1,92 +1,109 @@
|
|
|
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.TickComponent = exports.RawChartAxes = void 0;
|
|
9
|
-
|
|
10
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
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 _react = _interopRequireDefault(require("react"));
|
|
27
|
-
|
|
28
16
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
|
-
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
var _axis = require("@vx/axis");
|
|
33
|
-
|
|
34
|
-
var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
|
|
35
|
-
|
|
17
|
+
var _styles = require("@mui/material/styles");
|
|
18
|
+
var _axis = require("@visx/axis");
|
|
19
|
+
var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
|
|
36
20
|
var _plot = require("@pie-lib/plot");
|
|
37
|
-
|
|
38
21
|
var _renderUi = require("@pie-lib/render-ui");
|
|
39
|
-
|
|
40
22
|
var _configUi = require("@pie-lib/config-ui");
|
|
41
|
-
|
|
42
23
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
43
|
-
|
|
44
24
|
var _correctnessIndicators = require("./common/correctness-indicators");
|
|
45
|
-
|
|
46
25
|
var _utils = require("./utils");
|
|
47
|
-
|
|
48
26
|
var _markLabel = _interopRequireDefault(require("./mark-label"));
|
|
49
|
-
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
-
function
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
27
|
+
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; }
|
|
28
|
+
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; }
|
|
29
|
+
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)); }
|
|
30
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
31
|
+
var StyledErrorText = (0, _styles.styled)('text')(function (_ref) {
|
|
32
|
+
var theme = _ref.theme;
|
|
33
|
+
return {
|
|
34
|
+
fontSize: theme.typography.fontSize - 2,
|
|
35
|
+
fill: theme.palette.error.main
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
var StyledCheckbox = (0, _styles.styled)(_Checkbox["default"])(function () {
|
|
39
|
+
return {
|
|
40
|
+
color: "".concat(_renderUi.color.tertiary(), " !important")
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
var StyledAxesGroup = (0, _styles.styled)('g')(function (_ref2) {
|
|
44
|
+
var _theme$typography$bod;
|
|
45
|
+
var theme = _ref2.theme;
|
|
46
|
+
return {
|
|
47
|
+
'& .vx-axis-line': {
|
|
48
|
+
stroke: _renderUi.color.visualElementsColors.AXIS_LINE_COLOR,
|
|
49
|
+
strokeWidth: 2
|
|
50
|
+
},
|
|
51
|
+
'& .vx-axis-tick': {
|
|
52
|
+
fill: _renderUi.color.visualElementsColors.AXIS_TICK_COLOR,
|
|
53
|
+
'& line': {
|
|
54
|
+
stroke: _renderUi.color.visualElementsColors.AXIS_TICK_COLOR,
|
|
55
|
+
strokeWidth: 2
|
|
56
|
+
},
|
|
57
|
+
fontFamily: (_theme$typography$bod = theme.typography.body1) === null || _theme$typography$bod === void 0 ? void 0 : _theme$typography$bod.fontFamily,
|
|
58
|
+
fontSize: theme.typography.fontSize,
|
|
59
|
+
textAnchor: 'middle'
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
var correctnessIconStyles = function correctnessIconStyles(theme) {
|
|
64
|
+
return {
|
|
65
|
+
borderRadius: theme.spacing(2),
|
|
66
|
+
color: _renderUi.color.defaults.WHITE,
|
|
67
|
+
fontSize: '16px',
|
|
68
|
+
width: '16px',
|
|
69
|
+
height: '16px',
|
|
70
|
+
padding: '2px',
|
|
71
|
+
border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
|
|
72
|
+
boxSizing: 'unset' // to override the default border-box in IBX
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
var incorrectIconStyles = {
|
|
76
|
+
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
77
|
+
};
|
|
78
|
+
var correctIconStyles = {
|
|
79
|
+
backgroundColor: _renderUi.color.correct()
|
|
80
|
+
};
|
|
81
|
+
var TickComponent = exports.TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
63
82
|
function TickComponent(props) {
|
|
64
83
|
var _this;
|
|
65
|
-
|
|
66
84
|
(0, _classCallCheck2["default"])(this, TickComponent);
|
|
67
|
-
_this =
|
|
68
|
-
(0, _defineProperty2["default"])(
|
|
85
|
+
_this = _callSuper(this, TickComponent, [props]);
|
|
86
|
+
(0, _defineProperty2["default"])(_this, "handleAlertDialog", function (open, callback) {
|
|
69
87
|
return _this.setState({
|
|
70
88
|
dialog: {
|
|
71
89
|
open: open
|
|
72
90
|
}
|
|
73
91
|
}, callback);
|
|
74
92
|
});
|
|
75
|
-
(0, _defineProperty2["default"])(
|
|
93
|
+
(0, _defineProperty2["default"])(_this, "changeCategory", function (index, newLabel) {
|
|
76
94
|
var _this$props = _this.props,
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
categories = _this$props.categories,
|
|
96
|
+
onChangeCategory = _this$props.onChangeCategory;
|
|
79
97
|
var category = categories[index];
|
|
80
98
|
onChangeCategory(index, _objectSpread(_objectSpread({}, category), {}, {
|
|
81
99
|
label: newLabel
|
|
82
100
|
}));
|
|
83
101
|
});
|
|
84
|
-
(0, _defineProperty2["default"])(
|
|
102
|
+
(0, _defineProperty2["default"])(_this, "changeInteractive", function (index, value) {
|
|
85
103
|
var _this$props2 = _this.props,
|
|
86
|
-
|
|
87
|
-
|
|
104
|
+
categories = _this$props2.categories,
|
|
105
|
+
onChangeCategory = _this$props2.onChangeCategory;
|
|
88
106
|
var category = categories[index];
|
|
89
|
-
|
|
90
107
|
if (!value) {
|
|
91
108
|
_this.setState({
|
|
92
109
|
dialog: {
|
|
@@ -109,12 +126,11 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
109
126
|
}));
|
|
110
127
|
}
|
|
111
128
|
});
|
|
112
|
-
(0, _defineProperty2["default"])(
|
|
129
|
+
(0, _defineProperty2["default"])(_this, "changeEditable", function (index, value) {
|
|
113
130
|
var _this$props3 = _this.props,
|
|
114
|
-
|
|
115
|
-
|
|
131
|
+
categories = _this$props3.categories,
|
|
132
|
+
onChangeCategory = _this$props3.onChangeCategory;
|
|
116
133
|
var category = categories[index];
|
|
117
|
-
|
|
118
134
|
if (!value) {
|
|
119
135
|
_this.setState({
|
|
120
136
|
dialog: {
|
|
@@ -137,26 +153,21 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
137
153
|
}));
|
|
138
154
|
}
|
|
139
155
|
});
|
|
140
|
-
(0, _defineProperty2["default"])(
|
|
156
|
+
(0, _defineProperty2["default"])(_this, "splitText", function (text, maxChar) {
|
|
141
157
|
var chunks = [];
|
|
142
|
-
|
|
143
158
|
while ((text || '').length > 0) {
|
|
144
159
|
var indexToSplit = void 0;
|
|
145
|
-
|
|
146
160
|
if (text.length > maxChar) {
|
|
147
161
|
indexToSplit = text.lastIndexOf(' ', maxChar);
|
|
148
|
-
|
|
149
162
|
if (indexToSplit === -1) {
|
|
150
163
|
indexToSplit = maxChar;
|
|
151
164
|
}
|
|
152
165
|
} else {
|
|
153
166
|
indexToSplit = text.length;
|
|
154
167
|
}
|
|
155
|
-
|
|
156
168
|
chunks.push(text.substring(0, indexToSplit));
|
|
157
169
|
text = text.substring(indexToSplit).trim();
|
|
158
170
|
}
|
|
159
|
-
|
|
160
171
|
return chunks;
|
|
161
172
|
});
|
|
162
173
|
_this.state = {
|
|
@@ -166,8 +177,8 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
166
177
|
};
|
|
167
178
|
return _this;
|
|
168
179
|
}
|
|
169
|
-
|
|
170
|
-
(0, _createClass2["default"])(TickComponent, [{
|
|
180
|
+
(0, _inherits2["default"])(TickComponent, _React$Component);
|
|
181
|
+
return (0, _createClass2["default"])(TickComponent, [{
|
|
171
182
|
key: "componentDidUpdate",
|
|
172
183
|
value: function componentDidUpdate(prevProps) {
|
|
173
184
|
if (this.props.autoFocus && !prevProps.autoFocus) {
|
|
@@ -178,47 +189,46 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
178
189
|
key: "render",
|
|
179
190
|
value: function render() {
|
|
180
191
|
var _this2 = this;
|
|
181
|
-
|
|
182
192
|
var _this$props4 = this.props,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
showCorrectness = _this$props4.showCorrectness;
|
|
202
|
-
|
|
193
|
+
categories = _this$props4.categories,
|
|
194
|
+
xBand = _this$props4.xBand,
|
|
195
|
+
bandWidth = _this$props4.bandWidth,
|
|
196
|
+
barWidth = _this$props4.barWidth,
|
|
197
|
+
rotate = _this$props4.rotate,
|
|
198
|
+
top = _this$props4.top,
|
|
199
|
+
graphProps = _this$props4.graphProps,
|
|
200
|
+
defineChart = _this$props4.defineChart,
|
|
201
|
+
chartingOptions = _this$props4.chartingOptions,
|
|
202
|
+
x = _this$props4.x,
|
|
203
|
+
y = _this$props4.y,
|
|
204
|
+
formattedValue = _this$props4.formattedValue,
|
|
205
|
+
changeInteractiveEnabled = _this$props4.changeInteractiveEnabled,
|
|
206
|
+
changeEditableEnabled = _this$props4.changeEditableEnabled,
|
|
207
|
+
error = _this$props4.error,
|
|
208
|
+
autoFocus = _this$props4.autoFocus,
|
|
209
|
+
hiddenLabelRef = _this$props4.hiddenLabelRef,
|
|
210
|
+
showCorrectness = _this$props4.showCorrectness;
|
|
203
211
|
if (!formattedValue) {
|
|
204
212
|
return null;
|
|
205
213
|
}
|
|
206
214
|
|
|
215
|
+
// Create classes object for TickCorrectnessIndicator compatibility
|
|
216
|
+
var classes = {
|
|
217
|
+
correctnessIcon: correctnessIconStyles,
|
|
218
|
+
incorrectIcon: incorrectIconStyles,
|
|
219
|
+
correctIcon: correctIconStyles
|
|
220
|
+
};
|
|
207
221
|
var dialog = this.state.dialog;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
changeInteractive = _ref.changeInteractive;
|
|
212
|
-
|
|
222
|
+
var _ref3 = chartingOptions || {},
|
|
223
|
+
changeEditable = _ref3.changeEditable,
|
|
224
|
+
changeInteractive = _ref3.changeInteractive;
|
|
213
225
|
var index = parseInt(formattedValue.split('-')[0], 10);
|
|
214
226
|
var category = categories[index];
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
correctness = _ref2.correctness;
|
|
221
|
-
|
|
227
|
+
var _ref4 = category || {},
|
|
228
|
+
editable = _ref4.editable,
|
|
229
|
+
interactive = _ref4.interactive,
|
|
230
|
+
label = _ref4.label,
|
|
231
|
+
correctness = _ref4.correctness;
|
|
222
232
|
var barX = xBand((0, _utils.bandKey)({
|
|
223
233
|
label: label
|
|
224
234
|
}, index));
|
|
@@ -226,6 +236,8 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
226
236
|
var lengthA = a && a.label ? a.label.length : 0;
|
|
227
237
|
var lengthB = b && b.label ? b.label.length : 0;
|
|
228
238
|
return lengthA > lengthB ? a : b;
|
|
239
|
+
}, {
|
|
240
|
+
label: ''
|
|
229
241
|
});
|
|
230
242
|
var distinctMessages = error ? (0, _toConsumableArray2["default"])(new Set(Object.values(error))).join(' ') : '';
|
|
231
243
|
return /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("foreignObject", {
|
|
@@ -265,8 +277,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
265
277
|
interactive: interactive,
|
|
266
278
|
classes: classes
|
|
267
279
|
})
|
|
268
|
-
})), error && index === 0 && /*#__PURE__*/_react["default"].createElement(
|
|
269
|
-
className: classes.error,
|
|
280
|
+
})), error && index === 0 && /*#__PURE__*/_react["default"].createElement(StyledErrorText, {
|
|
270
281
|
y: y + 23,
|
|
271
282
|
height: 6,
|
|
272
283
|
textAnchor: "start"
|
|
@@ -318,8 +329,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
318
329
|
pointerEvents: 'visible',
|
|
319
330
|
overflow: 'visible'
|
|
320
331
|
}
|
|
321
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
322
|
-
className: classes.customColor,
|
|
332
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
|
|
323
333
|
style: {
|
|
324
334
|
position: 'fixed'
|
|
325
335
|
},
|
|
@@ -336,8 +346,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
336
346
|
pointerEvents: 'visible',
|
|
337
347
|
overflow: 'visible'
|
|
338
348
|
}
|
|
339
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
340
|
-
className: classes.customColor,
|
|
349
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
|
|
341
350
|
style: {
|
|
342
351
|
position: 'fixed'
|
|
343
352
|
},
|
|
@@ -363,10 +372,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
363
372
|
})));
|
|
364
373
|
}
|
|
365
374
|
}]);
|
|
366
|
-
return TickComponent;
|
|
367
375
|
}(_react["default"].Component);
|
|
368
|
-
|
|
369
|
-
exports.TickComponent = TickComponent;
|
|
370
376
|
(0, _defineProperty2["default"])(TickComponent, "propTypes", {
|
|
371
377
|
defineChart: _propTypes["default"].bool,
|
|
372
378
|
error: _propTypes["default"].any
|
|
@@ -384,7 +390,6 @@ TickComponent.propTypes = {
|
|
|
384
390
|
formattedValue: _propTypes["default"].string,
|
|
385
391
|
onChangeCategory: _propTypes["default"].func,
|
|
386
392
|
onChange: _propTypes["default"].func,
|
|
387
|
-
classes: _propTypes["default"].object,
|
|
388
393
|
error: _propTypes["default"].object,
|
|
389
394
|
defineChart: _propTypes["default"].bool,
|
|
390
395
|
chartingOptions: _propTypes["default"].object,
|
|
@@ -392,47 +397,41 @@ TickComponent.propTypes = {
|
|
|
392
397
|
changeEditableEnabled: _propTypes["default"].bool,
|
|
393
398
|
autoFocus: _propTypes["default"].bool,
|
|
394
399
|
onAutoFocusUsed: _propTypes["default"].func,
|
|
395
|
-
showCorrectness: _propTypes["default"].bool
|
|
400
|
+
showCorrectness: _propTypes["default"].bool,
|
|
401
|
+
hiddenLabelRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].shape({
|
|
402
|
+
current: _propTypes["default"].instanceOf(Element)
|
|
403
|
+
})])
|
|
396
404
|
};
|
|
397
|
-
|
|
398
|
-
var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
399
|
-
(0, _inherits2["default"])(RawChartAxes, _React$Component2);
|
|
400
|
-
|
|
401
|
-
var _super2 = _createSuper(RawChartAxes);
|
|
402
|
-
|
|
405
|
+
var RawChartAxes = exports.RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
403
406
|
function RawChartAxes() {
|
|
404
407
|
var _this3;
|
|
405
|
-
|
|
406
408
|
(0, _classCallCheck2["default"])(this, RawChartAxes);
|
|
407
|
-
|
|
408
409
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
409
410
|
args[_key] = arguments[_key];
|
|
410
411
|
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "state", {
|
|
412
|
+
_this3 = _callSuper(this, RawChartAxes, [].concat(args));
|
|
413
|
+
(0, _defineProperty2["default"])(_this3, "state", {
|
|
414
414
|
height: 0,
|
|
415
415
|
width: 0
|
|
416
416
|
});
|
|
417
417
|
return _this3;
|
|
418
418
|
}
|
|
419
|
-
|
|
420
|
-
(0, _createClass2["default"])(RawChartAxes, [{
|
|
419
|
+
(0, _inherits2["default"])(RawChartAxes, _React$Component2);
|
|
420
|
+
return (0, _createClass2["default"])(RawChartAxes, [{
|
|
421
421
|
key: "componentDidMount",
|
|
422
422
|
value: function componentDidMount() {
|
|
423
423
|
if (this.hiddenLabelRef) {
|
|
424
424
|
var boundingClientRect = this.hiddenLabelRef.getBoundingClientRect();
|
|
425
|
-
var hiddenEl = this.hiddenLabelRef
|
|
425
|
+
var hiddenEl = this.hiddenLabelRef;
|
|
426
426
|
|
|
427
|
+
// same logic used in dropdown.jsx for hidden labels width calculation
|
|
427
428
|
if (hiddenEl) {
|
|
428
429
|
var containsLatex = hiddenEl.querySelector('[data-latex], [data-raw]');
|
|
429
430
|
var hasMathJax = hiddenEl.querySelector('mjx-container');
|
|
430
431
|
var mathHandled = hiddenEl.querySelector('[data-math-handled="true"]');
|
|
431
|
-
|
|
432
432
|
if (containsLatex && (!mathHandled || !hasMathJax)) {
|
|
433
433
|
(0, _mathRendering.renderMath)(this.hiddenLabelRef);
|
|
434
434
|
}
|
|
435
|
-
|
|
436
435
|
this.setState({
|
|
437
436
|
height: Math.floor(boundingClientRect.height),
|
|
438
437
|
width: Math.floor(boundingClientRect.width)
|
|
@@ -442,10 +441,9 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
|
442
441
|
}
|
|
443
442
|
}, {
|
|
444
443
|
key: "componentDidUpdate",
|
|
445
|
-
value: function componentDidUpdate(
|
|
444
|
+
value: function componentDidUpdate() {
|
|
446
445
|
if (this.hiddenLabelRef) {
|
|
447
446
|
var width = Math.floor(this.hiddenLabelRef.getBoundingClientRect().width);
|
|
448
|
-
|
|
449
447
|
if (width !== this.state.width) {
|
|
450
448
|
this.setState({
|
|
451
449
|
width: width
|
|
@@ -457,69 +455,59 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
|
457
455
|
key: "render",
|
|
458
456
|
value: function render() {
|
|
459
457
|
var _this4 = this;
|
|
460
|
-
|
|
461
458
|
var _this$props5 = this.props,
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
range = _ref3$range === void 0 ? {} : _ref3$range,
|
|
489
|
-
_ref3$domain = _ref3.domain,
|
|
490
|
-
domain = _ref3$domain === void 0 ? {} : _ref3$domain,
|
|
491
|
-
_ref3$size = _ref3.size,
|
|
492
|
-
size = _ref3$size === void 0 ? {} : _ref3$size;
|
|
493
|
-
|
|
459
|
+
graphProps = _this$props5.graphProps,
|
|
460
|
+
xBand = _this$props5.xBand,
|
|
461
|
+
leftAxis = _this$props5.leftAxis,
|
|
462
|
+
onChange = _this$props5.onChange,
|
|
463
|
+
onChangeCategory = _this$props5.onChangeCategory,
|
|
464
|
+
_this$props5$categori = _this$props5.categories,
|
|
465
|
+
categories = _this$props5$categori === void 0 ? [] : _this$props5$categori,
|
|
466
|
+
top = _this$props5.top,
|
|
467
|
+
defineChart = _this$props5.defineChart,
|
|
468
|
+
chartingOptions = _this$props5.chartingOptions,
|
|
469
|
+
changeInteractiveEnabled = _this$props5.changeInteractiveEnabled,
|
|
470
|
+
changeEditableEnabled = _this$props5.changeEditableEnabled,
|
|
471
|
+
theme = _this$props5.theme,
|
|
472
|
+
autoFocus = _this$props5.autoFocus,
|
|
473
|
+
onAutoFocusUsed = _this$props5.onAutoFocusUsed,
|
|
474
|
+
error = _this$props5.error,
|
|
475
|
+
showCorrectness = _this$props5.showCorrectness;
|
|
476
|
+
var _ref5 = graphProps || {},
|
|
477
|
+
_ref5$scale = _ref5.scale,
|
|
478
|
+
scale = _ref5$scale === void 0 ? {} : _ref5$scale,
|
|
479
|
+
_ref5$range = _ref5.range,
|
|
480
|
+
range = _ref5$range === void 0 ? {} : _ref5$range,
|
|
481
|
+
_ref5$domain = _ref5.domain,
|
|
482
|
+
domain = _ref5$domain === void 0 ? {} : _ref5$domain,
|
|
483
|
+
_ref5$size = _ref5.size,
|
|
484
|
+
size = _ref5$size === void 0 ? {} : _ref5$size;
|
|
494
485
|
var _this$state = this.state,
|
|
495
|
-
|
|
496
|
-
|
|
486
|
+
height = _this$state.height,
|
|
487
|
+
width = _this$state.width;
|
|
497
488
|
var bottomScale = xBand && typeof xBand.rangeRound === 'function' && xBand.rangeRound([0, size.width]);
|
|
498
|
-
var bandWidth = xBand && typeof xBand.bandwidth === 'function' && xBand.bandwidth();
|
|
499
|
-
|
|
489
|
+
var bandWidth = xBand && typeof xBand.bandwidth === 'function' && xBand.bandwidth();
|
|
490
|
+
// for chartType "line", bandWidth will be 0, so we have to calculate it
|
|
500
491
|
var barWidth = bandWidth || scale.x && scale.x(domain.max) / categories.length;
|
|
501
492
|
var rowTickValues = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
|
|
502
493
|
step: range.labelStep
|
|
503
494
|
}));
|
|
504
|
-
var fontSize = theme && theme.typography ? theme.typography.fontSize : 14;
|
|
505
|
-
|
|
506
|
-
var rotateBecauseOfHeight = (0, _utils.getRotateAngle)(fontSize, height);
|
|
507
|
-
|
|
495
|
+
var fontSize = theme && theme.typography ? theme.typography.fontSize : 14;
|
|
496
|
+
// this mostly applies for labels that are not editable
|
|
497
|
+
var rotateBecauseOfHeight = (0, _utils.getRotateAngle)(fontSize, height);
|
|
498
|
+
// this applies for labels that are editable
|
|
508
499
|
var rotateBecauseOfWidth = width > barWidth ? 25 : 0;
|
|
509
|
-
|
|
510
500
|
var getTickLabelProps = function getTickLabelProps(value) {
|
|
511
501
|
return {
|
|
512
502
|
dy: 4,
|
|
513
503
|
dx: -10 - (value.toLocaleString().length || 1) * 5
|
|
514
504
|
};
|
|
515
505
|
};
|
|
516
|
-
|
|
517
506
|
var getTickComponent = function getTickComponent(props) {
|
|
518
507
|
var properties = {
|
|
519
508
|
hiddenLabelRef: function hiddenLabelRef(ref) {
|
|
520
509
|
_this4.hiddenLabelRef = ref;
|
|
521
510
|
},
|
|
522
|
-
classes: classes,
|
|
523
511
|
categories: categories,
|
|
524
512
|
xBand: xBand,
|
|
525
513
|
bandWidth: bandWidth,
|
|
@@ -543,21 +531,15 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
|
543
531
|
};
|
|
544
532
|
return /*#__PURE__*/_react["default"].createElement(TickComponent, properties);
|
|
545
533
|
};
|
|
546
|
-
|
|
547
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, leftAxis && /*#__PURE__*/_react["default"].createElement(_axis.AxisLeft, {
|
|
534
|
+
return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, leftAxis && /*#__PURE__*/_react["default"].createElement(_axis.AxisLeft, {
|
|
548
535
|
scale: scale.y,
|
|
549
|
-
className: axis,
|
|
550
|
-
axisLineClassName: axisLine,
|
|
551
536
|
tickLength: 10,
|
|
552
|
-
tickClassName: tick,
|
|
553
537
|
tickFormat: function tickFormat(value) {
|
|
554
538
|
return value;
|
|
555
539
|
},
|
|
556
540
|
tickValues: rowTickValues,
|
|
557
541
|
tickLabelProps: getTickLabelProps
|
|
558
542
|
}), /*#__PURE__*/_react["default"].createElement(_axis.AxisBottom, {
|
|
559
|
-
axisLineClassName: axisLine,
|
|
560
|
-
tickClassName: tick,
|
|
561
543
|
scale: bottomScale,
|
|
562
544
|
labelProps: {
|
|
563
545
|
y: 60 + top
|
|
@@ -577,13 +559,9 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
|
|
|
577
559
|
}));
|
|
578
560
|
}
|
|
579
561
|
}]);
|
|
580
|
-
return RawChartAxes;
|
|
581
562
|
}(_react["default"].Component);
|
|
582
|
-
|
|
583
|
-
exports.RawChartAxes = RawChartAxes;
|
|
584
563
|
(0, _defineProperty2["default"])(RawChartAxes, "propTypes", {
|
|
585
564
|
bottomScale: _propTypes["default"].func,
|
|
586
|
-
classes: _propTypes["default"].object.isRequired,
|
|
587
565
|
categories: _propTypes["default"].array,
|
|
588
566
|
defineChart: _propTypes["default"].bool,
|
|
589
567
|
error: _propTypes["default"].any,
|
|
@@ -599,64 +577,10 @@ exports.RawChartAxes = RawChartAxes;
|
|
|
599
577
|
changeEditableEnabled: _propTypes["default"].bool,
|
|
600
578
|
autoFocus: _propTypes["default"].bool,
|
|
601
579
|
onAutoFocusUsed: _propTypes["default"].func,
|
|
602
|
-
showCorrectness: _propTypes["default"].bool
|
|
580
|
+
showCorrectness: _propTypes["default"].bool,
|
|
581
|
+
hiddenLabelRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].shape({
|
|
582
|
+
current: _propTypes["default"].instanceOf(Element)
|
|
583
|
+
})])
|
|
603
584
|
});
|
|
604
|
-
var
|
|
605
|
-
return {
|
|
606
|
-
axis: {
|
|
607
|
-
stroke: _renderUi.color.primaryDark(),
|
|
608
|
-
strokeWidth: 2
|
|
609
|
-
},
|
|
610
|
-
axisLine: {
|
|
611
|
-
stroke: _renderUi.color.visualElementsColors.AXIS_LINE_COLOR,
|
|
612
|
-
strokeWidth: 2
|
|
613
|
-
},
|
|
614
|
-
tick: {
|
|
615
|
-
'& > line': {
|
|
616
|
-
stroke: _renderUi.color.primaryDark(),
|
|
617
|
-
strokeWidth: 2
|
|
618
|
-
},
|
|
619
|
-
fontFamily: theme.typography.body1.fontFamily,
|
|
620
|
-
fontSize: theme.typography.fontSize,
|
|
621
|
-
textAnchor: 'middle'
|
|
622
|
-
},
|
|
623
|
-
dottedLine: {
|
|
624
|
-
stroke: _renderUi.color.primaryLight(),
|
|
625
|
-
opacity: 0.2
|
|
626
|
-
},
|
|
627
|
-
error: {
|
|
628
|
-
fontSize: theme.typography.fontSize - 2,
|
|
629
|
-
fill: theme.palette.error.main
|
|
630
|
-
},
|
|
631
|
-
customColor: {
|
|
632
|
-
color: "".concat(_renderUi.color.tertiary(), " !important")
|
|
633
|
-
},
|
|
634
|
-
correctnessIcon: {
|
|
635
|
-
borderRadius: theme.spacing.unit * 2,
|
|
636
|
-
color: _renderUi.color.defaults.WHITE,
|
|
637
|
-
fontSize: '16px',
|
|
638
|
-
width: '16px',
|
|
639
|
-
height: '16px',
|
|
640
|
-
padding: '2px',
|
|
641
|
-
border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
|
|
642
|
-
boxSizing: 'unset' // to override the default border-box in IBX
|
|
643
|
-
|
|
644
|
-
},
|
|
645
|
-
incorrectIcon: {
|
|
646
|
-
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
647
|
-
},
|
|
648
|
-
correctIcon: {
|
|
649
|
-
backgroundColor: _renderUi.color.correct()
|
|
650
|
-
},
|
|
651
|
-
tickContainer: {
|
|
652
|
-
display: 'flex',
|
|
653
|
-
flexDirection: 'column',
|
|
654
|
-
alignItems: 'center'
|
|
655
|
-
}
|
|
656
|
-
};
|
|
657
|
-
}, {
|
|
658
|
-
withTheme: true
|
|
659
|
-
})(RawChartAxes);
|
|
660
|
-
var _default = ChartAxes;
|
|
661
|
-
exports["default"] = _default;
|
|
662
|
-
//# sourceMappingURL=axes.js.map
|
|
585
|
+
var _default = exports["default"] = RawChartAxes;
|
|
586
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX2F4aXMiLCJfQ2hlY2tib3giLCJfcGxvdCIsIl9yZW5kZXJVaSIsIl9jb25maWdVaSIsIl9tYXRoUmVuZGVyaW5nIiwiX2NvcnJlY3RuZXNzSW5kaWNhdG9ycyIsIl91dGlscyIsIl9tYXJrTGFiZWwiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIlN0eWxlZEVycm9yVGV4dCIsInN0eWxlZCIsIl9yZWYiLCJ0aGVtZSIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImZpbGwiLCJwYWxldHRlIiwiZXJyb3IiLCJtYWluIiwiU3R5bGVkQ2hlY2tib3giLCJDaGVja2JveCIsImNvbG9yIiwiY29uY2F0IiwidGVydGlhcnkiLCJTdHlsZWRBeGVzR3JvdXAiLCJfcmVmMiIsIl90aGVtZSR0eXBvZ3JhcGh5JGJvZCIsInN0cm9rZSIsInZpc3VhbEVsZW1lbnRzQ29sb3JzIiwiQVhJU19MSU5FX0NPTE9SIiwic3Ryb2tlV2lkdGgiLCJBWElTX1RJQ0tfQ09MT1IiLCJmb250RmFtaWx5IiwiYm9keTEiLCJ0ZXh0QW5jaG9yIiwiY29ycmVjdG5lc3NJY29uU3R5bGVzIiwiYm9yZGVyUmFkaXVzIiwic3BhY2luZyIsImRlZmF1bHRzIiwiV0hJVEUiLCJ3aWR0aCIsImhlaWdodCIsInBhZGRpbmciLCJib3JkZXIiLCJib3hTaXppbmciLCJpbmNvcnJlY3RJY29uU3R5bGVzIiwiYmFja2dyb3VuZENvbG9yIiwiaW5jb3JyZWN0V2l0aEljb24iLCJjb3JyZWN0SWNvblN0eWxlcyIsImNvcnJlY3QiLCJUaWNrQ29tcG9uZW50IiwiZXhwb3J0cyIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIm9wZW4iLCJjYWxsYmFjayIsInNldFN0YXRlIiwiZGlhbG9nIiwiaW5kZXgiLCJuZXdMYWJlbCIsIl90aGlzJHByb3BzIiwiY2F0ZWdvcmllcyIsIm9uQ2hhbmdlQ2F0ZWdvcnkiLCJjYXRlZ29yeSIsImxhYmVsIiwidmFsdWUiLCJfdGhpcyRwcm9wczIiLCJ0aXRsZSIsInRleHQiLCJvbkNvbmZpcm0iLCJoYW5kbGVBbGVydERpYWxvZyIsImludGVyYWN0aXZlIiwib25DbG9zZSIsIl90aGlzJHByb3BzMyIsImVkaXRhYmxlIiwibWF4Q2hhciIsImNodW5rcyIsImluZGV4VG9TcGxpdCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwidHJpbSIsInN0YXRlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJhdXRvRm9jdXMiLCJvbkF1dG9Gb2N1c1VzZWQiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczQiLCJ4QmFuZCIsImJhbmRXaWR0aCIsImJhcldpZHRoIiwicm90YXRlIiwidG9wIiwiZ3JhcGhQcm9wcyIsImRlZmluZUNoYXJ0IiwiY2hhcnRpbmdPcHRpb25zIiwieCIsInkiLCJmb3JtYXR0ZWRWYWx1ZSIsImNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCIsImNoYW5nZUVkaXRhYmxlRW5hYmxlZCIsImhpZGRlbkxhYmVsUmVmIiwic2hvd0NvcnJlY3RuZXNzIiwiY2xhc3NlcyIsImNvcnJlY3RuZXNzSWNvbiIsImluY29ycmVjdEljb24iLCJjb3JyZWN0SWNvbiIsIl9yZWYzIiwiY2hhbmdlRWRpdGFibGUiLCJjaGFuZ2VJbnRlcmFjdGl2ZSIsInBhcnNlSW50Iiwic3BsaXQiLCJfcmVmNCIsImNvcnJlY3RuZXNzIiwiYmFyWCIsImJhbmRLZXkiLCJsb25nZXN0Q2F0ZWdvcnkiLCJyZWR1Y2UiLCJhIiwiYiIsImxlbmd0aEEiLCJsZW5ndGhCIiwiZGlzdGluY3RNZXNzYWdlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJTZXQiLCJ2YWx1ZXMiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwicG9pbnRlckV2ZW50cyIsIm92ZXJmbG93IiwiaXNIaWRkZW5MYWJlbCIsImlucHV0UmVmIiwiZGlzYWJsZWQiLCJtYXJrIiwiaW5wdXQiLCJvbkNoYW5nZSIsImNoYW5nZUNhdGVnb3J5IiwibGltaXRDaGFyYWN0ZXJzIiwiY29ycmVjdG5lc3NJbmRpY2F0b3IiLCJUaWNrQ29ycmVjdG5lc3NJbmRpY2F0b3IiLCJwb3NpdGlvbiIsIndvcmRCcmVhayIsIm1heFdpZHRoIiwiZGlzcGxheSIsInNwbGl0VGV4dCIsImF1dGhvcmluZ0xhYmVsIiwibWFwIiwid29yZCIsImR5IiwiY2hlY2tlZCIsInRhcmdldCIsIkFsZXJ0RGlhbG9nIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwiYW55IiwicHJvcFR5cGVzIiwiYXJyYXkiLCJmdW5jIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIiwib25lT2ZUeXBlIiwic2hhcGUiLCJjdXJyZW50IiwiaW5zdGFuY2VPZiIsIkVsZW1lbnQiLCJSYXdDaGFydEF4ZXMiLCJfUmVhY3QkQ29tcG9uZW50MiIsIl90aGlzMyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29tcG9uZW50RGlkTW91bnQiLCJib3VuZGluZ0NsaWVudFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoaWRkZW5FbCIsImNvbnRhaW5zTGF0ZXgiLCJxdWVyeVNlbGVjdG9yIiwiaGFzTWF0aEpheCIsIm1hdGhIYW5kbGVkIiwicmVuZGVyTWF0aCIsIk1hdGgiLCJmbG9vciIsIl90aGlzNCIsIl90aGlzJHByb3BzNSIsImxlZnRBeGlzIiwiX3RoaXMkcHJvcHM1JGNhdGVnb3JpIiwiX3JlZjUiLCJfcmVmNSRzY2FsZSIsInNjYWxlIiwiX3JlZjUkcmFuZ2UiLCJyYW5nZSIsIl9yZWY1JGRvbWFpbiIsImRvbWFpbiIsIl9yZWY1JHNpemUiLCJzaXplIiwiX3RoaXMkc3RhdGUiLCJib3R0b21TY2FsZSIsInJhbmdlUm91bmQiLCJiYW5kd2lkdGgiLCJtYXgiLCJyb3dUaWNrVmFsdWVzIiwiZ2V0VGlja1ZhbHVlcyIsInN0ZXAiLCJsYWJlbFN0ZXAiLCJyb3RhdGVCZWNhdXNlT2ZIZWlnaHQiLCJnZXRSb3RhdGVBbmdsZSIsInJvdGF0ZUJlY2F1c2VPZldpZHRoIiwiZ2V0VGlja0xhYmVsUHJvcHMiLCJkeCIsInRvTG9jYWxlU3RyaW5nIiwiZ2V0VGlja0NvbXBvbmVudCIsInByb3BlcnRpZXMiLCJyZWYiLCJBeGlzTGVmdCIsInRpY2tMZW5ndGgiLCJ0aWNrRm9ybWF0IiwidGlja1ZhbHVlcyIsInRpY2tMYWJlbFByb3BzIiwiQXhpc0JvdHRvbSIsImxhYmVsUHJvcHMiLCJtaW4iLCJ0ZXh0TGFiZWxQcm9wcyIsImNvdW50IiwidGlja0NvbXBvbmVudCIsInR5cGVzIiwiR3JhcGhQcm9wc1R5cGUiLCJpc1JlcXVpcmVkIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvYXhlcy5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBBeGlzTGVmdCwgQXhpc0JvdHRvbSB9IGZyb20gJ0B2aXN4L2F4aXMnO1xuaW1wb3J0IENoZWNrYm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gnO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IHsgQWxlcnREaWFsb2cgfSBmcm9tICdAcGllLWxpYi9jb25maWctdWknO1xuaW1wb3J0IHsgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcblxuaW1wb3J0IHsgVGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIH0gZnJvbSAnLi9jb21tb24vY29ycmVjdG5lc3MtaW5kaWNhdG9ycyc7XG5pbXBvcnQgeyBiYW5kS2V5LCBnZXRUaWNrVmFsdWVzLCBnZXRSb3RhdGVBbmdsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuL21hcmstbGFiZWwnO1xuXG5jb25zdCBTdHlsZWRFcnJvclRleHQgPSBzdHlsZWQoJ3RleHQnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSAtIDIsXG4gIGZpbGw6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbn0pKTtcblxuY29uc3QgU3R5bGVkQ2hlY2tib3ggPSBzdHlsZWQoQ2hlY2tib3gpKCgpID0+ICh7XG4gIGNvbG9yOiBgJHtjb2xvci50ZXJ0aWFyeSgpfSAhaW1wb3J0YW50YCxcbn0pKTtcblxuY29uc3QgU3R5bGVkQXhlc0dyb3VwID0gc3R5bGVkKCdnJykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgJyYgLnZ4LWF4aXMtbGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLkFYSVNfTElORV9DT0xPUixcbiAgICBzdHJva2VXaWR0aDogMixcbiAgfSxcbiAgJyYgLnZ4LWF4aXMtdGljayc6IHtcbiAgICBmaWxsOiBjb2xvci52aXN1YWxFbGVtZW50c0NvbG9ycy5BWElTX1RJQ0tfQ09MT1IsXG4gICAgJyYgbGluZSc6IHtcbiAgICAgIHN0cm9rZTogY29sb3IudmlzdWFsRWxlbWVudHNDb2xvcnMuQVhJU19USUNLX0NPTE9SLFxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgfSxcbiAgICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxPy5mb250RmFtaWx5LFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplLFxuICAgIHRleHRBbmNob3I6ICdtaWRkbGUnLFxuICB9LFxufSkpO1xuXG5jb25zdCBjb3JyZWN0bmVzc0ljb25TdHlsZXMgPSAodGhlbWUpID0+ICh7XG4gIGJvcmRlclJhZGl1czogdGhlbWUuc3BhY2luZygyKSxcbiAgY29sb3I6IGNvbG9yLmRlZmF1bHRzLldISVRFLFxuICBmb250U2l6ZTogJzE2cHgnLFxuICB3aWR0aDogJzE2cHgnLFxuICBoZWlnaHQ6ICcxNnB4JyxcbiAgcGFkZGluZzogJzJweCcsXG4gIGJvcmRlcjogYDFweCBzb2xpZCAke2NvbG9yLmRlZmF1bHRzLldISVRFfWAsXG4gIGJveFNpemluZzogJ3Vuc2V0JywgLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYm9yZGVyLWJveCBpbiBJQlhcbn0pO1xuXG5jb25zdCBpbmNvcnJlY3RJY29uU3R5bGVzID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmluY29ycmVjdFdpdGhJY29uKCksXG59O1xuXG5jb25zdCBjb3JyZWN0SWNvblN0eWxlcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5jb3JyZWN0KCksXG59O1xuXG5leHBvcnQgY2xhc3MgVGlja0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGVycm9yOiBQcm9wVHlwZXMuYW55LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkaWFsb2c6IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzICYmICFwcmV2UHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQXV0b0ZvY3VzVXNlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFsZXJ0RGlhbG9nID0gKG9wZW4sIGNhbGxiYWNrKSA9PlxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGRpYWxvZzogeyBvcGVuIH0sXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2ssXG4gICAgKTtcblxuICBjaGFuZ2VDYXRlZ29yeSA9IChpbmRleCwgbmV3TGFiZWwpID0+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIG9uQ2hhbmdlQ2F0ZWdvcnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2luZGV4XTtcblxuICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGxhYmVsOiBuZXdMYWJlbCB9KTtcbiAgfTtcblxuICBjaGFuZ2VJbnRlcmFjdGl2ZSA9IChpbmRleCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIG9uQ2hhbmdlQ2F0ZWdvcnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2luZGV4XTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkaWFsb2c6IHtcbiAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgIHRpdGxlOiAnV2FybmluZycsXG4gICAgICAgICAgdGV4dDogJ1RoaXMgd2lsbCByZW1vdmUgdGhlIGNvcnJlY3QgYW5zd2VyIHZhbHVlIHRoYXQgaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBjYXRlZ29yeS4nLFxuICAgICAgICAgIG9uQ29uZmlybTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWxlcnREaWFsb2coZmFsc2UsIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGludGVyYWN0aXZlOiAhY2F0ZWdvcnkuaW50ZXJhY3RpdmUgfSkpLFxuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHRoaXMuaGFuZGxlQWxlcnREaWFsb2coZmFsc2UpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGludGVyYWN0aXZlOiAhY2F0ZWdvcnkuaW50ZXJhY3RpdmUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNoYW5nZUVkaXRhYmxlID0gKGluZGV4LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgY2F0ZWdvcmllcywgb25DaGFuZ2VDYXRlZ29yeSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbaW5kZXhdO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgdGl0bGU6ICdXYXJuaW5nJyxcbiAgICAgICAgICB0ZXh0OiAnVGhpcyB3aWxsIHJlbW92ZSB0aGUgY29ycmVjdCBhbnN3ZXIgY2F0ZWdvcnkgbmFtZSB0aGF0IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgY2F0ZWdvcnkuJyxcbiAgICAgICAgICBvbkNvbmZpcm06ICgpID0+XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFsZXJ0RGlhbG9nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgb25DaGFuZ2VDYXRlZ29yeShpbmRleCwgeyAuLi5jYXRlZ29yeSwgZWRpdGFibGU6ICFjYXRlZ29yeS5lZGl0YWJsZSB8fCBmYWxzZSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5oYW5kbGVBbGVydERpYWxvZyhmYWxzZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2VDYXRlZ29yeShpbmRleCwgeyAuLi5jYXRlZ29yeSwgZWRpdGFibGU6ICFjYXRlZ29yeS5lZGl0YWJsZSB8fCBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3BsaXRUZXh0ID0gKHRleHQsIG1heENoYXIpID0+IHtcbiAgICBsZXQgY2h1bmtzID0gW107XG4gICAgd2hpbGUgKCh0ZXh0IHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaW5kZXhUb1NwbGl0O1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gbWF4Q2hhcikge1xuICAgICAgICBpbmRleFRvU3BsaXQgPSB0ZXh0Lmxhc3RJbmRleE9mKCcgJywgbWF4Q2hhcik7XG4gICAgICAgIGlmIChpbmRleFRvU3BsaXQgPT09IC0xKSB7XG4gICAgICAgICAgaW5kZXhUb1NwbGl0ID0gbWF4Q2hhcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhUb1NwbGl0ID0gdGV4dC5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjaHVua3MucHVzaCh0ZXh0LnN1YnN0cmluZygwLCBpbmRleFRvU3BsaXQpKTtcbiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhpbmRleFRvU3BsaXQpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2F0ZWdvcmllcyxcbiAgICAgIHhCYW5kLFxuICAgICAgYmFuZFdpZHRoLFxuICAgICAgYmFyV2lkdGgsXG4gICAgICByb3RhdGUsXG4gICAgICB0b3AsXG4gICAgICBncmFwaFByb3BzLFxuICAgICAgZGVmaW5lQ2hhcnQsXG4gICAgICBjaGFydGluZ09wdGlvbnMsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkLFxuICAgICAgY2hhbmdlRWRpdGFibGVFbmFibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBoaWRkZW5MYWJlbFJlZixcbiAgICAgIHNob3dDb3JyZWN0bmVzcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghZm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjbGFzc2VzIG9iamVjdCBmb3IgVGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgY29ycmVjdG5lc3NJY29uOiBjb3JyZWN0bmVzc0ljb25TdHlsZXMsXG4gICAgICBpbmNvcnJlY3RJY29uOiBpbmNvcnJlY3RJY29uU3R5bGVzLFxuICAgICAgY29ycmVjdEljb246IGNvcnJlY3RJY29uU3R5bGVzLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGRpYWxvZyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGNoYW5nZUVkaXRhYmxlLCBjaGFuZ2VJbnRlcmFjdGl2ZSB9ID0gY2hhcnRpbmdPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoZm9ybWF0dGVkVmFsdWUuc3BsaXQoJy0nKVswXSwgMTApO1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tpbmRleF07XG4gICAgY29uc3QgeyBlZGl0YWJsZSwgaW50ZXJhY3RpdmUsIGxhYmVsLCBjb3JyZWN0bmVzcyB9ID0gY2F0ZWdvcnkgfHwge307XG4gICAgY29uc3QgYmFyWCA9IHhCYW5kKGJhbmRLZXkoeyBsYWJlbCB9LCBpbmRleCkpO1xuICAgIGNvbnN0IGxvbmdlc3RDYXRlZ29yeSA9IChjYXRlZ29yaWVzIHx8IFtdKS5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGxlbmd0aEEgPSBhICYmIGEubGFiZWwgPyBhLmxhYmVsLmxlbmd0aCA6IDA7XG4gICAgICBjb25zdCBsZW5ndGhCID0gYiAmJiBiLmxhYmVsID8gYi5sYWJlbC5sZW5ndGggOiAwO1xuXG4gICAgICByZXR1cm4gbGVuZ3RoQSA+IGxlbmd0aEIgPyBhIDogYjtcbiAgICB9LCB7IGxhYmVsOiAnJyB9KTtcbiAgICBjb25zdCBkaXN0aW5jdE1lc3NhZ2VzID0gZXJyb3IgPyBbLi4ubmV3IFNldChPYmplY3QudmFsdWVzKGVycm9yKSldLmpvaW4oJyAnKSA6ICcnO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxnPlxuICAgICAgICA8Zm9yZWlnbk9iamVjdFxuICAgICAgICAgIHg9e2JhbmRXaWR0aCA/IGJhclggOiB4IC0gYmFyV2lkdGggLyAyfVxuICAgICAgICAgIHk9ezE4fVxuICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9ezR9XG4gICAgICAgICAgc3R5bGU9e3sgcG9pbnRlckV2ZW50czogJ25vbmUnLCBvdmVyZmxvdzogJ3Zpc2libGUnIH19XG4gICAgICAgID5cbiAgICAgICAgICB7aW5kZXggPT09IDAgJiYgKFxuICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICBpc0hpZGRlbkxhYmVsPXt0cnVlfVxuICAgICAgICAgICAgICBpbnB1dFJlZj17aGlkZGVuTGFiZWxSZWZ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxuICAgICAgICAgICAgICBtYXJrPXtsb25nZXN0Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICAgIGJhcldpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17ZGVmaW5lQ2hhcnQgJiYgYXV0b0ZvY3VzfVxuICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dCA9IHIpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFkZWZpbmVDaGFydCAmJiAhZWRpdGFibGV9XG4gICAgICAgICAgICBtYXJrPXtjYXRlZ29yeX1cbiAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICBvbkNoYW5nZT17KG5ld0xhYmVsKSA9PiB0aGlzLmNoYW5nZUNhdGVnb3J5KGluZGV4LCBuZXdMYWJlbCl9XG4gICAgICAgICAgICBiYXJXaWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgICByb3RhdGU9e3JvdGF0ZX1cbiAgICAgICAgICAgIGNvcnJlY3RuZXNzPXtjb3JyZWN0bmVzc31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciAmJiBlcnJvcltpbmRleF19XG4gICAgICAgICAgICBsaW1pdENoYXJhY3RlcnNcbiAgICAgICAgICAgIGNvcnJlY3RuZXNzSW5kaWNhdG9yPXtcbiAgICAgICAgICAgICAgc2hvd0NvcnJlY3RuZXNzICYmXG4gICAgICAgICAgICAgIGNvcnJlY3RuZXNzICYmIChcbiAgICAgICAgICAgICAgICA8VGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIGNvcnJlY3RuZXNzPXtjb3JyZWN0bmVzc30gaW50ZXJhY3RpdmU9e2ludGVyYWN0aXZlfSBjbGFzc2VzPXtjbGFzc2VzfSAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuXG4gICAgICAgIHtlcnJvciAmJiBpbmRleCA9PT0gMCAmJiAoXG4gICAgICAgICAgPFN0eWxlZEVycm9yVGV4dCB5PXt5ICsgMjN9IGhlaWdodD17Nn0gdGV4dEFuY2hvcj1cInN0YXJ0XCI+XG4gICAgICAgICAgICB7ZGlzdGluY3RNZXNzYWdlc31cbiAgICAgICAgICA8L1N0eWxlZEVycm9yVGV4dD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZGVmaW5lQ2hhcnQgJiYgaW5kZXggPT09IDAgJiYgKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHg9ey01NX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8dGV4dFxuICAgICAgICAgICAgICAgIHk9e3kgKyA5MCArIHRvcH1cbiAgICAgICAgICAgICAgICB3aWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJhcldpZHRoLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0aGlzLnNwbGl0VGV4dChjaGFuZ2VJbnRlcmFjdGl2ZT8uYXV0aG9yaW5nTGFiZWwsIDIwKS5tYXAoKHdvcmQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8dHNwYW4ga2V5PXtpbmRleH0geD1cIjBcIiBkeT17YCR7aW5kZXggPiAwID8gJzEuMmVtJyA6ICcuNmVtJ31gfT5cbiAgICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgICA8L3RzcGFuPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7Y2hhbmdlRWRpdGFibGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPHRleHRcbiAgICAgICAgICAgICAgICB5PXt5ICsgMTQ1ICsgdG9wfVxuICAgICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezR9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RoaXMuc3BsaXRUZXh0KGNoYW5nZUVkaXRhYmxlPy5hdXRob3JpbmdMYWJlbCwgMjApLm1hcCgod29yZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDx0c3BhbiBrZXk9e2luZGV4fSB4PVwiMFwiIGR5PXtgJHtpbmRleCA+IDAgPyAnMS4yZW0nIDogJy42ZW0nfWB9PlxuICAgICAgICAgICAgICAgICAgICB7d29yZH1cbiAgICAgICAgICAgICAgICAgIDwvdHNwYW4+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RlZmluZUNoYXJ0ICYmIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICAgIHg9e3ggLSAyNH1cbiAgICAgICAgICAgIHk9e3kgKyA4MCArIHRvcH1cbiAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgIGhlaWdodD17NH1cbiAgICAgICAgICAgIHN0eWxlPXt7IHBvaW50ZXJFdmVudHM6ICd2aXNpYmxlJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogJ2ZpeGVkJyB9fVxuICAgICAgICAgICAgICBjaGVja2VkPXtpbnRlcmFjdGl2ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLmNoYW5nZUludGVyYWN0aXZlKGluZGV4LCBlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuXG4gICAgICAgIHtkZWZpbmVDaGFydCAmJiBjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgJiYgKFxuICAgICAgICAgIDxmb3JlaWduT2JqZWN0XG4gICAgICAgICAgICB4PXt4IC0gMjR9XG4gICAgICAgICAgICB5PXt5ICsgMTMwICsgdG9wfVxuICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgICAgc3R5bGU9e3sgcG9pbnRlckV2ZW50czogJ3Zpc2libGUnLCBvdmVyZmxvdzogJ3Zpc2libGUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiAnZml4ZWQnIH19XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2VkaXRhYmxlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuY2hhbmdlRWRpdGFibGUoaW5kZXgsIGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XG4gICAgICAgICl9XG5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICB4PXt4IC0gMjR9XG4gICAgICAgICAgeT17eSArIDEwMCArIHRvcH1cbiAgICAgICAgICB3aWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgIHN0eWxlPXt7IHBvaW50ZXJFdmVudHM6ICd2aXNpYmxlJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEFsZXJ0RGlhbG9nXG4gICAgICAgICAgICBvcGVuPXtkaWFsb2cub3Blbn1cbiAgICAgICAgICAgIHRpdGxlPXtkaWFsb2cudGl0bGV9XG4gICAgICAgICAgICB0ZXh0PXtkaWFsb2cudGV4dH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2RpYWxvZy5vbkNsb3NlfVxuICAgICAgICAgICAgb25Db25maXJtPXtkaWFsb2cub25Db25maXJtfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIDwvZz5cbiAgICApO1xuICB9XG59XG5cblRpY2tDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICBjYXRlZ29yaWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIHhCYW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgYmFuZFdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBiYXJXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgcm90YXRlOiBQcm9wVHlwZXMubnVtYmVyLFxuICB0b3A6IFByb3BUeXBlcy5udW1iZXIsXG4gIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHk6IFByb3BUeXBlcy5udW1iZXIsXG4gIGdyYXBoUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGZvcm1hdHRlZFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNoYW5nZUNhdGVnb3J5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBlcnJvcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGFydGluZ09wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoYW5nZUVkaXRhYmxlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQXV0b0ZvY3VzVXNlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dDb3JyZWN0bmVzczogUHJvcFR5cGVzLmJvb2wsXG4gIGhpZGRlbkxhYmVsUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHsgY3VycmVudDogUHJvcFR5cGVzLmluc3RhbmNlT2YoRWxlbWVudCkgfSldKSxcbn07XG5cbmV4cG9ydCBjbGFzcyBSYXdDaGFydEF4ZXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGJvdHRvbVNjYWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjYXRlZ29yaWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGVycm9yOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gICAgeEJhbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxlZnRBeGlzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VDYXRlZ29yeTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdG9wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNoYXJ0aW5nT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkF1dG9Gb2N1c1VzZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNob3dDb3JyZWN0bmVzczogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZGVuTGFiZWxSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoeyBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihFbGVtZW50KSB9KV0pLFxuICB9O1xuXG4gIHN0YXRlID0geyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuTGFiZWxSZWYpIHtcbiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuaGlkZGVuTGFiZWxSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBoaWRkZW5FbCA9IHRoaXMuaGlkZGVuTGFiZWxSZWY7XG5cbiAgICAgIC8vIHNhbWUgbG9naWMgdXNlZCBpbiBkcm9wZG93bi5qc3ggZm9yIGhpZGRlbiBsYWJlbHMgd2lkdGggY2FsY3VsYXRpb25cbiAgICAgIGlmIChoaWRkZW5FbCkge1xuICAgICAgICBjb25zdCBjb250YWluc0xhdGV4ID0gaGlkZGVuRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbGF0ZXhdLCBbZGF0YS1yYXddJyk7XG4gICAgICAgIGNvbnN0IGhhc01hdGhKYXggPSBoaWRkZW5FbC5xdWVyeVNlbGVjdG9yKCdtangtY29udGFpbmVyJyk7XG4gICAgICAgIGNvbnN0IG1hdGhIYW5kbGVkID0gaGlkZGVuRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbWF0aC1oYW5kbGVkPVwidHJ1ZVwiXScpO1xuXG4gICAgICAgIGlmIChjb250YWluc0xhdGV4ICYmICghbWF0aEhhbmRsZWQgfHwgIWhhc01hdGhKYXgpKSB7XG4gICAgICAgICAgcmVuZGVyTWF0aCh0aGlzLmhpZGRlbkxhYmVsUmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhlaWdodDogTWF0aC5mbG9vcihib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0KSxcbiAgICAgICAgICB3aWR0aDogTWF0aC5mbG9vcihib3VuZGluZ0NsaWVudFJlY3Qud2lkdGgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuTGFiZWxSZWYpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcih0aGlzLmhpZGRlbkxhYmVsUmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblxuICAgICAgaWYgKHdpZHRoICE9PSB0aGlzLnN0YXRlLndpZHRoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB3aWR0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZ3JhcGhQcm9wcyxcbiAgICAgIHhCYW5kLFxuICAgICAgbGVmdEF4aXMsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnksXG4gICAgICBjYXRlZ29yaWVzID0gW10sXG4gICAgICB0b3AsXG4gICAgICBkZWZpbmVDaGFydCxcbiAgICAgIGNoYXJ0aW5nT3B0aW9ucyxcbiAgICAgIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCxcbiAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCxcbiAgICAgIHRoZW1lLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgb25BdXRvRm9jdXNVc2VkLFxuICAgICAgZXJyb3IsXG4gICAgICBzaG93Q29ycmVjdG5lc3MsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHNjYWxlID0ge30sIHJhbmdlID0ge30sIGRvbWFpbiA9IHt9LCBzaXplID0ge30gfSA9IGdyYXBoUHJvcHMgfHwge307XG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgYm90dG9tU2NhbGUgPSB4QmFuZCAmJiB0eXBlb2YgeEJhbmQucmFuZ2VSb3VuZCA9PT0gJ2Z1bmN0aW9uJyAmJiB4QmFuZC5yYW5nZVJvdW5kKFswLCBzaXplLndpZHRoXSk7XG5cbiAgICBjb25zdCBiYW5kV2lkdGggPSB4QmFuZCAmJiB0eXBlb2YgeEJhbmQuYmFuZHdpZHRoID09PSAnZnVuY3Rpb24nICYmIHhCYW5kLmJhbmR3aWR0aCgpO1xuICAgIC8vIGZvciBjaGFydFR5cGUgXCJsaW5lXCIsIGJhbmRXaWR0aCB3aWxsIGJlIDAsIHNvIHdlIGhhdmUgdG8gY2FsY3VsYXRlIGl0XG4gICAgY29uc3QgYmFyV2lkdGggPSBiYW5kV2lkdGggfHwgKHNjYWxlLnggJiYgc2NhbGUueChkb21haW4ubWF4KSAvIGNhdGVnb3JpZXMubGVuZ3RoKTtcblxuICAgIGNvbnN0IHJvd1RpY2tWYWx1ZXMgPSBnZXRUaWNrVmFsdWVzKHsgLi4ucmFuZ2UsIHN0ZXA6IHJhbmdlLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBmb250U2l6ZSA9IHRoZW1lICYmIHRoZW1lLnR5cG9ncmFwaHkgPyB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplIDogMTQ7XG4gICAgLy8gdGhpcyBtb3N0bHkgYXBwbGllcyBmb3IgbGFiZWxzIHRoYXQgYXJlIG5vdCBlZGl0YWJsZVxuICAgIGNvbnN0IHJvdGF0ZUJlY2F1c2VPZkhlaWdodCA9IGdldFJvdGF0ZUFuZ2xlKGZvbnRTaXplLCBoZWlnaHQpO1xuICAgIC8vIHRoaXMgYXBwbGllcyBmb3IgbGFiZWxzIHRoYXQgYXJlIGVkaXRhYmxlXG4gICAgY29uc3Qgcm90YXRlQmVjYXVzZU9mV2lkdGggPSB3aWR0aCA+IGJhcldpZHRoID8gMjUgOiAwO1xuXG4gICAgY29uc3QgZ2V0VGlja0xhYmVsUHJvcHMgPSAodmFsdWUpID0+ICh7XG4gICAgICBkeTogNCxcbiAgICAgIGR4OiAtMTAgLSAodmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5sZW5ndGggfHwgMSkgKiA1LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0VGlja0NvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgaGlkZGVuTGFiZWxSZWY6IChyZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkxhYmVsUmVmID0gcmVmO1xuICAgICAgICB9LFxuICAgICAgICBjYXRlZ29yaWVzLFxuICAgICAgICB4QmFuZCxcbiAgICAgICAgYmFuZFdpZHRoLFxuICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgcm90YXRlOiByb3RhdGVCZWNhdXNlT2ZIZWlnaHQgfHwgcm90YXRlQmVjYXVzZU9mV2lkdGgsXG4gICAgICAgIHRvcCxcbiAgICAgICAgZGVmaW5lQ2hhcnQsXG4gICAgICAgIGNoYXJ0aW5nT3B0aW9ucyxcbiAgICAgICAgYXV0b0ZvY3VzLFxuICAgICAgICBvbkF1dG9Gb2N1c1VzZWQsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBvbkNoYW5nZUNhdGVnb3J5LFxuICAgICAgICBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQsXG4gICAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCxcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIGdyYXBoUHJvcHMsXG4gICAgICAgIHg6IHByb3BzLngsXG4gICAgICAgIHk6IHByb3BzLnksXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiBwcm9wcy5mb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgc2hvd0NvcnJlY3RuZXNzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIDxUaWNrQ29tcG9uZW50IHsuLi5wcm9wZXJ0aWVzfSAvPjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRBeGVzR3JvdXA+XG4gICAgICAgIHtsZWZ0QXhpcyAmJiAoXG4gICAgICAgICAgPEF4aXNMZWZ0XG4gICAgICAgICAgICBzY2FsZT17c2NhbGUueX1cbiAgICAgICAgICAgIHRpY2tMZW5ndGg9ezEwfVxuICAgICAgICAgICAgdGlja0Zvcm1hdD17KHZhbHVlKSA9PiB2YWx1ZX1cbiAgICAgICAgICAgIHRpY2tWYWx1ZXM9e3Jvd1RpY2tWYWx1ZXN9XG4gICAgICAgICAgICB0aWNrTGFiZWxQcm9wcz17Z2V0VGlja0xhYmVsUHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPEF4aXNCb3R0b21cbiAgICAgICAgICBzY2FsZT17Ym90dG9tU2NhbGV9XG4gICAgICAgICAgbGFiZWxQcm9wcz17eyB5OiA2MCArIHRvcCB9fVxuICAgICAgICAgIHRvcD17c2NhbGUueSAmJiBzY2FsZS55KHJhbmdlLm1pbil9XG4gICAgICAgICAgdGV4dExhYmVsUHJvcHM9eygpID0+ICh7IHRleHRBbmNob3I6ICdtaWRkbGUnIH0pfVxuICAgICAgICAgIHRpY2tGb3JtYXQ9eyhjb3VudCkgPT4gY291bnR9XG4gICAgICAgICAgdGlja0NvbXBvbmVudD17Z2V0VGlja0NvbXBvbmVudH1cbiAgICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgICBvbkF1dG9Gb2N1c1VzZWQ9e29uQXV0b0ZvY3VzVXNlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkQXhlc0dyb3VwPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmF3Q2hhcnRBeGVzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FB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
|