@vizzly/dashboard 0.14.4-dev-8252b10a001b6d371cf542597333bfa8f0f1ed5a → 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.
@@ -48,12 +48,13 @@ import { useWindowWidth } from '@react-hook/window-size';
48
48
  import copy from 'copy-to-clipboard';
49
49
  import html2canvas from 'html2canvas';
50
50
  import jsPDF from 'jspdf';
51
- import { Text } from '@visx/text';
52
- import { AxisBottom, AxisLeft } from '@visx/axis';
53
- import { GridRows } from '@visx/grid';
54
51
  import { RectClipPath } from '@visx/clip-path';
55
52
  import { localPoint } from '@visx/event';
56
53
  import { bisector } from '@visx/vendor/d3-array';
54
+ import { AxisBottom as AxisBottom$1, AxisLeft as AxisLeft$1 } from '@visx/axis';
55
+ import { Text } from '@visx/text';
56
+ import { GridRows as GridRows$1 } from '@visx/grid';
57
+ import '@visx/point';
57
58
  import { WaterfallChart as WaterfallChart$4 } from './charts/src/v2/components/WaterfallChart';
58
59
  import VisibilitySensor from 'react-visibility-sensor';
59
60
  import ExcelJS from 'exceljs';
@@ -40993,72 +40994,6 @@ var Legend$1 = function Legend(_ref) {
40993
40994
  });
40994
40995
  };
40995
40996
 
40996
- var GoalLine = function GoalLine(_ref) {
40997
- var goalLine = _ref.goalLine,
40998
- innerWidth = _ref.innerWidth,
40999
- y = _ref.y,
41000
- margin = _ref.margin;
41001
- var textRef = useRef(null);
41002
- var _useState = useState(0),
41003
- labelWidth = _useState[0],
41004
- setLabelWidth = _useState[1];
41005
- useEffect(function () {
41006
- if (textRef.current) {
41007
- var bbox = textRef.current.getBBox();
41008
- setLabelWidth(bbox.width + 16);
41009
- }
41010
- }, [goalLine.formattedValue]);
41011
- var height = 16;
41012
- var triangleWidth = 8;
41013
- return jsxs("g", {
41014
- style: {
41015
- position: 'relative'
41016
- },
41017
- children: [jsx(Line, {
41018
- from: {
41019
- x: margin.left,
41020
- y: margin.top + y
41021
- },
41022
- to: {
41023
- x: margin.left + innerWidth,
41024
- y: margin.top + y
41025
- },
41026
- stroke: goalLine.color,
41027
- strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
41028
- strokeWidth: goalLine.strokeWidth,
41029
- strokeLinecap: "round",
41030
- shapeRendering: "smooth"
41031
- }), jsxs("g", {
41032
- transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
41033
- children: [jsx("path", {
41034
- 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",
41035
- fill: goalLine.color
41036
- }), jsx("text", {
41037
- ref: textRef,
41038
- x: labelWidth / 2,
41039
- y: -1,
41040
- dy: -4,
41041
- textAnchor: "middle",
41042
- fontFamily: "Arial, sans-serif",
41043
- fontSize: 9,
41044
- fill: '#fff',
41045
- children: goalLine.formattedValue
41046
- })]
41047
- })]
41048
- });
41049
- };
41050
-
41051
- /*
41052
- const strokeWidth = 2;
41053
- const height = 16;
41054
- const triangleWidth = 8;
41055
-
41056
-
41057
-
41058
-
41059
-
41060
- */
41061
-
41062
40997
  var ASSUMED_AVERAGE_CHAR_WIDTH = 8.8;
41063
40998
  function calculateWordWidth(word, avgCharWidth) {
41064
40999
  if (avgCharWidth === void 0) {
@@ -41149,25 +41084,253 @@ function useFlattenedData(xScaleKey, xScaleDataType, chart) {
41149
41084
  }, [chart.data, xScaleKey, xScaleDataType, chart.y.keys]);
41150
41085
  }
41151
41086
 
