@vizzly/dashboard 0.14.4-dev-0abc1d1609628ad0eebc796ece9793889262bc2f → 0.14.4-dev-28ace990f8935dcd353f0b09527a2a1b32940e13

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.
@@ -57,12 +57,12 @@ var windowSize = require('@react-hook/window-size');
57
57
  var copy = _interopDefault(require('copy-to-clipboard'));
58
58
  var html2canvas = _interopDefault(require('html2canvas'));
59
59
  var jsPDF = _interopDefault(require('jspdf'));
60
- var text$3 = require('@visx/text');
61
- var axis = require('@visx/axis');
62
- var grid = require('@visx/grid');
63
60
  var clipPath = require('@visx/clip-path');
64
61
  var event = require('@visx/event');
65
62
  var d3Array = require('@visx/vendor/d3-array');
63
+ var axis = require('@visx/axis');
64
+ var text$3 = require('@visx/text');
65
+ var grid = require('@visx/grid');
66
66
  require('@visx/point');
67
67
  var WaterfallChart$4 = require('./charts/src/v2/components/WaterfallChart');
68
68
  var VisibilitySensor = _interopDefault(require('react-visibility-sensor'));
@@ -40948,72 +40948,6 @@ var Legend$1 = function Legend(_ref) {
40948
40948
  });
40949
40949
  };
40950
40950
 
40951
- var GoalLine = function GoalLine(_ref) {
40952
- var goalLine = _ref.goalLine,
40953
- innerWidth = _ref.innerWidth,
40954
- y = _ref.y,
40955
- margin = _ref.margin;
40956
- var textRef = React.useRef(null);
40957
- var _useState = React.useState(0),
40958
- labelWidth = _useState[0],
40959
- setLabelWidth = _useState[1];
40960
- React.useEffect(function () {
40961
- if (textRef.current) {
40962
- var bbox = textRef.current.getBBox();
40963
- setLabelWidth(bbox.width + 16);
40964
- }
40965
- }, [goalLine.formattedValue]);
40966
- var height = 16;
40967
- var triangleWidth = 8;
40968
- return jsxRuntime.jsxs("g", {
40969
- style: {
40970
- position: 'relative'
40971
- },
40972
- children: [jsxRuntime.jsx(shape.Line, {
40973
- from: {
40974
- x: margin.left,
40975
- y: margin.top + y
40976
- },
40977
- to: {
40978
- x: margin.left + innerWidth,
40979
- y: margin.top + y
40980
- },
40981
- stroke: goalLine.color,
40982
- strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
40983
- strokeWidth: goalLine.strokeWidth,
40984
- strokeLinecap: "round",
40985
- shapeRendering: "smooth"
40986
- }), jsxRuntime.jsxs("g", {
40987
- transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
40988
- children: [jsxRuntime.jsx("path", {
40989
- d: "M 0,0\n l " + -triangleWidth + "," + -height / 2 + " \n l " + triangleWidth + "," + -height / 2 + " \n h " + labelWidth + " \n a 3,3 0 0 1 3,3 \n v " + (height - 6) + " \n a 3,3 0 0 1 -3,3 \n h " + -labelWidth + " z",
40990
- fill: goalLine.color
40991
- }), jsxRuntime.jsx("text", {
40992
- ref: textRef,
40993
- x: labelWidth / 2,
40994
- y: -1,
40995
- dy: -4,
40996
- textAnchor: "middle",
40997
- fontFamily: "Arial, sans-serif",
40998
- fontSize: 9,
40999
- fill: '#fff',
41000
- children: goalLine.formattedValue
41001
- })]
41002
- })]
41003
- });
41004
- };
41005
-
41006
- /*
41007
- const strokeWidth = 2;
41008
- const height = 16;
41009
- const triangleWidth = 8;
41010
-
41011
-
41012
-
41013
-
41014
-
41015
- */
41016
-
41017
40951
  var ASSUMED_AVERAGE_CHAR_WIDTH = 8.8;
41018
40952
  function calculateWordWidth(word, avgCharWidth) {
41019
40953
  if (avgCharWidth === void 0) {
@@ -41104,25 +41038,250 @@ function useFlattenedData(xScaleKey, xScaleDataType, chart) {
41104
41038
  }, [chart.data, xScaleKey, xScaleDataType, chart.y.keys]);
41105
41039
  }
41106
41040
 
41107
- var _excluded$e = ["formattedValue"],
41108
- _excluded2$4 = ["formattedValue"];
41041
+ var GoalLine = function GoalLine(_ref) {
41042
+ var goalLine = _ref.goalLine,
41043
+ innerWidth = _ref.innerWidth,
41044
+ y = _ref.y,
41045
+ margin = _ref.margin;
41046
+ var textRef = React.useRef(null);
41047
+ var _useState = React.useState(0),
41048
+ labelWidth = _useState[0],
41049
+ setLabelWidth = _useState[1];
41050
+ React.useEffect(function () {
41051
+ if (textRef.current) {
41052
+ var bbox = textRef.current.getBBox();
41053
+ setLabelWidth(bbox.width + 16);
41054
+ }
41055
+ }, [goalLine.formattedValue]);
41056
+ var height = 16;
41057
+ var triangleWidth = 8;
41058
+ return jsxRuntime.jsxs("g", {
41059
+ style: {
41060
+ position: 'relative'
41061
+ },
41062
+ children: [jsxRuntime.jsx(shape.Line, {
41063
+ from: {
41064
+ x: margin.left,
41065
+ y: margin.top + y
41066
+ },
41067
+ to: {
41068
+ x: margin.left + innerWidth,
41069
+ y: margin.top + y
41070
+ },
41071
+ stroke: goalLine.color,
41072
+ strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
41073
+ strokeWidth: goalLine.strokeWidth,
41074
+ strokeLinecap: "round",
41075
+ shapeRendering: "smooth"
41076
+ }), jsxRuntime.jsxs("g", {
41077
+ transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
41078
+ children: [jsxRuntime.jsx("path", {
41079
+ d: "M 0,0\n l " + -triangleWidth + "," + -height / 2 + " \n l " + triangleWidth + "," + -height / 2 + " \n h " + labelWidth + " \n a 3,3 0 0 1 3,3 \n v " + (height - 6) + " \n a 3,3 0 0 1 -3,3 \n h " + -labelWidth + " z",
41080
+ fill: goalLine.color
41081
+ }), jsxRuntime.jsx("text", {
41082
+ ref: textRef,
41083
+ x: labelWidth / 2,
41084
+ y: -1,
41085
+ dy: -4,
41086
+ textAnchor: "middle",
41087
+ fontFamily: "Arial, sans-serif",
41088
+ fontSize: 9,
41089
+ fill: '#fff',
41090
+ children: goalLine.formattedValue
41091
+ })]
41092
+ })]
41093
+ });
41094
+ };
41095
+
41096
+ /*
41097
+ const strokeWidth = 2;
41098
+ const height = 16;
41099
+ const triangleWidth = 8;
41100
+
41101
+
41102
+
41103
+
41104
+
41105
+ */
41106
+
41107
+ var shouldUpdate$1 = function shouldUpdate(previousProps, nextProps) {
41108
+ return JSON.stringify(previousProps) == JSON.stringify(nextProps);
41109
+ };
41110
+ var GoalLines = function GoalLines(_ref) {
41111
+ var goalLines = _ref.goalLines,
41112
+ margin = _ref.margin,
41113
+ y = _ref.y,
41114
+ width = _ref.width;
41115
+ return jsxRuntime.jsx(React.Fragment, {
41116
+ children: goalLines.map(function (goalLine) {
41117
+ return jsxRuntime.jsx(GoalLine, {
41118
+ innerWidth: width,
41119
+ y: y(goalLine.value),
41120
+ goalLine: goalLine,
41121
+ margin: margin
41122
+ }, goalLine.value);
41123
+ })
41124
+ });
41125
+ };
41126
+ var GoalLines$1 = /*#__PURE__*/React.memo(GoalLines, shouldUpdate$1);
41127
+
41109
41128
  var AXIS_TITLE_STYLES = {
41110
41129
  opacity: '0.75',
41111
41130
  fontWeight: 'bold'
41112
41131
  };
41113
41132
 
