@kepler.gl/components 3.3.0-alpha.8 → 3.3.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/common/file-uploader/file-upload.js +2 -1
  2. package/dist/cjs/effects/effect-configurator.js +2 -2
  3. package/dist/cjs/effects/effect-manager.js +32 -17
  4. package/dist/cjs/effects/effect-time-configurator.js +110 -42
  5. package/dist/cjs/kepler-gl.js +6 -2
  6. package/dist/cjs/modals/export-map-modal/components.js +16 -7
  7. package/dist/cjs/modals/export-map-modal/export-html-map.js +5 -9
  8. package/dist/cjs/modals/export-map-modal/export-json-map.js +4 -8
  9. package/dist/cjs/modals/export-map-modal/export-map-modal.js +21 -16
  10. package/dist/cjs/notification-panel/notification-item.js +58 -12
  11. package/dist/cjs/remote-dataset-refresh-controller.js +50 -0
  12. package/dist/cjs/side-panel/common/dataset-info.js +187 -8
  13. package/dist/cjs/side-panel/common/dataset-refresh-progress.js +63 -0
  14. package/dist/cjs/side-panel/common/dataset-title.js +76 -13
  15. package/dist/cjs/side-panel/common/source-data-catalog.js +31 -6
  16. package/dist/cjs/side-panel/filter-manager.js +7 -3
  17. package/dist/cjs/side-panel/layer-manager.js +14 -4
  18. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +14 -4
  19. package/dist/cjs/side-panel/layer-panel/dataset-section.js +7 -3
  20. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +49 -35
  21. package/dist/cjs/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  22. package/dist/effects/effect-manager.d.ts +1 -1
  23. package/dist/esm/common/file-uploader/file-upload.js +2 -1
  24. package/dist/esm/effects/effect-configurator.js +2 -2
  25. package/dist/esm/effects/effect-manager.js +34 -19
  26. package/dist/esm/effects/effect-time-configurator.js +111 -43
  27. package/dist/esm/kepler-gl.js +6 -2
  28. package/dist/esm/modals/export-map-modal/components.js +16 -7
  29. package/dist/esm/modals/export-map-modal/export-html-map.js +6 -10
  30. package/dist/esm/modals/export-map-modal/export-json-map.js +5 -9
  31. package/dist/esm/modals/export-map-modal/export-map-modal.js +21 -14
  32. package/dist/esm/notification-panel/notification-item.js +60 -14
  33. package/dist/esm/remote-dataset-refresh-controller.js +44 -0
  34. package/dist/esm/side-panel/common/dataset-info.js +186 -9
  35. package/dist/esm/side-panel/common/dataset-refresh-progress.js +56 -0
  36. package/dist/esm/side-panel/common/dataset-title.js +77 -14
  37. package/dist/esm/side-panel/common/source-data-catalog.js +29 -6
  38. package/dist/esm/side-panel/filter-manager.js +7 -3
  39. package/dist/esm/side-panel/layer-manager.js +14 -4
  40. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +14 -4
  41. package/dist/esm/side-panel/layer-panel/dataset-section.js +7 -3
  42. package/dist/esm/side-panel/layer-panel/layer-configurator.js +49 -35
  43. package/dist/esm/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  44. package/dist/kepler-gl.d.ts +1 -0
  45. package/dist/modals/export-map-modal/components.d.ts +14 -0
  46. package/dist/remote-dataset-refresh-controller.d.ts +11 -0
  47. package/dist/side-panel/common/dataset-info.d.ts +10 -0
  48. package/dist/side-panel/common/dataset-refresh-progress.d.ts +11 -0
  49. package/dist/side-panel/common/dataset-title.d.ts +5 -0
  50. package/dist/side-panel/common/source-data-catalog.d.ts +3 -0
  51. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -0
  52. package/package.json +16 -16
@@ -1,29 +1,206 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
1
2
  import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
- var _templateObject;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
3
4
  // SPDX-License-Identifier: MIT
4
5
  // Copyright contributors to the kepler.gl project
5
6
 
6
- import React from 'react';
7
+ import React, { useCallback, useEffect, useState } from 'react';
7
8
  import styled from 'styled-components';
8
9
  import { format } from 'd3-format';
9
- import { DatasetType } from '@kepler.gl/constants';
10
+ import { useIntl } from 'react-intl';
11
+ import { DatasetType, DATASET_REFRESH_CUSTOM_VALUE, DATASET_REFRESH_DEFAULT_CUSTOM_MS, DATASET_REFRESH_INTERVAL_OPTIONS, DATASET_REFRESH_MIN_INTERVAL_MS, formatCustomRefreshSeconds, getDatasetRefreshIntervalMs, isPresetDatasetRefreshInterval, parseCustomRefreshIntervalMs } from '@kepler.gl/constants';
10
12
  import { FormattedMessage } from '@kepler.gl/localization';
13
+ import { Reset } from '../../common/icons';
14
+ import { Tooltip } from '../../common/styled-components';
15
+ import DatasetRefreshProgressIcon from './dataset-refresh-progress';
11
16
  var numFormat = format(',');
12
- var StyledDataRowCount = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 11px;\n color: ", ";\n padding-left: 19px;\n"])), function (props) {
17
+ var StyledDataRowCount = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 11px;\n color: ", ";\n padding-left: 19px;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n"])), function (props) {
13
18
  return props.theme.subtextColor;
14
19
  });
20
+ var StyledRefreshing = styled.span(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: ", ";\n"])), function (props) {
21
+ return props.theme.inputColor;
22
+ });
23
+ var StyledRefreshSettings = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n"])));
24
+ var StyledRefreshLabel = styled.label(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin: 0;\n"])));
25
+ var StyledRefreshSelect = styled.select(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n ", ";\n height: 18px;\n font-size: 11px;\n padding: 0 4px;\n width: auto;\n max-width: 96px;\n cursor: pointer;\n background-color: transparent;\n"])), function (props) {
26
+ return props.theme.input;
27
+ });
28
+ var StyledCustomSeconds = styled.input(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n ", ";\n height: 18px;\n font-size: 11px;\n padding: 0 4px;\n width: 52px;\n background-color: transparent;\n"])), function (props) {
29
+ return props.theme.input;
30
+ });
31
+ var StyledCustomUnit = styled.span(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n font-size: 11px;\n"])));
32
+ var StyledRefreshNow = styled.button(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: ", ";\n cursor: pointer;\n width: 14px;\n height: 14px;\n\n &:disabled {\n cursor: default;\n opacity: 0.5;\n }\n\n &:hover:not(:disabled) {\n color: ", ";\n }\n"])), function (props) {
33
+ return props.theme.subtextColor;
34
+ }, function (props) {
35
+ return props.theme.textColorHl;
36
+ });
15
37
  export default function DatasetInfoFactory() {
16
38
  var DatasetInfo = function DatasetInfo(_ref) {
17
- var dataset = _ref.dataset;
39
+ var _dataset$metadata, _dataset$metadata2, _dataset$metadata3;
40
+ var dataset = _ref.dataset,
41
+ showRefreshSettings = _ref.showRefreshSettings,
42
+ refreshDataset = _ref.refreshDataset,
43
+ updateDatasetProps = _ref.updateDatasetProps;
44
+ var intl = useIntl();
45
+ var isRemote = dataset.type === DatasetType.EXTERNALLY_HOSTED;
46
+ var intervalMs = getDatasetRefreshIntervalMs(dataset.metadata);
47
+ var matchingOption = DATASET_REFRESH_INTERVAL_OPTIONS.find(function (option) {
48
+ return option.value === intervalMs;
49
+ });
50
+ var isCustomInterval = intervalMs > 0 && !isPresetDatasetRefreshInterval(intervalMs);
51
+ var _useState = useState(isCustomInterval),
52
+ _useState2 = _slicedToArray(_useState, 2),
53
+ customMode = _useState2[0],
54
+ setCustomMode = _useState2[1];
55
+ var _useState3 = useState(function () {
56
+ return formatCustomRefreshSeconds(intervalMs || DATASET_REFRESH_DEFAULT_CUSTOM_MS);
57
+ }),
58
+ _useState4 = _slicedToArray(_useState3, 2),
59
+ customSeconds = _useState4[0],
60
+ setCustomSeconds = _useState4[1];
61
+ var showCustomInput = customMode || isCustomInterval;
62
+ var selectValue = showCustomInput ? DATASET_REFRESH_CUSTOM_VALUE : String(matchingOption ? matchingOption.value : 0);
63
+ useEffect(function () {
64
+ var ms = getDatasetRefreshIntervalMs(dataset.metadata);
65
+ var custom = ms > 0 && !isPresetDatasetRefreshInterval(ms);
66
+ setCustomMode(custom);
67
+ setCustomSeconds(formatCustomRefreshSeconds(ms || DATASET_REFRESH_DEFAULT_CUSTOM_MS));
68
+ }, [dataset.id, (_dataset$metadata = dataset.metadata) === null || _dataset$metadata === void 0 ? void 0 : _dataset$metadata.refreshIntervalMs]);
69
+ var spinning = ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.refreshStatus) === 'loading';
70
+ var progress = typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.refreshProgress) === 'number' ? dataset.metadata.refreshProgress : undefined;
71
+ var showPercent = spinning && typeof progress === 'number' && progress > 0 && progress < 100;
72
+ var showRefreshControls = Boolean(showRefreshSettings && isRemote && (refreshDataset || updateDatasetProps));
73
+ var onRefreshNow = useCallback(function (event) {
74
+ event.stopPropagation();
75
+ if (!spinning) {
76
+ refreshDataset === null || refreshDataset === void 0 || refreshDataset(dataset.id);
77
+ }
78
+ }, [dataset.id, refreshDataset, spinning]);
79
+ var commitCustomInterval = useCallback(function (secondsText) {
80
+ var nextMs = parseCustomRefreshIntervalMs(secondsText);
81
+ if (nextMs == null) {
82
+ setCustomSeconds(formatCustomRefreshSeconds(intervalMs || DATASET_REFRESH_DEFAULT_CUSTOM_MS));
83
+ return;
84
+ }
85
+ setCustomSeconds(formatCustomRefreshSeconds(nextMs));
86
+ if (nextMs !== intervalMs) {
87
+ updateDatasetProps === null || updateDatasetProps === void 0 || updateDatasetProps(dataset.id, {
88
+ metadata: {
89
+ refreshIntervalMs: nextMs
90
+ }
91
+ });
92
+ }
93
+ }, [dataset.id, intervalMs, updateDatasetProps]);
94
+ var onRefreshIntervalChange = useCallback(function (event) {
95
+ event.stopPropagation();
96
+ var value = event.target.value;
97
+ if (value === DATASET_REFRESH_CUSTOM_VALUE) {
98
+ var secondsText = formatCustomRefreshSeconds(intervalMs || DATASET_REFRESH_DEFAULT_CUSTOM_MS);
99
+ var nextMs = parseCustomRefreshIntervalMs(secondsText);
100
+ setCustomMode(true);
101
+ setCustomSeconds(secondsText);
102
+ if (!intervalMs && nextMs != null) {
103
+ updateDatasetProps === null || updateDatasetProps === void 0 || updateDatasetProps(dataset.id, {
104
+ metadata: {
105
+ refreshIntervalMs: nextMs
106
+ }
107
+ });
108
+ }
109
+ return;
110
+ }
111
+ setCustomMode(false);
112
+ updateDatasetProps === null || updateDatasetProps === void 0 || updateDatasetProps(dataset.id, {
113
+ metadata: {
114
+ refreshIntervalMs: Number(value) || 0
115
+ }
116
+ });
117
+ }, [dataset.id, intervalMs, updateDatasetProps]);
18
118
  return /*#__PURE__*/React.createElement(StyledDataRowCount, {
19
- className: "source-data-rows"
119
+ className: "source-data-rows",
120
+ "aria-busy": spinning
20
121
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
21
- id: dataset.type === DatasetType.VECTOR_TILE ? 'datasetInfo.vectorTile' : dataset.type === DatasetType.RASTER_TILE ? 'datasetInfo.rasterTile' : dataset.type === DatasetType.WMS_TILE ? 'datasetInfo.wmsTile' : dataset.type === DatasetType.TILE_3D ? 'datasetInfo.tile3d' : dataset.type === DatasetType.BITMAP ? 'datasetInfo.bitmap' : dataset.type === DatasetType.EXTERNALLY_HOSTED ? 'datasetInfo.remoteFile' : 'datasetInfo.rowCount',
122
+ id: dataset.type === DatasetType.VECTOR_TILE ? 'datasetInfo.vectorTile' : dataset.type === DatasetType.RASTER_TILE ? 'datasetInfo.rasterTile' : dataset.type === DatasetType.WMS_TILE ? 'datasetInfo.wmsTile' : dataset.type === DatasetType.TILE_3D ? 'datasetInfo.tile3d' : dataset.type === DatasetType.BITMAP ? 'datasetInfo.bitmap' : isRemote ? 'datasetInfo.remoteFile' : 'datasetInfo.rowCount',
22
123
  values: {
23
124
  rowCount: numFormat(dataset.dataContainer.numRows())
24
125
  }
25
- }));
126
+ }), spinning ? /*#__PURE__*/React.createElement(StyledRefreshing, {
127
+ className: "dataset-refresh-status"
128
+ }, /*#__PURE__*/React.createElement(DatasetRefreshProgressIcon, {
129
+ percent: progress,
130
+ size: 12
131
+ }), /*#__PURE__*/React.createElement(FormattedMessage, {
132
+ id: showPercent ? 'datasetInfo.refreshingPercent' : 'datasetInfo.refreshing',
133
+ values: {
134
+ percent: Math.round(progress !== null && progress !== void 0 ? progress : 0)
135
+ }
136
+ })) : null, showRefreshControls ? /*#__PURE__*/React.createElement(StyledRefreshSettings, {
137
+ className: "dataset-refresh-settings",
138
+ onClick: function onClick(event) {
139
+ return event.stopPropagation();
140
+ }
141
+ }, updateDatasetProps ? /*#__PURE__*/React.createElement(StyledRefreshLabel, null, /*#__PURE__*/React.createElement(FormattedMessage, {
142
+ id: "datasetInfo.refreshInterval"
143
+ }), /*#__PURE__*/React.createElement(StyledRefreshSelect, {
144
+ "aria-label": intl.formatMessage({
145
+ id: 'datasetInfo.refreshInterval'
146
+ }),
147
+ value: selectValue,
148
+ onChange: onRefreshIntervalChange
149
+ }, DATASET_REFRESH_INTERVAL_OPTIONS.map(function (option) {
150
+ return /*#__PURE__*/React.createElement("option", {
151
+ key: option.value,
152
+ value: String(option.value)
153
+ }, intl.formatMessage({
154
+ id: option.labelId
155
+ }));
156
+ }), /*#__PURE__*/React.createElement("option", {
157
+ value: DATASET_REFRESH_CUSTOM_VALUE
158
+ }, intl.formatMessage({
159
+ id: 'datasetTitle.refreshCustom'
160
+ }))), showCustomInput ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledCustomSeconds, {
161
+ type: "number",
162
+ min: DATASET_REFRESH_MIN_INTERVAL_MS / 1000,
163
+ step: 0.1,
164
+ inputMode: "decimal",
165
+ className: "dataset-refresh-custom-seconds",
166
+ "aria-label": intl.formatMessage({
167
+ id: 'datasetInfo.refreshCustomSeconds'
168
+ }),
169
+ value: customSeconds,
170
+ onChange: function onChange(event) {
171
+ event.stopPropagation();
172
+ setCustomSeconds(event.target.value);
173
+ },
174
+ onBlur: function onBlur(event) {
175
+ return commitCustomInterval(event.target.value);
176
+ },
177
+ onKeyDown: function onKeyDown(event) {
178
+ event.stopPropagation();
179
+ if (event.key === 'Enter') {
180
+ event.preventDefault();
181
+ commitCustomInterval(customSeconds);
182
+ event.target.blur();
183
+ }
184
+ }
185
+ }), /*#__PURE__*/React.createElement(StyledCustomUnit, null, "s")) : null) : null, refreshDataset ? /*#__PURE__*/React.createElement(StyledRefreshNow, {
186
+ type: "button",
187
+ className: "dataset-refresh-now",
188
+ "aria-label": intl.formatMessage({
189
+ id: 'datasetTitle.refreshDataset'
190
+ }),
191
+ "data-tip": true,
192
+ "data-for": "refresh-now-".concat(dataset.id),
193
+ disabled: spinning,
194
+ onClick: onRefreshNow
195
+ }, /*#__PURE__*/React.createElement(Reset, {
196
+ height: "14px"
197
+ }), /*#__PURE__*/React.createElement(Tooltip, {
198
+ id: "refresh-now-".concat(dataset.id),
199
+ effect: "solid"
200
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(FormattedMessage, {
201
+ id: 'datasetTitle.refreshDataset'
202
+ })))) : null) : null);
26
203
  };