41152
- var _excluded$e = ["formattedValue"],
41153
- _excluded2$4 = ["formattedValue"];
41087
+ var GoalLine = function GoalLine(_ref) {
41088
+ var goalLine = _ref.goalLine,
41089
+ innerWidth = _ref.innerWidth,
41090
+ y = _ref.y,
41091
+ margin = _ref.margin;
41092
+ var textRef = useRef(null);
41093
+ var _useState = useState(0),
41094
+ labelWidth = _useState[0],
41095
+ setLabelWidth = _useState[1];
41096
+ useEffect(function () {
41097
+ if (textRef.current) {
41098
+ var bbox = textRef.current.getBBox();
41099
+ setLabelWidth(bbox.width + 16);
41100
+ }
41101
+ }, [goalLine.formattedValue]);
41102
+ var height = 16;
41103
+ var triangleWidth = 8;
41104
+ return jsxs("g", {
41105
+ style: {
41106
+ position: 'relative'
41107
+ },
41108
+ children: [jsx(Line, {
41109
+ from: {
41110
+ x: margin.left,
41111
+ y: margin.top + y
41112
+ },
41113
+ to: {
41114
+ x: margin.left + innerWidth,
41115
+ y: margin.top + y
41116
+ },
41117
+ stroke: goalLine.color,
41118
+ strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
41119
+ strokeWidth: goalLine.strokeWidth,
41120
+ strokeLinecap: "round",
41121
+ shapeRendering: "smooth"
41122
+ }), jsxs("g", {
41123
+ transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
41124
+ children: [jsx("path", {
41125
+ 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",
41126
+ fill: goalLine.color
41127
+ }), jsx("text", {
41128
+ ref: textRef,
41129
+ x: labelWidth / 2,
41130
+ y: -1,
41131
+ dy: -4,
41132
+ textAnchor: "middle",
41133
+ fontFamily: "Arial, sans-serif",
41134
+ fontSize: 9,
41135
+ fill: '#fff',
41136
+ children: goalLine.formattedValue
41137
+ })]
41138
+ })]
41139
+ });
41140
+ };
41141
+
41142
+ /*
41143
+ const strokeWidth = 2;
41144
+ const height = 16;
41145
+ const triangleWidth = 8;
41146
+
41147
+
41148
+
41149
+
41150
+
41151
+ */
41152
+
41153
+ var shouldUpdate$1 = function shouldUpdate(previousProps, nextProps) {
41154
+ return JSON.stringify(previousProps) == JSON.stringify(nextProps);
41155
+ };
41156
+ var GoalLines = function GoalLines(_ref) {
41157
+ var goalLines = _ref.goalLines,
41158
+ margin = _ref.margin,
41159
+ y = _ref.y,
41160
+ width = _ref.width;
41161
+ return jsx(Fragment, {
41162
+ children: goalLines.map(function (goalLine) {
41163
+ return jsx(GoalLine, {
41164
+ innerWidth: width,
41165
+ y: y(goalLine.value),
41166
+ goalLine: goalLine,
41167
+ margin: margin
41168
+ }, goalLine.value);
41169
+ })
41170
+ });
41171
+ };
41172
+ var GoalLines$1 = /*#__PURE__*/memo(GoalLines, shouldUpdate$1);
41173
+
41154
41174
  var AXIS_TITLE_STYLES = {
41155
41175
  opacity: '0.75',
41156
41176
  fontWeight: 'bold'
41157
41177
  };
41158
41178
 