41114
- /*
41115
- NOTES
41116
- -----
41117
- 1. Control width of margins via props and truncate ticks using a fixed width
41118
- 2. (somehow) prevent overlapping of ticks
41119
- 3. Split out conditional formatting colours to show operator and values for each color
41120
- 4. Add axis titles
41121
- 5. Account for no xKey and showing 1 dot for a single yKey
41122
- */
41133
+ var _excluded$e = ["formattedValue"];
41134
+ var AxisBottom = function AxisBottom(_ref) {
41135
+ var _x$ticks;
41136
+ var x = _ref.x,
41137
+ margin = _ref.margin,
41138
+ themeCSS = _ref.themeCSS,
41139
+ show = _ref.show,
41140
+ removeStroke = _ref.removeStroke,
41141
+ xScaleDataType = _ref.xScaleDataType,
41142
+ xScale = _ref.xScale,
41143
+ height = _ref.height;
41144
+ var tickFormat = React.useCallback(function (value) {
41145
+ var tick = null;
41146
+ if (xScaleDataType === 'date_time' && value instanceof Date) {
41147
+ var matchingTickValue = x.ticks.find(function (tickValue) {
41148
+ return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41149
+ });
41150
+ tick = matchingTickValue || null;
41151
+ } else {
41152
+ var _matchingTickValue = x.ticks.find(function (tickValue) {
41153
+ return tickValue.scaleValue === value;
41154
+ });
41155
+ tick = _matchingTickValue || null;
41156
+ }
41157
+ if (tick) {
41158
+ if (tick.formattedValue) {
41159
+ return tick.formattedValue;
41160
+ }
41161
+ return tick.value.toString();
41162
+ }
41163
+ return '';
41164
+ }, [x.ticks, xScaleDataType]);
41165
+ if (!show) return null;
41166
+ if (!xScale) return null;
41167
+ return jsxRuntime.jsx(axis.AxisBottom, {
41168
+ label: x.title || undefined,
41169
+ labelProps: {
41170
+ style: AXIS_TITLE_STYLES
41171
+ },
41172
+ labelOffset: margin.bottomTitleOffset,
41173
+ hideTicks: true,
41174
+ top: height,
41175
+ scale: xScale,
41176
+ tickFormat: tickFormat,
41177
+ tickValues: ((_x$ticks = x.ticks) == null ? void 0 : _x$ticks.length) > 0 ? x.ticks.map(function (tick) {
41178
+ return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41179
+ }) : undefined,
41180
+ tickComponent: function tickComponent(_ref2) {
41181
+ var formattedValue = _ref2.formattedValue,
41182
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41183
+ return jsxRuntime.jsx(text$3.Text, _extends({
41184
+ style: themeCSS.labels
41185
+ }, tickProps, {
41186
+ children: formattedValue
41187
+ }));
41188
+ },
41189
+ stroke: themeCSS.axis.stroke,
41190
+ strokeWidth: removeStroke ? 0 : 1
41191
+ });
41192
+ };
41193
+
41194
+ var _excluded$f = ["formattedValue"];
41195
+ var AxisLeft = function AxisLeft(_ref) {
41196
+ var show = _ref.show,
41197
+ y = _ref.y,
41198
+ margin = _ref.margin,
41199
+ themeCSS = _ref.themeCSS,
41200
+ yScale = _ref.yScale,
41201
+ ticks = _ref.ticks,
41202
+ stroke = _ref.stroke;
41203
+ var tickFormat = React.useCallback(function (value) {
41204
+ var item = y.ticks.filter(function (tick) {
41205
+ return tick.value === value;
41206
+ })[0];
41207
+ if (item) {
41208
+ if (item.formattedValue) {
41209
+ return item.formattedValue;
41210
+ } else {
41211
+ return item.value.toString();
41212
+ }
41213
+ } else {
41214
+ return '';
41215
+ }
41216
+ }, [y.ticks]);
41217
+ if (!show) return null;
41218
+ return jsxRuntime.jsx(axis.AxisLeft, {
41219
+ labelOffset: margin.leftTitleOffset,
41220
+ label: y.title || undefined,
41221
+ labelProps: {
41222
+ style: AXIS_TITLE_STYLES
41223
+ },
41224
+ hideTicks: true,
41225
+ left: 0,
41226
+ top: 0,
41227
+ scale: yScale,
41228
+ tickFormat: tickFormat,
41229
+ tickValues: ticks,
41230
+ tickComponent: function tickComponent(_ref2) {
41231
+ var formattedValue = _ref2.formattedValue,
41232
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41233
+ return jsxRuntime.jsx(text$3.Text, _extends({
41234
+ width: 10,
41235
+ style: themeCSS.labels
41236
+ }, tickProps, {
41237
+ children: formattedValue
41238
+ }));
41239
+ },
41240
+ stroke: stroke != null ? stroke : 'transparent'
41241
+ });
41242
+ };
41243
+
41244
+ var GridRows = function GridRows(_ref) {
41245
+ var ticks = _ref.ticks,
41246
+ yScale = _ref.yScale,
41247
+ removeStroke = _ref.removeStroke,
41248
+ width = _ref.width,
41249
+ height = _ref.height,
41250
+ themeCSS = _ref.themeCSS;
41251
+ return jsxRuntime.jsx(grid.GridRows, {
41252
+ tickValues: ticks.length > 0 ? ticks : undefined,
41253
+ scale: yScale,
41254
+ width: width,
41255
+ height: height,
41256
+ pointerEvents: "none",
41257
+ strokeDasharray: "0.5 5",
41258
+ strokeWidth: removeStroke ? 0 : 2,
41259
+ lineStyle: {
41260
+ strokeLinecap: 'round',
41261
+ stroke: themeCSS.grid.stroke
41262
+ }
41263
+ });
41264
+ };
41265
+
41266
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$7() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41267
+ var ChartWrapper$1 = function ChartWrapper(props) {
41268
+ return jsxRuntime.jsx("svg", {
41269
+ width: props.width,
41270
+ height: props.height - (props.showLegend ? 40 : 0),
41271
+ onMouseMove: props.onMouseMove,
41272
+ onMouseLeave: props.onMouseLeave,
41273
+ className: /*#__PURE__*/css$1.css( {
41274
+ name: "fx4tbw-ChartWrapper",
41275
+ styles: "display:block;label:ChartWrapper;",
41276
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJ0V3JhcHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JpQiIsImZpbGUiOiJDaGFydFdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcblxuZXhwb3J0IGNvbnN0IENoYXJ0V3JhcHBlciA9IChwcm9wczoge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgb25Nb3VzZU1vdmU/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxTVkdTVkdFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8U1ZHU1ZHRWxlbWVudD47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHQgLSAocHJvcHMuc2hvd0xlZ2VuZCA/IDQwIDogMCl9XG4gICAgICBvbk1vdXNlTW92ZT17cHJvcHMub25Nb3VzZU1vdmV9XG4gICAgICBvbk1vdXNlTGVhdmU9e3Byb3BzLm9uTW91c2VMZWF2ZX1cbiAgICAgIGNsYXNzTmFtZT17Y3NzKHsgZGlzcGxheTogJ2Jsb2NrJyB9KX1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9zdmc+XG4gICk7XG59O1xuIl19 */",
41277
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41278
+ }),
41279
+ children: props.children
41280
+ });
41281
+ };
41123
41282
 
41124
41283
  var LineChart$5 = function LineChart(_ref) {
41125
- var _theme$axis$stroke, _theme$axis;
41284
+ var _theme$axis;
41126
41285
  var chart = _ref.chart,
41127
41286
  options = _ref.options,
41128
41287
  theme = _ref.theme,
@@ -41192,21 +41351,6 @@ var LineChart$5 = function LineChart(_ref) {
41192
41351
  });
41193
41352
  }, [innerHeight, chart.y]);