27
204
  return DatasetInfo;
28
205
  }
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInN0eWxlZCIsImZvcm1hdCIsIkRhdGFzZXRUeXBlIiwiRm9ybWF0dGVkTWVzc2FnZSIsIm51bUZvcm1hdCIsIlN0eWxlZERhdGFSb3dDb3VudCIsImRpdiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJwcm9wcyIsInRoZW1lIiwic3VidGV4dENvbG9yIiwiRGF0YXNldEluZm9GYWN0b3J5IiwiRGF0YXNldEluZm8iLCJfcmVmIiwiZGF0YXNldCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJpZCIsInR5cGUiLCJWRUNUT1JfVElMRSIsIlJBU1RFUl9USUxFIiwiV01TX1RJTEUiLCJUSUxFXzNEIiwiQklUTUFQIiwiRVhURVJOQUxMWV9IT1NURUQiLCJ2YWx1ZXMiLCJyb3dDb3VudCIsImRhdGFDb250YWluZXIiLCJudW1Sb3dzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvY29tbW9uL2RhdGFzZXQtaW5mby50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtmb3JtYXR9IGZyb20gJ2QzLWZvcm1hdCc7XG5cbmltcG9ydCB7RGF0YXNldFR5cGV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuY29uc3QgbnVtRm9ybWF0ID0gZm9ybWF0KCcsJyk7XG5cbnR5cGUgTWluaURhdGFzZXQgPSB7XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gIHR5cGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhc2V0SW5mb1Byb3BzID0ge1xuICBkYXRhc2V0OiBNaW5pRGF0YXNldDtcbn07XG5cbmNvbnN0IFN0eWxlZERhdGFSb3dDb3VudCA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcbiAgcGFkZGluZy1sZWZ0OiAxOXB4O1xuYDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YXNldEluZm9GYWN0b3J5KCkge1xuICBjb25zdCBEYXRhc2V0SW5mbzogUmVhY3QuRkM8RGF0YXNldEluZm9Qcm9wcz4gPSAoe2RhdGFzZXR9OiBEYXRhc2V0SW5mb1Byb3BzKSA9PiAoXG4gICAgPFN0eWxlZERhdGFSb3dDb3VudCBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS1yb3dzXCI+XG4gICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICBpZD17XG4gICAgICAgICAgZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRVxuICAgICAgICAgICAgPyAnZGF0YXNldEluZm8udmVjdG9yVGlsZSdcbiAgICAgICAgICAgIDogZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5SQVNURVJfVElMRVxuICAgICAgICAgICAgPyAnZGF0YXNldEluZm8ucmFzdGVyVGlsZSdcbiAgICAgICAgICAgIDogZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5XTVNfVElMRVxuICAgICAgICAgICAgPyAnZGF0YXNldEluZm8ud21zVGlsZSdcbiAgICAgICAgICAgIDogZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5USUxFXzNEXG4gICAgICAgICAgICA/ICdkYXRhc2V0SW5mby50aWxlM2QnXG4gICAgICAgICAgICA6IGRhdGFzZXQudHlwZSA9PT0gRGF0YXNldFR5cGUuQklUTUFQXG4gICAgICAgICAgICA/ICdkYXRhc2V0SW5mby5iaXRtYXAnXG4gICAgICAgICAgICA6IGRhdGFzZXQudHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURURcbiAgICAgICAgICAgID8gJ2RhdGFzZXRJbmZvLnJlbW90ZUZpbGUnXG4gICAgICAgICAgICA6ICdkYXRhc2V0SW5mby5yb3dDb3VudCdcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXM9e3tyb3dDb3VudDogbnVtRm9ybWF0KGRhdGFzZXQuZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpfX1cbiAgICAgIC8+XG4gICAgPC9TdHlsZWREYXRhUm93Q291bnQ+XG4gICk7XG5cbiAgcmV0dXJuIERhdGFzZXRJbmZvO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsS0FBSyxNQUFNLE9BQU87QUFDekIsT0FBT0MsTUFBTSxNQUFNLG1CQUFtQjtBQUN0QyxTQUFRQyxNQUFNLFFBQU8sV0FBVztBQUVoQyxTQUFRQyxXQUFXLFFBQU8sc0JBQXNCO0FBQ2hELFNBQVFDLGdCQUFnQixRQUFPLHlCQUF5QjtBQUd4RCxJQUFNQyxTQUFTLEdBQUdILE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFXN0IsSUFBTUksa0JBQWtCLEdBQUdMLE1BQU0sQ0FBQ00sR0FBRyxDQUFBQyxlQUFBLEtBQUFBLGVBQUEsR0FBQUMsc0JBQUEsc0VBRTFCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsWUFBWTtBQUFBLEVBRTNDO0FBRUQsZUFBZSxTQUFTQyxrQkFBa0JBLENBQUEsRUFBRztFQUMzQyxJQUFNQyxXQUF1QyxHQUFHLFNBQTFDQSxXQUF1Q0EsQ0FBQUMsSUFBQTtJQUFBLElBQUtDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQUEsb0JBQ3ZEaEIsS0FBQSxDQUFBaUIsYUFBQSxDQUFDWCxrQkFBa0I7TUFBQ1ksU0FBUyxFQUFDO0lBQWtCLGdCQUM5Q2xCLEtBQUEsQ0FBQWlCLGFBQUEsQ0FBQ2IsZ0JBQWdCO01BQ2ZlLEVBQUUsRUFDQUgsT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUNrQixXQUFXLEdBQ3BDLHdCQUF3QixHQUN4QkwsT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUNtQixXQUFXLEdBQ3hDLHdCQUF3QixHQUN4Qk4sT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUNvQixRQUFRLEdBQ3JDLHFCQUFxQixHQUNyQlAsT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUNxQixPQUFPLEdBQ3BDLG9CQUFvQixHQUNwQlIsT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUNzQixNQUFNLEdBQ25DLG9CQUFvQixHQUNwQlQsT0FBTyxDQUFDSSxJQUFJLEtBQUtqQixXQUFXLENBQUN1QixpQkFBaUIsR0FDOUMsd0JBQXdCLEdBQ3hCLHNCQUNMO01BQ0RDLE1BQU0sRUFBRTtRQUFDQyxRQUFRLEVBQUV2QixTQUFTLENBQUNXLE9BQU8sQ0FBQ2EsYUFBYSxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUFDO0lBQUUsQ0FDaEUsQ0FDaUIsQ0FBQztFQUFBLENBQ3RCO0VBRUQsT0FBT2hCLFdBQVc7QUFDcEIiLCJpZ25vcmVMaXN0IjpbXX0=
206
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJzdHlsZWQiLCJmb3JtYXQiLCJ1c2VJbnRsIiwiRGF0YXNldFR5cGUiLCJEQVRBU0VUX1JFRlJFU0hfQ1VTVE9NX1ZBTFVFIiwiREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TIiwiREFUQVNFVF9SRUZSRVNIX0lOVEVSVkFMX09QVElPTlMiLCJEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TIiwiZm9ybWF0Q3VzdG9tUmVmcmVzaFNlY29uZHMiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJpc1ByZXNldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWwiLCJwYXJzZUN1c3RvbVJlZnJlc2hJbnRlcnZhbE1zIiwiRm9ybWF0dGVkTWVzc2FnZSIsIlJlc2V0IiwiVG9vbHRpcCIsIkRhdGFzZXRSZWZyZXNoUHJvZ3Jlc3NJY29uIiwibnVtRm9ybWF0IiwiU3R5bGVkRGF0YVJvd0NvdW50IiwiZGl2IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsInByb3BzIiwidGhlbWUiLCJzdWJ0ZXh0Q29sb3IiLCJTdHlsZWRSZWZyZXNoaW5nIiwic3BhbiIsIl90ZW1wbGF0ZU9iamVjdDIiLCJpbnB1dENvbG9yIiwiU3R5bGVkUmVmcmVzaFNldHRpbmdzIiwiX3RlbXBsYXRlT2JqZWN0MyIsIlN0eWxlZFJlZnJlc2hMYWJlbCIsImxhYmVsIiwiX3RlbXBsYXRlT2JqZWN0NCIsIlN0eWxlZFJlZnJlc2hTZWxlY3QiLCJzZWxlY3QiLCJfdGVtcGxhdGVPYmplY3Q1IiwiaW5wdXQiLCJTdHlsZWRDdXN0b21TZWNvbmRzIiwiX3RlbXBsYXRlT2JqZWN0NiIsIlN0eWxlZEN1c3RvbVVuaXQiLCJfdGVtcGxhdGVPYmplY3Q3IiwiU3R5bGVkUmVmcmVzaE5vdyIsImJ1dHRvbiIsIl90ZW1wbGF0ZU9iamVjdDgiLCJ0ZXh0Q29sb3JIbCIsIkRhdGFzZXRJbmZvRmFjdG9yeSIsIkRhdGFzZXRJbmZvIiwiX3JlZiIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiZGF0YXNldCIsInNob3dSZWZyZXNoU2V0dGluZ3MiLCJyZWZyZXNoRGF0YXNldCIsInVwZGF0ZURhdGFzZXRQcm9wcyIsImludGwiLCJpc1JlbW90ZSIsInR5cGUiLCJFWFRFUk5BTExZX0hPU1RFRCIsImludGVydmFsTXMiLCJtZXRhZGF0YSIsIm1hdGNoaW5nT3B0aW9uIiwiZmluZCIsIm9wdGlvbiIsInZhbHVlIiwiaXNDdXN0b21JbnRlcnZhbCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImN1c3RvbU1vZGUiLCJzZXRDdXN0b21Nb2RlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjdXN0b21TZWNvbmRzIiwic2V0Q3VzdG9tU2Vjb25kcyIsInNob3dDdXN0b21JbnB1dCIsInNlbGVjdFZhbHVlIiwiU3RyaW5nIiwibXMiLCJjdXN0b20iLCJpZCIsInJlZnJlc2hJbnRlcnZhbE1zIiwic3Bpbm5pbmciLCJyZWZyZXNoU3RhdHVzIiwicHJvZ3Jlc3MiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJ1bmRlZmluZWQiLCJzaG93UGVyY2VudCIsInNob3dSZWZyZXNoQ29udHJvbHMiLCJCb29sZWFuIiwib25SZWZyZXNoTm93IiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJjb21taXRDdXN0b21JbnRlcnZhbCIsInNlY29uZHNUZXh0IiwibmV4dE1zIiwib25SZWZyZXNoSW50ZXJ2YWxDaGFuZ2UiLCJ0YXJnZXQiLCJOdW1iZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiVkVDVE9SX1RJTEUiLCJSQVNURVJfVElMRSIsIldNU19USUxFIiwiVElMRV8zRCIsIkJJVE1BUCIsInZhbHVlcyIsInJvd0NvdW50IiwiZGF0YUNvbnRhaW5lciIsIm51bVJvd3MiLCJwZXJjZW50Iiwic2l6ZSIsIk1hdGgiLCJyb3VuZCIsIm9uQ2xpY2siLCJmb3JtYXRNZXNzYWdlIiwib25DaGFuZ2UiLCJtYXAiLCJrZXkiLCJsYWJlbElkIiwiRnJhZ21lbnQiLCJtaW4iLCJzdGVwIiwiaW5wdXRNb2RlIiwib25CbHVyIiwib25LZXlEb3duIiwicHJldmVudERlZmF1bHQiLCJibHVyIiwiY29uY2F0IiwiZGlzYWJsZWQiLCJoZWlnaHQiLCJlZmZlY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2lkZS1wYW5lbC9jb21tb24vZGF0YXNldC1pbmZvLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2Zvcm1hdH0gZnJvbSAnZDMtZm9ybWF0JztcbmltcG9ydCB7dXNlSW50bH0gZnJvbSAncmVhY3QtaW50bCc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRUeXBlLFxuICBEQVRBU0VUX1JFRlJFU0hfQ1VTVE9NX1ZBTFVFLFxuICBEQVRBU0VUX1JFRlJFU0hfREVGQVVMVF9DVVNUT01fTVMsXG4gIERBVEFTRVRfUkVGUkVTSF9JTlRFUlZBTF9PUFRJT05TLFxuICBEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TLFxuICBmb3JtYXRDdXN0b21SZWZyZXNoU2Vjb25kcyxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBpc1ByZXNldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWwsXG4gIHBhcnNlQ3VzdG9tUmVmcmVzaEludGVydmFsTXNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtWaXNTdGF0ZUFjdGlvbnMsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1Jlc2V0fSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtUb29sdGlwfSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IERhdGFzZXRSZWZyZXNoUHJvZ3Jlc3NJY29uIGZyb20gJy4vZGF0YXNldC1yZWZyZXNoLXByb2dyZXNzJztcblxuY29uc3QgbnVtRm9ybWF0ID0gZm9ybWF0KCcsJyk7XG5cbnR5cGUgTWluaURhdGFzZXQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzoge1xuICAgIHJlZnJlc2hJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAgIHJlZnJlc2hTdGF0dXM/OiBzdHJpbmc7XG4gICAgcmVmcmVzaFByb2dyZXNzPzogbnVtYmVyO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YXNldEluZm9Qcm9wcyA9IHtcbiAgZGF0YXNldDogTWluaURhdGFzZXQ7XG4gIHNob3dSZWZyZXNoU2V0dGluZ3M/OiBib29sZWFuO1xuICByZWZyZXNoRGF0YXNldD86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5yZWZyZXNoRGF0YXNldD47XG4gIHVwZGF0ZURhdGFzZXRQcm9wcz86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy51cGRhdGVEYXRhc2V0UHJvcHM+O1xufTtcblxuY29uc3QgU3R5bGVkRGF0YVJvd0NvdW50ID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuICBwYWRkaW5nLWxlZnQ6IDE5cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG5gO1xuXG5jb25zdCBTdHlsZWRSZWZyZXNoaW5nID0gc3R5bGVkLnNwYW5gXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRDb2xvcn07XG5gO1xuXG5jb25zdCBTdHlsZWRSZWZyZXNoU2V0dGluZ3MgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbmA7XG5cbmNvbnN0IFN0eWxlZFJlZnJlc2hMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICBtYXJnaW46IDA7XG5gO1xuXG5jb25zdCBTdHlsZWRSZWZyZXNoU2VsZWN0ID0gc3R5bGVkLnNlbGVjdGBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dH07XG4gIGhlaWdodDogMThweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBwYWRkaW5nOiAwIDRweDtcbiAgd2lkdGg6IGF1dG87XG4gIG1heC13aWR0aDogOTZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbmA7XG5cbmNvbnN0IFN0eWxlZEN1c3RvbVNlY29uZHMgPSBzdHlsZWQuaW5wdXRgXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXR9O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgcGFkZGluZzogMCA0cHg7XG4gIHdpZHRoOiA1MnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbmA7XG5cbmNvbnN0IFN0eWxlZEN1c3RvbVVuaXQgPSBzdHlsZWQuc3BhbmBcbiAgZm9udC1zaXplOiAxMXB4O1xuYDtcblxuY29uc3QgU3R5bGVkUmVmcmVzaE5vdyA9IHN0eWxlZC5idXR0b25gXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuXG4gICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgfVxuYDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YXNldEluZm9GYWN0b3J5KCkge1xuICBjb25zdCBEYXRhc2V0SW5mbzogUmVhY3QuRkM8RGF0YXNldEluZm9Qcm9wcz4gPSAoe1xuICAgIGRhdGFzZXQsXG4gICAgc2hvd1JlZnJlc2hTZXR0aW5ncyxcbiAgICByZWZyZXNoRGF0YXNldCxcbiAgICB1cGRhdGVEYXRhc2V0UHJvcHNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gICAgY29uc3QgaXNSZW1vdGUgPSBkYXRhc2V0LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEO1xuICAgIGNvbnN0IGludGVydmFsTXMgPSBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSk7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSBEQVRBU0VUX1JFRlJFU0hfSU5URVJWQUxfT1BUSU9OUy5maW5kKFxuICAgICAgb3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gaW50ZXJ2YWxNc1xuICAgICk7XG4gICAgY29uc3QgaXNDdXN0b21JbnRlcnZhbCA9IGludGVydmFsTXMgPiAwICYmICFpc1ByZXNldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWwoaW50ZXJ2YWxNcyk7XG4gICAgY29uc3QgW2N1c3RvbU1vZGUsIHNldEN1c3RvbU1vZGVdID0gdXNlU3RhdGUoaXNDdXN0b21JbnRlcnZhbCk7XG4gICAgY29uc3QgW2N1c3RvbVNlY29uZHMsIHNldEN1c3RvbVNlY29uZHNdID0gdXNlU3RhdGUoKCkgPT5cbiAgICAgIGZvcm1hdEN1c3RvbVJlZnJlc2hTZWNvbmRzKGludGVydmFsTXMgfHwgREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TKVxuICAgICk7XG4gICAgY29uc3Qgc2hvd0N1c3RvbUlucHV0ID0gY3VzdG9tTW9kZSB8fCBpc0N1c3RvbUludGVydmFsO1xuICAgIGNvbnN0IHNlbGVjdFZhbHVlID0gc2hvd0N1c3RvbUlucHV0XG4gICAgICA/IERBVEFTRVRfUkVGUkVTSF9DVVNUT01fVkFMVUVcbiAgICAgIDogU3RyaW5nKG1hdGNoaW5nT3B0aW9uID8gbWF0Y2hpbmdPcHRpb24udmFsdWUgOiAwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBtcyA9IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKTtcbiAgICAgIGNvbnN0IGN1c3RvbSA9IG1zID4gMCAmJiAhaXNQcmVzZXREYXRhc2V0UmVmcmVzaEludGVydmFsKG1zKTtcbiAgICAgIHNldEN1c3RvbU1vZGUoY3VzdG9tKTtcbiAgICAgIHNldEN1c3RvbVNlY29uZHMoZm9ybWF0Q3VzdG9tUmVmcmVzaFNlY29uZHMobXMgfHwgREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TKSk7XG4gICAgfSwgW2RhdGFzZXQuaWQsIGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hJbnRlcnZhbE1zXSk7XG5cbiAgICBjb25zdCBzcGlubmluZyA9IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICBjb25zdCBwcm9ncmVzcyA9XG4gICAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSAnbnVtYmVyJ1xuICAgICAgICA/IGRhdGFzZXQubWV0YWRhdGEucmVmcmVzaFByb2dyZXNzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNob3dQZXJjZW50ID0gc3Bpbm5pbmcgJiYgdHlwZW9mIHByb2dyZXNzID09PSAnbnVtYmVyJyAmJiBwcm9ncmVzcyA+IDAgJiYgcHJvZ3Jlc3MgPCAxMDA7XG4gICAgY29uc3Qgc2hvd1JlZnJlc2hDb250cm9scyA9IEJvb2xlYW4oXG4gICAgICBzaG93UmVmcmVzaFNldHRpbmdzICYmIGlzUmVtb3RlICYmIChyZWZyZXNoRGF0YXNldCB8fCB1cGRhdGVEYXRhc2V0UHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IG9uUmVmcmVzaE5vdyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoIXNwaW5uaW5nKSB7XG4gICAgICAgICAgcmVmcmVzaERhdGFzZXQ/LihkYXRhc2V0LmlkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtkYXRhc2V0LmlkLCByZWZyZXNoRGF0YXNldCwgc3Bpbm5pbmddXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbW1pdEN1c3RvbUludGVydmFsID0gdXNlQ2FsbGJhY2soXG4gICAgICAoc2Vjb25kc1RleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBuZXh0TXMgPSBwYXJzZUN1c3RvbVJlZnJlc2hJbnRlcnZhbE1zKHNlY29uZHNUZXh0KTtcbiAgICAgICAgaWYgKG5leHRNcyA9PSBudWxsKSB7XG4gICAgICAgICAgc2V0Q3VzdG9tU2Vjb25kcyhcbiAgICAgICAgICAgIGZvcm1hdEN1c3RvbVJlZnJlc2hTZWNvbmRzKGludGVydmFsTXMgfHwgREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEN1c3RvbVNlY29uZHMoZm9ybWF0Q3VzdG9tUmVmcmVzaFNlY29uZHMobmV4dE1zKSk7XG4gICAgICAgIGlmIChuZXh0TXMgIT09IGludGVydmFsTXMpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhc2V0UHJvcHM/LihkYXRhc2V0LmlkLCB7bWV0YWRhdGE6IHtyZWZyZXNoSW50ZXJ2YWxNczogbmV4dE1zfX0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2RhdGFzZXQuaWQsIGludGVydmFsTXMsIHVwZGF0ZURhdGFzZXRQcm9wc11cbiAgICApO1xuXG4gICAgY29uc3Qgb25SZWZyZXNoSW50ZXJ2YWxDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFNlbGVjdEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBEQVRBU0VUX1JFRlJFU0hfQ1VTVE9NX1ZBTFVFKSB7XG4gICAgICAgICAgY29uc3Qgc2Vjb25kc1RleHQgPSBmb3JtYXRDdXN0b21SZWZyZXNoU2Vjb25kcyhcbiAgICAgICAgICAgIGludGVydmFsTXMgfHwgREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBuZXh0TXMgPSBwYXJzZUN1c3RvbVJlZnJlc2hJbnRlcnZhbE1zKHNlY29uZHNUZXh0KTtcbiAgICAgICAgICBzZXRDdXN0b21Nb2RlKHRydWUpO1xuICAgICAgICAgIHNldEN1c3RvbVNlY29uZHMoc2Vjb25kc1RleHQpO1xuICAgICAgICAgIGlmICghaW50ZXJ2YWxNcyAmJiBuZXh0TXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlRGF0YXNldFByb3BzPy4oZGF0YXNldC5pZCwge1xuICAgICAgICAgICAgICBtZXRhZGF0YToge3JlZnJlc2hJbnRlcnZhbE1zOiBuZXh0TXN9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEN1c3RvbU1vZGUoZmFsc2UpO1xuICAgICAgICB1cGRhdGVEYXRhc2V0UHJvcHM/LihkYXRhc2V0LmlkLCB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtyZWZyZXNoSW50ZXJ2YWxNczogTnVtYmVyKHZhbHVlKSB8fCAwfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBbZGF0YXNldC5pZCwgaW50ZXJ2YWxNcywgdXBkYXRlRGF0YXNldFByb3BzXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZERhdGFSb3dDb3VudCBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS1yb3dzXCIgYXJpYS1idXN5PXtzcGlubmluZ30+XG4gICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgaWQ9e1xuICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRVxuICAgICAgICAgICAgICA/ICdkYXRhc2V0SW5mby52ZWN0b3JUaWxlJ1xuICAgICAgICAgICAgICA6IGRhdGFzZXQudHlwZSA9PT0gRGF0YXNldFR5cGUuUkFTVEVSX1RJTEVcbiAgICAgICAgICAgICAgPyAnZGF0YXNldEluZm8ucmFzdGVyVGlsZSdcbiAgICAgICAgICAgICAgOiBkYXRhc2V0LnR5cGUgPT09IERhdGFzZXRUeXBlLldNU19USUxFXG4gICAgICAgICAgICAgID8gJ2RhdGFzZXRJbmZvLndtc1RpbGUnXG4gICAgICAgICAgICAgIDogZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5USUxFXzNEXG4gICAgICAgICAgICAgID8gJ2RhdGFzZXRJbmZvLnRpbGUzZCdcbiAgICAgICAgICAgICAgOiBkYXRhc2V0LnR5cGUgPT09IERhdGFzZXRUeXBlLkJJVE1BUFxuICAgICAgICAgICAgICA/ICdkYXRhc2V0SW5mby5iaXRtYXAnXG4gICAgICAgICAgICAgIDogaXNSZW1vdGVcbiAgICAgICAgICAgICAgPyAnZGF0YXNldEluZm8ucmVtb3RlRmlsZSdcbiAgICAgICAgICAgICAgOiAnZGF0YXNldEluZm8ucm93Q291bnQnXG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcz17e3Jvd0NvdW50OiBudW1Gb3JtYXQoZGF0YXNldC5kYXRhQ29udGFpbmVyLm51bVJvd3MoKSl9fVxuICAgICAgICAvPlxuICAgICAgICB7c3Bpbm5pbmcgPyAoXG4gICAgICAgICAgPFN0eWxlZFJlZnJlc2hpbmcgY2xhc3NOYW1lPVwiZGF0YXNldC1yZWZyZXNoLXN0YXR1c1wiPlxuICAgICAgICAgICAgPERhdGFzZXRSZWZyZXNoUHJvZ3Jlc3NJY29uIHBlcmNlbnQ9e3Byb2dyZXNzfSBzaXplPXsxMn0gLz5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgIGlkPXtzaG93UGVyY2VudCA/ICdkYXRhc2V0SW5mby5yZWZyZXNoaW5nUGVyY2VudCcgOiAnZGF0YXNldEluZm8ucmVmcmVzaGluZyd9XG4gICAgICAgICAgICAgIHZhbHVlcz17e3BlcmNlbnQ6IE1hdGgucm91bmQocHJvZ3Jlc3MgPz8gMCl9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1N0eWxlZFJlZnJlc2hpbmc+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7c2hvd1JlZnJlc2hDb250cm9scyA/IChcbiAgICAgICAgICA8U3R5bGVkUmVmcmVzaFNldHRpbmdzXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhc2V0LXJlZnJlc2gtc2V0dGluZ3NcIlxuICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3VwZGF0ZURhdGFzZXRQcm9wcyA/IChcbiAgICAgICAgICAgICAgPFN0eWxlZFJlZnJlc2hMYWJlbD5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImRhdGFzZXRJbmZvLnJlZnJlc2hJbnRlcnZhbFwiIC8+XG4gICAgICAgICAgICAgICAgPFN0eWxlZFJlZnJlc2hTZWxlY3RcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdkYXRhc2V0SW5mby5yZWZyZXNoSW50ZXJ2YWwnfSl9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0VmFsdWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25SZWZyZXNoSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge0RBVEFTRVRfUkVGUkVTSF9JTlRFUlZBTF9PUFRJT05TLm1hcChvcHRpb24gPT4gKFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSB2YWx1ZT17U3RyaW5nKG9wdGlvbi52YWx1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBvcHRpb24ubGFiZWxJZH0pfVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT17REFUQVNFVF9SRUZSRVNIX0NVU1RPTV9WQUxVRX0+XG4gICAgICAgICAgICAgICAgICAgIHtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnZGF0YXNldFRpdGxlLnJlZnJlc2hDdXN0b20nfSl9XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZFJlZnJlc2hTZWxlY3Q+XG4gICAgICAgICAgICAgICAge3Nob3dDdXN0b21JbnB1dCA/IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDdXN0b21TZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPXtEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TIC8gMTAwMH1cbiAgICAgICAgICAgICAgICAgICAgICBzdGVwPXswLjF9XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXRNb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YXNldC1yZWZyZXNoLWN1c3RvbS1zZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnZGF0YXNldEluZm8ucmVmcmVzaEN1c3RvbVNlY29uZHMnfSl9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2N1c3RvbVNlY29uZHN9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VzdG9tU2Vjb25kcyhldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25CbHVyPXtldmVudCA9PiBjb21taXRDdXN0b21JbnRlcnZhbChldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEN1c3RvbUludGVydmFsKGN1c3RvbVNlY29uZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ3VzdG9tVW5pdD5zPC9TdHlsZWRDdXN0b21Vbml0PlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvU3R5bGVkUmVmcmVzaExhYmVsPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7cmVmcmVzaERhdGFzZXQgPyAoXG4gICAgICAgICAgICAgIDxTdHlsZWRSZWZyZXNoTm93XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YXNldC1yZWZyZXNoLW5vd1wiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoRGF0YXNldCd9KX1cbiAgICAgICAgICAgICAgICBkYXRhLXRpcFxuICAgICAgICAgICAgICAgIGRhdGEtZm9yPXtgcmVmcmVzaC1ub3ctJHtkYXRhc2V0LmlkfWB9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NwaW5uaW5nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uUmVmcmVzaE5vd31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSZXNldCBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD17YHJlZnJlc2gtbm93LSR7ZGF0YXNldC5pZH1gfSBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZGF0YXNldFRpdGxlLnJlZnJlc2hEYXRhc2V0J30gLz5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvU3R5bGVkUmVmcmVzaE5vdz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU3R5bGVkUmVmcmVzaFNldHRpbmdzPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU3R5bGVkRGF0YVJvd0NvdW50PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIERhdGFzZXRJbmZvO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLEtBQUssSUFBR0MsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBTyxPQUFPO0FBQzdELE9BQU9DLE1BQU0sTUFBTSxtQkFBbUI7QUFDdEMsU0FBUUMsTUFBTSxRQUFPLFdBQVc7QUFDaEMsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFFbEMsU0FDRUMsV0FBVyxFQUNYQyw0QkFBNEIsRUFDNUJDLGlDQUFpQyxFQUNqQ0MsZ0NBQWdDLEVBQ2hDQywrQkFBK0IsRUFDL0JDLDBCQUEwQixFQUMxQkMsMkJBQTJCLEVBQzNCQyw4QkFBOEIsRUFDOUJDLDRC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
@@ -0,0 +1,56 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
+ var _templateObject, _templateObject2, _templateObject3;
3
+ // SPDX-License-Identifier: MIT
4
+ // Copyright contributors to the kepler.gl project
5
+
6
+ import React from 'react';
7
+ import styled, { css, keyframes } from 'styled-components';
8
+ var spin = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n to {\n transform: rotate(360deg);\n }\n"])));
9
+ var StyledProgress = styled.svg(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: block;\n flex-shrink: 0;\n ", "\n"])), function (props) {
10
+ return props.$indeterminate && css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n animation: ", " 0.8s linear infinite;\n "])), spin);
11
+ });
12
+ /**
13
+ * Circular refresh indicator: spinning arc while size is unknown, filling ring
14
+ * when Content-Length is available.
15
+ */
16
+ export default function DatasetRefreshProgressIcon(_ref) {
17
+ var percent = _ref.percent,
18
+ _ref$size = _ref.size,
19
+ size = _ref$size === void 0 ? 14 : _ref$size;
20
+ var strokeWidth = 2;
21
+ var radius = (size - strokeWidth) / 2;
22
+ var circumference = 2 * Math.PI * radius;
23
+ var determinate = typeof percent === 'number' && percent > 0;
24
+ var clamped = determinate ? Math.max(0, Math.min(100, percent)) : 0;
25
+ var dashOffset = determinate ? circumference * (1 - clamped / 100) : circumference * 0.75;
26
+ return /*#__PURE__*/React.createElement(StyledProgress, {
27
+ $indeterminate: !determinate,
28
+ width: size,
29
+ height: size,
30
+ viewBox: "0 0 ".concat(size, " ").concat(size),
31
+ role: "progressbar",
32
+ "aria-valuemin": 0,
33
+ "aria-valuemax": 100,
34
+ "aria-valuenow": determinate ? Math.round(clamped) : undefined
35
+ }, /*#__PURE__*/React.createElement("circle", {
36
+ cx: size / 2,
37
+ cy: size / 2,
38
+ r: radius,
39
+ fill: "none",
40
+ stroke: "currentColor",
41
+ strokeWidth: strokeWidth,
42
+ opacity: 0.25
43
+ }), /*#__PURE__*/React.createElement("circle", {
44
+ cx: size / 2,
45
+ cy: size / 2,
46
+ r: radius,
47
+ fill: "none",
48
+ stroke: "currentColor",
49
+ strokeWidth: strokeWidth,
50
+ strokeLinecap: "round",
51
+ strokeDasharray: circumference,
52
+ strokeDashoffset: dashOffset,
53
+ transform: "rotate(-90 ".concat(size / 2, " ").concat(size / 2, ")")
54
+ }));
55
+ }
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInN0eWxlZCIsImNzcyIsImtleWZyYW1lcyIsInNwaW4iLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwiU3R5bGVkUHJvZ3Jlc3MiLCJzdmciLCJfdGVtcGxhdGVPYmplY3QyIiwicHJvcHMiLCIkaW5kZXRlcm1pbmF0ZSIsIl90ZW1wbGF0ZU9iamVjdDMiLCJEYXRhc2V0UmVmcmVzaFByb2dyZXNzSWNvbiIsIl9yZWYiLCJwZXJjZW50IiwiX3JlZiRzaXplIiwic2l6ZSIsInN0cm9rZVdpZHRoIiwicmFkaXVzIiwiY2lyY3VtZmVyZW5jZSIsIk1hdGgiLCJQSSIsImRldGVybWluYXRlIiwiY2xhbXBlZCIsIm1heCIsIm1pbiIsImRhc2hPZmZzZXQiLCJjcmVhdGVFbGVtZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiY29uY2F0Iiwicm9sZSIsInJvdW5kIiwidW5kZWZpbmVkIiwiY3giLCJjeSIsInIiLCJmaWxsIiwic3Ryb2tlIiwib3BhY2l0eSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0IiwidHJhbnNmb3JtIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvY29tbW9uL2RhdGFzZXQtcmVmcmVzaC1wcm9ncmVzcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHtjc3MsIGtleWZyYW1lc30gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5jb25zdCBzcGluID0ga2V5ZnJhbWVzYFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkUHJvZ3Jlc3MgPSBzdHlsZWQuc3ZnPHskaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW59PmBcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICAke3Byb3BzID0+XG4gICAgcHJvcHMuJGluZGV0ZXJtaW5hdGUgJiZcbiAgICBjc3NgXG4gICAgICBhbmltYXRpb246ICR7c3Bpbn0gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgYH1cbmA7XG5cbmV4cG9ydCB0eXBlIERhdGFzZXRSZWZyZXNoUHJvZ3Jlc3NJY29uUHJvcHMgPSB7XG4gIC8qKiBEb3dubG9hZCBwcm9ncmVzcyBmcm9tIDDigJMxMDAuIE9taXQgb3IgMCBmb3IgYW4gaW5kZXRlcm1pbmF0ZSBzcGlubmVyLiAqL1xuICBwZXJjZW50PzogbnVtYmVyO1xuICBzaXplPzogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBDaXJjdWxhciByZWZyZXNoIGluZGljYXRvcjogc3Bpbm5pbmcgYXJjIHdoaWxlIHNpemUgaXMgdW5rbm93biwgZmlsbGluZyByaW5nXG4gKiB3aGVuIENvbnRlbnQtTGVuZ3RoIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YXNldFJlZnJlc2hQcm9ncmVzc0ljb24oe1xuICBwZXJjZW50LFxuICBzaXplID0gMTRcbn06IERhdGFzZXRSZWZyZXNoUHJvZ3Jlc3NJY29uUHJvcHMpIHtcbiAgY29uc3Qgc3Ryb2tlV2lkdGggPSAyO1xuICBjb25zdCByYWRpdXMgPSAoc2l6ZSAtIHN0cm9rZVdpZHRoKSAvIDI7XG4gIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqIHJhZGl1cztcbiAgY29uc3QgZGV0ZXJtaW5hdGUgPSB0eXBlb2YgcGVyY2VudCA9PT0gJ251bWJlcicgJiYgcGVyY2VudCA+IDA7XG4gIGNvbnN0IGNsYW1wZWQgPSBkZXRlcm1pbmF0ZSA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcGVyY2VudCkpIDogMDtcbiAgY29uc3QgZGFzaE9mZnNldCA9IGRldGVybWluYXRlID8gY2lyY3VtZmVyZW5jZSAqICgxIC0gY2xhbXBlZCAvIDEwMCkgOiBjaXJjdW1mZXJlbmNlICogMC43NTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRQcm9ncmVzc1xuICAgICAgJGluZGV0ZXJtaW5hdGU9eyFkZXRlcm1pbmF0ZX1cbiAgICAgIHdpZHRoPXtzaXplfVxuICAgICAgaGVpZ2h0PXtzaXplfVxuICAgICAgdmlld0JveD17YDAgMCAke3NpemV9ICR7c2l6ZX1gfVxuICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICBhcmlhLXZhbHVlbWF4PXsxMDB9XG4gICAgICBhcmlhLXZhbHVlbm93PXtkZXRlcm1pbmF0ZSA/IE1hdGgucm91bmQoY2xhbXBlZCkgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAgPGNpcmNsZVxuICAgICAgICBjeD17c2l6ZSAvIDJ9XG4gICAgICAgIGN5PXtzaXplIC8gMn1cbiAgICAgICAgcj17cmFkaXVzfVxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIHN0cm9rZVdpZHRoPXtzdHJva2VXaWR0aH1cbiAgICAgICAgb3BhY2l0eT17MC4yNX1cbiAgICAgIC8+XG4gICAgICA8Y2lyY2xlXG4gICAgICAgIGN4PXtzaXplIC8gMn1cbiAgICAgICAgY3k9e3NpemUgLyAyfVxuICAgICAgICByPXtyYWRpdXN9XG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlV2lkdGg9e3N0cm9rZVdpZHRofVxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VEYXNoYXJyYXk9e2NpcmN1bWZlcmVuY2V9XG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ9e2Rhc2hPZmZzZXR9XG4gICAgICAgIHRyYW5zZm9ybT17YHJvdGF0ZSgtOTAgJHtzaXplIC8gMn0gJHtzaXplIC8gMn0pYH1cbiAgICAgIC8+XG4gICAgPC9TdHlsZWRQcm9ncmVzcz5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9BQU9DLE1BQU0sSUFBR0MsR0FBRyxFQUFFQyxTQUFTLFFBQU8sbUJBQW1CO0FBRXhELElBQU1DLElBQUksR0FBR0QsU0FBUyxDQUFBRSxlQUFBLEtBQUFBLGVBQUEsR0FBQUMsc0JBQUEsdURBSXJCO0FBRUQsSUFBTUMsY0FBYyxHQUFHTixNQUFNLENBQUNPLEdBQUcsQ0FBQUMsZ0JBQUEsS0FBQUEsZ0JBQUEsR0FBQUgsc0JBQUEseURBRzdCLFVBQUFJLEtBQUs7RUFBQSxPQUNMQSxLQUFLLENBQUNDLGNBQWMsSUFDcEJULEdBQUcsQ0FBQVUsZ0JBQUEsS0FBQUEsZ0JBQUEsR0FBQU4sc0JBQUEsNERBQ1lGLElBQUksQ0FDbEI7QUFBQSxFQUNKO0FBUUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVNTLDBCQUEwQkEsQ0FBQUMsSUFBQSxFQUdkO0VBQUEsSUFGbENDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQUFDLFNBQUEsR0FBQUYsSUFBQSxDQUNQRyxJQUFJO0lBQUpBLElBQUksR0FBQUQsU0FBQSxjQUFHLEVBQUUsR0FBQUEsU0FBQTtFQUVULElBQU1FLFdBQVcsR0FBRyxDQUFDO0VBQ3JCLElBQU1DLE1BQU0sR0FBRyxDQUFDRixJQUFJLEdBQUdDLFdBQVcsSUFBSSxDQUFDO0VBQ3ZDLElBQU1FLGFBQWEsR0FBRyxDQUFDLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxHQUFHSCxNQUFNO0VBQzFDLElBQU1JLFdBQVcsR0FBRyxPQUFPUixPQUFPLEtBQUssUUFBUSxJQUFJQSxPQUFPLEdBQUcsQ0FBQztFQUM5RCxJQUFNUyxPQUFPLEdBQUdELFdBQVcsR0FBR0YsSUFBSSxDQUFDSSxHQUFHLENBQUMsQ0FBQyxFQUFFSixJQUFJLENBQUNLLEdBQUcsQ0FBQyxHQUFHLEVBQUVYLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUNyRSxJQUFNWSxVQUFVLEdBQUdKLFdBQVcsR0FBR0gsYUFBYSxJQUFJLENBQUMsR0FBR0ksT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHSixhQUFhLEdBQUcsSUFBSTtFQUUzRixvQkFDRXBCLEtBQUEsQ0FBQTRCLGFBQUEsQ0FBQ3JCLGNBQWM7SUFDYkksY0FBYyxFQUFFLENBQUNZLFdBQVk7SUFDN0JNLEtBQUssRUFBRVosSUFBSztJQUNaYSxNQUFNLEVBQUViLElBQUs7SUFDYmMsT0FBTyxTQUFBQyxNQUFBLENBQVNmLElBQUksT0FBQWUsTUFBQSxDQUFJZixJQUFJLENBQUc7SUFDL0JnQixJQUFJLEVBQUMsYUFBYTtJQUNsQixpQkFBZSxDQUFFO0lBQ2pCLGlCQUFlLEdBQUk7SUFDbkIsaUJBQWVWLFdBQVcsR0FBR0YsSUFBSSxDQUFDYSxLQUFLLENBQUNWLE9BQU8sQ0FBQyxHQUFHVztFQUFVLGdCQUU3RG5DLEtBQUEsQ0FBQTRCLGFBQUE7SUFDRVEsRUFBRSxFQUFFbkIsSUFBSSxHQUFHLENBQUU7SUFDYm9CLEVBQUUsRUFBRXBCLElBQUksR0FBRyxDQUFFO0lBQ2JxQixDQUFDLEVBQUVuQixNQUFPO0lBQ1ZvQixJQUFJLEVBQUMsTUFBTTtJQUNYQyxNQUFNLEVBQUMsY0FBYztJQUNyQnRCLFdBQVcsRUFBRUEsV0FBWTtJQUN6QnVCLE9BQU8sRUFBRTtFQUFLLENBQ2YsQ0FBQyxlQUNGekMsS0FBQSxDQUFBNEIsYUFBQTtJQUNFUSxFQUFFLEVBQUVuQixJQUFJLEdBQUcsQ0FBRTtJQUNib0IsRUFBRSxFQUFFcEIsSUFBSSxHQUFHLENBQUU7SUFDYnFCLENBQUMsRUFBRW5CLE1BQU87SUFDVm9CLElBQUksRUFBQyxNQUFNO0lBQ1hDLE1BQU0sRUFBQyxjQUFjO0lBQ3JCdEIsV0FBVyxFQUFFQSxXQUFZO0lBQ3pCd0IsYUFBYSxFQUFDLE9BQU87SUFDckJDLGVBQWUsRUFBRXZCLGFBQWM7SUFDL0J3QixnQkFBZ0IsRUFBRWpCLFVBQVc7SUFDN0JrQixTQUFTLGdCQUFBYixNQUFBLENBQWdCZixJQUFJLEdBQUcsQ0FBQyxPQUFBZSxNQUFBLENBQUlmLElBQUksR0FBRyxDQUFDO0VBQUksQ0FDbEQsQ0FDYSxDQUFDO0FBRXJCIiwiaWdub3JlTGlzdCI6W119
@@ -1,15 +1,17 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
3
- var _templateObject, _templateObject2;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
4
4
  // SPDX-License-Identifier: MIT