41159
- /*
41160
- NOTES
41161
- -----
41162
- 1. Control width of margins via props and truncate ticks using a fixed width
41163
- 2. (somehow) prevent overlapping of ticks
41164
- 3. Split out conditional formatting colours to show operator and values for each color
41165
- 4. Add axis titles
41166
- 5. Account for no xKey and showing 1 dot for a single yKey
41167
- */
41179
+ var _excluded$e = ["formattedValue"];
41180
+ var AxisBottom = function AxisBottom(_ref) {
41181
+ var _x$ticks;
41182
+ var x = _ref.x,
41183
+ margin = _ref.margin,
41184
+ themeCSS = _ref.themeCSS,
41185
+ show = _ref.show,
41186
+ removeStroke = _ref.removeStroke,
41187
+ xScaleDataType = _ref.xScaleDataType,
41188
+ xScale = _ref.xScale,
41189
+ height = _ref.height;
41190
+ var tickFormat = useCallback(function (value) {
41191
+ var tick = null;
41192
+ if (xScaleDataType === 'date_time' && value instanceof Date) {
41193
+ var matchingTickValue = x.ticks.find(function (tickValue) {
41194
+ return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41195
+ });
41196
+ tick = matchingTickValue || null;
41197
+ } else {
41198
+ var _matchingTickValue = x.ticks.find(function (tickValue) {
41199
+ return tickValue.scaleValue === value;
41200
+ });
41201
+ tick = _matchingTickValue || null;
41202
+ }
41203
+ if (tick) {
41204
+ if (tick.formattedValue) {
41205
+ return tick.formattedValue;
41206
+ }
41207
+ return tick.value.toString();
41208
+ }
41209
+ return '';
41210
+ }, [x.ticks, xScaleDataType]);
41211
+ if (!show) return null;
41212
+ if (!xScale) return null;
41213
+ return jsx(AxisBottom$1, {
41214
+ label: x.title || undefined,
41215
+ labelProps: {
41216
+ style: AXIS_TITLE_STYLES
41217
+ },
41218
+ labelOffset: margin.bottomTitleOffset,
41219
+ hideTicks: true,
41220
+ top: height,
41221
+ scale: xScale,
41222
+ tickFormat: tickFormat,
41223
+ tickValues: ((_x$ticks = x.ticks) == null ? void 0 : _x$ticks.length) > 0 ? x.ticks.map(function (tick) {
41224
+ return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41225
+ }) : undefined,
41226
+ tickComponent: function tickComponent(_ref2) {
41227
+ var formattedValue = _ref2.formattedValue,
41228
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41229
+ return jsx(Text, _extends({
41230
+ style: themeCSS.labels
41231
+ }, tickProps, {
41232
+ children: formattedValue
41233
+ }));
41234
+ },
41235
+ stroke: themeCSS.axis.stroke,
41236
+ strokeWidth: removeStroke ? 0 : 1
41237
+ });
41238
+ };
41239
+
41240
+ var _excluded$f = ["formattedValue"];
41241
+ var AxisLeft = function AxisLeft(_ref) {
41242
+ var show = _ref.show,
41243
+ y = _ref.y,
41244
+ margin = _ref.margin,
41245
+ themeCSS = _ref.themeCSS,
41246
+ yScale = _ref.yScale,
41247
+ ticks = _ref.ticks,
41248
+ stroke = _ref.stroke;
41249
+ var tickFormat = useCallback(function (value) {
41250
+ var item = y.ticks.filter(function (tick) {
41251
+ return tick.value === value;
41252
+ })[0];
41253
+ if (item) {
41254
+ if (item.formattedValue) {
41255
+ return item.formattedValue;
41256
+ } else {
41257
+ return item.value.toString();
41258
+ }
41259
+ } else {
41260
+ return '';
41261
+ }
41262
+ }, [y.ticks]);
41263
+ if (!show) return null;
41264
+ return jsx(AxisLeft$1, {
41265
+ labelOffset: margin.leftTitleOffset,
41266
+ label: y.title || undefined,
41267
+ labelProps: {
41268
+ style: AXIS_TITLE_STYLES
41269
+ },
41270
+ hideTicks: true,
41271
+ left: 0,
41272
+ top: 0,
41273
+ scale: yScale,
41274
+ tickFormat: tickFormat,
41275
+ tickValues: ticks,
41276
+ tickComponent: function tickComponent(_ref2) {
41277
+ var formattedValue = _ref2.formattedValue,
41278
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41279
+ return jsx(Text, _extends({
41280
+ width: 10,
41281
+ style: themeCSS.labels
41282
+ }, tickProps, {
41283
+ children: formattedValue
41284
+ }));
41285
+ },
41286
+ stroke: stroke != null ? stroke : 'transparent'
41287
+ });
41288
+ };
41289
+
41290
+ var GridRows = function GridRows(_ref) {
41291
+ var ticks = _ref.ticks,
41292
+ yScale = _ref.yScale,
41293
+ removeStroke = _ref.removeStroke,
41294
+ width = _ref.width,
41295
+ height = _ref.height,
41296
+ themeCSS = _ref.themeCSS;
41297
+ return jsx(GridRows$1, {
41298
+ tickValues: ticks.length > 0 ? ticks : undefined,
41299
+ scale: yScale,
41300
+ width: width,
41301
+ height: height,
41302
+ pointerEvents: "none",
41303
+ strokeDasharray: "0.5 5",
41304
+ strokeWidth: removeStroke ? 0 : 2,
41305
+ lineStyle: {
41306
+ strokeLinecap: 'round',
41307
+ stroke: themeCSS.grid.stroke
41308
+ }
41309
+ });
41310
+ };
41311
+
41312
+ 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)."; }
41313
+ var ChartWrapper$1 = function ChartWrapper(props) {
41314
+ return jsx("svg", {
41315
+ width: props.width,
41316
+ height: props.height - (props.showLegend ? 40 : 0),
41317
+ onMouseMove: props.onMouseMove,
41318
+ onMouseLeave: props.onMouseLeave,
41319
+ className: /*#__PURE__*/css$1(process.env.NODE_ENV === "production" ? {
41320
+ name: "4zleql",
41321
+ styles: "display:block"
41322
+ } : {
41323
+ name: "fx4tbw-ChartWrapper",
41324
+ styles: "display:block;label:ChartWrapper;",
41325
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJ0V3JhcHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JpQiIsImZpbGUiOiJDaGFydFdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcblxuZXhwb3J0IGNvbnN0IENoYXJ0V3JhcHBlciA9IChwcm9wczoge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgb25Nb3VzZU1vdmU/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxTVkdTVkdFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8U1ZHU1ZHRWxlbWVudD47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHQgLSAocHJvcHMuc2hvd0xlZ2VuZCA/IDQwIDogMCl9XG4gICAgICBvbk1vdXNlTW92ZT17cHJvcHMub25Nb3VzZU1vdmV9XG4gICAgICBvbk1vdXNlTGVhdmU9e3Byb3BzLm9uTW91c2VMZWF2ZX1cbiAgICAgIGNsYXNzTmFtZT17Y3NzKHsgZGlzcGxheTogJ2Jsb2NrJyB9KX1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9zdmc+XG4gICk7XG59O1xuIl19 */",
41326
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41327
+ }),
41328
+ children: props.children
41329
+ });
41330
+ };
41168
41331
 