41194
41353
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41195
- var goalLines = React.useMemo(function () {
41196
- return chart.goalLines.map(function (goalLine) {
41197
- return jsxRuntime.jsx(GoalLine, {
41198
- innerWidth: innerWidth,
41199
- y: yScale(goalLine.value),
41200
- goalLine: goalLine,
41201
- margin: {
41202
- top: margin.top,
41203
- left: margin.left,
41204
- right: margin.right,
41205
- bottom: margin.bottom
41206
- }
41207
- }, goalLine.value);
41208
- });
41209
- }, [chart.goalLines, margin, innerWidth, yScale]);
41210
41354
  var handleMouseMove = React.useCallback(function (event) {
41211
41355
  if (!xKey || !xScaleKey || xScale === null) return;
41212
41356
  var tooltipData = getTooltipData({
@@ -41233,112 +41377,39 @@ var LineChart$5 = function LineChart(_ref) {
41233
41377
  return Number(tick.value);
41234
41378
  });
41235
41379
  return jsxRuntime.jsxs(React__default.Fragment, {
41236
- children: [jsxRuntime.jsxs("svg", {
41380
+ children: [jsxRuntime.jsxs(ChartWrapper$1, {
41237
41381
  width: width,
41238
- height: height - (options.showLegend ? 40 : 0),
41382
+ height: height,
41383
+ showLegend: options.showLegend,
41239
41384
  onMouseMove: handleMouseMove,
41240
41385
  onMouseLeave: handleMouseLeave,
41241
- style: {
41242
- display: 'block'
41243
- },
41244
41386
  children: [jsxRuntime.jsxs(group.Group, {
41245
41387
  left: margin.left,
41246
41388
  top: margin.top,
41247
- children: [jsxRuntime.jsx(grid.GridRows, {
41248
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41249
- scale: yScale,
41389
+ children: [jsxRuntime.jsx(GridRows, {
41390
+ ticks: yTickValues,
41391
+ yScale: yScale,
41250
41392
  width: innerWidth,
41251
41393
  height: innerHeight,
41252
- pointerEvents: "none",
41253
- strokeDasharray: "0.5 5",
41254
- strokeWidth: options.removeStroke ? 0 : 2,
41255
- lineStyle: {
41256
- strokeLinecap: 'round',
41257
- stroke: themeCSS.grid.stroke
41258
- }
41259
- }), options.axis.showXAxisLabels && jsxRuntime.jsx(axis.AxisBottom, {
41260
- label: chart.x.title || undefined,
41261
- labelProps: {
41262
- style: AXIS_TITLE_STYLES
41263
- },
41264
- labelOffset: margin.bottomTitleOffset,
41265
- hideTicks: true,
41266
- top: innerHeight,
41267
- scale: xScale,
41268
- tickFormat: function tickFormat(value) {
41269
- var tick = null;
41270
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41271
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41272
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41273
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41274
- });
41275
- tick = matchingTickValue || null;
41276
- } else {
41277
- var _matchingTickValue = chart.x.ticks.find(function (tickValue) {
41278
- return tickValue.scaleValue === value;
41279
- });
41280
- tick = _matchingTickValue || null;
41281
- }
41282
- if (tick) {
41283
- if (tick.formattedValue) {
41284
- return tick.formattedValue;
41285
- } else {
41286
- return tick.value.toString();
41287
- }
41288
- } else {
41289
- return ''; // ?
41290
- }
41291
- },
41292
- tickValues: chart.x.ticks.length > 0 ? chart.x.ticks.map(function (tick) {
41293
- return tick.scaleValue !== null ? tick.scaleValue : 0;
41294
- }) : undefined,
41295
- tickComponent: function tickComponent(_ref2) {
41296
- var formattedValue = _ref2.formattedValue,
41297
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41298
- return jsxRuntime.jsx(text$3.Text, _extends({
41299
- style: themeCSS.labels
41300
- }, tickProps, {
41301
- children: formattedValue
41302
- }));
41303
- },
41304
- stroke: themeCSS.axis.stroke,
41305
- strokeWidth: options.removeStroke ? 0 : 1
41306
- }), options.axis.showYAxisLabels && jsxRuntime.jsx(axis.AxisLeft, {
41307
- labelOffset: margin.leftTitleOffset,
41308
- label: chart.y.title || undefined,
41309
- labelProps: {
41310
- style: AXIS_TITLE_STYLES
41311
- },
41312
- hideTicks: true,
41313
- left: 0,
41314
- top: 0,
41315
- scale: yScale,
41316
- tickFormat: function tickFormat(value) {
41317
- var item = chart.y.ticks.filter(function (tick) {
41318
- return tick.value === value;
41319
- })[0];
41320
- if (item) {
41321
- if (item.formattedValue) {
41322
- return item.formattedValue;
41323
- } else {
41324
- return item.value.toString();
41325
- }
41326
- } else {
41327
- return '';
41328
- }
41329
- },
41330
- tickValues: yTickValues,
41331
- tickComponent: function tickComponent(_ref3) {
41332
- var formattedValue = _ref3.formattedValue,
41333
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$4);
41334
- return jsxRuntime.jsx(text$3.Text, _extends({
41335
- width: 10,
41336
- style: themeCSS.labels
41337
- }, tickProps, {
41338
- children: formattedValue
41339
- }));
41340
- },
41341
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41394
+ removeStroke: options.removeStroke,
41395
+ themeCSS: themeCSS
41396
+ }), jsxRuntime.jsx(AxisBottom, {
41397
+ x: chart.x,
41398
+ margin: margin,
41399
+ themeCSS: themeCSS,
41400
+ show: options.axis.showXAxisLabels,
41401
+ removeStroke: options.removeStroke,
41402
+ xScaleDataType: xScaleDataType,
41403
+ xScale: xScale,
41404
+ height: innerHeight
41405
+ }), jsxRuntime.jsx(AxisLeft, {
41406
+ show: options.axis.showYAxisLabels,
41407
+ y: chart.y,
41408
+ margin: margin,
41409
+ themeCSS: themeCSS,
41410
+ yScale: yScale,
41411
+ ticks: yTickValues,
41412
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41342
41413
  }), jsxRuntime.jsxs(group.Group, {
41343
41414
  children: [chart.y.keys.map(function (yKey) {
41344
41415
  var _chart$lines$filter$;
@@ -41468,7 +41539,14 @@ var LineChart$5 = function LineChart(_ref) {
41468
41539
  return null;
41469
41540
  }
41470
41541
  })]
41471
- }), goalLines]
41542
+ }), jsxRuntime.jsx(GoalLines$1, {
41543
+ goalLines: chart.goalLines,
41544
+ y: function y(d) {
41545
+ return yScale(d);
41546
+ },
41547
+ margin: margin,
41548
+ width: innerWidth
41549
+ })]
41472
41550
  }), options.showLegend && jsxRuntime.jsx(Legend$1, {
41473
41551
  legendItems: chart.lines,
41474
41552
  visibleYKeys: visibleYKeys,
@@ -41516,20 +41594,14 @@ function getBarFill(bars, conditionalFormattingRules, barKey, barValues) {
41516
41594
  return fill;
41517
41595
  }
41518
41596
 
41519
- var _excluded$f = ["formattedValue"],
41520
- _excluded2$5 = ["formattedValue"];
41521
- function _EMOTION_STRINGIFIED_CSS_ERROR__$7() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41522
- var AXIS_TITLE_STYLES$1 = {
41523
- opacity: '0.75',
41524
- fontWeight: 'bold'
41525
- };
41597
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$8() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41526
41598
  var BAR_RADIUS = 2;
41527
41599
  var PADDING = {
41528
41600
  paddingOuter: 0.05,
41529
41601
  paddingInner: 0.3
41530
41602
  };
41531
41603
  var BarChart$5 = function BarChart(_ref) {
41532
- var _chart$x2, _theme$axis$stroke, _theme$axis;
41604
+ var _theme$axis;
41533
41605
  var chart = _ref.chart,
41534
41606
  width = _ref.width,
41535
41607
  height = _ref.height,
@@ -41602,21 +41674,6 @@ var BarChart$5 = function BarChart(_ref) {
41602
41674
  return undefined;
41603
41675
  }, [xScale, yScaleKeys, options.stacked, xScaleDataType]);
41604
41676
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41605
- var goalLines = React.useMemo(function () {
41606
- return chart.goalLines.map(function (goalLine) {
41607
- return jsxRuntime.jsx(GoalLine, {
41608
- innerWidth: innerWidth,
41609
- y: yScale(goalLine.value),
41610
- goalLine: goalLine,
41611
- margin: {
41612
- top: margin.top,
41613
- left: margin.left,
41614
- right: margin.right,
41615
- bottom: margin.bottom
41616
- }
41617
- }, goalLine.value);
41618
- });
41619
- }, [chart.goalLines, margin, innerWidth, yScale]);
41620
41677
  var handleMouseMove = React.useCallback(function (event) {
41621
41678
  if (!xKey || !xScaleKey || xScale === null) return;
41622
41679
  var tooltipData = getTooltipData({
@@ -41662,115 +41719,39 @@ var BarChart$5 = function BarChart(_ref) {
41662
41719
  return Number(tick.value);
41663
41720
  });
41664
41721
  return jsxRuntime.jsxs(React.Fragment, {
41665
- children: [jsxRuntime.jsxs("svg", {
41722
+ children: [jsxRuntime.jsxs(ChartWrapper$1, {
41666
41723
  width: width,
41667
- height: height - (options.showLegend ? 40 : 0),
41724
+ height: height,
41668
41725
  onMouseMove: handleMouseMove,
41669
41726
  onMouseLeave: handleMouseLeave,
41670
- style: {
41671
- display: 'block'
41672
- },
41727
+ showLegend: options.showLegend,
41673
41728
  children: [jsxRuntime.jsxs(group.Group, {
41674
41729
  left: margin.left,
41675
41730
  top: margin.top,
41676
- children: [jsxRuntime.jsx(grid.GridRows, {
41677
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41678
- scale: yScale,
41731
+ children: [jsxRuntime.jsx(GridRows, {
41732
+ ticks: yTickValues,
41733
+ yScale: yScale,
41679
41734
  width: innerWidth,
41680
41735
  height: innerHeight,
41681
- pointerEvents: "none",
41682
- strokeDasharray: "0.5 5",
41683
- strokeWidth: options.removeStroke ? 0 : 2,
41684
- lineStyle: {
41685
- strokeLinecap: 'round',
41686
- stroke: themeCSS.grid.stroke
41687
- }
41688
- }), options.axis.showXAxisLabels && jsxRuntime.jsx(axis.AxisBottom, {
41689
- label: chart.x.title || undefined,
41690
- labelProps: {
41691
- style: AXIS_TITLE_STYLES$1
41692
- },
41693
- labelOffset: margin.bottomTitleOffset,
41694
- hideTicks: true,
41695
- top: innerHeight
41696
- // @ts-ignore
41697
- ,
41698
- scale: xScale,
41699
- tickFormat: function tickFormat(value) {
41700
- var tick = null;
41701
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41702
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41703
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41704
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41705
- });
41706
- tick = matchingTickValue || null;
41707
- } else {
41708
- var _chart$x;
41709
- var _matchingTickValue = chart == null || (_chart$x = chart.x) == null ? void 0 : _chart$x.ticks.find(function (tickValue) {
41710
- return ((tickValue == null ? void 0 : tickValue.scaleValue) !== null ? tickValue == null ? void 0 : tickValue.scaleValue : 0) === value;
41711
- });
41712
- tick = _matchingTickValue || null;
41713
- }
41714
- if (tick) {
41715
- if (tick.formattedValue) {
41716
- return tick.formattedValue;
41717
- } else {
41718
- return tick.value.toString();
41719
- }
41720
- } else {
41721
- return ''; // ?
41722
- }
41723
- },
41724
- tickValues: (chart == null || (_chart$x2 = chart.x) == null || (_chart$x2 = _chart$x2.ticks) == null ? void 0 : _chart$x2.length) > 0 ? chart.x.ticks.map(function (tick) {
41725
- return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41726
- }) : undefined,
41727
- tickComponent: function tickComponent(_ref2) {
41728
- var formattedValue = _ref2.formattedValue,
41729
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41730
- return jsxRuntime.jsx(text$3.Text, _extends({
41731
- style: themeCSS.labels
41732
- }, tickProps, {
41733
- children: formattedValue
41734
- }));
41735
- },
41736
- stroke: themeCSS.axis.stroke,
41737
- strokeWidth: options.removeStroke ? 0 : 1
41738
- }), options.axis.showYAxisLabels && jsxRuntime.jsx(axis.AxisLeft, {
41739
- labelOffset: margin.leftTitleOffset,
41740
- label: chart.y.title || undefined,
41741
- labelProps: {
41742
- style: AXIS_TITLE_STYLES$1
41743
- },
41744
- hideTicks: true,
41745
- left: 0,
41746
- top: 0,
41747
- scale: yScale,
41748
- tickFormat: function tickFormat(value) {
41749
- var item = chart.y.ticks.filter(function (tick) {
41750
- return tick.value === value;
41751
- })[0];
41752
- if (item) {
41753
- if (item.formattedValue) {
41754
- return item.formattedValue;
41755
- } else {
41756
- return item.value.toString();
41757
- }
41758
- } else {
41759
- return '';
41760
- }
41761
- },
41762
- tickValues: yTickValues,
41763
- tickComponent: function tickComponent(_ref3) {
41764
- var formattedValue = _ref3.formattedValue,
41765
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$5);
41766
- return jsxRuntime.jsx(text$3.Text, _extends({
41767
- width: 10,
41768
- style: themeCSS.labels
41769
- }, tickProps, {
41770
- children: formattedValue
41771
- }));
41772
- },
41773
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41736
+ removeStroke: options.removeStroke,
41737
+ themeCSS: themeCSS
41738
+ }), jsxRuntime.jsx(AxisBottom, {
41739
+ x: chart.x,
41740
+ margin: margin,
41741
+ themeCSS: themeCSS,
41742
+ show: options.axis.showXAxisLabels,
41743
+ removeStroke: options.removeStroke,
41744
+ xScaleDataType: xScaleDataType,
41745
+ xScale: xScale,
41746
+ height: innerHeight
41747
+ }), jsxRuntime.jsx(AxisLeft, {
41748
+ show: options.axis.showYAxisLabels,
41749
+ y: chart.y,
41750
+ margin: margin,
41751
+ themeCSS: themeCSS,
41752
+ yScale: yScale,
41753
+ ticks: yTickValues,
41754
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41774
41755
  }), jsxRuntime.jsxs(group.Group, {
41775
41756
  children: [!options.stacked && jsxRuntime.jsx(shape.BarGroup, {
41776
41757
  data: dataFlattened,
@@ -41870,7 +41851,14 @@ var BarChart$5 = function BarChart(_ref) {
41870
41851
  pointerEvents: "none",
41871
41852
  opacity: 0.8
41872
41853
  })
41873
- }), goalLines]
41854
+ }), jsxRuntime.jsx(GoalLines$1, {
41855
+ goalLines: chart.goalLines,
41856
+ y: function y(d) {
41857
+ return yScale(d);
41858
+ },
41859
+ margin: margin,
41860
+ width: innerWidth
41861
+ })]
41874
41862
  }), options.showLegend && jsxRuntime.jsx(Legend$1, {
41875
41863
  legendItems: chart.bars,
41876
41864
  visibleYKeys: chart.bars.map(function (legendItem) {
@@ -41918,8 +41906,8 @@ var Bar = function Bar(props) {
41918
41906
  className: props.enableHover ? /*#__PURE__*/css$1.css( {
41919
41907
  name: "4nk3o1-Bar",
41920
41908
  styles: "cursor:pointer;label:Bar;",
41921
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhckNoYXJ0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4ZHFDIiwiZmlsZSI6IkJhckNoYXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhckNoYXJ0UmVwcmVzZW50YXRpb24gfSBmcm9tICdzaGFyZWQtbG9naWMvc3JjL0JhckNoYXJ0VjIvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IHsgZ2V0Q2hhcnRUaGVtZUNTUywgZ2V0VG9vbHRpcERhdGEgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBeGlzTGVmdCwgQXhpc0JvdHRvbSB9IGZyb20gJ0B2aXN4L2F4aXMnO1xuaW1wb3J0IHsgR3JpZFJvd3MgfSBmcm9tICdAdmlzeC9ncmlkJztcbmltcG9ydCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vVG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VUb29sdGlwIH0gZnJvbSAnQHZpc3gvdG9vbHRpcCc7XG5pbXBvcnQgeyBMZWdlbmQgfSBmcm9tICcuLi9MZWdlbmQnO1xuaW1wb3J0IHsgR29hbExpbmUgfSBmcm9tICcuLi9Hb2FsTGluZSc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHZpc3gvdGV4dCc7XG5pbXBvcnQgeyBCYXJHcm91cCwgQmFyU3RhY2ssIExpbmUgfSBmcm9tICdAdmlzeC9zaGFwZSc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJ3NoYXJlZC1sb2dpYy9zcmMvRmllbGQvdHlwZXMnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIsIHNjYWxlQmFuZCB9IGZyb20gJ0B2aXN4L3NjYWxlJztcbmltcG9ydCB7IGdldEJhckZpbGwgfSBmcm9tICcuL2dldEJhckZpbGwnO1xuaW1wb3J0IHsgYnVpbGRNYXJnaW4gfSBmcm9tICcuLi8uLi91dGlscy9idWlsZE1hcmdpbic7XG5pbXBvcnQgeyBDaGFydE9uVmlld0NsaWNrLCBEYXRhSXRlbSwgVGljayB9IGZyb20gJ3NoYXJlZC1sb2dpYy9zcmMvQ2hhcnRzVjIvdHlwZXMnO1xuaW1wb3J0IHsgbGlnaHRlbkNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbG9yLmZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgQmFyR3JvdXBCYXIsIEJhckdyb3VwIGFzIEJhckdyb3VwVHlwZSB9IGZyb20gJ0B2aXN4L3NoYXBlL2xpYi90eXBlcyc7XG5pbXBvcnQgeyB1c2VGbGF0dGVuZWREYXRhIH0gZnJvbSAnLi4vaG9va3MvdXNlRmxhdHRlbmVkRGF0YSc7XG5cbi8vIE5lZWQgdG8gbG9vayBhdCB1cGRhdGluZyBCYXJDaGFydCB0byB1c2UgdGhpcyB0eXBlIG1ldGhvZCBvZiByZW5kZXJpbmcgLSBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC92aXN4LWJhci1jaGFydC1qOXNtcGo/ZmlsZT0lMkZFeGFtcGxlLnRzeFxuLy8gQ3VycmVudGx5IGl0J3MgdXNpbmcgU3RhY2tlZCBDaGFydCB3aGljaCBpc24ndCB0ZWNobmljYWxseSBjb3JyZWN0XG5cbmNvbnN0IEFYSVNfVElUTEVfU1RZTEVTOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBvcGFjaXR5OiAnMC43NScsIGZvbnRXZWlnaHQ6ICdib2xkJyB9O1xuXG5leHBvcnQgdHlwZSBCYXJDaGFydFByb3BzID0ge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdGhlbWU/OiBDaGFydFRoZW1lO1xuICBjaGFydDogQmFyQ2hhcnRSZXByZXNlbnRhdGlvbjtcbiAgb3B0aW9uczoge1xuICAgIHN0YWNrZWQ6IGJvb2xlYW47XG4gICAgc2hvd1JvdW5kZWRUb3RhbDogYm9vbGVhbjtcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xuICAgIHJlbW92ZVN0cm9rZTogYm9vbGVhbjtcbiAgICBheGlzOiB7XG4gICAgICBzaG93WEF4aXNMYWJlbHM6IGJvb2xlYW47XG4gICAgICBzaG93WUF4aXNMYWJlbHM6IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgb25DbGljazogKHBhcmFtczogQ2hhcnRPblZpZXdDbGljaykgPT4gdm9pZDtcbiAgZW5hYmxlSG92ZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgQkFSX1JBRElVUyA9IDI7XG5cbmNvbnN0IFBBRERJTkcgPSB7XG4gIHBhZGRpbmdPdXRlcjogMC4wNSxcbiAgcGFkZGluZ0lubmVyOiAwLjMsXG59O1xuXG5leHBvcnQgY29uc3QgQmFyQ2hhcnQgPSAoeyBjaGFydCwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucywgdGhlbWUsIG9uQ2xpY2ssIGVuYWJsZUhvdmVyIH06IEJhckNoYXJ0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0b29sdGlwT3BlbiwgdG9vbHRpcExlZnQgPSAwLCB0b29sdGlwVG9wID0gMCwgdG9vbHRpcERhdGEsIGhpZGVUb29sdGlwLCBzaG93VG9vbHRpcCB9ID0gdXNlVG9vbHRpcDx7XG4gICAgW2tleUlkOiBzdHJpbmddOiBEYXRhSXRlbTtcbiAgfSB8IG51bGw+KCk7XG5cbiAgY29uc3QgbWFyZ2luID0gYnVpbGRNYXJnaW4oY2hhcnQueS50aWNrcywgb3B0aW9ucy5heGlzLnNob3dZQXhpc0xhYmVscywgY2hhcnQueS50aXRsZSAhPSBudWxsLCBjaGFydC54LnRpdGxlICE9IG51bGwpO1xuXG4gIC8vIGNvbnN0IFt2aXNpYmxlWUtleXMsIHNldFZpc2libGVZS2V5c10gPSB1c2VTdGF0ZShjaGFydC5iYXJzLm1hcCgobGVnZW5kSXRlbSkgPT4gbGVnZW5kSXRlbS55S2V5KSk7XG5cbiAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gIGNvbnN0IGlubmVySGVpZ2h0ID0gaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSAob3B0aW9ucy5zaG93TGVnZW5kID8gNDAgOiAwKTtcbiAgY29uc3QgeEtleSA9IGNoYXJ0Lngua2V5O1xuICBjb25zdCB4U2NhbGVLZXkgPSBjaGFydC54LnNjYWxlLmtleTtcbiAgY29uc3QgeVNjYWxlS2V5cyA9IGNoYXJ0Lnkua2V5cztcbiAgY29uc3QgeFNjYWxlRGF0YVR5cGU6IERhdGFUeXBlID0gY2hhcnQueC5zY2FsZS5kYXRhVHlwZTtcblxuICBjb25zdCB4U2NhbGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPHN0cmluZz4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IHhTY2FsZUtleVxuICAgICAgICAgID8gWy4uLmNoYXJ0LmRhdGEubWFwKGQgPT4gKGRbeFNjYWxlS2V5XSAmJiBkW3hTY2FsZUtleV0udmFsdWUgIT09IG51bGwgPyBTdHJpbmcoZFt4U2NhbGVLZXldLnZhbHVlKSA6ICcnKSldXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZScgJiYgeFNjYWxlS2V5KSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPERhdGU+KHtcbiAgICAgICAgcmFuZ2U6IFswLCBpbm5lcldpZHRoXSxcbiAgICAgICAgZG9tYWluOiBjaGFydC5kYXRhLm1hcChkID0+IG5ldyBEYXRlKGRbeFNjYWxlS2V5XS52YWx1ZSBhcyBzdHJpbmcpKSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgeFNjYWxlS2V5KSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPG51bWJlcj4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IGNoYXJ0LmRhdGEubWFwKGQgPT4gKGRbeFNjYWxlS2V5XSAmJiBkW3hTY2FsZUtleV0udmFsdWUgIT09IG51bGwgPyBOdW1iZXIoZFt4U2NhbGVLZXldLnZhbHVlKSA6IDApKSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBbaW5uZXJXaWR0aCwgY2hhcnQueCwgY2hhcnQuZGF0YV0pO1xuXG4gIGNvbnN0IHlTY2FsZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNjYWxlTGluZWFyPG51bWJlcj4oe1xuICAgICAgICByYW5nZTogW2lubmVySGVpZ2h0LCAwXSxcbiAgICAgICAgZG9tYWluOlxuICAgICAgICAgIGNoYXJ0Lnkuc2NhbGUub3JkZXJpbmcgPT09ICdhc2MnXG4gICAgICAgICAgICA/IFtjaGFydC55LnNjYWxlLm1pbiBhcyBudW1iZXIsIGNoYXJ0Lnkuc2NhbGUubWF4IGFzIG51bWJlcl1cbiAgICAgICAgICAgIDogW2NoYXJ0Lnkuc2NhbGUubWF4IGFzIG51bWJlciwgY2hhcnQueS5zY2FsZS5taW4gYXMgbnVtYmVyXSxcbiAgICAgICAgbmljZTogdHJ1ZSxcbiAgICAgICAgcm91bmQ6IHRydWUsXG4gICAgICB9KSxcbiAgICBbaW5uZXJIZWlnaHQsIGNoYXJ0LnldXG4gICk7XG5cbiAgY29uc3QgaW5uZXJYU2NhbGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMuc3RhY2tlZCAmJiB4U2NhbGUgJiYgJ2JhbmR3aWR0aCcgaW4geFNjYWxlKSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPHN0cmluZz4oe1xuICAgICAgICByYW5nZTogWzAsIHhTY2FsZT8uYmFuZHdpZHRoKCldLFxuICAgICAgICBkb21haW46IHlTY2FsZUtleXMsXG4gICAgICAgIHBhZGRpbmc6IDAuMSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFt4U2NhbGUsIHlTY2FsZUtleXMsIG9wdGlvbnMuc3RhY2tlZCwgeFNjYWxlRGF0YVR5cGVdKTtcblxuICBjb25zdCBkYXRhRmxhdHRlbmVkID0gdXNlRmxhdHRlbmVkRGF0YTxCYXJDaGFydFJlcHJlc2VudGF0aW9uPih4U2NhbGVLZXksIHhTY2FsZURhdGFUeXBlLCBjaGFydCk7XG5cbiAgY29uc3QgZ29hbExpbmVzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY2hhcnQuZ29hbExpbmVzLm1hcChnb2FsTGluZSA9PiAoXG4gICAgICAgIDxHb2FsTGluZVxuICAgICAgICAgIGtleT17Z29hbExpbmUudmFsdWV9XG4gICAgICAgICAgaW5uZXJXaWR0aD17aW5uZXJXaWR0aH1cbiAgICAgICAgICB5PXt5U2NhbGUoZ29hbExpbmUudmFsdWUpfVxuICAgICAgICAgIGdvYWxMaW5lPXtnb2FsTGluZX1cbiAgICAgICAgICBtYXJnaW49e3tcbiAgICAgICAgICAgIHRvcDogbWFyZ2luLnRvcCxcbiAgICAgICAgICAgIGxlZnQ6IG1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IG1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGJvdHRvbTogbWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKSksXG4gICAgW2NoYXJ0LmdvYWxMaW5lcywgbWFyZ2luLCBpbm5lcldpZHRoLCB5U2NhbGVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PFNWR0VsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIXhLZXkgfHwgIXhTY2FsZUtleSB8fCB4U2NhbGUgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgY29uc3QgdG9vbHRpcERhdGEgPSBnZXRUb29sdGlwRGF0YSh7XG4gICAgICAgIGRhdGE6IGNoYXJ0LmRhdGEsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBtYXJnaW4sXG4gICAgICAgIHhTY2FsZUtleSxcbiAgICAgICAgeFNjYWxlRGF0YVR5cGUsXG4gICAgICAgIHhPcmRlcmluZzogY2hhcnQueC5zY2FsZS5vcmRlcmluZyxcbiAgICAgICAgeFNjYWxlLFxuICAgICAgICBjaGFydFR5cGU6ICdiYXInLFxuICAgICAgfSk7XG5cbiAgICAgIHNob3dUb29sdGlwKHtcbiAgICAgICAgdG9vbHRpcExlZnQ6IHRvb2x0aXBEYXRhPy50b29sdGlwTGVmdCxcbiAgICAgICAgdG9vbHRpcFRvcDogdG9vbHRpcERhdGE/LnRvb2x0aXBUb3AsXG4gICAgICAgIHRvb2x0aXBEYXRhOiB0b29sdGlwRGF0YT8udG9vbHRpcERhdGEsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzaG93VG9vbHRpcCwgeFNjYWxlLCBtYXJnaW4sIHhLZXksIHhTY2FsZUtleSwgeFNjYWxlRGF0YVR5cGUsIGNoYXJ0Lnguc2NhbGUub3JkZXJpbmcsIGNoYXJ0LmRhdGFdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoaWRlVG9vbHRpcCgpO1xuICB9LCBbaGlkZVRvb2x0aXBdKTtcblxuICBjb25zdCBoYW5kbGVPbkJhckNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PFNWR1JlY3RFbGVtZW50LCBNb3VzZUV2ZW50PiwgYmFyR3JvdXA6IEJhckdyb3VwVHlwZTxzdHJpbmc+LCBiYXI6IEJhckdyb3VwQmFyPHN0cmluZz4pID0+IHtcbiAgICAgIG9uQ2xpY2soe1xuICAgICAgICBjbGlja2VkVmFsdWU6IHtcbiAgICAgICAgICBpbmRleDogYmFyR3JvdXAuaW5kZXgsXG4gICAgICAgICAgeToge1xuICAgICAgICAgICAga2V5OiBiYXIua2V5LFxuICAgICAgICAgICAgdmFsdWU6IGJhci52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LngudGlja3NbYmFyR3JvdXAuaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWU6IGNoYXJ0LmRhdGFbYmFyR3JvdXAuaW5kZXhdW3hLZXldLnZhbHVlID8/ICcnLFxuICAgICAgICAgICAga2V5OiB4S2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrRXZlbnQ6IGV2ZW50LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbb25DbGljaywgY2hhcnQuZGF0YSwgeEtleV1cbiAgKTtcblxuICBjb25zdCB0aGVtZUNTUyA9IHVzZU1lbW8oKCkgPT4gZ2V0Q2hhcnRUaGVtZUNTUyh0aGVtZSksIFt0aGVtZV0pO1xuXG4gIGNvbnN0IHlUaWNrVmFsdWVzID0gY2hhcnQueS50aWNrcy5tYXAodGljayA9PiBOdW1iZXIodGljay52YWx1ZSkpO1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgey8qIHdpZHRoL2hlaWdodCAxMDAlIHJlcXVpcmVkIG9yIHVzZVBhcmVudFNpemUoKSBjb250aW51b3VzbHkgc2NhbGVzIGFzIHBhcmVudCBlbGVtZW50IGhhcyBubyBzcGVjaWZpZWQgaGVpZ2h0ICovfVxuICAgICAgPHN2Z1xuICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgIGhlaWdodD17aGVpZ2h0IC0gKG9wdGlvbnMuc2hvd0xlZ2VuZCA/IDQwIDogMCl9XG4gICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVNb3VzZU1vdmV9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJyB9fVxuICAgICAgPlxuICAgICAgICA8R3JvdXAgbGVmdD17bWFyZ2luLmxlZnR9IHRvcD17bWFyZ2luLnRvcH0+XG4gICAgICAgICAgPEdyaWRSb3dzXG4gICAgICAgICAgICB0aWNrVmFsdWVzPXt5VGlja1ZhbHVlcy5sZW5ndGggPiAwID8geVRpY2tWYWx1ZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgd2lkdGg9e2lubmVyV2lkdGh9XG4gICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgcG9pbnRlckV2ZW50cz1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5PVwiMC41IDVcIlxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg9e29wdGlvbnMucmVtb3ZlU3Ryb2tlID8gMCA6IDJ9XG4gICAgICAgICAgICBsaW5lU3R5bGU9e3tcbiAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgc3Ryb2tlOiB0aGVtZUNTUy5ncmlkLnN0cm9rZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7b3B0aW9ucy5heGlzLnNob3dYQXhpc0xhYmVscyAmJiAoXG4gICAgICAgICAgICA8QXhpc0JvdHRvbVxuICAgICAgICAgICAgICBsYWJlbD17Y2hhcnQueC50aXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGxhYmVsUHJvcHM9e3sgc3R5bGU6IEFYSVNfVElUTEVfU1RZTEVTIH19XG4gICAgICAgICAgICAgIGxhYmVsT2Zmc2V0PXttYXJnaW4uYm90dG9tVGl0bGVPZmZzZXR9XG4gICAgICAgICAgICAgIGhpZGVUaWNrc1xuICAgICAgICAgICAgICB0b3A9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHNjYWxlPXt4U2NhbGV9XG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ9e3ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdGljazogVGljazxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIGNoYXJ0Lnguc2NhbGUua2V5ICE9PSBjaGFydC54LmtleSwgdXNlIHRpY2tWYWx1ZS5zY2FsZVZhbHVlIE5PVCB0aWNrVmFsdWV2YWx1ZVxuICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaWNrVmFsdWUgPSBjaGFydC54LnRpY2tzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRpY2tWYWx1ZSA9PiB0aWNrVmFsdWUuc2NhbGVWYWx1ZSAmJiBuZXcgRGF0ZSh0aWNrVmFsdWUuc2NhbGVWYWx1ZSkudmFsdWVPZigpID09PSB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHRpY2sgPSBtYXRjaGluZ1RpY2tWYWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1RpY2tWYWx1ZSA9IGNoYXJ0Py54Py50aWNrcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICB0aWNrVmFsdWUgPT4gKHRpY2tWYWx1ZT8uc2NhbGVWYWx1ZSAhPT0gbnVsbCA/IHRpY2tWYWx1ZT8uc2NhbGVWYWx1ZSA6IDApID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHRpY2sgPSBtYXRjaGluZ1RpY2tWYWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aWNrKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGljay5mb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGljay5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsgLy8gP1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGlja1ZhbHVlcz17XG4gICAgICAgICAgICAgICAgY2hhcnQ/Lng/LnRpY2tzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGNoYXJ0LngudGlja3MubWFwKHRpY2sgPT4gKHRpY2s/LnNjYWxlVmFsdWUgIT09IG51bGwgPyB0aWNrPy5zY2FsZVZhbHVlIDogMCkpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRpY2tDb21wb25lbnQ9eyh7IGZvcm1hdHRlZFZhbHVlLCAuLi50aWNrUHJvcHMgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGVtZUNTUy5sYWJlbHN9IHsuLi50aWNrUHJvcHN9PlxuICAgICAgICAgICAgICAgICAge2Zvcm1hdHRlZFZhbHVlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgc3Ryb2tlPXt0aGVtZUNTUy5heGlzLnN0cm9rZX1cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9e29wdGlvbnMucmVtb3ZlU3Ryb2tlID8gMCA6IDF9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge29wdGlvbnMuYXhpcy5zaG93WUF4aXNMYWJlbHMgJiYgKFxuICAgICAgICAgICAgPEF4aXNMZWZ0XG4gICAgICAgICAgICAgIGxhYmVsT2Zmc2V0PXttYXJnaW4ubGVmdFRpdGxlT2Zmc2V0fVxuICAgICAgICAgICAgICBsYWJlbD17Y2hhcnQueS50aXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGxhYmVsUHJvcHM9e3sgc3R5bGU6IEFYSVNfVElUTEVfU1RZTEVTIH19XG4gICAgICAgICAgICAgIGhpZGVUaWNrc1xuICAgICAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgICAgICB0b3A9ezB9XG4gICAgICAgICAgICAgIHNjYWxlPXt5U2NhbGV9XG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ9e3ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY2hhcnQueS50aWNrcy5maWx0ZXIodGljayA9PiB0aWNrLnZhbHVlID09PSB2YWx1ZSlbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0aWNrVmFsdWVzPXt5VGlja1ZhbHVlc31cbiAgICAgICAgICAgICAgdGlja0NvbXBvbmVudD17KHsgZm9ybWF0dGVkVmFsdWUsIC4uLnRpY2tQcm9wcyB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRleHQgd2lkdGg9ezEwfSBzdHlsZT17dGhlbWVDU1MubGFiZWxzfSB7Li4udGlja1Byb3BzfT5cbiAgICAgICAgICAgICAgICAgIHtmb3JtYXR0ZWRWYWx1ZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHN0cm9rZT17dGhlbWU/LmF4aXM/LnN0cm9rZSA/PyAndHJhbnNwYXJlbnQnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxHcm91cD5cbiAgICAgICAgICAgIHshb3B0aW9ucy5zdGFja2VkICYmIChcbiAgICAgICAgICAgICAgPEJhckdyb3VwXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YUZsYXR0ZW5lZH1cbiAgICAgICAgICAgICAgICBrZXlzPXt5U2NhbGVLZXlzfVxuICAgICAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgICAgICAgeDA9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4geFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCB4VmFsdWVBZGp1c3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogeFNjYWxlRGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyBOdW1iZXIoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKHhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFZhbHVlQWRqdXN0ZWQ7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgeDBTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB4MVNjYWxlPXtpbm5lclhTY2FsZX1cbiAgICAgICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgICAgICBjb2xvcj17KCkgPT4gJyd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YmFyR3JvdXBzID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJHcm91cHMubWFwKGJhckdyb3VwID0+IChcbiAgICAgICAgICAgICAgICAgICAgPEdyb3VwIGtleT17YGJhci1ncm91cC0ke2Jhckdyb3VwLmluZGV4fS0ke2Jhckdyb3VwLngwfWB9IGxlZnQ9e2Jhckdyb3VwLngwfT5cbiAgICAgICAgICAgICAgICAgICAgICB7YmFyR3JvdXAuYmFycy5tYXAoYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIudmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhci5oZWlnaHQgPCAwIHx8IGJhci53aWR0aCA8IDApIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1ncm91cC1iYXItJHtiYXJHcm91cC5pbmRleH0tJHtiYXIuaW5kZXh9LSR7YmFyLnZhbHVlfS0ke2Jhci5rZXl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PXtiYXIueX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gaGFuZGxlT25CYXJDbGljayhlLCBiYXJHcm91cCwgYmFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17ZW5hYmxlSG92ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9CYXJHcm91cD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBIb3cgdG8gd2UgZ2V0ICdzY2FsZVZhbHVlJyBoZXJlPyBXaWxsIHdlIG5lZWQgdG8gc3RhcnQgc3RvcmluZyBzY2FsZUtleSBhcyB3ZWxsIGFzIHhLZXk/ICovfVxuICAgICAgICAgICAge29wdGlvbnMuc3RhY2tlZCAmJiAoXG4gICAgICAgICAgICAgIDxCYXJTdGFja1xuICAgICAgICAgICAgICAgIHg9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnc3RyaW5nJykgcmV0dXJuIHhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlQWRqdXN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZSdcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh4VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhWYWx1ZUFkanVzdGVkO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHhTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIHlTY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgICAgIGRhdGE9e2RhdGFGbGF0dGVuZWR9XG4gICAgICAgICAgICAgICAga2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgICAgICAgIGNvbG9yPXsoKSA9PiAnJ31cbiAgICAgICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgICAgIG9mZnNldD1cIm5vbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2JhclN0YWNrcyA9PlxuICAgICAgICAgICAgICAgICAgYmFyU3RhY2tzLm1hcChiYXJTdGFjayA9PlxuICAgICAgICAgICAgICAgICAgICBiYXJTdGFjay5iYXJzLm1hcChiYXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIuaGVpZ2h0IDwgMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQkFSX1BBRERJTkcgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1zdGFjay0ke2JhclN0YWNrLmluZGV4fS0ke2Jhci5pbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeT17YmFyLnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXIud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodCAtIEJBUl9QQURESU5HfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIuYmFyLmRhdGEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByeD17QkFSX1JBRElVU31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvQmFyU3RhY2s+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIDwvR3JvdXA+XG4gICAgICAgIHsvKiAtLS0tLSBUT09MVElQIENST1NTSEFJUiAtLS0tLSAqL31cbiAgICAgICAge3Rvb2x0aXBEYXRhICYmIChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICAgIGZyb209e3sgeDogdG9vbHRpcExlZnQsIHk6IG1hcmdpbi50b3AgfX1cbiAgICAgICAgICAgICAgdG89e3sgeDogdG9vbHRpcExlZnQsIHk6IGlubmVySGVpZ2h0ICsgbWFyZ2luLnRvcCB9fVxuICAgICAgICAgICAgICBzdHJva2U9eycjYWFhJ31cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICAgICAgb3BhY2l0eT17MC44fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiAtLS0tLSBHT0FMIExJTkVTIC0tLS0tLSAqL31cbiAgICAgICAge2dvYWxMaW5lc31cbiAgICAgIDwvc3ZnPlxuICAgICAgey8qIC0tLS0tIExFR0VORCAtLS0tLSAqL31cbiAgICAgIHtvcHRpb25zLnNob3dMZWdlbmQgJiYgKFxuICAgICAgICA8TGVnZW5kXG4gICAgICAgICAgbGVnZW5kSXRlbXM9e2NoYXJ0LmJhcnN9XG4gICAgICAgICAgdmlzaWJsZVlLZXlzPXtjaGFydC5iYXJzLm1hcChsZWdlbmRJdGVtID0+IGxlZ2VuZEl0ZW0ueUtleSl9XG4gICAgICAgICAgc2V0VmlzaWJsZVlLZXlzPXsoKSA9PiB7fX1cbiAgICAgICAgICBrZXlzPXtjaGFydC5rZXlzfVxuICAgICAgICAgIGNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzPXtjaGFydC5jb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlc31cbiAgICAgICAgICBtYXJnaW5MZWZ0PXttYXJnaW4ubGVmdCAtIG1hcmdpbi5sZWZ0VGl0bGVPZmZzZXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey8qIC0tLS0tIFRPT0xUSVAgLS0tLS0gKi99XG4gICAgICB7dG9vbHRpcE9wZW4gJiYgdG9vbHRpcERhdGEgJiYgeEtleSAmJiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgdG9vbHRpcERhdGE9e3Rvb2x0aXBEYXRhfVxuICAgICAgICAgIHRvb2x0aXBMZWZ0PXt0b29sdGlwTGVmdH1cbiAgICAgICAgICB0b29sdGlwVG9wPXt0b29sdGlwVG9wfVxuICAgICAgICAgIHhLZXk9e3hLZXl9XG4gICAgICAgICAga2V5cz17Y2hhcnQua2V5c31cbiAgICAgICAgICB2aXNpYmxlWUtleXM9e2NoYXJ0LmJhcnMubWFwKGxlZ2VuZEl0ZW0gPT4gbGVnZW5kSXRlbS55S2V5KX1cbiAgICAgICAgICB5S2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgIGxlZ2VuZEl0ZW1zPXtjaGFydC5iYXJzfVxuICAgICAgICAgIHNob3dSb3VuZGVkVG90YWw9e29wdGlvbnMuc2hvd1JvdW5kZWRUb3RhbH1cbiAgICAgICAgICBjb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlcz17Y2hhcnQuY29uZGl0aW9uYWxGb3JtYXR0aW5nUnVsZXN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lQ1NTLnBvcG92ZXJNZW51c31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn07XG5cbmNvbnN0IEJhciA9IChwcm9wczoge1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdSZWN0RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIGZpbGw/OiBzdHJpbmc7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIGVuYWJsZUhvdmVyPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgW2ZpbGxDb2xvciwgc2V0RmlsbENvbG9yXSA9IHVzZVN0YXRlKHByb3BzLmZpbGwpO1xuICByZXR1cm4gKFxuICAgIDxyZWN0XG4gICAgICBrZXk9e3Byb3BzLmtleX1cbiAgICAgIHg9e3Byb3BzLnh9XG4gICAgICB5PXtwcm9wcy55fVxuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHR9XG4gICAgICBmaWxsPXtmaWxsQ29sb3J9XG4gICAgICByeD17QkFSX1JBRElVU31cbiAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihsaWdodGVuQ29sb3IocHJvcHMuZmlsbCwgMC44KSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihwcm9wcy5maWxsKX1cbiAgICAgIGNsYXNzTmFtZT17cHJvcHMuZW5hYmxlSG92ZXIgPyBjc3MoeyBjdXJzb3I6ICdwb2ludGVyJyB9KSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuIl19 */",
41922
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41909
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhckNoYXJ0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1WXFDIiwiZmlsZSI6IkJhckNoYXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhckNoYXJ0UmVwcmVzZW50YXRpb24gfSBmcm9tICdzaGFyZWQtbG9naWMvc3JjL0JhckNoYXJ0VjIvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IHsgZ2V0Q2hhcnRUaGVtZUNTUywgZ2V0VG9vbHRpcERhdGEgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL1Rvb2x0aXAnO1xuaW1wb3J0IHsgdXNlVG9vbHRpcCB9IGZyb20gJ0B2aXN4L3Rvb2x0aXAnO1xuaW1wb3J0IHsgTGVnZW5kIH0gZnJvbSAnLi4vTGVnZW5kJztcbmltcG9ydCB7IEJhckdyb3VwLCBCYXJTdGFjaywgTGluZSB9IGZyb20gJ0B2aXN4L3NoYXBlJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnc2hhcmVkLWxvZ2ljL3NyYy9GaWVsZC90eXBlcyc7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciwgc2NhbGVCYW5kIH0gZnJvbSAnQHZpc3gvc2NhbGUnO1xuaW1wb3J0IHsgZ2V0QmFyRmlsbCB9IGZyb20gJy4vZ2V0QmFyRmlsbCc7XG5pbXBvcnQgeyBidWlsZE1hcmdpbiB9IGZyb20gJy4uLy4uL3V0aWxzL2J1aWxkTWFyZ2luJztcbmltcG9ydCB7IENoYXJ0T25WaWV3Q2xpY2ssIERhdGFJdGVtLCBUaWNrIH0gZnJvbSAnc2hhcmVkLWxvZ2ljL3NyYy9DaGFydHNWMi90eXBlcyc7XG5pbXBvcnQgeyBsaWdodGVuQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvY29sb3IuZnVuY3Rpb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBCYXJHcm91cEJhciwgQmFyR3JvdXAgYXMgQmFyR3JvdXBUeXBlIH0gZnJvbSAnQHZpc3gvc2hhcGUvbGliL3R5cGVzJztcbmltcG9ydCB7IHVzZUZsYXR0ZW5lZERhdGEgfSBmcm9tICcuLi9ob29rcy91c2VGbGF0dGVuZWREYXRhJztcbmltcG9ydCBHb2FsTGluZXMgZnJvbSAnLi4vR29hbExpbmUvR29hbExpbmVzJztcbmltcG9ydCB7IEF4aXNCb3R0b20gfSBmcm9tICcuLi9BeGlzL0F4aXNCb3R0b20nO1xuaW1wb3J0IHsgQXhpc0xlZnQgfSBmcm9tICcuLi9BeGlzL0F4aXNMZWZ0JztcbmltcG9ydCB7IEdyaWRSb3dzIH0gZnJvbSAnLi4vR3JpZFJvd3MvR3JpZFJvd3MnO1xuaW1wb3J0IHsgQ2hhcnRXcmFwcGVyIH0gZnJvbSAnLi4vQ2hhcnRXcmFwcGVyL0NoYXJ0V3JhcHBlcic7XG5cbi8vIE5lZWQgdG8gbG9vayBhdCB1cGRhdGluZyBCYXJDaGFydCB0byB1c2UgdGhpcyB0eXBlIG1ldGhvZCBvZiByZW5kZXJpbmcgLSBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC92aXN4LWJhci1jaGFydC1qOXNtcGo/ZmlsZT0lMkZFeGFtcGxlLnRzeFxuLy8gQ3VycmVudGx5IGl0J3MgdXNpbmcgU3RhY2tlZCBDaGFydCB3aGljaCBpc24ndCB0ZWNobmljYWxseSBjb3JyZWN0XG5cbmV4cG9ydCB0eXBlIEJhckNoYXJ0UHJvcHMgPSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0aGVtZT86IENoYXJ0VGhlbWU7XG4gIGNoYXJ0OiBCYXJDaGFydFJlcHJlc2VudGF0aW9uO1xuICBvcHRpb25zOiB7XG4gICAgc3RhY2tlZDogYm9vbGVhbjtcbiAgICBzaG93Um91bmRlZFRvdGFsOiBib29sZWFuO1xuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XG4gICAgcmVtb3ZlU3Ryb2tlOiBib29sZWFuO1xuICAgIGF4aXM6IHtcbiAgICAgIHNob3dYQXhpc0xhYmVsczogYm9vbGVhbjtcbiAgICAgIHNob3dZQXhpc0xhYmVsczogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuICBvbkNsaWNrOiAocGFyYW1zOiBDaGFydE9uVmlld0NsaWNrKSA9PiB2b2lkO1xuICBlbmFibGVIb3Zlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBCQVJfUkFESVVTID0gMjtcblxuY29uc3QgUEFERElORyA9IHtcbiAgcGFkZGluZ091dGVyOiAwLjA1LFxuICBwYWRkaW5nSW5uZXI6IDAuMyxcbn07XG5cbmV4cG9ydCBjb25zdCBCYXJDaGFydCA9ICh7IGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCB0aGVtZSwgb25DbGljaywgZW5hYmxlSG92ZXIgfTogQmFyQ2hhcnRQcm9wcykgPT4ge1xuICBjb25zdCB7IHRvb2x0aXBPcGVuLCB0b29sdGlwTGVmdCA9IDAsIHRvb2x0aXBUb3AgPSAwLCB0b29sdGlwRGF0YSwgaGlkZVRvb2x0aXAsIHNob3dUb29sdGlwIH0gPSB1c2VUb29sdGlwPHtcbiAgICBba2V5SWQ6IHN0cmluZ106IERhdGFJdGVtO1xuICB9IHwgbnVsbD4oKTtcblxuICBjb25zdCBtYXJnaW4gPSBidWlsZE1hcmdpbihjaGFydC55LnRpY2tzLCBvcHRpb25zLmF4aXMuc2hvd1lBeGlzTGFiZWxzLCBjaGFydC55LnRpdGxlICE9IG51bGwsIGNoYXJ0LngudGl0bGUgIT0gbnVsbCk7XG5cbiAgLy8gY29uc3QgW3Zpc2libGVZS2V5cywgc2V0VmlzaWJsZVlLZXlzXSA9IHVzZVN0YXRlKGNoYXJ0LmJhcnMubWFwKChsZWdlbmRJdGVtKSA9PiBsZWdlbmRJdGVtLnlLZXkpKTtcblxuICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgY29uc3QgaW5uZXJIZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIChvcHRpb25zLnNob3dMZWdlbmQgPyA0MCA6IDApO1xuICBjb25zdCB4S2V5ID0gY2hhcnQueC5rZXk7XG4gIGNvbnN0IHhTY2FsZUtleSA9IGNoYXJ0Lnguc2NhbGUua2V5O1xuICBjb25zdCB5U2NhbGVLZXlzID0gY2hhcnQueS5rZXlzO1xuICBjb25zdCB4U2NhbGVEYXRhVHlwZTogRGF0YVR5cGUgPSBjaGFydC54LnNjYWxlLmRhdGFUeXBlO1xuXG4gIGNvbnN0IHhTY2FsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8c3RyaW5nPih7XG4gICAgICAgIHJhbmdlOiBbMCwgaW5uZXJXaWR0aF0sXG4gICAgICAgIGRvbWFpbjogeFNjYWxlS2V5XG4gICAgICAgICAgPyBbLi4uY2hhcnQuZGF0YS5tYXAoZCA9PiAoZFt4U2NhbGVLZXldICYmIGRbeFNjYWxlS2V5XS52YWx1ZSAhPT0gbnVsbCA/IFN0cmluZyhkW3hTY2FsZUtleV0udmFsdWUpIDogJycpKV1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJyAmJiB4U2NhbGVLZXkpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8RGF0ZT4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IGNoYXJ0LmRhdGEubWFwKGQgPT4gbmV3IERhdGUoZFt4U2NhbGVLZXldLnZhbHVlIGFzIHN0cmluZykpLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJyAmJiB4U2NhbGVLZXkpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8bnVtYmVyPih7XG4gICAgICAgIHJhbmdlOiBbMCwgaW5uZXJXaWR0aF0sXG4gICAgICAgIGRvbWFpbjogY2hhcnQuZGF0YS5tYXAoZCA9PiAoZFt4U2NhbGVLZXldICYmIGRbeFNjYWxlS2V5XS52YWx1ZSAhPT0gbnVsbCA/IE51bWJlcihkW3hTY2FsZUtleV0udmFsdWUpIDogMCkpLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFtpbm5lcldpZHRoLCBjaGFydC54LCBjaGFydC5kYXRhXSk7XG5cbiAgY29uc3QgeVNjYWxlID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc2NhbGVMaW5lYXI8bnVtYmVyPih7XG4gICAgICAgIHJhbmdlOiBbaW5uZXJIZWlnaHQsIDBdLFxuICAgICAgICBkb21haW46XG4gICAgICAgICAgY2hhcnQueS5zY2FsZS5vcmRlcmluZyA9PT0gJ2FzYydcbiAgICAgICAgICAgID8gW2NoYXJ0Lnkuc2NhbGUubWluIGFzIG51bWJlciwgY2hhcnQueS5zY2FsZS5tYXggYXMgbnVtYmVyXVxuICAgICAgICAgICAgOiBbY2hhcnQueS5zY2FsZS5tYXggYXMgbnVtYmVyLCBjaGFydC55LnNjYWxlLm1pbiBhcyBudW1iZXJdLFxuICAgICAgICBuaWNlOiB0cnVlLFxuICAgICAgICByb3VuZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIFtpbm5lckhlaWdodCwgY2hhcnQueV1cbiAgKTtcblxuICBjb25zdCBpbm5lclhTY2FsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghb3B0aW9ucy5zdGFja2VkICYmIHhTY2FsZSAmJiAnYmFuZHdpZHRoJyBpbiB4U2NhbGUpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8c3RyaW5nPih7XG4gICAgICAgIHJhbmdlOiBbMCwgeFNjYWxlPy5iYW5kd2lkdGgoKV0sXG4gICAgICAgIGRvbWFpbjogeVNjYWxlS2V5cyxcbiAgICAgICAgcGFkZGluZzogMC4xLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW3hTY2FsZSwgeVNjYWxlS2V5cywgb3B0aW9ucy5zdGFja2VkLCB4U2NhbGVEYXRhVHlwZV0pO1xuXG4gIGNvbnN0IGRhdGFGbGF0dGVuZWQgPSB1c2VGbGF0dGVuZWREYXRhPEJhckNoYXJ0UmVwcmVzZW50YXRpb24+KHhTY2FsZUtleSwgeFNjYWxlRGF0YVR5cGUsIGNoYXJ0KTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8U1ZHRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICgheEtleSB8fCAheFNjYWxlS2V5IHx8IHhTY2FsZSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB0b29sdGlwRGF0YSA9IGdldFRvb2x0aXBEYXRhKHtcbiAgICAgICAgZGF0YTogY2hhcnQuZGF0YSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG1hcmdpbixcbiAgICAgICAgeFNjYWxlS2V5LFxuICAgICAgICB4U2NhbGVEYXRhVHlwZSxcbiAgICAgICAgeE9yZGVyaW5nOiBjaGFydC54LnNjYWxlLm9yZGVyaW5nLFxuICAgICAgICB4U2NhbGUsXG4gICAgICAgIGNoYXJ0VHlwZTogJ2JhcicsXG4gICAgICB9KTtcblxuICAgICAgc2hvd1Rvb2x0aXAoe1xuICAgICAgICB0b29sdGlwTGVmdDogdG9vbHRpcERhdGE/LnRvb2x0aXBMZWZ0LFxuICAgICAgICB0b29sdGlwVG9wOiB0b29sdGlwRGF0YT8udG9vbHRpcFRvcCxcbiAgICAgICAgdG9vbHRpcERhdGE6IHRvb2x0aXBEYXRhPy50b29sdGlwRGF0YSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3Nob3dUb29sdGlwLCB4U2NhbGUsIG1hcmdpbiwgeEtleSwgeFNjYWxlS2V5LCB4U2NhbGVEYXRhVHlwZSwgY2hhcnQueC5zY2FsZS5vcmRlcmluZywgY2hhcnQuZGF0YV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpZGVUb29sdGlwKCk7XG4gIH0sIFtoaWRlVG9vbHRpcF0pO1xuXG4gIGNvbnN0IGhhbmRsZU9uQmFyQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8U1ZHUmVjdEVsZW1lbnQsIE1vdXNlRXZlbnQ+LCBiYXJHcm91cDogQmFyR3JvdXBUeXBlPHN0cmluZz4sIGJhcjogQmFyR3JvdXBCYXI8c3RyaW5nPikgPT4ge1xuICAgICAgb25DbGljayh7XG4gICAgICAgIGNsaWNrZWRWYWx1ZToge1xuICAgICAgICAgIGluZGV4OiBiYXJHcm91cC5pbmRleCxcbiAgICAgICAgICB5OiB7XG4gICAgICAgICAgICBrZXk6IGJhci5rZXksXG4gICAgICAgICAgICB2YWx1ZTogYmFyLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeDoge1xuICAgICAgICAgICAgLi4uY2hhcnQueC50aWNrc1tiYXJHcm91cC5pbmRleF0sXG4gICAgICAgICAgICB2YWx1ZTogY2hhcnQuZGF0YVtiYXJHcm91cC5pbmRleF1beEtleV0udmFsdWUgPz8gJycsXG4gICAgICAgICAgICBrZXk6IHhLZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xpY2tFdmVudDogZXZlbnQsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtvbkNsaWNrLCBjaGFydC5kYXRhLCB4S2V5XVxuICApO1xuXG4gIGNvbnN0IHRoZW1lQ1NTID0gdXNlTWVtbygoKSA9PiBnZXRDaGFydFRoZW1lQ1NTKHRoZW1lKSwgW3RoZW1lXSk7XG5cbiAgY29uc3QgeVRpY2tWYWx1ZXMgPSBjaGFydC55LnRpY2tzLm1hcCh0aWNrID0+IE51bWJlcih0aWNrLnZhbHVlKSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7Lyogd2lkdGgvaGVpZ2h0IDEwMCUgcmVxdWlyZWQgb3IgdXNlUGFyZW50U2l6ZSgpIGNvbnRpbnVvdXNseSBzY2FsZXMgYXMgcGFyZW50IGVsZW1lbnQgaGFzIG5vIHNwZWNpZmllZCBoZWlnaHQgKi99XG4gICAgICA8Q2hhcnRXcmFwcGVyXG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVNb3VzZU1vdmV9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgc2hvd0xlZ2VuZD17b3B0aW9ucy5zaG93TGVnZW5kfVxuICAgICAgPlxuICAgICAgICA8R3JvdXAgbGVmdD17bWFyZ2luLmxlZnR9IHRvcD17bWFyZ2luLnRvcH0+XG4gICAgICAgICAgPEdyaWRSb3dzXG4gICAgICAgICAgICB0aWNrcz17eVRpY2tWYWx1ZXN9XG4gICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgaGVpZ2h0PXtpbm5lckhlaWdodH1cbiAgICAgICAgICAgIHJlbW92ZVN0cm9rZT17b3B0aW9ucy5yZW1vdmVTdHJva2V9XG4gICAgICAgICAgICB0aGVtZUNTUz17dGhlbWVDU1N9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QXhpc0JvdHRvbVxuICAgICAgICAgICAgeD17Y2hhcnQueH1cbiAgICAgICAgICAgIG1hcmdpbj17bWFyZ2lufVxuICAgICAgICAgICAgdGhlbWVDU1M9e3RoZW1lQ1NTfVxuICAgICAgICAgICAgc2hvdz17b3B0aW9ucy5heGlzLnNob3dYQXhpc0xhYmVsc31cbiAgICAgICAgICAgIHJlbW92ZVN0cm9rZT17b3B0aW9ucy5yZW1vdmVTdHJva2V9XG4gICAgICAgICAgICB4U2NhbGVEYXRhVHlwZT17eFNjYWxlRGF0YVR5cGV9XG4gICAgICAgICAgICB4U2NhbGU9e3hTY2FsZX1cbiAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QXhpc0xlZnRcbiAgICAgICAgICAgIHNob3c9e29wdGlvbnMuYXhpcy5zaG93WUF4aXNMYWJlbHN9XG4gICAgICAgICAgICB5PXtjaGFydC55fVxuICAgICAgICAgICAgbWFyZ2luPXttYXJnaW59XG4gICAgICAgICAgICB0aGVtZUNTUz17dGhlbWVDU1N9XG4gICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgIHRpY2tzPXt5VGlja1ZhbHVlc31cbiAgICAgICAgICAgIHN0cm9rZT17dGhlbWU/LmF4aXM/LnN0cm9rZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxHcm91cD5cbiAgICAgICAgICAgIHshb3B0aW9ucy5zdGFja2VkICYmIChcbiAgICAgICAgICAgICAgPEJhckdyb3VwXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YUZsYXR0ZW5lZH1cbiAgICAgICAgICAgICAgICBrZXlzPXt5U2NhbGVLZXlzfVxuICAgICAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgICAgICAgeDA9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4geFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCB4VmFsdWVBZGp1c3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogeFNjYWxlRGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyBOdW1iZXIoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKHhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFZhbHVlQWRqdXN0ZWQ7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgeDBTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB4MVNjYWxlPXtpbm5lclhTY2FsZX1cbiAgICAgICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgICAgICBjb2xvcj17KCkgPT4gJyd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YmFyR3JvdXBzID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJHcm91cHMubWFwKGJhckdyb3VwID0+IChcbiAgICAgICAgICAgICAgICAgICAgPEdyb3VwIGtleT17YGJhci1ncm91cC0ke2Jhckdyb3VwLmluZGV4fS0ke2Jhckdyb3VwLngwfWB9IGxlZnQ9e2Jhckdyb3VwLngwfT5cbiAgICAgICAgICAgICAgICAgICAgICB7YmFyR3JvdXAuYmFycy5tYXAoYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIudmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhci5oZWlnaHQgPCAwIHx8IGJhci53aWR0aCA8IDApIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1ncm91cC1iYXItJHtiYXJHcm91cC5pbmRleH0tJHtiYXIuaW5kZXh9LSR7YmFyLnZhbHVlfS0ke2Jhci5rZXl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PXtiYXIueX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gaGFuZGxlT25CYXJDbGljayhlLCBiYXJHcm91cCwgYmFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17ZW5hYmxlSG92ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9CYXJHcm91cD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBIb3cgdG8gd2UgZ2V0ICdzY2FsZVZhbHVlJyBoZXJlPyBXaWxsIHdlIG5lZWQgdG8gc3RhcnQgc3RvcmluZyBzY2FsZUtleSBhcyB3ZWxsIGFzIHhLZXk/ICovfVxuICAgICAgICAgICAge29wdGlvbnMuc3RhY2tlZCAmJiAoXG4gICAgICAgICAgICAgIDxCYXJTdGFja1xuICAgICAgICAgICAgICAgIHg9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnc3RyaW5nJykgcmV0dXJuIHhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlQWRqdXN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZSdcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh4VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhWYWx1ZUFkanVzdGVkO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHhTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIHlTY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgICAgIGRhdGE9e2RhdGFGbGF0dGVuZWR9XG4gICAgICAgICAgICAgICAga2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgICAgICAgIGNvbG9yPXsoKSA9PiAnJ31cbiAgICAgICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgICAgIG9mZnNldD1cIm5vbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2JhclN0YWNrcyA9PlxuICAgICAgICAgICAgICAgICAgYmFyU3RhY2tzLm1hcChiYXJTdGFjayA9PlxuICAgICAgICAgICAgICAgICAgICBiYXJTdGFjay5iYXJzLm1hcChiYXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIuaGVpZ2h0IDwgMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQkFSX1BBRERJTkcgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1zdGFjay0ke2JhclN0YWNrLmluZGV4fS0ke2Jhci5pbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeT17YmFyLnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXIud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodCAtIEJBUl9QQURESU5HfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIuYmFyLmRhdGEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByeD17QkFSX1JBRElVU31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvQmFyU3RhY2s+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIDwvR3JvdXA+XG4gICAgICAgIHsvKiAtLS0tLSBUT09MVElQIENST1NTSEFJUiAtLS0tLSAqL31cbiAgICAgICAge3Rvb2x0aXBEYXRhICYmIChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICAgIGZyb209e3sgeDogdG9vbHRpcExlZnQsIHk6IG1hcmdpbi50b3AgfX1cbiAgICAgICAgICAgICAgdG89e3sgeDogdG9vbHRpcExlZnQsIHk6IGlubmVySGVpZ2h0ICsgbWFyZ2luLnRvcCB9fVxuICAgICAgICAgICAgICBzdHJva2U9eycjYWFhJ31cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICAgICAgb3BhY2l0eT17MC44fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiAtLS0tLSBHT0FMIExJTkVTIC0tLS0tLSAqL31cbiAgICAgICAgPEdvYWxMaW5lcyBnb2FsTGluZXM9e2NoYXJ0LmdvYWxMaW5lc30geT17ZCA9PiB5U2NhbGUoZCl9IG1hcmdpbj17bWFyZ2lufSB3aWR0aD17aW5uZXJXaWR0aH0gLz5cbiAgICAgIDwvQ2hhcnRXcmFwcGVyPlxuICAgICAgey8qIC0tLS0tIExFR0VORCAtLS0tLSAqL31cbiAgICAgIHtvcHRpb25zLnNob3dMZWdlbmQgJiYgKFxuICAgICAgICA8TGVnZW5kXG4gICAgICAgICAgbGVnZW5kSXRlbXM9e2NoYXJ0LmJhcnN9XG4gICAgICAgICAgdmlzaWJsZVlLZXlzPXtjaGFydC5iYXJzLm1hcChsZWdlbmRJdGVtID0+IGxlZ2VuZEl0ZW0ueUtleSl9XG4gICAgICAgICAgc2V0VmlzaWJsZVlLZXlzPXsoKSA9PiB7fX1cbiAgICAgICAgICBrZXlzPXtjaGFydC5rZXlzfVxuICAgICAgICAgIGNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzPXtjaGFydC5jb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlc31cbiAgICAgICAgICBtYXJnaW5MZWZ0PXttYXJnaW4ubGVmdCAtIG1hcmdpbi5sZWZ0VGl0bGVPZmZzZXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey8qIC0tLS0tIFRPT0xUSVAgLS0tLS0gKi99XG4gICAgICB7dG9vbHRpcE9wZW4gJiYgdG9vbHRpcERhdGEgJiYgeEtleSAmJiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgdG9vbHRpcERhdGE9e3Rvb2x0aXBEYXRhfVxuICAgICAgICAgIHRvb2x0aXBMZWZ0PXt0b29sdGlwTGVmdH1cbiAgICAgICAgICB0b29sdGlwVG9wPXt0b29sdGlwVG9wfVxuICAgICAgICAgIHhLZXk9e3hLZXl9XG4gICAgICAgICAga2V5cz17Y2hhcnQua2V5c31cbiAgICAgICAgICB2aXNpYmxlWUtleXM9e2NoYXJ0LmJhcnMubWFwKGxlZ2VuZEl0ZW0gPT4gbGVnZW5kSXRlbS55S2V5KX1cbiAgICAgICAgICB5S2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgIGxlZ2VuZEl0ZW1zPXtjaGFydC5iYXJzfVxuICAgICAgICAgIHNob3dSb3VuZGVkVG90YWw9e29wdGlvbnMuc2hvd1JvdW5kZWRUb3RhbH1cbiAgICAgICAgICBjb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlcz17Y2hhcnQuY29uZGl0aW9uYWxGb3JtYXR0aW5nUnVsZXN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lQ1NTLnBvcG92ZXJNZW51c31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn07XG5cbmNvbnN0IEJhciA9IChwcm9wczoge1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdSZWN0RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIGZpbGw/OiBzdHJpbmc7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIGVuYWJsZUhvdmVyPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgW2ZpbGxDb2xvciwgc2V0RmlsbENvbG9yXSA9IHVzZVN0YXRlKHByb3BzLmZpbGwpO1xuICByZXR1cm4gKFxuICAgIDxyZWN0XG4gICAgICBrZXk9e3Byb3BzLmtleX1cbiAgICAgIHg9e3Byb3BzLnh9XG4gICAgICB5PXtwcm9wcy55fVxuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHR9XG4gICAgICBmaWxsPXtmaWxsQ29sb3J9XG4gICAgICByeD17QkFSX1JBRElVU31cbiAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihsaWdodGVuQ29sb3IocHJvcHMuZmlsbCwgMC44KSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihwcm9wcy5maWxsKX1cbiAgICAgIGNsYXNzTmFtZT17cHJvcHMuZW5hYmxlSG92ZXIgPyBjc3MoeyBjdXJzb3I6ICdwb2ludGVyJyB9KSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuIl19 */",
41910
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$8
41923
41911
  }) : ''
41924
41912
  }, props.key);
41925
41913
  };