5
5
  // Copyright contributors to the kepler.gl project
6
6
 
7
7
  import React, { useCallback, useRef, useState } from 'react';
8
8
  import styled from 'styled-components';
9
+ import { useIntl } from 'react-intl';
9
10
  import { FormattedMessage } from '@kepler.gl/localization';
10
11
  import { Table } from '@kepler.gl/layers';
11
12
  import { CenterFlexbox, Tooltip } from '../../common/styled-components';
12
- import { ArrowRight, Trash } from '../../common/icons';
13
+ import { ArrowRight, Clock, Trash, WarningSign } from '../../common/icons';
14
+ import { DatasetType } from '@kepler.gl/constants';
13
15
  import DatasetTagFactory from './dataset-tag';
14
16
  import CustomPicker from '../layer-panel/custom-picker';
15
17
  import { Portaled } from '../..';
@@ -26,6 +28,10 @@ var StyledDatasetTitle = styled.div(_templateObject || (_templateObject = _tagge
26
28
  return props.theme.textColorHl;
27
29
  });
28
30
  var DataTagAction = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n margin-left: 12px;\n height: 16px;\n opacity: 0;\n"])));
31
+ var DataTagActionButton = styled.button(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 12px;\n width: 16px;\n height: 16px;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0;\n\n &:focus-visible {\n opacity: 1;\n outline: 1px solid ", ";\n outline-offset: 1px;\n }\n"])), function (props) {
32
+ return props.theme.textColorHl;
33
+ });
34
+ var StyledRefreshError = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n margin-left: 8px;\n height: 16px;\n flex-shrink: 0;\n"])));
29
35
  var ShowDataTable = function ShowDataTable(_ref) {
30
36
  var id = _ref.id,
31
37
  showDatasetTable = _ref.showDatasetTable;
@@ -46,9 +52,34 @@ var ShowDataTable = function ShowDataTable(_ref) {
46
52
  id: 'datasetTitle.showDataTable'
47
53
  }))));