41169
41332
  var LineChart$5 = function LineChart(_ref) {
41170
- var _theme$axis$stroke, _theme$axis;
41333
+ var _theme$axis;
41171
41334
  var chart = _ref.chart,
41172
41335
  options = _ref.options,
41173
41336
  theme = _ref.theme,
@@ -41237,21 +41400,6 @@ var LineChart$5 = function LineChart(_ref) {
41237
41400
  });
41238
41401
  }, [innerHeight, chart.y]);
41239
41402
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41240
- var goalLines = useMemo(function () {
41241
- return chart.goalLines.map(function (goalLine) {
41242
- return jsx(GoalLine, {
41243
- innerWidth: innerWidth,
41244
- y: yScale(goalLine.value),
41245
- goalLine: goalLine,
41246
- margin: {
41247
- top: margin.top,
41248
- left: margin.left,
41249
- right: margin.right,
41250
- bottom: margin.bottom
41251
- }
41252
- }, goalLine.value);
41253
- });
41254
- }, [chart.goalLines, margin, innerWidth, yScale]);
41255
41403
  var handleMouseMove = useCallback(function (event) {
41256
41404
  if (!xKey || !xScaleKey || xScale === null) return;
41257
41405
  var tooltipData = getTooltipData({
@@ -41278,112 +41426,39 @@ var LineChart$5 = function LineChart(_ref) {
41278
41426
  return Number(tick.value);
41279
41427
  });
41280
41428
  return jsxs(React__default.Fragment, {
41281
- children: [jsxs("svg", {
41429
+ children: [jsxs(ChartWrapper$1, {
41282
41430
  width: width,
41283
- height: height - (options.showLegend ? 40 : 0),
41431
+ height: height,
41432
+ showLegend: options.showLegend,
41284
41433
  onMouseMove: handleMouseMove,
41285
41434
  onMouseLeave: handleMouseLeave,
41286
- style: {
41287
- display: 'block'
41288
- },
41289
41435
  children: [jsxs(Group$2, {
41290
41436
  left: margin.left,
41291
41437
  top: margin.top,
41292
41438
  children: [jsx(GridRows, {
41293
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41294
- scale: yScale,
41439
+ ticks: yTickValues,
41440
+ yScale: yScale,
41295
41441
  width: innerWidth,
41296
41442
  height: innerHeight,
41297
- pointerEvents: "none",
41298
- strokeDasharray: "0.5 5",
41299
- strokeWidth: options.removeStroke ? 0 : 2,
41300
- lineStyle: {
41301
- strokeLinecap: 'round',
41302
- stroke: themeCSS.grid.stroke
41303
- }
41304
- }), options.axis.showXAxisLabels && jsx(AxisBottom, {
41305
- label: chart.x.title || undefined,
41306
- labelProps: {
41307
- style: AXIS_TITLE_STYLES
41308
- },
41309
- labelOffset: margin.bottomTitleOffset,
41310
- hideTicks: true,
41311
- top: innerHeight,
41312
- scale: xScale,
41313
- tickFormat: function tickFormat(value) {
41314
- var tick = null;
41315
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41316
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41317
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41318
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41319
- });
41320
- tick = matchingTickValue || null;
41321
- } else {
41322
- var _matchingTickValue = chart.x.ticks.find(function (tickValue) {
41323
- return tickValue.scaleValue === value;
41324
- });
41325
- tick = _matchingTickValue || null;
41326
- }
41327
- if (tick) {
41328
- if (tick.formattedValue) {
41329
- return tick.formattedValue;
41330
- } else {
41331
- return tick.value.toString();
41332
- }
41333
- } else {
41334
- return ''; // ?
41335
- }
41336
- },
41337
- tickValues: chart.x.ticks.length > 0 ? chart.x.ticks.map(function (tick) {
41338
- return tick.scaleValue !== null ? tick.scaleValue : 0;
41339
- }) : undefined,
41340
- tickComponent: function tickComponent(_ref2) {
41341
- var formattedValue = _ref2.formattedValue,
41342
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41343
- return jsx(Text, _extends({
41344
- style: themeCSS.labels
41345
- }, tickProps, {
41346
- children: formattedValue
41347
- }));
41348
- },
41349
- stroke: themeCSS.axis.stroke,
41350
- strokeWidth: options.removeStroke ? 0 : 1
41351
- }), options.axis.showYAxisLabels && jsx(AxisLeft, {
41352
- labelOffset: margin.leftTitleOffset,
41353
- label: chart.y.title || undefined,
41354
- labelProps: {
41355
- style: AXIS_TITLE_STYLES
41356
- },
41357
- hideTicks: true,
41358
- left: 0,
41359
- top: 0,
41360
- scale: yScale,
41361
- tickFormat: function tickFormat(value) {
41362
- var item = chart.y.ticks.filter(function (tick) {
41363
- return tick.value === value;
41364
- })[0];
41365
- if (item) {
41366
- if (item.formattedValue) {
41367
- return item.formattedValue;
41368
- } else {
41369
- return item.value.toString();
41370
- }
41371
- } else {
41372
- return '';
41373
- }
41374
- },
41375
- tickValues: yTickValues,
41376
- tickComponent: function tickComponent(_ref3) {
41377
- var formattedValue = _ref3.formattedValue,
41378
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$4);
41379
- return jsx(Text, _extends({
41380
- width: 10,
41381
- style: themeCSS.labels
41382
- }, tickProps, {
41383
- children: formattedValue
41384
- }));
41385
- },
41386
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41443
+ removeStroke: options.removeStroke,
41444
+ themeCSS: themeCSS
41445
+ }), jsx(AxisBottom, {
41446
+ x: chart.x,
41447
+ margin: margin,
41448
+ themeCSS: themeCSS,
41449
+ show: options.axis.showXAxisLabels,
41450
+ removeStroke: options.removeStroke,
41451
+ xScaleDataType: xScaleDataType,
41452
+ xScale: xScale,
41453
+ height: innerHeight
41454
+ }), jsx(AxisLeft, {
41455
+ show: options.axis.showYAxisLabels,
41456
+ y: chart.y,
41457
+ margin: margin,
41458
+ themeCSS: themeCSS,
41459
+ yScale: yScale,
41460
+ ticks: yTickValues,
41461
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41387
41462
  }), jsxs(Group$2, {
41388
41463
  children: [chart.y.keys.map(function (yKey) {
41389
41464
  var _chart$lines$filter$;
@@ -41513,7 +41588,14 @@ var LineChart$5 = function LineChart(_ref) {
41513
41588
  return null;
41514
41589
  }
41515
41590
  })]
41516
- }), goalLines]
41591
+ }), jsx(GoalLines$1, {
41592
+ goalLines: chart.goalLines,
41593
+ y: function y(d) {
41594
+ return yScale(d);
41595
+ },
41596
+ margin: margin,
41597
+ width: innerWidth
41598
+ })]
41517
41599
  }), options.showLegend && jsx(Legend$1, {
41518
41600
  legendItems: chart.lines,
41519
41601
  visibleYKeys: visibleYKeys,
@@ -41561,20 +41643,14 @@ function getBarFill(bars, conditionalFormattingRules, barKey, barValues) {
41561
41643
  return fill;
41562
41644
  }
41563
41645
 
41564
- var _excluded$f = ["formattedValue"],
41565
- _excluded2$5 = ["formattedValue"];
41566
- 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)."; }
41567
- var AXIS_TITLE_STYLES$1 = {
41568
- opacity: '0.75',
41569
- fontWeight: 'bold'
41570
- };
41646
+ 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)."; }
41571
41647
  var BAR_RADIUS = 2;
41572
41648
  var PADDING = {
41573
41649
  paddingOuter: 0.05,
41574
41650
  paddingInner: 0.3
41575
41651
  };
41576
41652
  var BarChart$5 = function BarChart(_ref) {
41577
- var _chart$x2, _theme$axis$stroke, _theme$axis;
41653
+ var _theme$axis;
41578
41654
  var chart = _ref.chart,
41579
41655
  width = _ref.width,
41580
41656
  height = _ref.height,
@@ -41647,21 +41723,6 @@ var BarChart$5 = function BarChart(_ref) {
41647
41723
  return undefined;
41648
41724
  }, [xScale, yScaleKeys, options.stacked, xScaleDataType]);
41649
41725
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41650
- var goalLines = useMemo(function () {
41651
- return chart.goalLines.map(function (goalLine) {
41652
- return jsx(GoalLine, {
41653
- innerWidth: innerWidth,
41654
- y: yScale(goalLine.value),
41655
- goalLine: goalLine,
41656
- margin: {
41657
- top: margin.top,
41658
- left: margin.left,
41659
- right: margin.right,
41660
- bottom: margin.bottom
41661
- }
41662
- }, goalLine.value);
41663
- });
41664
- }, [chart.goalLines, margin, innerWidth, yScale]);
41665
41726
  var handleMouseMove = useCallback(function (event) {
41666
41727
  if (!xKey || !xScaleKey || xScale === null) return;
41667
41728
  var tooltipData = getTooltipData({
@@ -41707,115 +41768,39 @@ var BarChart$5 = function BarChart(_ref) {
41707
41768
  return Number(tick.value);
41708
41769
  });
41709
41770
  return jsxs(Fragment, {
41710
- children: [jsxs("svg", {
41771
+ children: [jsxs(ChartWrapper$1, {
41711
41772
  width: width,
41712
- height: height - (options.showLegend ? 40 : 0),
41773
+ height: height,
41713
41774
  onMouseMove: handleMouseMove,
41714
41775
  onMouseLeave: handleMouseLeave,
41715
- style: {
41716
- display: 'block'
41717
- },
41776
+ showLegend: options.showLegend,
41718
41777
  children: [jsxs(Group$2, {
41719
41778
  left: margin.left,
41720
41779
  top: margin.top,
41721
41780
  children: [jsx(GridRows, {
41722
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41723
- scale: yScale,
41781
+ ticks: yTickValues,
41782
+ yScale: yScale,
41724
41783
  width: innerWidth,
41725
41784
  height: innerHeight,
41726
- pointerEvents: "none",
41727
- strokeDasharray: "0.5 5",
41728
- strokeWidth: options.removeStroke ? 0 : 2,
41729
- lineStyle: {
41730
- strokeLinecap: 'round',
41731
- stroke: themeCSS.grid.stroke
41732
- }
41733
- }), options.axis.showXAxisLabels && jsx(AxisBottom, {
41734
- label: chart.x.title || undefined,
41735
- labelProps: {
41736
- style: AXIS_TITLE_STYLES$1
41737
- },
41738
- labelOffset: margin.bottomTitleOffset,
41739
- hideTicks: true,
41740
- top: innerHeight
41741
- // @ts-ignore
41742
- ,
41743
- scale: xScale,
41744
- tickFormat: function tickFormat(value) {
41745
- var tick = null;
41746
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41747
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41748
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41749
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41750
- });
41751
- tick = matchingTickValue || null;
41752
- } else {
41753
- var _chart$x;
41754
- var _matchingTickValue = chart == null || (_chart$x = chart.x) == null ? void 0 : _chart$x.ticks.find(function (tickValue) {
41755
- return ((tickValue == null ? void 0 : tickValue.scaleValue) !== null ? tickValue == null ? void 0 : tickValue.scaleValue : 0) === value;
41756
- });
41757
- tick = _matchingTickValue || null;
41758
- }
41759
- if (tick) {
41760
- if (tick.formattedValue) {
41761
- return tick.formattedValue;
41762
- } else {
41763
- return tick.value.toString();
41764
- }
41765
- } else {
41766
- return ''; // ?
41767
- }
41768
- },
41769
- 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) {
41770
- return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41771
- }) : undefined,
41772
- tickComponent: function tickComponent(_ref2) {
41773
- var formattedValue = _ref2.formattedValue,
41774
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41775
- return jsx(Text, _extends({
41776
- style: themeCSS.labels
41777
- }, tickProps, {
41778
- children: formattedValue
41779
- }));
41780
- },
41781
- stroke: themeCSS.axis.stroke,
41782
- strokeWidth: options.removeStroke ? 0 : 1
41783
- }), options.axis.showYAxisLabels && jsx(AxisLeft, {
41784
- labelOffset: margin.leftTitleOffset,
41785
- label: chart.y.title || undefined,
41786
- labelProps: {
41787
- style: AXIS_TITLE_STYLES$1
41788
- },
41789
- hideTicks: true,
41790
- left: 0,
41791
- top: 0,
41792
- scale: yScale,
41793
- tickFormat: function tickFormat(value) {
41794
- var item = chart.y.ticks.filter(function (tick) {
41795
- return tick.value === value;
41796
- })[0];
41797
- if (item) {
41798
- if (item.formattedValue) {
41799
- return item.formattedValue;
41800
- } else {
41801
- return item.value.toString();
41802
- }
41803
- } else {
41804
- return '';
41805
- }
41806
- },
41807
- tickValues: yTickValues,
41808
- tickComponent: function tickComponent(_ref3) {
41809
- var formattedValue = _ref3.formattedValue,
41810
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$5);
41811
- return jsx(Text, _extends({
41812
- width: 10,
41813
- style: themeCSS.labels
41814
- }, tickProps, {
41815
- children: formattedValue
41816
- }));
41817
- },
41818
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41785
+ removeStroke: options.removeStroke,
41786
+ themeCSS: themeCSS
41787
+ }), jsx(AxisBottom, {
41788
+ x: chart.x,
41789
+ margin: margin,
41790
+ themeCSS: themeCSS,
41791
+ show: options.axis.showXAxisLabels,
41792
+ removeStroke: options.removeStroke,
41793
+ xScaleDataType: xScaleDataType,
41794
+ xScale: xScale,
41795
+ height: innerHeight
41796
+ }), jsx(AxisLeft, {
41797
+ show: options.axis.showYAxisLabels,
41798
+ y: chart.y,
41799
+ margin: margin,
41800
+ themeCSS: themeCSS,
41801
+ yScale: yScale,
41802
+ ticks: yTickValues,
41803
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41819
41804
  }), jsxs(Group$2, {
41820
41805
  children: [!options.stacked && jsx(BarGroup$1, {
41821
41806
  data: dataFlattened,
@@ -41915,7 +41900,14 @@ var BarChart$5 = function BarChart(_ref) {
41915
41900
  pointerEvents: "none",
41916
41901
  opacity: 0.8
41917
41902
  })
41918
- }), goalLines]
41903
+ }), jsx(GoalLines$1, {
41904
+ goalLines: chart.goalLines,
41905
+ y: function y(d) {
41906
+ return yScale(d);
41907
+ },
41908
+ margin: margin,
41909
+ width: innerWidth
41910
+ })]
41919
41911
  }), options.showLegend && jsx(Legend$1, {
41920
41912
  legendItems: chart.bars,
41921
41913
  visibleYKeys: chart.bars.map(function (legendItem) {
@@ -41966,8 +41958,8 @@ var Bar = function Bar(props) {
41966
41958
  } : {
41967
41959
  name: "4nk3o1-Bar",
41968
41960
  styles: "cursor:pointer;label:Bar;",
41969
- 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 */",
41970
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41961
+ 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 */",
41962
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$8
41971
41963
  }) : ''
41972
41964
  }, props.key);
41973
41965
  };