48
54
  };
49
- var RemoveDataset = function RemoveDataset(_ref2) {
50
- var datasetKey = _ref2.datasetKey,
51
- removeDataset = _ref2.removeDataset;
55
+ var RefreshDatasetSettings = function RefreshDatasetSettings(_ref2) {
56
+ var id = _ref2.id,
57
+ onToggle = _ref2.onToggle;
58
+ var intl = useIntl();
59
+ return /*#__PURE__*/React.createElement(DataTagActionButton, {
60
+ type: "button",
61
+ className: "dataset-action refresh-dataset-settings",
62
+ "data-tip": true,
63
+ "data-for": "refresh-settings-".concat(id),
64
+ "aria-label": intl.formatMessage({
65
+ id: 'datasetTitle.refreshSettings'
66
+ }),
67
+ onClick: function onClick(e) {
68
+ e.stopPropagation();
69
+ onToggle === null || onToggle === void 0 || onToggle();
70
+ }
71
+ }, /*#__PURE__*/React.createElement(Clock, {
72
+ height: "16px"
73
+ }), /*#__PURE__*/React.createElement(Tooltip, {
74
+ id: "refresh-settings-".concat(id),
75
+ effect: "solid"
76
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(FormattedMessage, {
77
+ id: 'datasetTitle.refreshSettings'
78
+ }))));
79
+ };
80
+ var RemoveDataset = function RemoveDataset(_ref3) {
81
+ var datasetKey = _ref3.datasetKey,
82
+ removeDataset = _ref3.removeDataset;
52
83
  return /*#__PURE__*/React.createElement(DataTagAction, {
53
84
  className: "dataset-action remove-dataset",
54
85
  "data-tip": true,
@@ -67,15 +98,39 @@ var RemoveDataset = function RemoveDataset(_ref2) {
67
98
  id: 'datasetTitle.removeDataset'
68
99
  }))));
69
100
  };
101
+ var RefreshErrorIcon = function RefreshErrorIcon(_ref4) {
102
+ var id = _ref4.id,
103
+ message = _ref4.message;
104
+ return /*#__PURE__*/React.createElement(StyledRefreshError, {
105
+ className: "dataset-refresh-error",
106
+ "data-tip": true,
107
+ "data-for": "refresh-error-".concat(id),
108
+ onClick: function onClick(e) {
109
+ return e.stopPropagation();
110
+ },
111
+ role: "img",
112
+ "aria-label": message
113
+ }, /*#__PURE__*/React.createElement(WarningSign, {
114
+ height: "14px"
115
+ }), /*#__PURE__*/React.createElement(Tooltip, {
116
+ id: "refresh-error-".concat(id),
117
+ type: "error",
118
+ effect: "solid"
119
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(FormattedMessage, {
120
+ id: "datasetTitle.refreshFailed"
121
+ }), ': ', message)));
122
+ };
70
123
  DatasetTitleFactory.deps = [DatasetTagFactory];
71
124
  export default function DatasetTitleFactory(DatasetTag) {
72
- var DatasetTitle = function DatasetTitle(_ref3) {
73
- var showDatasetTable = _ref3.showDatasetTable,
74
- showDeleteDataset = _ref3.showDeleteDataset,
75
- onTitleClick = _ref3.onTitleClick,
76
- removeDataset = _ref3.removeDataset,
77
- dataset = _ref3.dataset,
78
- updateTableColor = _ref3.updateTableColor;
125
+ var DatasetTitle = function DatasetTitle(_ref5) {
126
+ var _dataset$metadata;
127
+ var showDatasetTable = _ref5.showDatasetTable,
128
+ showDeleteDataset = _ref5.showDeleteDataset,
129
+ onTitleClick = _ref5.onTitleClick,
130
+ removeDataset = _ref5.removeDataset,
131
+ dataset = _ref5.dataset,
132
+ updateTableColor = _ref5.updateTableColor,
133
+ onToggleRefreshSettings = _ref5.onToggleRefreshSettings;
79
134
  var _useState = useState(false),
80
135
  _useState2 = _slicedToArray(_useState, 2),
81
136
  displayColorPicker = _useState2[0],
@@ -100,6 +155,8 @@ export default function DatasetTitleFactory(DatasetTag) {
100
155
  showDatasetTable(datasetId);
101
156
  }
102
157
  }, [onTitleClick, showDatasetTable, datasetId, dataset.disableDataOperation]);
158
+ var isRemote = dataset.type === DatasetType.EXTERNALLY_HOSTED;
159
+ var refreshError = (_dataset$metadata = dataset.metadata) === null || _dataset$metadata === void 0 ? void 0 : _dataset$metadata.refreshError;
103
160
  return /*#__PURE__*/React.createElement("div", {
104
161
  className: "custom-palette-panel",
105
162
  ref: root
@@ -123,9 +180,15 @@ export default function DatasetTitleFactory(DatasetTag) {
123
180
  className: "source-data-arrow"
124
181
  }, /*#__PURE__*/React.createElement(ArrowRight, {
125
182
  height: "12px"
126
- })) : null, showDatasetTable && !dataset.disableDataOperation ? /*#__PURE__*/React.createElement(ShowDataTable, {
183
+ })) : null, refreshError ? /*#__PURE__*/React.createElement(RefreshErrorIcon, {
184
+ id: datasetId,
185
+ message: refreshError
186
+ }) : null, showDatasetTable && !dataset.disableDataOperation ? /*#__PURE__*/React.createElement(ShowDataTable, {
127
187
  id: datasetId,
128
188
  showDatasetTable: showDatasetTable
189
+ }) : null, onToggleRefreshSettings && isRemote ? /*#__PURE__*/React.createElement(RefreshDatasetSettings, {
190
+ id: datasetId,
191
+ onToggle: onToggleRefreshSettings
129
192
  }) : null, showDeleteDataset ? /*#__PURE__*/React.createElement(RemoveDataset, {
130
193
  datasetKey: datasetId,
131
194
  removeDataset: removeDataset
@@ -133,4 +196,4 @@ export default function DatasetTitleFactory(DatasetTag) {
133
196
  };
134
197
  return DatasetTitle;
135
198
  }
136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlU3RhdGUiLCJzdHlsZWQiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiVGFibGUiLCJDZW50ZXJGbGV4Ym94IiwiVG9vbHRpcCIsIkFycm93UmlnaHQiLCJUcmFzaCIsIkRhdGFzZXRUYWdGYWN0b3J5IiwiQ3VzdG9tUGlja2VyIiwiUG9ydGFsZWQiLCJyZ2JUb0hleCIsIlN0eWxlZERhdGFzZXRUaXRsZSIsImRpdiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yIiwiJGNsaWNrYWJsZSIsInRleHRDb2xvckhsIiwiRGF0YVRhZ0FjdGlvbiIsIl90ZW1wbGF0ZU9iamVjdDIiLCJTaG93RGF0YVRhYmxlIiwiX3JlZiIsImlkIiwic2hvd0RhdGFzZXRUYWJsZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25jYXQiLCJoZWlnaHQiLCJvbkNsaWNrIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImVmZmVjdCIsIlJlbW92ZURhdGFzZXQiLCJfcmVmMiIsImRhdGFzZXRLZXkiLCJyZW1vdmVEYXRhc2V0IiwidHlwZSIsIkRhdGFzZXRUaXRsZUZhY3RvcnkiLCJkZXBzIiwiRGF0YXNldFRhZyIsIkRhdGFzZXRUaXRsZSIsIl9yZWYzIiwic2hvd0RlbGV0ZURhdGFzZXQiLCJvblRpdGxlQ2xpY2siLCJkYXRhc2V0IiwidXBkYXRlVGFibGVDb2xvciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImRpc3BsYXlDb2xvclBpY2tlciIsInNldERpc3BsYXlDb2xvclBpY2tlciIsInJvb3QiLCJkYXRhc2V0SWQiLCJfaGFuZGxlQ2xpY2siLCJfaGFuZGxlQ2xvc2VQaWNrZXIiLCJfaGFuZGxlQ3VzdG9tUGlja2VyIiwiY29sb3IiLCJyZ2IiLCJyIiwiZyIsImIiLCJfb25DbGlja1RpdGxlIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJyZWYiLCJCb29sZWFuIiwib25DbGlja1NxdWFyZSIsImlzT3BlbmVkIiwibGVmdCIsInRvcCIsIm9uQ2xvc2UiLCJvbkNoYW5nZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2NvbW1vbi9kYXRhc2V0LXRpdGxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IHtUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtDZW50ZXJGbGV4Ym94LCBUb29sdGlwfSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtBcnJvd1JpZ2h0LCBUcmFzaH0gZnJvbSAnLi4vLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBEYXRhc2V0VGFnRmFjdG9yeSBmcm9tICcuL2RhdGFzZXQtdGFnJztcbmltcG9ydCBDdXN0b21QaWNrZXIgZnJvbSAnLi4vbGF5ZXItcGFuZWwvY3VzdG9tLXBpY2tlcic7XG5pbXBvcnQge1BvcnRhbGVkfSBmcm9tICcuLi8uLic7XG5pbXBvcnQge3JnYlRvSGV4fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7b3BlbkRlbGV0ZU1vZGFsLCBWaXNTdGF0ZUFjdGlvbnMsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7U3R5bGVkRGF0YXNldFRpdGxlUHJvcHMsIFJlbW92ZURhdGFzZXRQcm9wcywgU2hvd0RhdGFUYWJsZVByb3BzfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgU3R5bGVkRGF0YXNldFRpdGxlID0gc3R5bGVkLmRpdjxTdHlsZWREYXRhc2V0VGl0bGVQcm9wcz5gXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgLnNvdXJjZS1kYXRhLWFycm93IHtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgY3Vyc29yOiAke3Byb3BzID0+IChwcm9wcy4kY2xpY2thYmxlID8gJ3BvaW50ZXInIDogJ2F1dG8nKX07XG5cbiAgICAuZGF0YXNldC1uYW1lIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IChwcm9wcy4kY2xpY2thYmxlID8gcHJvcHMudGhlbWUudGV4dENvbG9ySGwgOiBwcm9wcy50aGVtZS50ZXh0Q29sb3IpfTtcbiAgICB9XG5cbiAgICAuZGF0YXNldC1hY3Rpb24ge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgLmRhdGFzZXQtYWN0aW9uOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IERhdGFUYWdBY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tbGVmdDogMTJweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBvcGFjaXR5OiAwO1xuYDtcblxudHlwZSBNaW5pRGF0YXNldCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgY29sb3I6IFJHQkNvbG9yO1xuICBsYWJlbD86IHN0cmluZztcbiAgZGlzYWJsZURhdGFPcGVyYXRpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YXNldFRpdGxlUHJvcHMgPSB7XG4gIGRhdGFzZXQ6IE1pbmlEYXRhc2V0O1xuICBzaG93RGVsZXRlRGF0YXNldDogYm9vbGVhbjtcbiAgb25UaXRsZUNsaWNrPzogKCkgPT4gdm9pZDtcbiAgc2hvd0RhdGFzZXRUYWJsZT86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5zaG93RGF0YXNldFRhYmxlPjtcbiAgdXBkYXRlVGFibGVDb2xvcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZVRhYmxlQ29sb3I+O1xuICByZW1vdmVEYXRhc2V0PzogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygb3BlbkRlbGV0ZU1vZGFsPjtcbn07XG5cbmNvbnN0IFNob3dEYXRhVGFibGUgPSAoe2lkLCBzaG93RGF0YXNldFRhYmxlfTogU2hvd0RhdGFUYWJsZVByb3BzKSA9PiAoXG4gIDxEYXRhVGFnQWN0aW9uIGNsYXNzTmFtZT1cImRhdGFzZXQtYWN0aW9uIHNob3ctZGF0YS10YWJsZVwiIGRhdGEtdGlwIGRhdGEtZm9yPXtgZGF0YS10YWJsZS0ke2lkfWB9PlxuICAgIDxUYWJsZVxuICAgICAgaGVpZ2h0PVwiMTZweFwiXG4gICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT8uKGlkKTtcbiAgICAgIH19XG4gICAgLz5cbiAgICA8VG9vbHRpcCBpZD17YGRhdGEtdGFibGUtJHtpZH1gfSBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgPHNwYW4+XG4gICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZGF0YXNldFRpdGxlLnNob3dEYXRhVGFibGUnfSAvPlxuICAgICAgPC9zcGFuPlxuICAgIDwvVG9vbHRpcD5cbiAgPC9EYXRhVGFnQWN0aW9uPlxuKTtcblxuY29uc3QgUmVtb3ZlRGF0YXNldCA9ICh7ZGF0YXNldEtleSwgcmVtb3ZlRGF0YXNldH06IFJlbW92ZURhdGFzZXRQcm9wcykgPT4gKFxuICA8RGF0YVRhZ0FjdGlvblxuICAgIGNsYXNzTmFtZT1cImRhdGFzZXQtYWN0aW9uIHJlbW92ZS1kYXRhc2V0XCJcbiAgICBkYXRhLXRpcFxuICAgIGRhdGEtZm9yPXtgZGVsZXRlLSR7ZGF0YXNldEtleX1gfVxuICA+XG4gICAgPFRyYXNoXG4gICAgICBoZWlnaHQ9XCIxNnB4XCJcbiAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZW1vdmVEYXRhc2V0Py4oZGF0YXNldEtleSk7XG4gICAgICB9fVxuICAgIC8+XG4gICAgPFRvb2x0aXAgaWQ9e2BkZWxldGUtJHtkYXRhc2V0S2V5fWB9IGVmZmVjdD1cInNvbGlkXCIgdHlwZT1cImVycm9yXCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydkYXRhc2V0VGl0bGUucmVtb3ZlRGF0YXNldCd9IC8+XG4gICAgICA8L3NwYW4+XG4gICAgPC9Ub29sdGlwPlxuICA8L0RhdGFUYWdBY3Rpb24+XG4pO1xuXG5EYXRhc2V0VGl0bGVGYWN0b3J5LmRlcHMgPSBbRGF0YXNldFRhZ0ZhY3RvcnldO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhc2V0VGl0bGVGYWN0b3J5KFxuICBEYXRhc2V0VGFnOiBSZXR1cm5UeXBlPHR5cGVvZiBEYXRhc2V0VGFnRmFjdG9yeT5cbik6IFJlYWN0LkZDPERhdGFzZXRUaXRsZVByb3BzPiB7XG4gIGNvbnN0IERhdGFzZXRUaXRsZTogUmVhY3QuRkM8RGF0YXNldFRpdGxlUHJvcHM+ID0gKHtcbiAgICBzaG93RGF0YXNldFRhYmxlLFxuICAgIHNob3dEZWxldGVEYXRhc2V0LFxuICAgIG9uVGl0bGVDbGljayxcbiAgICByZW1vdmVEYXRhc2V0LFxuICAgIGRhdGFzZXQsXG4gICAgdXBkYXRlVGFibGVDb2xvclxuICB9KSA9PiB7XG4gICAgY29uc3QgW2Rpc3BsYXlDb2xvclBpY2tlciwgc2V0RGlzcGxheUNvbG9yUGlja2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCByb290ID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGRhdGFzZXRJZCA9IGRhdGFzZXQuaWQ7XG4gICAgY29uc3QgX2hhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0RGlzcGxheUNvbG9yUGlja2VyKCFkaXNwbGF5Q29sb3JQaWNrZXIpO1xuICAgIH0sIFtzZXREaXNwbGF5Q29sb3JQaWNrZXIsIGRpc3BsYXlDb2xvclBpY2tlcl0pO1xuXG4gICAgY29uc3QgX2hhbmRsZUNsb3NlUGlja2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0RGlzcGxheUNvbG9yUGlja2VyKGZhbHNlKTtcbiAgICB9LCBbc2V0RGlzcGxheUNvbG9yUGlja2VyXSk7XG4gICAgY29uc3QgX2hhbmRsZUN1c3RvbVBpY2tlciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGNvbG9yOiB7cmdiOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSkgPT4ge1xuICAgICAgICB1cGRhdGVUYWJsZUNvbG9yKGRhdGFzZXRJZCwgW2NvbG9yLnJnYi5yLCBjb2xvci5yZ2IuZywgY29sb3IucmdiLmJdKTtcbiAgICAgIH0sXG4gICAgICBbdXBkYXRlVGFibGVDb2xvciwgZGF0YXNldElkXVxuICAgICk7XG5cbiAgICBjb25zdCBfb25DbGlja1RpdGxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvblRpdGxlQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvblRpdGxlQ2xpY2soKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2hvd0RhdGFzZXRUYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlmIChkYXRhc2V0LmRpc2FibGVEYXRhT3BlcmF0aW9uKSByZXR1cm47XG4gICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZShkYXRhc2V0SWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW29uVGl0bGVDbGljaywgc2hvd0RhdGFzZXRUYWJsZSwgZGF0YXNldElkLCBkYXRhc2V0LmRpc2FibGVEYXRhT3BlcmF0aW9uXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjdXN0b20tcGFsZXR0ZS1wYW5lbFwiIHJlZj17cm9vdH0+XG4gICAgICAgIDxTdHlsZWREYXRhc2V0VGl0bGVcbiAgICAgICAgICBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS10aXRsZVwiXG4gICAgICAgICAgJGNsaWNrYWJsZT17Qm9vbGVhbihzaG93RGF0YXNldFRhYmxlIHx8IG9uVGl0bGVDbGljayl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGF0YXNldFRhZ1xuICAgICAgICAgICAgZGF0YXNldD17ZGF0YXNldH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e19vbkNsaWNrVGl0bGV9XG4gICAgICAgICAgICB1cGRhdGVUYWJsZUNvbG9yPXt1cGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgICAgb25DbGlja1NxdWFyZT17X2hhbmRsZUNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBvcnRhbGVkXG4gICAgICAgICAgICBpc09wZW5lZD17ZGlzcGxheUNvbG9yUGlja2VyICE9PSBmYWxzZX1cbiAgICAgICAgICAgIGxlZnQ9ezExMH1cbiAgICAgICAgICAgIHRvcD17LTUwfVxuICAgICAgICAgICAgb25DbG9zZT17X2hhbmRsZUNsb3NlUGlja2VyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDdXN0b21QaWNrZXIgY29sb3I9e3JnYlRvSGV4KGRhdGFzZXQuY29sb3IpfSBvbkNoYW5nZT17X2hhbmRsZUN1c3RvbVBpY2tlcn0gLz5cbiAgICAgICAgICA8L1BvcnRhbGVkPlxuICAgICAgICAgIHtzaG93RGF0YXNldFRhYmxlID8gKFxuICAgICAgICAgICAgPENlbnRlckZsZXhib3ggY2xhc3NOYW1lPVwic291cmNlLWRhdGEtYXJyb3dcIj5cbiAgICAgICAgICAgICAgPEFycm93UmlnaHQgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgICA8L0NlbnRlckZsZXhib3g+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3Nob3dEYXRhc2V0VGFibGUgJiYgIWRhdGFzZXQuZGlzYWJsZURhdGFPcGVyYXRpb24gPyAoXG4gICAgICAgICAgICA8U2hvd0RhdGFUYWJsZSBpZD17ZGF0YXNldElkfSBzaG93RGF0YXNldFRhYmxlPXtzaG93RGF0YXNldFRhYmxlfSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtzaG93RGVsZXRlRGF0YXNldCA/IChcbiAgICAgICAgICAgIDxSZW1vdmVEYXRhc2V0IGRhdGFzZXRLZXk9e2RhdGFzZXRJZH0gcmVtb3ZlRGF0YXNldD17cmVtb3ZlRGF0YXNldH0gLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWREYXRhc2V0VGl0bGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBEYXRhc2V0VGl0bGU7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsS0FBSyxJQUFHQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFPLE9BQU87QUFDMUQsT0FBT0MsTUFBTSxNQUFNLG1CQUFtQjtBQUN0QyxTQUFRQyxnQkFBZ0IsUUFBTyx5QkFBeUI7QUFFeEQsU0FBUUMsS0FBSyxRQUFPLG1CQUFtQjtBQUN2QyxTQUFRQyxhQUFhLEVBQUVDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDckUsU0FBUUMsVUFBVSxFQUFFQyxLQUFLLFFBQU8sb0JBQW9CO0FBQ3BELE9BQU9DLGlCQUFpQixNQUFNLGVBQWU7QUFDN0Ms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
199
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlU3RhdGUiLCJzdHlsZWQiLCJ1c2VJbnRsIiwiRm9ybWF0dGVkTWVzc2FnZSIsIlRhYmxlIiwiQ2VudGVyRmxleGJveCIsIlRvb2x0aXAiLCJBcnJvd1JpZ2h0IiwiQ2xvY2siLCJUcmFzaCIsIldhcm5pbmdTaWduIiwiRGF0YXNldFR5cGUiLCJEYXRhc2V0VGFnRmFjdG9yeSIsIkN1c3RvbVBpY2tlciIsIlBvcnRhbGVkIiwicmdiVG9IZXgiLCJTdHlsZWREYXRhc2V0VGl0bGUiLCJkaXYiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwicHJvcHMiLCJ0aGVtZSIsInRleHRDb2xvciIsIiRjbGlja2FibGUiLCJ0ZXh0Q29sb3JIbCIsIkRhdGFUYWdBY3Rpb24iLCJfdGVtcGxhdGVPYmplY3QyIiwiRGF0YVRhZ0FjdGlvbkJ1dHRvbiIsImJ1dHRvbiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJTdHlsZWRSZWZyZXNoRXJyb3IiLCJfdGVtcGxhdGVPYmplY3Q0IiwiU2hvd0RhdGFUYWJsZSIsIl9yZWYiLCJpZCIsInNob3dEYXRhc2V0VGFibGUiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29uY2F0IiwiaGVpZ2h0Iiwib25DbGljayIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJlZmZlY3QiLCJSZWZyZXNoRGF0YXNldFNldHRpbmdzIiwiX3JlZjIiLCJvblRvZ2dsZSIsImludGwiLCJ0eXBlIiwiZm9ybWF0TWVzc2FnZSIsIlJlbW92ZURhdGFzZXQiLCJfcmVmMyIsImRhdGFzZXRLZXkiLCJyZW1vdmVEYXRhc2V0IiwiUmVmcmVzaEVycm9ySWNvbiIsIl9yZWY0IiwibWVzc2FnZSIsInJvbGUiLCJEYXRhc2V0VGl0bGVGYWN0b3J5IiwiZGVwcyIsIkRhdGFzZXRUYWciLCJEYXRhc2V0VGl0bGUiLCJfcmVmNSIsIl9kYXRhc2V0JG1ldGFkYXRhIiwic2hvd0RlbGV0ZURhdGFzZXQiLCJvblRpdGxlQ2xpY2siLCJkYXRhc2V0IiwidXBkYXRlVGFibGVDb2xvciIsIm9uVG9nZ2xlUmVmcmVzaFNldHRpbmdzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGlzcGxheUNvbG9yUGlja2VyIiwic2V0RGlzcGxheUNvbG9yUGlja2VyIiwicm9vdCIsImRhdGFzZXRJZCIsIl9oYW5kbGVDbGljayIsIl9oYW5kbGVDbG9zZVBpY2tlciIsIl9oYW5kbGVDdXN0b21QaWNrZXIiLCJjb2xvciIsInJnYiIsInIiLCJnIiwiYiIsIl9vbkNsaWNrVGl0bGUiLCJkaXNhYmxlRGF0YU9wZXJhdGlvbiIsImlzUmVtb3RlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJyZWZyZXNoRXJyb3IiLCJtZXRhZGF0YSIsInJlZiIsIkJvb2xlYW4iLCJvbkNsaWNrU3F1YXJlIiwiaXNPcGVuZWQiLCJsZWZ0IiwidG9wIiwib25DbG9zZSIsIm9uQ2hhbmdlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvY29tbW9uL2RhdGFzZXQtdGl0bGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7dXNlSW50bH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IHtUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtDZW50ZXJGbGV4Ym94LCBUb29sdGlwfSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtBcnJvd1JpZ2h0LCBDbG9jaywgVHJhc2gsIFdhcm5pbmdTaWdufSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtEYXRhc2V0VHlwZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IERhdGFzZXRUYWdGYWN0b3J5IGZyb20gJy4vZGF0YXNldC10YWcnO1xuaW1wb3J0IEN1c3RvbVBpY2tlciBmcm9tICcuLi9sYXllci1wYW5lbC9jdXN0b20tcGlja2VyJztcbmltcG9ydCB7UG9ydGFsZWR9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7cmdiVG9IZXh9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtvcGVuRGVsZXRlTW9kYWwsIFZpc1N0YXRlQWN0aW9ucywgQWN0aW9uSGFuZGxlcn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7UkdCQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtTdHlsZWREYXRhc2V0VGl0bGVQcm9wcywgUmVtb3ZlRGF0YXNldFByb3BzLCBTaG93RGF0YVRhYmxlUHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBTdHlsZWREYXRhc2V0VGl0bGUgPSBzdHlsZWQuZGl2PFN0eWxlZERhdGFzZXRUaXRsZVByb3BzPmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAuc291cmNlLWRhdGEtYXJyb3cge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxuICAmOmhvdmVyIHtcbiAgICBjdXJzb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRjbGlja2FibGUgPyAncG9pbnRlcicgOiAnYXV0bycpfTtcblxuICAgIC5kYXRhc2V0LW5hbWUge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRjbGlja2FibGUgPyBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbCA6IHByb3BzLnRoZW1lLnRleHRDb2xvcil9O1xuICAgIH1cblxuICAgIC5kYXRhc2V0LWFjdGlvbiB7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuZGF0YXNldC1hY3Rpb246aG92ZXIge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgRGF0YVRhZ0FjdGlvbiA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIG9wYWNpdHk6IDA7XG5gO1xuXG5jb25zdCBEYXRhVGFnQWN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogMTJweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMDtcblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgb3V0bGluZTogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFJlZnJlc2hFcnJvciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogOHB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuYDtcblxudHlwZSBNaW5pRGF0YXNldCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgY29sb3I6IFJHQkNvbG9yO1xuICBsYWJlbD86IHN0cmluZztcbiAgZGlzYWJsZURhdGFPcGVyYXRpb24/OiBib29sZWFuO1xuICB0eXBlPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICByZWZyZXNoRXJyb3I/OiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhc2V0VGl0bGVQcm9wcyA9IHtcbiAgZGF0YXNldDogTWluaURhdGFzZXQ7XG4gIHNob3dEZWxldGVEYXRhc2V0OiBib29sZWFuO1xuICBvblRpdGxlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBzaG93RGF0YXNldFRhYmxlPzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnNob3dEYXRhc2V0VGFibGU+O1xuICB1cGRhdGVUYWJsZUNvbG9yOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMudXBkYXRlVGFibGVDb2xvcj47XG4gIHJlbW92ZURhdGFzZXQ/OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBvcGVuRGVsZXRlTW9kYWw+O1xuICBvblRvZ2dsZVJlZnJlc2hTZXR0aW5ncz86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBTaG93RGF0YVRhYmxlID0gKHtpZCwgc2hvd0RhdGFzZXRUYWJsZX06IFNob3dEYXRhVGFibGVQcm9wcykgPT4gKFxuICA8RGF0YVRhZ0FjdGlvbiBjbGFzc05hbWU9XCJkYXRhc2V0LWFjdGlvbiBzaG93LWRhdGEtdGFibGVcIiBkYXRhLXRpcCBkYXRhLWZvcj17YGRhdGEtdGFibGUtJHtpZH1gfT5cbiAgICA8VGFibGVcbiAgICAgIGhlaWdodD1cIjE2cHhcIlxuICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNob3dEYXRhc2V0VGFibGU/LihpZCk7XG4gICAgICB9fVxuICAgIC8+XG4gICAgPFRvb2x0aXAgaWQ9e2BkYXRhLXRhYmxlLSR7aWR9YH0gZWZmZWN0PVwic29saWRcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2RhdGFzZXRUaXRsZS5zaG93RGF0YVRhYmxlJ30gLz5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L1Rvb2x0aXA+XG4gIDwvRGF0YVRhZ0FjdGlvbj5cbik7XG5cbmNvbnN0IFJlZnJlc2hEYXRhc2V0U2V0dGluZ3MgPSAoe2lkLCBvblRvZ2dsZX06IHtpZDogc3RyaW5nOyBvblRvZ2dsZT86ICgpID0+IHZvaWR9KSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIHJldHVybiAoXG4gICAgPERhdGFUYWdBY3Rpb25CdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiZGF0YXNldC1hY3Rpb24gcmVmcmVzaC1kYXRhc2V0LXNldHRpbmdzXCJcbiAgICAgIGRhdGEtdGlwXG4gICAgICBkYXRhLWZvcj17YHJlZnJlc2gtc2V0dGluZ3MtJHtpZH1gfVxuICAgICAgYXJpYS1sYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoU2V0dGluZ3MnfSl9XG4gICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25Ub2dnbGU/LigpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q2xvY2sgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICA8VG9vbHRpcCBpZD17YHJlZnJlc2gtc2V0dGluZ3MtJHtpZH1gfSBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2RhdGFzZXRUaXRsZS5yZWZyZXNoU2V0dGluZ3MnfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L1Rvb2x0aXA+XG4gICAgPC9EYXRhVGFnQWN0aW9uQnV0dG9uPlxuICApO1xufTtcblxuY29uc3QgUmVtb3ZlRGF0YXNldCA9ICh7ZGF0YXNldEtleSwgcmVtb3ZlRGF0YXNldH06IFJlbW92ZURhdGFzZXRQcm9wcykgPT4gKFxuICA8RGF0YVRhZ0FjdGlvblxuICAgIGNsYXNzTmFtZT1cImRhdGFzZXQtYWN0aW9uIHJlbW92ZS1kYXRhc2V0XCJcbiAgICBkYXRhLXRpcFxuICAgIGRhdGEtZm9yPXtgZGVsZXRlLSR7ZGF0YXNldEtleX1gfVxuICA+XG4gICAgPFRyYXNoXG4gICAgICBoZWlnaHQ9XCIxNnB4XCJcbiAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZW1vdmVEYXRhc2V0Py4oZGF0YXNldEtleSk7XG4gICAgICB9fVxuICAgIC8+XG4gICAgPFRvb2x0aXAgaWQ9e2BkZWxldGUtJHtkYXRhc2V0S2V5fWB9IGVmZmVjdD1cInNvbGlkXCIgdHlwZT1cImVycm9yXCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydkYXRhc2V0VGl0bGUucmVtb3ZlRGF0YXNldCd9IC8+XG4gICAgICA8L3NwYW4+XG4gICAgPC9Ub29sdGlwPlxuICA8L0RhdGFUYWdBY3Rpb24+XG4pO1xuXG5jb25zdCBSZWZyZXNoRXJyb3JJY29uID0gKHtpZCwgbWVzc2FnZX06IHtpZDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmd9KSA9PiAoXG4gIDxTdHlsZWRSZWZyZXNoRXJyb3JcbiAgICBjbGFzc05hbWU9XCJkYXRhc2V0LXJlZnJlc2gtZXJyb3JcIlxuICAgIGRhdGEtdGlwXG4gICAgZGF0YS1mb3I9e2ByZWZyZXNoLWVycm9yLSR7aWR9YH1cbiAgICBvbkNsaWNrPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgcm9sZT1cImltZ1wiXG4gICAgYXJpYS1sYWJlbD17bWVzc2FnZX1cbiAgPlxuICAgIDxXYXJuaW5nU2lnbiBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICA8VG9vbHRpcCBpZD17YHJlZnJlc2gtZXJyb3ItJHtpZH1gfSB0eXBlPVwiZXJyb3JcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgPHNwYW4+XG4gICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiZGF0YXNldFRpdGxlLnJlZnJlc2hGYWlsZWRcIiAvPlxuICAgICAgICB7JzogJ31cbiAgICAgICAge21lc3NhZ2V9XG4gICAgICA8L3NwYW4+XG4gICAgPC9Ub29sdGlwPlxuICA8L1N0eWxlZFJlZnJlc2hFcnJvcj5cbik7XG5cbkRhdGFzZXRUaXRsZUZhY3RvcnkuZGVwcyA9IFtEYXRhc2V0VGFnRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFzZXRUaXRsZUZhY3RvcnkoXG4gIERhdGFzZXRUYWc6IFJldHVyblR5cGU8dHlwZW9mIERhdGFzZXRUYWdGYWN0b3J5PlxuKTogUmVhY3QuRkM8RGF0YXNldFRpdGxlUHJvcHM+IHtcbiAgY29uc3QgRGF0YXNldFRpdGxlOiBSZWFjdC5GQzxEYXRhc2V0VGl0bGVQcm9wcz4gPSAoe1xuICAgIHNob3dEYXRhc2V0VGFibGUsXG4gICAgc2hvd0RlbGV0ZURhdGFzZXQsXG4gICAgb25UaXRsZUNsaWNrLFxuICAgIHJlbW92ZURhdGFzZXQsXG4gICAgZGF0YXNldCxcbiAgICB1cGRhdGVUYWJsZUNvbG9yLFxuICAgIG9uVG9nZ2xlUmVmcmVzaFNldHRpbmdzXG4gIH0pID0+IHtcbiAgICBjb25zdCBbZGlzcGxheUNvbG9yUGlja2VyLCBzZXREaXNwbGF5Q29sb3JQaWNrZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHJvb3QgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgZGF0YXNldElkID0gZGF0YXNldC5pZDtcbiAgICBjb25zdCBfaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXREaXNwbGF5Q29sb3JQaWNrZXIoIWRpc3BsYXlDb2xvclBpY2tlcik7XG4gICAgfSwgW3NldERpc3BsYXlDb2xvclBpY2tlciwgZGlzcGxheUNvbG9yUGlja2VyXSk7XG5cbiAgICBjb25zdCBfaGFuZGxlQ2xvc2VQaWNrZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXREaXNwbGF5Q29sb3JQaWNrZXIoZmFsc2UpO1xuICAgIH0sIFtzZXREaXNwbGF5Q29sb3JQaWNrZXJdKTtcbiAgICBjb25zdCBfaGFuZGxlQ3VzdG9tUGlja2VyID0gdXNlQ2FsbGJhY2soXG4gICAgICAoY29sb3I6IHtyZ2I6IFJlY29yZDxzdHJpbmcsIG51bWJlcj59KSA9PiB7XG4gICAgICAgIHVwZGF0ZVRhYmxlQ29sb3IoZGF0YXNldElkLCBbY29sb3IucmdiLnIsIGNvbG9yLnJnYi5nLCBjb2xvci5yZ2IuYl0pO1xuICAgICAgfSxcbiAgICAgIFt1cGRhdGVUYWJsZUNvbG9yLCBkYXRhc2V0SWRdXG4gICAgKTtcblxuICAgIGNvbnN0IF9vbkNsaWNrVGl0bGUgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uVGl0bGVDbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uVGl0bGVDbGljaygpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaG93RGF0YXNldFRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKGRhdGFzZXQuZGlzYWJsZURhdGFPcGVyYXRpb24pIHJldHVybjtcbiAgICAgICAgICBzaG93RGF0YXNldFRhYmxlKGRhdGFzZXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbb25UaXRsZUNsaWNrLCBzaG93RGF0YXNldFRhYmxlLCBkYXRhc2V0SWQsIGRhdGFzZXQuZGlzYWJsZURhdGFPcGVyYXRpb25dXG4gICAgKTtcblxuICAgIGNvbnN0IGlzUmVtb3RlID0gZGF0YXNldC50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRDtcbiAgICBjb25zdCByZWZyZXNoRXJyb3IgPSBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoRXJyb3I7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjdXN0b20tcGFsZXR0ZS1wYW5lbFwiIHJlZj17cm9vdH0+XG4gICAgICAgIDxTdHlsZWREYXRhc2V0VGl0bGVcbiAgICAgICAgICBjbGFzc05hbWU9XCJzb3VyY2UtZGF0YS10aXRsZVwiXG4gICAgICAgICAgJGNsaWNrYWJsZT17Qm9vbGVhbihzaG93RGF0YXNldFRhYmxlIHx8IG9uVGl0bGVDbGljayl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGF0YXNldFRhZ1xuICAgICAgICAgICAgZGF0YXNldD17ZGF0YXNldH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e19vbkNsaWNrVGl0bGV9XG4gICAgICAgICAgICB1cGRhdGVUYWJsZUNvbG9yPXt1cGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgICAgb25DbGlja1NxdWFyZT17X2hhbmRsZUNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBvcnRhbGVkXG4gICAgICAgICAgICBpc09wZW5lZD17ZGlzcGxheUNvbG9yUGlja2VyICE9PSBmYWxzZX1cbiAgICAgICAgICAgIGxlZnQ9ezExMH1cbiAgICAgICAgICAgIHRvcD17LTUwfVxuICAgICAgICAgICAgb25DbG9zZT17X2hhbmRsZUNsb3NlUGlja2VyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDdXN0b21QaWNrZXIgY29sb3I9e3JnYlRvSGV4KGRhdGFzZXQuY29sb3IpfSBvbkNoYW5nZT17X2hhbmRsZUN1c3RvbVBpY2tlcn0gLz5cbiAgICAgICAgICA8L1BvcnRhbGVkPlxuICAgICAgICAgIHtzaG93RGF0YXNldFRhYmxlID8gKFxuICAgICAgICAgICAgPENlbnRlckZsZXhib3ggY2xhc3NOYW1lPVwic291cmNlLWRhdGEtYXJyb3dcIj5cbiAgICAgICAgICAgICAgPEFycm93UmlnaHQgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgICA8L0NlbnRlckZsZXhib3g+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3JlZnJlc2hFcnJvciA/IDxSZWZyZXNoRXJyb3JJY29uIGlkPXtkYXRhc2V0SWR9IG1lc3NhZ2U9e3JlZnJlc2hFcnJvcn0gLz4gOiBudWxsfVxuICAgICAgICAgIHtzaG93RGF0YXNldFRhYmxlICYmICFkYXRhc2V0LmRpc2FibGVEYXRhT3BlcmF0aW9uID8gKFxuICAgICAgICAgICAgPFNob3dEYXRhVGFibGUgaWQ9e2RhdGFzZXRJZH0gc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX0gLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7b25Ub2dnbGVSZWZyZXNoU2V0dGluZ3MgJiYgaXNSZW1vdGUgPyAoXG4gICAgICAgICAgICA8UmVmcmVzaERhdGFzZXRTZXR0aW5ncyBpZD17ZGF0YXNldElkfSBvblRvZ2dsZT17b25Ub2dnbGVSZWZyZXNoU2V0dGluZ3N9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3Nob3dEZWxldGVEYXRhc2V0ID8gKFxuICAgICAgICAgICAgPFJlbW92ZURhdGFzZXQgZGF0YXNldEtleT17ZGF0YXNldElkfSByZW1vdmVEYXRhc2V0PXtyZW1vdmVEYXRhc2V0fSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZERhdGFzZXRUaXRsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIERhdGFzZXRUaXRsZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxLQUFLLElBQUdDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQU8sT0FBTztBQUMxRCxPQUFPQyxNQUFNLE1BQU0sbUJBQW1CO0FBQ3RDLFNBQVFDLE9BQU8sUUFB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